From 59581b3c574453ee38e86020adb5745d21471ef4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 23 Dec 2019 13:33:06 -0500 Subject: region_map through sub_80BFFD0 --- asm/region_map.s | 365 -------------------------------------- data/region_map.s | 70 +++++++- data/text/map_section_names.inc | 327 ---------------------------------- include/constants/region_map.h | 5 + ld_script.txt | 2 + src/data/text/map_section_names.h | 109 ++++++++++++ src/region_map.c | 160 +++++++++++++++++ sym_ewram.txt | 29 +-- 8 files changed, 341 insertions(+), 726 deletions(-) delete mode 100644 data/text/map_section_names.inc create mode 100644 src/data/text/map_section_names.h create mode 100644 src/region_map.c diff --git a/asm/region_map.s b/asm/region_map.s index 662c65fa7..5c01074a9 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,371 +5,6 @@ .text - thumb_func_start sub_80BFE18 -sub_80BFE18: @ 80BFE18 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r6, r0, 0 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r2, 16 - mov r9, r2 - cmp r1, 0 - beq _080BFE92 - movs r0, 0x1F - mov r10, r0 - mov r8, r1 -_080BFE38: - ldrh r1, [r6] - movs r0, 0x1F - ands r0, r1 - lsls r1, 16 - lsrs r5, r1, 21 - mov r2, r10 - ands r5, r2 - lsrs r4, r1, 26 - ands r4, r2 - lsls r0, 8 - movs r1, 0x64 - bl __divsi3 - mov r1, r9 - muls r1, r0 - adds r0, r1, 0 - asrs r7, r0, 8 - lsls r0, r5, 8 - movs r1, 0x64 - bl __divsi3 - mov r2, r9 - muls r2, r0 - adds r0, r2, 0 - asrs r5, r0, 8 - lsls r0, r4, 8 - movs r1, 0x64 - bl __divsi3 - mov r1, r9 - muls r1, r0 - adds r0, r1, 0 - asrs r4, r0, 8 - lsls r0, r4, 10 - lsls r1, r5, 5 - orrs r0, r1 - orrs r0, r7 - strh r0, [r6] - adds r6, 0x2 - movs r2, 0x1 - negs r2, r2 - add r8, r2 - mov r0, r8 - cmp r0, 0 - bne _080BFE38 -_080BFE92: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80BFE18 - - thumb_func_start sub_80BFEA0 -sub_80BFEA0: @ 80BFEA0 - push {r4,lr} - sub sp, 0x20 - ldr r4, _080BFED8 @ =gUnknown_83EF2DC + 0x40 - adds r0, r4, 0 - mov r1, sp - movs r2, 0x10 - bl CpuSet - mov r0, sp - movs r1, 0x10 - movs r2, 0x5F - bl sub_80BFE18 - mov r0, sp - movs r1, 0x20 - movs r2, 0x20 - bl LoadPalette - adds r4, 0x1E - adds r0, r4, 0 - movs r1, 0x2F - movs r2, 0x2 - bl LoadPalette - add sp, 0x20 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080BFED8: .4byte gUnknown_83EF2DC + 0x40 - thumb_func_end sub_80BFEA0 - - thumb_func_start sub_80BFEDC -sub_80BFEDC: @ 80BFEDC - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r4, _080BFEFC @ =gUnknown_20399D4 - ldr r0, _080BFF00 @ =0x000047c0 - bl AllocZeroed - adds r2, r0, 0 - str r2, [r4] - cmp r2, 0 - bne _080BFF08 - ldr r0, _080BFF04 @ =CB2_ReturnToField - bl SetMainCallback2 - b _080BFF38 - .align 2, 0 -_080BFEFC: .4byte gUnknown_20399D4 -_080BFF00: .4byte 0x000047c0 -_080BFF04: .4byte CB2_ReturnToField -_080BFF08: - ldr r1, _080BFF40 @ =gUnknown_2031DE0 - movs r0, 0x1 - strb r0, [r1] - ldr r1, _080BFF44 @ =0x00004796 - adds r0, r2, r1 - movs r1, 0 - strb r5, [r0] - ldr r0, [r4] - ldr r2, _080BFF48 @ =0x000047a0 - adds r0, r2 - strb r1, [r0] - ldr r0, [r4] - adds r2, 0x4 - adds r0, r2 - strb r1, [r0] - ldr r0, [r4] - adds r2, 0x4 - adds r0, r2 - strb r1, [r0] - bl sub_80BFFD0 - ldr r0, _080BFF4C @ =sub_80C0100 - bl SetMainCallback2 -_080BFF38: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080BFF40: .4byte gUnknown_2031DE0 -_080BFF44: .4byte 0x00004796 -_080BFF48: .4byte 0x000047a0 -_080BFF4C: .4byte sub_80C0100 - thumb_func_end sub_80BFEDC - - thumb_func_start sub_80BFF50 -sub_80BFF50: @ 80BFF50 - push {r4-r6,lr} - adds r6, r1, 0 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r4, _080BFF70 @ =gUnknown_20399D4 - ldr r0, _080BFF74 @ =0x000047c0 - bl AllocZeroed - adds r2, r0, 0 - str r2, [r4] - cmp r2, 0 - bne _080BFF7C - ldr r0, _080BFF78 @ =CB2_ReturnToField - bl SetMainCallback2 - b _080BFFB4 - .align 2, 0 -_080BFF70: .4byte gUnknown_20399D4 -_080BFF74: .4byte 0x000047c0 -_080BFF78: .4byte CB2_ReturnToField -_080BFF7C: - ldr r1, _080BFFBC @ =gUnknown_2031DE0 - movs r0, 0x1 - strb r0, [r1] - ldr r1, _080BFFC0 @ =0x00004796 - adds r0, r2, r1 - movs r1, 0 - strb r5, [r0] - ldr r0, [r4] - ldr r2, _080BFFC4 @ =0x000047a0 - adds r0, r2 - strb r1, [r0] - ldr r0, [r4] - adds r2, 0x4 - adds r0, r2 - strb r1, [r0] - ldr r0, [r4] - adds r2, 0x4 - adds r0, r2 - strb r1, [r0] - ldr r0, [r4] - ldr r1, _080BFFC8 @ =0x000047bc - adds r0, r1 - str r6, [r0] - bl sub_80BFFD0 - ldr r0, _080BFFCC @ =sub_80C0100 - bl SetMainCallback2 -_080BFFB4: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080BFFBC: .4byte gUnknown_2031DE0 -_080BFFC0: .4byte 0x00004796 -_080BFFC4: .4byte 0x000047a0 -_080BFFC8: .4byte 0x000047bc -_080BFFCC: .4byte sub_80C0100 - thumb_func_end sub_80BFF50 - - thumb_func_start sub_80BFFD0 -sub_80BFFD0: @ 80BFFD0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r1, _080C0000 @ =gUnknown_20399D4 - ldr r2, [r1] - ldr r3, _080C0004 @ =0x00004796 - adds r0, r2, r3 - ldrb r0, [r0] - mov r8, r1 - cmp r0, 0 - blt _080BFFF2 - cmp r0, 0x1 - ble _080BFFF2 - cmp r0, 0x2 - beq _080C0010 -_080BFFF2: - mov r4, r8 - ldr r0, [r4] - ldr r1, _080C0008 @ =0x000047b8 - adds r0, r1 - ldr r1, _080C000C @ =sub_80C04E4 - str r1, [r0] - b _080C0018 - .align 2, 0 -_080C0000: .4byte gUnknown_20399D4 -_080C0004: .4byte 0x00004796 -_080C0008: .4byte 0x000047b8 -_080C000C: .4byte sub_80C04E4 -_080C0010: - ldr r3, _080C009C @ =0x000047b8 - adds r1, r2, r3 - ldr r0, _080C00A0 @ =sub_80C4F08 - str r0, [r1] -_080C0018: - movs r3, 0 - ldr r6, _080C00A4 @ =gUnknown_20399D4 - ldr r5, _080C00A8 @ =0x00004797 - ldr r4, _080C00AC @ =gUnknown_83F1B00 - ldr r2, _080C00B0 @ =0x00004796 -_080C0022: - ldr r0, [r6] - adds r1, r0, r5 - adds r1, r3 - adds r0, r2 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r3, r0 - adds r0, r4 - ldrb r0, [r0] - strb r0, [r1] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3 - bls _080C0022 - ldr r0, _080C00B4 @ =0x00000845 - bl FlagGet - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _080C0058 - ldr r0, _080C00A4 @ =gUnknown_20399D4 - ldr r0, [r0] - ldr r4, _080C00A8 @ =0x00004797 - adds r0, r4 - strb r1, [r0] -_080C0058: - movs r7, 0 - movs r1, 0 - ldr r2, _080C00B8 @ =gMapHeader - ldrb r0, [r2, 0x14] - ldr r3, _080C00A4 @ =gUnknown_20399D4 - mov r8, r3 - cmp r0, 0x8E - bls _080C00D8 - ldr r4, _080C00BC @ =gUnknown_83F1AA4 - mov r12, r4 - mov r10, r12 - mov r9, r2 -_080C0070: - movs r3, 0 - lsls r0, r1, 4 - subs r0, r1 - lsls r2, r0, 1 - mov r4, r10 - adds r0, r2, r4 - ldrb r0, [r0] - adds r5, r1, 0x1 - cmp r0, 0xC5 - beq _080C00D0 - ldr r6, _080C00BC @ =gUnknown_83F1AA4 - mov r0, r9 - ldrb r1, [r0, 0x14] - lsls r4, r5, 24 -_080C008C: - adds r0, r3, r2 - adds r0, r6 - ldrb r0, [r0] - cmp r1, r0 - bne _080C00C0 - lsrs r7, r4, 24 - b _080C00D0 - .align 2, 0 -_080C009C: .4byte 0x000047b8 -_080C00A0: .4byte sub_80C4F08 -_080C00A4: .4byte gUnknown_20399D4 -_080C00A8: .4byte 0x00004797 -_080C00AC: .4byte gUnknown_83F1B00 -_080C00B0: .4byte 0x00004796 -_080C00B4: .4byte 0x00000845 -_080C00B8: .4byte gMapHeader -_080C00BC: .4byte gUnknown_83F1AA4 -_080C00C0: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - adds r0, r3, r2 - add r0, r12 - ldrb r0, [r0] - cmp r0, 0xC5 - bne _080C008C -_080C00D0: - lsls r0, r5, 24 - lsrs r1, r0, 24 - cmp r7, 0 - beq _080C0070 -_080C00D8: - mov r1, r8 - ldr r0, [r1] - ldr r2, _080C00F8 @ =0x0000479b - adds r0, r2 - strb r7, [r0] - ldr r0, [r1] - ldr r3, _080C00FC @ =0x0000479c - adds r0, r3 - strb r7, [r0] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C00F8: .4byte 0x0000479b -_080C00FC: .4byte 0x0000479c - thumb_func_end sub_80BFFD0 - thumb_func_start sub_80C0100 sub_80C0100: @ 80C0100 push {r4,lr} diff --git a/data/region_map.s b/data/region_map.s index 5d28f9503..e2ba5e5ac 100644 --- a/data/region_map.s +++ b/data/region_map.s @@ -7,8 +7,6 @@ .section .rodata .align 2 - .include "data/text/map_section_names.inc" - gUnknown_83EF23C:: @ 83EF23C gbapal .incbin "graphics/region_map/unk_83EF23C.gbapal" @@ -239,16 +237,74 @@ gUnknown_83F1A9C:: @ 83F1A9C .4byte gUnknown_83F1A94 .4byte gUnknown_83F1A98 -gUnknown_83F1AA4:: @ 83F1AA4 - .byte 0x8f, 0x90, 0x91, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xaf, 0xb0, 0xb9, 0xc3, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +sSeviiMapsecs:: @ 83F1AA4 + .byte MAPSEC_ONE_ISLAND + .byte MAPSEC_TWO_ISLAND + .byte MAPSEC_THREE_ISLAND + .byte MAPSEC_KINDLE_ROAD + .byte MAPSEC_TREASURE_BEACH + .byte MAPSEC_CAPE_BRINK + .byte MAPSEC_BOND_BRIDGE + .byte MAPSEC_THREE_ISLE_PORT + .byte MAPSEC_MT_EMBER + .byte MAPSEC_BERRY_FOREST + .byte MAPSEC_THREE_ISLE_PATH + .byte MAPSEC_EMBER_SPA + .byte MAPSEC_NONE + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x92, 0x93, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xae, 0xb1, 0xb2, 0xb5, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte MAPSEC_FOUR_ISLAND + .byte MAPSEC_FIVE_ISLAND + .byte MAPSEC_SEVII_ISLE_6 + .byte MAPSEC_SEVII_ISLE_7 + .byte MAPSEC_SEVII_ISLE_8 + .byte MAPSEC_SEVII_ISLE_9 + .byte MAPSEC_RESORT_GORGEOUS + .byte MAPSEC_WATER_LABYRINTH + .byte MAPSEC_FIVE_ISLE_MEADOW + .byte MAPSEC_MEMORIAL_PILLAR + .byte MAPSEC_NAVEL_ROCK + .byte MAPSEC_ICEFALL_CAVE + .byte MAPSEC_ROCKET_WAREHOUSE + .byte MAPSEC_LOST_CAVE + .byte MAPSEC_NONE + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x94, 0x95, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xb3, 0xb4, 0xb6, 0xb7, 0xb8, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc5, 0x00, 0x00 + .byte MAPSEC_SEVEN_ISLAND + .byte MAPSEC_SIX_ISLAND + .byte MAPSEC_OUTCAST_ISLAND + .byte MAPSEC_GREEN_PATH + .byte MAPSEC_WATER_PATH + .byte MAPSEC_RUIN_VALLEY + .byte MAPSEC_TRAINER_TOWER + .byte MAPSEC_CANYON_ENTRANCE + .byte MAPSEC_SEVAULT_CANYON + .byte MAPSEC_TANOBY_RUINS + .byte MAPSEC_SEVII_ISLE_22 + .byte MAPSEC_SEVII_ISLE_23 + .byte MAPSEC_SEVII_ISLE_24 + .byte MAPSEC_TRAINER_TOWER_2 + .byte MAPSEC_DOTTED_HOLE + .byte MAPSEC_PATTERN_BUSH + .byte MAPSEC_ALTERING_CAVE + .byte MAPSEC_TANOBY_CHAMBERS + .byte MAPSEC_TANOBY_KEY + .byte MAPSEC_BIRTH_ISLAND + .byte MAPSEC_MONEAN_CHAMBER + .byte MAPSEC_LIPTOO_CHAMBER + .byte MAPSEC_WEEPTH_CHAMBER + .byte MAPSEC_DILFORD_CHAMBER + .byte MAPSEC_SCUFIB_CHAMBER + .byte MAPSEC_RIXY_CHAMBER + .byte MAPSEC_VIAPOIS_CHAMBER + .byte MAPSEC_NONE + .byte 0x00, 0x00 .align 2 gUnknown_83F1B00:: @ 83F1B00 - .byte 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 + .byte 1, 1, 1, 0 + .byte 0, 0, 0, 0 + .byte 0, 0, 0, 1 gUnknown_83F1B0C:: @ 83F1B0C .2byte 0x0018, 0x0010, 0x0090, 0x0020 diff --git a/data/text/map_section_names.inc b/data/text/map_section_names.inc deleted file mode 100644 index 070375510..000000000 --- a/data/text/map_section_names.inc +++ /dev/null @@ -1,327 +0,0 @@ -gMapSecName_PalletTown:: - .string "PALLET TOWN$" - -gMapSecName_ViridianCity:: - .string "VIRIDIAN CITY$" - -gMapSecName_PewterCity:: - .string "PEWTER CITY$" - -gMapSecName_CeruleanCity:: - .string "CERULEAN CITY$" - -gMapSecName_LavenderTown:: - .string "LAVENDER TOWN$" - -gMapSecName_VermilionCity:: - .string "VERMILION CITY$" - -gMapSecName_CeladonCity:: - .string "CELADON CITY$" - -gMapSecName_FuchsiaCity:: - .string "FUCHSIA CITY$" - -gMapSecName_CinnabarIsland:: - .string "CINNABAR ISLAND$" - -gMapSecName_IndigoPlateau:: - .string "INDIGO PLATEAU$" - -gMapSecName_SaffronCity:: - .string "SAFFRON CITY$" - -gMapSecName_Route4:: - .string "ROUTE 4$" - -gMapSecName_Route10:: - .string "ROUTE 10$" - -gMapSecName_Route1:: - .string "ROUTE 1$" - -gMapSecName_Route2:: - .string "ROUTE 2$" - -gMapSecName_Route3:: - .string "ROUTE 3$" - -gMapSecName_Route4_2:: - .string "ROUTE 4$" - -gMapSecName_Route5:: - .string "ROUTE 5$" - -gMapSecName_Route6:: - .string "ROUTE 6$" - -gMapSecName_Route7:: - .string "ROUTE 7$" - -gMapSecName_Route8:: - .string "ROUTE 8$" - -gMapSecName_Route9:: - .string "ROUTE 9$" - -gMapSecName_Route10_2:: - .string "ROUTE 10$" - -gMapSecName_Route11:: - .string "ROUTE 11$" - -gMapSecName_Route12:: - .string "ROUTE 12$" - -gMapSecName_Route13:: - .string "ROUTE 13$" - -gMapSecName_Route14:: - .string "ROUTE 14$" - -gMapSecName_Route15:: - .string "ROUTE 15$" - -gMapSecName_Route16:: - .string "ROUTE 16$" - -gMapSecName_Route17:: - .string "ROUTE 17$" - -gMapSecName_Route18:: - .string "ROUTE 18$" - -gMapSecName_Route19:: - .string "ROUTE 19$" - -gMapSecName_Route20:: - .string "ROUTE 20$" - -gMapSecName_Route21:: - .string "ROUTE 21$" - -gMapSecName_Route22:: - .string "ROUTE 22$" - -gMapSecName_Route23:: - .string "ROUTE 23$" - -gMapSecName_Route24:: - .string "ROUTE 24$" - -gMapSecName_Route25:: - .string "ROUTE 25$" - -gMapSecName_ViridianForest:: - .string "VIRIDIAN FOREST$" - -gMapSecName_MtMoon:: - .string "MT. MOON$" - -gMapSecName_SSAnne:: - .string "S.S. ANNE$" - -gMapSecName_UndergroundPath:: - .string "UNDERGROUND PATH$" - -gMapSecName_UndergroundPath_2:: - .string "UNDERGROUND PATH$" - -gMapSecName_DiglettsCave:: - .string "DIGLETT'S CAVE$" - -gMapSecName_VictoryRoad:: - .string "VICTORY ROAD$" - -gMapSecName_RocketHideout:: - .string "ROCKET HIDEOUT$" - -gMapSecName_SilphCo:: - .string "SILPH CO.$" - -gMapSecName_PokemonMansion:: - .string "POKéMON MANSION$" - -gMapSecName_SafariZone:: - .string "SAFARI ZONE$" - -gMapSecName_PokemonLeague:: - .string "POKéMON LEAGUE$" - -gMapSecName_RockTunnel:: - .string "ROCK TUNNEL$" - -gMapSecName_SeafoamIslands:: - .string "SEAFOAM ISLANDS$" - -gMapSecName_PokemonTower:: - .string "POKéMON TOWER$" - -gMapSecName_CeruleanCave:: - .string "CERULEAN CAVE$" - -gMapSecName_PowerPlant:: - .string "POWER PLANT$" - -gMapSecName_OneIsland:: - .string "ONE ISLAND$" - -gMapSecName_TwoIsland:: - .string "TWO ISLAND$" - -gMapSecName_ThreeIsland:: - .string "THREE ISLAND$" - -gMapSecName_FourIsland:: - .string "FOUR ISLAND$" - -gMapSecName_FiveIsland:: - .string "FIVE ISLAND$" - -gMapSecName_SevenIsland:: - .string "SEVEN ISLAND$" - -gMapSecName_SixIsland:: - .string "SIX ISLAND$" - -gMapSecName_KindleRoad:: - .string "KINDLE ROAD$" - -gMapSecName_TreasureBeach:: - .string "TREASURE BEACH$" - -gMapSecName_CapeBrink:: - .string "CAPE BRINK$" - -gMapSecName_BondBridge:: - .string "BOND BRIDGE$" - -gMapSecName_ThreeIslePort:: - .string "THREE ISLE PORT$" - -gMapSecName_SeviiIsle6:: - .string "SEVII ISLE 6$" - -gMapSecName_SeviiIsle7:: - .string "SEVII ISLE 7$" - -gMapSecName_SeviiIsle8:: - .string "SEVII ISLE 8$" - -gMapSecName_SeviiIsle9:: - .string "SEVII ISLE 9$" - -gMapSecName_ResortGorgeous:: - .string "RESORT GORGEOUS$" - -gMapSecName_WaterLabyrinth:: - .string "WATER LABYRINTH$" - -gMapSecName_FiveIsleMeadow:: - .string "FIVE ISLE MEADOW$" - -gMapSecName_MemorialPillar:: - .string "MEMORIAL PILLAR$" - -gMapSecName_OutcastIsland:: - .string "OUTCAST ISLAND$" - -gMapSecName_GreenPath:: - .string "GREEN PATH$" - -gMapSecName_WaterPath:: - .string "WATER PATH$" - -gMapSecName_RuinValley:: - .string "RUIN VALLEY$" - -gMapSecName_TrainerTower:: - .string "TRAINER TOWER$" - -gMapSecName_CanyonEntrance:: - .string "CANYON ENTRANCE$" - -gMapSecName_SevaultCanyon:: - .string "SEVAULT CANYON$" - -gMapSecName_TanobyRuins:: - .string "TANOBY RUINS$" - -gMapSecName_SeviiIsle22:: - .string "SEVII ISLE 22$" - -gMapSecName_SeviiIsle23:: - .string "SEVII ISLE 23$" - -gMapSecName_SeviiIsle24:: - .string "SEVII ISLE 24$" - -gMapSecName_NavelRock:: - .string "NAVEL ROCK$" - -gMapSecName_MtEmber:: - .string "MT. EMBER$" - -gMapSecName_BerryForest:: - .string "BERRY FOREST$" - -gMapSecName_IcefallCave:: - .string "ICEFALL CAVE$" - -gMapSecName_RocketWarehouse:: - .string "ROCKET WAREHOUSE$" - -gMapSecName_TrainerTower_2:: - .string "TRAINER TOWER$" - -gMapSecName_DottedHole:: - .string "DOTTED HOLE$" - -gMapSecName_LostCave:: - .string "LOST CAVE$" - -gMapSecName_PatternBush:: - .string "PATTERN BUSH$" - -gMapSecName_AlteringCave:: - .string "ALTERING CAVE$" - -gMapSecName_TanobyChambers:: - .string "TANOBY CHAMBERS$" - -gMapSecName_ThreeIslePath:: - .string "THREE ISLE PATH$" - -gMapSecName_TanobyKey:: - .string "TANOBY KEY$" - -gMapSecName_BirthIsland:: - .string "BIRTH ISLAND$" - -gMapSecName_MoneanChamber:: - .string "MONEAN CHAMBER$" - -gMapSecName_LiptooChamber:: - .string "LIPTOO CHAMBER$" - -gMapSecName_WeepthChamber:: - .string "WEEPTH CHAMBER$" - -gMapSecName_DilfordChamber:: - .string "DILFORD CHAMBER$" - -gMapSecName_ScufibChamber:: - .string "SCUFIB CHAMBER$" - -gMapSecName_RixyChamber:: - .string "RIXY CHAMBER$" - -gMapSecName_ViapoisChamber:: - .string "VIAPOIS CHAMBER$" - -gMapSecName_EmberSpa:: - .string "EMBER SPA$" - -gMapSecName_CeladonDept:: - .string "CELADON DEPT.$" - diff --git a/include/constants/region_map.h b/include/constants/region_map.h index 0957a72ee..e096f08a2 100644 --- a/include/constants/region_map.h +++ b/include/constants/region_map.h @@ -89,6 +89,8 @@ #define MAPSEC_SKY_PILLAR 0x55 #define MAPSEC_SECRET_BASE 0x56 #define MAPSEC_DYNAMIC 0x57 + +// Kanto landmarks #define MAPSEC_PALLET_TOWN 0x58 #define MAPSEC_VIRIDIAN_CITY 0x59 #define MAPSEC_PEWTER_CITY 0x5A @@ -144,6 +146,9 @@ #define MAPSEC_POKEMON_TOWER 0x8C #define MAPSEC_CERULEAN_CAVE 0x8D #define MAPSEC_POWER_PLANT 0x8E + +#define MAPSECS_SEVII_123 0x8F + #define MAPSEC_ONE_ISLAND 0x8F #define MAPSEC_TWO_ISLAND 0x90 #define MAPSEC_THREE_ISLAND 0x91 diff --git a/ld_script.txt b/ld_script.txt index 9b80af47a..bc926bf3c 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -181,6 +181,7 @@ SECTIONS { src/menu_helpers.o(.text); asm/script_pokemon_util_80BF8FC.o(.text); src/heal_location.o(.text); + src/region_map.o(.text); asm/region_map.o(.text); src/battle_ai_script_commands.o(.text); src/fldeff_rocksmash.o(.text); @@ -477,6 +478,7 @@ SECTIONS { src/mon_markings.o(.rodata); src/mail.o(.rodata); src/heal_location.o(.rodata); + src/region_map.o(.rodata); data/region_map.o(.rodata); src/battle_ai_script_commands.o(.rodata); data/fldeff_flash.o(.rodata); diff --git a/src/data/text/map_section_names.h b/src/data/text/map_section_names.h new file mode 100644 index 000000000..5a18fa7c9 --- /dev/null +++ b/src/data/text/map_section_names.h @@ -0,0 +1,109 @@ +const u8 gMapSecName_PalletTown[] = _("PALLET TOWN"); +const u8 gMapSecName_ViridianCity[] = _("VIRIDIAN CITY"); +const u8 gMapSecName_PewterCity[] = _("PEWTER CITY"); +const u8 gMapSecName_CeruleanCity[] = _("CERULEAN CITY"); +const u8 gMapSecName_LavenderTown[] = _("LAVENDER TOWN"); +const u8 gMapSecName_VermilionCity[] = _("VERMILION CITY"); +const u8 gMapSecName_CeladonCity[] = _("CELADON CITY"); +const u8 gMapSecName_FuchsiaCity[] = _("FUCHSIA CITY"); +const u8 gMapSecName_CinnabarIsland[] = _("CINNABAR ISLAND"); +const u8 gMapSecName_IndigoPlateau[] = _("INDIGO PLATEAU"); +const u8 gMapSecName_SaffronCity[] = _("SAFFRON CITY"); +const u8 gMapSecName_Route4[] = _("ROUTE 4"); +const u8 gMapSecName_Route10[] = _("ROUTE 10"); +const u8 gMapSecName_Route1[] = _("ROUTE 1"); +const u8 gMapSecName_Route2[] = _("ROUTE 2"); +const u8 gMapSecName_Route3[] = _("ROUTE 3"); +const u8 gMapSecName_Route4_2[] = _("ROUTE 4"); +const u8 gMapSecName_Route5[] = _("ROUTE 5"); +const u8 gMapSecName_Route6[] = _("ROUTE 6"); +const u8 gMapSecName_Route7[] = _("ROUTE 7"); +const u8 gMapSecName_Route8[] = _("ROUTE 8"); +const u8 gMapSecName_Route9[] = _("ROUTE 9"); +const u8 gMapSecName_Route10_2[] = _("ROUTE 10"); +const u8 gMapSecName_Route11[] = _("ROUTE 11"); +const u8 gMapSecName_Route12[] = _("ROUTE 12"); +const u8 gMapSecName_Route13[] = _("ROUTE 13"); +const u8 gMapSecName_Route14[] = _("ROUTE 14"); +const u8 gMapSecName_Route15[] = _("ROUTE 15"); +const u8 gMapSecName_Route16[] = _("ROUTE 16"); +const u8 gMapSecName_Route17[] = _("ROUTE 17"); +const u8 gMapSecName_Route18[] = _("ROUTE 18"); +const u8 gMapSecName_Route19[] = _("ROUTE 19"); +const u8 gMapSecName_Route20[] = _("ROUTE 20"); +const u8 gMapSecName_Route21[] = _("ROUTE 21"); +const u8 gMapSecName_Route22[] = _("ROUTE 22"); +const u8 gMapSecName_Route23[] = _("ROUTE 23"); +const u8 gMapSecName_Route24[] = _("ROUTE 24"); +const u8 gMapSecName_Route25[] = _("ROUTE 25"); +const u8 gMapSecName_ViridianForest[] = _("VIRIDIAN FOREST"); +const u8 gMapSecName_MtMoon[] = _("MT. MOON"); +const u8 gMapSecName_SSAnne[] = _("S.S. ANNE"); +const u8 gMapSecName_UndergroundPath[] = _("UNDERGROUND PATH"); +const u8 gMapSecName_UndergroundPath_2[] = _("UNDERGROUND PATH"); +const u8 gMapSecName_DiglettsCave[] = _("DIGLETT'S CAVE"); +const u8 gMapSecName_VictoryRoad[] = _("VICTORY ROAD"); +const u8 gMapSecName_RocketHideout[] = _("ROCKET HIDEOUT"); +const u8 gMapSecName_SilphCo[] = _("SILPH CO."); +const u8 gMapSecName_PokemonMansion[] = _("POKéMON MANSION"); +const u8 gMapSecName_SafariZone[] = _("SAFARI ZONE"); +const u8 gMapSecName_PokemonLeague[] = _("POKéMON LEAGUE"); +const u8 gMapSecName_RockTunnel[] = _("ROCK TUNNEL"); +const u8 gMapSecName_SeafoamIslands[] = _("SEAFOAM ISLANDS"); +const u8 gMapSecName_PokemonTower[] = _("POKéMON TOWER"); +const u8 gMapSecName_CeruleanCave[] = _("CERULEAN CAVE"); +const u8 gMapSecName_PowerPlant[] = _("POWER PLANT"); +const u8 gMapSecName_OneIsland[] = _("ONE ISLAND"); +const u8 gMapSecName_TwoIsland[] = _("TWO ISLAND"); +const u8 gMapSecName_ThreeIsland[] = _("THREE ISLAND"); +const u8 gMapSecName_FourIsland[] = _("FOUR ISLAND"); +const u8 gMapSecName_FiveIsland[] = _("FIVE ISLAND"); +const u8 gMapSecName_SevenIsland[] = _("SEVEN ISLAND"); +const u8 gMapSecName_SixIsland[] = _("SIX ISLAND"); +const u8 gMapSecName_KindleRoad[] = _("KINDLE ROAD"); +const u8 gMapSecName_TreasureBeach[] = _("TREASURE BEACH"); +const u8 gMapSecName_CapeBrink[] = _("CAPE BRINK"); +const u8 gMapSecName_BondBridge[] = _("BOND BRIDGE"); +const u8 gMapSecName_ThreeIslePort[] = _("THREE ISLE PORT"); +const u8 gMapSecName_SeviiIsle6[] = _("SEVII ISLE 6"); +const u8 gMapSecName_SeviiIsle7[] = _("SEVII ISLE 7"); +const u8 gMapSecName_SeviiIsle8[] = _("SEVII ISLE 8"); +const u8 gMapSecName_SeviiIsle9[] = _("SEVII ISLE 9"); +const u8 gMapSecName_ResortGorgeous[] = _("RESORT GORGEOUS"); +const u8 gMapSecName_WaterLabyrinth[] = _("WATER LABYRINTH"); +const u8 gMapSecName_FiveIsleMeadow[] = _("FIVE ISLE MEADOW"); +const u8 gMapSecName_MemorialPillar[] = _("MEMORIAL PILLAR"); +const u8 gMapSecName_OutcastIsland[] = _("OUTCAST ISLAND"); +const u8 gMapSecName_GreenPath[] = _("GREEN PATH"); +const u8 gMapSecName_WaterPath[] = _("WATER PATH"); +const u8 gMapSecName_RuinValley[] = _("RUIN VALLEY"); +const u8 gMapSecName_TrainerTower[] = _("TRAINER TOWER"); +const u8 gMapSecName_CanyonEntrance[] = _("CANYON ENTRANCE"); +const u8 gMapSecName_SevaultCanyon[] = _("SEVAULT CANYON"); +const u8 gMapSecName_TanobyRuins[] = _("TANOBY RUINS"); +const u8 gMapSecName_SeviiIsle22[] = _("SEVII ISLE 22"); +const u8 gMapSecName_SeviiIsle23[] = _("SEVII ISLE 23"); +const u8 gMapSecName_SeviiIsle24[] = _("SEVII ISLE 24"); +const u8 gMapSecName_NavelRock[] = _("NAVEL ROCK"); +const u8 gMapSecName_MtEmber[] = _("MT. EMBER"); +const u8 gMapSecName_BerryForest[] = _("BERRY FOREST"); +const u8 gMapSecName_IcefallCave[] = _("ICEFALL CAVE"); +const u8 gMapSecName_RocketWarehouse[] = _("ROCKET WAREHOUSE"); +const u8 gMapSecName_TrainerTower_2[] = _("TRAINER TOWER"); +const u8 gMapSecName_DottedHole[] = _("DOTTED HOLE"); +const u8 gMapSecName_LostCave[] = _("LOST CAVE"); +const u8 gMapSecName_PatternBush[] = _("PATTERN BUSH"); +const u8 gMapSecName_AlteringCave[] = _("ALTERING CAVE"); +const u8 gMapSecName_TanobyChambers[] = _("TANOBY CHAMBERS"); +const u8 gMapSecName_ThreeIslePath[] = _("THREE ISLE PATH"); +const u8 gMapSecName_TanobyKey[] = _("TANOBY KEY"); +const u8 gMapSecName_BirthIsland[] = _("BIRTH ISLAND"); +const u8 gMapSecName_MoneanChamber[] = _("MONEAN CHAMBER"); +const u8 gMapSecName_LiptooChamber[] = _("LIPTOO CHAMBER"); +const u8 gMapSecName_WeepthChamber[] = _("WEEPTH CHAMBER"); +const u8 gMapSecName_DilfordChamber[] = _("DILFORD CHAMBER"); +const u8 gMapSecName_ScufibChamber[] = _("SCUFIB CHAMBER"); +const u8 gMapSecName_RixyChamber[] = _("RIXY CHAMBER"); +const u8 gMapSecName_ViapoisChamber[] = _("VIAPOIS CHAMBER"); +const u8 gMapSecName_EmberSpa[] = _("EMBER SPA"); +const u8 gMapSecName_CeladonDept[] = _("CELADON DEPT."); diff --git a/src/region_map.c b/src/region_map.c new file mode 100644 index 000000000..97bcd476b --- /dev/null +++ b/src/region_map.c @@ -0,0 +1,160 @@ +#include "global.h" +#include "palette.h" +#include "task.h" +#include "malloc.h" +#include "overworld.h" +#include "event_data.h" +#include "region_map.h" +#include "constants/flags.h" +#include "constants/region_map.h" + +struct UnkStruct_20399D4 +{ + u8 filler_0000[0x4796]; + u8 field_4796; + u8 field_4797[4]; + u8 field_479B; + u8 field_479C; + u8 filler_479D[3]; + u8 field_47A0; + u8 filler_47A1[3]; + u8 field_47A4; + u8 filler_47A5[3]; + u8 field_47A8; + u8 filler_47A9[15]; + TaskFunc field_47B8; + MainCallback field_47BC; +}; + +EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL; +EWRAM_DATA void * gUnknown_20399D8 = NULL; +EWRAM_DATA void * gUnknown_20399DC = NULL; +EWRAM_DATA void * gUnknown_20399E0 = NULL; +EWRAM_DATA void * gUnknown_20399E4 = NULL; +EWRAM_DATA void * gUnknown_20399E8 = NULL; +EWRAM_DATA void * gUnknown_20399EC = NULL; +EWRAM_DATA void * gUnknown_20399F0[3] = {}; +EWRAM_DATA void * gUnknown_20399FC = NULL; + +static void sub_80BFFD0(void); +void sub_80C0100(void); +void sub_80C04E4(u8 taskId); +void sub_80C4F08(u8 taskId); + +#include "data/text/map_section_names.h" + +extern const u16 gUnknown_83EF2DC[]; +extern const u8 sSeviiMapsecs[3][30]; +extern const u8 gUnknown_83F1B00[3][4]; + +static void RegionMap_DarkenPalette(u16 *pal, u16 size, u16 tint) +{ + int i; + int r, g, b; + + for (i = 0; i < size; i++) + { + r = (*pal) & 0x1F; + g = ((*pal) >> 5) & 0x1F; + b = ((*pal) >> 10) & 0x1F; + + r = (((r << 8) / 100) * tint) >> 8; + g = (((g << 8) / 100) * tint) >> 8; + b = (((b << 8) / 100) * tint) >> 8; + + *pal = RGB2(r, g, b); + pal++; + } +} + +void sub_80BFEA0(void) +{ + u16 pal[16]; + CpuCopy16(&gUnknown_83EF2DC[0x20], pal, sizeof(pal)); + RegionMap_DarkenPalette(pal, NELEMS(pal), 95); + LoadPalette(pal, 0x20, 0x20); + LoadPalette(&gUnknown_83EF2DC[0x2F], 0x2F, sizeof(u16)); +} + +void sub_80BFEDC(u8 kind) +{ + gUnknown_20399D4 = AllocZeroed(sizeof(struct UnkStruct_20399D4)); + if (gUnknown_20399D4 == NULL) + { + SetMainCallback2(CB2_ReturnToField); + } + else + { + gUnknown_2031DE0 = TRUE; + gUnknown_20399D4->field_4796 = kind; + gUnknown_20399D4->field_47A0 = 0; + gUnknown_20399D4->field_47A4 = 0; + gUnknown_20399D4->field_47A8 = 0; + sub_80BFFD0(); + SetMainCallback2(sub_80C0100); + } +} + +void sub_80BFF50(u8 kind, MainCallback cb) +{ + gUnknown_20399D4 = AllocZeroed(sizeof(struct UnkStruct_20399D4)); + if (gUnknown_20399D4 == NULL) + { + SetMainCallback2(CB2_ReturnToField); + } + else + { + gUnknown_2031DE0 = TRUE; + gUnknown_20399D4->field_4796 = kind; + gUnknown_20399D4->field_47A0 = 0; + gUnknown_20399D4->field_47A4 = 0; + gUnknown_20399D4->field_47A8 = 0; + gUnknown_20399D4->field_47BC = cb; + sub_80BFFD0(); + SetMainCallback2(sub_80C0100); + } +} + +static void sub_80BFFD0(void) +{ + u8 i; + u8 j; + u8 r7; + + switch (gUnknown_20399D4->field_4796) + { + default: + case 0: + case 1: + gUnknown_20399D4->field_47B8 = sub_80C04E4; + break; + case 2: + gUnknown_20399D4->field_47B8 = sub_80C4F08; + break; + } + for (i = 0; i < 4; i++) + { + gUnknown_20399D4->field_4797[i] = gUnknown_83F1B00[gUnknown_20399D4->field_4796][i]; + } + if (!FlagGet(FLAG_SYS_SEVII_MAP_123)) + gUnknown_20399D4->field_4797[0] = FALSE; + r7 = 0; + j = 0; + if (gMapHeader.regionMapSectionId >= MAPSECS_SEVII_123) + { + while (r7 == 0) + { + for (i = 0; sSeviiMapsecs[j][i] != MAPSEC_NONE; i++) + { + if (gMapHeader.regionMapSectionId == sSeviiMapsecs[j][i]) + { + r7 = j + 1; + break; + } + } + j++; + } + } + gUnknown_20399D4->field_479B = r7; + gUnknown_20399D4->field_479C = r7; +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 963159658..9e5e91782 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -267,35 +267,10 @@ gUnknown_203998C: @ 203998C .include "src/mail.o" .align 2 .include "src/menu_helpers.o" - .align 2 -gUnknown_20399D4: @ 20399D4 - .space 0x4 - -gUnknown_20399D8: @ 20399D8 - .space 0x4 - -gUnknown_20399DC: @ 20399DC - .space 0x4 - -gUnknown_20399E0: @ 20399E0 - .space 0x4 - -gUnknown_20399E4: @ 20399E4 - .space 0x4 - -gUnknown_20399E8: @ 20399E8 - .space 0x4 - -gUnknown_20399EC: @ 20399EC - .space 0x4 - -gUnknown_20399F0: @ 20399F0 - .space 0xC - -gUnknown_20399FC: @ 20399FC - .space 0x4 + .include "src/region_map.o" + .align 2 gAIScriptPtr: @ 2039A00 .space 0x4 -- cgit v1.2.3 From 10d550d5a234649b49800b6572abfa887c50d142 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 23 Dec 2019 21:04:35 -0500 Subject: region_map through sub_80C0450 --- asm/region_map.s | 457 ------------------------------------------------------- src/region_map.c | 167 +++++++++++++++++++- 2 files changed, 166 insertions(+), 458 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index 5c01074a9..e3317d3b1 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,463 +5,6 @@ .text - thumb_func_start sub_80C0100 -sub_80C0100: @ 80C0100 - push {r4,lr} - sub sp, 0x8 - ldr r0, _080C011C @ =gUnknown_20399D4 - ldr r0, [r0] - ldr r1, _080C0120 @ =0x000047a4 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x8 - bhi _080C0202 - lsls r0, 2 - ldr r1, _080C0124 @ =_080C0128 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C011C: .4byte gUnknown_20399D4 -_080C0120: .4byte 0x000047a4 -_080C0124: .4byte _080C0128 - .align 2, 0 -_080C0128: - .4byte _080C014C - .4byte _080C0152 - .4byte _080C0158 - .4byte _080C015E - .4byte _080C016A - .4byte _080C0180 - .4byte _080C01D4 - .4byte _080C01E0 - .4byte _080C01EC -_080C014C: - bl sub_80C08E0 - b _080C021A -_080C0152: - bl sub_80C0904 - b _080C021A -_080C0158: - bl sub_80C0A6C - b _080C021A -_080C015E: - bl sub_80C0238 - lsls r0, 24 - cmp r0, 0 - beq _080C0228 - b _080C021A -_080C016A: - movs r0, 0x1E - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - b _080C01BA -_080C0180: - ldr r4, _080C01C4 @ =gUnknown_20399D4 - ldr r1, [r4] - ldr r2, _080C01C8 @ =0x0000479b - adds r0, r1, r2 - ldrb r0, [r0] - lsls r2, r0, 2 - adds r2, r0 - lsls r0, r2, 4 - subs r0, r2 - lsls r0, 4 - adds r0, 0x26 - adds r1, r0 - movs r0, 0 - bl sub_80C0CC8 - movs r0, 0 - bl CopyBgTilemapBufferToVram - ldr r1, [r4] - ldr r2, _080C01CC @ =0x00004796 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _080C021A - ldr r0, _080C01D0 @ =0x000012e6 - adds r1, r0 - movs r0, 0x1 - bl sub_80C0CC8 -_080C01BA: - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - b _080C021A - .align 2, 0 -_080C01C4: .4byte gUnknown_20399D4 -_080C01C8: .4byte 0x0000479b -_080C01CC: .4byte 0x00004796 -_080C01D0: .4byte 0x000012e6 -_080C01D4: - bl sub_80C0B18 - movs r0, 0 - bl PutWindowTilemap - b _080C021A -_080C01E0: - bl sub_80C0BB0 - movs r0, 0x1 - bl PutWindowTilemap - b _080C021A -_080C01EC: - movs r0, 0x2 - bl sub_80C0E04 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C021A - movs r0, 0x1 - bl sub_80C0A88 - b _080C021A -_080C0202: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - bl sub_80C03E8 - bl sub_80C08F4 -_080C021A: - ldr r0, _080C0230 @ =gUnknown_20399D4 - ldr r1, [r0] - ldr r2, _080C0234 @ =0x000047a4 - adds r1, r2 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_080C0228: - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C0230: .4byte gUnknown_20399D4 -_080C0234: .4byte 0x000047a4 - thumb_func_end sub_80C0100 - - thumb_func_start sub_80C0238 -sub_80C0238: @ 80C0238 - push {r4,lr} - sub sp, 0x4 - ldr r0, _080C0258 @ =gUnknown_20399D4 - ldr r1, [r0] - ldr r2, _080C025C @ =0x000047a8 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0x8 - bls _080C024C - b _080C03B0 -_080C024C: - lsls r0, 2 - ldr r1, _080C0260 @ =_080C0264 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C0258: .4byte gUnknown_20399D4 -_080C025C: .4byte 0x000047a8 -_080C0260: .4byte _080C0264 - .align 2, 0 -_080C0264: - .4byte _080C0288 - .4byte _080C0298 - .4byte _080C02FC - .4byte _080C0302 - .4byte _080C0340 - .4byte _080C034E - .4byte _080C0364 - .4byte _080C037C - .4byte _080C0394 -_080C0288: - ldr r0, _080C0294 @ =gUnknown_83EF23C - movs r1, 0xC0 - movs r2, 0x20 - bl LoadPalette - b _080C03C8 - .align 2, 0 -_080C0294: .4byte gUnknown_83EF23C -_080C0298: - ldr r0, _080C02EC @ =gUnknown_83EF2DC - movs r1, 0 - movs r2, 0xA0 - bl LoadPalette - bl sub_80BFEA0 - ldr r0, _080C02F0 @ =gUnknown_20399D4 - ldr r0, [r0] - ldr r1, _080C02F4 @ =0x00004796 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _080C02B6 - b _080C03C8 -_080C02B6: - ldr r4, _080C02F8 @ =gUnknown_83EF23C + 0x1E - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x2 - bl LoadPalette - adds r0, r4, 0 - movs r1, 0x10 - movs r2, 0x2 - bl LoadPalette - adds r0, r4, 0 - movs r1, 0x20 - movs r2, 0x2 - bl LoadPalette - adds r0, r4, 0 - movs r1, 0x30 - movs r2, 0x2 - bl LoadPalette - adds r0, r4, 0 - movs r1, 0x40 - movs r2, 0x2 - bl LoadPalette - b _080C03C8 - .align 2, 0 -_080C02EC: .4byte gUnknown_83EF2DC -_080C02F0: .4byte gUnknown_20399D4 -_080C02F4: .4byte 0x00004796 -_080C02F8: .4byte gUnknown_83EF23C + 0x1E -_080C02FC: - bl ResetTempTileDataBuffers - b _080C03C8 -_080C0302: - ldr r1, _080C0330 @ =gUnknown_83EF61C - movs r4, 0 - str r4, [sp] - movs r0, 0 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r0, _080C0334 @ =gUnknown_20399D4 - ldr r0, [r0] - ldr r2, _080C0338 @ =0x00004796 - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _080C03C8 - ldr r1, _080C033C @ =gUnknown_83F1978 - str r4, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - b _080C03C8 - .align 2, 0 -_080C0330: .4byte gUnknown_83EF61C -_080C0334: .4byte gUnknown_20399D4 -_080C0338: .4byte 0x00004796 -_080C033C: .4byte gUnknown_83F1978 -_080C0340: - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C03C8 - b _080C03D6 -_080C034E: - ldr r0, _080C035C @ =gUnknown_83F089C - ldr r1, _080C0360 @ =gUnknown_20399D4 - ldr r1, [r1] - adds r1, 0x26 - bl LZ77UnCompWram - b _080C03C8 - .align 2, 0 -_080C035C: .4byte gUnknown_83F089C -_080C0360: .4byte gUnknown_20399D4 -_080C0364: - ldr r0, _080C0370 @ =gUnknown_83F0AFC - ldr r1, _080C0374 @ =gUnknown_20399D4 - ldr r1, [r1] - ldr r2, _080C0378 @ =0x000004d6 - b _080C039C - .align 2, 0 -_080C0370: .4byte gUnknown_83F0AFC -_080C0374: .4byte gUnknown_20399D4 -_080C0378: .4byte 0x000004d6 -_080C037C: - ldr r0, _080C0388 @ =gUnknown_83F0C0C - ldr r1, _080C038C @ =gUnknown_20399D4 - ldr r1, [r1] - ldr r2, _080C0390 @ =0x00000986 - b _080C039C - .align 2, 0 -_080C0388: .4byte gUnknown_83F0C0C -_080C038C: .4byte gUnknown_20399D4 -_080C0390: .4byte 0x00000986 -_080C0394: - ldr r0, _080C03A4 @ =gUnknown_83F0CF0 - ldr r1, _080C03A8 @ =gUnknown_20399D4 - ldr r1, [r1] - ldr r2, _080C03AC @ =0x00000e36 -_080C039C: - adds r1, r2 - bl LZ77UnCompWram - b _080C03C8 - .align 2, 0 -_080C03A4: .4byte gUnknown_83F0CF0 -_080C03A8: .4byte gUnknown_20399D4 -_080C03AC: .4byte 0x00000e36 -_080C03B0: - ldr r0, _080C03C0 @ =gUnknown_83F19A0 - ldr r2, _080C03C4 @ =0x000012e6 - adds r1, r2 - bl LZ77UnCompWram - movs r0, 0x1 - b _080C03D8 - .align 2, 0 -_080C03C0: .4byte gUnknown_83F19A0 -_080C03C4: .4byte 0x000012e6 -_080C03C8: - ldr r0, _080C03E0 @ =gUnknown_20399D4 - ldr r1, [r0] - ldr r0, _080C03E4 @ =0x000047a8 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_080C03D6: - movs r0, 0 -_080C03D8: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080C03E0: .4byte gUnknown_20399D4 -_080C03E4: .4byte 0x000047a8 - thumb_func_end sub_80C0238 - - thumb_func_start sub_80C03E8 -sub_80C03E8: @ 80C03E8 - push {lr} - ldr r0, _080C0404 @ =gUnknown_20399D4 - ldr r0, [r0] - ldr r1, _080C0408 @ =0x000047b8 - adds r0, r1 - ldr r0, [r0] - movs r1, 0 - bl CreateTask - ldr r0, _080C040C @ =sub_80C08B4 - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_080C0404: .4byte gUnknown_20399D4 -_080C0408: .4byte 0x000047b8 -_080C040C: .4byte sub_80C08B4 - thumb_func_end sub_80C03E8 - - thumb_func_start sub_80C0410 -sub_80C0410: @ 80C0410 - push {r4,r5,lr} - bl sub_80C0E20 - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - bl sub_80C3514 - adds r4, r0, 0 - lsls r4, 16 - asrs r4, 16 - bl sub_80C3508 - adds r3, r0, 0 - lsls r3, 16 - asrs r3, 16 - adds r0, r5, 0 - movs r1, 0 - adds r2, r4, 0 - bl sub_80C4164 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x63 - beq _080C0446 - movs r0, 0x1 - b _080C0448 -_080C0446: - movs r0, 0 -_080C0448: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80C0410 - - thumb_func_start sub_80C0450 -sub_80C0450: @ 80C0450 - push {lr} - bl sub_80C0410 - cmp r0, 0 - beq _080C04E0 - movs r0, 0 - bl sub_80C3AC8 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080C0474 - movs r0, 0 - bl sub_80C3AC8 - lsls r0, 24 - cmp r0, 0 - bne _080C048E -_080C0474: - movs r0, 0x1 - bl sub_80C3AC8 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080C0494 - movs r0, 0x1 - bl sub_80C3AC8 - lsls r0, 24 - cmp r0, 0 - beq _080C0494 -_080C048E: - movs r0, 0x65 - bl PlaySE -_080C0494: - bl sub_80C3508 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x15 - bne _080C04C2 - bl sub_80C3514 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xB - bne _080C04C2 - movs r0, 0 - bl sub_80C0E04 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C04C2 - movs r0, 0xE1 - bl PlaySE - b _080C04E0 -_080C04C2: - bl sub_80C3508 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x15 - bne _080C04E0 - bl sub_80C3514 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xD - bne _080C04E0 - movs r0, 0xE1 - bl PlaySE -_080C04E0: - pop {r0} - bx r0 - thumb_func_end sub_80C0450 - thumb_func_start sub_80C04E4 sub_80C04E4: @ 80C04E4 push {r4,r5,lr} diff --git a/src/region_map.c b/src/region_map.c index 97bcd476b..e642ed2a4 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -5,12 +5,18 @@ #include "overworld.h" #include "event_data.h" #include "region_map.h" +#include "window.h" +#include "sound.h" +#include "new_menu_helpers.h" #include "constants/flags.h" +#include "constants/songs.h" #include "constants/region_map.h" struct UnkStruct_20399D4 { - u8 filler_0000[0x4796]; + u8 filler_0000[0x0026]; + u16 field_0026[5][600]; + u8 filler_1796[0x3000]; u8 field_4796; u8 field_4797[4]; u8 field_479B; @@ -38,12 +44,40 @@ EWRAM_DATA void * gUnknown_20399FC = NULL; static void sub_80BFFD0(void); void sub_80C0100(void); +bool8 sub_80C0238(void); +void sub_80C03E8(void); void sub_80C04E4(u8 taskId); +void sub_80C08B4(void); +void sub_80C08E0(void); +void sub_80C08F4(void); +void sub_80C0904(void); +void sub_80C0A6C(void); +void sub_80C0A88(u8 a0); +void sub_80C0B18(void); +void sub_80C0BB0(void); +void sub_80C0CC8(u8 bg, u16 *map); +bool8 sub_80C0E04(u8 a0); +u8 sub_80C0E20(void); +void sub_80C3008(u16 a0, u16 a1); +u16 sub_80C3508(void); +u16 sub_80C3514(void); +u8 sub_80C3AC8(u8 a0); +u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3); +void sub_80C41D8(u16 a0, u16 a1); +void sub_80C4398(u8 a0, u8 taskId, TaskFunc taskFunc); void sub_80C4F08(u8 taskId); #include "data/text/map_section_names.h" +extern const u16 gUnknown_83EF23C[]; extern const u16 gUnknown_83EF2DC[]; +extern const u32 gUnknown_83EF61C[]; +extern const u32 gUnknown_83F089C[]; +extern const u32 gUnknown_83F0AFC[]; +extern const u32 gUnknown_83F0C0C[]; +extern const u32 gUnknown_83F0CF0[]; +extern const u32 gUnknown_83F1978[]; +extern const u32 gUnknown_83F19A0[]; extern const u8 sSeviiMapsecs[3][30]; extern const u8 gUnknown_83F1B00[3][4]; @@ -158,3 +192,134 @@ static void sub_80BFFD0(void) gUnknown_20399D4->field_479B = r7; gUnknown_20399D4->field_479C = r7; } + +void sub_80C0100(void) +{ + switch (gUnknown_20399D4->field_47A4) + { + case 0: + sub_80C08E0(); + break; + case 1: + sub_80C0904(); + break; + case 2: + sub_80C0A6C(); + break; + case 3: + if (!sub_80C0238()) + return; + break; + case 4: + FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(1); + break; + case 5: + sub_80C0CC8(0, gUnknown_20399D4->field_0026[gUnknown_20399D4->field_479B]); + CopyBgTilemapBufferToVram(0); + if (gUnknown_20399D4->field_4796 != 0) + { + sub_80C0CC8(1, gUnknown_20399D4->field_0026[4]); + CopyBgTilemapBufferToVram(1); + } + break; + case 6: + sub_80C0B18(); + PutWindowTilemap(0); + break; + case 7: + sub_80C0BB0(); + PutWindowTilemap(1); + break; + case 8: + if (sub_80C0E04(2) == TRUE) + sub_80C0A88(1); + break; + default: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + sub_80C03E8(); + sub_80C08F4(); + break; + } + gUnknown_20399D4->field_47A4++; +} + +bool8 sub_80C0238(void) +{ + switch (gUnknown_20399D4->field_47A8) + { + case 0: + LoadPalette(gUnknown_83EF23C, 0xC0, 0x20); + break; + case 1: + LoadPalette(gUnknown_83EF2DC, 0x00, 0xA0); + sub_80BFEA0(); + if (gUnknown_20399D4->field_4796 != 0) + { + LoadPalette(&gUnknown_83EF23C[15], 0x00, 0x02); + LoadPalette(&gUnknown_83EF23C[15], 0x10, 0x02); + LoadPalette(&gUnknown_83EF23C[15], 0x20, 0x02); + LoadPalette(&gUnknown_83EF23C[15], 0x30, 0x02); + LoadPalette(&gUnknown_83EF23C[15], 0x40, 0x02); + } + break; + case 2: + ResetTempTileDataBuffers(); + break; + case 3: + DecompressAndCopyTileDataToVram(0, gUnknown_83EF61C, 0, 0, 0); + if (gUnknown_20399D4->field_4796 != 0) + { + DecompressAndCopyTileDataToVram(1, gUnknown_83F1978, 0, 0, 0); + } + break; + case 4: + if (FreeTempTileDataBuffersIfPossible() == TRUE) + return FALSE; + break; + case 5: + LZ77UnCompWram(gUnknown_83F089C, gUnknown_20399D4->field_0026[0]); + break; + case 6: + LZ77UnCompWram(gUnknown_83F0AFC, gUnknown_20399D4->field_0026[1]); + break; + case 7: + LZ77UnCompWram(gUnknown_83F0C0C, gUnknown_20399D4->field_0026[2]); + break; + case 8: + LZ77UnCompWram(gUnknown_83F0CF0, gUnknown_20399D4->field_0026[3]); + break; + default: + LZ77UnCompWram(gUnknown_83F19A0, gUnknown_20399D4->field_0026[4]); + return TRUE; + } + gUnknown_20399D4->field_47A8++; + return FALSE; +} + +void sub_80C03E8(void) +{ + CreateTask(gUnknown_20399D4->field_47B8, 0); + SetMainCallback2(sub_80C08B4); +} + +bool32 sub_80C0410(void) +{ + if (sub_80C4164(sub_80C0E20(), 0, sub_80C3514(), sub_80C3508()) == 99) + return FALSE; + else + return TRUE; +} + +void sub_80C0450(void) +{ + if (sub_80C0410()) + { + if ((sub_80C3AC8(0) != 1 && sub_80C3AC8(0) != 0) || (sub_80C3AC8(1) != 1 && sub_80C3AC8(1) != 0)) + PlaySE(SE_Z_SCROLL); + if (sub_80C3508() == 21 && sub_80C3514() == 11 && sub_80C0E04(0) == TRUE) + PlaySE(SE_W255); + else if (sub_80C3508() == 21 && sub_80C3514() == 13) + PlaySE(SE_W255); + } +} -- cgit v1.2.3 From 5a4ffc9a8e2a953a0de699733a809f44ed00bb44 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 2 Jan 2020 10:48:43 -0500 Subject: sub_80C04E4 --- asm/region_map.s | 330 ------------------------------------------------------ include/strings.h | 8 ++ src/region_map.c | 139 +++++++++++++++++++++++ 3 files changed, 147 insertions(+), 330 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index e3317d3b1..c45d74270 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,336 +5,6 @@ .text - thumb_func_start sub_80C04E4 -sub_80C04E4: @ 80C04E4 - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _080C0508 @ =gUnknown_20399D4 - ldr r0, [r0] - ldr r1, _080C050C @ =0x000047a0 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x5 - bls _080C04FC - b _080C07B0 -_080C04FC: - lsls r0, 2 - ldr r1, _080C0510 @ =_080C0514 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C0508: .4byte gUnknown_20399D4 -_080C050C: .4byte 0x000047a0 -_080C0510: .4byte _080C0514 - .align 2, 0 -_080C0514: - .4byte _080C052C - .4byte _080C0560 - .4byte _080C05E0 - .4byte _080C0624 - .4byte _080C0760 - .4byte _080C0788 -_080C052C: - bl sub_80C0E20 - lsls r0, 24 - lsrs r0, 24 - ldr r4, _080C0558 @ =gUnknown_20399D4 - ldr r1, [r4] - ldr r2, _080C055C @ =0x000047b8 - adds r1, r2 - ldr r2, [r1] - adds r1, r5, 0 - bl sub_80C4398 - movs r0, 0 - movs r1, 0 - bl sub_80C3008 - movs r0, 0x1 - movs r1, 0x1 - bl sub_80C41D8 - ldr r1, [r4] - b _080C079C - .align 2, 0 -_080C0558: .4byte gUnknown_20399D4 -_080C055C: .4byte 0x000047b8 -_080C0560: - ldr r0, _080C057C @ =gUnknown_20399D4 - ldr r1, [r0] - ldr r2, _080C0580 @ =0x00004799 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0x1 - bne _080C0584 - adds r2, 0x1F - adds r0, r1, r2 - ldr r1, [r0] - adds r0, r5, 0 - bl sub_80C2208 - b _080C0798 - .align 2, 0 -_080C057C: .4byte gUnknown_20399D4 -_080C0580: .4byte 0x00004799 -_080C0584: - movs r0, 0 - bl ShowBg - movs r0, 0x3 - bl ShowBg - movs r0, 0x1 - bl ShowBg - ldr r0, _080C05D8 @ =gUnknown_8418EB5 - bl sub_80C4E18 - ldr r0, _080C05DC @ =gUnknown_8418E8B - bl sub_80C4E74 - movs r0, 0 - bl sub_80C4ED0 - movs r0, 0 - bl sub_80C4324 - movs r0, 0 - bl sub_80C3154 - bl sub_80C0E20 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x19 - movs r2, 0 - bl sub_80C48BC - bl sub_80C0E20 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x19 - movs r2, 0 - bl sub_80C4960 - b _080C0798 - .align 2, 0 -_080C05D8: .4byte gUnknown_8418EB5 -_080C05DC: .4byte gUnknown_8418E8B -_080C05E0: - ldr r0, _080C0618 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080C05EE - b _080C07C2 -_080C05EE: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _080C05FA - b _080C07C2 -_080C05FA: - bl sub_80C0B18 - movs r0, 0 - bl PutWindowTilemap - bl sub_80C0BB0 - movs r0, 0x1 - bl PutWindowTilemap - ldr r0, _080C061C @ =gUnknown_20399D4 - ldr r1, [r0] - ldr r2, _080C0620 @ =0x000047a0 - adds r1, r2 - b _080C07A0 - .align 2, 0 -_080C0618: .4byte gPaletteFade -_080C061C: .4byte gUnknown_20399D4 -_080C0620: .4byte 0x000047a0 -_080C0624: - bl sub_80C3400 - lsls r0, 24 - lsrs r0, 24 - subs r0, 0x1 - cmp r0, 0x5 - bls _080C0634 - b _080C07C2 -_080C0634: - lsls r0, 2 - ldr r1, _080C0640 @ =_080C0644 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C0640: .4byte _080C0644 - .align 2, 0 -_080C0644: - .4byte _080C065C - .4byte _080C07C2 - .4byte _080C0662 - .4byte _080C070C - .4byte _080C0740 - .4byte _080C0798 -_080C065C: - bl sub_80C3178 - b _080C07C2 -_080C0662: - bl sub_80C0B18 - bl sub_80C0BB0 - bl sub_80C0B9C - bl sub_80C0450 - bl sub_80C3580 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xC5 - beq _080C06A8 - movs r0, 0x1 - bl sub_80C0E04 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080C068E - b _080C07C2 -_080C068E: - movs r0, 0x1 - bl sub_80C3AC8 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _080C0700 - ldr r0, _080C06A4 @ =gUnknown_8418E8D - bl sub_80C4E74 - b _080C07C2 - .align 2, 0 -_080C06A4: .4byte gUnknown_8418E8D -_080C06A8: - bl sub_80C3508 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x15 - bne _080C06DC - bl sub_80C3514 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xB - bne _080C06DC - movs r0, 0 - bl sub_80C0E04 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C06DC - ldr r0, _080C06D8 @ =gUnknown_8418EA7 - bl sub_80C4E74 - b _080C07C2 - .align 2, 0 -_080C06D8: .4byte gUnknown_8418EA7 -_080C06DC: - bl sub_80C3508 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x15 - bne _080C0700 - bl sub_80C3514 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xD - bne _080C0700 - ldr r0, _080C06FC @ =gUnknown_8418E95 - bl sub_80C4E74 - b _080C07C2 - .align 2, 0 -_080C06FC: .4byte gUnknown_8418E95 -_080C0700: - ldr r0, _080C0708 @ =gUnknown_8418E8B - bl sub_80C4E74 - b _080C07C2 - .align 2, 0 -_080C0708: .4byte gUnknown_8418E8B -_080C070C: - movs r0, 0x1 - bl sub_80C3AC8 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _080C07C2 - ldr r0, _080C0734 @ =gUnknown_20399D4 - ldr r0, [r0] - ldr r1, _080C0738 @ =0x00004798 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - bne _080C07C2 - ldr r2, _080C073C @ =sub_80C07F8 - movs r0, 0 - adds r1, r5, 0 - bl sub_80C195C - b _080C07C2 - .align 2, 0 -_080C0734: .4byte gUnknown_20399D4 -_080C0738: .4byte 0x00004798 -_080C073C: .4byte sub_80C07F8 -_080C0740: - ldr r0, _080C0754 @ =gUnknown_20399D4 - ldr r0, [r0] - ldr r2, _080C0758 @ =0x0000479b - adds r0, r2 - ldrb r0, [r0] - ldr r2, _080C075C @ =sub_80C07F8 - adds r1, r5, 0 - bl sub_80C0E70 - b _080C07C2 - .align 2, 0 -_080C0754: .4byte gUnknown_20399D4 -_080C0758: .4byte 0x0000479b -_080C075C: .4byte sub_80C07F8 -_080C0760: - movs r0, 0x2 - bl sub_80C0E04 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C0776 - adds r0, r5, 0 - bl sub_80C2C1C - b _080C0798 -_080C0776: - ldr r0, _080C0780 @ =gUnknown_20399D4 - ldr r1, [r0] - ldr r2, _080C0784 @ =0x000047a0 - adds r1, r2 - b _080C07A0 - .align 2, 0 -_080C0780: .4byte gUnknown_20399D4 -_080C0784: .4byte 0x000047a0 -_080C0788: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade -_080C0798: - ldr r0, _080C07A8 @ =gUnknown_20399D4 - ldr r1, [r0] -_080C079C: - ldr r0, _080C07AC @ =0x000047a0 - adds r1, r0 -_080C07A0: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _080C07C2 - .align 2, 0 -_080C07A8: .4byte gUnknown_20399D4 -_080C07AC: .4byte 0x000047a0 -_080C07B0: - ldr r0, _080C07CC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080C07C2 - adds r0, r5, 0 - bl sub_80C0820 -_080C07C2: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C07CC: .4byte gPaletteFade - thumb_func_end sub_80C04E4 - thumb_func_start sub_80C07D0 sub_80C07D0: @ 80C07D0 ldr r1, _080C07DC @ =gUnknown_20399D4 diff --git a/include/strings.h b/include/strings.h index 90fd49b52..6cca52507 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1003,4 +1003,12 @@ extern const u8 gText_UnionRoomTradesBattles[]; extern const u8 gText_LinkBattles[]; extern const u8 gText_LinkCableBattles[]; +// region_map +extern const u8 gUnknown_8418EB5[]; +extern const u8 gUnknown_8418E8B[]; +extern const u8 gUnknown_8418E8D[]; +extern const u8 gUnknown_8418E8B[]; +extern const u8 gUnknown_8418EA7[]; +extern const u8 gUnknown_8418E95[]; + #endif //GUARD_STRINGS_H diff --git a/src/region_map.c b/src/region_map.c index e642ed2a4..4199b2f17 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -8,6 +8,7 @@ #include "window.h" #include "sound.h" #include "new_menu_helpers.h" +#include "strings.h" #include "constants/flags.h" #include "constants/songs.h" #include "constants/region_map.h" @@ -47,6 +48,8 @@ void sub_80C0100(void); bool8 sub_80C0238(void); void sub_80C03E8(void); void sub_80C04E4(u8 taskId); +void sub_80C07F8(u8 taskId); +void sub_80C0820(u8 taskId); void sub_80C08B4(void); void sub_80C08E0(void); void sub_80C08F4(void); @@ -54,17 +57,32 @@ void sub_80C0904(void); void sub_80C0A6C(void); void sub_80C0A88(u8 a0); void sub_80C0B18(void); +void sub_80C0B9C(void); void sub_80C0BB0(void); void sub_80C0CC8(u8 bg, u16 *map); bool8 sub_80C0E04(u8 a0); u8 sub_80C0E20(void); +void sub_80C0E70(u8 a0, u8 taskId, TaskFunc taskFunc); +void sub_80C195C(u8 a0, u8 taskId, TaskFunc taskFunc); +void sub_80C2208(u8 taskId, TaskFunc taskFunc); +void sub_80C2C1C(u8 taskId); void sub_80C3008(u16 a0, u16 a1); +void sub_80C3154(u8 a0); +void sub_80C3178(void); +u8 sub_80C3400(void); u16 sub_80C3508(void); u16 sub_80C3514(void); +u16 sub_80C3580(void); u8 sub_80C3AC8(u8 a0); u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3); void sub_80C41D8(u16 a0, u16 a1); +void sub_80C4324(u8 a0); void sub_80C4398(u8 a0, u8 taskId, TaskFunc taskFunc); +void sub_80C48BC(u8 a0, u8 a1, u8 a2); +void sub_80C4960(u8 a0, u8 a1, u8 a2); +void sub_80C4E18(const u8 *str); +void sub_80C4E74(const u8 *str); +void sub_80C4ED0(bool8 a0); void sub_80C4F08(u8 taskId); #include "data/text/map_section_names.h" @@ -323,3 +341,124 @@ void sub_80C0450(void) PlaySE(SE_W255); } } + +void sub_80C04E4(u8 taskId) +{ + switch (gUnknown_20399D4->field_47A0) + { + case 0: + sub_80C4398(sub_80C0E20(), taskId, gUnknown_20399D4->field_47B8); + sub_80C3008(0, 0); + sub_80C41D8(1, 1); + gUnknown_20399D4->field_47A0++; + break; + case 1: + if (gUnknown_20399D4->field_4797[2] == 1) + { + sub_80C2208(taskId, gUnknown_20399D4->field_47B8); + } + else + { + ShowBg(0); + ShowBg(3); + ShowBg(1); + sub_80C4E18(gUnknown_8418EB5); + sub_80C4E74(gUnknown_8418E8B); + sub_80C4ED0(FALSE); + sub_80C4324(0); + sub_80C3154(0); + sub_80C48BC(sub_80C0E20(), 25, 0); + sub_80C4960(sub_80C0E20(), 25, 0); + } + gUnknown_20399D4->field_47A0++; + break; + case 2: + if (!gPaletteFade.active && !IsDma3ManagerBusyWithBgCopy()) + { + sub_80C0B18(); + PutWindowTilemap(0); + sub_80C0BB0(); + PutWindowTilemap(1); + gUnknown_20399D4->field_47A0++; + } + break; + case 3: + switch (sub_80C3400()) + { + case 1: + sub_80C3178(); + break; + case 3: + sub_80C0B18(); + sub_80C0BB0(); + sub_80C0B9C(); + sub_80C0450(); + if (sub_80C3580() != MAPSEC_NONE) + { + if (sub_80C0E04(1) == TRUE) + { + if (sub_80C3AC8(1) == 2) + { + sub_80C4E74(gUnknown_8418E8D); + } + else + { + sub_80C4E74(gUnknown_8418E8B); + } + } + } + else + { + if (sub_80C3508() == 21 && sub_80C3514() == 11 && sub_80C0E04(0) == TRUE) + { + sub_80C4E74(gUnknown_8418EA7); + } + else if (sub_80C3508() == 21 && sub_80C3514() == 13) + { + sub_80C4E74(gUnknown_8418E95); + } + else + { + sub_80C4E74(gUnknown_8418E8B); + } + } + break; + case 4: + if (sub_80C3AC8(1) == 2 && gUnknown_20399D4->field_4797[1] == 1) + { + sub_80C195C(0, taskId, sub_80C07F8); + } + break; + case 5: + sub_80C0E70(gUnknown_20399D4->field_479B, taskId, sub_80C07F8); + break; + case 6: + gUnknown_20399D4->field_47A0++; + break; + } + break; + case 4: + if (sub_80C0E04(2) == 1) + { + sub_80C2C1C(taskId); + // gUnknown_20399D4->field_47A0++; + goto _080C0798; + } + else + { + gUnknown_20399D4->field_47A0++; + } + break; + case 5: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + _080C0798: + gUnknown_20399D4->field_47A0++; + break; + default: + if (!gPaletteFade.active) + { + sub_80C0820(taskId); + } + break; + } +} -- cgit v1.2.3 From 496fb8ce87e38b2c42009fcde62e683126373e3e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 2 Jan 2020 12:04:35 -0500 Subject: through sub_80C0A88 --- asm/region_map.s | 361 ------------------------------------------------------- src/region_map.c | 147 +++++++++++++++++++++- 2 files changed, 142 insertions(+), 366 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index c45d74270..9dea034bc 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,367 +5,6 @@ .text - thumb_func_start sub_80C07D0 -sub_80C07D0: @ 80C07D0 - ldr r1, _080C07DC @ =gUnknown_20399D4 - ldr r1, [r1] - ldr r2, _080C07E0 @ =0x000047b8 - adds r1, r2 - str r0, [r1] - bx lr - .align 2, 0 -_080C07DC: .4byte gUnknown_20399D4 -_080C07E0: .4byte 0x000047b8 - thumb_func_end sub_80C07D0 - - thumb_func_start sub_80C07E4 -sub_80C07E4: @ 80C07E4 - ldr r0, _080C07F0 @ =gUnknown_20399D4 - ldr r0, [r0] - ldr r1, _080C07F4 @ =0x000047b8 - adds r0, r1 - ldr r0, [r0] - bx lr - .align 2, 0 -_080C07F0: .4byte gUnknown_20399D4 -_080C07F4: .4byte 0x000047b8 - thumb_func_end sub_80C07E4 - - thumb_func_start sub_80C07F8 -sub_80C07F8: @ 80C07F8 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080C0814 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r0, _080C0818 @ =gUnknown_20399D4 - ldr r0, [r0] - ldr r2, _080C081C @ =0x000047b8 - adds r0, r2 - ldr r0, [r0] - str r0, [r1] - bx lr - .align 2, 0 -_080C0814: .4byte gTasks -_080C0818: .4byte gUnknown_20399D4 -_080C081C: .4byte 0x000047b8 - thumb_func_end sub_80C07F8 - - thumb_func_start sub_80C0820 -sub_80C0820: @ 80C0820 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - movs r0, 0x2 - bl sub_80C0E04 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C0838 - bl sub_80C25BC -_080C0838: - bl sub_80C4A04 - bl sub_80C3188 - bl sub_80C4348 - bl sub_80C4D30 - adds r0, r4, 0 - bl DestroyTask - bl FreeAllWindowBuffers - ldr r0, _080C086C @ =gUnknown_20399D4 - ldr r0, [r0] - ldr r1, _080C0870 @ =0x000047bc - adds r0, r1 - ldr r0, [r0] - cmp r0, 0 - bne _080C0878 - ldr r0, _080C0874 @ =gMain - ldr r0, [r0, 0x8] - bl SetMainCallback2 - b _080C087C - .align 2, 0 -_080C086C: .4byte gUnknown_20399D4 -_080C0870: .4byte 0x000047bc -_080C0874: .4byte gMain -_080C0878: - bl SetMainCallback2 -_080C087C: - ldr r4, _080C0894 @ =gUnknown_20399D4 - ldr r0, [r4] - cmp r0, 0 - beq _080C088C - bl Free - movs r0, 0 - str r0, [r4] -_080C088C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C0894: .4byte gUnknown_20399D4 - thumb_func_end sub_80C0820 - - thumb_func_start sub_80C0898 -sub_80C0898: @ 80C0898 - push {r4,lr} - ldr r4, _080C08B0 @ =gUnknown_20399D4 - ldr r0, [r4] - cmp r0, 0 - beq _080C08AA - bl Free - movs r0, 0 - str r0, [r4] -_080C08AA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C08B0: .4byte gUnknown_20399D4 - thumb_func_end sub_80C0898 - - thumb_func_start sub_80C08B4 -sub_80C08B4: @ 80C08B4 - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_80C08B4 - - thumb_func_start sub_80C08CC -sub_80C08CC: @ 80C08CC - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_80C08CC - - thumb_func_start sub_80C08E0 -sub_80C08E0: @ 80C08E0 - push {lr} - movs r0, 0 - bl SetVBlankCallback - movs r0, 0 - bl SetHBlankCallback - pop {r0} - bx r0 - thumb_func_end sub_80C08E0 - - thumb_func_start sub_80C08F4 -sub_80C08F4: @ 80C08F4 - push {lr} - ldr r0, _080C0900 @ =sub_80C08CC - bl SetVBlankCallback - pop {r0} - bx r0 - .align 2, 0 -_080C0900: .4byte sub_80C08CC - thumb_func_end sub_80C08F4 - - thumb_func_start sub_80C0904 -sub_80C0904: @ 80C0904 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - movs r3, 0xC0 - lsls r3, 19 - movs r4, 0xC0 - lsls r4, 9 - add r0, sp, 0x4 - mov r8, r0 - mov r2, sp - movs r6, 0 - ldr r1, _080C0A18 @ =0x040000d4 - movs r5, 0x80 - lsls r5, 5 - ldr r7, _080C0A1C @ =0x81000800 - movs r0, 0x81 - lsls r0, 24 - mov r12, r0 -_080C092A: - strh r6, [r2] - mov r0, sp - str r0, [r1] - str r3, [r1, 0x4] - str r7, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r3, r5 - subs r4, r5 - cmp r4, r5 - bhi _080C092A - strh r6, [r2] - mov r2, sp - str r2, [r1] - str r3, [r1, 0x4] - lsrs r0, r4, 1 - mov r2, r12 - orrs r0, r2 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - movs r0, 0xE0 - lsls r0, 19 - movs r3, 0x80 - lsls r3, 3 - movs r4, 0 - str r4, [sp, 0x4] - ldr r2, _080C0A18 @ =0x040000d4 - mov r1, r8 - str r1, [r2] - str r0, [r2, 0x4] - lsrs r0, r3, 2 - movs r1, 0x85 - lsls r1, 24 - orrs r0, r1 - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - movs r1, 0xA0 - lsls r1, 19 - mov r0, sp - strh r4, [r0] - str r0, [r2] - str r1, [r2, 0x4] - lsrs r3, 1 - movs r0, 0x81 - lsls r0, 24 - orrs r3, r0 - str r3, [r2, 0x8] - ldr r0, [r2, 0x8] - movs r0, 0 - movs r1, 0 - bl SetGpuReg - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _080C0A20 @ =gUnknown_83F1A50 - movs r0, 0 - movs r2, 0x4 - bl InitBgsFromTemplates - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - ldr r0, _080C0A24 @ =gUnknown_83F1A60 - bl InitWindows - bl DeactivateAllTextPrinters - ldr r1, _080C0A28 @ =0x00006040 - movs r0, 0 - bl SetGpuReg - bl sub_80C0A2C - bl sub_80C0AB8 - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C0A18: .4byte 0x040000d4 -_080C0A1C: .4byte 0x81000800 -_080C0A20: .4byte gUnknown_83F1A50 -_080C0A24: .4byte gUnknown_83F1A60 -_080C0A28: .4byte 0x00006040 - thumb_func_end sub_80C0904 - - thumb_func_start sub_80C0A2C -sub_80C0A2C: @ 80C0A2C - push {r4,lr} - ldr r4, _080C0A5C @ =gUnknown_20399D4 - ldr r1, [r4] - ldr r0, _080C0A60 @ =0x00001796 - adds r1, r0 - movs r0, 0 - bl SetBgTilemapBuffer - ldr r1, [r4] - ldr r0, _080C0A64 @ =0x00002796 - adds r1, r0 - movs r0, 0x1 - bl SetBgTilemapBuffer - ldr r1, [r4] - ldr r0, _080C0A68 @ =0x00003796 - adds r1, r0 - movs r0, 0x2 - bl SetBgTilemapBuffer - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C0A5C: .4byte gUnknown_20399D4 -_080C0A60: .4byte 0x00001796 -_080C0A64: .4byte 0x00002796 -_080C0A68: .4byte 0x00003796 - thumb_func_end sub_80C0A2C - - thumb_func_start sub_80C0A6C -sub_80C0A6C: @ 80C0A6C - push {lr} - bl ResetSpriteData - bl ResetPaletteFade - bl FreeAllSpritePalettes - bl ResetTasks - bl ScanlineEffect_Stop - pop {r0} - bx r0 - thumb_func_end sub_80C0A6C - - thumb_func_start sub_80C0A88 -sub_80C0A88: @ 80C0A88 - push {lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _080C0A98 - cmp r0, 0x1 - beq _080C0AA6 - b _080C0AB2 -_080C0A98: - movs r0, 0 - bl ShowBg - movs r0, 0x3 - bl ShowBg - b _080C0AB2 -_080C0AA6: - movs r0, 0 - bl HideBg - movs r0, 0x3 - bl HideBg -_080C0AB2: - pop {r0} - bx r0 - thumb_func_end sub_80C0A88 - thumb_func_start sub_80C0AB8 sub_80C0AB8: @ 80C0AB8 push {r4,lr} diff --git a/src/region_map.c b/src/region_map.c index 4199b2f17..d4451330f 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -1,5 +1,7 @@ #include "global.h" #include "palette.h" +#include "gpu_regs.h" +#include "scanline_effect.h" #include "task.h" #include "malloc.h" #include "overworld.h" @@ -17,7 +19,10 @@ struct UnkStruct_20399D4 { u8 filler_0000[0x0026]; u16 field_0026[5][600]; - u8 filler_1796[0x3000]; + // Inefficiency: these should be u8 or have half the elements each + u16 field_1796[BG_SCREEN_SIZE]; + u16 field_2796[BG_SCREEN_SIZE]; + u16 field_3796[BG_SCREEN_SIZE]; u8 field_4796; u8 field_4797[4]; u8 field_479B; @@ -54,8 +59,10 @@ void sub_80C08B4(void); void sub_80C08E0(void); void sub_80C08F4(void); void sub_80C0904(void); +void sub_80C0A2C(void); void sub_80C0A6C(void); void sub_80C0A88(u8 a0); +void sub_80C0AB8(void); void sub_80C0B18(void); void sub_80C0B9C(void); void sub_80C0BB0(void); @@ -65,25 +72,30 @@ u8 sub_80C0E20(void); void sub_80C0E70(u8 a0, u8 taskId, TaskFunc taskFunc); void sub_80C195C(u8 a0, u8 taskId, TaskFunc taskFunc); void sub_80C2208(u8 taskId, TaskFunc taskFunc); +void sub_80C25BC(void); void sub_80C2C1C(u8 taskId); void sub_80C3008(u16 a0, u16 a1); void sub_80C3154(u8 a0); void sub_80C3178(void); -u8 sub_80C3400(void); -u16 sub_80C3508(void); -u16 sub_80C3514(void); -u16 sub_80C3580(void); +void sub_80C3188(void); u8 sub_80C3AC8(u8 a0); +u8 sub_80C3400(void); u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3); void sub_80C41D8(u16 a0, u16 a1); void sub_80C4324(u8 a0); void sub_80C4398(u8 a0, u8 taskId, TaskFunc taskFunc); +void sub_80C4348(void); void sub_80C48BC(u8 a0, u8 a1, u8 a2); void sub_80C4960(u8 a0, u8 a1, u8 a2); +void sub_80C4A04(void); +void sub_80C4D30(void); void sub_80C4E18(const u8 *str); void sub_80C4E74(const u8 *str); void sub_80C4ED0(bool8 a0); void sub_80C4F08(u8 taskId); +u16 sub_80C3508(void); +u16 sub_80C3514(void); +u16 sub_80C3580(void); #include "data/text/map_section_names.h" @@ -96,6 +108,8 @@ extern const u32 gUnknown_83F0C0C[]; extern const u32 gUnknown_83F0CF0[]; extern const u32 gUnknown_83F1978[]; extern const u32 gUnknown_83F19A0[]; +extern const struct BgTemplate gUnknown_83F1A50[4]; +extern const struct WindowTemplate gUnknown_83F1A60[]; extern const u8 sSeviiMapsecs[3][30]; extern const u8 gUnknown_83F1B00[3][4]; @@ -462,3 +476,126 @@ void sub_80C04E4(u8 taskId) break; } } + +void sub_80C07D0(TaskFunc taskFunc) +{ + gUnknown_20399D4->field_47B8 = taskFunc; +} + +TaskFunc sub_80C07E4(void) +{ + return gUnknown_20399D4->field_47B8; +} + +void sub_80C07F8(u8 taskId) +{ + gTasks[taskId].func = gUnknown_20399D4->field_47B8; +} + +void sub_80C0820(u8 taskId) +{ + if (sub_80C0E04(2) == TRUE) + sub_80C25BC(); + sub_80C4A04(); + sub_80C3188(); + sub_80C4348(); + sub_80C4D30(); + DestroyTask(taskId); + FreeAllWindowBuffers(); + if (gUnknown_20399D4->field_47BC == NULL) + SetMainCallback2(gMain.savedCallback); + else + SetMainCallback2(gUnknown_20399D4->field_47BC); + if (gUnknown_20399D4 != NULL) + { + FREE_AND_SET_NULL(gUnknown_20399D4); + } +} + +void sub_80C0898(void) +{ + if (gUnknown_20399D4 != NULL) + { + FREE_AND_SET_NULL(gUnknown_20399D4); + } +} + +void sub_80C08B4(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_80C08CC(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_80C08E0(void) +{ + SetVBlankCallback(NULL); + SetHBlankCallback(NULL); +} + +void sub_80C08F4(void) +{ + SetVBlankCallback(sub_80C08CC); +} + +void sub_80C0904(void) +{ + DmaFillLarge16(3, 0, (void *)VRAM, VRAM_SIZE, 0x1000); + DmaFill32Defvars(3, 0, (void *)OAM, OAM_SIZE); + DmaFill16Defvars(3, 0, (void *)PLTT, PLTT_SIZE); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ResetBgsAndClearDma3BusyFlags(FALSE); + InitBgsFromTemplates(0, gUnknown_83F1A50, NELEMS(gUnknown_83F1A50)); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + InitWindows(gUnknown_83F1A60); + DeactivateAllTextPrinters(); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON); + sub_80C0A2C(); + sub_80C0AB8(); +} + +void sub_80C0A2C(void) +{ + SetBgTilemapBuffer(0, gUnknown_20399D4->field_1796); + SetBgTilemapBuffer(1, gUnknown_20399D4->field_2796); + SetBgTilemapBuffer(2, gUnknown_20399D4->field_3796); +} + +void sub_80C0A6C(void) +{ + ResetSpriteData(); + ResetPaletteFade(); + FreeAllSpritePalettes(); + ResetTasks(); + ScanlineEffect_Stop(); +} + +void sub_80C0A88(u8 mode) +{ + switch (mode) + { + case 0: + ShowBg(0); + ShowBg(3); + break; + case 1: + HideBg(0); + HideBg(3); + break; + } +} -- cgit v1.2.3 From 404932ba23a2be1ff5c90def5ebf2a2ec5cf9839 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 2 Jan 2020 12:39:48 -0500 Subject: through sub_80C0B9C --- asm/region_map.s | 118 +----------------------------------------------------- data/region_map.s | 4 -- src/region_map.c | 51 ++++++++++++++++++++++- 3 files changed, 52 insertions(+), 121 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index 9dea034bc..08fb0b88a 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,120 +5,6 @@ .text - thumb_func_start sub_80C0AB8 -sub_80C0AB8: @ 80C0AB8 - push {r4,lr} - bl sub_80C4BE4 - movs r0, 0 - movs r1, 0x11 - movs r2, 0xC0 - bl sub_80C4C2C - movs r0, 0x6 - bl sub_80C4C48 - movs r0, 0x39 - movs r1, 0x39 - bl sub_80C4C74 - movs r0, 0x1B - bl sub_80C4C88 - ldr r4, _080C0B14 @ =gUnknown_83F1B0C - movs r0, 0 - adds r1, r4, 0 - bl sub_80C4CF0 - adds r4, 0x8 - movs r0, 0x1 - adds r1, r4, 0 - bl sub_80C4CF0 - movs r0, 0 - movs r1, 0 - bl sub_80C4C9C - bl sub_80C3580 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xC5 - beq _080C0B0C - movs r0, 0x1 - movs r1, 0 - bl sub_80C4C9C -_080C0B0C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C0B14: .4byte gUnknown_83F1B0C - thumb_func_end sub_80C0AB8 - - thumb_func_start sub_80C0B18 -sub_80C0B18: @ 80C0B18 - push {r4,r5,lr} - sub sp, 0xC - movs r0, 0 - bl ClearWindowTilemap - movs r0, 0 - movs r1, 0 - bl FillWindowPixelBuffer - bl sub_80C3520 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xC5 - bne _080C0B44 - ldr r1, _080C0B40 @ =gUnknown_83F1B1C - movs r0, 0 - bl sub_80C4CF0 - b _080C0B88 - .align 2, 0 -_080C0B40: .4byte gUnknown_83F1B1C -_080C0B44: - ldr r5, _080C0B90 @ =gUnknown_20399D4 - ldr r4, [r5] - bl sub_80C3520 - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - movs r2, 0 - bl GetMapName - ldr r0, _080C0B94 @ =gUnknown_83F1A90 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - ldr r0, [r5] - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0x2 - movs r2, 0x2 - movs r3, 0x2 - bl AddTextPrinterParameterized3 - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x2 - bl CopyWindowToVram - ldr r1, _080C0B98 @ =gUnknown_83F1B0C - movs r0, 0 - bl sub_80C4CF0 -_080C0B88: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C0B90: .4byte gUnknown_20399D4 -_080C0B94: .4byte gUnknown_83F1A90 -_080C0B98: .4byte gUnknown_83F1B0C - thumb_func_end sub_80C0B18 - - thumb_func_start sub_80C0B9C -sub_80C0B9C: @ 80C0B9C - push {lr} - ldr r1, _080C0BAC @ =gUnknown_83F1B14 - movs r0, 0x1 - bl sub_80C4CF0 - pop {r0} - bx r0 - .align 2, 0 -_080C0BAC: .4byte gUnknown_83F1B14 - thumb_func_end sub_80C0B9C - thumb_func_start sub_80C0BB0 sub_80C0BB0: @ 80C0BB0 push {r4-r6,lr} @@ -973,7 +859,7 @@ sub_80C1280: @ 80C1280 bl sub_80C4E74 bl sub_80C0AB8 bl sub_80C0B9C - ldr r1, _080C12E8 @ =gUnknown_83F1B1C + ldr r1, _080C12E8 @ =gUnknown_83F1B0C+16 movs r0, 0 bl sub_80C4CF0 ldr r0, [r4] @@ -992,7 +878,7 @@ _080C12D8: .4byte gUnknown_20399D8 _080C12DC: .4byte 0x00001cd0 _080C12E0: .4byte gUnknown_8418EB5 _080C12E4: .4byte gUnknown_8418EA7 -_080C12E8: .4byte gUnknown_83F1B1C +_080C12E8: .4byte gUnknown_83F1B0C+16 thumb_func_end sub_80C1280 thumb_func_start sub_80C12EC diff --git a/data/region_map.s b/data/region_map.s index e2ba5e5ac..01bbb7a5a 100644 --- a/data/region_map.s +++ b/data/region_map.s @@ -308,11 +308,7 @@ gUnknown_83F1B00:: @ 83F1B00 gUnknown_83F1B0C:: @ 83F1B0C .2byte 0x0018, 0x0010, 0x0090, 0x0020 - -gUnknown_83F1B14:: @ 83F1B14 .2byte 0x0018, 0x0020, 0x0090, 0x0030 - -gUnknown_83F1B1C:: @ 83F1B1C .2byte 0x0000, 0x0000, 0x0000, 0x0000 gUnknown_83F1B24:: @ 83F1B24 diff --git a/src/region_map.c b/src/region_map.c index d4451330f..3f1dd9f08 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -10,6 +10,7 @@ #include "window.h" #include "sound.h" #include "new_menu_helpers.h" +#include "menu.h" #include "strings.h" #include "constants/flags.h" #include "constants/songs.h" @@ -17,7 +18,7 @@ struct UnkStruct_20399D4 { - u8 filler_0000[0x0026]; + u8 field_0000[38]; u16 field_0026[5][600]; // Inefficiency: these should be u8 or have half the elements each u16 field_1796[BG_SCREEN_SIZE]; @@ -66,7 +67,14 @@ void sub_80C0AB8(void); void sub_80C0B18(void); void sub_80C0B9C(void); void sub_80C0BB0(void); +void sub_80C4BE4(void); +void sub_80C4C2C(u8 a0, u16 a1, u16 a2); +void sub_80C4C48(u16 a0); +void sub_80C4C74(u16 a0, u16 a1); +void sub_80C4C88(u16 a0); +void sub_80C4C9C(u8 a0, u8 a1); void sub_80C0CC8(u8 bg, u16 *map); +void sub_80C4CF0(u8 a0, const u16 *a1); bool8 sub_80C0E04(u8 a0); u8 sub_80C0E20(void); void sub_80C0E70(u8 a0, u8 taskId, TaskFunc taskFunc); @@ -85,6 +93,7 @@ void sub_80C41D8(u16 a0, u16 a1); void sub_80C4324(u8 a0); void sub_80C4398(u8 a0, u8 taskId, TaskFunc taskFunc); void sub_80C4348(void); +u16 sub_80C3520(void); void sub_80C48BC(u8 a0, u8 a1, u8 a2); void sub_80C4960(u8 a0, u8 a1, u8 a2); void sub_80C4A04(void); @@ -110,8 +119,10 @@ extern const u32 gUnknown_83F1978[]; extern const u32 gUnknown_83F19A0[]; extern const struct BgTemplate gUnknown_83F1A50[4]; extern const struct WindowTemplate gUnknown_83F1A60[]; +extern const u8 gUnknown_83F1A90[]; extern const u8 sSeviiMapsecs[3][30]; extern const u8 gUnknown_83F1B00[3][4]; +extern const u16 gUnknown_83F1B0C[3][4]; static void RegionMap_DarkenPalette(u16 *pal, u16 size, u16 tint) { @@ -455,6 +466,7 @@ void sub_80C04E4(u8 taskId) if (sub_80C0E04(2) == 1) { sub_80C2C1C(taskId); + // FIXME: goto required to match // gUnknown_20399D4->field_47A0++; goto _080C0798; } @@ -599,3 +611,40 @@ void sub_80C0A88(u8 mode) break; } } + +void sub_80C0AB8(void) +{ + sub_80C4BE4(); + sub_80C4C2C(0, 0x11, 0xc0); + sub_80C4C48(6); + sub_80C4C74(0x39, 0x39); + sub_80C4C88(0x1b); + sub_80C4CF0(0, gUnknown_83F1B0C[0]); + sub_80C4CF0(1, gUnknown_83F1B0C[1]); + sub_80C4C9C(0, 0); + if (sub_80C3580() != MAPSEC_NONE) + sub_80C4C9C(1, 0); +} + +void sub_80C0B18(void) +{ + ClearWindowTilemap(0); + FillWindowPixelBuffer(0, PIXEL_FILL(0)); + if (sub_80C3520() == MAPSEC_NONE) + { + sub_80C4CF0(0, gUnknown_83F1B0C[2]); + } + else + { + GetMapName(gUnknown_20399D4->field_0000, sub_80C3520(), 0); + AddTextPrinterParameterized3(0, 2, 2, 2, gUnknown_83F1A90, 0, gUnknown_20399D4->field_0000); + PutWindowTilemap(0); + CopyWindowToVram(0, 2); + sub_80C4CF0(0, gUnknown_83F1B0C[0]); + } +} + +void sub_80C0B9C(void) +{ + sub_80C4CF0(1, gUnknown_83F1B0C[1]); +} -- cgit v1.2.3 From 3535cf2ebc0ff5cb408bb018ade68ae8cfcb0c5c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 3 Jan 2020 09:09:02 -0500 Subject: through sub_80C0E5C --- asm/region_map.s | 352 ----------------------------------------- include/constants/region_map.h | 3 +- src/region_map.c | 121 ++++++++++++-- 3 files changed, 114 insertions(+), 362 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index 08fb0b88a..f0f1de990 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,358 +5,6 @@ .text - thumb_func_start sub_80C0BB0 -sub_80C0BB0: @ 80C0BB0 - push {r4-r6,lr} - sub sp, 0xC - ldr r5, _080C0C84 @ =gUnknown_20399D4 - ldr r1, [r5] - ldr r2, _080C0C88 @ =0x000047ac - adds r0, r1, r2 - movs r6, 0 - strh r6, [r0] - ldr r3, _080C0C8C @ =0x000047ae - adds r2, r1, r3 - movs r0, 0x18 - strh r0, [r2] - ldr r0, _080C0C90 @ =0x000047b0 - adds r1, r0 - movs r0, 0x20 - strh r0, [r1] - movs r0, 0x1 - movs r1, 0x1 - bl sub_80C4C9C - movs r0, 0x1 - bl ClearWindowTilemap - bl sub_80C3580 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xC5 - beq _080C0C7A - adds r4, r0, 0 - subs r4, 0x58 - lsls r4, 16 - lsrs r4, 16 - movs r0, 0x1 - movs r1, 0 - bl sub_80C4C9C - ldr r0, [r5] - ldr r1, _080C0C88 @ =0x000047ac - adds r0, r1 - movs r1, 0x1 - strh r1, [r0] - ldr r0, _080C0C94 @ =gUnknown_83F1CAC - lsls r4, 2 - adds r4, r0 - ldr r4, [r4] - adds r0, r4, 0 - bl StringLength - ldr r2, [r5] - ldr r3, _080C0C98 @ =0x000047aa - adds r1, r2, r3 - strh r0, [r1] - ldrh r1, [r1] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 1 - adds r0, 0x32 - adds r3, 0x4 - adds r1, r2, r3 - strh r0, [r1] - ldr r0, _080C0C90 @ =0x000047b0 - adds r2, r0 - movs r0, 0x30 - strh r0, [r2] - movs r0, 0x1 - movs r1, 0 - bl FillWindowPixelBuffer - ldr r0, [r5] - adds r0, 0x13 - adds r1, r4, 0 - bl StringCopy - ldr r4, _080C0C9C @ =gUnknown_83F1A9C - movs r0, 0x1 - bl sub_80C3AC8 - lsls r0, 24 - lsrs r0, 22 - subs r0, 0x8 - adds r0, r4 - ldr r0, [r0] - str r0, [sp] - str r6, [sp, 0x4] - ldr r0, [r5] - adds r0, 0x13 - str r0, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x2 - movs r2, 0xC - movs r3, 0x2 - bl AddTextPrinterParameterized3 - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0x1 - movs r1, 0x3 - bl CopyWindowToVram -_080C0C7A: - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C0C84: .4byte gUnknown_20399D4 -_080C0C88: .4byte 0x000047ac -_080C0C8C: .4byte 0x000047ae -_080C0C90: .4byte 0x000047b0 -_080C0C94: .4byte gUnknown_83F1CAC -_080C0C98: .4byte 0x000047aa -_080C0C9C: .4byte gUnknown_83F1A9C - thumb_func_end sub_80C0BB0 - - thumb_func_start sub_80C0CA0 -sub_80C0CA0: @ 80C0CA0 - push {lr} - movs r0, 0 - movs r1, 0 - bl FillWindowPixelBuffer - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - movs r0, 0x1 - movs r1, 0 - bl FillWindowPixelBuffer - movs r0, 0x1 - movs r1, 0x3 - bl CopyWindowToVram - pop {r0} - bx r0 - thumb_func_end sub_80C0CA0 - - thumb_func_start sub_80C0CC8 -sub_80C0CC8: @ 80C0CC8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - adds r7, r1, 0 - lsls r0, 24 - ldr r2, _080C0D0C @ =gUnknown_20399D4 - lsrs r0, 12 - ldr r1, _080C0D10 @ =0x00001796 - adds r0, r1 - ldr r1, [r2] - adds r6, r1, r0 - movs r1, 0 - mov r8, r2 -_080C0CE4: - movs r2, 0 - lsls r5, r1, 16 - asrs r1, r5, 16 - lsls r3, r1, 5 - lsls r0, r1, 4 - subs r0, r1 - lsls r4, r0, 1 -_080C0CF2: - lsls r0, r2, 16 - asrs r1, r0, 16 - adds r2, r0, 0 - cmp r1, 0x1D - bgt _080C0D14 - adds r0, r3, r1 - lsls r0, 1 - adds r0, r6 - adds r1, r4, r1 - lsls r1, 1 - adds r1, r7 - ldrh r1, [r1] - b _080C0D1C - .align 2, 0 -_080C0D0C: .4byte gUnknown_20399D4 -_080C0D10: .4byte 0x00001796 -_080C0D14: - adds r0, r3, r1 - lsls r0, 1 - adds r0, r6 - ldrh r1, [r7] -_080C0D1C: - strh r1, [r0] - movs r1, 0x80 - lsls r1, 9 - adds r0, r2, r1 - lsrs r2, r0, 16 - asrs r0, 16 - cmp r0, 0x1F - ble _080C0CF2 - adds r0, r5, r1 - lsrs r1, r0, 16 - asrs r0, 16 - cmp r0, 0x13 - ble _080C0CE4 - mov r1, r8 - ldr r0, [r1] - ldr r1, _080C0D94 @ =0x00004797 - adds r0, r1 - ldrb r5, [r0] - cmp r5, 0x1 - bne _080C0D86 - movs r4, 0x3 - str r4, [sp] - str r5, [sp, 0x4] - str r4, [sp, 0x8] - str r5, [sp, 0xC] - movs r0, 0 - movs r1, 0xF0 - movs r2, 0x18 - movs r3, 0xE - bl WriteSequenceToBgTilemapBuffer - movs r1, 0x80 - lsls r1, 1 - str r4, [sp] - str r5, [sp, 0x4] - str r4, [sp, 0x8] - str r5, [sp, 0xC] - movs r0, 0 - movs r2, 0x18 - movs r3, 0xF - bl WriteSequenceToBgTilemapBuffer - movs r1, 0x88 - lsls r1, 1 - str r4, [sp] - str r5, [sp, 0x4] - str r4, [sp, 0x8] - str r5, [sp, 0xC] - movs r0, 0 - movs r2, 0x18 - movs r3, 0x10 - bl WriteSequenceToBgTilemapBuffer -_080C0D86: - ldr r0, _080C0D98 @ =gUnknown_20399D8 - ldr r0, [r0] - cmp r0, 0 - beq _080C0DA0 - ldr r1, _080C0D9C @ =0x00001cca - b _080C0DA6 - .align 2, 0 -_080C0D94: .4byte 0x00004797 -_080C0D98: .4byte gUnknown_20399D8 -_080C0D9C: .4byte 0x00001cca -_080C0DA0: - mov r1, r8 - ldr r0, [r1] - ldr r1, _080C0DF8 @ =0x0000479b -_080C0DA6: - adds r0, r1 - ldrb r4, [r0] - cmp r4, 0x2 - bne _080C0DCC - ldr r0, _080C0DFC @ =0x000008b5 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - bne _080C0DCC - movs r0, 0x3 - str r0, [sp] - str r4, [sp, 0x4] - movs r0, 0 - movs r1, 0x3 - movs r2, 0xD - movs r3, 0xB - bl FillBgTilemapBufferRect_Palette0 -_080C0DCC: - cmp r4, 0x3 - bne _080C0DEC - ldr r0, _080C0E00 @ =0x000008c2 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - bne _080C0DEC - str r4, [sp] - str r4, [sp, 0x4] - movs r0, 0 - movs r1, 0x3 - movs r2, 0x15 - movs r3, 0x10 - bl FillBgTilemapBufferRect_Palette0 -_080C0DEC: - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C0DF8: .4byte 0x0000479b -_080C0DFC: .4byte 0x000008b5 -_080C0E00: .4byte 0x000008c2 - thumb_func_end sub_80C0CC8 - - thumb_func_start sub_80C0E04 -sub_80C0E04: @ 80C0E04 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080C0E18 @ =gUnknown_20399D4 - ldr r1, [r1] - ldr r2, _080C0E1C @ =0x00004797 - adds r1, r2 - adds r1, r0 - ldrb r0, [r1] - bx lr - .align 2, 0 -_080C0E18: .4byte gUnknown_20399D4 -_080C0E1C: .4byte 0x00004797 - thumb_func_end sub_80C0E04 - - thumb_func_start sub_80C0E20 -sub_80C0E20: @ 80C0E20 - ldr r0, _080C0E2C @ =gUnknown_20399D4 - ldr r0, [r0] - ldr r1, _080C0E30 @ =0x0000479b - adds r0, r1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_080C0E2C: .4byte gUnknown_20399D4 -_080C0E30: .4byte 0x0000479b - thumb_func_end sub_80C0E20 - - thumb_func_start sub_80C0E34 -sub_80C0E34: @ 80C0E34 - ldr r0, _080C0E40 @ =gUnknown_20399D4 - ldr r0, [r0] - ldr r1, _080C0E44 @ =0x0000479c - adds r0, r1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_080C0E40: .4byte gUnknown_20399D4 -_080C0E44: .4byte 0x0000479c - thumb_func_end sub_80C0E34 - - thumb_func_start sub_80C0E48 -sub_80C0E48: @ 80C0E48 - ldr r1, _080C0E54 @ =gUnknown_20399D4 - ldr r1, [r1] - ldr r2, _080C0E58 @ =0x0000479b - adds r1, r2 - strb r0, [r1] - bx lr - .align 2, 0 -_080C0E54: .4byte gUnknown_20399D4 -_080C0E58: .4byte 0x0000479b - thumb_func_end sub_80C0E48 - - thumb_func_start sub_80C0E5C -sub_80C0E5C: @ 80C0E5C - ldr r1, _080C0E68 @ =gUnknown_20399D4 - ldr r1, [r1] - ldr r2, _080C0E6C @ =0x0000479c - adds r1, r2 - strb r0, [r1] - bx lr - .align 2, 0 -_080C0E68: .4byte gUnknown_20399D4 -_080C0E6C: .4byte 0x0000479c - thumb_func_end sub_80C0E5C - thumb_func_start sub_80C0E70 sub_80C0E70: @ 80C0E70 push {r4-r7,lr} diff --git a/include/constants/region_map.h b/include/constants/region_map.h index e096f08a2..bd087bd60 100644 --- a/include/constants/region_map.h +++ b/include/constants/region_map.h @@ -90,7 +90,8 @@ #define MAPSEC_SECRET_BASE 0x56 #define MAPSEC_DYNAMIC 0x57 -// Kanto landmarks +#define MAPSECS_KANTO 0x58 + #define MAPSEC_PALLET_TOWN 0x58 #define MAPSEC_VIRIDIAN_CITY 0x59 #define MAPSEC_PEWTER_CITY 0x5A diff --git a/src/region_map.c b/src/region_map.c index 3f1dd9f08..adcf0dcb6 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -11,6 +11,7 @@ #include "sound.h" #include "new_menu_helpers.h" #include "menu.h" +#include "string_util.h" #include "strings.h" #include "constants/flags.h" #include "constants/songs.h" @@ -18,12 +19,11 @@ struct UnkStruct_20399D4 { - u8 field_0000[38]; + u8 field_0000[19]; + u8 field_0013[19]; u16 field_0026[5][600]; // Inefficiency: these should be u8 or have half the elements each - u16 field_1796[BG_SCREEN_SIZE]; - u16 field_2796[BG_SCREEN_SIZE]; - u16 field_3796[BG_SCREEN_SIZE]; + u16 field_1796[3][BG_SCREEN_SIZE]; u8 field_4796; u8 field_4797[4]; u8 field_479B; @@ -34,13 +34,23 @@ struct UnkStruct_20399D4 u8 field_47A4; u8 filler_47A5[3]; u8 field_47A8; - u8 filler_47A9[15]; + u16 field_47AA; + u16 field_47AC; + u16 field_47AE; + u16 field_47B0; + u8 filler_47B2[6]; TaskFunc field_47B8; MainCallback field_47BC; }; +struct UnkStruct_20399D8 +{ + u8 filler_0000[0x1CCA]; + u8 field_1CCA; +}; + EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL; -EWRAM_DATA void * gUnknown_20399D8 = NULL; +EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL; EWRAM_DATA void * gUnknown_20399DC = NULL; EWRAM_DATA void * gUnknown_20399E0 = NULL; EWRAM_DATA void * gUnknown_20399E4 = NULL; @@ -123,6 +133,8 @@ extern const u8 gUnknown_83F1A90[]; extern const u8 sSeviiMapsecs[3][30]; extern const u8 gUnknown_83F1B00[3][4]; extern const u16 gUnknown_83F1B0C[3][4]; +extern const u8 *const gUnknown_83F1A9C[]; +extern const u8 *const gUnknown_83F1CAC[]; static void RegionMap_DarkenPalette(u16 *pal, u16 size, u16 tint) { @@ -583,9 +595,9 @@ void sub_80C0904(void) void sub_80C0A2C(void) { - SetBgTilemapBuffer(0, gUnknown_20399D4->field_1796); - SetBgTilemapBuffer(1, gUnknown_20399D4->field_2796); - SetBgTilemapBuffer(2, gUnknown_20399D4->field_3796); + SetBgTilemapBuffer(0, gUnknown_20399D4->field_1796[0]); + SetBgTilemapBuffer(1, gUnknown_20399D4->field_1796[1]); + SetBgTilemapBuffer(2, gUnknown_20399D4->field_1796[2]); } void sub_80C0A6C(void) @@ -648,3 +660,94 @@ void sub_80C0B9C(void) { sub_80C4CF0(1, gUnknown_83F1B0C[1]); } + +void sub_80C0BB0(void) +{ + u16 mapsecId; + u16 descOffset; + gUnknown_20399D4->field_47AC = 0; + gUnknown_20399D4->field_47AE = 24; + gUnknown_20399D4->field_47B0 = 32; + sub_80C4C9C(1, 1); + ClearWindowTilemap(1); + mapsecId = sub_80C3580(); + if (mapsecId != MAPSEC_NONE) + { + descOffset = mapsecId - MAPSECS_KANTO; + sub_80C4C9C(1, 0); + gUnknown_20399D4->field_47AC = 1; + gUnknown_20399D4->field_47AA = StringLength(gUnknown_83F1CAC[descOffset]); + gUnknown_20399D4->field_47AE = gUnknown_20399D4->field_47AA * 10 + 50; + gUnknown_20399D4->field_47B0 = 48; + FillWindowPixelBuffer(1, PIXEL_FILL(0)); + StringCopy(gUnknown_20399D4->field_0013, gUnknown_83F1CAC[descOffset]); + AddTextPrinterParameterized3(1, 2, 12, 2, gUnknown_83F1A9C[sub_80C3AC8(1) - 2], 0, gUnknown_20399D4->field_0013); + PutWindowTilemap(1); + CopyWindowToVram(1, 3); + } +} + +void sub_80C0CA0(void) +{ + FillWindowPixelBuffer(0, PIXEL_FILL(0)); + CopyWindowToVram(0, 3); + FillWindowPixelBuffer(1, PIXEL_FILL(0)); + CopyWindowToVram(1, 3); +} + +void sub_80C0CC8(u8 bg, u16 *map) +{ + s16 i; + s16 j; + u8 r4; + u16 *buffer = gUnknown_20399D4->field_1796[bg]; + for (i = 0; i < 20; i++) + { + for (j = 0; j < 32; j++) + { + if (j < 30) + buffer[32 * i + j] = map[30 * i + j]; + else + buffer[32 * i + j] = map[0]; + } + } + if (gUnknown_20399D4->field_4797[0] == 1) + { + WriteSequenceToBgTilemapBuffer(0, 0x0F0, 0x18, 0x0E, 3, 1, 0x3, 0x001); + WriteSequenceToBgTilemapBuffer(0, 0x100, 0x18, 0x0F, 3, 1, 0x3, 0x001); + WriteSequenceToBgTilemapBuffer(0, 0x110, 0x18, 0x10, 3, 1, 0x3, 0x001); + } + if (gUnknown_20399D8 != NULL) + r4 = gUnknown_20399D8->field_1CCA; + else + r4 = gUnknown_20399D4->field_479B; + if (r4 == 2 && !FlagGet(FLAG_WORLD_MAP_NAVEL_ROCK_EXTERIOR)) + FillBgTilemapBufferRect_Palette0(0, 0x003, 13, 11, 3, 2); + if (r4 == 3 && !FlagGet(FLAG_WORLD_MAP_BIRTH_ISLAND_EXTERIOR)) + FillBgTilemapBufferRect_Palette0(0, 0x003, 21, 16, 3, 3); +} + +u8 sub_80C0E04(u8 a0) +{ + return gUnknown_20399D4->field_4797[a0]; +} + +u8 sub_80C0E20(void) +{ + return gUnknown_20399D4->field_479B; +} + +u8 sub_80C0E34(void) +{ + return gUnknown_20399D4->field_479C; +} + +void sub_80C0E48(u8 a0) +{ + gUnknown_20399D4->field_479B = a0; +} + +void sub_80C0E5C(u8 a0) +{ + gUnknown_20399D4->field_479C = a0; +} -- cgit v1.2.3 From 20c5160bf7cc192ccd2957e497aa7b13c8e0546c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 3 Jan 2020 10:22:37 -0500 Subject: through sub_80C1058 --- asm/region_map.s | 260 ------------------------------------------------------ include/strings.h | 4 +- src/region_map.c | 100 ++++++++++++++++++++- 3 files changed, 98 insertions(+), 266 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index f0f1de990..07764a5e7 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,266 +5,6 @@ .text - thumb_func_start sub_80C0E70 -sub_80C0E70: @ 80C0E70 - push {r4-r7,lr} - adds r7, r2, 0 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - ldr r4, _080C0EA0 @ =gUnknown_20399D8 - movs r0, 0xE7 - lsls r0, 5 - bl AllocZeroed - str r0, [r4] - ldr r0, _080C0EA4 @ =0x00000846 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _080C0EAC - ldr r0, [r4] - ldr r1, _080C0EA8 @ =0x00001ccc - adds r0, r1 - movs r1, 0x3 - b _080C0ED2 - .align 2, 0 -_080C0EA0: .4byte gUnknown_20399D8 -_080C0EA4: .4byte 0x00000846 -_080C0EA8: .4byte 0x00001ccc -_080C0EAC: - ldr r0, _080C0EC4 @ =0x00000845 - bl FlagGet - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _080C0ECC - ldr r0, [r4] - ldr r2, _080C0EC8 @ =0x00001ccc - adds r0, r2 - movs r1, 0x1 - b _080C0ED2 - .align 2, 0 -_080C0EC4: .4byte 0x00000845 -_080C0EC8: .4byte 0x00001ccc -_080C0ECC: - ldr r0, [r4] - ldr r3, _080C0F14 @ =0x00001ccc - adds r0, r3 -_080C0ED2: - strb r1, [r0] - ldr r4, _080C0F18 @ =gUnknown_20399D8 - ldr r2, [r4] - ldr r0, _080C0F1C @ =0x000018b8 - adds r1, r2, r0 - movs r0, 0x58 - strh r0, [r1] - ldr r3, _080C0F20 @ =0x00001cc4 - adds r1, r2, r3 - movs r0, 0x98 - strh r0, [r1] - ldr r1, _080C0F14 @ =0x00001ccc - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0x2 - beq _080C0F2C - cmp r0, 0x2 - bgt _080C0F4C - cmp r0, 0x1 - bne _080C0F4C - ldr r0, _080C0F24 @ =gUnknown_83F1084 - movs r3, 0x80 - lsls r3, 5 - adds r1, r2, r3 - bl LZ77UnCompWram - ldr r0, [r4] - ldr r1, _080C0F28 @ =0x00001cce - adds r0, r1 - movs r1, 0x6 - strh r1, [r0] - b _080C0F64 - .align 2, 0 -_080C0F14: .4byte 0x00001ccc -_080C0F18: .4byte gUnknown_20399D8 -_080C0F1C: .4byte 0x000018b8 -_080C0F20: .4byte 0x00001cc4 -_080C0F24: .4byte gUnknown_83F1084 -_080C0F28: .4byte 0x00001cce -_080C0F2C: - ldr r0, _080C0F44 @ =gUnknown_83F1190 - movs r3, 0x80 - lsls r3, 5 - adds r1, r2, r3 - bl LZ77UnCompWram - ldr r0, [r4] - ldr r1, _080C0F48 @ =0x00001cce - adds r0, r1 - movs r1, 0x4 - strh r1, [r0] - b _080C0F64 - .align 2, 0 -_080C0F44: .4byte gUnknown_83F1190 -_080C0F48: .4byte 0x00001cce -_080C0F4C: - ldr r0, _080C0FB4 @ =gUnknown_20399D8 - ldr r1, [r0] - ldr r3, _080C0FB8 @ =0x00001cce - adds r2, r1, r3 - movs r0, 0x3 - strh r0, [r2] - ldr r0, _080C0FBC @ =gUnknown_83F0F1C - movs r2, 0x80 - lsls r2, 5 - adds r1, r2 - bl LZ77UnCompWram -_080C0F64: - ldr r0, _080C0FC0 @ =gUnknown_83F0580 - ldr r4, _080C0FB4 @ =gUnknown_20399D8 - ldr r1, [r4] - bl LZ77UnCompWram - ldr r0, [r4] - ldr r3, _080C0FC4 @ =0x00001cc8 - adds r0, r3 - movs r1, 0 - strb r1, [r0] - ldr r0, [r4] - ldr r1, _080C0FC8 @ =0x00001cca - adds r0, r1 - strb r6, [r0] - ldr r0, [r4] - ldr r2, _080C0FCC @ =0x00001cd0 - adds r0, r2 - str r7, [r0] - bl sub_80C0E34 - ldr r1, [r4] - ldr r3, _080C0FD0 @ =0x00001ccb - adds r1, r3 - strb r0, [r1] - movs r0, 0 - bl sub_80C4AAC - ldr r0, _080C0FD4 @ =gUnknown_8418EB0 - bl sub_80C4E74 - ldr r1, _080C0FD8 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _080C0FDC @ =sub_80C1098 - str r1, [r0] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C0FB4: .4byte gUnknown_20399D8 -_080C0FB8: .4byte 0x00001cce -_080C0FBC: .4byte gUnknown_83F0F1C -_080C0FC0: .4byte gUnknown_83F0580 -_080C0FC4: .4byte 0x00001cc8 -_080C0FC8: .4byte 0x00001cca -_080C0FCC: .4byte 0x00001cd0 -_080C0FD0: .4byte 0x00001ccb -_080C0FD4: .4byte gUnknown_8418EB0 -_080C0FD8: .4byte gTasks -_080C0FDC: .4byte sub_80C1098 - thumb_func_end sub_80C0E70 - - thumb_func_start sub_80C0FE0 -sub_80C0FE0: @ 80C0FE0 - push {lr} - bl sub_80C4BE4 - movs r0, 0x1B - movs r1, 0x4 - movs r2, 0x40 - bl sub_80C4C2C - ldr r0, _080C100C @ =gUnknown_20399D8 - ldr r0, [r0] - ldr r1, _080C1010 @ =0x00001ccd - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x10 - subs r0, r1 - lsls r0, 16 - lsrs r0, 16 - bl sub_80C4C5C - pop {r0} - bx r0 - .align 2, 0 -_080C100C: .4byte gUnknown_20399D8 -_080C1010: .4byte 0x00001ccd - thumb_func_end sub_80C0FE0 - - thumb_func_start sub_80C1014 -sub_80C1014: @ 80C1014 - push {r4,lr} - ldr r4, _080C1028 @ =gUnknown_20399D8 - ldr r0, [r4] - ldr r2, _080C102C @ =0x00001ccd - adds r1, r0, r2 - ldrb r0, [r1] - cmp r0, 0xF - bls _080C1030 - movs r0, 0x1 - b _080C104C - .align 2, 0 -_080C1028: .4byte gUnknown_20399D8 -_080C102C: .4byte 0x00001ccd -_080C1030: - ldrb r1, [r1] - movs r0, 0x10 - subs r0, r1 - lsls r0, 16 - lsrs r0, 16 - bl sub_80C4C5C - ldr r1, [r4] - ldr r0, _080C1054 @ =0x00001ccd - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x2 - strb r0, [r1] - movs r0, 0 -_080C104C: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080C1054: .4byte 0x00001ccd - thumb_func_end sub_80C1014 - - thumb_func_start sub_80C1058 -sub_80C1058: @ 80C1058 - push {lr} - ldr r2, _080C106C @ =gUnknown_20399D8 - ldr r0, [r2] - ldr r3, _080C1070 @ =0x00001ccd - adds r1, r0, r3 - ldrb r0, [r1] - cmp r0, 0x1 - bhi _080C1074 - movs r0, 0x1 - b _080C108E - .align 2, 0 -_080C106C: .4byte gUnknown_20399D8 -_080C1070: .4byte 0x00001ccd -_080C1074: - subs r0, 0x2 - strb r0, [r1] - ldr r0, [r2] - ldr r1, _080C1094 @ =0x00001ccd - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x10 - subs r0, r1 - lsls r0, 16 - lsrs r0, 16 - bl sub_80C4C5C - movs r0, 0 -_080C108E: - pop {r1} - bx r1 - .align 2, 0 -_080C1094: .4byte 0x00001ccd - thumb_func_end sub_80C1058 - thumb_func_start sub_80C1098 sub_80C1098: @ 80C1098 push {r4,r5,lr} diff --git a/include/strings.h b/include/strings.h index 6cca52507..4e8abffc3 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1007,8 +1007,8 @@ extern const u8 gText_LinkCableBattles[]; extern const u8 gUnknown_8418EB5[]; extern const u8 gUnknown_8418E8B[]; extern const u8 gUnknown_8418E8D[]; -extern const u8 gUnknown_8418E8B[]; -extern const u8 gUnknown_8418EA7[]; extern const u8 gUnknown_8418E95[]; +extern const u8 gUnknown_8418EA7[]; +extern const u8 gUnknown_8418EB0[]; #endif //GUARD_STRINGS_H diff --git a/src/region_map.c b/src/region_map.c index adcf0dcb6..d4f1ed99e 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -41,13 +41,27 @@ struct UnkStruct_20399D4 u8 filler_47B2[6]; TaskFunc field_47B8; MainCallback field_47BC; -}; +}; // size = 0x47C0 struct UnkStruct_20399D8 { - u8 filler_0000[0x1CCA]; + u8 field_0000[0x1000]; + u8 field_1000[0x4B0]; + u8 filler_14B0[0x408]; + u16 field_18B8; + u8 filler_18BA[0x40A]; + u16 field_1CC4; + u8 filler_1CC6[0x2]; + u8 field_1CC8; + u8 field_1CC9; u8 field_1CCA; -}; + u8 field_1CCB; + u8 field_1CCC; + u8 field_1CCD; + u16 field_1CCE; + TaskFunc field_1CD0; + u8 filler_1CD4[0xC]; +}; // size = 0x1CE0 EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL; EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL; @@ -77,9 +91,12 @@ void sub_80C0AB8(void); void sub_80C0B18(void); void sub_80C0B9C(void); void sub_80C0BB0(void); +void sub_80C1098(u8 taskId); +void sub_80C4AAC(u8 a0); void sub_80C4BE4(void); void sub_80C4C2C(u8 a0, u16 a1, u16 a2); void sub_80C4C48(u16 a0); +void sub_80C4C5C(u16 a0); void sub_80C4C74(u16 a0, u16 a1); void sub_80C4C88(u16 a0); void sub_80C4C9C(u8 a0, u8 a1); @@ -117,14 +134,17 @@ u16 sub_80C3514(void); u16 sub_80C3580(void); #include "data/text/map_section_names.h" - extern const u16 gUnknown_83EF23C[]; extern const u16 gUnknown_83EF2DC[]; extern const u32 gUnknown_83EF61C[]; +extern const u32 gUnknown_83F0580[]; extern const u32 gUnknown_83F089C[]; extern const u32 gUnknown_83F0AFC[]; extern const u32 gUnknown_83F0C0C[]; extern const u32 gUnknown_83F0CF0[]; +extern const u32 gUnknown_83F0F1C[]; +extern const u32 gUnknown_83F1084[]; +extern const u32 gUnknown_83F1190[]; extern const u32 gUnknown_83F1978[]; extern const u32 gUnknown_83F19A0[]; extern const struct BgTemplate gUnknown_83F1A50[4]; @@ -751,3 +771,75 @@ void sub_80C0E5C(u8 a0) { gUnknown_20399D4->field_479C = a0; } + +void sub_80C0E70(u8 a0, u8 taskId, TaskFunc taskFunc) +{ + gUnknown_20399D8 = AllocZeroed(sizeof(struct UnkStruct_20399D8)); + if (FlagGet(FLAG_SYS_SEVII_MAP_4567)) + gUnknown_20399D8->field_1CCC = 3; + else if (FlagGet(FLAG_SYS_SEVII_MAP_123)) + gUnknown_20399D8->field_1CCC = 1; + else + gUnknown_20399D8->field_1CCC = 0; + gUnknown_20399D8->field_18B8 = 0x58; + gUnknown_20399D8->field_1CC4 = 0x98; + switch (gUnknown_20399D8->field_1CCC) + { + case 1: + LZ77UnCompWram(gUnknown_83F1084, gUnknown_20399D8->field_1000); + gUnknown_20399D8->field_1CCE = 6; + break; + case 2: // never reached + LZ77UnCompWram(gUnknown_83F1190, gUnknown_20399D8->field_1000); + gUnknown_20399D8->field_1CCE = 4; + break; + case 3: + default: + gUnknown_20399D8->field_1CCE = 3; + LZ77UnCompWram(gUnknown_83F0F1C, gUnknown_20399D8->field_1000); + break; + } + LZ77UnCompWram(gUnknown_83F0580, gUnknown_20399D8->field_0000); + gUnknown_20399D8->field_1CC8 = 0; + gUnknown_20399D8->field_1CCA = a0; + gUnknown_20399D8->field_1CD0 = taskFunc; + gUnknown_20399D8->field_1CCB = sub_80C0E34(); + sub_80C4AAC(0); + sub_80C4E74(gUnknown_8418EB0); + gTasks[taskId].func = sub_80C1098; +} + +void sub_80C0FE0(void) +{ + sub_80C4BE4(); + sub_80C4C2C(27, 4, 64); + sub_80C4C5C(16 - gUnknown_20399D8->field_1CCD); +} + +bool8 sub_80C1014(void) +{ + if (gUnknown_20399D8->field_1CCD < 16) + { + sub_80C4C5C(16 - gUnknown_20399D8->field_1CCD); + gUnknown_20399D8->field_1CCD += 2; + return FALSE; + } + else + { + return TRUE; + } +} + +bool8 sub_80C1058(void) +{ + if (gUnknown_20399D8->field_1CCD >= 2) + { + gUnknown_20399D8->field_1CCD -= 2; + sub_80C4C5C(16 - gUnknown_20399D8->field_1CCD); + return FALSE; + } + else + { + return TRUE; + } +} -- cgit v1.2.3 From e2fb677742395ed35e08e89f8c1bdfea5555438a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 3 Jan 2020 11:00:37 -0500 Subject: through sub_80C144C --- asm/region_map.s | 465 ------------------------------------------------------ include/strings.h | 1 + src/region_map.c | 206 ++++++++++++++++++++++-- 3 files changed, 194 insertions(+), 478 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index 07764a5e7..55ddb5f9d 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,471 +5,6 @@ .text - thumb_func_start sub_80C1098 -sub_80C1098: @ 80C1098 - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _080C10BC @ =gUnknown_20399D8 - ldr r0, [r1] - ldr r3, _080C10C0 @ =0x00001cc8 - adds r0, r3 - ldrb r0, [r0] - adds r4, r1, 0 - cmp r0, 0xC - bls _080C10B0 - b _080C1274 -_080C10B0: - lsls r0, 2 - ldr r1, _080C10C4 @ =_080C10C8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C10BC: .4byte gUnknown_20399D8 -_080C10C0: .4byte 0x00001cc8 -_080C10C4: .4byte _080C10C8 - .align 2, 0 -_080C10C8: - .4byte _080C10FC - .4byte _080C111C - .4byte _080C112E - .4byte _080C1146 - .4byte _080C115C - .4byte _080C1168 - .4byte _080C1180 - .4byte _080C1192 - .4byte _080C11B0 - .4byte _080C11BE - .4byte _080C1220 - .4byte _080C1236 - .4byte _080C1254 -_080C10FC: - bl sub_80C08E0 - ldr r0, _080C1110 @ =gUnknown_8418EBC - bl sub_80C4E18 - ldr r0, _080C1114 @ =gUnknown_20399D8 - ldr r1, [r0] - ldr r0, _080C1118 @ =0x00001cc8 - adds r1, r0 - b _080C1262 - .align 2, 0 -_080C1110: .4byte gUnknown_8418EBC -_080C1114: .4byte gUnknown_20399D8 -_080C1118: .4byte 0x00001cc8 -_080C111C: - ldr r1, [r4] - movs r2, 0x80 - lsls r2, 5 - movs r0, 0x2 - movs r3, 0 - bl LoadBgTiles - ldr r1, [r4] - b _080C125E -_080C112E: - ldr r1, [r4] - movs r0, 0x80 - lsls r0, 5 - adds r1, r0 - movs r0, 0x2 - bl sub_80C1324 - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - ldr r1, [r4] - b _080C125E -_080C1146: - bl sub_80C0CA0 - ldr r0, _080C1154 @ =gUnknown_20399D8 - ldr r1, [r0] - ldr r0, _080C1158 @ =0x00001cc8 - adds r1, r0 - b _080C1262 - .align 2, 0 -_080C1154: .4byte gUnknown_20399D8 -_080C1158: .4byte 0x00001cc8 -_080C115C: - bl sub_80C0FE0 - movs r0, 0x2 - bl ShowBg - b _080C125A -_080C1168: - bl sub_80C08F4 - ldr r0, _080C1178 @ =gUnknown_20399D8 - ldr r1, [r0] - ldr r0, _080C117C @ =0x00001cc8 - adds r1, r0 - b _080C1262 - .align 2, 0 -_080C1178: .4byte gUnknown_20399D8 -_080C117C: .4byte 0x00001cc8 -_080C1180: - bl sub_80C1014 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C127A - bl sub_80C1390 - b _080C125A -_080C1192: - bl sub_80C144C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C127A - ldr r0, _080C11A8 @ =gUnknown_20399D8 - ldr r1, [r0] - ldr r0, _080C11AC @ =0x00001cc8 - adds r1, r0 - b _080C1262 - .align 2, 0 -_080C11A8: .4byte gUnknown_20399D8 -_080C11AC: .4byte 0x00001cc8 -_080C11B0: - bl sub_80C16D0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C127A - b _080C125A -_080C11BE: - bl sub_80C1478 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C127A - ldr r5, _080C1214 @ =gUnknown_20399D8 - ldr r0, [r5] - ldr r4, _080C1218 @ =0x00001cca - adds r0, r4 - ldrb r0, [r0] - bl sub_80C0E48 - bl sub_80C0E34 - ldr r1, [r5] - adds r1, r4 - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bne _080C120C - movs r0, 0 - bl sub_80C4324 - ldr r0, [r5] - adds r0, r4 - ldrb r0, [r0] - movs r1, 0x19 - movs r2, 0 - bl sub_80C48BC - ldr r0, [r5] - adds r0, r4 - ldrb r0, [r0] - movs r1, 0x19 - movs r2, 0 - bl sub_80C4960 -_080C120C: - ldr r1, [r5] - ldr r0, _080C121C @ =0x00001cc8 - adds r1, r0 - b _080C1262 - .align 2, 0 -_080C1214: .4byte gUnknown_20399D8 -_080C1218: .4byte 0x00001cca -_080C121C: .4byte 0x00001cc8 -_080C1220: - bl sub_80C12EC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C127A - bl sub_80C1880 - bl sub_80C0FE0 - b _080C125A -_080C1236: - bl sub_80C1058 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C127A - ldr r0, _080C124C @ =gUnknown_20399D8 - ldr r1, [r0] - ldr r0, _080C1250 @ =0x00001cc8 - adds r1, r0 - b _080C1262 - .align 2, 0 -_080C124C: .4byte gUnknown_20399D8 -_080C1250: .4byte 0x00001cc8 -_080C1254: - movs r0, 0 - bl sub_80C3154 -_080C125A: - ldr r0, _080C126C @ =gUnknown_20399D8 - ldr r1, [r0] -_080C125E: - ldr r3, _080C1270 @ =0x00001cc8 - adds r1, r3 -_080C1262: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _080C127A - .align 2, 0 -_080C126C: .4byte gUnknown_20399D8 -_080C1270: .4byte 0x00001cc8 -_080C1274: - adds r0, r2, 0 - bl sub_80C1280 -_080C127A: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80C1098 - - thumb_func_start sub_80C1280 -sub_80C1280: @ 80C1280 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080C12D4 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r4, _080C12D8 @ =gUnknown_20399D8 - ldr r0, [r4] - ldr r2, _080C12DC @ =0x00001cd0 - adds r0, r2 - ldr r0, [r0] - str r0, [r1] - movs r0, 0x2 - bl HideBg - ldr r0, _080C12E0 @ =gUnknown_8418EB5 - bl sub_80C4E18 - ldr r0, _080C12E4 @ =gUnknown_8418EA7 - bl sub_80C4E74 - bl sub_80C0AB8 - bl sub_80C0B9C - ldr r1, _080C12E8 @ =gUnknown_83F1B0C+16 - movs r0, 0 - bl sub_80C4CF0 - ldr r0, [r4] - cmp r0, 0 - beq _080C12CC - bl Free - movs r0, 0 - str r0, [r4] -_080C12CC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C12D4: .4byte gTasks -_080C12D8: .4byte gUnknown_20399D8 -_080C12DC: .4byte 0x00001cd0 -_080C12E0: .4byte gUnknown_8418EB5 -_080C12E4: .4byte gUnknown_8418EA7 -_080C12E8: .4byte gUnknown_83F1B0C+16 - thumb_func_end sub_80C1280 - - thumb_func_start sub_80C12EC -sub_80C12EC: @ 80C12EC - push {lr} - ldr r0, _080C1308 @ =gUnknown_20399D8 - ldr r0, [r0] - ldr r2, _080C130C @ =0x00001cdc - adds r1, r0, r2 - ldrh r0, [r1] - cmp r0, 0 - bne _080C1310 - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - movs r0, 0x1 - b _080C131E - .align 2, 0 -_080C1308: .4byte gUnknown_20399D8 -_080C130C: .4byte 0x00001cdc -_080C1310: - subs r0, 0x1 - strh r0, [r1] - ldrh r1, [r1] - movs r0, 0x54 - bl SetGpuReg - movs r0, 0 -_080C131E: - pop {r1} - bx r1 - thumb_func_end sub_80C12EC - - thumb_func_start sub_80C1324 -sub_80C1324: @ 80C1324 - push {r4-r7,lr} - adds r7, r1, 0 - lsls r0, 24 - ldr r1, _080C1360 @ =gUnknown_20399D4 - lsrs r0, 12 - ldr r2, _080C1364 @ =0x00001796 - adds r0, r2 - ldr r1, [r1] - adds r6, r1, r0 - movs r1, 0 -_080C1338: - movs r2, 0 - lsls r5, r1, 16 - asrs r1, r5, 16 - lsls r3, r1, 5 - lsls r0, r1, 4 - subs r0, r1 - lsls r4, r0, 1 -_080C1346: - lsls r0, r2, 16 - asrs r1, r0, 16 - adds r2, r0, 0 - cmp r1, 0x1D - bgt _080C1368 - adds r0, r3, r1 - lsls r0, 1 - adds r0, r6 - adds r1, r4, r1 - lsls r1, 1 - adds r1, r7 - ldrh r1, [r1] - b _080C1370 - .align 2, 0 -_080C1360: .4byte gUnknown_20399D4 -_080C1364: .4byte 0x00001796 -_080C1368: - adds r0, r3, r1 - lsls r0, 1 - adds r0, r6 - ldrh r1, [r7] -_080C1370: - strh r1, [r0] - movs r1, 0x80 - lsls r1, 9 - adds r0, r2, r1 - lsrs r2, r0, 16 - asrs r0, 16 - cmp r0, 0x1F - ble _080C1346 - adds r0, r5, r1 - lsrs r1, r0, 16 - asrs r0, 16 - cmp r0, 0x13 - ble _080C1338 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80C1324 - - thumb_func_start sub_80C1390 -sub_80C1390: @ 80C1390 - push {r4,r5,lr} - sub sp, 0x8 - ldr r0, _080C1428 @ =gUnknown_20399D8 - ldr r2, [r0] - ldr r1, _080C142C @ =0x00001cd4 - adds r0, r2, r1 - movs r1, 0x48 - strh r1, [r0] - ldr r5, _080C1430 @ =0xffff0000 - ldr r0, [sp] - ands r0, r5 - orrs r0, r1 - str r0, [sp] - ldr r0, _080C1434 @ =0x00001cce - adds r3, r2, r0 - ldr r1, _080C1438 @ =0x00001cca - adds r0, r2, r1 - ldrb r1, [r0] - lsls r1, 2 - ldrh r3, [r3] - adds r1, r3 - lsls r1, 3 - ldr r0, _080C143C @ =0x00001cd6 - adds r4, r2, r0 - strh r1, [r4] - lsls r1, 16 - ldr r3, _080C1440 @ =0x0000ffff - ldr r0, [sp] - ands r0, r3 - orrs r0, r1 - str r0, [sp] - ldr r1, _080C1444 @ =0x00001cd8 - adds r0, r2, r1 - movs r1, 0xA8 - strh r1, [r0] - ldr r0, [sp, 0x4] - ands r0, r5 - orrs r0, r1 - str r0, [sp, 0x4] - ldrh r1, [r4] - adds r1, 0x20 - ldr r0, _080C1448 @ =0x00001cda - adds r2, r0 - strh r1, [r2] - ands r1, r3 - lsls r1, 16 - ldr r0, [sp, 0x4] - ands r0, r3 - orrs r0, r1 - str r0, [sp, 0x4] - bl sub_80C4BE4 - movs r0, 0 - movs r1, 0x15 - movs r2, 0xC0 - bl sub_80C4C2C - movs r0, 0x1F - movs r1, 0x15 - bl sub_80C4C74 - movs r0, 0x3F - bl sub_80C4C88 - movs r0, 0x1 - movs r1, 0 - bl sub_80C4C9C - movs r0, 0x1 - mov r1, sp - bl sub_80C4CF0 - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C1428: .4byte gUnknown_20399D8 -_080C142C: .4byte 0x00001cd4 -_080C1430: .4byte 0xffff0000 -_080C1434: .4byte 0x00001cce -_080C1438: .4byte 0x00001cca -_080C143C: .4byte 0x00001cd6 -_080C1440: .4byte 0x0000ffff -_080C1444: .4byte 0x00001cd8 -_080C1448: .4byte 0x00001cda - thumb_func_end sub_80C1390 - - thumb_func_start sub_80C144C -sub_80C144C: @ 80C144C - push {lr} - ldr r0, _080C1460 @ =gUnknown_20399D8 - ldr r0, [r0] - ldr r2, _080C1464 @ =0x00001cdc - adds r1, r0, r2 - ldrh r0, [r1] - cmp r0, 0x5 - bls _080C1468 - movs r0, 0x1 - b _080C1474 - .align 2, 0 -_080C1460: .4byte gUnknown_20399D8 -_080C1464: .4byte 0x00001cdc -_080C1468: - adds r0, 0x1 - strh r0, [r1] - ldrh r0, [r1] - bl sub_80C4C48 - movs r0, 0 -_080C1474: - pop {r1} - bx r1 - thumb_func_end sub_80C144C - thumb_func_start sub_80C1478 sub_80C1478: @ 80C1478 push {r4-r7,lr} diff --git a/include/strings.h b/include/strings.h index 4e8abffc3..9895ffbf8 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1010,5 +1010,6 @@ extern const u8 gUnknown_8418E8D[]; extern const u8 gUnknown_8418E95[]; extern const u8 gUnknown_8418EA7[]; extern const u8 gUnknown_8418EB0[]; +extern const u8 gUnknown_8418EBC[]; #endif //GUARD_STRINGS_H diff --git a/src/region_map.c b/src/region_map.c index d4f1ed99e..8394b59d6 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -46,7 +46,7 @@ struct UnkStruct_20399D4 struct UnkStruct_20399D8 { u8 field_0000[0x1000]; - u8 field_1000[0x4B0]; + u16 field_1000[0x258]; u8 filler_14B0[0x408]; u16 field_18B8; u8 filler_18BA[0x40A]; @@ -60,9 +60,18 @@ struct UnkStruct_20399D8 u8 field_1CCD; u16 field_1CCE; TaskFunc field_1CD0; - u8 filler_1CD4[0xC]; + u16 field_1CD4[4]; + u16 field_1CDC; }; // size = 0x1CE0 +struct UnkStruct_80C4CF0 +{ + u16 v0; + u16 v2; + u16 v4; + u16 v6; +}; + EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL; EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL; EWRAM_DATA void * gUnknown_20399DC = NULL; @@ -91,7 +100,19 @@ void sub_80C0AB8(void); void sub_80C0B18(void); void sub_80C0B9C(void); void sub_80C0BB0(void); +void sub_80C0CC8(u8 bg, u16 *map); +bool8 sub_80C0E04(u8 a0); +u8 sub_80C0E20(void); +void sub_80C0E70(u8 a0, u8 taskId, TaskFunc taskFunc); void sub_80C1098(u8 taskId); +void sub_80C1280(u8 taskId); +bool8 sub_80C12EC(void); +void sub_80C1324(u8 bg, u16 *map); +void sub_80C1390(void); +bool8 sub_80C144C(void); +bool8 sub_80C1478(void); +bool8 sub_80C16D0(void); +void sub_80C1880(void); void sub_80C4AAC(u8 a0); void sub_80C4BE4(void); void sub_80C4C2C(u8 a0, u16 a1, u16 a2); @@ -100,11 +121,7 @@ void sub_80C4C5C(u16 a0); void sub_80C4C74(u16 a0, u16 a1); void sub_80C4C88(u16 a0); void sub_80C4C9C(u8 a0, u8 a1); -void sub_80C0CC8(u8 bg, u16 *map); -void sub_80C4CF0(u8 a0, const u16 *a1); -bool8 sub_80C0E04(u8 a0); -u8 sub_80C0E20(void); -void sub_80C0E70(u8 a0, u8 taskId, TaskFunc taskFunc); +void sub_80C4CF0(u8 a0, const struct UnkStruct_80C4CF0 *a1); void sub_80C195C(u8 a0, u8 taskId, TaskFunc taskFunc); void sub_80C2208(u8 taskId, TaskFunc taskFunc); void sub_80C25BC(void); @@ -152,7 +169,7 @@ extern const struct WindowTemplate gUnknown_83F1A60[]; extern const u8 gUnknown_83F1A90[]; extern const u8 sSeviiMapsecs[3][30]; extern const u8 gUnknown_83F1B00[3][4]; -extern const u16 gUnknown_83F1B0C[3][4]; +extern const struct UnkStruct_80C4CF0 gUnknown_83F1B0C[3]; extern const u8 *const gUnknown_83F1A9C[]; extern const u8 *const gUnknown_83F1CAC[]; @@ -651,8 +668,8 @@ void sub_80C0AB8(void) sub_80C4C48(6); sub_80C4C74(0x39, 0x39); sub_80C4C88(0x1b); - sub_80C4CF0(0, gUnknown_83F1B0C[0]); - sub_80C4CF0(1, gUnknown_83F1B0C[1]); + sub_80C4CF0(0, &gUnknown_83F1B0C[0]); + sub_80C4CF0(1, &gUnknown_83F1B0C[1]); sub_80C4C9C(0, 0); if (sub_80C3580() != MAPSEC_NONE) sub_80C4C9C(1, 0); @@ -664,7 +681,7 @@ void sub_80C0B18(void) FillWindowPixelBuffer(0, PIXEL_FILL(0)); if (sub_80C3520() == MAPSEC_NONE) { - sub_80C4CF0(0, gUnknown_83F1B0C[2]); + sub_80C4CF0(0, &gUnknown_83F1B0C[2]); } else { @@ -672,13 +689,13 @@ void sub_80C0B18(void) AddTextPrinterParameterized3(0, 2, 2, 2, gUnknown_83F1A90, 0, gUnknown_20399D4->field_0000); PutWindowTilemap(0); CopyWindowToVram(0, 2); - sub_80C4CF0(0, gUnknown_83F1B0C[0]); + sub_80C4CF0(0, &gUnknown_83F1B0C[0]); } } void sub_80C0B9C(void) { - sub_80C4CF0(1, gUnknown_83F1B0C[1]); + sub_80C4CF0(1, &gUnknown_83F1B0C[1]); } void sub_80C0BB0(void) @@ -843,3 +860,166 @@ bool8 sub_80C1058(void) return TRUE; } } + +void sub_80C1098(u8 taskId) +{ + switch (gUnknown_20399D8->field_1CC8) + { + case 0: + sub_80C08E0(); + sub_80C4E18(gUnknown_8418EBC); + gUnknown_20399D8->field_1CC8++; + break; + case 1: + LoadBgTiles(2, gUnknown_20399D8->field_0000, 0x1000, 0x000); + gUnknown_20399D8->field_1CC8++; + break; + case 2: + sub_80C1324(2, gUnknown_20399D8->field_1000); + CopyBgTilemapBufferToVram(2); + gUnknown_20399D8->field_1CC8++; + break; + case 3: + sub_80C0CA0(); + gUnknown_20399D8->field_1CC8++; + break; + case 4: + sub_80C0FE0(); + ShowBg(2); + gUnknown_20399D8->field_1CC8++; + break; + case 5: + sub_80C08F4(); + gUnknown_20399D8->field_1CC8++; + break; + case 6: + if (sub_80C1014() == TRUE) + { + sub_80C1390(); + gUnknown_20399D8->field_1CC8++; + } + break; + case 7: + if (sub_80C144C() == TRUE) + { + gUnknown_20399D8->field_1CC8++; + } + break; + case 8: + if (sub_80C16D0() == TRUE) + { + gUnknown_20399D8->field_1CC8++; + } + break; + case 9: + if (sub_80C1478() == TRUE) + { + sub_80C0E48(gUnknown_20399D8->field_1CCA); + if (sub_80C0E34() == gUnknown_20399D8->field_1CCA) + { + sub_80C4324(0); + sub_80C48BC(gUnknown_20399D8->field_1CCA, 25, 0); + sub_80C4960(gUnknown_20399D8->field_1CCA, 25, 0); + } + gUnknown_20399D8->field_1CC8++; + } + break; + case 10: + if (sub_80C12EC() == TRUE) + { + sub_80C1880(); + sub_80C0FE0(); + gUnknown_20399D8->field_1CC8++; + } + break; + case 11: + if (sub_80C1058() == TRUE) + { + gUnknown_20399D8->field_1CC8++; + } + break; + case 12: + sub_80C3154(0); + gUnknown_20399D8->field_1CC8++; + break; + default: + sub_80C1280(taskId); + break; + } +} + +void sub_80C1280(u8 taskId) +{ + gTasks[taskId].func = gUnknown_20399D8->field_1CD0; + HideBg(2); + sub_80C4E18(gUnknown_8418EB5); + sub_80C4E74(gUnknown_8418EA7); + sub_80C0AB8(); + sub_80C0B9C(); + sub_80C4CF0(0, &gUnknown_83F1B0C[2]); + if (gUnknown_20399D8 != NULL) + { + FREE_AND_SET_NULL(gUnknown_20399D8); + } +} + +bool8 sub_80C12EC(void) +{ + if (gUnknown_20399D8->field_1CDC != 0) + { + gUnknown_20399D8->field_1CDC--; + SetGpuReg(REG_OFFSET_BLDY, gUnknown_20399D8->field_1CDC); + return FALSE; + } + else + { + SetGpuReg(REG_OFFSET_BLDY, 0); + return TRUE; + } +} + +void sub_80C1324(u8 bg, u16 *map) +{ + s16 i; + s16 j; + u16 *buffer = gUnknown_20399D4->field_1796[bg]; + for (i = 0; i < 20; i++) + { + for (j = 0; j < 32; j++) + { + if (j < 30) + buffer[32 * i + j] = map[30 * i + j]; + else + buffer[32 * i + j] = map[0]; + } + } +} + +void sub_80C1390(void) +{ + struct UnkStruct_80C4CF0 data; + data.v0 = gUnknown_20399D8->field_1CD4[0] = 0x48; + data.v2 = gUnknown_20399D8->field_1CD4[1] = 8 * (gUnknown_20399D8->field_1CCE + 4 * gUnknown_20399D8->field_1CCA); + data.v4 = gUnknown_20399D8->field_1CD4[2] = 0xA8; + data.v6 = gUnknown_20399D8->field_1CD4[3] = gUnknown_20399D8->field_1CD4[1] + 32; + sub_80C4BE4(); + sub_80C4C2C(0, 0x15, 0xc0); + sub_80C4C74(0x1f, 0x15); + sub_80C4C88(0x3f); + sub_80C4C9C(1, 0); + sub_80C4CF0(1, &data); +} + +bool8 sub_80C144C(void) +{ + if (gUnknown_20399D8->field_1CDC < 6) + { + gUnknown_20399D8->field_1CDC++; + sub_80C4C48(gUnknown_20399D8->field_1CDC); + return FALSE; + } + else + { + return TRUE; + } +} -- cgit v1.2.3 From e58e6689b83d1bbcdae1009bc752aa37680a744f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 3 Jan 2020 16:04:43 -0500 Subject: through sub_80C1920 --- asm/region_map.s | 608 ------------------------------------------------------ include/strings.h | 1 + src/region_map.c | 191 ++++++++++++++++- 3 files changed, 184 insertions(+), 616 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index 55ddb5f9d..ceb2213d1 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,614 +5,6 @@ .text - thumb_func_start sub_80C1478 -sub_80C1478: @ 80C1478 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - movs r6, 0 - ldr r0, _080C1574 @ =gUnknown_20399D8 - mov r8, r0 - ldr r5, [r0] - ldr r1, _080C1578 @ =0x00001cd4 - adds r0, r5, r1 - movs r1, 0x48 - strh r1, [r0] - ldr r4, _080C157C @ =0xffff0000 - ldr r0, [sp] - ands r0, r4 - orrs r0, r1 - str r0, [sp] - ldr r3, _080C1580 @ =0x00001cce - adds r2, r5, r3 - ldr r7, _080C1584 @ =0x00001cca - adds r0, r5, r7 - ldrb r1, [r0] - lsls r1, 2 - ldrh r2, [r2] - adds r1, r2 - lsls r1, 3 - ldr r0, _080C1588 @ =0x00001cd6 - adds r3, r5, r0 - strh r1, [r3] - lsls r1, 16 - ldr r2, _080C158C @ =0x0000ffff - ldr r0, [sp] - ands r0, r2 - orrs r0, r1 - str r0, [sp] - ldr r1, _080C1590 @ =0x00001cd8 - adds r0, r5, r1 - movs r1, 0xA8 - strh r1, [r0] - ldr r0, [sp, 0x4] - ands r0, r4 - orrs r0, r1 - str r0, [sp, 0x4] - ldrh r1, [r3] - adds r1, 0x20 - ldr r3, _080C1594 @ =0x00001cda - adds r0, r5, r3 - strh r1, [r0] - ands r1, r2 - lsls r1, 16 - ldr r0, [sp, 0x4] - ands r0, r2 - orrs r0, r1 - str r0, [sp, 0x4] - ldr r0, _080C1598 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080C150E - adds r1, r7, 0 - adds r0, r5, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _080C150E - movs r0, 0xF5 - bl PlaySE - mov r2, r8 - ldr r1, [r2] - adds r1, r7 - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] - movs r6, 0x1 -_080C150E: - ldr r0, _080C1598 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080C1542 - ldr r4, _080C1574 @ =gUnknown_20399D8 - ldr r0, [r4] - ldr r3, _080C1584 @ =0x00001cca - adds r1, r0, r3 - ldr r2, _080C159C @ =0x00001ccc - adds r0, r2 - ldrb r1, [r1] - ldrb r0, [r0] - cmp r1, r0 - bcs _080C1542 - movs r0, 0xF5 - bl PlaySE - ldr r1, [r4] - ldr r3, _080C1584 @ =0x00001cca - adds r1, r3 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - movs r6, 0x1 -_080C1542: - ldr r2, _080C1598 @ =gMain - ldrh r1, [r2, 0x2E] - movs r0, 0x1 - ands r0, r1 - ldr r4, _080C1574 @ =gUnknown_20399D8 - cmp r0, 0 - beq _080C15A8 - ldr r0, [r4] - ldr r1, _080C15A0 @ =0x00001cdc - adds r0, r1 - ldrh r0, [r0] - cmp r0, 0x6 - bne _080C15A8 - movs r0, 0xC7 - bl PlaySE - ldr r0, [r4] - ldr r2, _080C1584 @ =0x00001cca - adds r1, r0, r2 - ldrb r1, [r1] - ldr r3, _080C15A4 @ =0x00001ccb - adds r0, r3 - strb r1, [r0] - movs r0, 0x1 - b _080C16AC - .align 2, 0 -_080C1574: .4byte gUnknown_20399D8 -_080C1578: .4byte 0x00001cd4 -_080C157C: .4byte 0xffff0000 -_080C1580: .4byte 0x00001cce -_080C1584: .4byte 0x00001cca -_080C1588: .4byte 0x00001cd6 -_080C158C: .4byte 0x0000ffff -_080C1590: .4byte 0x00001cd8 -_080C1594: .4byte 0x00001cda -_080C1598: .4byte gMain -_080C159C: .4byte 0x00001ccc -_080C15A0: .4byte 0x00001cdc -_080C15A4: .4byte 0x00001ccb -_080C15A8: - ldrh r1, [r2, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080C1604 - ldr r0, [r4] - ldr r2, _080C15FC @ =0x00001ccb - adds r1, r0, r2 - ldrb r1, [r1] - subs r2, 0x1 - adds r0, r2 - strb r1, [r0] - ldr r3, _080C1600 @ =gUnknown_20399D4 - ldr r0, [r4] - adds r0, r2 - ldrb r0, [r0] - lsls r1, r0, 2 - adds r1, r0 - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 4 - adds r0, 0x26 - ldr r1, [r3] - adds r1, r0 - movs r0, 0 - bl sub_80C0CC8 - movs r0, 0 - bl CopyBgTilemapBufferToVram - movs r0, 0xFF - movs r1, 0x19 - movs r2, 0x1 - bl sub_80C48BC - movs r0, 0xFF - movs r1, 0x19 - movs r2, 0x1 - bl sub_80C4960 - movs r0, 0x1 - b _080C16AC - .align 2, 0 -_080C15FC: .4byte 0x00001ccb -_080C1600: .4byte gUnknown_20399D4 -_080C1604: - cmp r6, 0 - beq _080C166C - ldr r2, _080C168C @ =gUnknown_20399D4 - ldr r5, _080C1690 @ =gUnknown_20399D8 - ldr r0, [r5] - ldr r4, _080C1694 @ =0x00001cca - adds r0, r4 - ldrb r0, [r0] - lsls r1, r0, 2 - adds r1, r0 - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 4 - adds r0, 0x26 - ldr r1, [r2] - adds r1, r0 - movs r0, 0 - bl sub_80C0CC8 - ldr r0, _080C1698 @ =gUnknown_8418EB0 - bl sub_80C4E74 - movs r0, 0 - bl CopyBgTilemapBufferToVram - movs r0, 0x3 - bl CopyBgTilemapBufferToVram - movs r0, 0xFF - movs r1, 0x19 - movs r2, 0x1 - bl sub_80C48BC - movs r0, 0xFF - movs r1, 0x19 - movs r2, 0x1 - bl sub_80C4960 - ldr r0, [r5] - adds r0, r4 - ldrb r0, [r0] - movs r1, 0x19 - movs r2, 0 - bl sub_80C48BC - ldr r0, [r5] - adds r0, r4 - ldrb r0, [r0] - movs r1, 0x19 - movs r2, 0 - bl sub_80C4960 -_080C166C: - ldr r0, _080C1690 @ =gUnknown_20399D8 - ldr r4, [r0] - ldr r3, _080C1694 @ =0x00001cca - adds r4, r3 - bl sub_80C0E34 - ldrb r1, [r4] - lsls r0, 24 - lsrs r0, 24 - cmp r1, r0 - beq _080C169C - movs r0, 0x1 - bl sub_80C4324 - b _080C16A2 - .align 2, 0 -_080C168C: .4byte gUnknown_20399D4 -_080C1690: .4byte gUnknown_20399D8 -_080C1694: .4byte 0x00001cca -_080C1698: .4byte gUnknown_8418EB0 -_080C169C: - movs r0, 0 - bl sub_80C4324 -_080C16A2: - movs r0, 0x1 - mov r1, sp - bl sub_80C4CF0 - movs r0, 0 -_080C16AC: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80C1478 - - thumb_func_start sub_80C16B8 -sub_80C16B8: @ 80C16B8 - ldr r1, _080C16C8 @ =gUnknown_20399D8 - ldr r1, [r1] - ldr r2, _080C16CC @ =0x00001cd6 - adds r1, r2 - ldrh r1, [r1] - adds r1, 0x10 - strh r1, [r0, 0x22] - bx lr - .align 2, 0 -_080C16C8: .4byte gUnknown_20399D8 -_080C16CC: .4byte 0x00001cd6 - thumb_func_end sub_80C16B8 - - thumb_func_start sub_80C16D0 -sub_80C16D0: @ 80C16D0 - push {lr} - ldr r0, _080C16EC @ =gUnknown_20399D8 - ldr r1, [r0] - ldr r2, _080C16F0 @ =0x00001cc9 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0x1 - beq _080C1708 - cmp r0, 0x1 - bgt _080C16F4 - cmp r0, 0 - beq _080C16FA - b _080C1732 - .align 2, 0 -_080C16EC: .4byte gUnknown_20399D8 -_080C16F0: .4byte 0x00001cc9 -_080C16F4: - cmp r0, 0x2 - beq _080C171C - b _080C1732 -_080C16FA: - ldr r0, _080C1700 @ =gUnknown_83EF3C4 - ldr r2, _080C1704 @ =0x000014b0 - b _080C170C - .align 2, 0 -_080C1700: .4byte gUnknown_83EF3C4 -_080C1704: .4byte 0x000014b0 -_080C1708: - ldr r0, _080C1714 @ =gUnknown_83EF450 - ldr r2, _080C1718 @ =0x000018bc -_080C170C: - adds r1, r2 - bl LZ77UnCompWram - b _080C1736 - .align 2, 0 -_080C1714: .4byte gUnknown_83EF450 -_080C1718: .4byte 0x000018bc -_080C171C: - movs r0, 0 - movs r1, 0x2 - movs r2, 0x2 - bl sub_80C1754 - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0x3 - bl sub_80C1754 - b _080C1736 -_080C1732: - movs r0, 0x1 - b _080C1746 -_080C1736: - ldr r0, _080C174C @ =gUnknown_20399D8 - ldr r1, [r0] - ldr r0, _080C1750 @ =0x00001cc9 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - movs r0, 0 -_080C1746: - pop {r1} - bx r1 - .align 2, 0 -_080C174C: .4byte gUnknown_20399D8 -_080C1750: .4byte 0x00001cc9 - thumb_func_end sub_80C16D0 - - thumb_func_start sub_80C1754 -sub_80C1754: @ 80C1754 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r2, 16 - bl sub_80C176C - pop {r0} - bx r0 - thumb_func_end sub_80C1754 - - thumb_func_start sub_80C176C -sub_80C176C: @ 80C176C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x28 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 16 - lsls r2, 16 - lsrs r2, 16 - ldr r3, _080C1848 @ =gUnknown_20399D8 - mov r8, r3 - lsls r5, r0, 6 - adds r5, r0 - lsls r5, 2 - subs r5, r0 - lsls r5, 2 - ldr r4, _080C184C @ =0x000014b0 - adds r0, r5, r4 - ldr r3, [r3] - adds r0, r3, r0 - str r0, [sp, 0x18] - movs r4, 0x80 - lsls r4, 3 - add r0, sp, 0x18 - lsrs r6, r1, 16 - mov r9, r6 - orrs r1, r4 - str r1, [r0, 0x4] - ldr r1, _080C1850 @ =gUnknown_83EF384 - str r1, [sp, 0x20] - ldr r4, _080C1854 @ =0xffff0000 - add r6, sp, 0x20 - ldr r1, [r6, 0x4] - ands r1, r4 - orrs r1, r2 - str r1, [r6, 0x4] - mov r1, sp - movs r4, 0 - mov r7, r9 - strh r7, [r1] - strh r2, [r1, 0x2] - ldr r1, _080C1858 @ =gUnknown_83F1B24 - str r1, [sp, 0x4] - ldr r1, _080C185C @ =gUnknown_83F1B38 - str r1, [sp, 0x8] - str r4, [sp, 0xC] - ldr r1, _080C1860 @ =gDummySpriteAffineAnimTable - str r1, [sp, 0x10] - ldr r1, _080C1864 @ =sub_80C16B8 - str r1, [sp, 0x14] - adds r3, r5 - ldr r4, _080C1868 @ =0x000018b4 - adds r1, r3, r4 - strh r7, [r1] - ldr r1, _080C186C @ =0x000018b6 - adds r3, r1 - strh r2, [r3] - bl LoadSpriteSheet - adds r0, r6, 0 - bl LoadSpritePalette - mov r3, r8 - ldr r2, [r3] - adds r0, r2, r5 - adds r4, 0x4 - adds r0, r4 - movs r6, 0 - ldrsh r1, [r0, r6] - ldr r7, _080C1870 @ =0x00001cce - adds r0, r2, r7 - ldr r3, _080C1874 @ =0x00001cca - adds r2, r3 - ldrb r2, [r2] - lsls r2, 2 - ldrh r0, [r0] - adds r2, r0 - lsls r2, 19 - asrs r2, 16 - mov r0, sp - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - mov r4, r8 - ldr r2, [r4] - ldr r6, _080C1878 @ =0x000018b0 - adds r2, r6 - adds r2, r5 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _080C187C @ =gSprites - adds r1, r0 - str r1, [r2] - adds r1, 0x3E - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - add sp, 0x28 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C1848: .4byte gUnknown_20399D8 -_080C184C: .4byte 0x000014b0 -_080C1850: .4byte gUnknown_83EF384 -_080C1854: .4byte 0xffff0000 -_080C1858: .4byte gUnknown_83F1B24 -_080C185C: .4byte gUnknown_83F1B38 -_080C1860: .4byte gDummySpriteAffineAnimTable -_080C1864: .4byte sub_80C16B8 -_080C1868: .4byte 0x000018b4 -_080C186C: .4byte 0x000018b6 -_080C1870: .4byte 0x00001cce -_080C1874: .4byte 0x00001cca -_080C1878: .4byte 0x000018b0 -_080C187C: .4byte gSprites - thumb_func_end sub_80C176C - - thumb_func_start sub_80C1880 -sub_80C1880: @ 80C1880 - push {r4-r6,lr} - movs r5, 0 - ldr r6, _080C18D0 @ =gUnknown_20399D8 -_080C1886: - ldr r1, [r6] - lsls r0, r5, 6 - adds r0, r5 - lsls r0, 2 - subs r0, r5 - lsls r4, r0, 2 - ldr r0, _080C18D4 @ =0x000018b0 - adds r1, r0 - adds r1, r4 - ldr r0, [r1] - cmp r0, 0 - beq _080C18BE - bl DestroySprite - ldr r0, [r6] - adds r0, r4 - ldr r1, _080C18D8 @ =0x000018b4 - adds r0, r1 - ldrh r0, [r0] - bl FreeSpriteTilesByTag - ldr r0, [r6] - adds r0, r4 - ldr r1, _080C18DC @ =0x000018b6 - adds r0, r1 - ldrh r0, [r0] - bl FreeSpritePaletteByTag -_080C18BE: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x1 - bls _080C1886 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C18D0: .4byte gUnknown_20399D8 -_080C18D4: .4byte 0x000018b0 -_080C18D8: .4byte 0x000018b4 -_080C18DC: .4byte 0x000018b6 - thumb_func_end sub_80C1880 - - thumb_func_start sub_80C18E0 -sub_80C18E0: @ 80C18E0 - push {r4,r5,lr} - lsls r0, 16 - lsrs r4, r0, 16 - movs r2, 0 - ldr r3, _080C1904 @ =gUnknown_83F1B3C - adds r5, r3, 0 - adds r5, 0x8 -_080C18EE: - lsls r0, r2, 1 - adds r0, r2 - lsls r1, r0, 2 - adds r0, r1, r3 - ldrh r0, [r0] - cmp r0, r4 - bne _080C1908 - adds r0, r1, r5 - ldr r0, [r0] - b _080C1914 - .align 2, 0 -_080C1904: .4byte gUnknown_83F1B3C -_080C1908: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x12 - bls _080C18EE - ldr r0, _080C191C @ =gUnknown_8418EC3 -_080C1914: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080C191C: .4byte gUnknown_8418EC3 - thumb_func_end sub_80C18E0 - - thumb_func_start sub_80C1920 -sub_80C1920: @ 80C1920 - push {r4,r5,lr} - lsls r0, 16 - lsrs r4, r0, 16 - movs r2, 0 - ldr r3, _080C1940 @ =gUnknown_83F1B3C - adds r5, r3, 0x4 -_080C192C: - lsls r0, r2, 1 - adds r0, r2 - lsls r1, r0, 2 - adds r0, r1, r3 - ldrh r0, [r0] - cmp r0, r4 - bne _080C1944 - adds r0, r1, r5 - ldr r0, [r0] - b _080C1950 - .align 2, 0 -_080C1940: .4byte gUnknown_83F1B3C -_080C1944: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x12 - bls _080C192C - ldr r0, _080C1958 @ =gUnknown_8418EC3 -_080C1950: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080C1958: .4byte gUnknown_8418EC3 - thumb_func_end sub_80C1920 - thumb_func_start sub_80C195C sub_80C195C: @ 80C195C push {r4-r6,lr} diff --git a/include/strings.h b/include/strings.h index 9895ffbf8..56aa2ec1a 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1011,5 +1011,6 @@ extern const u8 gUnknown_8418E95[]; extern const u8 gUnknown_8418EA7[]; extern const u8 gUnknown_8418EB0[]; extern const u8 gUnknown_8418EBC[]; +extern const u8 gUnknown_8418EC3[]; #endif //GUARD_STRINGS_H diff --git a/src/region_map.c b/src/region_map.c index 8394b59d6..f654ae0cf 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -43,15 +43,20 @@ struct UnkStruct_20399D4 MainCallback field_47BC; }; // size = 0x47C0 +struct UnkStruct_20399D8_14B0 +{ + u8 field_000[0x400]; + struct Sprite * field_400; + u16 field_404; + u16 field_406; + s16 field_408; +}; + struct UnkStruct_20399D8 { u8 field_0000[0x1000]; u16 field_1000[0x258]; - u8 filler_14B0[0x408]; - u16 field_18B8; - u8 filler_18BA[0x40A]; - u16 field_1CC4; - u8 filler_1CC6[0x2]; + struct UnkStruct_20399D8_14B0 field_14B0[2]; u8 field_1CC8; u8 field_1CC9; u8 field_1CCA; @@ -72,6 +77,13 @@ struct UnkStruct_80C4CF0 u16 v6; }; +struct UnkStruct_83F1B3C +{ + u16 field_0; + const u8 *field_4; + const u8 *field_8; +}; + EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL; EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL; EWRAM_DATA void * gUnknown_20399DC = NULL; @@ -112,6 +124,8 @@ void sub_80C1390(void); bool8 sub_80C144C(void); bool8 sub_80C1478(void); bool8 sub_80C16D0(void); +void sub_80C1754(u8 a0, u16 a1, u16 a2); +void sub_80C176C(u8 a0, u16 a1, u16 a2); void sub_80C1880(void); void sub_80C4AAC(u8 a0); void sub_80C4BE4(void); @@ -153,6 +167,9 @@ u16 sub_80C3580(void); #include "data/text/map_section_names.h" extern const u16 gUnknown_83EF23C[]; extern const u16 gUnknown_83EF2DC[]; +extern const u16 gUnknown_83EF384[]; +extern const u32 gUnknown_83EF3C4[]; +extern const u32 gUnknown_83EF450[]; extern const u32 gUnknown_83EF61C[]; extern const u32 gUnknown_83F0580[]; extern const u32 gUnknown_83F089C[]; @@ -167,10 +184,13 @@ extern const u32 gUnknown_83F19A0[]; extern const struct BgTemplate gUnknown_83F1A50[4]; extern const struct WindowTemplate gUnknown_83F1A60[]; extern const u8 gUnknown_83F1A90[]; +extern const u8 *const gUnknown_83F1A9C[]; extern const u8 sSeviiMapsecs[3][30]; extern const u8 gUnknown_83F1B00[3][4]; extern const struct UnkStruct_80C4CF0 gUnknown_83F1B0C[3]; -extern const u8 *const gUnknown_83F1A9C[]; +extern const struct OamData gUnknown_83F1B24; +extern const union AnimCmd *const gUnknown_83F1B38[]; +extern const struct UnkStruct_83F1B3C gUnknown_83F1B3C[]; extern const u8 *const gUnknown_83F1CAC[]; static void RegionMap_DarkenPalette(u16 *pal, u16 size, u16 tint) @@ -798,8 +818,8 @@ void sub_80C0E70(u8 a0, u8 taskId, TaskFunc taskFunc) gUnknown_20399D8->field_1CCC = 1; else gUnknown_20399D8->field_1CCC = 0; - gUnknown_20399D8->field_18B8 = 0x58; - gUnknown_20399D8->field_1CC4 = 0x98; + gUnknown_20399D8->field_14B0[0].field_408 = 0x58; + gUnknown_20399D8->field_14B0[1].field_408 = 0x98; switch (gUnknown_20399D8->field_1CCC) { case 1: @@ -1023,3 +1043,158 @@ bool8 sub_80C144C(void) return TRUE; } } + +bool8 sub_80C1478(void) +{ + bool8 r6 = FALSE; + struct UnkStruct_80C4CF0 data; + data.v0 = gUnknown_20399D8->field_1CD4[0] = 0x48; + data.v2 = gUnknown_20399D8->field_1CD4[1] = 8 * (gUnknown_20399D8->field_1CCE + 4 * gUnknown_20399D8->field_1CCA); + data.v4 = gUnknown_20399D8->field_1CD4[2] = 0xA8; + data.v6 = gUnknown_20399D8->field_1CD4[3] = gUnknown_20399D8->field_1CD4[1] + 32; + if (JOY_NEW(DPAD_UP) && gUnknown_20399D8->field_1CCA != 0) + { + PlaySE(SE_BAG1); + gUnknown_20399D8->field_1CCA--; + r6 = TRUE; + } + if (JOY_NEW(DPAD_DOWN) && gUnknown_20399D8->field_1CCA < gUnknown_20399D8->field_1CCC) + { + PlaySE(SE_BAG1); + gUnknown_20399D8->field_1CCA++; + r6 = TRUE; + } + if (JOY_NEW(A_BUTTON) && gUnknown_20399D8->field_1CDC == 6) + { + PlaySE(SE_W129); + gUnknown_20399D8->field_1CCB = gUnknown_20399D8->field_1CCA; + return TRUE; + } + if (JOY_NEW(B_BUTTON)) + { + gUnknown_20399D8->field_1CCA = gUnknown_20399D8->field_1CCB; + sub_80C0CC8(0, gUnknown_20399D4->field_0026[gUnknown_20399D8->field_1CCA]); + CopyBgTilemapBufferToVram(0); + sub_80C48BC(255, 25, 1); + sub_80C4960(255, 25, 1); + return TRUE; + } + if (r6) + { + sub_80C0CC8(0, gUnknown_20399D4->field_0026[gUnknown_20399D8->field_1CCA]); + sub_80C4E74(gUnknown_8418EB0); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(3); + sub_80C48BC(255, 25, 1); + sub_80C4960(255, 25, 1); + sub_80C48BC(gUnknown_20399D8->field_1CCA, 25, 0); + sub_80C4960(gUnknown_20399D8->field_1CCA, 25, 0); + } + if (gUnknown_20399D8->field_1CCA != sub_80C0E34()) + sub_80C4324(1); + else + sub_80C4324(0); + sub_80C4CF0(1, &data); + return FALSE; +} + +void sub_80C16B8(struct Sprite * sprite) +{ + sprite->pos1.y = gUnknown_20399D8->field_1CD4[1] + 16; +} + +bool8 sub_80C16D0(void) +{ + switch (gUnknown_20399D8->field_1CC9) + { + case 0: + LZ77UnCompWram(gUnknown_83EF3C4, gUnknown_20399D8->field_14B0[0].field_000); + break; + case 1: + LZ77UnCompWram(gUnknown_83EF450, gUnknown_20399D8->field_14B0[1].field_000); + break; + case 2: + sub_80C1754(0, 2, 2); + sub_80C1754(1, 3, 3); + break; + default: + return TRUE; + } + gUnknown_20399D8->field_1CC9++; + return FALSE; +} + +void sub_80C1754(u8 a0, u16 a1, u16 a2) +{ + sub_80C176C(a0, a1, a2); +} + +void sub_80C176C(u8 a0, u16 a1, u16 a2) +{ + u8 spriteId; + + struct SpriteSheet spriteSheet = { + .data = gUnknown_20399D8->field_14B0[a0].field_000, + .size = 0x400, + .tag = a1 + }; + struct SpritePalette spritePalette = { + .data = gUnknown_83EF384, + .tag = a2 + }; + struct SpriteTemplate template = { + .tileTag = a1, + .paletteTag = a2, + .oam = &gUnknown_83F1B24, + .anims = gUnknown_83F1B38, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80C16B8 + }; + + gUnknown_20399D8->field_14B0[a0].field_404 = a1; + gUnknown_20399D8->field_14B0[a0].field_406 = a2; + + LoadSpriteSheet(&spriteSheet); + LoadSpritePalette(&spritePalette); + + spriteId = CreateSprite(&template, gUnknown_20399D8->field_14B0[a0].field_408, 8 * (gUnknown_20399D8->field_1CCE + 4 * gUnknown_20399D8->field_1CCA), 0); + gUnknown_20399D8->field_14B0[a0].field_400 = &gSprites[spriteId]; + gSprites[spriteId].invisible = FALSE; +} + +void sub_80C1880(void) +{ + u8 i; + for (i = 0; i < 2; i++) + { + if (gUnknown_20399D8->field_14B0[i].field_400 != NULL) + { + DestroySprite(gUnknown_20399D8->field_14B0[i].field_400); + FreeSpriteTilesByTag(gUnknown_20399D8->field_14B0[i].field_404); + FreeSpritePaletteByTag(gUnknown_20399D8->field_14B0[i].field_406); + } + } +} + +const u8 *sub_80C18E0(u16 a0) +{ + u8 i; + for (i = 0; i < 19; i++) + { + if (gUnknown_83F1B3C[i].field_0 == a0) + return gUnknown_83F1B3C[i].field_8; + } + return gUnknown_8418EC3; +} + +const u8 *sub_80C1920(u16 a0) +{ + u8 i; + for (i = 0; i < 19; i++) + { + if (gUnknown_83F1B3C[i].field_0 == a0) + return gUnknown_83F1B3C[i].field_4; + } + return gUnknown_8418EC3; +} -- cgit v1.2.3 From 2c825017e6a2e78374ccd97337580c15c2503a23 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 4 Jan 2020 13:12:22 -0500 Subject: through sub_80C1A94 --- asm/region_map.s | 304 ------------------------------------------- include/map_preview_screen.h | 1 + include/strings.h | 1 + src/region_map.c | 116 ++++++++++++++++- 4 files changed, 117 insertions(+), 305 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index ceb2213d1..ab3e5be1b 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,310 +5,6 @@ .text - thumb_func_start sub_80C195C -sub_80C195C: @ 80C195C - push {r4-r6,lr} - adds r6, r2, 0 - lsls r1, 24 - lsrs r5, r1, 24 - ldr r4, _080C19E0 @ =gUnknown_20399DC - ldr r0, _080C19E4 @ =0x00003e28 - bl AllocZeroed - str r0, [r4] - bl sub_80C3580 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xB8 - bne _080C197C - movs r0, 0xBC -_080C197C: - bl sub_80F8544 - ldr r1, [r4] - movs r2, 0xF5 - lsls r2, 6 - adds r1, r2 - str r0, [r1] - cmp r0, 0 - bne _080C199E - movs r0, 0x8A - bl sub_80F8544 - ldr r1, [r4] - movs r3, 0xF5 - lsls r3, 6 - adds r1, r3 - str r0, [r1] -_080C199E: - ldr r0, [r4] - ldr r1, _080C19E8 @ =0x00003d48 - adds r0, r1 - movs r2, 0 - strb r2, [r0] - ldr r0, [r4] - ldr r3, _080C19EC @ =0x00003d4a - adds r0, r3 - strb r2, [r0] - ldr r0, [r4] - subs r3, 0x6 - adds r1, r0, r3 - str r6, [r1] - ldr r1, _080C19F0 @ =0x00003e14 - adds r0, r1 - strh r2, [r0] - movs r0, 0 - bl sub_80C4AAC - bl sub_80C4BE4 - bl sub_80C0CA0 - ldr r1, _080C19F4 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _080C19F8 @ =sub_80C1A94 - str r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C19E0: .4byte gUnknown_20399DC -_080C19E4: .4byte 0x00003e28 -_080C19E8: .4byte 0x00003d48 -_080C19EC: .4byte 0x00003d4a -_080C19F0: .4byte 0x00003e14 -_080C19F4: .4byte gTasks -_080C19F8: .4byte sub_80C1A94 - thumb_func_end sub_80C195C - - thumb_func_start sub_80C19FC -sub_80C19FC: @ 80C19FC - push {lr} - ldr r0, _080C1A18 @ =gUnknown_20399DC - ldr r1, [r0] - ldr r2, _080C1A1C @ =0x00003d4a - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0x1 - beq _080C1A3A - cmp r0, 0x1 - bgt _080C1A20 - cmp r0, 0 - beq _080C1A2A - b _080C1A72 - .align 2, 0 -_080C1A18: .4byte gUnknown_20399DC -_080C1A1C: .4byte 0x00003d4a -_080C1A20: - cmp r0, 0x2 - beq _080C1A50 - cmp r0, 0x3 - beq _080C1A5E - b _080C1A72 -_080C1A2A: - movs r2, 0xF5 - lsls r2, 6 - adds r0, r1, r2 - ldr r0, [r0] - ldr r0, [r0, 0x4] - bl LZ77UnCompWram - b _080C1A76 -_080C1A3A: - movs r2, 0xF5 - lsls r2, 6 - adds r0, r1, r2 - ldr r0, [r0] - ldr r0, [r0, 0x8] - movs r2, 0xE1 - lsls r2, 6 - adds r1, r2 - bl LZ77UnCompWram - b _080C1A76 -_080C1A50: - movs r2, 0xE1 - lsls r2, 6 - movs r0, 0x2 - movs r3, 0 - bl LoadBgTiles - b _080C1A76 -_080C1A5E: - movs r2, 0xF5 - lsls r2, 6 - adds r0, r1, r2 - ldr r0, [r0] - ldr r0, [r0, 0xC] - movs r1, 0xD0 - movs r2, 0x60 - bl LoadPalette - b _080C1A76 -_080C1A72: - movs r0, 0x1 - b _080C1A86 -_080C1A76: - ldr r0, _080C1A8C @ =gUnknown_20399DC - ldr r1, [r0] - ldr r0, _080C1A90 @ =0x00003d4a - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - movs r0, 0 -_080C1A86: - pop {r1} - bx r1 - .align 2, 0 -_080C1A8C: .4byte gUnknown_20399DC -_080C1A90: .4byte 0x00003d4a - thumb_func_end sub_80C19FC - - thumb_func_start sub_80C1A94 -sub_80C1A94: @ 80C1A94 - push {r4,lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _080C1AB8 @ =gUnknown_20399DC - ldr r0, [r1] - ldr r3, _080C1ABC @ =0x00003d48 - adds r0, r3 - ldrb r0, [r0] - adds r4, r1, 0 - cmp r0, 0x9 - bls _080C1AAC - b _080C1BD0 -_080C1AAC: - lsls r0, 2 - ldr r1, _080C1AC0 @ =_080C1AC4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C1AB8: .4byte gUnknown_20399DC -_080C1ABC: .4byte 0x00003d48 -_080C1AC0: .4byte _080C1AC4 - .align 2, 0 -_080C1AC4: - .4byte _080C1AEC - .4byte _080C1B04 - .4byte _080C1B12 - .4byte _080C1B34 - .4byte _080C1B54 - .4byte _080C1B5C - .4byte _080C1B74 - .4byte _080C1B84 - .4byte _080C1B9C - .4byte _080C1BBC -_080C1AEC: - bl sub_80C08E0 - ldr r0, _080C1AFC @ =gUnknown_20399DC - ldr r1, [r0] - ldr r0, _080C1B00 @ =0x00003d48 - adds r1, r0 - b _080C1BCA - .align 2, 0 -_080C1AFC: .4byte gUnknown_20399DC -_080C1B00: .4byte 0x00003d48 -_080C1B04: - bl sub_80C19FC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C1BD0 - b _080C1BC2 -_080C1B12: - bl sub_80C1E94 - ldr r0, _080C1B28 @ =gUnknown_8418E9E - bl sub_80C4E74 - ldr r0, _080C1B2C @ =gUnknown_20399DC - ldr r1, [r0] - ldr r0, _080C1B30 @ =0x00003d48 - adds r1, r0 - b _080C1BCA - .align 2, 0 -_080C1B28: .4byte gUnknown_8418E9E -_080C1B2C: .4byte gUnknown_20399DC -_080C1B30: .4byte 0x00003d48 -_080C1B34: - ldr r1, [r4] - movs r3, 0xE1 - lsls r3, 6 - adds r1, r3 - movs r0, 0x2 - bl sub_80C1E78 - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - ldr r1, [r4] - ldr r0, _080C1B50 @ =0x00003d48 - adds r1, r0 - b _080C1BCA - .align 2, 0 -_080C1B50: .4byte 0x00003d48 -_080C1B54: - movs r0, 0x2 - bl ShowBg - b _080C1BC2 -_080C1B5C: - bl sub_80C08F4 - ldr r0, _080C1B6C @ =gUnknown_20399DC - ldr r1, [r0] - ldr r0, _080C1B70 @ =0x00003d48 - adds r1, r0 - b _080C1BCA - .align 2, 0 -_080C1B6C: .4byte gUnknown_20399DC -_080C1B70: .4byte 0x00003d48 -_080C1B74: - movs r0, 0 - bl sub_80C1F80 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C1BD0 - b _080C1BC2 -_080C1B84: - ldr r0, _080C1B94 @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldr r0, _080C1B98 @ =sub_80C1BE0 - str r0, [r1] - b _080C1BD0 - .align 2, 0 -_080C1B94: .4byte gTasks -_080C1B98: .4byte sub_80C1BE0 -_080C1B9C: - movs r0, 0x1 - bl sub_80C1F80 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C1BD0 - ldr r0, _080C1BB4 @ =gUnknown_20399DC - ldr r1, [r0] - ldr r0, _080C1BB8 @ =0x00003d48 - adds r1, r0 - b _080C1BCA - .align 2, 0 -_080C1BB4: .4byte gUnknown_20399DC -_080C1BB8: .4byte 0x00003d48 -_080C1BBC: - adds r0, r2, 0 - bl sub_80C1E14 -_080C1BC2: - ldr r0, _080C1BD8 @ =gUnknown_20399DC - ldr r1, [r0] - ldr r3, _080C1BDC @ =0x00003d48 - adds r1, r3 -_080C1BCA: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_080C1BD0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C1BD8: .4byte gUnknown_20399DC -_080C1BDC: .4byte 0x00003d48 - thumb_func_end sub_80C1A94 - thumb_func_start sub_80C1BE0 sub_80C1BE0: @ 80C1BE0 push {r4-r7,lr} diff --git a/include/map_preview_screen.h b/include/map_preview_screen.h index 5ab5584e5..c4e2fa70c 100644 --- a/include/map_preview_screen.h +++ b/include/map_preview_screen.h @@ -49,5 +49,6 @@ void sub_80F85BC(u16 a0); u16 sub_80F856C(u8 id); bool8 sub_80F8110(u8 mapsec, bool8 forceFirstTime); bool32 sub_80F83B0(void); +const struct MapPreviewScreen * sub_80F8544(u8 mapsec); #endif //GUARD_MAP_PREVIEW_SCREEN_H diff --git a/include/strings.h b/include/strings.h index 56aa2ec1a..cf26e63fd 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1008,6 +1008,7 @@ extern const u8 gUnknown_8418EB5[]; extern const u8 gUnknown_8418E8B[]; extern const u8 gUnknown_8418E8D[]; extern const u8 gUnknown_8418E95[]; +extern const u8 gUnknown_8418E9E[]; extern const u8 gUnknown_8418EA7[]; extern const u8 gUnknown_8418EB0[]; extern const u8 gUnknown_8418EBC[]; diff --git a/src/region_map.c b/src/region_map.c index f654ae0cf..a42a9183d 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -13,6 +13,7 @@ #include "menu.h" #include "string_util.h" #include "strings.h" +#include "map_preview_screen.h" #include "constants/flags.h" #include "constants/songs.h" #include "constants/region_map.h" @@ -84,9 +85,23 @@ struct UnkStruct_83F1B3C const u8 *field_8; }; +struct UnkStruct_20399DC +{ + u16 field_0000[0x1C20]; + u16 field_3840[0x280]; + const struct MapPreviewScreen * field_3D40; + TaskFunc field_3D44; + u8 field_3D48; + u8 field_3D49; + u8 field_3D4A; + u8 filler_3D4B[0xC9]; + u16 field_3E14; + u8 filler_3E16[0x12]; +}; // size = 0x3E28 + EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL; EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL; -EWRAM_DATA void * gUnknown_20399DC = NULL; +EWRAM_DATA struct UnkStruct_20399DC * gUnknown_20399DC = NULL; EWRAM_DATA void * gUnknown_20399E0 = NULL; EWRAM_DATA void * gUnknown_20399E4 = NULL; EWRAM_DATA void * gUnknown_20399E8 = NULL; @@ -127,6 +142,12 @@ bool8 sub_80C16D0(void); void sub_80C1754(u8 a0, u16 a1, u16 a2); void sub_80C176C(u8 a0, u16 a1, u16 a2); void sub_80C1880(void); +void sub_80C1A94(u8 taskId); +void sub_80C1BE0(u8 taskId); +void sub_80C1E14(u8 taskId); +void sub_80C1E94(void); +void sub_80C1E78(u8 bgId, const u16 * tilemap); +bool8 sub_80C1F80(u8 a0); void sub_80C4AAC(u8 a0); void sub_80C4BE4(void); void sub_80C4C2C(u8 a0, u16 a1, u16 a2); @@ -1198,3 +1219,96 @@ const u8 *sub_80C1920(u16 a0) } return gUnknown_8418EC3; } + +void sub_80C195C(u8 a0, u8 taskId, TaskFunc taskFunc) +{ + u8 r0; + gUnknown_20399DC = AllocZeroed(sizeof(struct UnkStruct_20399DC)); + r0 = sub_80C3580(); + if (r0 == MAPSEC_TANOBY_CHAMBERS) + r0 = MAPSEC_MONEAN_CHAMBER; + gUnknown_20399DC->field_3D40 = sub_80F8544(r0); + if (gUnknown_20399DC->field_3D40 == NULL) + gUnknown_20399DC->field_3D40 = sub_80F8544(MAPSEC_ROCK_TUNNEL); + gUnknown_20399DC->field_3D48 = 0; + gUnknown_20399DC->field_3D4A = 0; + gUnknown_20399DC->field_3D44 = taskFunc; + gUnknown_20399DC->field_3E14 = 0; + sub_80C4AAC(0); + sub_80C4BE4(); + sub_80C0CA0(); + gTasks[taskId].func = sub_80C1A94; +} + +bool8 sub_80C19FC(void) +{ + switch (gUnknown_20399DC->field_3D4A) + { + case 0: + LZ77UnCompWram(gUnknown_20399DC->field_3D40->tilesptr, gUnknown_20399DC->field_0000); + break; + case 1: + LZ77UnCompWram(gUnknown_20399DC->field_3D40->tilemapptr, gUnknown_20399DC->field_3840); + break; + case 2: + LoadBgTiles(2, gUnknown_20399DC->field_0000, 0x3840, 0x000); + break; + case 3: + LoadPalette(gUnknown_20399DC->field_3D40->palptr, 0xD0, 0x60); + break; + default: + return TRUE; + } + gUnknown_20399DC->field_3D4A++; + return FALSE; +} + +void sub_80C1A94(u8 taskId) +{ + switch (gUnknown_20399DC->field_3D48) + { + case 0: + sub_80C08E0(); + gUnknown_20399DC->field_3D48++; + break; + case 1: + if (sub_80C19FC() == TRUE) + gUnknown_20399DC->field_3D48++; + break; + case 2: + sub_80C1E94(); + sub_80C4E74(gUnknown_8418E9E); + gUnknown_20399DC->field_3D48++; + break; + case 3: + sub_80C1E78(2, gUnknown_20399DC->field_3840); + CopyBgTilemapBufferToVram(2); + gUnknown_20399DC->field_3D48++; + break; + case 4: + ShowBg(2); + gUnknown_20399DC->field_3D48++; + break; + case 5: + sub_80C08F4(); + gUnknown_20399DC->field_3D48++; + break; + case 6: + if (sub_80C1F80(0) == TRUE) + gUnknown_20399DC->field_3D48++; + break; + case 7: + gTasks[taskId].func = sub_80C1BE0; + break; + case 8: + if (sub_80C1F80(1) == TRUE) + { + gUnknown_20399DC->field_3D48++; + } + break; + case 9: + sub_80C1E14(taskId); + gUnknown_20399DC->field_3D48++; + break; + } +} -- cgit v1.2.3 From 5cc480bc1765abaaadad2ddd2109a808c7fb960d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 4 Jan 2020 13:40:57 -0500 Subject: through sub_80C1E78 --- asm/region_map.s | 322 ------------------------------------------------------- src/region_map.c | 90 +++++++++++++++- 2 files changed, 88 insertions(+), 324 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index ab3e5be1b..0228baa3e 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,328 +5,6 @@ .text - thumb_func_start sub_80C1BE0 -sub_80C1BE0: @ 80C1BE0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0xC - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _080C1C08 @ =gUnknown_20399DC - ldr r0, [r1] - ldr r3, _080C1C0C @ =0x00003d49 - adds r0, r3 - ldrb r0, [r0] - adds r3, r1, 0 - cmp r0, 0x4 - bls _080C1BFE - b _080C1DF0 -_080C1BFE: - lsls r0, 2 - ldr r1, _080C1C10 @ =_080C1C14 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C1C08: .4byte gUnknown_20399DC -_080C1C0C: .4byte 0x00003d49 -_080C1C10: .4byte _080C1C14 - .align 2, 0 -_080C1C14: - .4byte _080C1C28 - .4byte _080C1C58 - .4byte _080C1C80 - .4byte _080C1CA8 - .4byte _080C1DA0 -_080C1C28: - ldr r1, [r3] - ldr r0, _080C1C48 @ =0x00003e0e - adds r2, r1, r0 - ldr r0, _080C1C4C @ =0x00000133 - strh r0, [r2] - ldr r3, _080C1C50 @ =0x00003e10 - adds r2, r1, r3 - subs r0, 0x33 - strh r0, [r2] - ldr r0, _080C1C54 @ =0x00003e12 - adds r2, r1, r0 - movs r0, 0xF0 - strh r0, [r2] - subs r3, 0xC7 - b _080C1DD6 - .align 2, 0 -_080C1C48: .4byte 0x00003e0e -_080C1C4C: .4byte 0x00000133 -_080C1C50: .4byte 0x00003e10 -_080C1C54: .4byte 0x00003e12 -_080C1C58: - ldr r0, [r3] - ldr r1, _080C1C7C @ =0x00003d4c - adds r0, r1 - ldrb r1, [r0] - adds r2, r1, 0x1 - strb r2, [r0] - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0x28 - bhi _080C1C6E - b _080C1DFE -_080C1C6E: - ldr r0, [r3] - ldr r1, _080C1C7C @ =0x00003d4c - adds r0, r1 - movs r1, 0 - strb r1, [r0] - ldr r1, [r3] - b _080C1DD4 - .align 2, 0 -_080C1C7C: .4byte 0x00003d4c -_080C1C80: - movs r0, 0x2 - movs r1, 0 - bl FillWindowPixelBuffer - movs r0, 0x2 - movs r1, 0x3 - bl CopyWindowToVram - movs r0, 0x2 - bl PutWindowTilemap - ldr r0, _080C1CA0 @ =gUnknown_20399DC - ldr r1, [r0] - ldr r0, _080C1CA4 @ =0x00003d49 - adds r1, r0 - b _080C1DD8 - .align 2, 0 -_080C1CA0: .4byte gUnknown_20399DC -_080C1CA4: .4byte 0x00003d49 -_080C1CA8: - ldr r7, _080C1D10 @ =gUnknown_20399DC - ldr r2, [r7] - ldr r1, _080C1D14 @ =0x00003d4c - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0x19 - bls _080C1D24 - bl sub_80C3580 - lsls r0, 16 - lsrs r0, 16 - bl sub_80C1920 - ldr r1, _080C1D18 @ =gUnknown_83F1A94 - str r1, [sp] - movs r4, 0x1 - negs r4, r4 - str r4, [sp, 0x4] - str r0, [sp, 0x8] - movs r0, 0x2 - movs r1, 0x2 - movs r2, 0x4 - movs r3, 0 - bl AddTextPrinterParameterized3 - bl sub_80C3580 - lsls r0, 16 - lsrs r0, 16 - bl sub_80C18E0 - ldr r1, _080C1D1C @ =gUnknown_83F1A90 - str r1, [sp] - str r4, [sp, 0x4] - str r0, [sp, 0x8] - movs r0, 0x2 - movs r1, 0x2 - movs r2, 0x2 - movs r3, 0xE - bl AddTextPrinterParameterized3 - movs r0, 0x2 - movs r1, 0x3 - bl CopyWindowToVram - ldr r1, [r7] - ldr r3, _080C1D20 @ =0x00003d49 - adds r1, r3 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _080C1D80 - .align 2, 0 -_080C1D10: .4byte gUnknown_20399DC -_080C1D14: .4byte 0x00003d4c -_080C1D18: .4byte gUnknown_83F1A94 -_080C1D1C: .4byte gUnknown_83F1A90 -_080C1D20: .4byte 0x00003d49 -_080C1D24: - cmp r0, 0x14 - bls _080C1D80 - ldr r6, _080C1D88 @ =0x00003e0e - adds r1, r2, r6 - ldrh r0, [r1] - subs r0, 0x6 - strh r0, [r1] - ldr r4, _080C1D8C @ =0x00003e10 - adds r1, r2, r4 - ldrh r0, [r1] - subs r0, 0x5 - strh r0, [r1] - ldr r0, _080C1D90 @ =0x00003e12 - mov r8, r0 - adds r1, r2, r0 - ldrh r0, [r1] - subs r0, 0x5 - strh r0, [r1] - movs r1, 0xF5 - lsls r1, 6 - adds r0, r2, r1 - ldr r0, [r0] - ldr r0, [r0, 0xC] - ldr r5, _080C1D94 @ =0x00003d4e - adds r1, r2, r5 - movs r2, 0x30 - bl CpuSet - ldr r1, [r7] - adds r0, r1, r5 - adds r6, r1, r6 - ldrh r2, [r6] - adds r4, r1, r4 - ldrh r3, [r4] - add r1, r8 - ldrh r1, [r1] - str r1, [sp] - movs r1, 0x30 - bl TintPalette_CustomTone - ldr r0, [r7] - adds r0, r5 - movs r1, 0xD0 - movs r2, 0x60 - bl LoadPalette -_080C1D80: - ldr r0, _080C1D98 @ =gUnknown_20399DC - ldr r1, [r0] - ldr r3, _080C1D9C @ =0x00003d4c - b _080C1DD6 - .align 2, 0 -_080C1D88: .4byte 0x00003e0e -_080C1D8C: .4byte 0x00003e10 -_080C1D90: .4byte 0x00003e12 -_080C1D94: .4byte 0x00003d4e -_080C1D98: .4byte gUnknown_20399DC -_080C1D9C: .4byte 0x00003d4c -_080C1DA0: - ldr r0, _080C1DE0 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _080C1DB4 - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080C1DFE -_080C1DB4: - movs r0, 0x2 - movs r1, 0 - bl FillWindowPixelBuffer - movs r0, 0x2 - movs r1, 0x3 - bl CopyWindowToVram - ldr r2, _080C1DE4 @ =gUnknown_20399DC - ldr r1, [r2] - ldr r0, _080C1DE8 @ =0x00003d48 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r1, [r2] -_080C1DD4: - ldr r3, _080C1DEC @ =0x00003d49 -_080C1DD6: - adds r1, r3 -_080C1DD8: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _080C1DFE - .align 2, 0 -_080C1DE0: .4byte gMain -_080C1DE4: .4byte gUnknown_20399DC -_080C1DE8: .4byte 0x00003d48 -_080C1DEC: .4byte 0x00003d49 -_080C1DF0: - ldr r0, _080C1E0C @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldr r0, _080C1E10 @ =sub_80C1A94 - str r0, [r1] -_080C1DFE: - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C1E0C: .4byte gTasks -_080C1E10: .4byte sub_80C1A94 - thumb_func_end sub_80C1BE0 - - thumb_func_start sub_80C1E14 -sub_80C1E14: @ 80C1E14 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080C1E68 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r4, _080C1E6C @ =gUnknown_20399DC - ldr r0, [r4] - ldr r2, _080C1E70 @ =0x00003d44 - adds r0, r2 - ldr r0, [r0] - str r0, [r1] - movs r0, 0x2 - bl HideBg - movs r0, 0 - bl sub_80C4B30 - bl sub_80C0B18 - bl sub_80C0BB0 - bl sub_80C0AB8 - bl sub_80C0B9C - ldr r0, _080C1E74 @ =gUnknown_8418E8D - bl sub_80C4E74 - ldr r0, [r4] - cmp r0, 0 - beq _080C1E60 - bl Free - movs r0, 0 - str r0, [r4] -_080C1E60: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C1E68: .4byte gTasks -_080C1E6C: .4byte gUnknown_20399DC -_080C1E70: .4byte 0x00003d44 -_080C1E74: .4byte gUnknown_8418E8D - thumb_func_end sub_80C1E14 - - thumb_func_start sub_80C1E78 -sub_80C1E78: @ 80C1E78 - push {lr} - sub sp, 0x8 - movs r0, 0x20 - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBufferRect - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_80C1E78 - thumb_func_start sub_80C1E94 sub_80C1E94: @ 80C1E94 push {r4-r6,lr} diff --git a/src/region_map.c b/src/region_map.c index a42a9183d..74fdad074 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -94,7 +94,13 @@ struct UnkStruct_20399DC u8 field_3D48; u8 field_3D49; u8 field_3D4A; - u8 filler_3D4B[0xC9]; + u8 field_3D4B; + u8 field_3D4C; + u16 field_3D4E[0x30]; + u8 field_3DAE[0x60]; + u16 field_3E0E; + u16 field_3E10; + u16 field_3E12; u16 field_3E14; u8 filler_3E16[0x12]; }; // size = 0x3E28 @@ -142,6 +148,7 @@ bool8 sub_80C16D0(void); void sub_80C1754(u8 a0, u16 a1, u16 a2); void sub_80C176C(u8 a0, u16 a1, u16 a2); void sub_80C1880(void); +void sub_80C195C(u8 a0, u8 taskId, TaskFunc taskFunc); void sub_80C1A94(u8 taskId); void sub_80C1BE0(u8 taskId); void sub_80C1E14(u8 taskId); @@ -157,7 +164,6 @@ void sub_80C4C74(u16 a0, u16 a1); void sub_80C4C88(u16 a0); void sub_80C4C9C(u8 a0, u8 a1); void sub_80C4CF0(u8 a0, const struct UnkStruct_80C4CF0 *a1); -void sub_80C195C(u8 a0, u8 taskId, TaskFunc taskFunc); void sub_80C2208(u8 taskId, TaskFunc taskFunc); void sub_80C25BC(void); void sub_80C2C1C(u8 taskId); @@ -176,6 +182,7 @@ u16 sub_80C3520(void); void sub_80C48BC(u8 a0, u8 a1, u8 a2); void sub_80C4960(u8 a0, u8 a1, u8 a2); void sub_80C4A04(void); +void sub_80C4B30(u8 a0); void sub_80C4D30(void); void sub_80C4E18(const u8 *str); void sub_80C4E74(const u8 *str); @@ -205,6 +212,7 @@ extern const u32 gUnknown_83F19A0[]; extern const struct BgTemplate gUnknown_83F1A50[4]; extern const struct WindowTemplate gUnknown_83F1A60[]; extern const u8 gUnknown_83F1A90[]; +extern const u8 gUnknown_83F1A94[]; extern const u8 *const gUnknown_83F1A9C[]; extern const u8 sSeviiMapsecs[3][30]; extern const u8 gUnknown_83F1B00[3][4]; @@ -1312,3 +1320,81 @@ void sub_80C1A94(u8 taskId) break; } } + +void sub_80C1BE0(u8 taskId) +{ + switch (gUnknown_20399DC->field_3D49) + { + case 0: + gUnknown_20399DC->field_3E0E = 0x0133; + gUnknown_20399DC->field_3E10 = 0x0100; + gUnknown_20399DC->field_3E12 = 0x00F0; + gUnknown_20399DC->field_3D49++; + break; + case 1: + if (gUnknown_20399DC->field_3D4C++ > 40) + { + gUnknown_20399DC->field_3D4C = 0; + gUnknown_20399DC->field_3D49++; + } + break; + case 2: + FillWindowPixelBuffer(2, PIXEL_FILL(0)); + CopyWindowToVram(2, 3); + PutWindowTilemap(2); + gUnknown_20399DC->field_3D49++; + break; + case 3: + if (gUnknown_20399DC->field_3D4C > 25) + { + AddTextPrinterParameterized3(2, 2, 4, 0, gUnknown_83F1A94, -1, sub_80C1920(sub_80C3580())); + AddTextPrinterParameterized3(2, 2, 2, 14, gUnknown_83F1A90, -1, sub_80C18E0(sub_80C3580())); + CopyWindowToVram(2, 3); + gUnknown_20399DC->field_3D49++; + } + else if (gUnknown_20399DC->field_3D4C > 20) + { + gUnknown_20399DC->field_3E0E -= 6; + gUnknown_20399DC->field_3E10 -= 5; + gUnknown_20399DC->field_3E12 -= 5; + CpuCopy16(gUnknown_20399DC->field_3D40->palptr, gUnknown_20399DC->field_3D4E, 0x60); + TintPalette_CustomTone(gUnknown_20399DC->field_3D4E, 0x30, gUnknown_20399DC->field_3E0E, gUnknown_20399DC->field_3E10, gUnknown_20399DC->field_3E12); + LoadPalette(gUnknown_20399DC->field_3D4E, 0xD0, 0x60); + } + gUnknown_20399DC->field_3D4C++; + break; + case 4: + if (JOY_NEW(B_BUTTON) || JOY_NEW(A_BUTTON)) + { + FillWindowPixelBuffer(2, PIXEL_FILL(0)); + CopyWindowToVram(2, 3); + gUnknown_20399DC->field_3D48++; + gUnknown_20399DC->field_3D49++; + } + break; + default: + gTasks[taskId].func = sub_80C1A94; + break; + } +} + +void sub_80C1E14(u8 taskId) +{ + gTasks[taskId].func = gUnknown_20399DC->field_3D44; + HideBg(2); + sub_80C4B30(0); + sub_80C0B18(); + sub_80C0BB0(); + sub_80C0AB8(); + sub_80C0B9C(); + sub_80C4E74(gUnknown_8418E8D); + if (gUnknown_20399DC != NULL) + { + FREE_AND_SET_NULL(gUnknown_20399DC); + } +} + +void sub_80C1E78(u8 bgId, const u16 * tilemap) +{ + CopyToBgTilemapBufferRect(2, tilemap, 0, 0, 32, 20); +} -- cgit v1.2.3 From 550f7f8482407fa7bb8be24dd74df24cb3969284 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 4 Jan 2020 14:26:01 -0500 Subject: sub_80C1E94 --- asm/region_map.s | 109 ------------------------------------------------------- src/region_map.c | 33 ++++++++++++++++- 2 files changed, 31 insertions(+), 111 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index 0228baa3e..61f676e34 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,115 +5,6 @@ .text - thumb_func_start sub_80C1E94 -sub_80C1E94: @ 80C1E94 - push {r4-r6,lr} - bl sub_80C4BE4 - movs r0, 0 - movs r1, 0x11 - movs r2, 0xC0 - bl sub_80C4C2C - ldr r5, _080C1F58 @ =gUnknown_20399DC - ldr r0, [r5] - ldr r1, _080C1F5C @ =0x00003e14 - adds r0, r1 - ldrh r0, [r0] - bl sub_80C4C48 - movs r0, 0 - movs r1, 0xD - bl sub_80C4C74 - movs r0, 0x3B - bl sub_80C4C88 - movs r0, 0x1 - movs r1, 0 - bl sub_80C4C9C - bl sub_80C3508 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - bl sub_80C3514 - lsls r0, 16 - ldr r5, [r5] - lsls r4, 3 - adds r4, 0x20 - ldr r2, _080C1F60 @ =0x00003e16 - adds r1, r5, r2 - strh r4, [r1] - lsrs r0, 13 - adds r0, 0x18 - ldr r3, _080C1F64 @ =0x00003e18 - adds r2, r5, r3 - strh r0, [r2] - ldrh r0, [r1] - adds r0, 0x8 - ldr r4, _080C1F68 @ =0x00003e1a - adds r3, r5, r4 - strh r0, [r3] - ldrh r0, [r2] - adds r0, 0x8 - ldr r6, _080C1F6C @ =0x00003e1c - adds r4, r5, r6 - strh r0, [r4] - ldrh r1, [r1] - movs r0, 0x10 - subs r0, r1 - cmp r0, 0 - bge _080C1F0E - adds r0, 0x7 -_080C1F0E: - asrs r1, r0, 3 - ldr r6, _080C1F70 @ =0x00003e1e - adds r0, r5, r6 - strh r1, [r0] - ldrh r1, [r2] - movs r0, 0x20 - subs r0, r1 - cmp r0, 0 - bge _080C1F22 - adds r0, 0x7 -_080C1F22: - asrs r1, r0, 3 - ldr r2, _080C1F74 @ =0x00003e20 - adds r0, r5, r2 - strh r1, [r0] - ldrh r1, [r3] - movs r0, 0xE0 - subs r0, r1 - cmp r0, 0 - bge _080C1F36 - adds r0, 0x7 -_080C1F36: - asrs r1, r0, 3 - ldr r3, _080C1F78 @ =0x00003e22 - adds r0, r5, r3 - strh r1, [r0] - ldrh r1, [r4] - movs r0, 0x88 - subs r0, r1 - cmp r0, 0 - bge _080C1F4A - adds r0, 0x7 -_080C1F4A: - asrs r1, r0, 3 - ldr r4, _080C1F7C @ =0x00003e24 - adds r0, r5, r4 - strh r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C1F58: .4byte gUnknown_20399DC -_080C1F5C: .4byte 0x00003e14 -_080C1F60: .4byte 0x00003e16 -_080C1F64: .4byte 0x00003e18 -_080C1F68: .4byte 0x00003e1a -_080C1F6C: .4byte 0x00003e1c -_080C1F70: .4byte 0x00003e1e -_080C1F74: .4byte 0x00003e20 -_080C1F78: .4byte 0x00003e22 -_080C1F7C: .4byte 0x00003e24 - thumb_func_end sub_80C1E94 - thumb_func_start sub_80C1F80 sub_80C1F80: @ 80C1F80 push {r4-r6,lr} diff --git a/src/region_map.c b/src/region_map.c index 74fdad074..8a9d91205 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -97,12 +97,19 @@ struct UnkStruct_20399DC u8 field_3D4B; u8 field_3D4C; u16 field_3D4E[0x30]; - u8 field_3DAE[0x60]; + u8 filler_3DAE[0x60]; u16 field_3E0E; u16 field_3E10; u16 field_3E12; u16 field_3E14; - u8 filler_3E16[0x12]; + u16 field_3E16; + u16 field_3E18; + u16 field_3E1A; + u16 field_3E1C; + u16 field_3E1E; + u16 field_3E20; + u16 field_3E22; + u16 field_3E24; }; // size = 0x3E28 EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL; @@ -1398,3 +1405,25 @@ void sub_80C1E78(u8 bgId, const u16 * tilemap) { CopyToBgTilemapBufferRect(2, tilemap, 0, 0, 32, 20); } + +void sub_80C1E94(void) +{ + u16 r4; + u16 r0; + sub_80C4BE4(); + sub_80C4C2C(0, 17, 192); + sub_80C4C48(gUnknown_20399DC->field_3E14); + sub_80C4C74(0, 13); + sub_80C4C88(59); + sub_80C4C9C(1, 0); + r4 = sub_80C3508(); + r0 = sub_80C3514(); + gUnknown_20399DC->field_3E16 = 8 * r4 + 32; + gUnknown_20399DC->field_3E18 = 8 * r0 + 24; + gUnknown_20399DC->field_3E1A = gUnknown_20399DC->field_3E16 + 8; + gUnknown_20399DC->field_3E1C = gUnknown_20399DC->field_3E18 + 8; + gUnknown_20399DC->field_3E1E = (0x10 - gUnknown_20399DC->field_3E16) / 8; + gUnknown_20399DC->field_3E20 = (0x20 - gUnknown_20399DC->field_3E18) / 8; + gUnknown_20399DC->field_3E22 = (0xE0 - gUnknown_20399DC->field_3E1A) / 8; + gUnknown_20399DC->field_3E24 = (0x88 - gUnknown_20399DC->field_3E1C) / 8; +} -- cgit v1.2.3 From a54c1b0664f9762298b068ff5bd1ddfed9eef62b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 4 Jan 2020 17:54:47 -0500 Subject: through sub_80C22C4 --- asm/region_map.s | 462 ------------------------------------------------------- src/region_map.c | 149 +++++++++++++++++- 2 files changed, 145 insertions(+), 466 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index 61f676e34..afa6ecdb9 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,468 +5,6 @@ .text - thumb_func_start sub_80C1F80 -sub_80C1F80: @ 80C1F80 - push {r4-r6,lr} - sub sp, 0x8 - lsls r0, 24 - cmp r0, 0 - bne _080C2014 - ldr r1, _080C1FF0 @ =gUnknown_20399DC - ldr r2, [r1] - ldr r0, _080C1FF4 @ =0x00003d4b - adds r3, r2, r0 - ldrb r0, [r3] - adds r6, r1, 0 - cmp r0, 0x7 - bhi _080C2024 - ldr r4, _080C1FF8 @ =0x00003e16 - adds r1, r2, r4 - adds r4, 0x8 - adds r0, r2, r4 - ldrh r0, [r0] - ldrh r4, [r1] - adds r0, r4 - strh r0, [r1] - ldr r0, _080C1FFC @ =0x00003e18 - adds r1, r2, r0 - ldr r4, _080C2000 @ =0x00003e20 - adds r0, r2, r4 - ldrh r0, [r0] - ldrh r4, [r1] - adds r0, r4 - strh r0, [r1] - ldr r0, _080C2004 @ =0x00003e1a - adds r1, r2, r0 - ldr r4, _080C2008 @ =0x00003e22 - adds r0, r2, r4 - ldrh r0, [r0] - ldrh r4, [r1] - adds r0, r4 - strh r0, [r1] - ldr r0, _080C200C @ =0x00003e1c - adds r1, r2, r0 - ldr r4, _080C2010 @ =0x00003e24 - adds r0, r2, r4 - ldrh r0, [r0] - ldrh r2, [r1] - adds r0, r2 - strh r0, [r1] - ldrb r0, [r3] - adds r0, 0x1 - strb r0, [r3] - ldr r0, [r6] - subs r4, 0x10 - adds r1, r0, r4 - ldrh r0, [r1] - cmp r0, 0x5 - bhi _080C2086 - adds r0, 0x1 - b _080C2084 - .align 2, 0 -_080C1FF0: .4byte gUnknown_20399DC -_080C1FF4: .4byte 0x00003d4b -_080C1FF8: .4byte 0x00003e16 -_080C1FFC: .4byte 0x00003e18 -_080C2000: .4byte 0x00003e20 -_080C2004: .4byte 0x00003e1a -_080C2008: .4byte 0x00003e22 -_080C200C: .4byte 0x00003e1c -_080C2010: .4byte 0x00003e24 -_080C2014: - ldr r1, _080C2028 @ =gUnknown_20399DC - ldr r3, [r1] - ldr r0, _080C202C @ =0x00003d4b - adds r5, r3, r0 - ldrb r0, [r5] - adds r6, r1, 0 - cmp r0, 0 - bne _080C2030 -_080C2024: - movs r0, 0x1 - b _080C20DE - .align 2, 0 -_080C2028: .4byte gUnknown_20399DC -_080C202C: .4byte 0x00003d4b -_080C2030: - ldr r1, _080C20E8 @ =0x00003e16 - adds r2, r3, r1 - ldr r4, _080C20EC @ =0x00003e1e - adds r1, r3, r4 - ldrh r0, [r2] - ldrh r1, [r1] - subs r0, r1 - strh r0, [r2] - ldr r0, _080C20F0 @ =0x00003e18 - adds r2, r3, r0 - adds r4, 0x2 - adds r1, r3, r4 - ldrh r0, [r2] - ldrh r1, [r1] - subs r0, r1 - strh r0, [r2] - ldr r0, _080C20F4 @ =0x00003e1a - adds r2, r3, r0 - adds r4, 0x2 - adds r1, r3, r4 - ldrh r0, [r2] - ldrh r1, [r1] - subs r0, r1 - strh r0, [r2] - ldr r0, _080C20F8 @ =0x00003e1c - adds r2, r3, r0 - adds r4, 0x2 - adds r1, r3, r4 - ldrh r0, [r2] - ldrh r1, [r1] - subs r0, r1 - strh r0, [r2] - ldrb r0, [r5] - subs r0, 0x1 - strb r0, [r5] - ldr r0, [r6] - ldr r2, _080C20FC @ =0x00003e14 - adds r1, r0, r2 - ldrh r0, [r1] - cmp r0, 0 - beq _080C2086 - subs r0, 0x1 -_080C2084: - strh r0, [r1] -_080C2086: - ldr r4, [r6] - ldr r1, _080C20E8 @ =0x00003e16 - adds r0, r4, r1 - ldrh r0, [r0] - ldr r5, _080C2100 @ =0xffff0000 - ldr r2, [sp] - ands r2, r5 - orrs r2, r0 - str r2, [sp] - adds r1, 0x2 - adds r0, r4, r1 - ldrh r1, [r0] - lsls r1, 16 - ldr r3, _080C2104 @ =0x0000ffff - adds r0, r3, 0 - ands r0, r2 - orrs r0, r1 - str r0, [sp] - ldr r2, _080C20F4 @ =0x00003e1a - adds r4, r2 - ldrh r0, [r4] - ldr r1, [sp, 0x4] - ands r1, r5 - orrs r1, r0 - str r1, [sp, 0x4] - ldr r0, [r6] - ldr r4, _080C20F8 @ =0x00003e1c - adds r0, r4 - ldrh r0, [r0] - lsls r0, 16 - ands r3, r1 - orrs r3, r0 - str r3, [sp, 0x4] - movs r0, 0x1 - mov r1, sp - bl sub_80C4CF0 - ldr r0, [r6] - ldr r1, _080C20FC @ =0x00003e14 - adds r0, r1 - ldrh r0, [r0] - bl sub_80C4C48 - movs r0, 0 -_080C20DE: - add sp, 0x8 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080C20E8: .4byte 0x00003e16 -_080C20EC: .4byte 0x00003e1e -_080C20F0: .4byte 0x00003e18 -_080C20F4: .4byte 0x00003e1a -_080C20F8: .4byte 0x00003e1c -_080C20FC: .4byte 0x00003e14 -_080C2100: .4byte 0xffff0000 -_080C2104: .4byte 0x0000ffff - thumb_func_end sub_80C1F80 - - thumb_func_start nullsub_63 -nullsub_63: @ 80C2108 - bx lr - thumb_func_end nullsub_63 - - thumb_func_start sub_80C210C -sub_80C210C: @ 80C210C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x28 - adds r5, r0, 0 - lsls r5, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - ldr r0, _080C21E0 @ =gUnknown_20399E0 - mov r9, r0 - ldr r6, [r0] - lsrs r5, 22 - adds r6, r5 - ldr r0, [r6] - str r0, [sp, 0x18] - movs r3, 0x80 - lsls r3, 3 - mov r10, r3 - add r0, sp, 0x18 - lsls r3, r1, 16 - mov r4, r10 - orrs r3, r4 - str r3, [r0, 0x4] - ldr r3, _080C21E4 @ =gUnknown_83EF3A4 - str r3, [sp, 0x20] - ldr r4, _080C21E8 @ =0xffff0000 - add r7, sp, 0x20 - mov r8, r7 - ldr r3, [r7, 0x4] - ands r3, r4 - orrs r3, r2 - str r3, [r7, 0x4] - mov r3, sp - movs r4, 0 - strh r1, [r3] - strh r2, [r3, 0x2] - ldr r3, _080C21EC @ =gUnknown_83F1C20 - str r3, [sp, 0x4] - ldr r3, _080C21F0 @ =gUnknown_83F1C30 - str r3, [sp, 0x8] - str r4, [sp, 0xC] - ldr r3, _080C21F4 @ =gDummySpriteAffineAnimTable - str r3, [sp, 0x10] - ldr r3, _080C21F8 @ =nullsub_63 - str r3, [sp, 0x14] - ldr r3, [r6] - movs r4, 0x81 - lsls r4, 3 - adds r3, r4 - strh r1, [r3] - ldr r1, [r6] - ldr r7, _080C21FC @ =0x0000040a - adds r1, r7 - strh r2, [r1] - bl LoadSpriteSheet - mov r0, r8 - bl LoadSpritePalette - mov r1, r9 - ldr r0, [r1] - adds r0, r5 - ldr r0, [r0] - ldr r2, _080C2200 @ =0x00000404 - adds r1, r0, r2 - movs r3, 0 - ldrsh r1, [r1, r3] - subs r4, 0x2 - adds r0, r4 - movs r7, 0 - ldrsh r2, [r0, r7] - mov r0, sp - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - mov r2, r9 - ldr r1, [r2] - adds r1, r5 - ldr r2, [r1] - add r2, r10 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _080C2204 @ =gSprites - adds r1, r0 - str r1, [r2] - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - add sp, 0x28 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C21E0: .4byte gUnknown_20399E0 -_080C21E4: .4byte gUnknown_83EF3A4 -_080C21E8: .4byte 0xffff0000 -_080C21EC: .4byte gUnknown_83F1C20 -_080C21F0: .4byte gUnknown_83F1C30 -_080C21F4: .4byte gDummySpriteAffineAnimTable -_080C21F8: .4byte nullsub_63 -_080C21FC: .4byte 0x0000040a -_080C2200: .4byte 0x00000404 -_080C2204: .4byte gSprites - thumb_func_end sub_80C210C - - thumb_func_start sub_80C2208 -sub_80C2208: @ 80C2208 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - mov r9, r1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r4, _080C22A4 @ =gUnknown_20399E0 - ldr r0, _080C22A8 @ =0x00000cd4 - bl AllocZeroed - str r0, [r4] - movs r6, 0 -_080C2224: - ldr r0, _080C22AC @ =0x0000040c - bl AllocZeroed - adds r5, r0, 0 - ldr r7, _080C22A4 @ =gUnknown_20399E0 - ldr r4, [r7] - lsls r0, r6, 2 - adds r4, r0 - str r5, [r4] - adds r0, r6, 0 - movs r1, 0x3 - bl __udivsi3 - lsls r0, 24 - lsrs r0, 19 - adds r0, 0x68 - ldr r1, _080C22B0 @ =0x00000404 - adds r5, r1 - strh r0, [r5] - ldr r4, [r4] - adds r0, r6, 0 - movs r1, 0x3 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 18 - adds r0, 0x28 - ldr r2, _080C22B4 @ =0x00000406 - adds r4, r2 - strh r0, [r4] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x5 - bls _080C2224 - movs r0, 0 - bl sub_80C4AAC - bl sub_80C4BE4 - bl sub_80C24BC - movs r0, 0x1 - bl sub_80C0A88 - ldr r0, [r7] - ldr r1, _080C22B8 @ =0x00000cc8 - adds r0, r1 - mov r2, r9 - str r2, [r0] - ldr r1, _080C22BC @ =gTasks - mov r2, r8 - lsls r0, r2, 2 - add r0, r8 - lsls r0, 3 - adds r0, r1 - ldr r1, _080C22C0 @ =sub_80C267C - str r1, [r0] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C22A4: .4byte gUnknown_20399E0 -_080C22A8: .4byte 0x00000cd4 -_080C22AC: .4byte 0x0000040c -_080C22B0: .4byte 0x00000404 -_080C22B4: .4byte 0x00000406 -_080C22B8: .4byte 0x00000cc8 -_080C22BC: .4byte gTasks -_080C22C0: .4byte sub_80C267C - thumb_func_end sub_80C2208 - - thumb_func_start sub_80C22C4 -sub_80C22C4: @ 80C22C4 - push {r4-r7,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - cmp r2, 0x6 - bne _080C2310 - movs r3, 0 - ldr r7, _080C230C @ =gUnknown_20399E0 - movs r6, 0x80 - lsls r6, 3 - movs r1, 0x1 - adds r0, r4, 0 - ands r0, r1 - lsls r4, r0, 2 - movs r5, 0x5 - negs r5, r5 -_080C22E6: - ldr r0, [r7] - lsls r1, r3, 2 - adds r0, r1 - ldr r0, [r0] - adds r0, r6 - ldr r1, [r0] - adds r1, 0x3E - ldrb r2, [r1] - adds r0, r5, 0 - ands r0, r2 - orrs r0, r4 - strb r0, [r1] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x5 - bls _080C22E6 - b _080C2338 - .align 2, 0 -_080C230C: .4byte gUnknown_20399E0 -_080C2310: - ldr r0, _080C2340 @ =gUnknown_20399E0 - ldr r0, [r0] - lsls r1, r2, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 3 - adds r0, r1 - ldr r2, [r0] - adds r2, 0x3E - movs r0, 0x1 - adds r1, r4, 0 - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2] -_080C2338: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C2340: .4byte gUnknown_20399E0 - thumb_func_end sub_80C22C4 - thumb_func_start sub_80C2344 sub_80C2344: @ 80C2344 push {lr} diff --git a/src/region_map.c b/src/region_map.c index 8a9d91205..ff4262db5 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -112,10 +112,28 @@ struct UnkStruct_20399DC u16 field_3E24; }; // size = 0x3E28 +struct UnkStruct_20399E0_000 +{ + u16 field_000[0x200]; + struct Sprite * field_400; + s16 field_404; + s16 field_406; + u16 field_408; + u16 field_40A; +}; + +struct UnkStruct_20399E0 +{ + struct UnkStruct_20399E0_000 * field_000[6]; + u8 filler_018[0xCB0]; + TaskFunc field_CC8; + u8 filler_CCC[0x8]; +}; // size = 0xCD4 + EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL; EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL; EWRAM_DATA struct UnkStruct_20399DC * gUnknown_20399DC = NULL; -EWRAM_DATA void * gUnknown_20399E0 = NULL; +EWRAM_DATA struct UnkStruct_20399E0 * gUnknown_20399E0 = NULL; EWRAM_DATA void * gUnknown_20399E4 = NULL; EWRAM_DATA void * gUnknown_20399E8 = NULL; EWRAM_DATA void * gUnknown_20399EC = NULL; @@ -161,7 +179,7 @@ void sub_80C1BE0(u8 taskId); void sub_80C1E14(u8 taskId); void sub_80C1E94(void); void sub_80C1E78(u8 bgId, const u16 * tilemap); -bool8 sub_80C1F80(u8 a0); +bool8 sub_80C1F80(bool8 a0); void sub_80C4AAC(u8 a0); void sub_80C4BE4(void); void sub_80C4C2C(u8 a0, u16 a1, u16 a2); @@ -172,6 +190,8 @@ void sub_80C4C88(u16 a0); void sub_80C4C9C(u8 a0, u8 a1); void sub_80C4CF0(u8 a0, const struct UnkStruct_80C4CF0 *a1); void sub_80C2208(u8 taskId, TaskFunc taskFunc); +void sub_80C24BC(void); +void sub_80C267C(u8 taskId); void sub_80C25BC(void); void sub_80C2C1C(u8 taskId); void sub_80C3008(u16 a0, u16 a1); @@ -203,6 +223,7 @@ u16 sub_80C3580(void); extern const u16 gUnknown_83EF23C[]; extern const u16 gUnknown_83EF2DC[]; extern const u16 gUnknown_83EF384[]; +extern const u16 gUnknown_83EF3A4[]; extern const u32 gUnknown_83EF3C4[]; extern const u32 gUnknown_83EF450[]; extern const u32 gUnknown_83EF61C[]; @@ -227,6 +248,8 @@ extern const struct UnkStruct_80C4CF0 gUnknown_83F1B0C[3]; extern const struct OamData gUnknown_83F1B24; extern const union AnimCmd *const gUnknown_83F1B38[]; extern const struct UnkStruct_83F1B3C gUnknown_83F1B3C[]; +extern const struct OamData gUnknown_83F1C20; +extern const union AnimCmd *const gUnknown_83F1C30[]; extern const u8 *const gUnknown_83F1CAC[]; static void RegionMap_DarkenPalette(u16 *pal, u16 size, u16 tint) @@ -1309,14 +1332,14 @@ void sub_80C1A94(u8 taskId) gUnknown_20399DC->field_3D48++; break; case 6: - if (sub_80C1F80(0) == TRUE) + if (sub_80C1F80(FALSE) == TRUE) gUnknown_20399DC->field_3D48++; break; case 7: gTasks[taskId].func = sub_80C1BE0; break; case 8: - if (sub_80C1F80(1) == TRUE) + if (sub_80C1F80(TRUE) == TRUE) { gUnknown_20399DC->field_3D48++; } @@ -1427,3 +1450,121 @@ void sub_80C1E94(void) gUnknown_20399DC->field_3E22 = (0xE0 - gUnknown_20399DC->field_3E1A) / 8; gUnknown_20399DC->field_3E24 = (0x88 - gUnknown_20399DC->field_3E1C) / 8; } + +bool8 sub_80C1F80(bool8 a0) +{ + struct UnkStruct_80C4CF0 data; + + if (!a0) + { + if (gUnknown_20399DC->field_3D4B < 8) + { + gUnknown_20399DC->field_3E16 += gUnknown_20399DC->field_3E1E; + gUnknown_20399DC->field_3E18 += gUnknown_20399DC->field_3E20; + gUnknown_20399DC->field_3E1A += gUnknown_20399DC->field_3E22; + gUnknown_20399DC->field_3E1C += gUnknown_20399DC->field_3E24; + gUnknown_20399DC->field_3D4B++; + if (gUnknown_20399DC->field_3E14 < 6) + gUnknown_20399DC->field_3E14++; + } + else + { + return TRUE; + } + } + else + { + if (gUnknown_20399DC->field_3D4B == 0) + { + return TRUE; + } + else + { + gUnknown_20399DC->field_3E16 -= gUnknown_20399DC->field_3E1E; + gUnknown_20399DC->field_3E18 -= gUnknown_20399DC->field_3E20; + gUnknown_20399DC->field_3E1A -= gUnknown_20399DC->field_3E22; + gUnknown_20399DC->field_3E1C -= gUnknown_20399DC->field_3E24; + gUnknown_20399DC->field_3D4B--; + if (gUnknown_20399DC->field_3E14 > 0) + gUnknown_20399DC->field_3E14--; + } + } + data.v0 = gUnknown_20399DC->field_3E16; + data.v2 = gUnknown_20399DC->field_3E18; + data.v4 = gUnknown_20399DC->field_3E1A; + data.v6 = gUnknown_20399DC->field_3E1C; + sub_80C4CF0(1, &data); + sub_80C4C48(gUnknown_20399DC->field_3E14); + return FALSE; +} + +void nullsub_63(struct Sprite * sprite) +{ + +} + +void sub_80C210C(u8 a0, u8 a1, u8 a2) +{ + u8 spriteId; + struct SpriteSheet spriteSheet = { + .data = gUnknown_20399E0->field_000[a0], + .size = 0x400, + .tag = a1 + }; + struct SpritePalette spritePalette = { + .data = gUnknown_83EF3A4, + .tag = a2 + }; + struct SpriteTemplate template = { + .tileTag = a1, + .paletteTag = a2, + .oam = &gUnknown_83F1C20, + .anims = gUnknown_83F1C30, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = nullsub_63 + }; + + gUnknown_20399E0->field_000[a0]->field_408 = a1; + gUnknown_20399E0->field_000[a0]->field_40A = a2; + LoadSpriteSheet(&spriteSheet); + LoadSpritePalette(&spritePalette); + spriteId = CreateSprite(&template, gUnknown_20399E0->field_000[a0]->field_404, gUnknown_20399E0->field_000[a0]->field_406, 0); + gUnknown_20399E0->field_000[a0]->field_400 = &gSprites[spriteId]; + gSprites[spriteId].invisible = TRUE; +} + +void sub_80C2208(u8 taskId, TaskFunc taskFunc) +{ + u8 i; + + gUnknown_20399E0 = AllocZeroed(sizeof(struct UnkStruct_20399E0)); + for (i = 0; i < 6; i++) + { + gUnknown_20399E0->field_000[i] = AllocZeroed(sizeof(struct UnkStruct_20399E0_000)); + gUnknown_20399E0->field_000[i]->field_404 = 32 * (i / 3) + 0x68; + gUnknown_20399E0->field_000[i]->field_406 = 64 * (i % 3) + 0x28; + } + sub_80C4AAC(0); + sub_80C4BE4(); + sub_80C24BC(); + sub_80C0A88(1); + gUnknown_20399E0->field_CC8 = taskFunc; + gTasks[taskId].func = sub_80C267C; +} + +void sub_80C22C4(u8 a0, bool8 a1) +{ + u8 i; + if (a0 == 6) + { + for (i = 0; i < 6; i++) + { + gUnknown_20399E0->field_000[i]->field_400->invisible = a1; + } + } + else + { + gUnknown_20399E0->field_000[a0]->field_400->invisible = a1; + } +} -- cgit v1.2.3 From 70993fe308b327c0bf3b6947871e1432de9eca37 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 4 Jan 2020 20:38:46 -0500 Subject: through sub_80C2604 --- asm/region_map.s | 391 ------------------------------------------------------- src/region_map.c | 168 +++++++++++++++++++----- 2 files changed, 139 insertions(+), 420 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index afa6ecdb9..e8897693a 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,397 +5,6 @@ .text - thumb_func_start sub_80C2344 -sub_80C2344: @ 80C2344 - push {lr} - ldr r0, _080C2360 @ =gUnknown_20399E0 - ldr r0, [r0] - ldr r1, _080C2364 @ =0x00000ccd - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x8 - bls _080C2356 - b _080C249C -_080C2356: - lsls r0, 2 - ldr r1, _080C2368 @ =_080C236C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C2360: .4byte gUnknown_20399E0 -_080C2364: .4byte 0x00000ccd -_080C2368: .4byte _080C236C - .align 2, 0 -_080C236C: - .4byte _080C2390 - .4byte _080C23B0 - .4byte _080C23D0 - .4byte _080C23F0 - .4byte _080C2410 - .4byte _080C2430 - .4byte _080C2450 - .4byte _080C2468 - .4byte _080C2484 -_080C2390: - ldr r0, _080C23A8 @ =gUnknown_83F12CC - ldr r1, _080C23AC @ =gUnknown_20399E0 - ldr r1, [r1] - ldr r1, [r1] - bl LZ77UnCompWram - movs r0, 0 - movs r1, 0x4 - movs r2, 0x4 - bl sub_80C210C - b _080C24A0 - .align 2, 0 -_080C23A8: .4byte gUnknown_83F12CC -_080C23AC: .4byte gUnknown_20399E0 -_080C23B0: - ldr r0, _080C23C8 @ =gUnknown_83F1550 - ldr r1, _080C23CC @ =gUnknown_20399E0 - ldr r1, [r1] - ldr r1, [r1, 0x4] - bl LZ77UnCompWram - movs r0, 0x1 - movs r1, 0x5 - movs r2, 0x5 - bl sub_80C210C - b _080C24A0 - .align 2, 0 -_080C23C8: .4byte gUnknown_83F1550 -_080C23CC: .4byte gUnknown_20399E0 -_080C23D0: - ldr r0, _080C23E8 @ =gUnknown_83F1738 - ldr r1, _080C23EC @ =gUnknown_20399E0 - ldr r1, [r1] - ldr r1, [r1, 0x8] - bl LZ77UnCompWram - movs r0, 0x2 - movs r1, 0x6 - movs r2, 0x6 - bl sub_80C210C - b _080C24A0 - .align 2, 0 -_080C23E8: .4byte gUnknown_83F1738 -_080C23EC: .4byte gUnknown_20399E0 -_080C23F0: - ldr r0, _080C2408 @ =gUnknown_83F13EC - ldr r1, _080C240C @ =gUnknown_20399E0 - ldr r1, [r1] - ldr r1, [r1, 0xC] - bl LZ77UnCompWram - movs r0, 0x3 - movs r1, 0x7 - movs r2, 0x7 - bl sub_80C210C - b _080C24A0 - .align 2, 0 -_080C2408: .4byte gUnknown_83F13EC -_080C240C: .4byte gUnknown_20399E0 -_080C2410: - ldr r0, _080C2428 @ =gUnknown_83F1640 - ldr r1, _080C242C @ =gUnknown_20399E0 - ldr r1, [r1] - ldr r1, [r1, 0x10] - bl LZ77UnCompWram - movs r0, 0x4 - movs r1, 0x8 - movs r2, 0x8 - bl sub_80C210C - b _080C24A0 - .align 2, 0 -_080C2428: .4byte gUnknown_83F1640 -_080C242C: .4byte gUnknown_20399E0 -_080C2430: - ldr r0, _080C2448 @ =gUnknown_83F1804 - ldr r1, _080C244C @ =gUnknown_20399E0 - ldr r1, [r1] - ldr r1, [r1, 0x14] - bl LZ77UnCompWram - movs r0, 0x5 - movs r1, 0x9 - movs r2, 0x9 - bl sub_80C210C - b _080C24A0 - .align 2, 0 -_080C2448: .4byte gUnknown_83F1804 -_080C244C: .4byte gUnknown_20399E0 -_080C2450: - ldr r0, _080C2460 @ =gUnknown_83F0330 - ldr r1, _080C2464 @ =gUnknown_20399E0 - ldr r1, [r1] - adds r1, 0x18 - bl LZ77UnCompWram - b _080C24A0 - .align 2, 0 -_080C2460: .4byte gUnknown_83F0330 -_080C2464: .4byte gUnknown_20399E0 -_080C2468: - ldr r0, _080C2478 @ =gUnknown_83F0E0C - ldr r1, _080C247C @ =gUnknown_20399E0 - ldr r1, [r1] - ldr r2, _080C2480 @ =0x00000818 - adds r1, r2 - bl LZ77UnCompWram - b _080C24A0 - .align 2, 0 -_080C2478: .4byte gUnknown_83F0E0C -_080C247C: .4byte gUnknown_20399E0 -_080C2480: .4byte 0x00000818 -_080C2484: - ldr r0, _080C2498 @ =gUnknown_20399E0 - ldr r1, [r0] - adds r1, 0x18 - movs r2, 0x80 - lsls r2, 4 - movs r0, 0x1 - movs r3, 0 - bl LoadBgTiles - b _080C24A0 - .align 2, 0 -_080C2498: .4byte gUnknown_20399E0 -_080C249C: - movs r0, 0x1 - b _080C24B0 -_080C24A0: - ldr r0, _080C24B4 @ =gUnknown_20399E0 - ldr r1, [r0] - ldr r0, _080C24B8 @ =0x00000ccd - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - movs r0, 0 -_080C24B0: - pop {r1} - bx r1 - .align 2, 0 -_080C24B4: .4byte gUnknown_20399E0 -_080C24B8: .4byte 0x00000ccd - thumb_func_end sub_80C2344 - - thumb_func_start sub_80C24BC -sub_80C24BC: @ 80C24BC - push {r4,r5,lr} - sub sp, 0x8 - ldr r0, _080C252C @ =gUnknown_20399E0 - ldr r3, [r0] - ldr r0, [r3] - ldr r2, _080C2530 @ =0x00000404 - adds r0, r2 - ldrh r0, [r0] - adds r0, 0x8 - lsls r0, 16 - ldr r4, _080C2534 @ =0xffff0000 - ldr r5, _080C2538 @ =0x0000ffff - lsrs r0, 16 - movs r1, 0x80 - lsls r1, 13 - orrs r0, r1 - str r0, [sp] - ldr r0, [r3, 0xC] - adds r0, r2 - ldrh r1, [r0] - subs r1, 0x8 - lsls r1, 16 - lsrs r1, 16 - ldr r0, [sp, 0x4] - ands r0, r4 - orrs r0, r1 - ands r0, r5 - movs r1, 0xA0 - lsls r1, 16 - orrs r0, r1 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0x2 - movs r2, 0 - bl sub_80C4C2C - movs r0, 0x12 - movs r1, 0 - bl sub_80C4C74 - movs r0, 0x10 - bl sub_80C4C88 - movs r0, 0 - mov r1, sp - bl sub_80C4CF0 - movs r0, 0 - movs r1, 0 - bl sub_80C4C9C - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C252C: .4byte gUnknown_20399E0 -_080C2530: .4byte 0x00000404 -_080C2534: .4byte 0xffff0000 -_080C2538: .4byte 0x0000ffff - thumb_func_end sub_80C24BC - - thumb_func_start sub_80C253C -sub_80C253C: @ 80C253C - push {lr} - sub sp, 0x8 - ldr r0, _080C258C @ =gUnknown_83F1C34 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp] - str r1, [sp, 0x4] - bl sub_80C4BE4 - movs r0, 0x2 - movs r1, 0x29 - movs r2, 0x80 - bl sub_80C4C2C - ldr r0, _080C2590 @ =gUnknown_20399E0 - ldr r0, [r0] - movs r1, 0xCD - lsls r1, 4 - adds r0, r1 - ldrb r0, [r0] - bl sub_80C4C48 - movs r0, 0x37 - movs r1, 0 - bl sub_80C4C74 - movs r0, 0x12 - bl sub_80C4C88 - movs r0, 0 - mov r1, sp - bl sub_80C4CF0 - movs r0, 0 - movs r1, 0 - bl sub_80C4C9C - add sp, 0x8 - pop {r0} - bx r0 - .align 2, 0 -_080C258C: .4byte gUnknown_83F1C34 -_080C2590: .4byte gUnknown_20399E0 - thumb_func_end sub_80C253C - - thumb_func_start sub_80C2594 -sub_80C2594: @ 80C2594 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080C25B0 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r0, _080C25B4 @ =gUnknown_20399E0 - ldr r0, [r0] - ldr r2, _080C25B8 @ =0x00000cc8 - adds r0, r2 - ldr r0, [r0] - str r0, [r1] - bx lr - .align 2, 0 -_080C25B0: .4byte gTasks -_080C25B4: .4byte gUnknown_20399E0 -_080C25B8: .4byte 0x00000cc8 - thumb_func_end sub_80C2594 - - thumb_func_start sub_80C25BC -sub_80C25BC: @ 80C25BC - push {r4-r6,lr} - bl sub_80C2604 - movs r5, 0 - ldr r6, _080C2600 @ =gUnknown_20399E0 -_080C25C6: - ldr r0, [r6] - lsls r4, r5, 2 - adds r0, r4 - ldr r0, [r0] - cmp r0, 0 - beq _080C25DE - bl Free - ldr r0, [r6] - adds r0, r4 - movs r1, 0 - str r1, [r0] -_080C25DE: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x5 - bls _080C25C6 - ldr r4, _080C2600 @ =gUnknown_20399E0 - ldr r0, [r4] - cmp r0, 0 - beq _080C25F8 - bl Free - movs r0, 0 - str r0, [r4] -_080C25F8: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C2600: .4byte gUnknown_20399E0 - thumb_func_end sub_80C25BC - - thumb_func_start sub_80C2604 -sub_80C2604: @ 80C2604 - push {r4-r7,lr} - movs r5, 0 - ldr r7, _080C2670 @ =gUnknown_20399E0 - movs r6, 0x80 - lsls r6, 3 -_080C260E: - ldr r2, [r7] - lsls r4, r5, 2 - adds r2, r4 - ldr r1, [r2] - adds r0, r1, r6 - ldr r0, [r0] - ldrh r0, [r0, 0x20] - ldr r3, _080C2674 @ =0x00000404 - adds r1, r3 - strh r0, [r1] - ldr r1, [r2] - adds r0, r1, r6 - ldr r0, [r0] - ldrh r0, [r0, 0x22] - adds r3, 0x2 - adds r1, r3 - strh r0, [r1] - ldr r0, [r2] - adds r0, r6 - ldr r0, [r0] - cmp r0, 0 - beq _080C2660 - bl DestroySprite - ldr r0, [r7] - adds r0, r4 - ldr r0, [r0] - movs r1, 0x81 - lsls r1, 3 - adds r0, r1 - ldrh r0, [r0] - bl FreeSpriteTilesByTag - ldr r0, [r7] - adds r0, r4 - ldr r0, [r0] - ldr r3, _080C2678 @ =0x0000040a - adds r0, r3 - ldrh r0, [r0] - bl FreeSpritePaletteByTag -_080C2660: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x5 - bls _080C260E - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C2670: .4byte gUnknown_20399E0 -_080C2674: .4byte 0x00000404 -_080C2678: .4byte 0x0000040a - thumb_func_end sub_80C2604 - thumb_func_start sub_80C267C sub_80C267C: @ 80C267C push {r4,r5,lr} diff --git a/src/region_map.c b/src/region_map.c index ff4262db5..c8b60cc36 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -125,11 +125,21 @@ struct UnkStruct_20399E0_000 struct UnkStruct_20399E0 { struct UnkStruct_20399E0_000 * field_000[6]; - u8 filler_018[0xCB0]; + u16 field_018[0x400]; + u16 field_818[0x258]; TaskFunc field_CC8; - u8 filler_CCC[0x8]; + u8 field_CCC; + u8 field_CCD; + u8 filler_CCE[2]; + u8 field_CD0; }; // size = 0xCD4 +#define FREE_IF_NOT_NULL(ptr) ({ \ + if (ptr) { \ + FREE_AND_SET_NULL(ptr); \ + } \ +}) + EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL; EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL; EWRAM_DATA struct UnkStruct_20399DC * gUnknown_20399DC = NULL; @@ -180,36 +190,37 @@ void sub_80C1E14(u8 taskId); void sub_80C1E94(void); void sub_80C1E78(u8 bgId, const u16 * tilemap); bool8 sub_80C1F80(bool8 a0); -void sub_80C4AAC(u8 a0); -void sub_80C4BE4(void); -void sub_80C4C2C(u8 a0, u16 a1, u16 a2); -void sub_80C4C48(u16 a0); -void sub_80C4C5C(u16 a0); -void sub_80C4C74(u16 a0, u16 a1); -void sub_80C4C88(u16 a0); -void sub_80C4C9C(u8 a0, u8 a1); -void sub_80C4CF0(u8 a0, const struct UnkStruct_80C4CF0 *a1); void sub_80C2208(u8 taskId, TaskFunc taskFunc); void sub_80C24BC(void); void sub_80C267C(u8 taskId); void sub_80C25BC(void); +void sub_80C2604(void); void sub_80C2C1C(u8 taskId); void sub_80C3008(u16 a0, u16 a1); void sub_80C3154(u8 a0); void sub_80C3178(void); void sub_80C3188(void); -u8 sub_80C3AC8(u8 a0); u8 sub_80C3400(void); +u16 sub_80C3520(void); +u8 sub_80C3AC8(u8 a0); u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3); void sub_80C41D8(u16 a0, u16 a1); void sub_80C4324(u8 a0); void sub_80C4398(u8 a0, u8 taskId, TaskFunc taskFunc); void sub_80C4348(void); -u16 sub_80C3520(void); void sub_80C48BC(u8 a0, u8 a1, u8 a2); void sub_80C4960(u8 a0, u8 a1, u8 a2); void sub_80C4A04(void); void sub_80C4B30(u8 a0); +void sub_80C4AAC(u8 a0); +void sub_80C4BE4(void); +void sub_80C4C2C(u8 a0, u16 a1, u16 a2); +void sub_80C4C48(u16 a0); +void sub_80C4C5C(u16 a0); +void sub_80C4C74(u16 a0, u16 a1); +void sub_80C4C88(u16 a0); +void sub_80C4C9C(u8 a0, u8 a1); +void sub_80C4CF0(u8 a0, const struct UnkStruct_80C4CF0 *a1); void sub_80C4D30(void); void sub_80C4E18(const u8 *str); void sub_80C4E74(const u8 *str); @@ -227,6 +238,8 @@ extern const u16 gUnknown_83EF3A4[]; extern const u32 gUnknown_83EF3C4[]; extern const u32 gUnknown_83EF450[]; extern const u32 gUnknown_83EF61C[]; +extern const u32 gUnknown_83F0330[]; +extern const u32 gUnknown_83F0E0C[]; extern const u32 gUnknown_83F0580[]; extern const u32 gUnknown_83F089C[]; extern const u32 gUnknown_83F0AFC[]; @@ -235,6 +248,12 @@ extern const u32 gUnknown_83F0CF0[]; extern const u32 gUnknown_83F0F1C[]; extern const u32 gUnknown_83F1084[]; extern const u32 gUnknown_83F1190[]; +extern const u32 gUnknown_83F12CC[]; +extern const u32 gUnknown_83F13EC[]; +extern const u32 gUnknown_83F1550[]; +extern const u32 gUnknown_83F1640[]; +extern const u32 gUnknown_83F1738[]; +extern const u32 gUnknown_83F1804[]; extern const u32 gUnknown_83F1978[]; extern const u32 gUnknown_83F19A0[]; extern const struct BgTemplate gUnknown_83F1A50[4]; @@ -250,6 +269,7 @@ extern const union AnimCmd *const gUnknown_83F1B38[]; extern const struct UnkStruct_83F1B3C gUnknown_83F1B3C[]; extern const struct OamData gUnknown_83F1C20; extern const union AnimCmd *const gUnknown_83F1C30[]; +extern const struct UnkStruct_80C4CF0 gUnknown_83F1C34; extern const u8 *const gUnknown_83F1CAC[]; static void RegionMap_DarkenPalette(u16 *pal, u16 size, u16 tint) @@ -646,18 +666,12 @@ void sub_80C0820(u8 taskId) SetMainCallback2(gMain.savedCallback); else SetMainCallback2(gUnknown_20399D4->field_47BC); - if (gUnknown_20399D4 != NULL) - { - FREE_AND_SET_NULL(gUnknown_20399D4); - } + FREE_IF_NOT_NULL(gUnknown_20399D4); } void sub_80C0898(void) { - if (gUnknown_20399D4 != NULL) - { - FREE_AND_SET_NULL(gUnknown_20399D4); - } + FREE_IF_NOT_NULL(gUnknown_20399D4); } void sub_80C08B4(void) @@ -1036,10 +1050,7 @@ void sub_80C1280(u8 taskId) sub_80C0AB8(); sub_80C0B9C(); sub_80C4CF0(0, &gUnknown_83F1B0C[2]); - if (gUnknown_20399D8 != NULL) - { - FREE_AND_SET_NULL(gUnknown_20399D8); - } + FREE_IF_NOT_NULL(gUnknown_20399D8); } bool8 sub_80C12EC(void) @@ -1418,10 +1429,7 @@ void sub_80C1E14(u8 taskId) sub_80C0AB8(); sub_80C0B9C(); sub_80C4E74(gUnknown_8418E8D); - if (gUnknown_20399DC != NULL) - { - FREE_AND_SET_NULL(gUnknown_20399DC); - } + FREE_IF_NOT_NULL(gUnknown_20399DC); } void sub_80C1E78(u8 bgId, const u16 * tilemap) @@ -1568,3 +1576,105 @@ void sub_80C22C4(u8 a0, bool8 a1) gUnknown_20399E0->field_000[a0]->field_400->invisible = a1; } } + +bool8 sub_80C2344(void) +{ + switch (gUnknown_20399E0->field_CCD) + { + case 0: + LZ77UnCompWram(gUnknown_83F12CC, gUnknown_20399E0->field_000[0]->field_000); + sub_80C210C(0, 4, 4); + break; + case 1: + LZ77UnCompWram(gUnknown_83F1550, gUnknown_20399E0->field_000[1]->field_000); + sub_80C210C(1, 5, 5); + break; + case 2: + LZ77UnCompWram(gUnknown_83F1738, gUnknown_20399E0->field_000[2]->field_000); + sub_80C210C(2, 6, 6); + break; + case 3: + LZ77UnCompWram(gUnknown_83F13EC, gUnknown_20399E0->field_000[3]->field_000); + sub_80C210C(3, 7, 7); + break; + case 4: + LZ77UnCompWram(gUnknown_83F1640, gUnknown_20399E0->field_000[4]->field_000); + sub_80C210C(4, 8, 8); + break; + case 5: + LZ77UnCompWram(gUnknown_83F1804, gUnknown_20399E0->field_000[5]->field_000); + sub_80C210C(5, 9, 9); + break; + case 6: + LZ77UnCompWram(gUnknown_83F0330, gUnknown_20399E0->field_018); + break; + case 7: + LZ77UnCompWram(gUnknown_83F0E0C, gUnknown_20399E0->field_818); + break; + case 8: + LoadBgTiles(1, gUnknown_20399E0->field_018, BG_SCREEN_SIZE, 0x000); + break; + default: + return TRUE; + } + gUnknown_20399E0->field_CCD++; + return FALSE; +} + +void sub_80C24BC(void) +{ + struct UnkStruct_80C4CF0 data; + data.v0 = gUnknown_20399E0->field_000[0]->field_404 + 8; + data.v2 = 0x10; + data.v4 = gUnknown_20399E0->field_000[3]->field_404 - 8; + data.v6 = 0xA0; + sub_80C4C2C(0, 2, 0); + sub_80C4C74(18, 0); + sub_80C4C88(16); + sub_80C4CF0(0, &data); + sub_80C4C9C(0, 0); +} + +void sub_80C253C(void) +{ + struct UnkStruct_80C4CF0 data = gUnknown_83F1C34; + sub_80C4BE4(); + sub_80C4C2C(2, 41, 128); + sub_80C4C48(gUnknown_20399E0->field_CD0); + sub_80C4C74(55, 0); + sub_80C4C88(18); + sub_80C4CF0(0, &data); + sub_80C4C9C(0, 0); +} + +void sub_80C2594(u8 taskId) +{ + gTasks[taskId].func = gUnknown_20399E0->field_CC8; +} + +void sub_80C25BC(void) +{ + u8 i; + sub_80C2604(); + for (i = 0; i < 6; i++) + { + FREE_IF_NOT_NULL(gUnknown_20399E0->field_000[i]); + } + FREE_IF_NOT_NULL(gUnknown_20399E0); +} + +void sub_80C2604(void) +{ + u8 i; + for (i = 0; i < 6; i++) + { + gUnknown_20399E0->field_000[i]->field_404 = gUnknown_20399E0->field_000[i]->field_400->pos1.x; + gUnknown_20399E0->field_000[i]->field_406 = gUnknown_20399E0->field_000[i]->field_400->pos1.y; + if (gUnknown_20399E0->field_000[i]->field_400 != NULL) + { + DestroySprite(gUnknown_20399E0->field_000[i]->field_400); + FreeSpriteTilesByTag(gUnknown_20399E0->field_000[i]->field_408); + FreeSpritePaletteByTag(gUnknown_20399E0->field_000[i]->field_40A); + } + } +} -- cgit v1.2.3 From 29e7c9a8075acd376d2a1140917ea20d4aea7612 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 6 Jan 2020 10:45:11 -0500 Subject: sub_80C267C --- asm/region_map.s | 353 ------------------------------------------------------- src/region_map.c | 111 +++++++++++++++++ 2 files changed, 111 insertions(+), 353 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index e8897693a..8ecc9cbf6 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,359 +5,6 @@ .text - thumb_func_start sub_80C267C -sub_80C267C: @ 80C267C - push {r4,r5,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080C26A0 @ =gUnknown_20399E0 - ldr r0, [r1] - ldr r2, _080C26A4 @ =0x00000ccc - adds r0, r2 - ldrb r0, [r0] - adds r4, r1, 0 - cmp r0, 0xD - bls _080C2696 - b _080C2990 -_080C2696: - lsls r0, 2 - ldr r1, _080C26A8 @ =_080C26AC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C26A0: .4byte gUnknown_20399E0 -_080C26A4: .4byte 0x00000ccc -_080C26A8: .4byte _080C26AC - .align 2, 0 -_080C26AC: - .4byte _080C26E4 - .4byte _080C26FC - .4byte _080C270C - .4byte _080C272C - .4byte _080C2768 - .4byte _080C2788 - .4byte _080C27B4 - .4byte _080C27C4 - .4byte _080C27E4 - .4byte _080C281E - .4byte _080C2868 - .4byte _080C28A4 - .4byte _080C2928 - .4byte _080C296C -_080C26E4: - bl sub_80C08E0 - ldr r0, _080C26F4 @ =gUnknown_20399E0 - ldr r1, [r0] - ldr r0, _080C26F8 @ =0x00000ccc - adds r1, r0 - b _080C297E - .align 2, 0 -_080C26F4: .4byte gUnknown_20399E0 -_080C26F8: .4byte 0x00000ccc -_080C26FC: - bl sub_80C2344 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080C270A - b _080C299A -_080C270A: - b _080C2976 -_080C270C: - ldr r1, [r4] - ldr r0, _080C2728 @ =0x00000818 - adds r1, r0 - movs r0, 0x1E - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBufferRect - ldr r1, [r4] - b _080C297A - .align 2, 0 -_080C2728: .4byte 0x00000818 -_080C272C: - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - movs r4, 0x1 - negs r4, r4 - adds r0, r4, 0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - movs r0, 0 - str r0, [sp] - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - bl sub_80C08F4 - ldr r0, _080C2760 @ =gUnknown_20399E0 - ldr r1, [r0] - ldr r0, _080C2764 @ =0x00000ccc - adds r1, r0 - b _080C297E - .align 2, 0 -_080C2760: .4byte gUnknown_20399E0 -_080C2764: .4byte 0x00000ccc -_080C2768: - movs r0, 0 - bl ShowBg - movs r0, 0x3 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x6 - movs r1, 0 - bl sub_80C22C4 - bl sub_80C2B48 - b _080C2976 -_080C2788: - ldr r0, _080C27AC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080C2796 - b _080C299A -_080C2796: - ldr r1, [r4] - ldr r0, _080C27B0 @ =0x00000ccc - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - movs r0, 0xF4 - bl PlaySE - b _080C299A - .align 2, 0 -_080C27AC: .4byte gPaletteFade -_080C27B0: .4byte 0x00000ccc -_080C27B4: - bl sub_80C29A4 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080C27C2 - b _080C299A -_080C27C2: - b _080C2976 -_080C27C4: - movs r0, 0 - bl sub_80C4324 - movs r0, 0 - bl sub_80C3154 - ldr r0, _080C27DC @ =gUnknown_20399E0 - ldr r1, [r0] - ldr r0, _080C27E0 @ =0x00000ccc - adds r1, r0 - b _080C297E - .align 2, 0 -_080C27DC: .4byte gUnknown_20399E0 -_080C27E0: .4byte 0x00000ccc -_080C27E4: - ldr r0, [r4] - movs r1, 0xCD - lsls r1, 4 - adds r0, r1 - movs r1, 0xF - strb r1, [r0] - bl sub_80C253C - movs r0, 0 - bl sub_80C0A88 - bl sub_80C0E20 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x19 - movs r2, 0 - bl sub_80C48BC - bl sub_80C0E20 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x19 - movs r2, 0 - bl sub_80C4960 - ldr r1, [r4] - b _080C297A -_080C281E: - ldr r0, _080C283C @ =gUnknown_8418EB5 - bl sub_80C4E18 - movs r0, 0x1 - bl sub_80C3AC8 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - beq _080C2844 - ldr r0, _080C2840 @ =gUnknown_8418E8B - bl sub_80C4E74 - b _080C284A - .align 2, 0 -_080C283C: .4byte gUnknown_8418EB5 -_080C2840: .4byte gUnknown_8418E8B -_080C2844: - ldr r0, _080C285C @ =gUnknown_8418E8D - bl sub_80C4E74 -_080C284A: - movs r0, 0 - bl sub_80C4ED0 - ldr r0, _080C2860 @ =gUnknown_20399E0 - ldr r1, [r0] - ldr r0, _080C2864 @ =0x00000ccc - adds r1, r0 - b _080C297E - .align 2, 0 -_080C285C: .4byte gUnknown_8418E8D -_080C2860: .4byte gUnknown_20399E0 -_080C2864: .4byte 0x00000ccc -_080C2868: - ldr r4, _080C28A0 @ =gUnknown_83EF23C + 0x1E - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x2 - bl LoadPalette - adds r0, r4, 0 - movs r1, 0x10 - movs r2, 0x2 - bl LoadPalette - adds r0, r4, 0 - movs r1, 0x20 - movs r2, 0x2 - bl LoadPalette - adds r0, r4, 0 - movs r1, 0x30 - movs r2, 0x2 - bl LoadPalette - adds r0, r4, 0 - movs r1, 0x40 - movs r2, 0x2 - bl LoadPalette - b _080C2976 - .align 2, 0 -_080C28A0: .4byte gUnknown_83EF23C + 0x1E -_080C28A4: - movs r4, 0x1 - str r4, [sp] - str r4, [sp, 0x4] - movs r5, 0x2 - str r5, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x2 - movs r2, 0 - movs r3, 0x1 - bl FillBgTilemapBufferRect - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0x1 - movs r3, 0x1 - bl FillBgTilemapBufferRect - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x3E - movs r2, 0x1C - movs r3, 0x1 - bl FillBgTilemapBufferRect - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x3F - movs r2, 0x1D - movs r3, 0x1 - bl FillBgTilemapBufferRect - movs r0, 0x1A - str r0, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x3D - movs r2, 0x2 - movs r3, 0x1 - bl FillBgTilemapBufferRect - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - movs r0, 0xF4 - bl m4aSongNumStop - movs r0, 0x2A - bl PlaySE - ldr r0, _080C2920 @ =gUnknown_20399E0 - ldr r1, [r0] - ldr r0, _080C2924 @ =0x00000ccc - adds r1, r0 - b _080C297E - .align 2, 0 -_080C2920: .4byte gUnknown_20399E0 -_080C2924: .4byte 0x00000ccc -_080C2928: - ldr r0, [r4] - movs r2, 0xCD - lsls r2, 4 - adds r1, r0, r2 - ldrb r0, [r1] - cmp r0, 0x2 - bne _080C2958 - movs r0, 0x6 - movs r1, 0x1 - bl sub_80C22C4 - ldr r1, [r4] - ldr r0, _080C2954 @ =0x00000ccc - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - movs r0, 0 - bl sub_80C4C48 - b _080C299A - .align 2, 0 -_080C2954: .4byte 0x00000ccc -_080C2958: - subs r0, 0x1 - strb r0, [r1] - ldr r0, [r4] - movs r1, 0xCD - lsls r1, 4 - adds r0, r1 - ldrb r0, [r0] - bl sub_80C4C48 - b _080C299A -_080C296C: - movs r0, 0 - bl sub_80C4B30 - bl sub_80C0BB0 -_080C2976: - ldr r0, _080C2988 @ =gUnknown_20399E0 - ldr r1, [r0] -_080C297A: - ldr r2, _080C298C @ =0x00000ccc - adds r1, r2 -_080C297E: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _080C299A - .align 2, 0 -_080C2988: .4byte gUnknown_20399E0 -_080C298C: .4byte 0x00000ccc -_080C2990: - bl sub_80C2604 - adds r0, r5, 0 - bl sub_80C2594 -_080C299A: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80C267C thumb_func_start sub_80C29A4 sub_80C29A4: @ 80C29A4 diff --git a/src/region_map.c b/src/region_map.c index c8b60cc36..e13248640 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -3,6 +3,7 @@ #include "gpu_regs.h" #include "scanline_effect.h" #include "task.h" +#include "m4a.h" #include "malloc.h" #include "overworld.h" #include "event_data.h" @@ -195,6 +196,8 @@ void sub_80C24BC(void); void sub_80C267C(u8 taskId); void sub_80C25BC(void); void sub_80C2604(void); +bool8 sub_80C29A4(void); +void sub_80C2B48(void); void sub_80C2C1C(u8 taskId); void sub_80C3008(u16 a0, u16 a1); void sub_80C3154(u8 a0); @@ -1678,3 +1681,111 @@ void sub_80C2604(void) } } } + +void sub_80C267C(u8 taskId) +{ + switch (gUnknown_20399E0->field_CCC) + { + case 0: + sub_80C08E0(); + gUnknown_20399E0->field_CCC++; + break; + case 1: + if (sub_80C2344() == TRUE) + gUnknown_20399E0->field_CCC++; + break; + case 2: + CopyToBgTilemapBufferRect(1, gUnknown_20399E0->field_818, 0, 0, 30, 20); + gUnknown_20399E0->field_CCC++; + break; + case 3: + CopyBgTilemapBufferToVram(1); + BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + sub_80C08F4(); + gUnknown_20399E0->field_CCC++; + break; + case 4: + ShowBg(0); + ShowBg(3); + ShowBg(1); + sub_80C22C4(6, FALSE); + sub_80C2B48(); + gUnknown_20399E0->field_CCC++; + break; + case 5: + if (!gPaletteFade.active) + { + gUnknown_20399E0->field_CCC++; + PlaySE(SE_CARD3); + } + break; + case 6: + if (sub_80C29A4() == TRUE) + gUnknown_20399E0->field_CCC++; + break; + case 7: + sub_80C4324(0); + sub_80C3154(0); + gUnknown_20399E0->field_CCC++; + break; + case 8: + gUnknown_20399E0->field_CD0 = 15; + sub_80C253C(); + sub_80C0A88(0); + sub_80C48BC(sub_80C0E20(), 25, 0); + sub_80C4960(sub_80C0E20(), 25, 0); + gUnknown_20399E0->field_CCC++; + break; + case 9: + sub_80C4E18(gUnknown_8418EB5); + if (sub_80C3AC8(1) != 2) + sub_80C4E74(gUnknown_8418E8B); + else + sub_80C4E74(gUnknown_8418E8D); + sub_80C4ED0(FALSE); + gUnknown_20399E0->field_CCC++; + break; + case 10: + LoadPalette(&gUnknown_83EF23C[15], 0x00, 2); + LoadPalette(&gUnknown_83EF23C[15], 0x10, 2); + LoadPalette(&gUnknown_83EF23C[15], 0x20, 2); + LoadPalette(&gUnknown_83EF23C[15], 0x30, 2); + LoadPalette(&gUnknown_83EF23C[15], 0x40, 2); + gUnknown_20399E0->field_CCC++; + break; + case 11: + FillBgTilemapBufferRect(1, 0x002, 0, 1, 1, 1, 0x2); + FillBgTilemapBufferRect(1, 0x003, 1, 1, 1, 1, 0x2); + FillBgTilemapBufferRect(1, 0x03E, 28, 1, 1, 1, 0x2); + FillBgTilemapBufferRect(1, 0x03F, 29, 1, 1, 1, 0x2); + FillBgTilemapBufferRect(1, 0x03D, 2, 1, 26, 1, 0x2); + CopyBgTilemapBufferToVram(1); + m4aSongNumStop(SE_CARD3); + PlaySE(SE_HI_TURUN); + gUnknown_20399E0->field_CCC++; + break; + case 12: + if (gUnknown_20399E0->field_CD0 == 2) + { + sub_80C22C4(6, TRUE); + gUnknown_20399E0->field_CCC++; + sub_80C4C48(0); + } + else + { + gUnknown_20399E0->field_CD0--; + sub_80C4C48(gUnknown_20399E0->field_CD0); + } + break; + case 13: + sub_80C4B30(0); + sub_80C0BB0(); + gUnknown_20399E0->field_CCC++; + break; + default: + sub_80C2604(); + sub_80C2594(taskId); + break; + } +} -- cgit v1.2.3 From 232c3e5917f250ebb7dee2381f30df9eb9869a2f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 6 Jan 2020 11:39:17 -0500 Subject: through sub_80C2FC0 --- asm/region_map.s | 815 ------------------------------------------------------- src/region_map.c | 257 +++++++++++++++++- 2 files changed, 250 insertions(+), 822 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index 8ecc9cbf6..429f77de8 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,821 +5,6 @@ .text - - thumb_func_start sub_80C29A4 -sub_80C29A4: @ 80C29A4 - push {r4,r5,lr} - bl sub_80C2B48 - ldr r0, _080C29C8 @ =gUnknown_20399E0 - ldr r2, [r0] - ldr r0, [r2] - movs r4, 0x80 - lsls r4, 3 - adds r0, r4 - ldr r1, [r0] - ldrh r3, [r1, 0x20] - movs r5, 0x20 - ldrsh r0, [r1, r5] - cmp r0, 0 - bne _080C29CC - movs r0, 0x1 - b _080C2B3A - .align 2, 0 -_080C29C8: .4byte gUnknown_20399E0 -_080C29CC: - ldr r5, _080C2A18 @ =0x00000cce - adds r0, r2, r5 - ldrb r0, [r0] - cmp r0, 0x11 - bls _080C2A1C - subs r0, r3, 0x1 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x4] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x1 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x8] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x1 - strh r0, [r1, 0x20] - ldr r0, [r2, 0xC] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x1 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x10] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x1 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x14] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x1 - b _080C2B28 - .align 2, 0 -_080C2A18: .4byte 0x00000cce -_080C2A1C: - cmp r0, 0xE - bls _080C2A60 - subs r0, r3, 0x2 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x4] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x2 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x8] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x2 - strh r0, [r1, 0x20] - ldr r0, [r2, 0xC] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x2 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x10] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x2 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x14] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x2 - b _080C2B28 -_080C2A60: - cmp r0, 0xA - bls _080C2AA4 - subs r0, r3, 0x3 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x4] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x3 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x8] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x3 - strh r0, [r1, 0x20] - ldr r0, [r2, 0xC] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x3 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x10] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x3 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x14] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x3 - b _080C2B28 -_080C2AA4: - cmp r0, 0x6 - bls _080C2AE8 - subs r0, r3, 0x5 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x4] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x5 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x8] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x5 - strh r0, [r1, 0x20] - ldr r0, [r2, 0xC] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x5 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x10] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x5 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x14] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x5 - b _080C2B28 -_080C2AE8: - adds r0, r3, 0 - subs r0, 0x8 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x4] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x8 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x8] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x8 - strh r0, [r1, 0x20] - ldr r0, [r2, 0xC] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x8 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x10] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x8 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x14] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x8 -_080C2B28: - strh r0, [r1, 0x20] - ldr r0, _080C2B40 @ =gUnknown_20399E0 - ldr r1, [r0] - ldr r0, _080C2B44 @ =0x00000cce - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - movs r0, 0 -_080C2B3A: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080C2B40: .4byte gUnknown_20399E0 -_080C2B44: .4byte 0x00000cce - thumb_func_end sub_80C29A4 - - thumb_func_start sub_80C2B48 -sub_80C2B48: @ 80C2B48 - push {r4,r5,lr} - sub sp, 0x8 - ldr r0, _080C2B90 @ =gUnknown_20399E0 - ldr r3, [r0] - ldr r0, [r3] - movs r2, 0x80 - lsls r2, 3 - adds r0, r2 - ldr r0, [r0] - ldr r4, _080C2B94 @ =0xffff0000 - ldr r5, _080C2B98 @ =0x0000ffff - ldrh r0, [r0, 0x20] - movs r1, 0x80 - lsls r1, 13 - orrs r0, r1 - str r0, [sp] - ldr r0, [r3, 0xC] - adds r0, r2 - ldr r0, [r0] - ldrh r1, [r0, 0x20] - ldr r0, [sp, 0x4] - ands r0, r4 - orrs r0, r1 - ands r0, r5 - movs r1, 0xA0 - lsls r1, 16 - orrs r0, r1 - str r0, [sp, 0x4] - movs r0, 0 - mov r1, sp - bl sub_80C4CF0 - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C2B90: .4byte gUnknown_20399E0 -_080C2B94: .4byte 0xffff0000 -_080C2B98: .4byte 0x0000ffff - thumb_func_end sub_80C2B48 - - thumb_func_start sub_80C2B9C -sub_80C2B9C: @ 80C2B9C - push {r4,r5,lr} - sub sp, 0x8 - ldr r0, _080C2C0C @ =gUnknown_20399E0 - ldr r3, [r0] - ldr r0, [r3] - ldr r2, _080C2C10 @ =0x00000404 - adds r0, r2 - ldrh r0, [r0] - adds r0, 0x10 - lsls r0, 16 - ldr r4, _080C2C14 @ =0xffff0000 - ldr r5, _080C2C18 @ =0x0000ffff - lsrs r0, 16 - movs r1, 0x80 - lsls r1, 13 - orrs r0, r1 - str r0, [sp] - ldr r0, [r3, 0xC] - adds r0, r2 - ldrh r1, [r0] - subs r1, 0x10 - lsls r1, 16 - lsrs r1, 16 - ldr r0, [sp, 0x4] - ands r0, r4 - orrs r0, r1 - ands r0, r5 - movs r1, 0xA0 - lsls r1, 16 - orrs r0, r1 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0x2 - movs r2, 0 - bl sub_80C4C2C - movs r0, 0x12 - movs r1, 0 - bl sub_80C4C74 - movs r0, 0x10 - bl sub_80C4C88 - movs r0, 0 - mov r1, sp - bl sub_80C4CF0 - movs r0, 0 - movs r1, 0 - bl sub_80C4C9C - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C2C0C: .4byte gUnknown_20399E0 -_080C2C10: .4byte 0x00000404 -_080C2C14: .4byte 0xffff0000 -_080C2C18: .4byte 0x0000ffff - thumb_func_end sub_80C2B9C - - thumb_func_start sub_80C2C1C -sub_80C2C1C: @ 80C2C1C - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080C2C30 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r0, _080C2C34 @ =sub_80C2C7C - str r0, [r1] - bx lr - .align 2, 0 -_080C2C30: .4byte gTasks -_080C2C34: .4byte sub_80C2C7C - thumb_func_end sub_80C2C1C - - thumb_func_start sub_80C2C38 -sub_80C2C38: @ 80C2C38 - push {lr} - movs r0, 0 - movs r1, 0x4 - movs r2, 0x4 - bl sub_80C210C - movs r0, 0x1 - movs r1, 0x5 - movs r2, 0x5 - bl sub_80C210C - movs r0, 0x2 - movs r1, 0x6 - movs r2, 0x6 - bl sub_80C210C - movs r0, 0x3 - movs r1, 0x7 - movs r2, 0x7 - bl sub_80C210C - movs r0, 0x4 - movs r1, 0x8 - movs r2, 0x8 - bl sub_80C210C - movs r0, 0x5 - movs r1, 0x9 - movs r2, 0x9 - bl sub_80C210C - pop {r0} - bx r0 - thumb_func_end sub_80C2C38 - - thumb_func_start sub_80C2C7C -sub_80C2C7C: @ 80C2C7C - push {r4,lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _080C2CA0 @ =gUnknown_20399E0 - ldr r3, [r1] - ldr r4, _080C2CA4 @ =0x00000ccf - adds r0, r3, r4 - ldrb r0, [r0] - adds r4, r1, 0 - cmp r0, 0x7 - bls _080C2C94 - b _080C2DFC -_080C2C94: - lsls r0, 2 - ldr r1, _080C2CA8 @ =_080C2CAC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C2CA0: .4byte gUnknown_20399E0 -_080C2CA4: .4byte 0x00000ccf -_080C2CA8: .4byte _080C2CAC - .align 2, 0 -_080C2CAC: - .4byte _080C2CCC - .4byte _080C2CF4 - .4byte _080C2CFA - .4byte _080C2D1C - .4byte _080C2D6C - .4byte _080C2D84 - .4byte _080C2DB8 - .4byte _080C2DD8 -_080C2CCC: - movs r0, 0x1 - bl sub_80C4ED0 - movs r0, 0x3 - movs r1, 0x3 - bl CopyWindowToVram - movs r0, 0x4 - movs r1, 0x3 - bl CopyWindowToVram - ldr r0, _080C2CEC @ =gUnknown_20399E0 - ldr r1, [r0] - ldr r0, _080C2CF0 @ =0x00000ccf - adds r1, r0 - b _080C2DEC - .align 2, 0 -_080C2CEC: .4byte gUnknown_20399E0 -_080C2CF0: .4byte 0x00000ccf -_080C2CF4: - bl sub_80C2C38 - b _080C2DE4 -_080C2CFA: - ldr r0, _080C2D10 @ =gUnknown_83EF2DC - movs r1, 0 - movs r2, 0xA0 - bl LoadPalette - ldr r0, _080C2D14 @ =gUnknown_20399E0 - ldr r1, [r0] - ldr r3, _080C2D18 @ =0x00000ccf - adds r1, r3 - b _080C2DEC - .align 2, 0 -_080C2D10: .4byte gUnknown_83EF2DC -_080C2D14: .4byte gUnknown_20399E0 -_080C2D18: .4byte 0x00000ccf -_080C2D1C: - movs r0, 0x6 - movs r1, 0 - bl sub_80C22C4 - movs r0, 0x1 - bl sub_80C4324 - movs r0, 0x1 - bl sub_80C3154 - movs r0, 0xFF - movs r1, 0x19 - movs r2, 0x1 - bl sub_80C4960 - movs r0, 0xFF - movs r1, 0x19 - movs r2, 0x1 - bl sub_80C48BC - ldr r1, _080C2D64 @ =gUnknown_20399E0 - ldr r0, [r1] - ldr r4, _080C2D68 @ =0x00000cce - adds r0, r4 - movs r2, 0 - strb r2, [r0] - ldr r0, [r1] - movs r3, 0xCD - lsls r3, 4 - adds r0, r3 - strb r2, [r0] - ldr r1, [r1] - adds r4, 0x1 - adds r1, r4 - b _080C2DEC - .align 2, 0 -_080C2D64: .4byte gUnknown_20399E0 -_080C2D68: .4byte 0x00000cce -_080C2D6C: - bl sub_80C253C - ldr r0, _080C2D7C @ =gUnknown_20399E0 - ldr r1, [r0] - ldr r0, _080C2D80 @ =0x00000ccf - adds r1, r0 - b _080C2DEC - .align 2, 0 -_080C2D7C: .4byte gUnknown_20399E0 -_080C2D80: .4byte 0x00000ccf -_080C2D84: - ldr r0, [r4] - movs r2, 0xCD - lsls r2, 4 - adds r1, r0, r2 - ldrb r0, [r1] - cmp r0, 0xF - bne _080C2DA4 - ldrb r0, [r1] - bl sub_80C4C48 - ldr r1, [r4] - ldr r3, _080C2DA0 @ =0x00000ccf - adds r1, r3 - b _080C2DEC - .align 2, 0 -_080C2DA0: .4byte 0x00000ccf -_080C2DA4: - adds r0, 0x1 - strb r0, [r1] - ldr r0, [r4] - movs r4, 0xCD - lsls r4, 4 - adds r0, r4 - ldrb r0, [r0] - bl sub_80C4C48 - b _080C2E0E -_080C2DB8: - bl sub_80C2B9C - bl sub_80C2B48 - movs r0, 0xF3 - bl PlaySE - ldr r0, _080C2DD0 @ =gUnknown_20399E0 - ldr r1, [r0] - ldr r0, _080C2DD4 @ =0x00000ccf - adds r1, r0 - b _080C2DEC - .align 2, 0 -_080C2DD0: .4byte gUnknown_20399E0 -_080C2DD4: .4byte 0x00000ccf -_080C2DD8: - bl sub_80C2E1C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C2E0E -_080C2DE4: - ldr r0, _080C2DF4 @ =gUnknown_20399E0 - ldr r1, [r0] - ldr r2, _080C2DF8 @ =0x00000ccf - adds r1, r2 -_080C2DEC: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _080C2E0E - .align 2, 0 -_080C2DF4: .4byte gUnknown_20399E0 -_080C2DF8: .4byte 0x00000ccf -_080C2DFC: - ldr r1, _080C2E14 @ =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r1 - ldr r4, _080C2E18 @ =0x00000cc8 - adds r1, r3, r4 - ldr r1, [r1] - str r1, [r0] -_080C2E0E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C2E14: .4byte gTasks -_080C2E18: .4byte 0x00000cc8 - thumb_func_end sub_80C2C7C - - thumb_func_start sub_80C2E1C -sub_80C2E1C: @ 80C2E1C - push {r4,r5,lr} - bl sub_80C2B48 - ldr r0, _080C2E40 @ =gUnknown_20399E0 - ldr r2, [r0] - ldr r0, [r2] - movs r4, 0x80 - lsls r4, 3 - adds r0, r4 - ldr r1, [r0] - ldrh r3, [r1, 0x20] - movs r5, 0x20 - ldrsh r0, [r1, r5] - cmp r0, 0x68 - bne _080C2E44 - movs r0, 0x1 - b _080C2FB2 - .align 2, 0 -_080C2E40: .4byte gUnknown_20399E0 -_080C2E44: - ldr r5, _080C2E90 @ =0x00000cce - adds r0, r2, r5 - ldrb r0, [r0] - cmp r0, 0x11 - bls _080C2E94 - adds r0, r3, 0x1 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x4] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x1 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x8] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x1 - strh r0, [r1, 0x20] - ldr r0, [r2, 0xC] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x1 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x10] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x1 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x14] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x1 - b _080C2FA0 - .align 2, 0 -_080C2E90: .4byte 0x00000cce -_080C2E94: - cmp r0, 0xE - bls _080C2ED8 - adds r0, r3, 0x2 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x4] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x2 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x8] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x2 - strh r0, [r1, 0x20] - ldr r0, [r2, 0xC] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x2 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x10] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x2 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x14] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x2 - b _080C2FA0 -_080C2ED8: - cmp r0, 0xA - bls _080C2F1C - adds r0, r3, 0x3 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x4] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x3 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x8] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x3 - strh r0, [r1, 0x20] - ldr r0, [r2, 0xC] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x3 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x10] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x3 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x14] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x3 - b _080C2FA0 -_080C2F1C: - cmp r0, 0x6 - bls _080C2F60 - adds r0, r3, 0x5 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x4] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x5 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x8] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x5 - strh r0, [r1, 0x20] - ldr r0, [r2, 0xC] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x5 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x10] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x5 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x14] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x5 - b _080C2FA0 -_080C2F60: - adds r0, r3, 0 - adds r0, 0x8 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x4] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x8 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x8] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - adds r0, 0x8 - strh r0, [r1, 0x20] - ldr r0, [r2, 0xC] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x8 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x10] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x8 - strh r0, [r1, 0x20] - ldr r0, [r2, 0x14] - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x20] - subs r0, 0x8 -_080C2FA0: - strh r0, [r1, 0x20] - ldr r0, _080C2FB8 @ =gUnknown_20399E0 - ldr r1, [r0] - ldr r0, _080C2FBC @ =0x00000cce - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - movs r0, 0 -_080C2FB2: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080C2FB8: .4byte gUnknown_20399E0 -_080C2FBC: .4byte 0x00000cce - thumb_func_end sub_80C2E1C - - thumb_func_start sub_80C2FC0 -sub_80C2FC0: @ 80C2FC0 - push {lr} - adds r1, r0, 0 - ldr r0, _080C2FE8 @ =gUnknown_20399E4 - ldr r2, [r0] - ldrh r0, [r2, 0xC] - cmp r0, 0 - beq _080C2FEC - ldrh r0, [r2, 0x8] - ldrh r3, [r1, 0x20] - adds r0, r3 - strh r0, [r1, 0x20] - ldrh r0, [r2, 0xA] - ldrh r3, [r1, 0x22] - adds r0, r3 - strh r0, [r1, 0x22] - ldrh r0, [r2, 0xC] - subs r0, 0x1 - strh r0, [r2, 0xC] - b _080C3004 - .align 2, 0 -_080C2FE8: .4byte gUnknown_20399E4 -_080C2FEC: - ldr r1, [r2, 0x1C] - movs r3, 0 - ldrsh r0, [r2, r3] - lsls r0, 3 - adds r0, 0x24 - strh r0, [r1, 0x20] - ldr r1, [r2, 0x1C] - movs r3, 0x2 - ldrsh r0, [r2, r3] - lsls r0, 3 - adds r0, 0x24 - strh r0, [r1, 0x22] -_080C3004: - pop {r0} - bx r0 - thumb_func_end sub_80C2FC0 - thumb_func_start sub_80C3008 sub_80C3008: @ 80C3008 push {r4-r6,lr} diff --git a/src/region_map.c b/src/region_map.c index e13248640..de12b4de2 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -19,6 +19,12 @@ #include "constants/songs.h" #include "constants/region_map.h" +#define FREE_IF_NOT_NULL(ptr) ({ \ + if (ptr) { \ + FREE_AND_SET_NULL(ptr); \ + } \ +}) + struct UnkStruct_20399D4 { u8 field_0000[19]; @@ -131,21 +137,29 @@ struct UnkStruct_20399E0 TaskFunc field_CC8; u8 field_CCC; u8 field_CCD; - u8 filler_CCE[2]; + u8 field_CCE; + u8 field_CCF; u8 field_CD0; }; // size = 0xCD4 -#define FREE_IF_NOT_NULL(ptr) ({ \ - if (ptr) { \ - FREE_AND_SET_NULL(ptr); \ - } \ -}) +struct UnkStruct_20399E4 +{ + s16 field_000; + s16 field_002; + u8 filler_004[4]; + u16 field_008; + u16 field_00A; + u16 field_00C; + u8 filler_00E[14]; + struct Sprite * field_01C; + u8 filler_020[0x104]; +}; EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL; EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL; EWRAM_DATA struct UnkStruct_20399DC * gUnknown_20399DC = NULL; EWRAM_DATA struct UnkStruct_20399E0 * gUnknown_20399E0 = NULL; -EWRAM_DATA void * gUnknown_20399E4 = NULL; +EWRAM_DATA struct UnkStruct_20399E4 * gUnknown_20399E4 = NULL; EWRAM_DATA void * gUnknown_20399E8 = NULL; EWRAM_DATA void * gUnknown_20399EC = NULL; EWRAM_DATA void * gUnknown_20399F0[3] = {}; @@ -199,6 +213,8 @@ void sub_80C2604(void); bool8 sub_80C29A4(void); void sub_80C2B48(void); void sub_80C2C1C(u8 taskId); +void sub_80C2C7C(u8 taskId); +bool8 sub_80C2E1C(void); void sub_80C3008(u16 a0, u16 a1); void sub_80C3154(u8 a0); void sub_80C3178(void); @@ -1789,3 +1805,230 @@ void sub_80C267C(u8 taskId) break; } } + +bool8 sub_80C29A4(void) +{ + sub_80C2B48(); + if (gUnknown_20399E0->field_000[0]->field_400->pos1.x == 0) + { + return TRUE; + } + else if (gUnknown_20399E0->field_CCE > 17) + { + gUnknown_20399E0->field_000[0]->field_400->pos1.x -= 1; + gUnknown_20399E0->field_000[1]->field_400->pos1.x -= 1; + gUnknown_20399E0->field_000[2]->field_400->pos1.x -= 1; + gUnknown_20399E0->field_000[3]->field_400->pos1.x += 1; + gUnknown_20399E0->field_000[4]->field_400->pos1.x += 1; + gUnknown_20399E0->field_000[5]->field_400->pos1.x += 1; + } + else if (gUnknown_20399E0->field_CCE > 14) + { + gUnknown_20399E0->field_000[0]->field_400->pos1.x -= 2; + gUnknown_20399E0->field_000[1]->field_400->pos1.x -= 2; + gUnknown_20399E0->field_000[2]->field_400->pos1.x -= 2; + gUnknown_20399E0->field_000[3]->field_400->pos1.x += 2; + gUnknown_20399E0->field_000[4]->field_400->pos1.x += 2; + gUnknown_20399E0->field_000[5]->field_400->pos1.x += 2; + } + else if (gUnknown_20399E0->field_CCE > 10) + { + gUnknown_20399E0->field_000[0]->field_400->pos1.x -= 3; + gUnknown_20399E0->field_000[1]->field_400->pos1.x -= 3; + gUnknown_20399E0->field_000[2]->field_400->pos1.x -= 3; + gUnknown_20399E0->field_000[3]->field_400->pos1.x += 3; + gUnknown_20399E0->field_000[4]->field_400->pos1.x += 3; + gUnknown_20399E0->field_000[5]->field_400->pos1.x += 3; + } + else if (gUnknown_20399E0->field_CCE > 6) + { + gUnknown_20399E0->field_000[0]->field_400->pos1.x -= 5; + gUnknown_20399E0->field_000[1]->field_400->pos1.x -= 5; + gUnknown_20399E0->field_000[2]->field_400->pos1.x -= 5; + gUnknown_20399E0->field_000[3]->field_400->pos1.x += 5; + gUnknown_20399E0->field_000[4]->field_400->pos1.x += 5; + gUnknown_20399E0->field_000[5]->field_400->pos1.x += 5; + } + else + { + gUnknown_20399E0->field_000[0]->field_400->pos1.x -= 8; + gUnknown_20399E0->field_000[1]->field_400->pos1.x -= 8; + gUnknown_20399E0->field_000[2]->field_400->pos1.x -= 8; + gUnknown_20399E0->field_000[3]->field_400->pos1.x += 8; + gUnknown_20399E0->field_000[4]->field_400->pos1.x += 8; + gUnknown_20399E0->field_000[5]->field_400->pos1.x += 8; + } + gUnknown_20399E0->field_CCE++; + return FALSE; +} + +void sub_80C2B48(void) +{ + struct UnkStruct_80C4CF0 data; + data.v0 = gUnknown_20399E0->field_000[0]->field_400->pos1.x; + data.v2 = 0x10; + data.v4 = gUnknown_20399E0->field_000[3]->field_400->pos1.x; + data.v6 = 0xA0; + sub_80C4CF0(0, &data); +} + +void sub_80C2B9C(void) +{ + struct UnkStruct_80C4CF0 data; + data.v0 = gUnknown_20399E0->field_000[0]->field_404 + 16; + data.v2 = 0x10; + data.v4 = gUnknown_20399E0->field_000[3]->field_404 - 16; + data.v6 = 0xA0; + sub_80C4C2C(0, 2, 0); + sub_80C4C74(18, 0); + sub_80C4C88(16); + sub_80C4CF0(0, &data); + sub_80C4C9C(0, 0); +} + +void sub_80C2C1C(u8 taskId) +{ + gTasks[taskId].func = sub_80C2C7C; +} + +void sub_80C2C38(void) +{ + sub_80C210C(0, 4, 4); + sub_80C210C(1, 5, 5); + sub_80C210C(2, 6, 6); + sub_80C210C(3, 7, 7); + sub_80C210C(4, 8, 8); + sub_80C210C(5, 9, 9); +} + +void sub_80C2C7C(u8 taskId) +{ + switch (gUnknown_20399E0->field_CCF) + { + case 0: + sub_80C4ED0(TRUE); + CopyWindowToVram(3, 3); + CopyWindowToVram(4, 3); + gUnknown_20399E0->field_CCF++; + break; + case 1: + sub_80C2C38(); + gUnknown_20399E0->field_CCF++; + break; + case 2: + LoadPalette(gUnknown_83EF2DC, 0x00, 0xA0); + gUnknown_20399E0->field_CCF++; + break; + case 3: + sub_80C22C4(6, FALSE); + sub_80C4324(1); + sub_80C3154(1); + sub_80C4960(255, 25, 1); + sub_80C48BC(255, 25, 1); + gUnknown_20399E0->field_CCE = 0; + gUnknown_20399E0->field_CD0 = 0; + gUnknown_20399E0->field_CCF++; + break; + case 4: + sub_80C253C(); + gUnknown_20399E0->field_CCF++; + break; + case 5: + if (gUnknown_20399E0->field_CD0 == 15) + { + sub_80C4C48(gUnknown_20399E0->field_CD0); + gUnknown_20399E0->field_CCF++; + } + else + { + gUnknown_20399E0->field_CD0++; + sub_80C4C48(gUnknown_20399E0->field_CD0); + } + break; + case 6: + sub_80C2B9C(); + sub_80C2B48(); + PlaySE(SE_CARD2); + gUnknown_20399E0->field_CCF++; + break; + case 7: + if (sub_80C2E1C() == TRUE) + gUnknown_20399E0->field_CCF++; + break; + default: + gTasks[taskId].func = gUnknown_20399E0->field_CC8; + break; + } +} + + +bool8 sub_80C2E1C(void) +{ + sub_80C2B48(); + if (gUnknown_20399E0->field_000[0]->field_400->pos1.x == 104) + { + return TRUE; + } + else if (gUnknown_20399E0->field_CCE > 17) + { + gUnknown_20399E0->field_000[0]->field_400->pos1.x += 1; + gUnknown_20399E0->field_000[1]->field_400->pos1.x += 1; + gUnknown_20399E0->field_000[2]->field_400->pos1.x += 1; + gUnknown_20399E0->field_000[3]->field_400->pos1.x -= 1; + gUnknown_20399E0->field_000[4]->field_400->pos1.x -= 1; + gUnknown_20399E0->field_000[5]->field_400->pos1.x -= 1; + } + else if (gUnknown_20399E0->field_CCE > 14) + { + gUnknown_20399E0->field_000[0]->field_400->pos1.x += 2; + gUnknown_20399E0->field_000[1]->field_400->pos1.x += 2; + gUnknown_20399E0->field_000[2]->field_400->pos1.x += 2; + gUnknown_20399E0->field_000[3]->field_400->pos1.x -= 2; + gUnknown_20399E0->field_000[4]->field_400->pos1.x -= 2; + gUnknown_20399E0->field_000[5]->field_400->pos1.x -= 2; + } + else if (gUnknown_20399E0->field_CCE > 10) + { + gUnknown_20399E0->field_000[0]->field_400->pos1.x += 3; + gUnknown_20399E0->field_000[1]->field_400->pos1.x += 3; + gUnknown_20399E0->field_000[2]->field_400->pos1.x += 3; + gUnknown_20399E0->field_000[3]->field_400->pos1.x -= 3; + gUnknown_20399E0->field_000[4]->field_400->pos1.x -= 3; + gUnknown_20399E0->field_000[5]->field_400->pos1.x -= 3; + } + else if (gUnknown_20399E0->field_CCE > 6) + { + gUnknown_20399E0->field_000[0]->field_400->pos1.x += 5; + gUnknown_20399E0->field_000[1]->field_400->pos1.x += 5; + gUnknown_20399E0->field_000[2]->field_400->pos1.x += 5; + gUnknown_20399E0->field_000[3]->field_400->pos1.x -= 5; + gUnknown_20399E0->field_000[4]->field_400->pos1.x -= 5; + gUnknown_20399E0->field_000[5]->field_400->pos1.x -= 5; + } + else + { + gUnknown_20399E0->field_000[0]->field_400->pos1.x += 8; + gUnknown_20399E0->field_000[1]->field_400->pos1.x += 8; + gUnknown_20399E0->field_000[2]->field_400->pos1.x += 8; + gUnknown_20399E0->field_000[3]->field_400->pos1.x -= 8; + gUnknown_20399E0->field_000[4]->field_400->pos1.x -= 8; + gUnknown_20399E0->field_000[5]->field_400->pos1.x -= 8; + } + gUnknown_20399E0->field_CCE++; + return FALSE; +} + +void sub_80C2FC0(struct Sprite * sprite) +{ + if (gUnknown_20399E4->field_00C != 0) + { + sprite->pos1.x += gUnknown_20399E4->field_008; + sprite->pos1.y += gUnknown_20399E4->field_00A; + gUnknown_20399E4->field_00C--; + } + else + { + gUnknown_20399E4->field_01C->pos1.x = 8 * gUnknown_20399E4->field_000 + 36; + gUnknown_20399E4->field_01C->pos1.y = 8 * gUnknown_20399E4->field_002 + 36; + } +} -- cgit v1.2.3 From 498ad1e6af6b219aa54b827e59325b6fbcb54343 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 6 Jan 2020 13:26:34 -0500 Subject: through sub_80C3400 --- asm/region_map.s | 516 ------------------------------------------------------- src/region_map.c | 211 +++++++++++++++++++++-- 2 files changed, 201 insertions(+), 526 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index 429f77de8..10f8c83f4 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,522 +5,6 @@ .text - thumb_func_start sub_80C3008 -sub_80C3008: @ 80C3008 - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - ldr r6, _080C3090 @ =gUnknown_20399E4 - movs r0, 0x92 - lsls r0, 1 - bl AllocZeroed - adds r1, r0, 0 - str r1, [r6] - ldr r0, _080C3094 @ =gUnknown_83EF4E0 - adds r1, 0x24 - bl LZ77UnCompWram - ldr r0, [r6] - strh r4, [r0, 0x20] - strh r5, [r0, 0x22] - bl sub_80C3D40 - ldr r1, [r6] - movs r2, 0 - ldrsh r0, [r1, r2] - lsls r0, 3 - adds r0, 0x24 - strh r0, [r1, 0x4] - movs r3, 0x2 - ldrsh r0, [r1, r3] - lsls r0, 3 - adds r0, 0x24 - strh r0, [r1, 0x6] - ldr r0, _080C3098 @ =sub_80C31C0 - str r0, [r1, 0x10] - ldrb r0, [r1, 0x14] - bl sub_80C35DC - ldr r1, [r6] - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x16] - bl sub_80C0E20 - lsls r0, 24 - lsrs r0, 24 - ldr r1, [r6] - movs r4, 0x2 - ldrsh r2, [r1, r4] - movs r4, 0 - ldrsh r3, [r1, r4] - movs r1, 0x1 - bl sub_80C4164 - lsls r0, 24 - lsrs r0, 24 - bl sub_80C3878 - ldr r1, [r6] - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x18] - bl sub_80C309C - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C3090: .4byte gUnknown_20399E4 -_080C3094: .4byte gUnknown_83EF4E0 -_080C3098: .4byte sub_80C31C0 - thumb_func_end sub_80C3008 - - thumb_func_start sub_80C309C -sub_80C309C: @ 80C309C - push {r4-r6,lr} - sub sp, 0x40 - ldr r6, _080C3134 @ =gUnknown_20399E4 - ldr r2, [r6] - adds r0, r2, 0 - adds r0, 0x24 - str r0, [sp, 0x30] - movs r1, 0x80 - lsls r1, 1 - add r5, sp, 0x30 - str r1, [r5, 0x4] - ldrh r0, [r2, 0x20] - lsls r0, 16 - orrs r0, r1 - str r0, [r5, 0x4] - ldr r0, _080C3138 @ =gUnknown_83EF25C - str r0, [sp, 0x38] - ldrh r3, [r2, 0x22] - ldr r1, _080C313C @ =0xffff0000 - add r4, sp, 0x38 - ldr r0, [r4, 0x4] - ands r0, r1 - orrs r0, r3 - str r0, [r4, 0x4] - ldrh r0, [r2, 0x20] - add r1, sp, 0x18 - movs r3, 0 - strh r0, [r1] - ldrh r2, [r2, 0x22] - mov r0, sp - adds r0, 0x1A - strh r2, [r0] - ldr r0, _080C3140 @ =gUnknown_83F1C3C - str r0, [sp, 0x1C] - ldr r0, _080C3144 @ =gUnknown_83F1C50 - str r0, [sp, 0x20] - str r3, [sp, 0x24] - ldr r0, _080C3148 @ =gDummySpriteAffineAnimTable - str r0, [sp, 0x28] - ldr r0, _080C314C @ =sub_80C2FC0 - str r0, [sp, 0x2C] - mov r0, sp - movs r2, 0x18 - bl memcpy - adds r0, r5, 0 - bl LoadSpriteSheet - adds r0, r4, 0 - bl LoadSpritePalette - ldr r0, [r6] - movs r2, 0x4 - ldrsh r1, [r0, r2] - movs r3, 0x6 - ldrsh r2, [r0, r3] - mov r0, sp - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r2, [r6] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _080C3150 @ =gSprites - adds r1, r0 - str r1, [r2, 0x1C] - movs r0, 0x1 - bl sub_80C3154 - add sp, 0x40 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C3134: .4byte gUnknown_20399E4 -_080C3138: .4byte gUnknown_83EF25C -_080C313C: .4byte 0xffff0000 -_080C3140: .4byte gUnknown_83F1C3C -_080C3144: .4byte gUnknown_83F1C50 -_080C3148: .4byte gDummySpriteAffineAnimTable -_080C314C: .4byte sub_80C2FC0 -_080C3150: .4byte gSprites - thumb_func_end sub_80C309C - - thumb_func_start sub_80C3154 -sub_80C3154: @ 80C3154 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080C3174 @ =gUnknown_20399E4 - ldr r1, [r1] - ldr r2, [r1, 0x1C] - adds r2, 0x3E - movs r1, 0x1 - ands r0, r1 - lsls r0, 2 - ldrb r3, [r2] - movs r1, 0x5 - negs r1, r1 - ands r1, r3 - orrs r1, r0 - strb r1, [r2] - bx lr - .align 2, 0 -_080C3174: .4byte gUnknown_20399E4 - thumb_func_end sub_80C3154 - - thumb_func_start sub_80C3178 -sub_80C3178: @ 80C3178 - ldr r0, _080C3184 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0 - strb r0, [r1, 0xE] - bx lr - .align 2, 0 -_080C3184: .4byte gUnknown_20399E4 - thumb_func_end sub_80C3178 - - thumb_func_start sub_80C3188 -sub_80C3188: @ 80C3188 - push {r4,lr} - ldr r4, _080C31BC @ =gUnknown_20399E4 - ldr r0, [r4] - ldr r0, [r0, 0x1C] - cmp r0, 0 - beq _080C31A8 - bl DestroySprite - ldr r0, [r4] - ldrh r0, [r0, 0x20] - bl FreeSpriteTilesByTag - ldr r0, [r4] - ldrh r0, [r0, 0x22] - bl FreeSpritePaletteByTag -_080C31A8: - ldr r0, [r4] - cmp r0, 0 - beq _080C31B6 - bl Free - movs r0, 0 - str r0, [r4] -_080C31B6: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C31BC: .4byte gUnknown_20399E4 - thumb_func_end sub_80C3188 - - thumb_func_start sub_80C31C0 -sub_80C31C0: @ 80C31C0 - push {r4-r6,lr} - movs r5, 0 - ldr r3, _080C3278 @ =gUnknown_20399E4 - ldr r4, [r3] - strh r5, [r4, 0x8] - strh r5, [r4, 0xA] - ldr r2, _080C327C @ =gMain - ldrh r1, [r2, 0x2C] - movs r0, 0x40 - ands r0, r1 - adds r6, r3, 0 - cmp r0, 0 - beq _080C31E8 - movs r1, 0x2 - ldrsh r0, [r4, r1] - cmp r0, 0 - ble _080C31E8 - ldr r0, _080C3280 @ =0x0000fffe - strh r0, [r4, 0xA] - movs r5, 0x1 -_080C31E8: - ldrh r1, [r2, 0x2C] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080C3202 - ldr r1, [r6] - movs r3, 0x2 - ldrsh r0, [r1, r3] - cmp r0, 0xD - bgt _080C3202 - movs r0, 0x2 - strh r0, [r1, 0xA] - movs r5, 0x1 -_080C3202: - ldrh r1, [r2, 0x2C] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080C321C - ldr r1, [r6] - movs r3, 0 - ldrsh r0, [r1, r3] - cmp r0, 0x14 - bgt _080C321C - movs r0, 0x2 - strh r0, [r1, 0x8] - movs r5, 0x1 -_080C321C: - ldrh r1, [r2, 0x2C] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080C3236 - ldr r1, [r6] - movs r3, 0 - ldrsh r0, [r1, r3] - cmp r0, 0 - ble _080C3236 - ldr r0, _080C3280 @ =0x0000fffe - strh r0, [r1, 0x8] - movs r5, 0x1 -_080C3236: - ldrh r3, [r2, 0x2E] - movs r0, 0x1 - ands r0, r3 - cmp r0, 0 - beq _080C328C - movs r5, 0x4 - ldr r0, [r6] - ldr r1, [r0] - ldr r0, _080C3284 @ =0x000d0015 - cmp r1, r0 - bne _080C3254 - movs r0, 0xF0 - bl PlaySE - movs r5, 0x6 -_080C3254: - ldr r0, [r6] - ldr r1, [r0] - ldr r0, _080C3288 @ =0x000b0015 - cmp r1, r0 - bne _080C331A - movs r0, 0 - bl sub_80C0E04 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C331A - movs r0, 0xF0 - bl PlaySE - movs r5, 0x5 - b _080C331A - .align 2, 0 -_080C3278: .4byte gUnknown_20399E4 -_080C327C: .4byte gMain -_080C3280: .4byte 0x0000fffe -_080C3284: .4byte 0x000d0015 -_080C3288: .4byte 0x000b0015 -_080C328C: - movs r0, 0x2 - ands r0, r3 - cmp r0, 0 - bne _080C3318 - ldrh r1, [r2, 0x30] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _080C3300 - bl sub_80C3418 - bl sub_80C0E20 - lsls r0, 24 - lsrs r0, 24 - ldr r4, _080C32FC @ =gUnknown_20399E4 - ldr r1, [r4] - movs r5, 0x2 - ldrsh r2, [r1, r5] - movs r5, 0 - ldrsh r3, [r1, r5] - movs r1, 0 - bl sub_80C4164 - ldr r1, [r4] - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x14] - bl sub_80C35DC - ldr r1, [r4] - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x16] - bl sub_80C0E20 - lsls r0, 24 - lsrs r0, 24 - ldr r1, [r4] - movs r3, 0x2 - ldrsh r2, [r1, r3] - movs r5, 0 - ldrsh r3, [r1, r5] - movs r1, 0x1 - bl sub_80C4164 - lsls r0, 24 - lsrs r0, 24 - bl sub_80C3878 - ldr r1, [r4] - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x18] - movs r0, 0x3 - b _080C332C - .align 2, 0 -_080C32FC: .4byte gUnknown_20399E4 -_080C3300: - movs r0, 0x4 - ands r0, r3 - cmp r0, 0 - beq _080C331A - ldr r0, _080C3334 @ =gUnknown_20399D4 - ldr r0, [r0] - ldr r1, _080C3338 @ =0x000047bc - adds r0, r1 - ldr r1, [r0] - ldr r0, _080C333C @ =CB2_ReturnToField - cmp r1, r0 - bne _080C331A -_080C3318: - movs r5, 0x6 -_080C331A: - cmp r5, 0x1 - bne _080C332A - ldr r0, _080C3340 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0x4 - strh r0, [r1, 0xC] - ldr r0, _080C3344 @ =sub_80C3348 - str r0, [r1, 0x10] -_080C332A: - adds r0, r5, 0 -_080C332C: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080C3334: .4byte gUnknown_20399D4 -_080C3338: .4byte 0x000047bc -_080C333C: .4byte CB2_ReturnToField -_080C3340: .4byte gUnknown_20399E4 -_080C3344: .4byte sub_80C3348 - thumb_func_end sub_80C31C0 - - thumb_func_start sub_80C3348 -sub_80C3348: @ 80C3348 - push {r4,r5,lr} - ldr r4, _080C3358 @ =gUnknown_20399E4 - ldr r1, [r4] - ldrh r0, [r1, 0xC] - cmp r0, 0 - beq _080C335C - movs r0, 0x2 - b _080C33F4 - .align 2, 0 -_080C3358: .4byte gUnknown_20399E4 -_080C335C: - movs r2, 0x8 - ldrsh r0, [r1, r2] - cmp r0, 0 - ble _080C336A - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_080C336A: - ldr r1, [r4] - movs r3, 0x8 - ldrsh r0, [r1, r3] - cmp r0, 0 - bge _080C337A - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] -_080C337A: - ldr r1, [r4] - movs r5, 0xA - ldrsh r0, [r1, r5] - cmp r0, 0 - ble _080C338A - ldrh r0, [r1, 0x2] - adds r0, 0x1 - strh r0, [r1, 0x2] -_080C338A: - ldr r1, [r4] - movs r2, 0xA - ldrsh r0, [r1, r2] - cmp r0, 0 - bge _080C339A - ldrh r0, [r1, 0x2] - subs r0, 0x1 - strh r0, [r1, 0x2] -_080C339A: - bl sub_80C0E20 - lsls r0, 24 - lsrs r0, 24 - ldr r1, [r4] - movs r3, 0x2 - ldrsh r2, [r1, r3] - movs r5, 0 - ldrsh r3, [r1, r5] - movs r1, 0 - bl sub_80C4164 - ldr r1, [r4] - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x14] - bl sub_80C35DC - ldr r1, [r4] - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x16] - bl sub_80C0E20 - lsls r0, 24 - lsrs r0, 24 - ldr r1, [r4] - movs r3, 0x2 - ldrsh r2, [r1, r3] - movs r5, 0 - ldrsh r3, [r1, r5] - movs r1, 0x1 - bl sub_80C4164 - lsls r0, 24 - lsrs r0, 24 - bl sub_80C3878 - ldr r1, [r4] - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x18] - ldr r0, _080C33FC @ =sub_80C31C0 - str r0, [r1, 0x10] - movs r0, 0x3 -_080C33F4: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080C33FC: .4byte sub_80C31C0 - thumb_func_end sub_80C3348 - - thumb_func_start sub_80C3400 -sub_80C3400: @ 80C3400 - push {lr} - ldr r0, _080C3414 @ =gUnknown_20399E4 - ldr r0, [r0] - ldr r0, [r0, 0x10] - bl _call_via_r0 - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_080C3414: .4byte gUnknown_20399E4 - thumb_func_end sub_80C3400 - thumb_func_start sub_80C3418 sub_80C3418: @ 80C3418 push {r4,r5,lr} diff --git a/src/region_map.c b/src/region_map.c index de12b4de2..8ea4c9bb6 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -146,13 +146,20 @@ struct UnkStruct_20399E4 { s16 field_000; s16 field_002; - u8 filler_004[4]; - u16 field_008; - u16 field_00A; + u16 field_004; + u16 field_006; + s16 field_008; + s16 field_00A; u16 field_00C; - u8 filler_00E[14]; + u8 field_00E; + u8 (*field_010)(void); + u16 field_014; + u16 field_016; + u16 field_018; struct Sprite * field_01C; - u8 filler_020[0x104]; + u16 field_020; + u16 field_022; + u16 field_024[0x080]; }; EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL; @@ -216,12 +223,19 @@ void sub_80C2C1C(u8 taskId); void sub_80C2C7C(u8 taskId); bool8 sub_80C2E1C(void); void sub_80C3008(u16 a0, u16 a1); -void sub_80C3154(u8 a0); +void sub_80C309C(void); +void sub_80C3154(bool8 a0); void sub_80C3178(void); void sub_80C3188(void); +u8 sub_80C31C0(void); +u8 sub_80C3348(void); u8 sub_80C3400(void); +void sub_80C3418(void); +u8 sub_80C3878(u8 a0); u16 sub_80C3520(void); +u8 sub_80C35DC(u8 a0); u8 sub_80C3AC8(u8 a0); +void sub_80C3D40(void); u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3); void sub_80C41D8(u16 a0, u16 a1); void sub_80C4324(u8 a0); @@ -251,11 +265,13 @@ u16 sub_80C3580(void); #include "data/text/map_section_names.h" extern const u16 gUnknown_83EF23C[]; +extern const u16 gUnknown_83EF25C[]; extern const u16 gUnknown_83EF2DC[]; extern const u16 gUnknown_83EF384[]; extern const u16 gUnknown_83EF3A4[]; extern const u32 gUnknown_83EF3C4[]; extern const u32 gUnknown_83EF450[]; +extern const u32 gUnknown_83EF4E0[]; extern const u32 gUnknown_83EF61C[]; extern const u32 gUnknown_83F0330[]; extern const u32 gUnknown_83F0E0C[]; @@ -289,6 +305,8 @@ extern const struct UnkStruct_83F1B3C gUnknown_83F1B3C[]; extern const struct OamData gUnknown_83F1C20; extern const union AnimCmd *const gUnknown_83F1C30[]; extern const struct UnkStruct_80C4CF0 gUnknown_83F1C34; +extern const struct OamData gUnknown_83F1C3C; +extern const union AnimCmd *const gUnknown_83F1C50[]; extern const u8 *const gUnknown_83F1CAC[]; static void RegionMap_DarkenPalette(u16 *pal, u16 size, u16 tint) @@ -558,7 +576,7 @@ void sub_80C04E4(u8 taskId) sub_80C4E74(gUnknown_8418E8B); sub_80C4ED0(FALSE); sub_80C4324(0); - sub_80C3154(0); + sub_80C3154(FALSE); sub_80C48BC(sub_80C0E20(), 25, 0); sub_80C4960(sub_80C0E20(), 25, 0); } @@ -580,6 +598,8 @@ void sub_80C04E4(u8 taskId) case 1: sub_80C3178(); break; + case 2: + break; case 3: sub_80C0B18(); sub_80C0BB0(); @@ -1051,7 +1071,7 @@ void sub_80C1098(u8 taskId) } break; case 12: - sub_80C3154(0); + sub_80C3154(FALSE); gUnknown_20399D8->field_1CC8++; break; default: @@ -1742,7 +1762,7 @@ void sub_80C267C(u8 taskId) break; case 7: sub_80C4324(0); - sub_80C3154(0); + sub_80C3154(FALSE); gUnknown_20399E0->field_CCC++; break; case 8: @@ -1922,7 +1942,7 @@ void sub_80C2C7C(u8 taskId) case 3: sub_80C22C4(6, FALSE); sub_80C4324(1); - sub_80C3154(1); + sub_80C3154(TRUE); sub_80C4960(255, 25, 1); sub_80C48BC(255, 25, 1); gUnknown_20399E0->field_CCE = 0; @@ -2032,3 +2052,174 @@ void sub_80C2FC0(struct Sprite * sprite) gUnknown_20399E4->field_01C->pos1.y = 8 * gUnknown_20399E4->field_002 + 36; } } + +void sub_80C3008(u16 a0, u16 a1) +{ + gUnknown_20399E4 = AllocZeroed(sizeof(struct UnkStruct_20399E4)); + LZ77UnCompWram(gUnknown_83EF4E0, gUnknown_20399E4->field_024); + gUnknown_20399E4->field_020 = a0; + gUnknown_20399E4->field_022 = a1; + sub_80C3D40(); + gUnknown_20399E4->field_004 = 8 * gUnknown_20399E4->field_000 + 36; + gUnknown_20399E4->field_006 = 8 * gUnknown_20399E4->field_002 + 36; + gUnknown_20399E4->field_010 = sub_80C31C0; + gUnknown_20399E4->field_016 = sub_80C35DC(gUnknown_20399E4->field_014); + gUnknown_20399E4->field_018 = sub_80C3878(sub_80C4164(sub_80C0E20(), 1, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000)); + sub_80C309C(); +} + +void sub_80C309C(void) +{ + u8 spriteId; + struct SpriteSheet spriteSheet = { + .data = gUnknown_20399E4->field_024, + .size = 0x100, + .tag = gUnknown_20399E4->field_020 + }; + struct SpritePalette spritePalette = { + .data = gUnknown_83EF25C, + .tag = gUnknown_20399E4->field_022 + }; + struct SpriteTemplate template = { + .tileTag = gUnknown_20399E4->field_020, + .paletteTag = gUnknown_20399E4->field_022, + .oam = &gUnknown_83F1C3C, + .anims = gUnknown_83F1C50, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80C2FC0 + }; + + LoadSpriteSheet(&spriteSheet); + LoadSpritePalette(&spritePalette); + spriteId = CreateSprite(&template, gUnknown_20399E4->field_004, gUnknown_20399E4->field_006, 0); + gUnknown_20399E4->field_01C = &gSprites[spriteId]; + sub_80C3154(TRUE); +} + +void sub_80C3154(bool8 a0) +{ + gUnknown_20399E4->field_01C->invisible = a0; +} + +void sub_80C3178(void) +{ + gUnknown_20399E4->field_00E = 0; +} + +void sub_80C3188(void) +{ + if (gUnknown_20399E4->field_01C != NULL) + { + DestroySprite(gUnknown_20399E4->field_01C); + FreeSpriteTilesByTag(gUnknown_20399E4->field_020); + FreeSpritePaletteByTag(gUnknown_20399E4->field_022); + } + FREE_IF_NOT_NULL(gUnknown_20399E4); +} + +u8 sub_80C31C0(void) +{ + u8 ret = 0; + gUnknown_20399E4->field_008 = 0; + gUnknown_20399E4->field_00A = 0; + + if (JOY_HELD(DPAD_UP)) + { + if (gUnknown_20399E4->field_002 > 0) + { + gUnknown_20399E4->field_00A = -2; + ret = 1; + } + } + if (JOY_HELD(DPAD_DOWN)) + { + if (gUnknown_20399E4->field_002 < 14) + { + gUnknown_20399E4->field_00A = 2; + ret = 1; + } + } + if (JOY_HELD(DPAD_RIGHT)) + { + if (gUnknown_20399E4->field_000 < 21) + { + gUnknown_20399E4->field_008 = 2; + ret = 1; + } + } + if (JOY_HELD(DPAD_LEFT)) + { + if (gUnknown_20399E4->field_000 > 0) + { + gUnknown_20399E4->field_008 = -2; + ret = 1; + } + } + if (JOY_NEW(A_BUTTON)) + { + ret = 4; + if (gUnknown_20399E4->field_000 == 21 && gUnknown_20399E4->field_002 == 13) + { + PlaySE(SE_W063B); + ret = 6; + } + if (gUnknown_20399E4->field_000 == 21 && gUnknown_20399E4->field_002 == 11) + { + if (sub_80C0E04(0) == TRUE) + { + PlaySE(SE_W063B); + ret = 5; + } + } + } + else if (!JOY_NEW(B_BUTTON)) + { + if (JOY_REPT(START_BUTTON)) + { + sub_80C3418(); + gUnknown_20399E4->field_014 = sub_80C4164(sub_80C0E20(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); + gUnknown_20399E4->field_016 = sub_80C35DC(gUnknown_20399E4->field_014); + gUnknown_20399E4->field_018 = sub_80C3878(sub_80C4164(sub_80C0E20(), 1, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000)); + return 3; + } + else if (JOY_NEW(SELECT_BUTTON) && gUnknown_20399D4->field_47BC == CB2_ReturnToField) + { + ret = 6; + } + } + else + { + ret = 6; + } + if (ret == 1) + { + gUnknown_20399E4->field_00C = 4; + gUnknown_20399E4->field_010 = sub_80C3348; + } + return ret; +} + +u8 sub_80C3348(void) +{ + if (gUnknown_20399E4->field_00C != 0) + return 2; + if (gUnknown_20399E4->field_008 > 0) + gUnknown_20399E4->field_000++; + if (gUnknown_20399E4->field_008 < 0) + gUnknown_20399E4->field_000--; + if (gUnknown_20399E4->field_00A > 0) + gUnknown_20399E4->field_002++; + if (gUnknown_20399E4->field_00A < 0) + gUnknown_20399E4->field_002--; + gUnknown_20399E4->field_014 = sub_80C4164(sub_80C0E20(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); + gUnknown_20399E4->field_016 = sub_80C35DC(gUnknown_20399E4->field_014); + gUnknown_20399E4->field_018 = sub_80C3878(sub_80C4164(sub_80C0E20(), 1, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000)); + gUnknown_20399E4->field_010 = sub_80C31C0; + return 3; +} + +u8 sub_80C3400(void) +{ + return gUnknown_20399E4->field_010(); +} -- cgit v1.2.3 From cdc025132e7ec7844587782df736df04b5953d5a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 7 Jan 2020 09:39:57 -0500 Subject: Use official names for crt0 routines --- asm/crt0.s | 73 ++++++++++++++++++----------------- berry_fix/payload/asm/crt0.s | 8 ++-- berry_fix/payload/src/main.c | 4 +- constants/version.inc | 92 ++------------------------------------------ src/main.c | 4 +- 5 files changed, 49 insertions(+), 132 deletions(-) diff --git a/asm/crt0.s b/asm/crt0.s index 609845337..28855d504 100644 --- a/asm/crt0.s +++ b/asm/crt0.s @@ -1,4 +1,6 @@ .include "constants/gba_constants.inc" + .include "constants/misc_constants.inc" + .include "constants/version.inc" .syntax unified @@ -8,8 +10,8 @@ .arm -Start: @ 8000000 - b Init +_start: @ 8000000 + b start_vector .include "asm/rom_header.inc" @@ -32,8 +34,6 @@ GPIOPortReadEnable: @ 80000C8 @ 80000D0 -@ TODO: figure out what this data is - .4byte 0xFFFFFFFF .4byte 0xFFFFFFFF .4byte 0xFFFFFFFF @@ -46,19 +46,21 @@ GPIOPortReadEnable: @ 80000C8 .4byte 0xFFFFFFFF .4byte 0xFFFFFFFF .4byte 0xFFFFFFFF + +@ 8000100 + .global CartIdent +CartIdent: + .4byte GAME_VERSION + .4byte GAME_LANGUAGE +.game_name: .ifdef FIRERED - .4byte 4 - .4byte 2 .ascii "pokemon red version" - .space 13 .else .ifdef LEAFGREEN - .4byte 5 - .4byte 2 .ascii "pokemon green version" - .space 11 .endif .endif + .space .game_name+0x20-. .4byte gMonFrontPicTable .4byte gMonBackPicTable .4byte gMonPaletteTable @@ -118,32 +120,32 @@ GPIOPortReadEnable: @ 80000C8 .arm .align 2, 0 - .global Init -Init: + .global start_vector +start_vector: mov r0, PSR_IRQ_MODE msr cpsr_cf, r0 ldr sp, sp_irq mov r0, PSR_SYS_MODE msr cpsr_cf, r0 - ldr sp, sp_sys + ldr sp, sp_usr ldr r1, =INTR_VECTOR - adr r0, IntrMain + adr r0, intr_main str r0, [r1] ldr r1, =AgbMain mov lr, pc bx r1 - b Init + b start_vector .align 2, 0 -sp_sys: .word IWRAM_END - 0x1C0 +sp_usr: .word IWRAM_END - 0x1C0 sp_irq: .word IWRAM_END - 0x60 .pool .arm .align 2, 0 - .global IntrMain -IntrMain: + .global intr_main +intr_main: mov r3, REG_BASE add r3, r3, 0x200 ldr r2, [r3, OFFSET_REG_IE - 0x200] @@ -155,50 +157,51 @@ IntrMain: and r1, r2, r2, lsr 16 mov r12, 0 ands r0, r1, INTR_FLAG_VCOUNT - bne IntrMain_FoundIntr + bne jump_intr add r12, r12, 0x4 mov r0, 0x1 strh r0, [r3, OFFSET_REG_IME - 0x200] ands r0, r1, INTR_FLAG_SERIAL - bne IntrMain_FoundIntr + bne jump_intr add r12, r12, 0x4 ands r0, r1, INTR_FLAG_TIMER3 - bne IntrMain_FoundIntr + bne jump_intr add r12, r12, 0x4 ands r0, r1, INTR_FLAG_HBLANK - bne IntrMain_FoundIntr + bne jump_intr add r12, r12, 0x4 ands r0, r1, INTR_FLAG_VBLANK - bne IntrMain_FoundIntr + bne jump_intr add r12, r12, 0x4 ands r0, r1, INTR_FLAG_TIMER0 - bne IntrMain_FoundIntr + bne jump_intr add r12, r12, 0x4 ands r0, r1, INTR_FLAG_TIMER1 - bne IntrMain_FoundIntr + bne jump_intr add r12, r12, 0x4 ands r0, r1, INTR_FLAG_TIMER2 - bne IntrMain_FoundIntr + bne jump_intr add r12, r12, 0x4 ands r0, r1, INTR_FLAG_DMA0 - bne IntrMain_FoundIntr + bne jump_intr add r12, r12, 0x4 ands r0, r1, INTR_FLAG_DMA1 - bne IntrMain_FoundIntr + bne jump_intr add r12, r12, 0x4 ands r0, r1, INTR_FLAG_DMA2 - bne IntrMain_FoundIntr + bne jump_intr add r12, r12, 0x4 ands r0, r1, INTR_FLAG_DMA3 - bne IntrMain_FoundIntr + bne jump_intr add r12, r12, 0x4 ands r0, r1, INTR_FLAG_KEYPAD - bne IntrMain_FoundIntr + bne jump_intr add r12, r12, 0x4 ands r0, r1, INTR_FLAG_GAMEPAK strbne r0, [r3, OFFSET_REG_SOUNDCNT_X - 0x200] - bne . @ spin -IntrMain_FoundIntr: +loop: + bne loop @ spin +jump_intr: strh r0, [r3, OFFSET_REG_IF - 0x200] bic r2, r2, r0 ldr r0, =gRfuState @@ -218,9 +221,9 @@ IntrMain_FoundIntr: add r1, r1, r12 ldr r0, [r1] stmdb sp!, {lr} - adr lr, IntrMain_RetAddr + adr lr, intr_return bx r0 -IntrMain_RetAddr: +intr_return: ldmia sp!, {lr} mrs r3, cpsr bic r3, r3, PSR_I_BIT | PSR_F_BIT | PSR_MODE_MASK diff --git a/berry_fix/payload/asm/crt0.s b/berry_fix/payload/asm/crt0.s index edbb83328..9a0e75c77 100644 --- a/berry_fix/payload/asm/crt0.s +++ b/berry_fix/payload/asm/crt0.s @@ -16,7 +16,7 @@ Init: msr cpsr_cf, r0 ldr sp, sp_sys ldr r1, =INTR_VECTOR - ldr r0, =IntrMain + ldr r0, =intr_main str r0, [r1] ldr r1, =AgbMain + 1 mov lr, pc @@ -32,8 +32,8 @@ sp_irq: .word IWRAM_END - 0x60 .arm .align 2, 0 - .global IntrMain -IntrMain: @ 0x2010048 + .global intr_main +intr_main: @ 0x2010048 mov ip, REG_BASE add r3, ip, OFFSET_REG_IE ldr r2, [r3] @@ -79,4 +79,4 @@ _020100DC: ldr r0, [r1] bx r0 .pool - .size IntrMain, .-IntrMain + .size intr_main, .-intr_main diff --git a/berry_fix/payload/src/main.c b/berry_fix/payload/src/main.c index 325d3830e..a017e8f69 100644 --- a/berry_fix/payload/src/main.c +++ b/berry_fix/payload/src/main.c @@ -17,7 +17,7 @@ u32 gGameVersion; EWRAM_DATA u8 gSharedMem[0x8000] = {}; -void IntrMain(void); +void intr_main(void); void ReadKeys(void); void dummy_intr_0(void); void dummy_intr_1(void); @@ -62,7 +62,7 @@ void AgbMain(void) { RegisterRamReset(0x1E); DmaCopy32(3, gIntrFuncPointers, gIntrTable, sizeof gIntrFuncPointers); - DmaCopy32(3, IntrMain, gIntrVector, sizeof(gIntrVector)); + DmaCopy32(3, intr_main, gIntrVector, sizeof(gIntrVector)); INTR_VECTOR = gIntrVector; REG_IE = INTR_FLAG_VBLANK; if (*RomHeaderMagic == 0x96 && *(u32 *)RomHeaderGameCode == *(u32 *)gBerryFixGameCode) diff --git a/constants/version.inc b/constants/version.inc index c93e439f4..07c3bfa29 100644 --- a/constants/version.inc +++ b/constants/version.inc @@ -1,91 +1,5 @@ - .ifdef SAPPHIRE - .equiv GAME_VERSION, 1 + .ifdef FIRERED + .equiv GAME_VERSION, 4 .else - .equiv GAME_VERSION, 2 - .endif - - .ifdef SAPPHIRE - .set BGM_EVIL_TEAM, BGM_AQA_0 - .set BGM_GOOD_TEAM, BGM_MGM0 - .else - .set BGM_EVIL_TEAM, BGM_MGM0 - .set BGM_GOOD_TEAM, BGM_AQA_0 - .endc - - .ifdef SAPPHIRE - .set ITEM_RED_OR_BLUE_ORB, ITEM_BLUE_ORB - .else - .set ITEM_RED_OR_BLUE_ORB, ITEM_RED_ORB - .endif - - .ifdef SAPPHIRE - .set SPECIES_GROUDON_OR_KYOGRE, SPECIES_KYOGRE - .else - .set SPECIES_GROUDON_OR_KYOGRE, SPECIES_GROUDON - .endif - - .ifdef SAPPHIRE - .set SPECIES_LATIAS_OR_LATIOS, SPECIES_LATIOS - .else - .set SPECIES_LATIAS_OR_LATIOS, SPECIES_LATIAS - .endif - - .ifdef SAPPHIRE - .set OPPONENT_PETALBURG_WOODS_GRUNT, OPPONENT_GRUNT_9 - .set OPPONENT_RUSTURF_TUNNEL_GRUNT, OPPONENT_GRUNT_15 - .set OPPONENT_MUSEUM_2F_GRUNT_1, OPPONENT_GRUNT_19 - .set OPPONENT_MUSEUM_2F_GRUNT_2, OPPONENT_GRUNT_20 - .set OPPONENT_514, OPPONENT_HECTOR_1 - .set OPPONENT_MT_CHIMNEY_GRUNT_1, OPPONENT_MATT_2 - .set OPPONENT_MT_CHIMNEY_GRUNT_2, OPPONENT_GRUNT_13 - .set OPPONENT_HIDEOUT_1F_GRUNT, OPPONENT_GRUNT_1 - .set OPPONENT_HIDEOUT_B1F_GRUNT_1, OPPONENT_GRUNT_2 - .set OPPONENT_HIDEOUT_B1F_GRUNT_2, OPPONENT_GRUNT_3 - .set OPPONENT_HIDEOUT_B1F_GRUNT_3, OPPONENT_GRUNT_26 - .set OPPONENT_HIDEOUT_B2F_GRUNT_1, OPPONENT_MATT_1 - .set OPPONENT_HIDEOUT_B2F_GRUNT_2, OPPONENT_GRUNT_4 - .set OPPONENT_HIDEOUT_B2F_GRUNT_3, OPPONENT_GRUNT_27 - .set OPPONENT_SEAFLOOR_CAVERN_GRUNT_1, OPPONENT_GRUNT_5 - .set OPPONENT_SEAFLOOR_CAVERN_GRUNT_2, OPPONENT_GRUNT_6 - .set OPPONENT_SEAFLOOR_CAVERN_GRUNT_3, OPPONENT_SHELLY_2 - .set OPPONENT_SEAFLOOR_CAVERN_GRUNT_4, OPPONENT_GRUNT_7 - .set OPPONENT_SEAFLOOR_CAVERN_GRUNT_5, OPPONENT_ARCHIE_2 - .set OPPONENT_MT_CHIMNEY_GRUNT_3, OPPONENT_ARCHIE_3 - .set OPPONENT_MT_PYRE_SUMMIT_GRUNT_1, OPPONENT_GRUNT_22 - .set OPPONENT_MT_PYRE_SUMMIT_GRUNT_2, OPPONENT_GRUNT_23 - .set OPPONENT_MT_PYRE_SUMMIT_GRUNT_3, OPPONENT_GRUNT_24 - .set OPPONENT_WEATHER_INSTITUTE_GRUNT_1, OPPONENT_GRUNT_16 - .set OPPONENT_WEATHER_INSTITUTE_GRUNT_2, OPPONENT_GRUNT_25 - .set OPPONENT_WEATHER_INSTITUTE_GRUNT_3, OPPONENT_GRUNT_17 - .set OPPONENT_WEATHER_INSTITUTE_GRUNT_4, OPPONENT_GRUNT_18 - .set OPPONENT_WEATHER_INSTITUTE_GRUNT_5, OPPONENT_SHELLY_1 - .else - .set OPPONENT_PETALBURG_WOODS_GRUNT, OPPONENT_GRUNT_36 - .set OPPONENT_RUSTURF_TUNNEL_GRUNT, OPPONENT_GRUNT_42 - .set OPPONENT_MUSEUM_2F_GRUNT_1, OPPONENT_GRUNT_46 - .set OPPONENT_MUSEUM_2F_GRUNT_2, OPPONENT_GRUNT_47 - .set OPPONENT_514, OPPONENT_HECTOR_2 - .set OPPONENT_MT_CHIMNEY_GRUNT_1, OPPONENT_TABITHA_2 - .set OPPONENT_MT_CHIMNEY_GRUNT_2, OPPONENT_GRUNT_40 - .set OPPONENT_HIDEOUT_1F_GRUNT, OPPONENT_GRUNT_28 - .set OPPONENT_HIDEOUT_B1F_GRUNT_1, OPPONENT_GRUNT_29 - .set OPPONENT_HIDEOUT_B1F_GRUNT_2, OPPONENT_GRUNT_30 - .set OPPONENT_HIDEOUT_B1F_GRUNT_3, OPPONENT_GRUNT_53 - .set OPPONENT_HIDEOUT_B2F_GRUNT_1, OPPONENT_TABITHA_1 - .set OPPONENT_HIDEOUT_B2F_GRUNT_2, OPPONENT_GRUNT_31 - .set OPPONENT_HIDEOUT_B2F_GRUNT_3, OPPONENT_GRUNT_54 - .set OPPONENT_SEAFLOOR_CAVERN_GRUNT_1, OPPONENT_GRUNT_32 - .set OPPONENT_SEAFLOOR_CAVERN_GRUNT_2, OPPONENT_GRUNT_33 - .set OPPONENT_SEAFLOOR_CAVERN_GRUNT_3, OPPONENT_COURTNEY_2 - .set OPPONENT_SEAFLOOR_CAVERN_GRUNT_4, OPPONENT_GRUNT_34 - .set OPPONENT_SEAFLOOR_CAVERN_GRUNT_5, OPPONENT_MAXIE_2 - .set OPPONENT_MT_CHIMNEY_GRUNT_3, OPPONENT_MAXIE_3 - .set OPPONENT_MT_PYRE_SUMMIT_GRUNT_1, OPPONENT_GRUNT_49 - .set OPPONENT_MT_PYRE_SUMMIT_GRUNT_2, OPPONENT_GRUNT_50 - .set OPPONENT_MT_PYRE_SUMMIT_GRUNT_3, OPPONENT_GRUNT_51 - .set OPPONENT_WEATHER_INSTITUTE_GRUNT_1, OPPONENT_GRUNT_43 - .set OPPONENT_WEATHER_INSTITUTE_GRUNT_2, OPPONENT_GRUNT_52 - .set OPPONENT_WEATHER_INSTITUTE_GRUNT_3, OPPONENT_GRUNT_44 - .set OPPONENT_WEATHER_INSTITUTE_GRUNT_4, OPPONENT_GRUNT_45 - .set OPPONENT_WEATHER_INSTITUTE_GRUNT_5, OPPONENT_COURTNEY_1 + .equiv GAME_VERSION, 5 .endif diff --git a/src/main.c b/src/main.c index c96e4cc3a..60f762a62 100644 --- a/src/main.c +++ b/src/main.c @@ -36,7 +36,7 @@ extern bool32 sub_80F5118(void); extern struct SoundInfo gSoundInfo; extern u32 gFlashMemoryPresent; -extern u32 IntrMain[]; +extern u32 intr_main[]; extern u8 gHeap[]; extern struct SaveBlock1 gSaveBlock1; extern struct SaveBlock2 gSaveBlock2; @@ -313,7 +313,7 @@ void InitIntrHandlers(void) for (i = 0; i < INTR_COUNT; i++) gIntrTable[i] = gIntrTableTemplate[i]; - DmaCopy32(3, IntrMain, IntrMain_Buffer, sizeof(IntrMain_Buffer)); + DmaCopy32(3, intr_main, IntrMain_Buffer, sizeof(IntrMain_Buffer)); INTR_VECTOR = IntrMain_Buffer; -- cgit v1.2.3 From d35a54052fdf80a4770004027f2e8d8a07873a30 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 7 Jan 2020 10:03:47 -0500 Subject: through sub_80C3580 --- asm/region_map.s | 244 ------------------------------------------------------- src/region_map.c | 95 +++++++++++++++++++++- 2 files changed, 93 insertions(+), 246 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index 10f8c83f4..62323a302 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,250 +5,6 @@ .text - thumb_func_start sub_80C3418 -sub_80C3418: @ 80C3418 - push {r4,r5,lr} - movs r0, 0 - bl sub_80C0E04 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C3482 - ldr r5, _080C3474 @ =gUnknown_20399E4 - ldr r1, [r5] - ldrb r0, [r1, 0xE] - adds r0, 0x1 - strb r0, [r1, 0xE] - ldr r4, [r5] - ldrb r0, [r4, 0xE] - movs r1, 0x3 - bl __umodsi3 - strb r0, [r4, 0xE] - ldr r0, [r5] - ldrb r0, [r0, 0xE] - cmp r0, 0 - bne _080C3460 - bl sub_80C0E20 - adds r4, r0, 0 - bl sub_80C0E34 - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - beq _080C3460 - ldr r1, [r5] - ldrb r0, [r1, 0xE] - adds r0, 0x1 - strb r0, [r1, 0xE] -_080C3460: - ldr r4, _080C3474 @ =gUnknown_20399E4 - ldr r1, [r4] - ldrb r0, [r1, 0xE] - cmp r0, 0x1 - beq _080C3478 - cmp r0, 0x1 - ble _080C34A2 - cmp r0, 0x2 - beq _080C34B8 - b _080C34A2 - .align 2, 0 -_080C3474: .4byte gUnknown_20399E4 -_080C3478: - movs r0, 0x15 - strh r0, [r1] - movs r0, 0xB - strh r0, [r1, 0x2] - b _080C34C0 -_080C3482: - ldr r4, _080C34B4 @ =gUnknown_20399E4 - ldr r1, [r4] - ldrb r0, [r1, 0xE] - adds r0, 0x1 - strb r0, [r1, 0xE] - ldr r2, [r4] - ldrb r0, [r2, 0xE] - movs r1, 0x1 - ands r0, r1 - strb r0, [r2, 0xE] - ldr r1, [r4] - ldrb r0, [r1, 0xE] - cmp r0, 0 - beq _080C34A2 - cmp r0, 0x1 - beq _080C34B8 -_080C34A2: - bl sub_80C4380 - ldr r1, [r4] - strh r0, [r1] - bl sub_80C438C - ldr r1, [r4] - strh r0, [r1, 0x2] - b _080C34C0 - .align 2, 0 -_080C34B4: .4byte gUnknown_20399E4 -_080C34B8: - movs r0, 0xD - strh r0, [r1, 0x2] - movs r0, 0x15 - strh r0, [r1] -_080C34C0: - ldr r4, _080C3504 @ =gUnknown_20399E4 - ldr r1, [r4] - ldr r2, [r1, 0x1C] - movs r3, 0 - ldrsh r0, [r1, r3] - lsls r0, 3 - adds r0, 0x24 - strh r0, [r2, 0x20] - ldr r2, [r1, 0x1C] - movs r5, 0x2 - ldrsh r0, [r1, r5] - lsls r0, 3 - adds r0, 0x24 - strh r0, [r2, 0x22] - bl sub_80C0E20 - lsls r0, 24 - lsrs r0, 24 - ldr r1, [r4] - movs r3, 0x2 - ldrsh r2, [r1, r3] - movs r5, 0 - ldrsh r3, [r1, r5] - movs r1, 0 - bl sub_80C4164 - ldr r1, [r4] - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x14] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C3504: .4byte gUnknown_20399E4 - thumb_func_end sub_80C3418 - - thumb_func_start sub_80C3508 -sub_80C3508: @ 80C3508 - ldr r0, _080C3510 @ =gUnknown_20399E4 - ldr r0, [r0] - ldrh r0, [r0] - bx lr - .align 2, 0 -_080C3510: .4byte gUnknown_20399E4 - thumb_func_end sub_80C3508 - - thumb_func_start sub_80C3514 -sub_80C3514: @ 80C3514 - ldr r0, _080C351C @ =gUnknown_20399E4 - ldr r0, [r0] - ldrh r0, [r0, 0x2] - bx lr - .align 2, 0 -_080C351C: .4byte gUnknown_20399E4 - thumb_func_end sub_80C3514 - - thumb_func_start sub_80C3520 -sub_80C3520: @ 80C3520 - push {r4,lr} - ldr r4, _080C353C @ =gUnknown_20399E4 - ldr r1, [r4] - ldrh r0, [r1, 0x2] - cmp r0, 0xE - bhi _080C3538 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0 - blt _080C3538 - cmp r0, 0x15 - ble _080C3540 -_080C3538: - movs r0, 0xC5 - b _080C3574 - .align 2, 0 -_080C353C: .4byte gUnknown_20399E4 -_080C3540: - bl sub_80C0E20 - lsls r0, 24 - lsrs r0, 24 - ldr r1, [r4] - movs r3, 0x2 - ldrsh r2, [r1, r3] - movs r4, 0 - ldrsh r3, [r1, r4] - movs r1, 0 - bl sub_80C4164 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xAE - beq _080C3564 - cmp r4, 0xBB - bne _080C3572 -_080C3564: - ldr r0, _080C357C @ =0x000008b5 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - bne _080C3572 - movs r4, 0xC5 -_080C3572: - adds r0, r4, 0 -_080C3574: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080C357C: .4byte 0x000008b5 - thumb_func_end sub_80C3520 - - thumb_func_start sub_80C3580 -sub_80C3580: @ 80C3580 - push {r4,lr} - ldr r4, _080C359C @ =gUnknown_20399E4 - ldr r1, [r4] - ldrh r0, [r1, 0x2] - cmp r0, 0xE - bhi _080C3598 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0 - blt _080C3598 - cmp r0, 0x15 - ble _080C35A0 -_080C3598: - movs r0, 0xC5 - b _080C35D0 - .align 2, 0 -_080C359C: .4byte gUnknown_20399E4 -_080C35A0: - bl sub_80C0E20 - lsls r0, 24 - lsrs r0, 24 - ldr r1, [r4] - movs r3, 0x2 - ldrsh r2, [r1, r3] - movs r4, 0 - ldrsh r3, [r1, r4] - movs r1, 0x1 - bl sub_80C4164 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x8D - bne _080C35CE - ldr r0, _080C35D8 @ =0x00000844 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - bne _080C35CE - movs r4, 0xC5 -_080C35CE: - adds r0, r4, 0 -_080C35D0: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080C35D8: .4byte 0x00000844 - thumb_func_end sub_80C3580 - thumb_func_start sub_80C35DC sub_80C35DC: @ 80C35DC push {lr} diff --git a/src/region_map.c b/src/region_map.c index 8ea4c9bb6..e8252065e 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -231,16 +231,18 @@ u8 sub_80C31C0(void); u8 sub_80C3348(void); u8 sub_80C3400(void); void sub_80C3418(void); -u8 sub_80C3878(u8 a0); u16 sub_80C3520(void); u8 sub_80C35DC(u8 a0); +u8 sub_80C3878(u8 a0); u8 sub_80C3AC8(u8 a0); void sub_80C3D40(void); u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3); void sub_80C41D8(u16 a0, u16 a1); void sub_80C4324(u8 a0); -void sub_80C4398(u8 a0, u8 taskId, TaskFunc taskFunc); void sub_80C4348(void); +u16 sub_80C4380(); +u16 sub_80C438C(); +void sub_80C4398(u8 a0, u8 taskId, TaskFunc taskFunc); void sub_80C48BC(u8 a0, u8 a1, u8 a2); void sub_80C4960(u8 a0, u8 a1, u8 a2); void sub_80C4A04(void); @@ -2223,3 +2225,92 @@ u8 sub_80C3400(void) { return gUnknown_20399E4->field_010(); } + +void sub_80C3418(void) +{ + if (sub_80C0E04(0) == 1) + { + gUnknown_20399E4->field_00E++; + gUnknown_20399E4->field_00E %= 3; + if (gUnknown_20399E4->field_00E == 0 && sub_80C0E20() != sub_80C0E34()) + { + gUnknown_20399E4->field_00E++; + } + switch (gUnknown_20399E4->field_00E) + { + case 0: + default: + gUnknown_20399E4->field_000 = sub_80C4380(); + gUnknown_20399E4->field_002 = sub_80C438C(); + break; + case 1: + gUnknown_20399E4->field_000 = 21; + gUnknown_20399E4->field_002 = 11; + break; + case 2: + gUnknown_20399E4->field_002 = 13; + gUnknown_20399E4->field_000 = 21; + break; + } + } + else + { + gUnknown_20399E4->field_00E++; + gUnknown_20399E4->field_00E %= 2; + switch (gUnknown_20399E4->field_00E) + { + case 0: + default: + gUnknown_20399E4->field_000 = sub_80C4380(); + gUnknown_20399E4->field_002 = sub_80C438C(); + break; + case 1: + gUnknown_20399E4->field_002 = 13; + gUnknown_20399E4->field_000 = 21; + break; + } + } + gUnknown_20399E4->field_01C->pos1.x = 8 * gUnknown_20399E4->field_000 + 36; + gUnknown_20399E4->field_01C->pos1.y = 8 * gUnknown_20399E4->field_002 + 36; + gUnknown_20399E4->field_014 = sub_80C4164(sub_80C0E20(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); +} + +u16 sub_80C3508(void) +{ + return gUnknown_20399E4->field_000; +} + +u16 sub_80C3514(void) +{ + return gUnknown_20399E4->field_002; +} + +u16 sub_80C3520(void) +{ + u8 ret; + if (gUnknown_20399E4->field_002 < 0 + || gUnknown_20399E4->field_002 > 14 + || gUnknown_20399E4->field_000 < 0 + || gUnknown_20399E4->field_000 > 21) + return MAPSEC_NONE; + + ret = sub_80C4164(sub_80C0E20(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); + if ((ret == MAPSEC_NAVEL_ROCK || ret == MAPSEC_BIRTH_ISLAND) && !FlagGet(FLAG_WORLD_MAP_NAVEL_ROCK_EXTERIOR)) + ret = MAPSEC_NONE; + return ret; +} + +u16 sub_80C3580(void) +{ + u8 ret; + if (gUnknown_20399E4->field_002 < 0 + || gUnknown_20399E4->field_002 > 14 + || gUnknown_20399E4->field_000 < 0 + || gUnknown_20399E4->field_000 > 21) + return MAPSEC_NONE; + + ret = sub_80C4164(sub_80C0E20(), 1, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); + if (ret == MAPSEC_CERULEAN_CAVE && !FlagGet(FLAG_SYS_CAN_LINK_WITH_RS)) + ret = MAPSEC_NONE; + return ret; +} -- cgit v1.2.3 From 5249e584f73c871886a382e581148ba2d3217116 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 7 Jan 2020 10:19:21 -0500 Subject: through sub_80C3878 --- asm/region_map.s | 515 ------------------------------------------------------- src/region_map.c | 126 ++++++++++++++ 2 files changed, 126 insertions(+), 515 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index 62323a302..b08e56f6c 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,521 +5,6 @@ .text - thumb_func_start sub_80C35DC -sub_80C35DC: @ 80C35DC - push {lr} - lsls r0, 24 - lsrs r0, 24 - subs r0, 0x58 - cmp r0, 0x6D - bls _080C35EA - b _080C3870 -_080C35EA: - lsls r0, 2 - ldr r1, _080C35F4 @ =_080C35F8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C35F4: .4byte _080C35F8 - .align 2, 0 -_080C35F8: - .4byte _080C37B0 - .4byte _080C37B6 - .4byte _080C37C0 - .4byte _080C37C8 - .4byte _080C37D0 - .4byte _080C37D8 - .4byte _080C37E0 - .4byte _080C37E8 - .4byte _080C37F0 - .4byte _080C37F8 - .4byte _080C3800 - .4byte _080C3840 - .4byte _080C3858 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3808 - .4byte _080C3810 - .4byte _080C3818 - .4byte _080C3820 - .4byte _080C3828 - .4byte _080C3830 - .4byte _080C3836 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C3870 - .4byte _080C384C -_080C37B0: - movs r0, 0x89 - lsls r0, 4 - b _080C385A -_080C37B6: - ldr r0, _080C37BC @ =0x00000891 - b _080C385A - .align 2, 0 -_080C37BC: .4byte 0x00000891 -_080C37C0: - ldr r0, _080C37C4 @ =0x00000892 - b _080C385A - .align 2, 0 -_080C37C4: .4byte 0x00000892 -_080C37C8: - ldr r0, _080C37CC @ =0x00000893 - b _080C385A - .align 2, 0 -_080C37CC: .4byte 0x00000893 -_080C37D0: - ldr r0, _080C37D4 @ =0x00000894 - b _080C385A - .align 2, 0 -_080C37D4: .4byte 0x00000894 -_080C37D8: - ldr r0, _080C37DC @ =0x00000895 - b _080C385A - .align 2, 0 -_080C37DC: .4byte 0x00000895 -_080C37E0: - ldr r0, _080C37E4 @ =0x00000896 - b _080C385A - .align 2, 0 -_080C37E4: .4byte 0x00000896 -_080C37E8: - ldr r0, _080C37EC @ =0x00000897 - b _080C385A - .align 2, 0 -_080C37EC: .4byte 0x00000897 -_080C37F0: - ldr r0, _080C37F4 @ =0x00000898 - b _080C385A - .align 2, 0 -_080C37F4: .4byte 0x00000898 -_080C37F8: - ldr r0, _080C37FC @ =0x00000899 - b _080C385A - .align 2, 0 -_080C37FC: .4byte 0x00000899 -_080C3800: - ldr r0, _080C3804 @ =0x0000089a - b _080C385A - .align 2, 0 -_080C3804: .4byte 0x0000089a -_080C3808: - ldr r0, _080C380C @ =0x0000089b - b _080C385A - .align 2, 0 -_080C380C: .4byte 0x0000089b -_080C3810: - ldr r0, _080C3814 @ =0x0000089c - b _080C385A - .align 2, 0 -_080C3814: .4byte 0x0000089c -_080C3818: - ldr r0, _080C381C @ =0x0000089d - b _080C385A - .align 2, 0 -_080C381C: .4byte 0x0000089d -_080C3820: - ldr r0, _080C3824 @ =0x0000089e - b _080C385A - .align 2, 0 -_080C3824: .4byte 0x0000089e -_080C3828: - ldr r0, _080C382C @ =0x0000089f - b _080C385A - .align 2, 0 -_080C382C: .4byte 0x0000089f -_080C3830: - movs r0, 0x8A - lsls r0, 4 - b _080C385A -_080C3836: - ldr r0, _080C383C @ =0x000008a1 - b _080C385A - .align 2, 0 -_080C383C: .4byte 0x000008a1 -_080C3840: - movs r0, 0x3 - bl sub_80C0E04 - lsls r0, 24 - cmp r0, 0 - bne _080C3850 -_080C384C: - movs r0, 0 - b _080C3872 -_080C3850: - ldr r0, _080C3854 @ =0x000008a2 - b _080C385A - .align 2, 0 -_080C3854: .4byte 0x000008a2 -_080C3858: - ldr r0, _080C386C @ =0x000008a3 -_080C385A: - bl FlagGet - lsls r0, 24 - movs r1, 0x3 - cmp r0, 0 - beq _080C3868 - movs r1, 0x2 -_080C3868: - adds r0, r1, 0 - b _080C3872 - .align 2, 0 -_080C386C: .4byte 0x000008a3 -_080C3870: - movs r0, 0x1 -_080C3872: - pop {r1} - bx r1 - thumb_func_end sub_80C35DC - - thumb_func_start sub_80C3878 -sub_80C3878: @ 80C3878 - push {lr} - lsls r0, 24 - lsrs r0, 24 - subs r0, 0x7E - cmp r0, 0x47 - bls _080C3886 - b _080C3AC0 -_080C3886: - lsls r0, 2 - ldr r1, _080C3890 @ =_080C3894 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C3890: .4byte _080C3894 - .align 2, 0 -_080C3894: - .4byte _080C39B8 - .4byte _080C39C0 - .4byte _080C39C8 - .4byte _080C39D0 - .4byte _080C39D8 - .4byte _080C39E0 - .4byte _080C39E8 - .4byte _080C39F0 - .4byte _080C39F8 - .4byte _080C3A00 - .4byte _080C3A08 - .4byte _080C3A10 - .4byte _080C3A18 - .4byte _080C3A1E - .4byte _080C3A28 - .4byte _080C3A30 - .4byte _080C3A38 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3A40 - .4byte _080C3A48 - .4byte _080C3A50 - .4byte _080C3A58 - .4byte _080C3A60 - .4byte _080C3A68 - .4byte _080C3A70 - .4byte _080C3A78 - .4byte _080C3A80 - .4byte _080C3A88 - .4byte _080C3A90 - .4byte _080C3A98 - .4byte _080C3A9E - .4byte _080C3AA8 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C3AC0 - .4byte _080C39B4 -_080C39B4: - movs r0, 0 - b _080C3AC2 -_080C39B8: - ldr r0, _080C39BC @ =0x000008a4 - b _080C3AAA - .align 2, 0 -_080C39BC: .4byte 0x000008a4 -_080C39C0: - ldr r0, _080C39C4 @ =0x000008a5 - b _080C3AAA - .align 2, 0 -_080C39C4: .4byte 0x000008a5 -_080C39C8: - ldr r0, _080C39CC @ =0x000008a6 - b _080C3AAA - .align 2, 0 -_080C39CC: .4byte 0x000008a6 -_080C39D0: - ldr r0, _080C39D4 @ =0x000008a7 - b _080C3AAA - .align 2, 0 -_080C39D4: .4byte 0x000008a7 -_080C39D8: - ldr r0, _080C39DC @ =0x000008a8 - b _080C3AAA - .align 2, 0 -_080C39DC: .4byte 0x000008a8 -_080C39E0: - ldr r0, _080C39E4 @ =0x000008a9 - b _080C3AAA - .align 2, 0 -_080C39E4: .4byte 0x000008a9 -_080C39E8: - ldr r0, _080C39EC @ =0x000008aa - b _080C3AAA - .align 2, 0 -_080C39EC: .4byte 0x000008aa -_080C39F0: - ldr r0, _080C39F4 @ =0x000008ab - b _080C3AAA - .align 2, 0 -_080C39F4: .4byte 0x000008ab -_080C39F8: - ldr r0, _080C39FC @ =0x000008ac - b _080C3AAA - .align 2, 0 -_080C39FC: .4byte 0x000008ac -_080C3A00: - ldr r0, _080C3A04 @ =0x000008ad - b _080C3AAA - .align 2, 0 -_080C3A04: .4byte 0x000008ad -_080C3A08: - ldr r0, _080C3A0C @ =0x000008ae - b _080C3AAA - .align 2, 0 -_080C3A0C: .4byte 0x000008ae -_080C3A10: - ldr r0, _080C3A14 @ =0x000008af - b _080C3AAA - .align 2, 0 -_080C3A14: .4byte 0x000008af -_080C3A18: - movs r0, 0x8B - lsls r0, 4 - b _080C3AAA -_080C3A1E: - ldr r0, _080C3A24 @ =0x000008b1 - b _080C3AAA - .align 2, 0 -_080C3A24: .4byte 0x000008b1 -_080C3A28: - ldr r0, _080C3A2C @ =0x000008b2 - b _080C3AAA - .align 2, 0 -_080C3A2C: .4byte 0x000008b2 -_080C3A30: - ldr r0, _080C3A34 @ =0x000008b3 - b _080C3AAA - .align 2, 0 -_080C3A34: .4byte 0x000008b3 -_080C3A38: - ldr r0, _080C3A3C @ =0x000008b4 - b _080C3AAA - .align 2, 0 -_080C3A3C: .4byte 0x000008b4 -_080C3A40: - ldr r0, _080C3A44 @ =0x000008b5 - b _080C3AAA - .align 2, 0 -_080C3A44: .4byte 0x000008b5 -_080C3A48: - ldr r0, _080C3A4C @ =0x000008b6 - b _080C3AAA - .align 2, 0 -_080C3A4C: .4byte 0x000008b6 -_080C3A50: - ldr r0, _080C3A54 @ =0x000008b7 - b _080C3AAA - .align 2, 0 -_080C3A54: .4byte 0x000008b7 -_080C3A58: - ldr r0, _080C3A5C @ =0x000008b8 - b _080C3AAA - .align 2, 0 -_080C3A5C: .4byte 0x000008b8 -_080C3A60: - ldr r0, _080C3A64 @ =0x000008b9 - b _080C3AAA - .align 2, 0 -_080C3A64: .4byte 0x000008b9 -_080C3A68: - ldr r0, _080C3A6C @ =0x000008ba - b _080C3AAA - .align 2, 0 -_080C3A6C: .4byte 0x000008ba -_080C3A70: - ldr r0, _080C3A74 @ =0x000008bb - b _080C3AAA - .align 2, 0 -_080C3A74: .4byte 0x000008bb -_080C3A78: - ldr r0, _080C3A7C @ =0x000008bc - b _080C3AAA - .align 2, 0 -_080C3A7C: .4byte 0x000008bc -_080C3A80: - ldr r0, _080C3A84 @ =0x000008bd - b _080C3AAA - .align 2, 0 -_080C3A84: .4byte 0x000008bd -_080C3A88: - ldr r0, _080C3A8C @ =0x000008be - b _080C3AAA - .align 2, 0 -_080C3A8C: .4byte 0x000008be -_080C3A90: - ldr r0, _080C3A94 @ =0x000008bf - b _080C3AAA - .align 2, 0 -_080C3A94: .4byte 0x000008bf -_080C3A98: - movs r0, 0x8C - lsls r0, 4 - b _080C3AAA -_080C3A9E: - ldr r0, _080C3AA4 @ =0x000008c1 - b _080C3AAA - .align 2, 0 -_080C3AA4: .4byte 0x000008c1 -_080C3AA8: - ldr r0, _080C3ABC @ =0x000008c2 -_080C3AAA: - bl FlagGet - lsls r0, 24 - movs r1, 0x3 - cmp r0, 0 - beq _080C3AB8 - movs r1, 0x2 -_080C3AB8: - adds r0, r1, 0 - b _080C3AC2 - .align 2, 0 -_080C3ABC: .4byte 0x000008c2 -_080C3AC0: - movs r0, 0x1 -_080C3AC2: - pop {r1} - bx r1 - thumb_func_end sub_80C3878 - thumb_func_start sub_80C3AC8 sub_80C3AC8: @ 80C3AC8 push {lr} diff --git a/src/region_map.c b/src/region_map.c index e8252065e..c07ebcfb0 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -2314,3 +2314,129 @@ u16 sub_80C3580(void) ret = MAPSEC_NONE; return ret; } + +u8 sub_80C35DC(u8 mapsec) +{ + switch (mapsec) + { + case MAPSEC_PALLET_TOWN: + return FlagGet(FLAG_WORLD_MAP_PALLET_TOWN) ? 2 : 3; + case MAPSEC_VIRIDIAN_CITY: + return FlagGet(FLAG_WORLD_MAP_VIRIDIAN_CITY) ? 2 : 3; + case MAPSEC_PEWTER_CITY: + return FlagGet(FLAG_WORLD_MAP_PEWTER_CITY) ? 2 : 3; + case MAPSEC_CERULEAN_CITY: + return FlagGet(FLAG_WORLD_MAP_CERULEAN_CITY) ? 2 : 3; + case MAPSEC_LAVENDER_TOWN: + return FlagGet(FLAG_WORLD_MAP_LAVENDER_TOWN) ? 2 : 3; + case MAPSEC_VERMILION_CITY: + return FlagGet(FLAG_WORLD_MAP_VERMILION_CITY) ? 2 : 3; + case MAPSEC_CELADON_CITY: + return FlagGet(FLAG_WORLD_MAP_CELADON_CITY) ? 2 : 3; + case MAPSEC_FUCHSIA_CITY: + return FlagGet(FLAG_WORLD_MAP_FUCHSIA_CITY) ? 2 : 3; + case MAPSEC_CINNABAR_ISLAND: + return FlagGet(FLAG_WORLD_MAP_CINNABAR_ISLAND) ? 2 : 3; + case MAPSEC_INDIGO_PLATEAU: + return FlagGet(FLAG_WORLD_MAP_INDIGO_PLATEAU_EXTERIOR) ? 2 : 3; + case MAPSEC_SAFFRON_CITY: + return FlagGet(FLAG_WORLD_MAP_SAFFRON_CITY) ? 2 : 3; + case MAPSEC_ONE_ISLAND: + return FlagGet(FLAG_WORLD_MAP_ONE_ISLAND) ? 2 : 3; + case MAPSEC_TWO_ISLAND: + return FlagGet(FLAG_WORLD_MAP_TWO_ISLAND) ? 2 : 3; + case MAPSEC_THREE_ISLAND: + return FlagGet(FLAG_WORLD_MAP_THREE_ISLAND) ? 2 : 3; + case MAPSEC_FOUR_ISLAND: + return FlagGet(FLAG_WORLD_MAP_FOUR_ISLAND) ? 2 : 3; + case MAPSEC_FIVE_ISLAND: + return FlagGet(FLAG_WORLD_MAP_FIVE_ISLAND) ? 2 : 3; + case MAPSEC_SEVEN_ISLAND: + return FlagGet(FLAG_WORLD_MAP_SEVEN_ISLAND) ? 2 : 3; + case MAPSEC_SIX_ISLAND: + return FlagGet(FLAG_WORLD_MAP_SIX_ISLAND) ? 2 : 3; + case MAPSEC_ROUTE_4_FLYDUP: + if (!sub_80C0E04(3)) + return 0; + return FlagGet(FLAG_WORLD_MAP_ROUTE4_POKEMON_CENTER_1F) ? 2 : 3; + case MAPSEC_ROUTE_10_FLYDUP: + return FlagGet(FLAG_WORLD_MAP_ROUTE10_POKEMON_CENTER_1F) ? 2 : 3; + case MAPSEC_NONE: + return 0; + default: + return 1; + } +} + +u8 sub_80C3878(u8 mapsec) +{ + switch (mapsec) + { + case MAPSEC_NONE: + return 0; + case MAPSEC_VIRIDIAN_FOREST: + return FlagGet(FLAG_WORLD_MAP_VIRIDIAN_FOREST) ? 2 : 3; + case MAPSEC_MT_MOON: + return FlagGet(FLAG_WORLD_MAP_MT_MOON_1F) ? 2 : 3; + case MAPSEC_S_S_ANNE: + return FlagGet(FLAG_WORLD_MAP_SSANNE_EXTERIOR) ? 2 : 3; + case MAPSEC_UNDERGROUND_PATH: + return FlagGet(FLAG_WORLD_MAP_UNDERGROUND_PATH_NORTH_SOUTH_TUNNEL) ? 2 : 3; + case MAPSEC_UNDERGROUND_PATH_2: + return FlagGet(FLAG_WORLD_MAP_UNDERGROUND_PATH_EAST_WEST_TUNNEL) ? 2 : 3; + case MAPSEC_DIGLETTS_CAVE: + return FlagGet(FLAG_WORLD_MAP_DIGLETTS_CAVE_B1F) ? 2 : 3; + case MAPSEC_KANTO_VICTORY_ROAD: + return FlagGet(FLAG_WORLD_MAP_VICTORY_ROAD_1F) ? 2 : 3; + case MAPSEC_ROCKET_HIDEOUT: + return FlagGet(FLAG_WORLD_MAP_ROCKET_HIDEOUT_B1F) ? 2 : 3; + case MAPSEC_SILPH_CO: + return FlagGet(FLAG_WORLD_MAP_SILPH_CO_1F) ? 2 : 3; + case MAPSEC_POKEMON_MANSION: + return FlagGet(FLAG_WORLD_MAP_POKEMON_MANSION_1F) ? 2 : 3; + case MAPSEC_KANTO_SAFARI_ZONE: + return FlagGet(FLAG_WORLD_MAP_SAFARI_ZONE_CENTER) ? 2 : 3; + case MAPSEC_POKEMON_LEAGUE: + return FlagGet(FLAG_WORLD_MAP_POKEMON_LEAGUE_LORELEIS_ROOM) ? 2 : 3; + case MAPSEC_ROCK_TUNNEL: + return FlagGet(FLAG_WORLD_MAP_ROCK_TUNNEL_1F) ? 2 : 3; + case MAPSEC_SEAFOAM_ISLANDS: + return FlagGet(FLAG_WORLD_MAP_SEAFOAM_ISLANDS_1F) ? 2 : 3; + case MAPSEC_POKEMON_TOWER: + return FlagGet(FLAG_WORLD_MAP_POKEMON_TOWER_1F) ? 2 : 3; + case MAPSEC_CERULEAN_CAVE: + return FlagGet(FLAG_WORLD_MAP_CERULEAN_CAVE_1F) ? 2 : 3; + case MAPSEC_POWER_PLANT: + return FlagGet(FLAG_WORLD_MAP_POWER_PLANT) ? 2 : 3; + case MAPSEC_NAVEL_ROCK: + return FlagGet(FLAG_WORLD_MAP_NAVEL_ROCK_EXTERIOR) ? 2 : 3; + case MAPSEC_MT_EMBER: + return FlagGet(FLAG_WORLD_MAP_MT_EMBER_EXTERIOR) ? 2 : 3; + case MAPSEC_BERRY_FOREST: + return FlagGet(FLAG_WORLD_MAP_THREE_ISLAND_BERRY_FOREST) ? 2 : 3; + case MAPSEC_ICEFALL_CAVE: + return FlagGet(FLAG_WORLD_MAP_FOUR_ISLAND_ICEFALL_CAVE_ENTRANCE) ? 2 : 3; + case MAPSEC_ROCKET_WAREHOUSE: + return FlagGet(FLAG_WORLD_MAP_FIVE_ISLAND_ROCKET_WAREHOUSE) ? 2 : 3; + case MAPSEC_TRAINER_TOWER_2: + return FlagGet(FLAG_WORLD_MAP_SEVEN_ISLAND_TRAINER_TOWER_LOBBY) ? 2 : 3; + case MAPSEC_DOTTED_HOLE: + return FlagGet(FLAG_WORLD_MAP_SIX_ISLAND_DOTTED_HOLE_1F) ? 2 : 3; + case MAPSEC_LOST_CAVE: + return FlagGet(FLAG_WORLD_MAP_FIVE_ISLAND_LOST_CAVE_ENTRANCE) ? 2 : 3; + case MAPSEC_PATTERN_BUSH: + return FlagGet(FLAG_WORLD_MAP_SIX_ISLAND_PATTERN_BUSH) ? 2 : 3; + case MAPSEC_ALTERING_CAVE: + return FlagGet(FLAG_WORLD_MAP_SIX_ISLAND_ALTERING_CAVE) ? 2 : 3; + case MAPSEC_TANOBY_CHAMBERS: + return FlagGet(FLAG_WORLD_MAP_SEVEN_ISLAND_TANOBY_RUINS_MONEAN_CHAMBER) ? 2 : 3; + case MAPSEC_THREE_ISLE_PATH: + return FlagGet(FLAG_WORLD_MAP_THREE_ISLAND_DUNSPARCE_TUNNEL) ? 2 : 3; + case MAPSEC_TANOBY_KEY: + return FlagGet(FLAG_WORLD_MAP_SEVEN_ISLAND_SEVAULT_CANYON_TANOBY_KEY) ? 2 : 3; + case MAPSEC_BIRTH_ISLAND: + return FlagGet(FLAG_WORLD_MAP_BIRTH_ISLAND_EXTERIOR) ? 2 : 3; + default: + return 1; + } +} -- cgit v1.2.3 From 268cf6626f4a79ea612cde6e60f4605bf1886cf4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 7 Jan 2020 11:23:31 -0500 Subject: through sub_80C3B28 --- asm/region_map.s | 310 ------------------------------------------------------- src/region_map.c | 98 ++++++++++++++++++ 2 files changed, 98 insertions(+), 310 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index b08e56f6c..85735a08b 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,316 +5,6 @@ .text - thumb_func_start sub_80C3AC8 -sub_80C3AC8: @ 80C3AC8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _080C3AE4 - cmp r0, 0x1 - beq _080C3AF0 - ldr r0, _080C3AE0 @ =gUnknown_20399E4 - ldr r0, [r0] - ldrb r0, [r0, 0x16] - b _080C3AF6 - .align 2, 0 -_080C3AE0: .4byte gUnknown_20399E4 -_080C3AE4: - ldr r0, _080C3AEC @ =gUnknown_20399E4 - ldr r0, [r0] - ldrb r0, [r0, 0x16] - b _080C3AF6 - .align 2, 0 -_080C3AEC: .4byte gUnknown_20399E4 -_080C3AF0: - ldr r0, _080C3AFC @ =gUnknown_20399E4 - ldr r0, [r0] - ldrb r0, [r0, 0x18] -_080C3AF6: - pop {r1} - bx r1 - .align 2, 0 -_080C3AFC: .4byte gUnknown_20399E4 - thumb_func_end sub_80C3AC8 - - thumb_func_start sub_80C3B00 -sub_80C3B00: @ 80C3B00 - push {lr} - ldr r0, _080C3B24 @ =gSaveBlock1Ptr - ldr r1, [r0] - movs r0, 0x4 - ldrsb r0, [r1, r0] - lsls r0, 16 - lsrs r0, 16 - ldrb r1, [r1, 0x5] - lsls r1, 24 - asrs r1, 24 - lsls r1, 16 - lsrs r1, 16 - bl Overworld_GetMapHeaderByGroupAndId - ldrb r0, [r0, 0x14] - pop {r1} - bx r1 - .align 2, 0 -_080C3B24: .4byte gSaveBlock1Ptr - thumb_func_end sub_80C3B00 - - thumb_func_start sub_80C3B28 -sub_80C3B28: @ 80C3B28 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r0, _080C3B58 @ =gSaveBlock1Ptr - ldr r1, [r0] - movs r0, 0x4 - ldrsb r0, [r1, r0] - ldrb r1, [r1, 0x5] - lsls r1, 24 - asrs r1, 24 - bl get_map_light_level_by_bank_and_number - lsls r0, 24 - lsrs r0, 24 - subs r0, 0x1 - cmp r0, 0x8 - bhi _080C3B84 - lsls r0, 2 - ldr r1, _080C3B5C @ =_080C3B60 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C3B58: .4byte gSaveBlock1Ptr -_080C3B5C: .4byte _080C3B60 - .align 2, 0 -_080C3B60: - .4byte _080C3B84 - .4byte _080C3B84 - .4byte _080C3B84 - .4byte _080C3BAC - .4byte _080C3B84 - .4byte _080C3B84 - .4byte _080C3BAC - .4byte _080C3C2C - .4byte _080C3BF0 -_080C3B84: - ldr r0, _080C3BA0 @ =gUnknown_20399E4 - ldr r2, [r0] - ldr r1, _080C3BA4 @ =gMapHeader - ldrb r0, [r1, 0x14] - strh r0, [r2, 0x14] - ldr r0, [r1] - ldrh r1, [r0] - ldrh r0, [r0, 0x4] - mov r8, r0 - ldr r0, _080C3BA8 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldrh r4, [r0] - ldrh r5, [r0, 0x2] - b _080C3C9A - .align 2, 0 -_080C3BA0: .4byte gUnknown_20399E4 -_080C3BA4: .4byte gMapHeader -_080C3BA8: .4byte gSaveBlock1Ptr -_080C3BAC: - ldr r4, _080C3BE8 @ =gSaveBlock1Ptr - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x24 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - lsls r0, 16 - lsrs r0, 16 - adds r1, 0x25 - ldrb r1, [r1] - lsls r1, 24 - asrs r1, 24 - lsls r1, 16 - lsrs r1, 16 - bl Overworld_GetMapHeaderByGroupAndId - adds r2, r0, 0 - ldr r0, _080C3BEC @ =gUnknown_20399E4 - ldr r1, [r0] - ldrb r0, [r2, 0x14] - strh r0, [r1, 0x14] - ldr r0, [r2] - ldrh r1, [r0] - ldrh r0, [r0, 0x4] - mov r8, r0 - ldr r0, [r4] - ldrh r4, [r0, 0x28] - ldrh r5, [r0, 0x2A] - b _080C3C9A - .align 2, 0 -_080C3BE8: .4byte gSaveBlock1Ptr -_080C3BEC: .4byte gUnknown_20399E4 -_080C3BF0: - ldr r4, _080C3C24 @ =gSaveBlock1Ptr - ldr r1, [r4] - movs r0, 0x14 - ldrsb r0, [r1, r0] - lsls r0, 16 - lsrs r0, 16 - ldrb r1, [r1, 0x15] - lsls r1, 24 - asrs r1, 24 - lsls r1, 16 - lsrs r1, 16 - bl Overworld_GetMapHeaderByGroupAndId - adds r2, r0, 0 - ldr r0, _080C3C28 @ =gUnknown_20399E4 - ldr r1, [r0] - ldrb r0, [r2, 0x14] - strh r0, [r1, 0x14] - ldr r0, [r2] - ldrh r1, [r0] - ldrh r0, [r0, 0x4] - mov r8, r0 - ldr r0, [r4] - ldrh r4, [r0, 0x18] - ldrh r5, [r0, 0x1A] - b _080C3C9A - .align 2, 0 -_080C3C24: .4byte gSaveBlock1Ptr -_080C3C28: .4byte gUnknown_20399E4 -_080C3C2C: - ldr r4, _080C3C5C @ =gUnknown_20399E4 - ldr r0, [r4] - ldr r1, _080C3C60 @ =gMapHeader - ldrb r1, [r1, 0x14] - strh r1, [r0, 0x14] - cmp r1, 0xC4 - beq _080C3C68 - ldr r0, _080C3C64 @ =gSaveBlock1Ptr - ldr r0, [r0] - adds r5, r0, 0 - adds r5, 0x24 - movs r0, 0 - ldrsb r0, [r5, r0] - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - ldrsb r1, [r5, r1] - lsls r1, 16 - lsrs r1, 16 - bl Overworld_GetMapHeaderByGroupAndId - adds r2, r0, 0 - b _080C3C8E - .align 2, 0 -_080C3C5C: .4byte gUnknown_20399E4 -_080C3C60: .4byte gMapHeader -_080C3C64: .4byte gSaveBlock1Ptr -_080C3C68: - ldr r0, _080C3D30 @ =gSaveBlock1Ptr - ldr r0, [r0] - adds r5, r0, 0 - adds r5, 0x14 - ldrb r0, [r0, 0x14] - lsls r0, 24 - asrs r0, 24 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - ldrsb r1, [r5, r1] - lsls r1, 16 - lsrs r1, 16 - bl Overworld_GetMapHeaderByGroupAndId - adds r2, r0, 0 - ldr r1, [r4] - ldrb r0, [r2, 0x14] - strh r0, [r1, 0x14] -_080C3C8E: - ldr r0, [r2] - ldrh r1, [r0] - ldrh r0, [r0, 0x4] - mov r8, r0 - ldrh r4, [r5, 0x4] - ldrh r5, [r5, 0x6] -_080C3C9A: - ldr r0, _080C3D34 @ =gUnknown_20399E4 - ldr r7, [r0] - ldrh r0, [r7, 0x14] - subs r0, 0x58 - strh r0, [r7, 0x14] - ldr r0, _080C3D38 @ =gUnknown_83F2178 - mov r10, r0 - ldrh r0, [r7, 0x14] - lsls r0, 2 - mov r9, r0 - add r0, r10 - ldrh r6, [r0] - adds r0, r1, 0 - adds r1, r6, 0 - bl __udivsi3 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _080C3CC4 - movs r1, 0x1 -_080C3CC4: - adds r0, r4, 0 - bl __udivsi3 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, r6 - bcc _080C3CD8 - subs r0, r6, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 -_080C3CD8: - mov r0, r10 - adds r0, 0x2 - add r0, r9 - ldrh r6, [r0] - mov r0, r8 - adds r1, r6, 0 - bl __udivsi3 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _080C3CF2 - movs r1, 0x1 -_080C3CF2: - adds r0, r5, 0 - bl __udivsi3 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, r6 - bcc _080C3D06 - subs r0, r6, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 -_080C3D06: - ldr r1, _080C3D3C @ =gUnknown_83F1E60 - mov r2, r9 - adds r0, r2, r1 - ldrh r0, [r0] - adds r0, r4, r0 - strh r0, [r7] - ldrh r0, [r7, 0x14] - lsls r0, 2 - adds r1, 0x2 - adds r0, r1 - ldrh r0, [r0] - adds r0, r5, r0 - strh r0, [r7, 0x2] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C3D30: .4byte gSaveBlock1Ptr -_080C3D34: .4byte gUnknown_20399E4 -_080C3D38: .4byte gUnknown_83F2178 -_080C3D3C: .4byte gUnknown_83F1E60 - thumb_func_end sub_80C3B28 - thumb_func_start sub_80C3D40 sub_80C3D40: @ 80C3D40 push {r4,r5,lr} diff --git a/src/region_map.c b/src/region_map.c index c07ebcfb0..c380319dc 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -310,6 +310,8 @@ extern const struct UnkStruct_80C4CF0 gUnknown_83F1C34; extern const struct OamData gUnknown_83F1C3C; extern const union AnimCmd *const gUnknown_83F1C50[]; extern const u8 *const gUnknown_83F1CAC[]; +extern const u16 gUnknown_83F1E60[][2]; +extern const u16 gUnknown_83F2178[][2]; static void RegionMap_DarkenPalette(u16 *pal, u16 size, u16 tint) { @@ -2440,3 +2442,99 @@ u8 sub_80C3878(u8 mapsec) return 1; } } + +u8 sub_80C3AC8(u8 a0) +{ + switch (a0) + { + default: + return gUnknown_20399E4->field_016; + case 0: + return gUnknown_20399E4->field_016; + case 1: + return gUnknown_20399E4->field_018; + } +} + +u8 sub_80C3B00(void) +{ + return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum)->regionMapSectionId; +} + +void sub_80C3B28(void) +{ + u16 width; + u32 divisor; + u16 height; + u16 x; + u16 y; + u32 r6; + const struct MapHeader * mapHeader; + struct WarpData * warp; + + switch (get_map_light_level_by_bank_and_number(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum)) + { + default: + case 1: + case 2: + case 3: + case 5: + case 6: + gUnknown_20399E4->field_014 = gMapHeader.regionMapSectionId; + width = gMapHeader.mapLayout->width; + height = gMapHeader.mapLayout->height; + x = gSaveBlock1Ptr->pos.x; + y = gSaveBlock1Ptr->pos.y; + break; + case 4: + case 7: + mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->escapeWarp.mapGroup, gSaveBlock1Ptr->escapeWarp.mapNum); + gUnknown_20399E4->field_014 = mapHeader->regionMapSectionId; + width = mapHeader->mapLayout->width; + height = mapHeader->mapLayout->height; + x = gSaveBlock1Ptr->escapeWarp.x; + y = gSaveBlock1Ptr->escapeWarp.y; + break; + case 9: + mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->warp2.mapGroup, gSaveBlock1Ptr->warp2.mapNum); + gUnknown_20399E4->field_014 = mapHeader->regionMapSectionId; + width = mapHeader->mapLayout->width; + height = mapHeader->mapLayout->height; + x = gSaveBlock1Ptr->warp2.x; + y = gSaveBlock1Ptr->warp2.y; + break; + case 8: + if ((gUnknown_20399E4->field_014 = gMapHeader.regionMapSectionId) != MAPSEC_SPECIAL_AREA) + { + warp = &gSaveBlock1Ptr->escapeWarp; + mapHeader = Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum); + } + else + { + warp = &gSaveBlock1Ptr->warp2; + mapHeader = Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum); + gUnknown_20399E4->field_014 = mapHeader->regionMapSectionId; + } + width = mapHeader->mapLayout->width; + height = mapHeader->mapLayout->height; + x = warp->x; + y = warp->y; + break; + } + + gUnknown_20399E4->field_014 -= MAPSECS_KANTO; + divisor = width / gUnknown_83F2178[gUnknown_20399E4->field_014][0]; + if (divisor == 0) + divisor = 1; + x /= divisor; + if (x >= gUnknown_83F2178[gUnknown_20399E4->field_014][0]) + x = gUnknown_83F2178[gUnknown_20399E4->field_014][0] - 1; + divisor = height / gUnknown_83F2178[gUnknown_20399E4->field_014][1]; + if (divisor == 0) + divisor = 1; + y /= divisor; + if (y >= gUnknown_83F2178[gUnknown_20399E4->field_014][1]) + y = gUnknown_83F2178[gUnknown_20399E4->field_014][1] - 1; + gUnknown_20399E4->field_000 = x + gUnknown_83F1E60[gUnknown_20399E4->field_014][0]; + gUnknown_20399E4->field_002 = y + gUnknown_83F1E60[gUnknown_20399E4->field_014][1]; +} -- cgit v1.2.3 From e34c1fd3d6177faba453818b3fc502f88f7215c4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 7 Jan 2020 12:01:00 -0500 Subject: sub_80C3D40 --- asm/region_map.s | 460 ------------------------------------------------------- src/region_map.c | 183 +++++++++++++++++++++- 2 files changed, 182 insertions(+), 461 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index 85735a08b..a91d4bd7e 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,466 +5,6 @@ .text - thumb_func_start sub_80C3D40 -sub_80C3D40: @ 80C3D40 - push {r4,r5,lr} - bl sub_80C3B00 - lsls r0, 16 - lsrs r0, 16 - subs r0, 0x66 - cmp r0, 0x5C - bls _080C3D52 - b _080C4132 -_080C3D52: - lsls r0, 2 - ldr r1, _080C3D5C @ =_080C3D60 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C3D5C: .4byte _080C3D60 - .align 2, 0 -_080C3D60: - .4byte _080C4034 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C40A0 - .4byte _080C40C4 - .4byte _080C40E8 - .4byte _080C4108 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4064 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4028 - .4byte _080C4132 - .4byte _080C3F24 - .4byte _080C3F50 - .4byte _080C3F78 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C3F44 - .4byte _080C3EE4 - .4byte _080C3EF0 - .4byte _080C3ED4 - .4byte _080C3F38 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C3F04 - .4byte _080C4132 - .4byte _080C3F10 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C3FB0 - .4byte _080C3FC8 - .4byte _080C3FD4 - .4byte _080C4132 - .4byte _080C3FF4 - .4byte _080C3FBC - .4byte _080C4014 - .4byte _080C4132 - .4byte _080C3FE0 - .4byte _080C4132 - .4byte _080C4008 - .4byte _080C4132 - .4byte _080C4132 - .4byte _080C3FA4 - .4byte _080C4008 - .4byte _080C4008 - .4byte _080C4008 - .4byte _080C4008 - .4byte _080C4008 - .4byte _080C4008 - .4byte _080C4008 -_080C3ED4: - ldr r0, _080C3EE0 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0xC - strh r0, [r1] - strh r0, [r1, 0x2] - b _080C4136 - .align 2, 0 -_080C3EE0: .4byte gUnknown_20399E4 -_080C3EE4: - ldr r0, _080C3EEC @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0xE - b _080C411C - .align 2, 0 -_080C3EEC: .4byte gUnknown_20399E4 -_080C3EF0: - ldr r0, _080C3F00 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0x4 - strh r0, [r1] - movs r0, 0xE - strh r0, [r1, 0x2] - b _080C4136 - .align 2, 0 -_080C3F00: .4byte gUnknown_20399E4 -_080C3F04: - ldr r0, _080C3F0C @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0x12 - b _080C411C - .align 2, 0 -_080C3F0C: .4byte gUnknown_20399E4 -_080C3F10: - ldr r0, _080C3F20 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0x12 - strh r0, [r1] - movs r0, 0x4 - strh r0, [r1, 0x2] - b _080C4136 - .align 2, 0 -_080C3F20: .4byte gUnknown_20399E4 -_080C3F24: - ldr r0, _080C3F34 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0xE - strh r0, [r1] - movs r0, 0x9 - strh r0, [r1, 0x2] - b _080C4136 - .align 2, 0 -_080C3F34: .4byte gUnknown_20399E4 -_080C3F38: - ldr r0, _080C3F40 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0x2 - b _080C3FE6 - .align 2, 0 -_080C3F40: .4byte gUnknown_20399E4 -_080C3F44: - ldr r0, _080C3F4C @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0xB - b _080C411C - .align 2, 0 -_080C3F4C: .4byte gUnknown_20399E4 -_080C3F50: - ldr r0, _080C3F70 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r2, 0xE - strh r2, [r1] - movs r0, 0x7 - strh r0, [r1, 0x2] - ldr r0, _080C3F74 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x5] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x1E - beq _080C3F6C - b _080C4136 -_080C3F6C: - b _080C40B6 - .align 2, 0 -_080C3F70: .4byte gUnknown_20399E4 -_080C3F74: .4byte gSaveBlock1Ptr -_080C3F78: - ldr r0, _080C3F9C @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0xC - strh r0, [r1] - movs r2, 0x6 - strh r2, [r1, 0x2] - ldr r0, _080C3FA0 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x5] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x23 - beq _080C3F94 - b _080C4136 -_080C3F94: - movs r0, 0xF - strh r0, [r1] - b _080C4136 - .align 2, 0 -_080C3F9C: .4byte gUnknown_20399E4 -_080C3FA0: .4byte gSaveBlock1Ptr -_080C3FA4: - ldr r0, _080C3FAC @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0x12 - b _080C4092 - .align 2, 0 -_080C3FAC: .4byte gUnknown_20399E4 -_080C3FB0: - ldr r0, _080C3FB8 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0xA - b _080C401A - .align 2, 0 -_080C3FB8: .4byte gUnknown_20399E4 -_080C3FBC: - ldr r0, _080C3FC4 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0x5 - b _080C411C - .align 2, 0 -_080C3FC4: .4byte gUnknown_20399E4 -_080C3FC8: - ldr r0, _080C3FD0 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0x2 - b _080C3FE6 - .align 2, 0 -_080C3FD0: .4byte gUnknown_20399E4 -_080C3FD4: - ldr r0, _080C3FDC @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0xE - b _080C4078 - .align 2, 0 -_080C3FDC: .4byte gUnknown_20399E4 -_080C3FE0: - ldr r0, _080C3FF0 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0x11 -_080C3FE6: - strh r0, [r1] - movs r0, 0x3 - strh r0, [r1, 0x2] - b _080C4136 - .align 2, 0 -_080C3FF0: .4byte gUnknown_20399E4 -_080C3FF4: - ldr r0, _080C4004 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0x11 - strh r0, [r1] - movs r0, 0xB - strh r0, [r1, 0x2] - b _080C4136 - .align 2, 0 -_080C4004: .4byte gUnknown_20399E4 -_080C4008: - ldr r0, _080C4010 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0x9 - b _080C4078 - .align 2, 0 -_080C4010: .4byte gUnknown_20399E4 -_080C4014: - ldr r0, _080C4024 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0x10 -_080C401A: - strh r0, [r1] - movs r0, 0x8 - strh r0, [r1, 0x2] - b _080C4136 - .align 2, 0 -_080C4024: .4byte gUnknown_20399E4 -_080C4028: - ldr r0, _080C4030 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0x4 - b _080C411C - .align 2, 0 -_080C4030: .4byte gUnknown_20399E4 -_080C4034: - ldr r0, _080C404C @ =gSaveBlock1Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x5] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0 - bne _080C4054 - ldr r0, _080C4050 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0x4 - b _080C40D8 - .align 2, 0 -_080C404C: .4byte gSaveBlock1Ptr -_080C4050: .4byte gUnknown_20399E4 -_080C4054: - cmp r0, 0x3 - bne _080C412C - ldr r0, _080C4060 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0x4 - b _080C40B4 - .align 2, 0 -_080C4060: .4byte gUnknown_20399E4 -_080C4064: - ldr r0, _080C4080 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x5] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x27 - bne _080C4088 - ldr r0, _080C4084 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0x4 -_080C4078: - strh r0, [r1] - movs r0, 0xC - strh r0, [r1, 0x2] - b _080C4136 - .align 2, 0 -_080C4080: .4byte gSaveBlock1Ptr -_080C4084: .4byte gUnknown_20399E4 -_080C4088: - cmp r0, 0x28 - bne _080C4136 - ldr r0, _080C409C @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0x4 -_080C4092: - strh r0, [r1] - movs r0, 0xD - strh r0, [r1, 0x2] - b _080C4136 - .align 2, 0 -_080C409C: .4byte gUnknown_20399E4 -_080C40A0: - ldr r0, _080C40BC @ =gSaveBlock1Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x5] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x1 - bne _080C412C - ldr r0, _080C40C0 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0xE -_080C40B4: - strh r0, [r1] -_080C40B6: - movs r0, 0x5 - strh r0, [r1, 0x2] - b _080C4136 - .align 2, 0 -_080C40BC: .4byte gSaveBlock1Ptr -_080C40C0: .4byte gUnknown_20399E4 -_080C40C4: - ldr r0, _080C40E0 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x5] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0 - bne _080C412C - ldr r0, _080C40E4 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0xE -_080C40D8: - strh r0, [r1] - movs r0, 0x7 - strh r0, [r1, 0x2] - b _080C4136 - .align 2, 0 -_080C40E0: .4byte gSaveBlock1Ptr -_080C40E4: .4byte gUnknown_20399E4 -_080C40E8: - ldr r0, _080C4100 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x5] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0 - bne _080C412C - ldr r0, _080C4104 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0xD - b _080C411C - .align 2, 0 -_080C4100: .4byte gSaveBlock1Ptr -_080C4104: .4byte gUnknown_20399E4 -_080C4108: - ldr r0, _080C4124 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x5] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0 - bne _080C412C - ldr r0, _080C4128 @ =gUnknown_20399E4 - ldr r1, [r0] - movs r0, 0xF -_080C411C: - strh r0, [r1] - movs r0, 0x6 - strh r0, [r1, 0x2] - b _080C4136 - .align 2, 0 -_080C4124: .4byte gSaveBlock1Ptr -_080C4128: .4byte gUnknown_20399E4 -_080C412C: - bl sub_80C3B28 - b _080C4136 -_080C4132: - bl sub_80C3B28 -_080C4136: - bl sub_80C0E20 - lsls r0, 24 - lsrs r0, 24 - ldr r4, _080C4160 @ =gUnknown_20399E4 - ldr r1, [r4] - movs r3, 0x2 - ldrsh r2, [r1, r3] - movs r5, 0 - ldrsh r3, [r1, r5] - movs r1, 0 - bl sub_80C4164 - ldr r1, [r4] - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x14] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C4160: .4byte gUnknown_20399E4 - thumb_func_end sub_80C3D40 - thumb_func_start sub_80C4164 sub_80C4164: @ 80C4164 push {r4,r5,lr} diff --git a/src/region_map.c b/src/region_map.c index c380319dc..40dbadf0e 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -18,6 +18,7 @@ #include "constants/flags.h" #include "constants/songs.h" #include "constants/region_map.h" +#include "constants/maps.h" #define FREE_IF_NOT_NULL(ptr) ({ \ if (ptr) { \ @@ -2456,7 +2457,7 @@ u8 sub_80C3AC8(u8 a0) } } -u8 sub_80C3B00(void) +u16 sub_80C3B00(void) { return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum)->regionMapSectionId; } @@ -2538,3 +2539,183 @@ void sub_80C3B28(void) gUnknown_20399E4->field_000 = x + gUnknown_83F1E60[gUnknown_20399E4->field_014][0]; gUnknown_20399E4->field_002 = y + gUnknown_83F1E60[gUnknown_20399E4->field_014][1]; } + +void sub_80C3D40(void) +{ + switch (sub_80C3B00()) + { + case MAPSEC_KANTO_SAFARI_ZONE: + gUnknown_20399E4->field_000 = 12; + gUnknown_20399E4->field_002 = 12; + break; + case MAPSEC_SILPH_CO: + gUnknown_20399E4->field_000 = 14; + gUnknown_20399E4->field_002 = 6; + break; + case MAPSEC_POKEMON_MANSION: + gUnknown_20399E4->field_000 = 4; + gUnknown_20399E4->field_002 = 14; + break; + case MAPSEC_POKEMON_TOWER: + gUnknown_20399E4->field_000 = 18; + gUnknown_20399E4->field_002 = 6; + break; + case MAPSEC_POWER_PLANT: + gUnknown_20399E4->field_000 = 18; + gUnknown_20399E4->field_002 = 4; + break; + case MAPSEC_S_S_ANNE: + gUnknown_20399E4->field_000 = 14; + gUnknown_20399E4->field_002 = 9; + break; + case MAPSEC_POKEMON_LEAGUE: + gUnknown_20399E4->field_000 = 2; + gUnknown_20399E4->field_002 = 3; + break; + case MAPSEC_ROCKET_HIDEOUT: + gUnknown_20399E4->field_000 = 11; + gUnknown_20399E4->field_002 = 6; + break; + case MAPSEC_UNDERGROUND_PATH: + gUnknown_20399E4->field_000 = 14; + gUnknown_20399E4->field_002 = 7; + if (gSaveBlock1Ptr->location.mapNum == MAP_NUM(UNDERGROUND_PATH_NORTH_ENTRANCE)) + { + gUnknown_20399E4->field_000 = 14; // optimized out but required to match + gUnknown_20399E4->field_002 = 5; + } + break; + case MAPSEC_UNDERGROUND_PATH_2: + gUnknown_20399E4->field_000 = 12; + gUnknown_20399E4->field_002 = 6; + if (gSaveBlock1Ptr->location.mapNum == MAP_NUM(UNDERGROUND_PATH_EAST_ENTRANCE)) + { + gUnknown_20399E4->field_000 = 15; + gUnknown_20399E4->field_002 = 6; // optimized out but required to match + } + break; + case MAPSEC_BIRTH_ISLAND: + gUnknown_20399E4->field_000 = 18; + gUnknown_20399E4->field_002 = 13; + break; + case MAPSEC_NAVEL_ROCK: + gUnknown_20399E4->field_000 = 10; + gUnknown_20399E4->field_002 = 8; + break; + case MAPSEC_TRAINER_TOWER_2: + gUnknown_20399E4->field_000 = 5; + gUnknown_20399E4->field_002 = 6; + break; + case MAPSEC_MT_EMBER: + gUnknown_20399E4->field_000 = 2; + gUnknown_20399E4->field_002 = 3; + break; + case MAPSEC_BERRY_FOREST: + gUnknown_20399E4->field_000 = 14; + gUnknown_20399E4->field_002 = 12; + break; + case MAPSEC_PATTERN_BUSH: + gUnknown_20399E4->field_000 = 17; + gUnknown_20399E4->field_002 = 3; + break; + case MAPSEC_ROCKET_WAREHOUSE: + gUnknown_20399E4->field_000 = 17; + gUnknown_20399E4->field_002 = 11; + break; + case MAPSEC_DILFORD_CHAMBER: + case MAPSEC_LIPTOO_CHAMBER: + case MAPSEC_MONEAN_CHAMBER: + case MAPSEC_RIXY_CHAMBER: + case MAPSEC_SCUFIB_CHAMBER: + case MAPSEC_TANOBY_CHAMBERS: + case MAPSEC_VIAPOIS_CHAMBER: + case MAPSEC_WEEPTH_CHAMBER: + gUnknown_20399E4->field_000 = 9; + gUnknown_20399E4->field_002 = 12; + break; + case MAPSEC_DOTTED_HOLE: + gUnknown_20399E4->field_000 = 16; + gUnknown_20399E4->field_002 = 8; + break; + case MAPSEC_VIRIDIAN_FOREST: + gUnknown_20399E4->field_000 = 4; + gUnknown_20399E4->field_002 = 6; + break; + case MAPSEC_ROUTE_2: + if (gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN)) + { + gUnknown_20399E4->field_000 = 4; + gUnknown_20399E4->field_002 = 7; + } + else if (gSaveBlock1Ptr->location.mapNum == MAP_NUM(CERULEAN_CITY)) + { + gUnknown_20399E4->field_000 = 4; + gUnknown_20399E4->field_002 = 5; + } + else + { + sub_80C3B28(); + } + break; + case MAPSEC_ROUTE_21: + if (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE21_NORTH)) + { + gUnknown_20399E4->field_000 = 4; + gUnknown_20399E4->field_002 = 12; + } + else if (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE21_SOUTH)) + { + gUnknown_20399E4->field_000 = 4; + gUnknown_20399E4->field_002 = 13; + } + break; + case MAPSEC_ROUTE_5: + if (gSaveBlock1Ptr->location.mapNum == MAP_NUM(VIRIDIAN_CITY)) + { + gUnknown_20399E4->field_000 = 14; + gUnknown_20399E4->field_002 = 5; + } + else + { + sub_80C3B28(); + } + break; + case MAPSEC_ROUTE_6: + if (gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN)) + { + gUnknown_20399E4->field_000 = 14; + gUnknown_20399E4->field_002 = 7; + } + else + { + sub_80C3B28(); + } + break; + case MAPSEC_ROUTE_7: + if (gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN)) + { + gUnknown_20399E4->field_000 = 13; + gUnknown_20399E4->field_002 = 6; + } + else + { + sub_80C3B28(); + } + break; + case MAPSEC_ROUTE_8: + if (gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN)) + { + gUnknown_20399E4->field_000 = 15; + gUnknown_20399E4->field_002 = 6; + } + else + { + sub_80C3B28(); + } + break; + default: + sub_80C3B28(); + break; + } + gUnknown_20399E4->field_014 = sub_80C4164(sub_80C0E20(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); +} -- cgit v1.2.3 From e4d869bfc6aceb8b8e208016f08158a3a89dfd46 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 7 Jan 2020 12:49:19 -0500 Subject: through sub_80C438C --- asm/region_map.s | 293 ------------------------------------------------------- src/region_map.c | 132 ++++++++++++++++++++++--- 2 files changed, 121 insertions(+), 304 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index a91d4bd7e..ac9ceeefd 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,299 +5,6 @@ .text - thumb_func_start sub_80C4164 -sub_80C4164: @ 80C4164 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - lsls r1, 24 - lsrs r4, r1, 24 - lsls r2, 16 - lsrs r2, 16 - lsls r3, 16 - lsrs r1, r3, 16 - cmp r0, 0x1 - beq _080C4198 - cmp r0, 0x1 - bgt _080C4186 - cmp r0, 0 - beq _080C4190 - b _080C41D0 -_080C4186: - cmp r5, 0x2 - beq _080C41A0 - cmp r5, 0x3 - beq _080C41A8 - b _080C41D0 -_080C4190: - ldr r3, _080C4194 @ =gUnknown_83F2490 - b _080C41AA - .align 2, 0 -_080C4194: .4byte gUnknown_83F2490 -_080C4198: - ldr r3, _080C419C @ =gUnknown_83F2724 - b _080C41AA - .align 2, 0 -_080C419C: .4byte gUnknown_83F2724 -_080C41A0: - ldr r3, _080C41A4 @ =gUnknown_83F29B8 - b _080C41AA - .align 2, 0 -_080C41A4: .4byte gUnknown_83F29B8 -_080C41A8: - ldr r3, _080C41CC @ =gUnknown_83F2C4C -_080C41AA: - lsls r1, 16 - asrs r1, 16 - lsls r0, r2, 16 - asrs r0, 16 - movs r2, 0x16 - muls r0, r2 - adds r1, r0 - lsls r0, r4, 2 - adds r0, r4 - lsls r2, r0, 5 - adds r0, r2 - lsls r0, 1 - adds r1, r0 - adds r1, r3 - ldrb r0, [r1] - b _080C41D2 - .align 2, 0 -_080C41CC: .4byte gUnknown_83F2C4C -_080C41D0: - movs r0, 0xC5 -_080C41D2: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80C4164 - - thumb_func_start sub_80C41D8 -sub_80C41D8: @ 80C41D8 - push {r4-r6,lr} - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 16 - lsrs r5, r1, 16 - ldr r4, _080C4204 @ =gUnknown_20399E8 - movs r0, 0x8C - bl AllocZeroed - adds r1, r0, 0 - str r1, [r4] - ldr r0, _080C4208 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x8] - cmp r0, 0x1 - bne _080C4210 - ldr r0, _080C420C @ =gUnknown_83EF59C - adds r1, 0xC - bl LZ77UnCompWram - b _080C4218 - .align 2, 0 -_080C4204: .4byte gUnknown_20399E8 -_080C4208: .4byte gSaveBlock2Ptr -_080C420C: .4byte gUnknown_83EF59C -_080C4210: - ldr r0, _080C423C @ =gUnknown_83EF524 - adds r1, 0xC - bl LZ77UnCompWram -_080C4218: - ldr r4, _080C4240 @ =gUnknown_20399E8 - ldr r0, [r4] - strh r6, [r0, 0x8] - strh r5, [r0, 0xA] - bl sub_80C3508 - ldr r1, [r4] - strh r0, [r1] - bl sub_80C3514 - ldr r1, [r4] - strh r0, [r1, 0x2] - bl sub_80C4244 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C423C: .4byte gUnknown_83EF524 -_080C4240: .4byte gUnknown_20399E8 - thumb_func_end sub_80C41D8 - - thumb_func_start sub_80C4244 -sub_80C4244: @ 80C4244 - push {r4-r6,lr} - sub sp, 0x40 - ldr r6, _080C42FC @ =gUnknown_20399E8 - ldr r2, [r6] - adds r0, r2, 0 - adds r0, 0xC - str r0, [sp, 0x30] - movs r1, 0x80 - add r5, sp, 0x30 - str r1, [r5, 0x4] - ldrh r0, [r2, 0x8] - lsls r0, 16 - orrs r0, r1 - str r0, [r5, 0x4] - ldr r0, _080C4300 @ =gUnknown_83EF27C - str r0, [sp, 0x38] - ldrh r3, [r2, 0xA] - ldr r1, _080C4304 @ =0xffff0000 - add r4, sp, 0x38 - ldr r0, [r4, 0x4] - ands r0, r1 - orrs r0, r3 - str r0, [r4, 0x4] - ldrh r0, [r2, 0x8] - add r1, sp, 0x18 - movs r3, 0 - strh r0, [r1] - ldrh r2, [r2, 0xA] - mov r0, sp - adds r0, 0x1A - strh r2, [r0] - ldr r0, _080C4308 @ =gUnknown_83F1C54 - str r0, [sp, 0x1C] - ldr r0, _080C430C @ =gUnknown_83F1C64 - str r0, [sp, 0x20] - str r3, [sp, 0x24] - ldr r0, _080C4310 @ =gDummySpriteAffineAnimTable - str r0, [sp, 0x28] - ldr r0, _080C4314 @ =SpriteCallbackDummy - str r0, [sp, 0x2C] - mov r0, sp - movs r2, 0x18 - bl memcpy - ldr r0, _080C4318 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x8] - cmp r0, 0x1 - bne _080C42AA - ldr r0, _080C431C @ =gUnknown_83EF29C - str r0, [sp, 0x38] -_080C42AA: - adds r0, r5, 0 - bl LoadSpriteSheet - adds r0, r4, 0 - bl LoadSpritePalette - ldr r0, [r6] - movs r2, 0 - ldrsh r1, [r0, r2] - lsls r1, 19 - movs r3, 0x90 - lsls r3, 14 - adds r1, r3 - asrs r1, 16 - movs r3, 0x2 - ldrsh r2, [r0, r3] - lsls r2, 19 - movs r0, 0x90 - lsls r0, 14 - adds r2, r0 - asrs r2, 16 - mov r0, sp - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r2, [r6] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _080C4320 @ =gSprites - adds r1, r0 - str r1, [r2, 0x4] - movs r0, 0x1 - bl sub_80C4324 - add sp, 0x40 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C42FC: .4byte gUnknown_20399E8 -_080C4300: .4byte gUnknown_83EF27C -_080C4304: .4byte 0xffff0000 -_080C4308: .4byte gUnknown_83F1C54 -_080C430C: .4byte gUnknown_83F1C64 -_080C4310: .4byte gDummySpriteAffineAnimTable -_080C4314: .4byte SpriteCallbackDummy -_080C4318: .4byte gSaveBlock2Ptr -_080C431C: .4byte gUnknown_83EF29C -_080C4320: .4byte gSprites - thumb_func_end sub_80C4244 - - thumb_func_start sub_80C4324 -sub_80C4324: @ 80C4324 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080C4344 @ =gUnknown_20399E8 - ldr r1, [r1] - ldr r2, [r1, 0x4] - adds r2, 0x3E - movs r1, 0x1 - ands r0, r1 - lsls r0, 2 - ldrb r3, [r2] - movs r1, 0x5 - negs r1, r1 - ands r1, r3 - orrs r1, r0 - strb r1, [r2] - bx lr - .align 2, 0 -_080C4344: .4byte gUnknown_20399E8 - thumb_func_end sub_80C4324 - - thumb_func_start sub_80C4348 -sub_80C4348: @ 80C4348 - push {r4,lr} - ldr r4, _080C437C @ =gUnknown_20399E8 - ldr r0, [r4] - ldr r0, [r0, 0x4] - cmp r0, 0 - beq _080C4368 - bl DestroySprite - ldr r0, [r4] - ldrh r0, [r0, 0x8] - bl FreeSpriteTilesByTag - ldr r0, [r4] - ldrh r0, [r0, 0xA] - bl FreeSpritePaletteByTag -_080C4368: - ldr r0, [r4] - cmp r0, 0 - beq _080C4376 - bl Free - movs r0, 0 - str r0, [r4] -_080C4376: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C437C: .4byte gUnknown_20399E8 - thumb_func_end sub_80C4348 - - thumb_func_start sub_80C4380 -sub_80C4380: @ 80C4380 - ldr r0, _080C4388 @ =gUnknown_20399E8 - ldr r0, [r0] - ldrh r0, [r0] - bx lr - .align 2, 0 -_080C4388: .4byte gUnknown_20399E8 - thumb_func_end sub_80C4380 - - thumb_func_start sub_80C438C -sub_80C438C: @ 80C438C - ldr r0, _080C4394 @ =gUnknown_20399E8 - ldr r0, [r0] - ldrh r0, [r0, 0x2] - bx lr - .align 2, 0 -_080C4394: .4byte gUnknown_20399E8 - thumb_func_end sub_80C438C - thumb_func_start sub_80C4398 sub_80C4398: @ 80C4398 push {r4-r6,lr} diff --git a/src/region_map.c b/src/region_map.c index 40dbadf0e..7ce44b421 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -163,12 +163,22 @@ struct UnkStruct_20399E4 u16 field_024[0x080]; }; +struct UnkStruct_20399E8 +{ + s16 field_00; + s16 field_02; + struct Sprite * field_04; + u16 field_08; + u16 field_0A; + u16 field_0C[0x40]; +}; + EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL; EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL; EWRAM_DATA struct UnkStruct_20399DC * gUnknown_20399DC = NULL; EWRAM_DATA struct UnkStruct_20399E0 * gUnknown_20399E0 = NULL; EWRAM_DATA struct UnkStruct_20399E4 * gUnknown_20399E4 = NULL; -EWRAM_DATA void * gUnknown_20399E8 = NULL; +EWRAM_DATA struct UnkStruct_20399E8 * gUnknown_20399E8 = NULL; EWRAM_DATA void * gUnknown_20399EC = NULL; EWRAM_DATA void * gUnknown_20399F0[3] = {}; EWRAM_DATA void * gUnknown_20399FC = NULL; @@ -232,14 +242,18 @@ u8 sub_80C31C0(void); u8 sub_80C3348(void); u8 sub_80C3400(void); void sub_80C3418(void); +u16 sub_80C3508(void); +u16 sub_80C3514(void); u16 sub_80C3520(void); +u16 sub_80C3580(void); u8 sub_80C35DC(u8 a0); u8 sub_80C3878(u8 a0); u8 sub_80C3AC8(u8 a0); void sub_80C3D40(void); u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3); void sub_80C41D8(u16 a0, u16 a1); -void sub_80C4324(u8 a0); +void sub_80C4244(void); +void sub_80C4324(bool8 a0); void sub_80C4348(void); u16 sub_80C4380(); u16 sub_80C438C(); @@ -262,19 +276,20 @@ void sub_80C4E18(const u8 *str); void sub_80C4E74(const u8 *str); void sub_80C4ED0(bool8 a0); void sub_80C4F08(u8 taskId); -u16 sub_80C3508(void); -u16 sub_80C3514(void); -u16 sub_80C3580(void); #include "data/text/map_section_names.h" extern const u16 gUnknown_83EF23C[]; extern const u16 gUnknown_83EF25C[]; +extern const u16 gUnknown_83EF27C[]; +extern const u16 gUnknown_83EF29C[]; extern const u16 gUnknown_83EF2DC[]; extern const u16 gUnknown_83EF384[]; extern const u16 gUnknown_83EF3A4[]; extern const u32 gUnknown_83EF3C4[]; extern const u32 gUnknown_83EF450[]; extern const u32 gUnknown_83EF4E0[]; +extern const u32 gUnknown_83EF524[]; +extern const u32 gUnknown_83EF59C[]; extern const u32 gUnknown_83EF61C[]; extern const u32 gUnknown_83F0330[]; extern const u32 gUnknown_83F0E0C[]; @@ -310,9 +325,15 @@ extern const union AnimCmd *const gUnknown_83F1C30[]; extern const struct UnkStruct_80C4CF0 gUnknown_83F1C34; extern const struct OamData gUnknown_83F1C3C; extern const union AnimCmd *const gUnknown_83F1C50[]; +extern const struct OamData gUnknown_83F1C54; +extern const union AnimCmd *const gUnknown_83F1C64[]; extern const u8 *const gUnknown_83F1CAC[]; extern const u16 gUnknown_83F1E60[][2]; extern const u16 gUnknown_83F2178[][2]; +extern const u8 gUnknown_83F2490[][15][22]; +extern const u8 gUnknown_83F2724[][15][22]; +extern const u8 gUnknown_83F29B8[][15][22]; +extern const u8 gUnknown_83F2C4C[][15][22]; static void RegionMap_DarkenPalette(u16 *pal, u16 size, u16 tint) { @@ -580,7 +601,7 @@ void sub_80C04E4(u8 taskId) sub_80C4E18(gUnknown_8418EB5); sub_80C4E74(gUnknown_8418E8B); sub_80C4ED0(FALSE); - sub_80C4324(0); + sub_80C4324(FALSE); sub_80C3154(FALSE); sub_80C48BC(sub_80C0E20(), 25, 0); sub_80C4960(sub_80C0E20(), 25, 0); @@ -1054,7 +1075,7 @@ void sub_80C1098(u8 taskId) sub_80C0E48(gUnknown_20399D8->field_1CCA); if (sub_80C0E34() == gUnknown_20399D8->field_1CCA) { - sub_80C4324(0); + sub_80C4324(FALSE); sub_80C48BC(gUnknown_20399D8->field_1CCA, 25, 0); sub_80C4960(gUnknown_20399D8->field_1CCA, 25, 0); } @@ -1205,9 +1226,9 @@ bool8 sub_80C1478(void) sub_80C4960(gUnknown_20399D8->field_1CCA, 25, 0); } if (gUnknown_20399D8->field_1CCA != sub_80C0E34()) - sub_80C4324(1); + sub_80C4324(TRUE); else - sub_80C4324(0); + sub_80C4324(FALSE); sub_80C4CF0(1, &data); return FALSE; } @@ -1766,7 +1787,7 @@ void sub_80C267C(u8 taskId) gUnknown_20399E0->field_CCC++; break; case 7: - sub_80C4324(0); + sub_80C4324(FALSE); sub_80C3154(FALSE); gUnknown_20399E0->field_CCC++; break; @@ -1946,7 +1967,7 @@ void sub_80C2C7C(u8 taskId) break; case 3: sub_80C22C4(6, FALSE); - sub_80C4324(1); + sub_80C4324(TRUE); sub_80C3154(TRUE); sub_80C4960(255, 25, 1); sub_80C48BC(255, 25, 1); @@ -2719,3 +2740,92 @@ void sub_80C3D40(void) } gUnknown_20399E4->field_014 = sub_80C4164(sub_80C0E20(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); } + +u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3) +{ + switch (a0) + { + case 0: + return gUnknown_83F2490[a1][a2][a3]; + case 1: + return gUnknown_83F2724[a1][a2][a3]; + case 2: + return gUnknown_83F29B8[a1][a2][a3]; + case 3: + return gUnknown_83F2C4C[a1][a2][a3]; + default: + return MAPSEC_NONE; + } +} + +void sub_80C41D8(u16 a0, u16 a1) +{ + gUnknown_20399E8 = AllocZeroed(sizeof(struct UnkStruct_20399E8)); + if (gSaveBlock2Ptr->playerGender == FEMALE) + LZ77UnCompWram(gUnknown_83EF59C, gUnknown_20399E8->field_0C); + else + LZ77UnCompWram(gUnknown_83EF524, gUnknown_20399E8->field_0C); + gUnknown_20399E8->field_08 = a0; + gUnknown_20399E8->field_0A = a1; + gUnknown_20399E8->field_00 = sub_80C3508(); + gUnknown_20399E8->field_02 = sub_80C3514(); + sub_80C4244(); +} + +void sub_80C4244(void) +{ + u8 spriteId; + struct SpriteSheet spriteSheet = { + .data = gUnknown_20399E8->field_0C, + .size = 0x80, + .tag = gUnknown_20399E8->field_08 + }; + struct SpritePalette spritePalette = { + .data = gUnknown_83EF27C, + .tag = gUnknown_20399E8->field_0A + }; + struct SpriteTemplate template = { + .tileTag = gUnknown_20399E8->field_08, + .paletteTag = gUnknown_20399E8->field_0A, + .oam = &gUnknown_83F1C54, + .anims = gUnknown_83F1C64, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + }; + + if (gSaveBlock2Ptr->playerGender == FEMALE) + spritePalette.data = gUnknown_83EF29C; + + LoadSpriteSheet(&spriteSheet); + LoadSpritePalette(&spritePalette); + spriteId = CreateSprite(&template, 8 * gUnknown_20399E8->field_00 + 36, 8 * gUnknown_20399E8->field_02 + 36, 2); + gUnknown_20399E8->field_04 = &gSprites[spriteId]; + sub_80C4324(TRUE); +} + +void sub_80C4324(bool8 a0) +{ + gUnknown_20399E8->field_04->invisible = a0; +} + +void sub_80C4348(void) +{ + if (gUnknown_20399E8->field_04 != NULL) + { + DestroySprite(gUnknown_20399E8->field_04); + FreeSpriteTilesByTag(gUnknown_20399E8->field_08); + FreeSpritePaletteByTag(gUnknown_20399E8->field_0A); + } + FREE_IF_NOT_NULL(gUnknown_20399E8); +} + +u16 sub_80C4380(void) +{ + return gUnknown_20399E8->field_00; +} + +u16 sub_80C438C(void) +{ + return gUnknown_20399E8->field_02; +} -- cgit v1.2.3 From b39a83fc032e8f5d168561906bad3907bc794d08 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 7 Jan 2020 14:21:55 -0500 Subject: through sub_80C47F0 --- asm/region_map.s | 643 ------------------------------------------------------- ld_script.txt | 2 - src/region_map.c | 199 ++++++++++++++++- 3 files changed, 197 insertions(+), 647 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index ac9ceeefd..7572aec7b 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,649 +5,6 @@ .text - thumb_func_start sub_80C4398 -sub_80C4398: @ 80C4398 - push {r4-r6,lr} - mov r6, r8 - push {r6} - adds r4, r0, 0 - adds r6, r1, 0 - mov r8, r2 - lsls r4, 24 - lsrs r4, 24 - lsls r6, 24 - lsrs r6, 24 - ldr r5, _080C43F4 @ =gUnknown_20399EC - ldr r0, _080C43F8 @ =0x0000046c - bl AllocZeroed - str r0, [r5] - movs r2, 0x8D - lsls r2, 3 - adds r1, r0, r2 - mov r2, r8 - str r2, [r1] - movs r1, 0x8C - lsls r1, 3 - adds r0, r1 - strb r4, [r0] - ldr r0, _080C43FC @ =gUnknown_83F18D8 - ldr r1, [r5] - bl LZ77UnCompWram - ldr r0, _080C4400 @ =gUnknown_83F1908 - ldr r1, [r5] - adds r1, 0x40 - bl LZ77UnCompWram - ldr r1, _080C4404 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _080C4408 @ =sub_80C440C - str r1, [r0] - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C43F4: .4byte gUnknown_20399EC -_080C43F8: .4byte 0x0000046c -_080C43FC: .4byte gUnknown_83F18D8 -_080C4400: .4byte gUnknown_83F1908 -_080C4404: .4byte gTasks -_080C4408: .4byte sub_80C440C - thumb_func_end sub_80C4398 - - thumb_func_start sub_80C440C -sub_80C440C: @ 80C440C - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080C442C @ =gUnknown_20399EC - ldr r0, [r0] - ldr r1, _080C4430 @ =0x00000463 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x4 - bhi _080C44BC - lsls r0, 2 - ldr r1, _080C4434 @ =_080C4438 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C442C: .4byte gUnknown_20399EC -_080C4430: .4byte 0x00000463 -_080C4434: .4byte _080C4438 - .align 2, 0 -_080C4438: - .4byte _080C444C - .4byte _080C4452 - .4byte _080C4468 - .4byte _080C446E - .4byte _080C44A0 -_080C444C: - bl sub_80C08E0 - b _080C44A4 -_080C4452: - bl sub_80C47F0 - ldr r0, _080C4460 @ =gUnknown_20399EC - ldr r1, [r0] - ldr r0, _080C4464 @ =0x00000463 - adds r1, r0 - b _080C44AC - .align 2, 0 -_080C4460: .4byte gUnknown_20399EC -_080C4464: .4byte 0x00000463 -_080C4468: - bl sub_80C4750 - b _080C44A4 -_080C446E: - movs r4, 0x1 - negs r4, r4 - adds r0, r4, 0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - movs r0, 0 - str r0, [sp] - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r0, _080C4498 @ =gUnknown_20399EC - ldr r1, [r0] - ldr r0, _080C449C @ =0x00000463 - adds r1, r0 - b _080C44AC - .align 2, 0 -_080C4498: .4byte gUnknown_20399EC -_080C449C: .4byte 0x00000463 -_080C44A0: - bl sub_80C08F4 -_080C44A4: - ldr r0, _080C44B4 @ =gUnknown_20399EC - ldr r1, [r0] - ldr r2, _080C44B8 @ =0x00000463 - adds r1, r2 -_080C44AC: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _080C44DC - .align 2, 0 -_080C44B4: .4byte gUnknown_20399EC -_080C44B8: .4byte 0x00000463 -_080C44BC: - movs r0, 0 - bl GetGpuReg - adds r1, r0, 0 - movs r2, 0x80 - lsls r2, 5 - adds r0, r2, 0 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0 - bl SetGpuReg - adds r0, r4, 0 - bl sub_80C44E4 -_080C44DC: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80C440C - - thumb_func_start sub_80C44E4 -sub_80C44E4: @ 80C44E4 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080C4504 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r0, _080C4508 @ =gUnknown_20399EC - ldr r0, [r0] - movs r2, 0x8D - lsls r2, 3 - adds r0, r2 - ldr r0, [r0] - str r0, [r1] - bx lr - .align 2, 0 -_080C4504: .4byte gTasks -_080C4508: .4byte gUnknown_20399EC - thumb_func_end sub_80C44E4 - - thumb_func_start sub_80C450C -sub_80C450C: @ 80C450C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x2C - mov r10, r0 - mov r9, r1 - adds r4, r2, 0 - adds r5, r3, 0 - ldr r3, [sp, 0x4C] - ldr r6, [sp, 0x50] - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - str r5, [sp, 0x28] - lsls r3, 24 - lsrs r3, 24 - lsls r6, 24 - lsrs r6, 24 - ldr r7, _080C45F4 @ =gUnknown_20399EC - ldr r0, [r7] - adds r0, 0x40 - str r0, [sp, 0x18] - movs r2, 0x80 - lsls r2, 1 - add r0, sp, 0x18 - lsls r1, r3, 16 - orrs r1, r2 - str r1, [r0, 0x4] - ldr r1, _080C45F8 @ =gUnknown_83EF2BC - str r1, [sp, 0x20] - ldr r2, _080C45FC @ =0xffff0000 - add r5, sp, 0x20 - mov r8, r5 - ldr r1, [r5, 0x4] - ands r1, r2 - orrs r1, r6 - str r1, [r5, 0x4] - mov r1, sp - movs r2, 0 - strh r3, [r1] - strh r6, [r1, 0x2] - ldr r1, _080C4600 @ =gUnknown_83F1C68 - str r1, [sp, 0x4] - ldr r1, _080C4604 @ =gUnknown_83F1C94 - str r1, [sp, 0x8] - str r2, [sp, 0xC] - ldr r1, _080C4608 @ =gDummySpriteAffineAnimTable - str r1, [sp, 0x10] - ldr r1, _080C460C @ =SpriteCallbackDummy - str r1, [sp, 0x14] - bl LoadSpriteSheet - mov r0, r8 - bl LoadSpritePalette - lsls r4, 19 - movs r0, 0x90 - lsls r0, 14 - adds r4, r0 - asrs r4, 16 - ldr r1, [sp, 0x28] - lsls r5, r1, 19 - adds r5, r0 - asrs r5, 16 - mov r0, sp - adds r1, r4, 0 - adds r2, r5, 0 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r2, [r7] - mov r5, r9 - lsls r5, 4 - mov r9, r5 - movs r1, 0xB6 - lsls r1, 2 - adds r2, r1 - add r2, r9 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _080C4610 @ =gSprites - adds r1, r0 - str r1, [r2] - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - ldr r0, [r7] - add r0, r9 - movs r2, 0xB5 - lsls r2, 2 - adds r0, r2 - mov r5, r10 - strb r5, [r0] - add sp, 0x2C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C45F4: .4byte gUnknown_20399EC -_080C45F8: .4byte gUnknown_83EF2BC -_080C45FC: .4byte 0xffff0000 -_080C4600: .4byte gUnknown_83F1C68 -_080C4604: .4byte gUnknown_83F1C94 -_080C4608: .4byte gDummySpriteAffineAnimTable -_080C460C: .4byte SpriteCallbackDummy -_080C4610: .4byte gSprites - thumb_func_end sub_80C450C - - thumb_func_start sub_80C4614 -sub_80C4614: @ 80C4614 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x2C - ldr r4, [sp, 0x4C] - ldr r5, [sp, 0x50] - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - lsls r1, 24 - lsrs r1, 24 - str r1, [sp, 0x28] - lsls r2, 16 - lsrs r2, 16 - mov r8, r2 - lsls r3, 16 - lsrs r3, 16 - mov r9, r3 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - movs r7, 0 - ldr r0, _080C4730 @ =gUnknown_20399EC - ldr r0, [r0] - str r0, [sp, 0x18] - movs r2, 0x40 - add r0, sp, 0x18 - lsls r1, r4, 16 - orrs r1, r2 - str r1, [r0, 0x4] - ldr r1, _080C4734 @ =gUnknown_83EF2BC - str r1, [sp, 0x20] - ldr r2, _080C4738 @ =0xffff0000 - add r6, sp, 0x20 - ldr r1, [r6, 0x4] - ands r1, r2 - orrs r1, r5 - str r1, [r6, 0x4] - mov r1, sp - strh r4, [r1] - strh r5, [r1, 0x2] - ldr r1, _080C473C @ =gUnknown_83F1C70 - str r1, [sp, 0x4] - ldr r1, _080C4740 @ =gUnknown_83F1C98 - str r1, [sp, 0x8] - str r7, [sp, 0xC] - ldr r1, _080C4744 @ =gDummySpriteAffineAnimTable - str r1, [sp, 0x10] - ldr r1, _080C4748 @ =SpriteCallbackDummy - str r1, [sp, 0x14] - bl LoadSpriteSheet - adds r0, r6, 0 - bl LoadSpritePalette - mov r0, r9 - lsls r2, r0, 16 - asrs r2, 16 - mov r1, r8 - lsls r3, r1, 16 - asrs r3, 16 - mov r0, r10 - movs r1, 0 - bl sub_80C4164 - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - adds r0, r4, 0 - bl sub_80C35DC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - beq _080C46BE - adds r0, r4, 0 - bl sub_80C35DC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bne _080C46C4 -_080C46BE: - cmp r5, 0x64 - beq _080C46C4 - movs r7, 0x2 -_080C46C4: - mov r3, r8 - lsls r1, r3, 3 - lsls r0, r7, 16 - asrs r0, 16 - adds r0, 0x24 - adds r1, r0 - lsls r1, 16 - asrs r1, 16 - mov r3, r9 - lsls r2, r3, 3 - adds r2, r0 - lsls r2, 16 - asrs r2, 16 - mov r0, sp - movs r3, 0x3 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r4, _080C4730 @ =gUnknown_20399EC - ldr r2, [r4] - ldr r1, [sp, 0x28] - lsls r3, r1, 4 - movs r1, 0xA4 - lsls r1, 1 - adds r2, r1 - adds r2, r3 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _080C474C @ =gSprites - adds r1, r0 - str r1, [r2] - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - ldr r0, [r4] - adds r0, r3 - movs r3, 0xA2 - lsls r3, 1 - adds r0, r3 - mov r1, r10 - strb r1, [r0] - add sp, 0x2C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C4730: .4byte gUnknown_20399EC -_080C4734: .4byte gUnknown_83EF2BC -_080C4738: .4byte 0xffff0000 -_080C473C: .4byte gUnknown_83F1C70 -_080C4740: .4byte gUnknown_83F1C98 -_080C4744: .4byte gDummySpriteAffineAnimTable -_080C4748: .4byte SpriteCallbackDummy -_080C474C: .4byte gSprites - thumb_func_end sub_80C4614 - - thumb_func_start sub_80C4750 -sub_80C4750: @ 80C4750 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - movs r7, 0 - movs r0, 0x3 - bl sub_80C0E04 - lsls r0, 24 - cmp r0, 0 - beq _080C47E0 - movs r1, 0 -_080C476C: - movs r5, 0 - lsls r0, r1, 24 - adds r1, 0x1 - mov r10, r1 - lsrs r0, 24 - str r0, [sp, 0x8] -_080C4778: - movs r4, 0 - lsls r0, r5, 16 - mov r8, r0 - adds r1, r5, 0x1 - mov r9, r1 -_080C4782: - lsls r3, r4, 16 - asrs r3, 16 - ldr r0, [sp, 0x8] - movs r1, 0 - mov r6, r8 - asrs r2, r6, 16 - bl sub_80C4164 - lsls r0, 24 - lsrs r0, 24 - bl sub_80C35DC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _080C47C2 - adds r0, r7, 0 - adds r0, 0xA - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - movs r0, 0xA - str r0, [sp, 0x4] - ldr r0, [sp, 0x8] - adds r1, r7, 0 - adds r2, r4, 0 - adds r3, r5, 0 - bl sub_80C450C - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 -_080C47C2: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x15 - bls _080C4782 - mov r1, r9 - lsls r0, r1, 16 - lsrs r5, r0, 16 - cmp r5, 0xE - bls _080C4778 - mov r6, r10 - lsls r0, r6, 16 - lsrs r1, r0, 16 - cmp r1, 0x3 - bls _080C476C -_080C47E0: - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80C4750 - - thumb_func_start sub_80C47F0 -sub_80C47F0: @ 80C47F0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - movs r6, 0 - movs r1, 0 -_080C4800: - movs r7, 0 - lsls r0, r1, 24 - adds r1, 0x1 - str r1, [sp, 0x8] - lsrs r0, 24 - mov r8, r0 -_080C480C: - movs r5, 0 - lsls r0, r7, 16 - mov r9, r0 - adds r1, r7, 0x1 - mov r10, r1 -_080C4816: - lsls r3, r5, 16 - asrs r3, 16 - mov r0, r8 - movs r1, 0x1 - mov r4, r9 - asrs r2, r4, 16 - bl sub_80C4164 - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - cmp r0, 0xC5 - beq _080C4884 - cmp r0, 0x8D - bne _080C4840 - ldr r0, _080C48B4 @ =0x00000844 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _080C4884 -_080C4840: - adds r0, r6, 0 - adds r0, 0x23 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - movs r0, 0xA - str r0, [sp, 0x4] - mov r0, r8 - adds r1, r6, 0 - adds r2, r5, 0 - adds r3, r7, 0 - bl sub_80C4614 - adds r0, r4, 0 - bl sub_80C3878 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - beq _080C487E - ldr r0, _080C48B8 @ =gUnknown_20399EC - ldr r0, [r0] - lsls r1, r6, 4 - movs r2, 0xA4 - lsls r2, 1 - adds r0, r2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x1 - bl StartSpriteAnim -_080C487E: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 -_080C4884: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x15 - bls _080C4816 - mov r4, r10 - lsls r0, r4, 16 - lsrs r7, r0, 16 - cmp r7, 0xE - bls _080C480C - ldr r1, [sp, 0x8] - lsls r0, r1, 16 - lsrs r1, r0, 16 - cmp r1, 0x3 - bls _080C4800 - 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 -_080C48B4: .4byte 0x00000844 -_080C48B8: .4byte gUnknown_20399EC - thumb_func_end sub_80C47F0 - thumb_func_start sub_80C48BC sub_80C48BC: @ 80C48BC push {r4-r7,lr} diff --git a/ld_script.txt b/ld_script.txt index 19fdde8dc..01bc181a6 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -1,5 +1,3 @@ -ENTRY(Start) - gNumMusicPlayers = 4; gMaxLines = 0; diff --git a/src/region_map.c b/src/region_map.c index 7ce44b421..90b25c36b 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -161,7 +161,7 @@ struct UnkStruct_20399E4 u16 field_020; u16 field_022; u16 field_024[0x080]; -}; +}; // size = 0x124 struct UnkStruct_20399E8 { @@ -171,15 +171,37 @@ struct UnkStruct_20399E8 u16 field_08; u16 field_0A; u16 field_0C[0x40]; +}; // size = 0x8C + +struct UnkStruct_20399EC_2D4 +{ + u8 field_0; + struct Sprite * field_4; + u8 filler_8[8]; }; +struct UnkStruct_20399EC +{ + u8 field_000[0x40]; + u8 field_040[0x100]; + u8 field_140[4]; + struct UnkStruct_20399EC_2D4 field_144[25]; + struct UnkStruct_20399EC_2D4 field_2D4[24]; + u8 field_454[0xC]; + u8 field_460; + u8 filler_461[2]; + u8 field_463; + u8 filler_464[4]; + TaskFunc field_468; +}; // size = 0x46C + EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL; EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL; EWRAM_DATA struct UnkStruct_20399DC * gUnknown_20399DC = NULL; EWRAM_DATA struct UnkStruct_20399E0 * gUnknown_20399E0 = NULL; EWRAM_DATA struct UnkStruct_20399E4 * gUnknown_20399E4 = NULL; EWRAM_DATA struct UnkStruct_20399E8 * gUnknown_20399E8 = NULL; -EWRAM_DATA void * gUnknown_20399EC = NULL; +EWRAM_DATA struct UnkStruct_20399EC * gUnknown_20399EC = NULL; EWRAM_DATA void * gUnknown_20399F0[3] = {}; EWRAM_DATA void * gUnknown_20399FC = NULL; @@ -258,6 +280,10 @@ void sub_80C4348(void); u16 sub_80C4380(); u16 sub_80C438C(); void sub_80C4398(u8 a0, u8 taskId, TaskFunc taskFunc); +void sub_80C440C(u8 taskId); +void sub_80C44E4(u8 taskId); +void sub_80C4750(void); +void sub_80C47F0(void); void sub_80C48BC(u8 a0, u8 a1, u8 a2); void sub_80C4960(u8 a0, u8 a1, u8 a2); void sub_80C4A04(void); @@ -282,6 +308,7 @@ extern const u16 gUnknown_83EF23C[]; extern const u16 gUnknown_83EF25C[]; extern const u16 gUnknown_83EF27C[]; extern const u16 gUnknown_83EF29C[]; +extern const u16 gUnknown_83EF2BC[]; extern const u16 gUnknown_83EF2DC[]; extern const u16 gUnknown_83EF384[]; extern const u16 gUnknown_83EF3A4[]; @@ -307,6 +334,8 @@ extern const u32 gUnknown_83F1550[]; extern const u32 gUnknown_83F1640[]; extern const u32 gUnknown_83F1738[]; extern const u32 gUnknown_83F1804[]; +extern const u32 gUnknown_83F18D8[]; +extern const u32 gUnknown_83F1908[]; extern const u32 gUnknown_83F1978[]; extern const u32 gUnknown_83F19A0[]; extern const struct BgTemplate gUnknown_83F1A50[4]; @@ -327,6 +356,10 @@ extern const struct OamData gUnknown_83F1C3C; extern const union AnimCmd *const gUnknown_83F1C50[]; extern const struct OamData gUnknown_83F1C54; extern const union AnimCmd *const gUnknown_83F1C64[]; +extern const struct OamData gUnknown_83F1C68; +extern const struct OamData gUnknown_83F1C70; +extern const union AnimCmd *const gUnknown_83F1C94[]; +extern const union AnimCmd *const gUnknown_83F1C98[]; extern const u8 *const gUnknown_83F1CAC[]; extern const u16 gUnknown_83F1E60[][2]; extern const u16 gUnknown_83F2178[][2]; @@ -2829,3 +2862,165 @@ u16 sub_80C438C(void) { return gUnknown_20399E8->field_02; } + +void sub_80C4398(u8 a0, u8 taskId, TaskFunc taskFunc) +{ + gUnknown_20399EC = AllocZeroed(sizeof(struct UnkStruct_20399EC)); + gUnknown_20399EC->field_468 = taskFunc; + gUnknown_20399EC->field_460 = a0; + LZ77UnCompWram(gUnknown_83F18D8, gUnknown_20399EC->field_000); + LZ77UnCompWram(gUnknown_83F1908, gUnknown_20399EC->field_040); + gTasks[taskId].func = sub_80C440C; +} + +void sub_80C440C(u8 taskId) +{ + switch (gUnknown_20399EC->field_463) + { + case 0: + sub_80C08E0(); + gUnknown_20399EC->field_463++; + break; + case 1: + sub_80C47F0(); + gUnknown_20399EC->field_463++; + break; + case 2: + sub_80C4750(); + gUnknown_20399EC->field_463++; + break; + case 3: + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + gUnknown_20399EC->field_463++; + break; + case 4: + sub_80C08F4(); + gUnknown_20399EC->field_463++; + break; + default: + SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) | DISPCNT_OBJ_ON); + sub_80C44E4(taskId); + break; + } +} + +void sub_80C44E4(u8 taskId) +{ + gTasks[taskId].func = gUnknown_20399EC->field_468; +} + +void sub_80C450C(u8 a0, u8 a1, u16 a2, u16 a3, u8 a4, u8 a5) +{ + u8 spriteId; + struct SpriteSheet spriteSheet = { + .data = gUnknown_20399EC->field_040, + .size = 0x100, + .tag = a4 + }; + struct SpritePalette spritePalette = { + .data = gUnknown_83EF2BC, + .tag = a5 + }; + struct SpriteTemplate template = { + .tileTag = a4, + .paletteTag = a5, + .oam = &gUnknown_83F1C68, + .anims = gUnknown_83F1C94, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + }; + + LoadSpriteSheet(&spriteSheet); + LoadSpritePalette(&spritePalette); + spriteId = CreateSprite(&template, 8 * a2 + 36, 8 * a3 + 36, 1); + gUnknown_20399EC->field_2D4[a1].field_4 = &gSprites[spriteId]; + gSprites[spriteId].invisible = TRUE; + gUnknown_20399EC->field_2D4[a1].field_0 = a0; +} + +void sub_80C4614(u8 a0, u8 a1, u16 a2, u16 a3, u8 a4, u8 a5) +{ + u8 spriteId; + u8 r4; + s16 r7 = 0; + struct SpriteSheet spriteSheet = { + .data = gUnknown_20399EC->field_000, + .size = 0x40, + .tag = a4 + }; + struct SpritePalette spritePalette = { + .data = gUnknown_83EF2BC, + .tag = a5 + }; + struct SpriteTemplate template = { + .tileTag = a4, + .paletteTag = a5, + .oam = &gUnknown_83F1C70, + .anims = gUnknown_83F1C98, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + }; + + LoadSpriteSheet(&spriteSheet); + LoadSpritePalette(&spritePalette); + r4 = sub_80C4164(a0, 0, a3, a2); + if ((sub_80C35DC(r4) == 2 || sub_80C35DC(r4) == 3) && r4 != MAPSEC_ROUTE_10_FLYDUP) + r7 = 2; + spriteId = CreateSprite(&template, 8 * a2 + 36 + r7, 8 * a3 + 36 + r7, 3); + gUnknown_20399EC->field_144[a1].field_4 = &gSprites[spriteId]; + gSprites[spriteId].invisible = TRUE; + gUnknown_20399EC->field_144[a1].field_0 = a0; +} + +void sub_80C4750(void) +{ + u16 i, j, k; + u8 r7 = 0; + if (sub_80C0E04(3)) + { + for (i = 0; i < 4; i++) + { + for (j = 0; j < 15; j++) + { + for (k = 0; k < 22; k++) + { + if (sub_80C35DC(sub_80C4164(i, 0, j, k)) == 2) + { + sub_80C450C(i, r7, k, j, r7 + 10, 10); + r7++; + } + } + } + } + } +} + +void sub_80C47F0(void) +{ + u16 i, j, k; + u8 r6 = 0; + u8 mapsec; + for (i = 0; i < 4; i++) + { + for (j = 0; j < 15; j++) + { + for (k = 0; k < 22; k++) + { + mapsec = sub_80C4164(i, 1, j, k); + if (mapsec == MAPSEC_NONE) + continue; + if (mapsec == MAPSEC_CERULEAN_CAVE && !FlagGet(FLAG_SYS_CAN_LINK_WITH_RS)) + continue; + sub_80C4614(i, r6, k, j, r6 + 35, 10); + if (sub_80C3878(mapsec) != 2) + { + StartSpriteAnim(gUnknown_20399EC->field_144[r6].field_4, 1); + } + r6++; + } + } + } +} -- cgit v1.2.3 From 62e29fdc9e5d083448da11ff4df7fec1f85e5d4c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 7 Jan 2020 14:47:12 -0500 Subject: through sub_80C4BB8 --- asm/region_map.s | 414 ------------------------------------------------------- src/region_map.c | 180 +++++++++++++++++++----- 2 files changed, 148 insertions(+), 446 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index 7572aec7b..0a8d5406b 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,420 +5,6 @@ .text - thumb_func_start sub_80C48BC -sub_80C48BC: @ 80C48BC - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r5, r2, 24 - cmp r1, 0x19 - bne _080C4920 - movs r3, 0 - ldr r0, _080C491C @ =gUnknown_20399EC - mov r12, r0 - movs r1, 0x1 - adds r0, r5, 0 - ands r0, r1 - lsls r5, r0, 2 - movs r6, 0x5 - negs r6, r6 -_080C48E0: - mov r7, r12 - ldr r1, [r7] - lsls r2, r3, 4 - adds r0, r1, r2 - movs r7, 0xB5 - lsls r7, 2 - adds r0, r7 - ldrb r0, [r0] - cmp r0, r4 - beq _080C48F8 - cmp r4, 0xFF - bne _080C490E -_080C48F8: - movs r7, 0xB6 - lsls r7, 2 - adds r0, r1, r7 - adds r0, r2 - ldr r1, [r0] - adds r1, 0x3E - ldrb r2, [r1] - adds r0, r6, 0 - ands r0, r2 - orrs r0, r5 - strb r0, [r1] -_080C490E: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x18 - bls _080C48E0 - b _080C4954 - .align 2, 0 -_080C491C: .4byte gUnknown_20399EC -_080C4920: - ldr r0, _080C495C @ =gUnknown_20399EC - ldr r2, [r0] - lsls r1, 4 - adds r0, r2, r1 - movs r3, 0xB5 - lsls r3, 2 - adds r0, r3 - ldrb r0, [r0] - cmp r0, r4 - bne _080C4954 - movs r7, 0xB6 - lsls r7, 2 - adds r0, r2, r7 - adds r0, r1 - ldr r2, [r0] - adds r2, 0x3E - movs r0, 0x1 - adds r1, r5, 0 - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2] -_080C4954: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C495C: .4byte gUnknown_20399EC - thumb_func_end sub_80C48BC - - thumb_func_start sub_80C4960 -sub_80C4960: @ 80C4960 - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r5, r2, 24 - cmp r1, 0x19 - bne _080C49C4 - movs r3, 0 - ldr r0, _080C49C0 @ =gUnknown_20399EC - mov r12, r0 - movs r1, 0x1 - adds r0, r5, 0 - ands r0, r1 - lsls r5, r0, 2 - movs r6, 0x5 - negs r6, r6 -_080C4984: - mov r7, r12 - ldr r1, [r7] - lsls r2, r3, 4 - adds r0, r1, r2 - movs r7, 0xA2 - lsls r7, 1 - adds r0, r7 - ldrb r0, [r0] - cmp r0, r4 - beq _080C499C - cmp r4, 0xFF - bne _080C49B2 -_080C499C: - movs r7, 0xA4 - lsls r7, 1 - adds r0, r1, r7 - adds r0, r2 - ldr r1, [r0] - adds r1, 0x3E - ldrb r2, [r1] - adds r0, r6, 0 - ands r0, r2 - orrs r0, r5 - strb r0, [r1] -_080C49B2: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x18 - bls _080C4984 - b _080C49F8 - .align 2, 0 -_080C49C0: .4byte gUnknown_20399EC -_080C49C4: - ldr r0, _080C4A00 @ =gUnknown_20399EC - ldr r2, [r0] - lsls r1, 4 - adds r0, r2, r1 - movs r3, 0xA2 - lsls r3, 1 - adds r0, r3 - ldrb r0, [r0] - cmp r0, r4 - beq _080C49F8 - movs r7, 0xA4 - lsls r7, 1 - adds r0, r2, r7 - adds r0, r1 - ldr r2, [r0] - adds r2, 0x3E - movs r0, 0x1 - adds r1, r5, 0 - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2] -_080C49F8: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C4A00: .4byte gUnknown_20399EC - thumb_func_end sub_80C4960 - - thumb_func_start sub_80C4A04 -sub_80C4A04: @ 80C4A04 - push {r4-r6,lr} - movs r5, 0 - ldr r6, _080C4AA4 @ =gUnknown_20399EC -_080C4A0A: - ldr r0, [r6] - lsls r4, r5, 4 - movs r1, 0xB6 - lsls r1, 2 - adds r0, r1 - adds r0, r4 - ldr r0, [r0] - cmp r0, 0 - beq _080C4A3E - bl DestroySprite - ldr r0, [r6] - adds r0, r4 - movs r1, 0xB7 - lsls r1, 2 - adds r0, r1 - ldrh r0, [r0] - bl FreeSpriteTilesByTag - ldr r0, [r6] - adds r0, r4 - ldr r1, _080C4AA8 @ =0x000002de - adds r0, r1 - ldrh r0, [r0] - bl FreeSpritePaletteByTag -_080C4A3E: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x18 - bls _080C4A0A - movs r5, 0 - ldr r6, _080C4AA4 @ =gUnknown_20399EC -_080C4A4C: - ldr r0, [r6] - lsls r4, r5, 4 - movs r1, 0xA4 - lsls r1, 1 - adds r0, r1 - adds r0, r4 - ldr r0, [r0] - cmp r0, 0 - beq _080C4A82 - bl DestroySprite - ldr r0, [r6] - adds r0, r4 - movs r1, 0xA6 - lsls r1, 1 - adds r0, r1 - ldrh r0, [r0] - bl FreeSpriteTilesByTag - ldr r0, [r6] - adds r0, r4 - movs r1, 0xA7 - lsls r1, 1 - adds r0, r1 - ldrh r0, [r0] - bl FreeSpritePaletteByTag -_080C4A82: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x18 - bls _080C4A4C - ldr r4, _080C4AA4 @ =gUnknown_20399EC - ldr r0, [r4] - cmp r0, 0 - beq _080C4A9C - bl Free - movs r0, 0 - str r0, [r4] -_080C4A9C: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C4AA4: .4byte gUnknown_20399EC -_080C4AA8: .4byte 0x000002de - thumb_func_end sub_80C4A04 - - thumb_func_start sub_80C4AAC -sub_80C4AAC: @ 80C4AAC - push {r4,lr} - lsls r0, 24 - ldr r1, _080C4B24 @ =gUnknown_20399F0 - lsrs r0, 22 - adds r4, r0, r1 - ldr r0, [r4] - cmp r0, 0 - bne _080C4B28 - movs r0, 0x14 - bl AllocZeroed - str r0, [r4] - movs r0, 0x50 - bl GetGpuReg - ldr r1, [r4] - strh r0, [r1] - movs r0, 0x54 - bl GetGpuReg - ldr r1, [r4] - strh r0, [r1, 0x2] - movs r0, 0x52 - bl GetGpuReg - ldr r1, [r4] - strh r0, [r1, 0x4] - movs r0, 0x48 - bl GetGpuReg - ldr r1, [r4] - strh r0, [r1, 0x6] - movs r0, 0x4A - bl GetGpuReg - ldr r1, [r4] - strh r0, [r1, 0x8] - movs r0, 0x40 - bl GetGpuReg - ldr r1, [r4] - strh r0, [r1, 0xA] - movs r0, 0x42 - bl GetGpuReg - ldr r1, [r4] - strh r0, [r1, 0xC] - movs r0, 0x44 - bl GetGpuReg - ldr r1, [r4] - strh r0, [r1, 0xE] - movs r0, 0x46 - bl GetGpuReg - ldr r1, [r4] - strh r0, [r1, 0x10] - movs r0, 0x1 - b _080C4B2A - .align 2, 0 -_080C4B24: .4byte gUnknown_20399F0 -_080C4B28: - movs r0, 0 -_080C4B2A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80C4AAC - - thumb_func_start sub_80C4B30 -sub_80C4B30: @ 80C4B30 - push {r4,lr} - lsls r0, 24 - ldr r1, _080C4B44 @ =gUnknown_20399F0 - lsrs r0, 22 - adds r4, r0, r1 - ldr r0, [r4] - cmp r0, 0 - bne _080C4B48 - movs r0, 0 - b _080C4BB0 - .align 2, 0 -_080C4B44: .4byte gUnknown_20399F0 -_080C4B48: - ldrh r1, [r0] - movs r0, 0x50 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x2] - movs r0, 0x54 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x4] - movs r0, 0x52 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x6] - movs r0, 0x48 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x8] - movs r0, 0x4A - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0xA] - movs r0, 0x40 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0xC] - movs r0, 0x42 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0xE] - movs r0, 0x44 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x10] - movs r0, 0x46 - bl SetGpuReg - ldr r0, [r4] - cmp r0, 0 - beq _080C4BAE - bl Free - movs r0, 0 - str r0, [r4] -_080C4BAE: - movs r0, 0x1 -_080C4BB0: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80C4B30 - - thumb_func_start sub_80C4BB8 -sub_80C4BB8: @ 80C4BB8 - push {r4-r6,lr} - movs r5, 0 - ldr r6, _080C4BE0 @ =gUnknown_20399F0 -_080C4BBE: - lsls r0, r5, 2 - adds r4, r0, r6 - ldr r0, [r4] - cmp r0, 0 - beq _080C4BD0 - bl Free - movs r0, 0 - str r0, [r4] -_080C4BD0: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x2 - bls _080C4BBE - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C4BE0: .4byte gUnknown_20399F0 - thumb_func_end sub_80C4BB8 - thumb_func_start sub_80C4BE4 sub_80C4BE4: @ 80C4BE4 push {lr} diff --git a/src/region_map.c b/src/region_map.c index 90b25c36b..493533c93 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -173,21 +173,21 @@ struct UnkStruct_20399E8 u16 field_0C[0x40]; }; // size = 0x8C -struct UnkStruct_20399EC_2D4 +struct UnkStruct_20399EC_140 { - u8 field_0; - struct Sprite * field_4; - u8 filler_8[8]; + u8 filler_0[4]; + u8 field_4; + struct Sprite * field_8; + u16 field_C; + u16 field_E; }; struct UnkStruct_20399EC { u8 field_000[0x40]; u8 field_040[0x100]; - u8 field_140[4]; - struct UnkStruct_20399EC_2D4 field_144[25]; - struct UnkStruct_20399EC_2D4 field_2D4[24]; - u8 field_454[0xC]; + struct UnkStruct_20399EC_140 field_140[25]; + struct UnkStruct_20399EC_140 field_2D0[25]; u8 field_460; u8 filler_461[2]; u8 field_463; @@ -195,6 +195,19 @@ struct UnkStruct_20399EC TaskFunc field_468; }; // size = 0x46C +struct UnkStruct_20399F0 +{ + u16 bldcnt; + u16 bldy; + u16 bldalpha; + u16 winin; + u16 winout; + u16 win0h; + u16 win1h; + u16 win0v; + u16 win1v; +}; + EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL; EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL; EWRAM_DATA struct UnkStruct_20399DC * gUnknown_20399DC = NULL; @@ -202,7 +215,7 @@ EWRAM_DATA struct UnkStruct_20399E0 * gUnknown_20399E0 = NULL; EWRAM_DATA struct UnkStruct_20399E4 * gUnknown_20399E4 = NULL; EWRAM_DATA struct UnkStruct_20399E8 * gUnknown_20399E8 = NULL; EWRAM_DATA struct UnkStruct_20399EC * gUnknown_20399EC = NULL; -EWRAM_DATA void * gUnknown_20399F0[3] = {}; +EWRAM_DATA struct UnkStruct_20399F0 * gUnknown_20399F0[3] = {}; EWRAM_DATA void * gUnknown_20399FC = NULL; static void sub_80BFFD0(void); @@ -284,11 +297,11 @@ void sub_80C440C(u8 taskId); void sub_80C44E4(u8 taskId); void sub_80C4750(void); void sub_80C47F0(void); -void sub_80C48BC(u8 a0, u8 a1, u8 a2); -void sub_80C4960(u8 a0, u8 a1, u8 a2); +void sub_80C48BC(u8 a0, u8 a1, bool8 a2); +void sub_80C4960(u8 a0, u8 a1, bool8 a2); void sub_80C4A04(void); -void sub_80C4B30(u8 a0); -void sub_80C4AAC(u8 a0); +bool8 sub_80C4AAC(u8 a0); +bool8 sub_80C4B30(u8 a0); void sub_80C4BE4(void); void sub_80C4C2C(u8 a0, u16 a1, u16 a2); void sub_80C4C48(u16 a0); @@ -636,8 +649,8 @@ void sub_80C04E4(u8 taskId) sub_80C4ED0(FALSE); sub_80C4324(FALSE); sub_80C3154(FALSE); - sub_80C48BC(sub_80C0E20(), 25, 0); - sub_80C4960(sub_80C0E20(), 25, 0); + sub_80C48BC(sub_80C0E20(), 25, FALSE); + sub_80C4960(sub_80C0E20(), 25, FALSE); } gUnknown_20399D4->field_47A0++; break; @@ -1109,8 +1122,8 @@ void sub_80C1098(u8 taskId) if (sub_80C0E34() == gUnknown_20399D8->field_1CCA) { sub_80C4324(FALSE); - sub_80C48BC(gUnknown_20399D8->field_1CCA, 25, 0); - sub_80C4960(gUnknown_20399D8->field_1CCA, 25, 0); + sub_80C48BC(gUnknown_20399D8->field_1CCA, 25, FALSE); + sub_80C4960(gUnknown_20399D8->field_1CCA, 25, FALSE); } gUnknown_20399D8->field_1CC8++; } @@ -1243,8 +1256,8 @@ bool8 sub_80C1478(void) gUnknown_20399D8->field_1CCA = gUnknown_20399D8->field_1CCB; sub_80C0CC8(0, gUnknown_20399D4->field_0026[gUnknown_20399D8->field_1CCA]); CopyBgTilemapBufferToVram(0); - sub_80C48BC(255, 25, 1); - sub_80C4960(255, 25, 1); + sub_80C48BC(255, 25, TRUE); + sub_80C4960(255, 25, TRUE); return TRUE; } if (r6) @@ -1253,10 +1266,10 @@ bool8 sub_80C1478(void) sub_80C4E74(gUnknown_8418EB0); CopyBgTilemapBufferToVram(0); CopyBgTilemapBufferToVram(3); - sub_80C48BC(255, 25, 1); - sub_80C4960(255, 25, 1); - sub_80C48BC(gUnknown_20399D8->field_1CCA, 25, 0); - sub_80C4960(gUnknown_20399D8->field_1CCA, 25, 0); + sub_80C48BC(255, 25, TRUE); + sub_80C4960(255, 25, TRUE); + sub_80C48BC(gUnknown_20399D8->field_1CCA, 25, FALSE); + sub_80C4960(gUnknown_20399D8->field_1CCA, 25, FALSE); } if (gUnknown_20399D8->field_1CCA != sub_80C0E34()) sub_80C4324(TRUE); @@ -1828,8 +1841,8 @@ void sub_80C267C(u8 taskId) gUnknown_20399E0->field_CD0 = 15; sub_80C253C(); sub_80C0A88(0); - sub_80C48BC(sub_80C0E20(), 25, 0); - sub_80C4960(sub_80C0E20(), 25, 0); + sub_80C48BC(sub_80C0E20(), 25, FALSE); + sub_80C4960(sub_80C0E20(), 25, FALSE); gUnknown_20399E0->field_CCC++; break; case 9: @@ -2002,8 +2015,8 @@ void sub_80C2C7C(u8 taskId) sub_80C22C4(6, FALSE); sub_80C4324(TRUE); sub_80C3154(TRUE); - sub_80C4960(255, 25, 1); - sub_80C48BC(255, 25, 1); + sub_80C4960(255, 25, TRUE); + sub_80C48BC(255, 25, TRUE); gUnknown_20399E0->field_CCE = 0; gUnknown_20399E0->field_CD0 = 0; gUnknown_20399E0->field_CCF++; @@ -2935,9 +2948,9 @@ void sub_80C450C(u8 a0, u8 a1, u16 a2, u16 a3, u8 a4, u8 a5) LoadSpriteSheet(&spriteSheet); LoadSpritePalette(&spritePalette); spriteId = CreateSprite(&template, 8 * a2 + 36, 8 * a3 + 36, 1); - gUnknown_20399EC->field_2D4[a1].field_4 = &gSprites[spriteId]; + gUnknown_20399EC->field_2D0[a1].field_8 = &gSprites[spriteId]; gSprites[spriteId].invisible = TRUE; - gUnknown_20399EC->field_2D4[a1].field_0 = a0; + gUnknown_20399EC->field_2D0[a1].field_4 = a0; } void sub_80C4614(u8 a0, u8 a1, u16 a2, u16 a3, u8 a4, u8 a5) @@ -2970,9 +2983,9 @@ void sub_80C4614(u8 a0, u8 a1, u16 a2, u16 a3, u8 a4, u8 a5) if ((sub_80C35DC(r4) == 2 || sub_80C35DC(r4) == 3) && r4 != MAPSEC_ROUTE_10_FLYDUP) r7 = 2; spriteId = CreateSprite(&template, 8 * a2 + 36 + r7, 8 * a3 + 36 + r7, 3); - gUnknown_20399EC->field_144[a1].field_4 = &gSprites[spriteId]; + gUnknown_20399EC->field_140[a1].field_8 = &gSprites[spriteId]; gSprites[spriteId].invisible = TRUE; - gUnknown_20399EC->field_144[a1].field_0 = a0; + gUnknown_20399EC->field_140[a1].field_4 = a0; } void sub_80C4750(void) @@ -3017,10 +3030,113 @@ void sub_80C47F0(void) sub_80C4614(i, r6, k, j, r6 + 35, 10); if (sub_80C3878(mapsec) != 2) { - StartSpriteAnim(gUnknown_20399EC->field_144[r6].field_4, 1); + StartSpriteAnim(gUnknown_20399EC->field_140[r6].field_8, 1); } r6++; } } } } + +void sub_80C48BC(u8 a0, u8 a1, bool8 a2) +{ + u8 i; + if (a1 == 25) + { + for (i = 0; i < 25; i++) + { + if (gUnknown_20399EC->field_2D0[i].field_4 == a0 || a0 == 0xFF) + gUnknown_20399EC->field_2D0[i].field_8->invisible = a2; + } + } + else + { + if (gUnknown_20399EC->field_2D0[a1].field_4 == a0) + gUnknown_20399EC->field_2D0[a1].field_8->invisible = a2; + } +} + +void sub_80C4960(u8 a0, u8 a1, bool8 a2) +{ + u8 i; + if (a1 == 25) + { + for (i = 0; i < 25; i++) + { + if (gUnknown_20399EC->field_140[i].field_4 == a0 || a0 == 0xFF) + gUnknown_20399EC->field_140[i].field_8->invisible = a2; + } + } + else + { + if (gUnknown_20399EC->field_140[a1].field_4 != a0) + gUnknown_20399EC->field_140[a1].field_8->invisible = a2; + } +} + +void sub_80C4A04(void) +{ + u8 i; + for (i = 0; i < 25; i++) + { + if (gUnknown_20399EC->field_2D0[i].field_8 != NULL) + { + DestroySprite(gUnknown_20399EC->field_2D0[i].field_8); + FreeSpriteTilesByTag(gUnknown_20399EC->field_2D0[i].field_C); + FreeSpritePaletteByTag(gUnknown_20399EC->field_2D0[i].field_E); + } + } + for (i = 0; i < 25; i++) + { + if (gUnknown_20399EC->field_140[i].field_8 != NULL) + { + DestroySprite(gUnknown_20399EC->field_140[i].field_8); + FreeSpriteTilesByTag(gUnknown_20399EC->field_140[i].field_C); + FreeSpritePaletteByTag(gUnknown_20399EC->field_140[i].field_E); + } + } + FREE_IF_NOT_NULL(gUnknown_20399EC); +} + +bool8 sub_80C4AAC(u8 a0) +{ + if (gUnknown_20399F0[a0] != NULL) + return FALSE; + gUnknown_20399F0[a0] = AllocZeroed(sizeof(struct UnkStruct_20399F0)); + gUnknown_20399F0[a0]->bldcnt = GetGpuReg(REG_OFFSET_BLDCNT); + gUnknown_20399F0[a0]->bldy = GetGpuReg(REG_OFFSET_BLDY); + gUnknown_20399F0[a0]->bldalpha = GetGpuReg(REG_OFFSET_BLDALPHA); + gUnknown_20399F0[a0]->winin = GetGpuReg(REG_OFFSET_WININ); + gUnknown_20399F0[a0]->winout = GetGpuReg(REG_OFFSET_WINOUT); + gUnknown_20399F0[a0]->win0h = GetGpuReg(REG_OFFSET_WIN0H); + gUnknown_20399F0[a0]->win1h = GetGpuReg(REG_OFFSET_WIN1H); + gUnknown_20399F0[a0]->win0v = GetGpuReg(REG_OFFSET_WIN0V); + gUnknown_20399F0[a0]->win1v = GetGpuReg(REG_OFFSET_WIN1V); + return TRUE; +} + +bool8 sub_80C4B30(u8 a0) +{ + if (gUnknown_20399F0[a0] == NULL) + return FALSE; + SetGpuReg(REG_OFFSET_BLDCNT, gUnknown_20399F0[a0]->bldcnt); + SetGpuReg(REG_OFFSET_BLDY, gUnknown_20399F0[a0]->bldy); + SetGpuReg(REG_OFFSET_BLDALPHA, gUnknown_20399F0[a0]->bldalpha); + SetGpuReg(REG_OFFSET_WININ, gUnknown_20399F0[a0]->winin); + SetGpuReg(REG_OFFSET_WINOUT, gUnknown_20399F0[a0]->winout); + SetGpuReg(REG_OFFSET_WIN0H, gUnknown_20399F0[a0]->win0h); + SetGpuReg(REG_OFFSET_WIN1H, gUnknown_20399F0[a0]->win1h); + SetGpuReg(REG_OFFSET_WIN0V, gUnknown_20399F0[a0]->win0v); + SetGpuReg(REG_OFFSET_WIN1V, gUnknown_20399F0[a0]->win1v); + FREE_IF_NOT_NULL(gUnknown_20399F0[a0]); + return TRUE; +} + +void sub_80C4BB8(void) +{ + u8 i; + for (i = 0; i < 3; i++) + { + FREE_IF_NOT_NULL(gUnknown_20399F0[i]); + } +} -- cgit v1.2.3 From b8ec686427958353a8649ccdc39f35ab509cd532 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 7 Jan 2020 15:13:48 -0500 Subject: through sub_80C4D30 --- asm/region_map.s | 190 ------------------------------------------------------ data/region_map.s | 8 ++- src/region_map.c | 81 +++++++++++++++++++++-- 3 files changed, 83 insertions(+), 196 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index 0a8d5406b..09875ebd6 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,196 +5,6 @@ .text - thumb_func_start sub_80C4BE4 -sub_80C4BE4: @ 80C4BE4 - push {lr} - sub sp, 0x8 - movs r0, 0 - movs r1, 0 - str r0, [sp] - str r1, [sp, 0x4] - movs r1, 0 - movs r2, 0 - bl sub_80C4C2C - movs r0, 0 - bl sub_80C4C48 - movs r0, 0 - mov r1, sp - bl sub_80C4CF0 - movs r0, 0x1 - mov r1, sp - bl sub_80C4CF0 - movs r0, 0 - movs r1, 0 - bl sub_80C4C74 - movs r0, 0 - movs r1, 0x1 - bl sub_80C4C9C - movs r0, 0x1 - movs r1, 0x1 - bl sub_80C4C9C - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_80C4BE4 - - thumb_func_start sub_80C4C2C -sub_80C4C2C: @ 80C4C2C - push {lr} - adds r3, r0, 0 - lsls r1, 16 - lsls r2, 16 - lsls r3, 24 - orrs r3, r1 - orrs r3, r2 - lsrs r3, 16 - movs r0, 0x50 - adds r1, r3, 0 - bl SetGpuReg - pop {r0} - bx r0 - thumb_func_end sub_80C4C2C - - thumb_func_start sub_80C4C48 -sub_80C4C48: @ 80C4C48 - push {lr} - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x54 - bl SetGpuReg - pop {r0} - bx r0 - thumb_func_end sub_80C4C48 - - thumb_func_start sub_80C4C5C -sub_80C4C5C: @ 80C4C5C - push {lr} - adds r2, r0, 0 - lsls r1, 16 - lsls r2, 24 - orrs r2, r1 - lsrs r2, 16 - movs r0, 0x52 - adds r1, r2, 0 - bl SetGpuReg - pop {r0} - bx r0 - thumb_func_end sub_80C4C5C - - thumb_func_start sub_80C4C74 -sub_80C4C74: @ 80C4C74 - push {lr} - lsls r0, 16 - lsls r1, 24 - orrs r1, r0 - lsrs r1, 16 - movs r0, 0x48 - bl SetGpuReg - pop {r0} - bx r0 - thumb_func_end sub_80C4C74 - - thumb_func_start sub_80C4C88 -sub_80C4C88: @ 80C4C88 - push {lr} - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x4A - bl SetGpuReg - pop {r0} - bx r0 - thumb_func_end sub_80C4C88 - - thumb_func_start sub_80C4C9C -sub_80C4C9C: @ 80C4C9C - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - ldr r1, _080C4CBC @ =gUnknown_83F1CA0 - mov r0, sp - movs r2, 0x4 - bl memcpy - cmp r4, 0 - beq _080C4CC0 - cmp r4, 0x1 - beq _080C4CDC - b _080C4CE8 - .align 2, 0 -_080C4CBC: .4byte gUnknown_83F1CA0 -_080C4CC0: - movs r0, 0 - bl GetGpuReg - adds r1, r0, 0 - lsls r0, r5, 1 - add r0, sp - ldrh r0, [r0] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0 - bl SetGpuReg - b _080C4CE8 -_080C4CDC: - lsls r0, r5, 1 - add r0, sp - ldrh r1, [r0] - movs r0, 0 - bl ClearGpuRegBits -_080C4CE8: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80C4C9C - - thumb_func_start sub_80C4CF0 -sub_80C4CF0: @ 80C4CF0 - push {r4-r6,lr} - adds r4, r0, 0 - adds r6, r1, 0 - lsls r4, 24 - ldr r5, _080C4D2C @ =gUnknown_83F1CA4 - lsrs r4, 23 - adds r0, r4, r5 - ldrb r0, [r0] - ldrh r1, [r6, 0x2] - lsls r1, 8 - ldrh r2, [r6, 0x6] - orrs r1, r2 - lsls r1, 16 - lsrs r1, 16 - bl SetGpuReg - adds r5, 0x1 - adds r4, r5 - ldrb r0, [r4] - ldrh r1, [r6] - lsls r1, 8 - ldrh r2, [r6, 0x4] - orrs r1, r2 - lsls r1, 16 - lsrs r1, 16 - bl SetGpuReg - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C4D2C: .4byte gUnknown_83F1CA4 - thumb_func_end sub_80C4CF0 - - thumb_func_start sub_80C4D30 -sub_80C4D30: @ 80C4D30 - push {lr} - bl sub_80C4BB8 - bl sub_80C4BE4 - pop {r0} - bx r0 - thumb_func_end sub_80C4D30 - thumb_func_start sub_80C4D40 sub_80C4D40: @ 80C4D40 push {lr} diff --git a/data/region_map.s b/data/region_map.s index 01bbb7a5a..2cca09daf 100644 --- a/data/region_map.s +++ b/data/region_map.s @@ -461,10 +461,14 @@ gUnknown_83F1C98:: @ 83F1C98 .4byte gAnimCmd_83F1C8C gUnknown_83F1CA0:: @ 83F1CA0 - .2byte 0x2000, 0x4000 + .2byte 0x2000 @ DISPCNT_WIN0_ON + .2byte 0x4000 @ DISPCNT_WIN1_ON gUnknown_83F1CA4:: @ 83F1CA4 - .2byte 0x4044, 0x4246 + .byte OFFSET_REG_WIN0V + .byte OFFSET_REG_WIN0H + .byte OFFSET_REG_WIN1V + .byte OFFSET_REG_WIN1H gUnknown_83F1CA8:: @ 83F1CA8 .byte 15, 1, 2 diff --git a/src/region_map.c b/src/region_map.c index 493533c93..e19e8e151 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -305,7 +305,7 @@ bool8 sub_80C4B30(u8 a0); void sub_80C4BE4(void); void sub_80C4C2C(u8 a0, u16 a1, u16 a2); void sub_80C4C48(u16 a0); -void sub_80C4C5C(u16 a0); +void sub_80C4C5C(u16 a0, u16 a1); void sub_80C4C74(u16 a0, u16 a1); void sub_80C4C88(u16 a0); void sub_80C4C9C(u8 a0, u8 a1); @@ -373,6 +373,8 @@ extern const struct OamData gUnknown_83F1C68; extern const struct OamData gUnknown_83F1C70; extern const union AnimCmd *const gUnknown_83F1C94[]; extern const union AnimCmd *const gUnknown_83F1C98[]; +extern const u16 gUnknown_83F1CA0[]; +extern const u8 gUnknown_83F1CA4[][2]; extern const u8 *const gUnknown_83F1CAC[]; extern const u16 gUnknown_83F1E60[][2]; extern const u16 gUnknown_83F2178[][2]; @@ -1034,14 +1036,14 @@ void sub_80C0FE0(void) { sub_80C4BE4(); sub_80C4C2C(27, 4, 64); - sub_80C4C5C(16 - gUnknown_20399D8->field_1CCD); + sub_80C4C5C(16 - gUnknown_20399D8->field_1CCD, gUnknown_20399D8->field_1CCD); } bool8 sub_80C1014(void) { if (gUnknown_20399D8->field_1CCD < 16) { - sub_80C4C5C(16 - gUnknown_20399D8->field_1CCD); + sub_80C4C5C(16 - gUnknown_20399D8->field_1CCD, gUnknown_20399D8->field_1CCD); gUnknown_20399D8->field_1CCD += 2; return FALSE; } @@ -1056,7 +1058,7 @@ bool8 sub_80C1058(void) if (gUnknown_20399D8->field_1CCD >= 2) { gUnknown_20399D8->field_1CCD -= 2; - sub_80C4C5C(16 - gUnknown_20399D8->field_1CCD); + sub_80C4C5C(16 - gUnknown_20399D8->field_1CCD, gUnknown_20399D8->field_1CCD); return FALSE; } else @@ -3140,3 +3142,74 @@ void sub_80C4BB8(void) FREE_IF_NOT_NULL(gUnknown_20399F0[i]); } } + +void sub_80C4BE4(void) +{ + struct UnkStruct_80C4CF0 data = {}; + sub_80C4C2C(0, 0, 0); + sub_80C4C48(0); + sub_80C4CF0(0, &data); + sub_80C4CF0(1, &data); + sub_80C4C74(0, 0); + sub_80C4C9C(0, 1); + sub_80C4C9C(1, 1); +} + +void sub_80C4C2C(u8 a0, u16 a1, u16 a2) +{ + u16 regval = a0 << 8; + regval |= a1; + regval |= a2; + SetGpuReg(REG_OFFSET_BLDCNT, regval); +} + +void sub_80C4C48(u16 a0) +{ + SetGpuReg(REG_OFFSET_BLDY, a0); +} + +void sub_80C4C5C(u16 a0, u16 a1) +{ + u16 regval = a0 << 8; + regval |= a1; + SetGpuReg(REG_OFFSET_BLDALPHA, regval); +} + +void sub_80C4C74(u16 a0, u16 a1) +{ + u16 regval = a1 << 8; + regval |= a0; + SetGpuReg(REG_OFFSET_WININ, regval); +} + +void sub_80C4C88(u16 a0) +{ + SetGpuReg(REG_OFFSET_WINOUT, a0); +} + +void sub_80C4C9C(u8 a0, u8 a1) +{ + u16 data[2]; + memcpy(data, gUnknown_83F1CA0, 4); + switch (a1) + { + case 0: + SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) | data[a0]); + break; + case 1: + ClearGpuRegBits(REG_OFFSET_DISPCNT, data[a0]); + break; + } +} + +void sub_80C4CF0(u8 a0, const struct UnkStruct_80C4CF0 *a1) +{ + SetGpuReg(gUnknown_83F1CA4[a0][0], (a1->v2 << 8) | a1->v6); + SetGpuReg(gUnknown_83F1CA4[a0][1], (a1->v0 << 8) | a1->v4); +} + +void sub_80C4D30(void) +{ + sub_80C4BB8(); + sub_80C4BE4(); +} -- cgit v1.2.3 From ce44eb021c16246d2f6ff2b564b70ccc24c98e30 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 7 Jan 2020 15:37:15 -0500 Subject: through sub_80C4E08 --- asm/region_map.s | 124 --------------------------------------------------- include/region_map.h | 4 +- src/quest_log.c | 4 +- src/region_map.c | 56 +++++++++++++++++++++++ 4 files changed, 60 insertions(+), 128 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index 09875ebd6..4f1b771f4 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,130 +5,6 @@ .text - thumb_func_start sub_80C4D40 -sub_80C4D40: @ 80C4D40 - push {lr} - lsls r0, 16 - lsrs r1, r0, 16 - ldr r0, _080C4D68 @ =gUnknown_20399D4 - ldr r0, [r0] - cmp r0, 0 - bne _080C4D70 - cmp r1, 0x5E - bne _080C4D70 - ldr r0, _080C4D6C @ =gSaveBlock1Ptr - ldr r1, [r0] - movs r0, 0x4 - ldrsb r0, [r1, r0] - cmp r0, 0xA - bne _080C4D70 - ldrb r0, [r1, 0x5] - cmp r0, 0x6 - bhi _080C4D70 - movs r0, 0x1 - b _080C4D72 - .align 2, 0 -_080C4D68: .4byte gUnknown_20399D4 -_080C4D6C: .4byte gSaveBlock1Ptr -_080C4D70: - movs r0, 0 -_080C4D72: - pop {r1} - bx r1 - thumb_func_end sub_80C4D40 - - thumb_func_start GetMapName -GetMapName: @ 80C4D78 - push {r4-r6,lr} - adds r6, r0, 0 - lsls r1, 16 - lsls r2, 16 - lsrs r4, r2, 16 - lsrs r0, r1, 16 - ldr r2, _080C4D9C @ =0xffa80000 - adds r1, r2 - lsrs r5, r1, 16 - cmp r5, 0x6C - bhi _080C4DBC - bl sub_80C4D40 - cmp r0, 0x1 - bne _080C4DA4 - ldr r1, _080C4DA0 @ =gMapSecName_CeladonDept - b _080C4DAC - .align 2, 0 -_080C4D9C: .4byte 0xffa80000 -_080C4DA0: .4byte gMapSecName_CeladonDept -_080C4DA4: - ldr r0, _080C4DB8 @ =gUnknown_83F1CAC - lsls r1, r5, 2 - adds r1, r0 - ldr r1, [r1] -_080C4DAC: - adds r0, r6, 0 - bl StringCopy - adds r1, r0, 0 - b _080C4DCE - .align 2, 0 -_080C4DB8: .4byte gUnknown_83F1CAC -_080C4DBC: - cmp r4, 0 - bne _080C4DC2 - movs r4, 0x12 -_080C4DC2: - adds r0, r6, 0 - movs r1, 0 - adds r2, r4, 0 - bl StringFill - b _080C4DF2 -_080C4DCE: - cmp r4, 0 - beq _080C4DF0 - subs r0, r1, r6 - lsls r0, 16 - lsrs r0, 16 - cmp r0, r4 - bcs _080C4DEC - movs r2, 0 -_080C4DDE: - strb r2, [r1] - adds r1, 0x1 - adds r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, r4 - bcc _080C4DDE -_080C4DEC: - movs r0, 0xFF - strb r0, [r1] -_080C4DF0: - adds r0, r1, 0 -_080C4DF2: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end GetMapName - - thumb_func_start GetMapNameGeneric -GetMapNameGeneric: @ 80C4DF8 - push {lr} - lsls r1, 16 - lsrs r1, 16 - movs r2, 0 - bl GetMapName - pop {r1} - bx r1 - thumb_func_end GetMapNameGeneric - - thumb_func_start sub_80C4E08 -sub_80C4E08: @ 80C4E08 - push {lr} - lsls r1, 16 - lsrs r1, 16 - bl GetMapNameGeneric - pop {r1} - bx r1 - thumb_func_end sub_80C4E08 - thumb_func_start sub_80C4E18 sub_80C4E18: @ 80C4E18 push {r4,lr} diff --git a/include/region_map.h b/include/region_map.h index 67287b6c4..76195a3af 100644 --- a/include/region_map.h +++ b/include/region_map.h @@ -92,9 +92,9 @@ void FreeRegionMapIconResources(void); u16 GetRegionMapSectionIdAt(u16 x, u16 y); void CreateRegionMapPlayerIcon(u16 x, u16 y); void CreateRegionMapCursor(u16 tileTag, u16 paletteTag); -u8 *GetMapName(u8 *, u16, u16); +u8 *GetMapName(u8 *dest, u16 mapsec, u16 fill); bool32 sub_8124668(u8 mapSecId); -void GetMapNameGeneric(u8 *, u8); +u8 *GetMapNameGeneric(u8 *dest, u16 mapsec); void sub_80BFF50(u8 a0, void (*a1)(void)); void MCB2_FlyMap(void); diff --git a/src/quest_log.c b/src/quest_log.c index 970071a0f..4d94c78ad 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -3119,7 +3119,7 @@ static const u16 *sub_8113FBC(const u16 *a0) StringCopy(gStringVar1, ItemId_GetName(r5[0])); if (r5[0] == ITEM_ESCAPE_ROPE) { - GetMapNameGeneric(gStringVar2, r5[2]); + GetMapNameGeneric(gStringVar2, (u8)r5[2]); StringExpandPlaceholders(gStringVar4, gUnknown_841AFA6); } else if (r5[1] != 0xFFFF) @@ -4373,7 +4373,7 @@ static u16 *sub_81157DC(u16 *a0, const u16 *a1) static const u16 *sub_8115800(const u16 *a0) { const u16 *r4 = sub_8113E88(42, a0); - GetMapNameGeneric(gStringVar1, r4[0]); + GetMapNameGeneric(gStringVar1, (u8)r4[0]); StringExpandPlaceholders(gStringVar4, gUnknown_841B064); return r4 + 1; } diff --git a/src/region_map.c b/src/region_map.c index e19e8e151..6678a226a 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -3213,3 +3213,59 @@ void sub_80C4D30(void) sub_80C4BB8(); sub_80C4BE4(); } + +bool32 sub_80C4D40(u16 a0) +{ + if (gUnknown_20399D4 != NULL) + return FALSE; + if (a0 != MAPSEC_CELADON_CITY) + return FALSE; + if (gSaveBlock1Ptr->location.mapGroup != MAP_GROUP(CELADON_CITY_DEPARTMENT_STORE_1F)) + return FALSE; + if (gSaveBlock1Ptr->location.mapNum != MAP_NUM(CELADON_CITY_DEPARTMENT_STORE_1F) + && gSaveBlock1Ptr->location.mapNum != MAP_NUM(CELADON_CITY_DEPARTMENT_STORE_2F) + && gSaveBlock1Ptr->location.mapNum != MAP_NUM(CELADON_CITY_DEPARTMENT_STORE_3F) + && gSaveBlock1Ptr->location.mapNum != MAP_NUM(CELADON_CITY_DEPARTMENT_STORE_4F) + && gSaveBlock1Ptr->location.mapNum != MAP_NUM(CELADON_CITY_DEPARTMENT_STORE_5F) + && gSaveBlock1Ptr->location.mapNum != MAP_NUM(CELADON_CITY_DEPARTMENT_STORE_ROOF) + && gSaveBlock1Ptr->location.mapNum != MAP_NUM(CELADON_CITY_DEPARTMENT_STORE_ELEVATOR)) + return FALSE; + return TRUE; +} + +u8 *GetMapName(u8 *dst0, u16 mapsec, u16 fill) +{ + u8 *dst; + u16 i; + u16 idx;; + if ((idx = mapsec - MAPSECS_KANTO) <= MAPSEC_SPECIAL_AREA - MAPSECS_KANTO) + { + if (sub_80C4D40(mapsec) == TRUE) + dst = StringCopy(dst0, gMapSecName_CeladonDept); + else + dst = StringCopy(dst0, gUnknown_83F1CAC[idx]); + } + else + { + if (fill == 0) + fill = 18; + return StringFill(dst0, CHAR_SPACE, fill); + } + if (fill != 0) + { + for (i = dst - dst0; i < fill; i++) + *dst++ = CHAR_SPACE; + *dst = EOS; + } + return dst; +} + +u8 *GetMapNameGeneric(u8 *dest, u16 mapsec) +{ + return GetMapName(dest, mapsec, 0); +} + +u8 *sub_80C4E08(u8 *dest, u16 mapsec) +{ + return GetMapNameGeneric(dest, mapsec); +} -- cgit v1.2.3 From 1235d7c50643f925a30e0e4dfa299ea6ff624dc2 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 7 Jan 2020 16:25:13 -0500 Subject: through sub_80C527C --- asm/region_map.s | 562 ------------------------------------------------- include/field_effect.h | 1 + include/overworld.h | 1 + include/region_map.h | 66 ------ src/region_map.c | 217 ++++++++++++++++++- 5 files changed, 217 insertions(+), 630 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index 4f1b771f4..1f63bde6c 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,568 +5,6 @@ .text - thumb_func_start sub_80C4E18 -sub_80C4E18: @ 80C4E18 - push {r4,lr} - sub sp, 0xC - adds r4, r0, 0 - ldr r0, _080C4E38 @ =gUnknown_20399D4 - ldr r0, [r0] - ldr r1, _080C4E3C @ =0x00004799 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - bne _080C4E40 - movs r0, 0x3 - movs r1, 0 - bl FillWindowPixelBuffer - b _080C4E48 - .align 2, 0 -_080C4E38: .4byte gUnknown_20399D4 -_080C4E3C: .4byte 0x00004799 -_080C4E40: - movs r0, 0x3 - movs r1, 0xFF - bl FillWindowPixelBuffer -_080C4E48: - ldr r0, _080C4E70 @ =gUnknown_83F1CA8 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r4, [sp, 0x8] - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl AddTextPrinterParameterized3 - movs r0, 0x3 - movs r1, 0x2 - bl CopyWindowToVram - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C4E70: .4byte gUnknown_83F1CA8 - thumb_func_end sub_80C4E18 - - thumb_func_start sub_80C4E74 -sub_80C4E74: @ 80C4E74 - push {r4,lr} - sub sp, 0xC - adds r4, r0, 0 - ldr r0, _080C4E94 @ =gUnknown_20399D4 - ldr r0, [r0] - ldr r1, _080C4E98 @ =0x00004799 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - bne _080C4E9C - movs r0, 0x4 - movs r1, 0 - bl FillWindowPixelBuffer - b _080C4EA4 - .align 2, 0 -_080C4E94: .4byte gUnknown_20399D4 -_080C4E98: .4byte 0x00004799 -_080C4E9C: - movs r0, 0x4 - movs r1, 0xFF - bl FillWindowPixelBuffer -_080C4EA4: - ldr r0, _080C4ECC @ =gUnknown_83F1CA8 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r4, [sp, 0x8] - movs r0, 0x4 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl AddTextPrinterParameterized3 - movs r0, 0x4 - movs r1, 0x3 - bl CopyWindowToVram - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C4ECC: .4byte gUnknown_83F1CA8 - thumb_func_end sub_80C4E74 - - thumb_func_start sub_80C4ED0 -sub_80C4ED0: @ 80C4ED0 - push {lr} - lsls r0, 24 - cmp r0, 0 - bne _080C4EE6 - movs r0, 0x3 - bl PutWindowTilemap - movs r0, 0x4 - bl PutWindowTilemap - b _080C4EF2 -_080C4EE6: - movs r0, 0x3 - bl ClearWindowTilemap - movs r0, 0x4 - bl ClearWindowTilemap -_080C4EF2: - pop {r0} - bx r0 - thumb_func_end sub_80C4ED0 - - thumb_func_start MCB2_FlyMap -MCB2_FlyMap: @ 80C4EF8 - push {lr} - bl sub_80C51E8 - movs r0, 0x2 - bl sub_80BFEDC - pop {r0} - bx r0 - thumb_func_end MCB2_FlyMap - - thumb_func_start sub_80C4F08 -sub_80C4F08: @ 80C4F08 - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _080C4F28 @ =gUnknown_20399FC - ldr r2, [r0] - ldrb r0, [r2] - cmp r0, 0x6 - bls _080C4F1C - b _080C51B8 -_080C4F1C: - lsls r0, 2 - ldr r1, _080C4F2C @ =_080C4F30 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C4F28: .4byte gUnknown_20399FC -_080C4F2C: .4byte _080C4F30 - .align 2, 0 -_080C4F30: - .4byte _080C4F4C - .4byte _080C4F92 - .4byte _080C4FEC - .4byte _080C5000 - .4byte _080C5028 - .4byte _080C5180 - .4byte _080C5196 -_080C4F4C: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - bl sub_80C0E20 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_80C07E4 - adds r2, r0, 0 - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_80C4398 - movs r0, 0 - movs r1, 0 - bl sub_80C3008 - movs r0, 0x1 - movs r1, 0x1 - bl sub_80C41D8 - movs r0, 0 - bl sub_80C3154 - movs r0, 0 - bl sub_80C4324 - b _080C51A6 -_080C4F92: - movs r0, 0x2 - bl sub_80C0E04 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C4FAE - bl sub_80C07E4 - adds r1, r0, 0 - adds r0, r5, 0 - bl sub_80C2208 - b _080C51A6 -_080C4FAE: - movs r0, 0 - bl ShowBg - movs r0, 0x3 - bl ShowBg - movs r0, 0x1 - bl ShowBg - ldr r0, _080C4FE8 @ =gUnknown_8418EB5 - bl sub_80C4E18 - bl sub_80C0E20 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x19 - movs r2, 0 - bl sub_80C48BC - bl sub_80C0E20 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x19 - movs r2, 0 - bl sub_80C4960 - b _080C51A6 - .align 2, 0 -_080C4FE8: .4byte gUnknown_8418EB5 -_080C4FEC: - ldr r0, _080C4FFC @ =gUnknown_8418EB0 - bl sub_80C4E74 - movs r0, 0 - bl sub_80C4ED0 - b _080C51A6 - .align 2, 0 -_080C4FFC: .4byte gUnknown_8418EB0 -_080C5000: - ldr r0, _080C5024 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080C500E - b _080C51DC -_080C500E: - bl sub_80C0B18 - movs r0, 0 - bl PutWindowTilemap - bl sub_80C0BB0 - movs r0, 0x1 - bl PutWindowTilemap - b _080C51A6 - .align 2, 0 -_080C5024: .4byte gPaletteFade -_080C5028: - bl sub_80C3400 - lsls r0, 24 - lsrs r0, 24 - subs r0, 0x1 - cmp r0, 0x5 - bls _080C5038 - b _080C51DC -_080C5038: - lsls r0, 2 - ldr r1, _080C5044 @ =_080C5048 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C5044: .4byte _080C5048 - .align 2, 0 -_080C5048: - .4byte _080C51DC - .4byte _080C51DC - .4byte _080C5070 - .4byte _080C50F8 - .4byte _080C5168 - .4byte _080C5060 -_080C5060: - ldr r0, _080C506C @ =gUnknown_20399FC - ldr r1, [r0] - movs r0, 0x6 - strb r0, [r1] - b _080C51DC - .align 2, 0 -_080C506C: .4byte gUnknown_20399FC -_080C5070: - movs r0, 0 - bl sub_80C3AC8 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _080C5086 - movs r0, 0x66 - bl PlaySE - b _080C508A -_080C5086: - bl sub_80C0450 -_080C508A: - bl sub_80C3178 - bl sub_80C0B18 - bl sub_80C0BB0 - bl sub_80C0B9C - bl sub_80C3508 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x15 - bne _080C50C4 - bl sub_80C3514 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xD - bne _080C50C4 - movs r0, 0xE1 - bl PlaySE - ldr r0, _080C50C0 @ =gUnknown_8418E95 - bl sub_80C4E74 - b _080C51DC - .align 2, 0 -_080C50C0: .4byte gUnknown_8418E95 -_080C50C4: - movs r0, 0 - bl sub_80C3AC8 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - beq _080C50E0 - movs r0, 0 - bl sub_80C3AC8 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bne _080C50EC -_080C50E0: - ldr r0, _080C50E8 @ =gUnknown_8418EB0 - bl sub_80C4E74 - b _080C51DC - .align 2, 0 -_080C50E8: .4byte gUnknown_8418EB0 -_080C50EC: - ldr r0, _080C50F4 @ =gUnknown_8418E8B - bl sub_80C4E74 - b _080C51DC - .align 2, 0 -_080C50F4: .4byte gUnknown_8418E8B -_080C50F8: - movs r0, 0 - bl sub_80C3AC8 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - beq _080C5114 - movs r0, 0 - bl sub_80C3AC8 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bne _080C51DC -_080C5114: - movs r0, 0x3 - bl sub_80C0E04 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x1 - bne _080C51DC - ldr r0, _080C514C @ =gSaveBlock1Ptr - ldr r1, [r0] - movs r0, 0x4 - ldrsb r0, [r1, r0] - ldrb r1, [r1, 0x5] - lsls r1, 24 - asrs r1, 24 - bl get_map_light_level_by_bank_and_number - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - beq _080C5140 - cmp r0, 0x8 - bne _080C5154 -_080C5140: - ldr r2, _080C5150 @ =gUnknown_20399FC - ldr r1, [r2] - movs r0, 0 - strb r0, [r1, 0x2] - ldr r1, [r2] - b _080C51AA - .align 2, 0 -_080C514C: .4byte gSaveBlock1Ptr -_080C5150: .4byte gUnknown_20399FC -_080C5154: - movs r0, 0x1 - bl PlaySE - ldr r1, _080C5164 @ =gUnknown_20399FC - ldr r0, [r1] - strb r4, [r0, 0x2] - ldr r1, [r1] - b _080C51AA - .align 2, 0 -_080C5164: .4byte gUnknown_20399FC -_080C5168: - bl sub_80C0E20 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080C517C @ =sub_80C07F8 - adds r1, r5, 0 - bl sub_80C0E70 - b _080C51DC - .align 2, 0 -_080C517C: .4byte sub_80C07F8 -_080C5180: - movs r0, 0x2 - bl sub_80C0E04 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C51A6 - adds r0, r5, 0 - bl sub_80C2C1C - b _080C51A6 -_080C5196: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade -_080C51A6: - ldr r0, _080C51B4 @ =gUnknown_20399FC - ldr r1, [r0] -_080C51AA: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _080C51DC - .align 2, 0 -_080C51B4: .4byte gUnknown_20399FC -_080C51B8: - ldr r0, _080C51E4 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080C51DC - ldrb r0, [r2, 0x2] - cmp r0, 0x1 - bne _080C51D6 - bl sub_80C3520 - lsls r0, 16 - lsrs r0, 16 - bl sub_80C527C -_080C51D6: - adds r0, r5, 0 - bl sub_80C5208 -_080C51DC: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C51E4: .4byte gPaletteFade - thumb_func_end sub_80C4F08 - - thumb_func_start sub_80C51E8 -sub_80C51E8: @ 80C51E8 - push {r4,lr} - ldr r4, _080C5204 @ =gUnknown_20399FC - movs r0, 0x4 - bl AllocZeroed - str r0, [r4] - movs r1, 0 - strb r1, [r0] - ldr r0, [r4] - strb r1, [r0, 0x1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C5204: .4byte gUnknown_20399FC - thumb_func_end sub_80C51E8 - - thumb_func_start sub_80C5208 -sub_80C5208: @ 80C5208 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - movs r0, 0x2 - bl sub_80C0E04 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C5220 - bl sub_80C25BC -_080C5220: - bl sub_80C4A04 - bl sub_80C3188 - bl sub_80C4348 - bl sub_80C4D30 - bl sub_80C0898 - adds r0, r4, 0 - bl DestroyTask - bl FreeAllWindowBuffers - ldr r0, _080C5250 @ =gUnknown_20399FC - ldr r0, [r0] - ldrb r0, [r0, 0x2] - cmp r0, 0x1 - bne _080C5258 - ldr r0, _080C5254 @ =CB2_ReturnToField - bl SetMainCallback2 - b _080C525E - .align 2, 0 -_080C5250: .4byte gUnknown_20399FC -_080C5254: .4byte CB2_ReturnToField -_080C5258: - ldr r0, _080C5274 @ =CB2_ReturnToPartyMenuFromFlyMap - bl SetMainCallback2 -_080C525E: - ldr r4, _080C5278 @ =gUnknown_20399FC - ldr r0, [r4] - cmp r0, 0 - beq _080C526E - bl Free - movs r0, 0 - str r0, [r4] -_080C526E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C5274: .4byte CB2_ReturnToPartyMenuFromFlyMap -_080C5278: .4byte gUnknown_20399FC - thumb_func_end sub_80C5208 - - thumb_func_start sub_80C527C -sub_80C527C: @ 80C527C - push {r4,r5,lr} - lsls r0, 16 - ldr r1, _080C52A4 @ =0xffa80000 - adds r0, r1 - lsrs r0, 16 - ldr r5, _080C52A8 @ =gUnknown_83F2EE0 - lsls r1, r0, 1 - adds r4, r1, r0 - adds r0, r5, 0x2 - adds r1, r4, r0 - ldrb r0, [r1] - cmp r0, 0 - beq _080C52AC - bl sub_805546C - adds r0, r4, r5 - bl sub_8124C1C - b _080C52C6 - .align 2, 0 -_080C52A4: .4byte 0xffa80000 -_080C52A8: .4byte gUnknown_83F2EE0 -_080C52AC: - adds r0, r4, r5 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - adds r1, r5, 0x1 - adds r1, r4, r1 - ldrb r1, [r1] - lsls r1, 24 - asrs r1, 24 - movs r2, 0x1 - negs r2, r2 - bl warp1_set_2 -_080C52C6: - bl sub_80842C8 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80C527C - thumb_func_start sub_80C52D0 sub_80C52D0: @ 80C52D0 push {lr} diff --git a/include/field_effect.h b/include/field_effect.h index 4afc5cace..c2d14d43c 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -23,5 +23,6 @@ void sub_80853CC(u8 a0); void sub_8083598(u8 a0); void sub_8083A5C(struct Sprite * sprite, u8 spriteId); u8 sub_8083970(u16 species, s16 x, s16 y, bool8 unused); +void sub_80842C8(void); #endif //GUARD_FIELD_EFFECTS_H diff --git a/include/overworld.h b/include/overworld.h index 04d28701c..324150779 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -149,5 +149,6 @@ void sub_8055778(int); void sub_8055738(u8 loc); void sub_8056078(void *, void *); +void sub_805546C(u8 a0); #endif //GUARD_OVERWORLD_H diff --git a/include/region_map.h b/include/region_map.h index 76195a3af..bc5f789bd 100644 --- a/include/region_map.h +++ b/include/region_map.h @@ -24,76 +24,10 @@ enum { MAPSECTYPE_CITY_CANTFLY, }; -struct RegionMap { - /*0x000*/ u16 mapSecId; - /*0x002*/ u8 iconDrawType; - /*0x003*/ u8 posWithinMapSec; - /*0x004*/ u8 mapSecName[0x14]; - /*0x018*/ u8 (*inputCallback)(void); - /*0x01c*/ struct Sprite *cursorSprite; - /*0x020*/ struct Sprite *playerIconSprite; - /*0x024*/ s32 bg2x; - /*0x028*/ s32 bg2y; - /*0x02c*/ u32 bg2pa; - /*0x034*/ u32 bg2pc; - /*0x030*/ u32 bg2pb; - /*0x038*/ u32 bg2pd; - /*0x03c*/ s32 unk_03c; - /*0x040*/ s32 unk_040; - /*0x044*/ s32 unk_044; - /*0x048*/ s32 unk_048; - /*0x04c*/ s32 unk_04c; - /*0x050*/ s32 unk_050; - /*0x054*/ u16 cursorPosX; - /*0x056*/ u16 cursorPosY; - /*0x058*/ u16 cursorTileTag; - /*0x05a*/ u16 cursorPaletteTag; - /*0x05c*/ s16 scrollX; - /*0x05e*/ s16 scrollY; - /*0x060*/ s16 unk_060; - /*0x062*/ s16 unk_062; - /*0x064*/ u16 zoomedCursorPosX; - /*0x066*/ u16 zoomedCursorPosY; - /*0x068*/ s16 zoomedCursorDeltaY; - /*0x06a*/ s16 zoomedCursorDeltaX; - /*0x06c*/ u16 zoomedCursorMovementFrameCounter; - /*0x06e*/ u16 unk_06e; - /*0x070*/ u16 playerIconTileTag; - /*0x072*/ u16 playerIconPaletteTag; - /*0x074*/ u16 playerIconSpritePosX; - /*0x076*/ u16 playerIconSpritePosY; - /*0x078*/ bool8 zoomed; - /*0x079*/ u8 initStep; - /*0x07a*/ s8 cursorMovementFrameCounter; - /*0x07b*/ s8 cursorDeltaX; - /*0x07c*/ s8 cursorDeltaY; - /*0x07d*/ bool8 needUpdateVideoRegs; - /*0x07e*/ bool8 blinkPlayerIcon; - /*0x07f*/ bool8 playerIsInCave; - /*0x080*/ u8 bgNum; - /*0x081*/ u8 charBaseIdx; - /*0x082*/ u8 mapBaseIdx; - /*0x083*/ bool8 bgManaged; - /*0x084*/ u8 filler_084[0x100]; - /*0x184*/ u8 cursorSmallImage[0x100]; - /*0x284*/ u8 cursorLargeImage[0x600]; -}; // size = 0x884 - // Exported RAM declarations // Exported ROM declarations -void sub_8122CF8(struct RegionMap *regionMap, struct BgTemplate *template, bool8 zoomed); -bool8 sub_8122DB0(void); -void UpdateRegionMapVideoRegs(void); -void InitRegionMap(struct RegionMap *regionMap, u8 argument); -u8 sub_81230AC(void); -bool8 sub_8123514(void); -void FreeRegionMapIconResources(void); -u16 GetRegionMapSectionIdAt(u16 x, u16 y); -void CreateRegionMapPlayerIcon(u16 x, u16 y); -void CreateRegionMapCursor(u16 tileTag, u16 paletteTag); u8 *GetMapName(u8 *dest, u16 mapsec, u16 fill); -bool32 sub_8124668(u8 mapSecId); u8 *GetMapNameGeneric(u8 *dest, u16 mapsec); void sub_80BFF50(u8 a0, void (*a1)(void)); void MCB2_FlyMap(void); diff --git a/src/region_map.c b/src/region_map.c index 6678a226a..f997791ba 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -10,6 +10,8 @@ #include "region_map.h" #include "window.h" #include "sound.h" +#include "party_menu.h" +#include "field_effect.h" #include "new_menu_helpers.h" #include "menu.h" #include "string_util.h" @@ -160,7 +162,7 @@ struct UnkStruct_20399E4 struct Sprite * field_01C; u16 field_020; u16 field_022; - u16 field_024[0x080]; + u16 field_024[0x80]; }; // size = 0x124 struct UnkStruct_20399E8 @@ -208,6 +210,13 @@ struct UnkStruct_20399F0 u16 win1v; }; +struct UnkStruct_20399FC +{ + u8 field_0; + u8 field_1; + u8 field_2; +}; + EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL; EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL; EWRAM_DATA struct UnkStruct_20399DC * gUnknown_20399DC = NULL; @@ -216,7 +225,7 @@ EWRAM_DATA struct UnkStruct_20399E4 * gUnknown_20399E4 = NULL; EWRAM_DATA struct UnkStruct_20399E8 * gUnknown_20399E8 = NULL; EWRAM_DATA struct UnkStruct_20399EC * gUnknown_20399EC = NULL; EWRAM_DATA struct UnkStruct_20399F0 * gUnknown_20399F0[3] = {}; -EWRAM_DATA void * gUnknown_20399FC = NULL; +EWRAM_DATA struct UnkStruct_20399FC * gUnknown_20399FC = NULL; static void sub_80BFFD0(void); void sub_80C0100(void); @@ -315,6 +324,9 @@ void sub_80C4E18(const u8 *str); void sub_80C4E74(const u8 *str); void sub_80C4ED0(bool8 a0); void sub_80C4F08(u8 taskId); +void sub_80C51E8(void); +void sub_80C5208(u8 taskId); +void sub_80C527C(u16 a0); #include "data/text/map_section_names.h" extern const u16 gUnknown_83EF23C[]; @@ -375,6 +387,7 @@ extern const union AnimCmd *const gUnknown_83F1C94[]; extern const union AnimCmd *const gUnknown_83F1C98[]; extern const u16 gUnknown_83F1CA0[]; extern const u8 gUnknown_83F1CA4[][2]; +extern const u8 gUnknown_83F1CA8[]; extern const u8 *const gUnknown_83F1CAC[]; extern const u16 gUnknown_83F1E60[][2]; extern const u16 gUnknown_83F2178[][2]; @@ -382,6 +395,7 @@ extern const u8 gUnknown_83F2490[][15][22]; extern const u8 gUnknown_83F2724[][15][22]; extern const u8 gUnknown_83F29B8[][15][22]; extern const u8 gUnknown_83F2C4C[][15][22]; +extern const u8 gUnknown_83F2EE0[][3]; static void RegionMap_DarkenPalette(u16 *pal, u16 size, u16 tint) { @@ -3269,3 +3283,202 @@ u8 *sub_80C4E08(u8 *dest, u16 mapsec) { return GetMapNameGeneric(dest, mapsec); } + +void sub_80C4E18(const u8 *str) +{ + if (gUnknown_20399D4->field_4797[2] == 1) + FillWindowPixelBuffer(3, PIXEL_FILL(0)); + else + FillWindowPixelBuffer(3, PIXEL_FILL(15)); + AddTextPrinterParameterized3(3, 0, 0, 0, gUnknown_83F1CA8, 0, str); + CopyWindowToVram(3, 2); +} + +void sub_80C4E74(const u8 *str) +{ + if (gUnknown_20399D4->field_4797[2] == 1) + FillWindowPixelBuffer(4, PIXEL_FILL(0)); + else + FillWindowPixelBuffer(4, PIXEL_FILL(15)); + AddTextPrinterParameterized3(4, 0, 0, 0, gUnknown_83F1CA8, 0, str); + CopyWindowToVram(4, 3); +} + +void sub_80C4ED0(bool8 mode) +{ + if (!mode) + { + PutWindowTilemap(3); + PutWindowTilemap(4); + } + else + { + ClearWindowTilemap(3); + ClearWindowTilemap(4); + } +} + +void MCB2_FlyMap(void) +{ + sub_80C51E8(); + sub_80BFEDC(2); +} + +void sub_80C4F08(u8 taskId) +{ + switch (gUnknown_20399FC->field_0) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + sub_80C4398(sub_80C0E20(), taskId, sub_80C07E4()); + sub_80C3008(0, 0); + sub_80C41D8(1, 1); + sub_80C3154(FALSE); + sub_80C4324(FALSE); + gUnknown_20399FC->field_0++; + break; + case 1: + if (sub_80C0E04(2) == TRUE) + { + sub_80C2208(taskId, sub_80C07E4()); + } + else + { + ShowBg(0); + ShowBg(3); + ShowBg(1); + sub_80C4E18(gUnknown_8418EB5); + sub_80C48BC(sub_80C0E20(), 25, FALSE); + sub_80C4960(sub_80C0E20(), 25, FALSE); + } + gUnknown_20399FC->field_0++; + break; + case 2: + sub_80C4E74(gUnknown_8418EB0); + sub_80C4ED0(FALSE); + gUnknown_20399FC->field_0++; + break; + case 3: + if (!gPaletteFade.active) + { + sub_80C0B18(); + PutWindowTilemap(0); + sub_80C0BB0(); + PutWindowTilemap(1); + gUnknown_20399FC->field_0++; + } + break; + case 4: + switch (sub_80C3400()) + { + case 1: + case 2: + break; + case 6: + gUnknown_20399FC->field_0 = 6; + break; + case 3: + if (sub_80C3AC8(0) == 2) + PlaySE(SE_Z_PAGE); + else + sub_80C0450(); + sub_80C3178(); + sub_80C0B18(); + sub_80C0BB0(); + sub_80C0B9C(); + if (sub_80C3508() == 21 && sub_80C3514() == 13) + { + PlaySE(SE_W255); + sub_80C4E74(gUnknown_8418E95); + } + else if (sub_80C3AC8(0) == 2 || sub_80C3AC8(0) == 4) + { + sub_80C4E74(gUnknown_8418EB0); + } + else + { + sub_80C4E74(gUnknown_8418E8B); + } + break; + case 4: + if ((sub_80C3AC8(0) == 2 || sub_80C3AC8(0) == 4) && sub_80C0E04(3) == TRUE) + { + switch (get_map_light_level_by_bank_and_number(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum)) + { + case 4: + case 8: + gUnknown_20399FC->field_2 = FALSE; + gUnknown_20399FC->field_0++; + break; + default: + PlaySE(SE_KAIFUKU); + gUnknown_20399FC->field_2 = TRUE; + gUnknown_20399FC->field_0++; + break; + } + } + break; + case 5: + sub_80C0E70(sub_80C0E20(), taskId, sub_80C07F8); + break; + } + break; + case 5: + if (sub_80C0E04(2) == TRUE) + sub_80C2C1C(taskId); + gUnknown_20399FC->field_0++; + break; + case 6: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gUnknown_20399FC->field_0++; + break; + default: + if (!gPaletteFade.active) + { + if (gUnknown_20399FC->field_2 == TRUE) + sub_80C527C(sub_80C3520()); + sub_80C5208(taskId); + } + break; + } +} + +void sub_80C51E8(void) +{ + gUnknown_20399FC = AllocZeroed(sizeof(struct UnkStruct_20399FC)); + gUnknown_20399FC->field_0 = 0; + gUnknown_20399FC->field_1 = 0; +} + +void sub_80C5208(u8 taskId) +{ + if (sub_80C0E04(2) == TRUE) + sub_80C25BC(); + sub_80C4A04(); + sub_80C3188(); + sub_80C4348(); + sub_80C4D30(); + sub_80C0898(); + DestroyTask(taskId); + FreeAllWindowBuffers(); + if (gUnknown_20399FC->field_2 == TRUE) + SetMainCallback2(CB2_ReturnToField); + else + SetMainCallback2(CB2_ReturnToPartyMenuFromFlyMap); + FREE_IF_NOT_NULL(gUnknown_20399FC); +} + +void sub_80C527C(u16 mapsec) +{ + u16 idx = mapsec - MAPSECS_KANTO; + if (gUnknown_83F2EE0[idx][2]) + { + sub_805546C(gUnknown_83F2EE0[idx][2]); + sub_8124C1C(gUnknown_83F2EE0[idx]); + } + else + { + warp1_set_2(gUnknown_83F2EE0[idx][0], gUnknown_83F2EE0[idx][1], -1); + } + sub_80842C8(); +} -- cgit v1.2.3 From 4b0befea41350d6da1f4e6e3d2841242e3167d82 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 7 Jan 2020 16:42:53 -0500 Subject: Split out image_processing_effects --- asm/image_processing_effects.s | 3486 +++++++++++++++++++++++++++++++++++++++ asm/region_map.s | 3486 --------------------------------------- data/image_processing_effects.s | 3204 +++++++++++++++++++++++++++++++++++ data/region_map.s | 3202 ----------------------------------- ld_script.txt | 3 +- 5 files changed, 6692 insertions(+), 6689 deletions(-) create mode 100644 asm/image_processing_effects.s delete mode 100644 asm/region_map.s create mode 100644 data/image_processing_effects.s diff --git a/asm/image_processing_effects.s b/asm/image_processing_effects.s new file mode 100644 index 000000000..1f63bde6c --- /dev/null +++ b/asm/image_processing_effects.s @@ -0,0 +1,3486 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start sub_80C52D0 +sub_80C52D0: @ 80C52D0 + push {lr} + ldr r2, _080C5318 @ =gUnknown_3005334 + ldr r1, [r0, 0x4] + str r1, [r2] + ldr r2, _080C531C @ =gUnknown_3005348 + ldrb r1, [r0, 0x1F] + strb r1, [r2] + ldr r2, _080C5320 @ =gUnknown_3005330 + ldrb r1, [r0, 0x19] + strb r1, [r2] + ldr r2, _080C5324 @ =gUnknown_3005344 + ldrb r1, [r0, 0x1A] + strb r1, [r2] + ldr r2, _080C5328 @ =gUnknown_3005340 + ldrb r1, [r0, 0x1B] + strb r1, [r2] + ldr r2, _080C532C @ =gUnknown_3005338 + ldrb r1, [r0, 0x1C] + strb r1, [r2] + ldr r2, _080C5330 @ =gUnknown_300534C + ldrb r1, [r0, 0x1D] + strb r1, [r2] + ldr r2, _080C5334 @ =gUnknown_300533C + ldrb r1, [r0, 0x1E] + strb r1, [r2] + ldrb r0, [r0] + subs r0, 0x2 + cmp r0, 0x22 + bls _080C530C + b _080C5458 +_080C530C: + lsls r0, 2 + ldr r1, _080C5338 @ =_080C533C + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_080C5318: .4byte gUnknown_3005334 +_080C531C: .4byte gUnknown_3005348 +_080C5320: .4byte gUnknown_3005330 +_080C5324: .4byte gUnknown_3005344 +_080C5328: .4byte gUnknown_3005340 +_080C532C: .4byte gUnknown_3005338 +_080C5330: .4byte gUnknown_300534C +_080C5334: .4byte gUnknown_300533C +_080C5338: .4byte _080C533C + .align 2, 0 +_080C533C: + .4byte _080C53C8 + .4byte _080C5458 + .4byte _080C5458 + .4byte _080C5458 + .4byte _080C5428 + .4byte _080C5458 + .4byte _080C53CE + .4byte _080C53D4 + .4byte _080C53E8 + .4byte _080C53FA + .4byte _080C5458 + .4byte _080C5410 + .4byte _080C5458 + .4byte _080C5458 + .4byte _080C5458 + .4byte _080C5458 + .4byte _080C5458 + .4byte _080C5458 + .4byte _080C5458 + .4byte _080C5458 + .4byte _080C5458 + .4byte _080C5458 + .4byte _080C5458 + .4byte _080C5458 + .4byte _080C5458 + .4byte _080C5458 + .4byte _080C5458 + .4byte _080C5458 + .4byte _080C5416 + .4byte _080C53F4 + .4byte _080C541C + .4byte _080C5422 + .4byte _080C5458 + .4byte _080C5458 + .4byte _080C5434 +_080C53C8: + bl sub_80C55D4 + b _080C5458 +_080C53CE: + bl sub_80C568C + b _080C5458 +_080C53D4: + bl sub_80C5884 + ldr r0, _080C53E4 @ =gUnknown_3005348 + ldrb r0, [r0] + bl sub_80C5748 + b _080C5458 + .align 2, 0 +_080C53E4: .4byte gUnknown_3005348 +_080C53E8: + bl sub_80C5884 + bl sub_80C59D4 + bl sub_80C57EC +_080C53F4: + bl sub_80C59D4 + b _080C5458 +_080C53FA: + bl sub_80C5884 + bl sub_80C5B9C + bl sub_80C5B9C + bl sub_80C5C44 + bl sub_80C57EC + b _080C5458 +_080C5410: + bl sub_80C5A6C + b _080C5458 +_080C5416: + bl sub_80C5884 + b _080C5458 +_080C541C: + bl sub_80C5B9C + b _080C5458 +_080C5422: + bl sub_80C5C44 + b _080C5458 +_080C5428: + bl sub_80C55F4 + movs r0, 0x3 + bl sub_80C545C + b _080C5458 +_080C5434: + bl sub_80C5884 + bl sub_80C5B9C + bl sub_80C5C44 + bl sub_80C57EC + bl sub_80C568C + bl sub_80C568C + movs r0, 0x2 + bl sub_80C545C + movs r0, 0x4 + bl sub_80C5514 +_080C5458: + pop {r0} + bx r0 + thumb_func_end sub_80C52D0 + + thumb_func_start sub_80C545C +sub_80C545C: @ 80C545C + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + lsls r0, 24 + lsrs r7, r0, 24 + movs r2, 0 + ldr r0, _080C54FC @ =gUnknown_3005338 + mov r8, r0 + ldrb r0, [r0] + cmp r2, r0 + bcs _080C54EE + ldr r1, _080C5500 @ =gUnknown_3005340 + mov r12, r1 + ldr r3, _080C5504 @ =gUnknown_300534C + mov r10, r3 + ldr r0, _080C5508 @ =gUnknown_3005330 + mov r9, r0 +_080C5482: + ldr r1, _080C550C @ =gUnknown_3005344 + ldrb r0, [r1] + adds r0, r2 + mov r3, r10 + ldrb r1, [r3] + muls r0, r1 + lsls r0, 1 + ldr r3, _080C5510 @ =gUnknown_3005334 + ldr r1, [r3] + adds r1, r0 + mov r3, r9 + ldrb r0, [r3] + lsls r0, 1 + adds r3, r1, r0 + movs r4, 0 + adds r5, r2, 0x1 + mov r0, r12 + ldrb r0, [r0] + cmp r4, r0 + bcs _080C54E2 + movs r6, 0x80 + lsls r6, 8 +_080C54AE: + ldrh r1, [r3] + adds r0, r6, 0 + ands r0, r1 + cmp r0, 0 + bne _080C54D2 + movs r0, 0x1F + ands r0, r1 + adds r0, r7 + lsls r0, 24 + lsrs r2, r0, 24 + cmp r2, 0x1F + bls _080C54C8 + movs r2, 0x1F +_080C54C8: + lsls r0, r2, 10 + lsls r1, r2, 5 + orrs r0, r1 + orrs r0, r2 + strh r0, [r3] +_080C54D2: + adds r0, r4, 0x1 + lsls r0, 24 + lsrs r4, r0, 24 + adds r3, 0x2 + mov r1, r12 + ldrb r1, [r1] + cmp r4, r1 + bcc _080C54AE +_080C54E2: + lsls r0, r5, 24 + lsrs r2, r0, 24 + mov r3, r8 + ldrb r3, [r3] + cmp r2, r3 + bcc _080C5482 +_080C54EE: + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080C54FC: .4byte gUnknown_3005338 +_080C5500: .4byte gUnknown_3005340 +_080C5504: .4byte gUnknown_300534C +_080C5508: .4byte gUnknown_3005330 +_080C550C: .4byte gUnknown_3005344 +_080C5510: .4byte gUnknown_3005334 + thumb_func_end sub_80C545C + + thumb_func_start sub_80C5514 +sub_80C5514: @ 80C5514 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + lsls r0, 24 + lsrs r0, 24 + mov r8, r0 + movs r2, 0 + ldr r0, _080C55BC @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r2, r0 + bcs _080C55AC + ldr r1, _080C55C0 @ =gUnknown_3005340 + mov r10, r1 +_080C5532: + ldr r3, _080C55C4 @ =gUnknown_3005344 + ldrb r0, [r3] + adds r0, r2 + ldr r3, _080C55C8 @ =gUnknown_300534C + ldrb r1, [r3] + muls r0, r1 + lsls r0, 1 + ldr r3, _080C55CC @ =gUnknown_3005334 + ldr r1, [r3] + adds r1, r0 + ldr r3, _080C55D0 @ =gUnknown_3005330 + ldrb r0, [r3] + lsls r0, 1 + adds r3, r1, r0 + movs r5, 0 + adds r7, r2, 0x1 + mov r0, r10 + ldrb r0, [r0] + cmp r5, r0 + bcs _080C55A0 + movs r1, 0x80 + lsls r1, 8 + mov r9, r1 + movs r0, 0x1F + mov r12, r0 + mov r1, r8 + subs r6, r0, r1 +_080C5568: + ldrh r1, [r3] + mov r0, r9 + ands r0, r1 + cmp r0, 0 + bne _080C5590 + movs r4, 0x1F + mov r2, r12 + ands r2, r1 + cmp r2, r6 + ble _080C5586 + mov r1, r8 + lsrs r0, r1, 1 + subs r0, r4, r0 + lsls r0, 24 + lsrs r2, r0, 24 +_080C5586: + lsls r0, r2, 10 + lsls r1, r2, 5 + orrs r0, r1 + orrs r0, r2 + strh r0, [r3] +_080C5590: + adds r0, r5, 0x1 + lsls r0, 24 + lsrs r5, r0, 24 + adds r3, 0x2 + mov r0, r10 + ldrb r0, [r0] + cmp r5, r0 + bcc _080C5568 +_080C55A0: + lsls r0, r7, 24 + lsrs r2, r0, 24 + ldr r1, _080C55BC @ =gUnknown_3005338 + ldrb r1, [r1] + cmp r2, r1 + bcc _080C5532 +_080C55AC: + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080C55BC: .4byte gUnknown_3005338 +_080C55C0: .4byte gUnknown_3005340 +_080C55C4: .4byte gUnknown_3005344 +_080C55C8: .4byte gUnknown_300534C +_080C55CC: .4byte gUnknown_3005334 +_080C55D0: .4byte gUnknown_3005330 + thumb_func_end sub_80C5514 + + thumb_func_start sub_80C55D4 +sub_80C55D4: @ 80C55D4 + push {r4,r5,lr} + movs r4, 0 + ldr r5, _080C55F0 @ =0x00000c7f +_080C55DA: + lsls r0, r4, 16 + lsrs r0, 16 + bl sub_80C5CF8 + adds r4, 0x1 + cmp r4, r5 + bls _080C55DA + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080C55F0: .4byte 0x00000c7f + thumb_func_end sub_80C55D4 + + thumb_func_start sub_80C55F4 +sub_80C55F4: @ 80C55F4 + push {r4-r7,lr} + mov r7, r8 + push {r7} + sub sp, 0x4 + movs r2, 0 + ldr r0, _080C5674 @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r2, r0 + bcs _080C5666 + ldr r0, _080C5678 @ =gUnknown_3005334 + mov r8, r0 + ldr r3, _080C567C @ =gUnknown_3005340 +_080C560C: + ldr r0, _080C5680 @ =gUnknown_3005344 + ldrb r1, [r0] + adds r1, r2 + ldr r0, _080C5684 @ =gUnknown_300534C + ldrb r0, [r0] + muls r0, r1 + lsls r0, 1 + mov r4, r8 + ldr r1, [r4] + adds r1, r0 + ldr r0, _080C5688 @ =gUnknown_3005330 + ldrb r0, [r0] + lsls r0, 1 + adds r4, r1, r0 + movs r5, 0 + adds r6, r2, 0x1 + ldrb r0, [r3] + cmp r5, r0 + bcs _080C565A + movs r0, 0x80 + lsls r0, 8 + adds r7, r0, 0 +_080C5638: + ldrh r0, [r4] + ands r0, r7 + cmp r0, 0 + bne _080C564C + adds r0, r4, 0 + str r3, [sp] + bl sub_80C5ECC + strh r0, [r4] + ldr r3, [sp] +_080C564C: + adds r0, r5, 0x1 + lsls r0, 24 + lsrs r5, r0, 24 + adds r4, 0x2 + ldrb r0, [r3] + cmp r5, r0 + bcc _080C5638 +_080C565A: + lsls r0, r6, 24 + lsrs r2, r0, 24 + ldr r0, _080C5674 @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r2, r0 + bcc _080C560C +_080C5666: + add sp, 0x4 + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080C5674: .4byte gUnknown_3005338 +_080C5678: .4byte gUnknown_3005334 +_080C567C: .4byte gUnknown_3005340 +_080C5680: .4byte gUnknown_3005344 +_080C5684: .4byte gUnknown_300534C +_080C5688: .4byte gUnknown_3005330 + thumb_func_end sub_80C55F4 + + thumb_func_start sub_80C568C +sub_80C568C: @ 80C568C + push {r4-r7,lr} + mov r7, r8 + push {r7} + sub sp, 0x8 + movs r2, 0 + ldr r0, _080C5730 @ =gUnknown_3005340 + ldrb r0, [r0] + cmp r2, r0 + bcs _080C5722 + ldr r0, _080C5734 @ =gUnknown_3005334 + mov r8, r0 + ldr r3, _080C5738 @ =gUnknown_300534C +_080C56A4: + ldr r0, _080C573C @ =gUnknown_3005344 + ldrb r1, [r0] + ldrb r0, [r3] + muls r0, r1 + lsls r0, 1 + mov r4, r8 + ldr r1, [r4] + adds r1, r0 + ldr r0, _080C5740 @ =gUnknown_3005330 + ldrb r0, [r0] + adds r0, r2 + lsls r0, 1 + adds r4, r1, r0 + ldrh r1, [r4] + mov r0, sp + strh r1, [r0] + movs r5, 0x1 + ldrb r0, [r3] + lsls r0, 1 + adds r4, r0 + ldr r0, _080C5744 @ =gUnknown_3005338 + ldrb r0, [r0] + subs r0, 0x1 + adds r7, r2, 0x1 + cmp r5, r0 + bge _080C5716 + ldr r6, _080C5738 @ =gUnknown_300534C +_080C56DA: + ldrh r0, [r4] + movs r2, 0x80 + lsls r2, 8 + adds r1, r2, 0 + ands r0, r1 + cmp r0, 0 + bne _080C5700 + ldrb r2, [r6] + lsls r2, 1 + adds r2, r4, r2 + mov r0, sp + adds r1, r4, 0 + str r3, [sp, 0x4] + bl sub_80C61BC + strh r0, [r4] + mov r1, sp + strh r0, [r1] + ldr r3, [sp, 0x4] +_080C5700: + adds r0, r5, 0x1 + lsls r0, 24 + lsrs r5, r0, 24 + ldrb r0, [r6] + lsls r0, 1 + adds r4, r0 + ldr r0, _080C5744 @ =gUnknown_3005338 + ldrb r0, [r0] + subs r0, 0x1 + cmp r5, r0 + blt _080C56DA +_080C5716: + lsls r0, r7, 24 + lsrs r2, r0, 24 + ldr r0, _080C5730 @ =gUnknown_3005340 + ldrb r0, [r0] + cmp r2, r0 + bcc _080C56A4 +_080C5722: + add sp, 0x8 + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080C5730: .4byte gUnknown_3005340 +_080C5734: .4byte gUnknown_3005334 +_080C5738: .4byte gUnknown_300534C +_080C573C: .4byte gUnknown_3005344 +_080C5740: .4byte gUnknown_3005330 +_080C5744: .4byte gUnknown_3005338 + thumb_func_end sub_80C568C + + thumb_func_start sub_80C5748 +sub_80C5748: @ 80C5748 + push {r4-r7,lr} + mov r7, r9 + mov r6, r8 + push {r6,r7} + sub sp, 0x4 + lsls r0, 24 + lsrs r0, 24 + mov r8, r0 + movs r2, 0 + ldr r0, _080C57D4 @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r2, r0 + bcs _080C57C4 + ldr r0, _080C57D8 @ =gUnknown_3005334 + mov r9, r0 + ldr r3, _080C57DC @ =gUnknown_3005340 +_080C5768: + ldr r0, _080C57E0 @ =gUnknown_3005344 + ldrb r1, [r0] + adds r1, r2 + ldr r0, _080C57E4 @ =gUnknown_300534C + ldrb r0, [r0] + muls r0, r1 + lsls r0, 1 + mov r4, r9 + ldr r1, [r4] + adds r1, r0 + ldr r0, _080C57E8 @ =gUnknown_3005330 + ldrb r0, [r0] + lsls r0, 1 + adds r4, r1, r0 + movs r5, 0 + adds r6, r2, 0x1 + ldrb r0, [r3] + cmp r5, r0 + bcs _080C57B8 + movs r0, 0x80 + lsls r0, 8 + adds r7, r0, 0 +_080C5794: + ldrh r0, [r4] + ands r0, r7 + cmp r0, 0 + bne _080C57AA + adds r0, r4, 0 + mov r1, r8 + str r3, [sp] + bl sub_80C5F00 + strh r0, [r4] + ldr r3, [sp] +_080C57AA: + adds r0, r5, 0x1 + lsls r0, 24 + lsrs r5, r0, 24 + adds r4, 0x2 + ldrb r0, [r3] + cmp r5, r0 + bcc _080C5794 +_080C57B8: + lsls r0, r6, 24 + lsrs r2, r0, 24 + ldr r0, _080C57D4 @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r2, r0 + bcc _080C5768 +_080C57C4: + add sp, 0x4 + pop {r3,r4} + mov r8, r3 + mov r9, r4 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080C57D4: .4byte gUnknown_3005338 +_080C57D8: .4byte gUnknown_3005334 +_080C57DC: .4byte gUnknown_3005340 +_080C57E0: .4byte gUnknown_3005344 +_080C57E4: .4byte gUnknown_300534C +_080C57E8: .4byte gUnknown_3005330 + thumb_func_end sub_80C5748 + + thumb_func_start sub_80C57EC +sub_80C57EC: @ 80C57EC + push {r4-r7,lr} + mov r7, r8 + push {r7} + sub sp, 0x4 + movs r2, 0 + ldr r0, _080C586C @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r2, r0 + bcs _080C585E + ldr r0, _080C5870 @ =gUnknown_3005334 + mov r8, r0 + ldr r3, _080C5874 @ =gUnknown_3005340 +_080C5804: + ldr r0, _080C5878 @ =gUnknown_3005344 + ldrb r1, [r0] + adds r1, r2 + ldr r0, _080C587C @ =gUnknown_300534C + ldrb r0, [r0] + muls r0, r1 + lsls r0, 1 + mov r4, r8 + ldr r1, [r4] + adds r1, r0 + ldr r0, _080C5880 @ =gUnknown_3005330 + ldrb r0, [r0] + lsls r0, 1 + adds r4, r1, r0 + movs r5, 0 + adds r6, r2, 0x1 + ldrb r0, [r3] + cmp r5, r0 + bcs _080C5852 + movs r0, 0x80 + lsls r0, 8 + adds r7, r0, 0 +_080C5830: + ldrh r0, [r4] + ands r0, r7 + cmp r0, 0 + bne _080C5844 + adds r0, r4, 0 + str r3, [sp] + bl sub_80C600C + strh r0, [r4] + ldr r3, [sp] +_080C5844: + adds r0, r5, 0x1 + lsls r0, 24 + lsrs r5, r0, 24 + adds r4, 0x2 + ldrb r0, [r3] + cmp r5, r0 + bcc _080C5830 +_080C5852: + lsls r0, r6, 24 + lsrs r2, r0, 24 + ldr r0, _080C586C @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r2, r0 + bcc _080C5804 +_080C585E: + add sp, 0x4 + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080C586C: .4byte gUnknown_3005338 +_080C5870: .4byte gUnknown_3005334 +_080C5874: .4byte gUnknown_3005340 +_080C5878: .4byte gUnknown_3005344 +_080C587C: .4byte gUnknown_300534C +_080C5880: .4byte gUnknown_3005330 + thumb_func_end sub_80C57EC + + thumb_func_start sub_80C5884 +sub_80C5884: @ 80C5884 + push {r4-r7,lr} + mov r7, r9 + mov r6, r8 + push {r6,r7} + movs r7, 0 + ldr r0, _080C59BC @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r7, r0 + bcs _080C5910 + ldr r0, _080C59C0 @ =gUnknown_3005334 + mov r8, r0 +_080C589A: + ldr r0, _080C59C4 @ =gUnknown_3005344 + ldrb r1, [r0] + adds r1, r7 + ldr r0, _080C59C8 @ =gUnknown_300534C + ldrb r0, [r0] + muls r0, r1 + lsls r0, 1 + mov r2, r8 + ldr r1, [r2] + adds r1, r0 + ldr r0, _080C59CC @ =gUnknown_3005330 + ldrb r0, [r0] + lsls r0, 1 + adds r5, r1, r0 + adds r4, r5, 0x2 + adds r0, r5, 0 + adds r1, r4, 0 + bl sub_80C603C + strh r0, [r5] + movs r6, 0x1 + adds r5, r4, 0 + ldr r0, _080C59D0 @ =gUnknown_3005340 + ldrb r0, [r0] + subs r0, 0x1 + adds r7, 0x1 + cmp r6, r0 + bge _080C58FA +_080C58D2: + adds r4, r5, 0x2 + adds r0, r5, 0 + adds r1, r4, 0 + bl sub_80C603C + strh r0, [r5] + subs r1, r5, 0x2 + adds r0, r5, 0 + bl sub_80C603C + strh r0, [r5] + adds r0, r6, 0x1 + lsls r0, 24 + lsrs r6, r0, 24 + adds r5, r4, 0 + ldr r0, _080C59D0 @ =gUnknown_3005340 + ldrb r0, [r0] + subs r0, 0x1 + cmp r6, r0 + blt _080C58D2 +_080C58FA: + subs r1, r5, 0x2 + adds r0, r5, 0 + bl sub_80C603C + strh r0, [r5] + lsls r0, r7, 24 + lsrs r7, r0, 24 + ldr r0, _080C59BC @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r7, r0 + bcc _080C589A +_080C5910: + movs r6, 0 + ldr r0, _080C59D0 @ =gUnknown_3005340 + ldrb r0, [r0] + cmp r6, r0 + bcs _080C59B0 + ldr r3, _080C59C0 @ =gUnknown_3005334 + mov r9, r3 + ldr r0, _080C59C8 @ =gUnknown_300534C + mov r8, r0 +_080C5922: + ldr r0, _080C59C4 @ =gUnknown_3005344 + ldrb r0, [r0] + mov r2, r8 + ldrb r1, [r2] + muls r0, r1 + lsls r0, 1 + mov r3, r9 + ldr r2, [r3] + adds r2, r0 + ldr r0, _080C59CC @ =gUnknown_3005330 + ldrb r0, [r0] + adds r0, r6 + lsls r0, 1 + adds r5, r2, r0 + lsls r1, 1 + adds r1, r5, r1 + adds r0, r5, 0 + bl sub_80C603C + strh r0, [r5] + movs r7, 0x1 + mov r1, r8 + ldrb r0, [r1] + lsls r0, 1 + adds r5, r0 + ldr r0, _080C59BC @ =gUnknown_3005338 + ldrb r0, [r0] + subs r0, 0x1 + adds r6, 0x1 + cmp r7, r0 + bge _080C5994 + ldr r4, _080C59C8 @ =gUnknown_300534C +_080C5962: + ldrb r1, [r4] + lsls r1, 1 + adds r1, r5, r1 + adds r0, r5, 0 + bl sub_80C603C + strh r0, [r5] + ldrb r1, [r4] + lsls r1, 1 + subs r1, r5, r1 + adds r0, r5, 0 + bl sub_80C603C + strh r0, [r5] + adds r0, r7, 0x1 + lsls r0, 24 + lsrs r7, r0, 24 + ldrb r0, [r4] + lsls r0, 1 + adds r5, r0 + ldr r0, _080C59BC @ =gUnknown_3005338 + ldrb r0, [r0] + subs r0, 0x1 + cmp r7, r0 + blt _080C5962 +_080C5994: + mov r2, r8 + ldrb r1, [r2] + lsls r1, 1 + subs r1, r5, r1 + adds r0, r5, 0 + bl sub_80C603C + strh r0, [r5] + lsls r0, r6, 24 + lsrs r6, r0, 24 + ldr r0, _080C59D0 @ =gUnknown_3005340 + ldrb r0, [r0] + cmp r6, r0 + bcc _080C5922 +_080C59B0: + pop {r3,r4} + mov r8, r3 + mov r9, r4 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080C59BC: .4byte gUnknown_3005338 +_080C59C0: .4byte gUnknown_3005334 +_080C59C4: .4byte gUnknown_3005344 +_080C59C8: .4byte gUnknown_300534C +_080C59CC: .4byte gUnknown_3005330 +_080C59D0: .4byte gUnknown_3005340 + thumb_func_end sub_80C5884 + + thumb_func_start sub_80C59D4 +sub_80C59D4: @ 80C59D4 + push {r4-r7,lr} + mov r7, r8 + push {r7} + sub sp, 0x4 + movs r2, 0 + ldr r0, _080C5A54 @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r2, r0 + bcs _080C5A46 + ldr r0, _080C5A58 @ =gUnknown_3005334 + mov r8, r0 + ldr r3, _080C5A5C @ =gUnknown_3005340 +_080C59EC: + ldr r0, _080C5A60 @ =gUnknown_3005344 + ldrb r1, [r0] + adds r1, r2 + ldr r0, _080C5A64 @ =gUnknown_300534C + ldrb r0, [r0] + muls r0, r1 + lsls r0, 1 + mov r4, r8 + ldr r1, [r4] + adds r1, r0 + ldr r0, _080C5A68 @ =gUnknown_3005330 + ldrb r0, [r0] + lsls r0, 1 + adds r4, r1, r0 + movs r5, 0 + adds r6, r2, 0x1 + ldrb r0, [r3] + cmp r5, r0 + bcs _080C5A3A + movs r0, 0x80 + lsls r0, 8 + adds r7, r0, 0 +_080C5A18: + ldrh r0, [r4] + ands r0, r7 + cmp r0, 0 + bne _080C5A2C + adds r0, r4, 0 + str r3, [sp] + bl sub_80C606C + strh r0, [r4] + ldr r3, [sp] +_080C5A2C: + adds r0, r5, 0x1 + lsls r0, 24 + lsrs r5, r0, 24 + adds r4, 0x2 + ldrb r0, [r3] + cmp r5, r0 + bcc _080C5A18 +_080C5A3A: + lsls r0, r6, 24 + lsrs r2, r0, 24 + ldr r0, _080C5A54 @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r2, r0 + bcc _080C59EC +_080C5A46: + add sp, 0x4 + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080C5A54: .4byte gUnknown_3005338 +_080C5A58: .4byte gUnknown_3005334 +_080C5A5C: .4byte gUnknown_3005340 +_080C5A60: .4byte gUnknown_3005344 +_080C5A64: .4byte gUnknown_300534C +_080C5A68: .4byte gUnknown_3005330 + thumb_func_end sub_80C59D4 + + thumb_func_start sub_80C5A6C +sub_80C5A6C: @ 80C5A6C + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x8 + ldr r0, _080C5B98 @ =gUnknown_3005334 + ldr r4, [r0] + movs r6, 0 + movs r0, 0x80 + lsls r0, 8 + adds r5, r0, 0 +_080C5A84: + movs r7, 0 +_080C5A86: + ldrh r0, [r4] + ands r0, r5 + cmp r0, 0 + bne _080C5A96 + adds r0, r4, 0 + bl sub_80C606C + strh r0, [r4] +_080C5A96: + adds r0, r7, 0x1 + lsls r0, 24 + lsrs r7, r0, 24 + adds r4, 0x2 + cmp r7, 0x3F + bls _080C5A86 + adds r0, r6, 0x1 + lsls r0, 24 + lsrs r6, r0, 24 + cmp r6, 0x3F + bls _080C5A84 + movs r7, 0 + ldr r1, _080C5B98 @ =gUnknown_3005334 + mov r10, r1 + mov r3, sp + movs r2, 0x80 + lsls r2, 8 + mov r9, r2 +_080C5ABA: + lsls r0, r7, 1 + mov r2, r10 + ldr r1, [r2] + adds r4, r1, r0 + ldrh r1, [r4] + strh r1, [r3] + mov r1, r9 + strh r1, [r4] + movs r6, 0x1 + adds r4, 0x80 + adds r5, r0, 0 +_080C5AD0: + ldrh r0, [r4] + movs r2, 0x80 + lsls r2, 8 + ands r0, r2 + cmp r0, 0 + bne _080C5AF0 + adds r2, r4, 0 + adds r2, 0x80 + mov r0, sp + adds r1, r4, 0 + str r3, [sp, 0x4] + bl sub_80C62DC + strh r0, [r4] + ldr r3, [sp, 0x4] + strh r0, [r3] +_080C5AF0: + adds r0, r6, 0x1 + lsls r0, 24 + lsrs r6, r0, 24 + adds r4, 0x80 + cmp r6, 0x3E + bls _080C5AD0 + mov r0, r9 + strh r0, [r4] + mov r1, r10 + ldr r0, [r1] + adds r4, r0, r5 + ldrh r0, [r4] + strh r0, [r3] + mov r2, r9 + strh r2, [r4] + movs r6, 0x1 + adds r4, 0x80 + movs r0, 0x80 + lsls r0, 8 + mov r8, r0 +_080C5B18: + ldrh r0, [r4] + mov r1, r8 + ands r0, r1 + adds r5, r4, 0 + adds r5, 0x80 + cmp r0, 0 + bne _080C5B38 + mov r0, sp + adds r1, r4, 0 + adds r2, r5, 0 + str r3, [sp, 0x4] + bl sub_80C62DC + strh r0, [r4] + ldr r3, [sp, 0x4] + strh r0, [r3] +_080C5B38: + adds r0, r6, 0x1 + lsls r0, 24 + lsrs r6, r0, 24 + adds r4, r5, 0 + cmp r6, 0x3E + bls _080C5B18 + mov r2, r9 + strh r2, [r4] + adds r0, r7, 0x1 + lsls r0, 24 + lsrs r7, r0, 24 + cmp r7, 0x3F + bls _080C5ABA + ldr r0, _080C5B98 @ =gUnknown_3005334 + ldr r4, [r0] + movs r6, 0 + movs r0, 0x80 + lsls r0, 8 + mov r8, r0 +_080C5B5E: + movs r7, 0 + adds r5, r6, 0x1 +_080C5B62: + ldrh r0, [r4] + mov r1, r8 + ands r0, r1 + cmp r0, 0 + bne _080C5B74 + adds r0, r4, 0 + bl sub_80C606C + strh r0, [r4] +_080C5B74: + adds r0, r7, 0x1 + lsls r0, 24 + lsrs r7, r0, 24 + adds r4, 0x2 + cmp r7, 0x3F + bls _080C5B62 + lsls r0, r5, 24 + lsrs r6, r0, 24 + cmp r6, 0x3F + bls _080C5B5E + 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 +_080C5B98: .4byte gUnknown_3005334 + thumb_func_end sub_80C5A6C + + thumb_func_start sub_80C5B9C +sub_80C5B9C: @ 80C5B9C + push {r4-r7,lr} + mov r7, r8 + push {r7} + sub sp, 0x4 + movs r2, 0 + ldr r0, _080C5C2C @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r2, r0 + bcs _080C5C1E + ldr r0, _080C5C30 @ =gUnknown_3005334 + mov r8, r0 +_080C5BB2: + ldr r0, _080C5C34 @ =gUnknown_3005344 + ldrb r1, [r0] + adds r1, r2 + ldr r0, _080C5C38 @ =gUnknown_300534C + ldrb r0, [r0] + muls r0, r1 + lsls r0, 1 + mov r3, r8 + ldr r1, [r3] + adds r1, r0 + ldr r0, _080C5C3C @ =gUnknown_3005330 + ldrb r0, [r0] + lsls r0, 1 + adds r4, r1, r0 + ldrh r1, [r4] + mov r0, sp + strh r1, [r0] + movs r5, 0x1 + adds r4, 0x2 + ldr r0, _080C5C40 @ =gUnknown_3005340 + ldrb r0, [r0] + subs r0, 0x1 + adds r6, r2, 0x1 + cmp r5, r0 + bge _080C5C12 + movs r0, 0x80 + lsls r0, 8 + adds r7, r0, 0 +_080C5BEA: + ldrh r0, [r4] + ands r0, r7 + cmp r0, 0 + bne _080C5C00 + mov r0, sp + adds r1, r4, 0 + bl sub_80C6098 + strh r0, [r4] + mov r1, sp + strh r0, [r1] +_080C5C00: + adds r0, r5, 0x1 + lsls r0, 24 + lsrs r5, r0, 24 + adds r4, 0x2 + ldr r0, _080C5C40 @ =gUnknown_3005340 + ldrb r0, [r0] + subs r0, 0x1 + cmp r5, r0 + blt _080C5BEA +_080C5C12: + lsls r0, r6, 24 + lsrs r2, r0, 24 + ldr r0, _080C5C2C @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r2, r0 + bcc _080C5BB2 +_080C5C1E: + add sp, 0x4 + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080C5C2C: .4byte gUnknown_3005338 +_080C5C30: .4byte gUnknown_3005334 +_080C5C34: .4byte gUnknown_3005344 +_080C5C38: .4byte gUnknown_300534C +_080C5C3C: .4byte gUnknown_3005330 +_080C5C40: .4byte gUnknown_3005340 + thumb_func_end sub_80C5B9C + + thumb_func_start sub_80C5C44 +sub_80C5C44: @ 80C5C44 + push {r4-r7,lr} + mov r7, r8 + push {r7} + sub sp, 0x8 + movs r2, 0 + ldr r0, _080C5CE0 @ =gUnknown_3005340 + ldrb r0, [r0] + cmp r2, r0 + bcs _080C5CD2 + ldr r0, _080C5CE4 @ =gUnknown_3005334 + mov r8, r0 + ldr r7, _080C5CE8 @ =gUnknown_300534C +_080C5C5C: + ldr r0, _080C5CEC @ =gUnknown_3005344 + ldrb r1, [r0] + ldrb r0, [r7] + muls r0, r1 + lsls r0, 1 + mov r3, r8 + ldr r1, [r3] + adds r1, r0 + ldr r0, _080C5CF0 @ =gUnknown_3005330 + ldrb r0, [r0] + adds r0, r2 + lsls r0, 1 + adds r4, r1, r0 + ldrh r1, [r4] + mov r0, sp + strh r1, [r0] + movs r5, 0x1 + ldrb r0, [r7] + lsls r0, 1 + adds r4, r0 + ldr r0, _080C5CF4 @ =gUnknown_3005338 + ldrb r0, [r0] + subs r0, 0x1 + adds r6, r2, 0x1 + cmp r5, r0 + bge _080C5CC6 + movs r0, 0x80 + lsls r0, 8 + adds r2, r0, 0 +_080C5C96: + ldrh r0, [r4] + ands r0, r2 + cmp r0, 0 + bne _080C5CB0 + mov r0, sp + adds r1, r4, 0 + str r2, [sp, 0x4] + bl sub_80C6098 + strh r0, [r4] + mov r1, sp + strh r0, [r1] + ldr r2, [sp, 0x4] +_080C5CB0: + adds r0, r5, 0x1 + lsls r0, 24 + lsrs r5, r0, 24 + ldrb r0, [r7] + lsls r0, 1 + adds r4, r0 + ldr r0, _080C5CF4 @ =gUnknown_3005338 + ldrb r0, [r0] + subs r0, 0x1 + cmp r5, r0 + blt _080C5C96 +_080C5CC6: + lsls r0, r6, 24 + lsrs r2, r0, 24 + ldr r0, _080C5CE0 @ =gUnknown_3005340 + ldrb r0, [r0] + cmp r2, r0 + bcc _080C5C5C +_080C5CD2: + add sp, 0x8 + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080C5CE0: .4byte gUnknown_3005340 +_080C5CE4: .4byte gUnknown_3005334 +_080C5CE8: .4byte gUnknown_300534C +_080C5CEC: .4byte gUnknown_3005344 +_080C5CF0: .4byte gUnknown_3005330 +_080C5CF4: .4byte gUnknown_3005338 + thumb_func_end sub_80C5C44 + + thumb_func_start sub_80C5CF8 +sub_80C5CF8: @ 80C5CF8 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x20 + lsls r0, 16 + lsrs r0, 16 + mov r10, r0 + mov r2, sp + ldr r3, _080C5D64 @ =gUnknown_83F3024 + lsls r1, r0, 1 + add r1, r10 + adds r0, r1, r3 + ldrb r0, [r0] + strb r0, [r2] + adds r0, r3, 0x1 + adds r0, r1, r0 + ldrb r0, [r0] + strb r0, [r2, 0x1] + mov r5, sp + adds r0, r3, 0x2 + adds r1, r0 + ldrb r4, [r1] + lsls r2, r4, 24 + lsrs r1, r2, 27 + movs r0, 0x7 + ands r1, r0 + strh r1, [r5, 0x2] + lsrs r2, 25 + mov r9, r2 + movs r0, 0x3 + ands r2, r0 + mov r9, r2 + movs r5, 0x1 + ands r5, r4 + movs r4, 0x1 + mov r8, r4 + cmp r8, r1 + bcs _080C5DAA + mov r3, sp +_080C5D4A: + cmp r5, 0 + bne _080C5D68 + mov r0, r8 + lsls r2, r0, 2 + mov r4, sp + adds r1, r4, r2 + ldrb r0, [r3] + mov r4, r8 + subs r0, r4 + strb r0, [r1] + ldrb r0, [r3, 0x1] + add r0, r8 + b _080C5D7A + .align 2, 0 +_080C5D64: .4byte gUnknown_83F3024 +_080C5D68: + mov r0, r8 + lsls r2, r0, 2 + mov r4, sp + adds r1, r4, r2 + ldrb r0, [r3] + adds r0, 0x1 + strb r0, [r1] + ldrb r0, [r3, 0x1] + subs r0, 0x1 +_080C5D7A: + strb r0, [r1, 0x1] + add r2, sp + ldrb r0, [r2] + cmp r0, 0x3F + bhi _080C5D8A + ldrb r0, [r2, 0x1] + cmp r0, 0x3F + bls _080C5D92 +_080C5D8A: + mov r0, r8 + subs r0, 0x1 + strh r0, [r3, 0x2] + b _080C5DAA +_080C5D92: + ldrh r0, [r3, 0x2] + mov r1, r8 + subs r0, r1 + strh r0, [r2, 0x2] + mov r0, r8 + adds r0, 0x1 + lsls r0, 24 + lsrs r0, 24 + mov r8, r0 + ldrh r0, [r3, 0x2] + cmp r8, r0 + bcc _080C5D4A +_080C5DAA: + movs r2, 0 + mov r8, r2 + mov r0, sp + ldrh r0, [r0, 0x2] + cmp r8, r0 + bcc _080C5DB8 + b _080C5EBA +_080C5DB8: + movs r3, 0x1F +_080C5DBA: + ldr r1, _080C5E18 @ =gUnknown_3005334 + mov r4, r8 + lsls r0, r4, 2 + mov r2, sp + adds r6, r2, r0 + ldrb r0, [r6, 0x1] + lsls r0, 7 + ldr r1, [r1] + adds r1, r0 + ldrb r0, [r6] + lsls r0, 1 + adds r2, r1, r0 + ldrh r1, [r2] + movs r4, 0x80 + lsls r4, 8 + adds r0, r4, 0 + ands r0, r1 + cmp r0, 0 + bne _080C5EA6 + movs r7, 0x1F + ands r7, r1 + lsls r0, r1, 16 + lsrs r5, r0, 21 + ands r5, r3 + lsrs r4, r0, 26 + ands r4, r3 + mov r0, r9 + cmp r0, 0 + blt _080C5E9C + cmp r0, 0x1 + ble _080C5E1C + cmp r0, 0x3 + bgt _080C5E9C + ldrh r0, [r6, 0x2] + adds r1, r7, r0 + lsls r1, 16 + lsrs r7, r1, 16 + adds r1, r5, r0 + lsls r1, 16 + lsrs r5, r1, 16 + adds r0, r4, r0 + lsls r0, 16 + lsrs r4, r0, 16 + cmp r7, 0x1F + bls _080C5E90 + movs r7, 0x1F + b _080C5E90 + .align 2, 0 +_080C5E18: .4byte gUnknown_3005334 +_080C5E1C: + mov r1, r10 + lsls r0, r1, 1 + add r0, r10 + ldr r1, _080C5E50 @ =gUnknown_83F3024 + adds r1, 0x2 + adds r0, r1 + ldrb r0, [r0] + lsrs r0, 3 + movs r1, 0x7 + ands r0, r1 + movs r1, 0x3 + str r2, [sp, 0x18] + str r3, [sp, 0x1C] + bl __umodsi3 + lsls r0, 24 + lsrs r0, 24 + ldr r2, [sp, 0x18] + ldr r3, [sp, 0x1C] + cmp r0, 0x1 + beq _080C5E6C + cmp r0, 0x1 + bgt _080C5E54 + cmp r0, 0 + beq _080C5E5A + b _080C5E9C + .align 2, 0 +_080C5E50: .4byte gUnknown_83F3024 +_080C5E54: + cmp r0, 0x2 + beq _080C5E7E + b _080C5E9C +_080C5E5A: + ldrh r0, [r6, 0x2] + cmp r7, r0 + bcc _080C5E68 + subs r0, r7, r0 + lsls r0, 16 + lsrs r7, r0, 16 + b _080C5E9C +_080C5E68: + movs r7, 0 + b _080C5E9C +_080C5E6C: + ldrh r0, [r6, 0x2] + cmp r5, r0 + bcc _080C5E7A + subs r0, r5, r0 + lsls r0, 16 + lsrs r5, r0, 16 + b _080C5E9C +_080C5E7A: + movs r5, 0 + b _080C5E9C +_080C5E7E: + ldrh r0, [r6, 0x2] + cmp r4, r0 + bcc _080C5E8C + subs r0, r4, r0 + lsls r0, 16 + lsrs r4, r0, 16 + b _080C5E9C +_080C5E8C: + movs r4, 0 + b _080C5E9C +_080C5E90: + cmp r5, 0x1F + bls _080C5E96 + movs r5, 0x1F +_080C5E96: + cmp r4, 0x1F + bls _080C5E9C + movs r4, 0x1F +_080C5E9C: + lsls r0, r4, 10 + lsls r1, r5, 5 + orrs r0, r1 + orrs r7, r0 + strh r7, [r2] +_080C5EA6: + mov r0, r8 + adds r0, 0x1 + lsls r0, 24 + lsrs r0, 24 + mov r8, r0 + mov r0, sp + ldrh r0, [r0, 0x2] + cmp r8, r0 + bcs _080C5EBA + b _080C5DBA +_080C5EBA: + add sp, 0x20 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end sub_80C5CF8 + + thumb_func_start sub_80C5ECC +sub_80C5ECC: @ 80C5ECC + push {lr} + ldrh r1, [r0] + movs r3, 0x1F + movs r0, 0x1F + ands r0, r1 + lsls r1, 16 + lsrs r2, r1, 21 + ands r2, r3 + lsrs r1, 26 + ands r1, r3 + adds r0, r2 + adds r0, r1 + movs r1, 0x3 + bl __divsi3 + adds r1, r0, 0 + lsls r1, 16 + lsrs r1, 16 + lsls r0, r1, 10 + lsls r2, r1, 5 + orrs r0, r2 + orrs r0, r1 + lsls r0, 16 + lsrs r0, 16 + pop {r1} + bx r1 + thumb_func_end sub_80C5ECC + + thumb_func_start sub_80C5F00 +sub_80C5F00: @ 80C5F00 + push {r4,lr} + lsls r1, 24 + lsrs r4, r1, 24 + ldrh r0, [r0] + movs r2, 0x1F + movs r1, 0x1F + ands r1, r0 + lsls r0, 16 + lsrs r3, r0, 21 + ands r3, r2 + lsrs r0, 26 + ands r0, r2 + cmp r1, 0x10 + bhi _080C5F30 + cmp r3, 0x10 + bhi _080C5F30 + cmp r0, 0x10 + bhi _080C5F30 + adds r0, r4, 0 + bl sub_80C5F3C + lsls r0, 16 + lsrs r0, 16 + b _080C5F32 +_080C5F30: + ldr r0, _080C5F38 @ =0x00007fff +_080C5F32: + pop {r4} + pop {r1} + bx r1 + .align 2, 0 +_080C5F38: .4byte 0x00007fff + thumb_func_end sub_80C5F00 + + thumb_func_start sub_80C5F3C +sub_80C5F3C: @ 80C5F3C + push {r4-r7,lr} + mov r7, r8 + push {r7} + adds r4, r0, 0 + lsls r4, 24 + lsrs r4, 24 + movs r0, 0 + mov r8, r0 + movs r6, 0 + movs r7, 0 + adds r0, r4, 0 + movs r1, 0x6 + bl __udivsi3 + lsls r0, 24 + lsrs r0, 24 + movs r1, 0x3 + bl __umodsi3 + lsls r0, 24 + lsrs r5, r0, 24 + adds r0, r4, 0 + movs r1, 0x6 + bl __umodsi3 + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x5 + bhi _080C5FF4 + lsls r0, 2 + ldr r1, _080C5F80 @ =_080C5F84 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_080C5F80: .4byte _080C5F84 + .align 2, 0 +_080C5F84: + .4byte _080C5F9C + .4byte _080C5FAC + .4byte _080C5FBC + .4byte _080C5FCA + .4byte _080C5FD8 + .4byte _080C5FE6 +_080C5F9C: + movs r0, 0x15 + subs r0, r5 + lsls r0, 16 + lsrs r6, r0, 16 + adds r7, r6, 0 + movs r1, 0 + mov r8, r1 + b _080C5FF4 +_080C5FAC: + movs r7, 0 + movs r0, 0x15 + subs r0, r5 + lsls r0, 16 + lsrs r0, 16 + mov r8, r0 + mov r6, r8 + b _080C5FF4 +_080C5FBC: + movs r0, 0x15 + subs r0, r5 + lsls r0, 16 + lsrs r7, r0, 16 + movs r6, 0 + mov r8, r7 + b _080C5FF4 +_080C5FCA: + movs r7, 0 + movs r6, 0 + movs r0, 0x17 + subs r0, r5 + lsls r0, 16 + lsrs r0, 16 + b _080C5FF2 +_080C5FD8: + movs r0, 0x17 + subs r0, r5 + lsls r0, 16 + lsrs r7, r0, 16 + movs r6, 0 + mov r8, r6 + b _080C5FF4 +_080C5FE6: + movs r7, 0 + movs r0, 0x17 + subs r0, r5 + lsls r0, 16 + lsrs r6, r0, 16 + movs r0, 0 +_080C5FF2: + mov r8, r0 +_080C5FF4: + lsls r0, r7, 10 + lsls r1, r6, 5 + orrs r0, r1 + mov r1, r8 + orrs r1, r0 + lsls r0, r1, 16 + lsrs r0, 16 + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end sub_80C5F3C + + thumb_func_start sub_80C600C +sub_80C600C: @ 80C600C + push {lr} + ldrh r0, [r0] + movs r2, 0x1F + movs r1, 0x1F + ands r1, r0 + lsls r0, 16 + lsrs r3, r0, 21 + ands r3, r2 + lsrs r0, 26 + ands r0, r2 + cmp r1, 0x10 + bhi _080C6030 + cmp r3, 0x10 + bhi _080C6030 + cmp r0, 0x10 + bhi _080C6030 + movs r0, 0 + b _080C6032 +_080C6030: + ldr r0, _080C6038 @ =0x00007fff +_080C6032: + pop {r1} + bx r1 + .align 2, 0 +_080C6038: .4byte 0x00007fff + thumb_func_end sub_80C600C + + thumb_func_start sub_80C603C +sub_80C603C: @ 80C603C + push {r4,lr} + adds r4, r0, 0 + ldrh r3, [r4] + cmp r3, 0 + beq _080C6064 + movs r2, 0x80 + lsls r2, 8 + adds r0, r2, 0 + ands r0, r3 + cmp r0, 0 + beq _080C6056 + adds r0, r2, 0 + b _080C6066 +_080C6056: + ldrh r1, [r1] + adds r0, r2, 0 + ands r0, r1 + cmp r0, 0 + bne _080C6064 + ldrh r0, [r4] + b _080C6066 +_080C6064: + movs r0, 0 +_080C6066: + pop {r4} + pop {r1} + bx r1 + thumb_func_end sub_80C603C + + thumb_func_start sub_80C606C +sub_80C606C: @ 80C606C + push {r4,lr} + ldrh r1, [r0] + movs r0, 0x1F + movs r3, 0x1F + ands r3, r1 + lsls r1, 16 + lsrs r2, r1, 21 + lsrs r1, 26 + subs r3, r0, r3 + adds r4, r0, 0 + bics r4, r2 + adds r2, r4, 0 + bics r0, r1 + lsls r0, 10 + lsls r2, 5 + orrs r0, r2 + orrs r0, r3 + lsls r0, 16 + lsrs r0, 16 + pop {r4} + pop {r1} + bx r1 + thumb_func_end sub_80C606C + + thumb_func_start sub_80C6098 +sub_80C6098: @ 80C6098 + push {r4-r7,lr} + sub sp, 0x14 + adds r7, r1, 0 + ldrh r4, [r0] + ldrh r5, [r7] + lsls r6, r4, 16 + lsls r0, r5, 16 + mov r12, r0 + cmp r4, r5 + beq _080C610A + mov r2, sp + movs r3, 0x1F + movs r1, 0x1F + adds r0, r1, 0 + ands r0, r4 + strh r0, [r2] + lsrs r0, r6, 21 + ands r0, r3 + strh r0, [r2, 0x2] + lsrs r0, r6, 26 + ands r0, r3 + strh r0, [r2, 0x4] + mov r0, sp + ands r1, r5 + strh r1, [r0, 0x6] + mov r1, sp + mov r2, r12 + lsrs r0, r2, 21 + ands r0, r3 + strh r0, [r1, 0x8] + lsrs r0, r2, 26 + ands r0, r3 + strh r0, [r1, 0xA] + mov r0, sp + ldrh r0, [r0] + cmp r0, 0x19 + bls _080C60F2 + mov r0, sp + ldrh r0, [r0, 0x2] + cmp r0, 0x19 + bls _080C60F2 + mov r0, sp + ldrh r0, [r0, 0x4] + cmp r0, 0x19 + bhi _080C610A +_080C60F2: + mov r0, sp + ldrh r0, [r0, 0x6] + cmp r0, 0x19 + bls _080C610E + mov r0, sp + ldrh r0, [r0, 0x8] + cmp r0, 0x19 + bls _080C610E + mov r0, sp + ldrh r0, [r0, 0xA] + cmp r0, 0x19 + bls _080C610E +_080C610A: + ldrh r0, [r7] + b _080C61B4 +_080C610E: + movs r4, 0 + add r6, sp, 0xC + mov r7, sp + adds r7, 0x6 + adds r5, r6, 0 +_080C6118: + lsls r2, r4, 1 + mov r1, sp + adds r0, r1, r2 + adds r1, r7, r2 + ldrh r3, [r0] + ldrh r0, [r1] + cmp r3, r0 + bls _080C612E + adds r1, r5, r2 + subs r0, r3, r0 + b _080C6132 +_080C612E: + adds r1, r5, r2 + subs r0, r3 +_080C6132: + strh r0, [r1] + adds r0, r4, 0x1 + lsls r0, 24 + lsrs r4, r0, 24 + cmp r4, 0x2 + bls _080C6118 + adds r1, r6, 0 + ldrh r0, [r1, 0x2] + ldrh r3, [r1] + cmp r3, r0 + bcc _080C6158 + ldrh r2, [r1, 0x4] + cmp r3, r2 + bcc _080C6152 + adds r2, r3, 0 + b _080C616C +_080C6152: + cmp r0, r2 + bcs _080C615E + b _080C6166 +_080C6158: + ldrh r2, [r1, 0x4] + cmp r0, r2 + bcc _080C6162 +_080C615E: + ldrh r2, [r1, 0x2] + b _080C616C +_080C6162: + cmp r2, r3 + bcc _080C616A +_080C6166: + ldrh r2, [r1, 0x4] + b _080C616C +_080C616A: + ldrh r2, [r6] +_080C616C: + mov r0, sp + ldrh r1, [r0, 0x6] + lsrs r0, r2, 1 + movs r6, 0x1F + subs r6, r0 + adds r0, r1, 0 + muls r0, r6 + movs r1, 0x1F + bl __divsi3 + adds r5, r0, 0 + lsls r5, 16 + lsrs r5, 16 + mov r0, sp + ldrh r0, [r0, 0x8] + muls r0, r6 + movs r1, 0x1F + bl __divsi3 + adds r4, r0, 0 + lsls r4, 16 + lsrs r4, 16 + mov r0, sp + ldrh r0, [r0, 0xA] + muls r0, r6 + movs r1, 0x1F + bl __divsi3 + lsls r0, 16 + lsrs r0, 6 + lsls r4, 5 + orrs r0, r4 + orrs r5, r0 + lsls r5, 16 + lsrs r5, 16 + adds r0, r5, 0 +_080C61B4: + add sp, 0x14 + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end sub_80C6098 + + thumb_func_start sub_80C61BC +sub_80C61BC: @ 80C61BC + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x8 + adds r3, r0, 0 + mov r10, r1 + str r2, [sp] + ldrh r1, [r3] + mov r0, r10 + ldrh r0, [r0] + cmp r1, r0 + bne _080C61E4 + ldrh r0, [r2] + cmp r0, r1 + bne _080C61E4 + mov r1, r10 + ldrh r0, [r1] + b _080C62CC +_080C61E4: + mov r2, r10 + ldrh r0, [r2] + movs r1, 0x1F + mov r9, r1 + movs r4, 0x1F + adds r5, r4, 0 + ands r5, r0 + lsls r0, 16 + lsrs r2, r0, 21 + mov r1, r9 + ands r1, r2 + mov r8, r1 + lsrs r0, 26 + mov r2, r9 + ands r2, r0 + str r2, [sp, 0x4] + ldrh r2, [r3] + adds r0, r4, 0 + ands r0, r2 + lsls r2, 16 + lsrs r1, r2, 21 + mov r3, r9 + ands r1, r3 + adds r0, r1 + lsrs r2, 26 + ands r2, r3 + adds r0, r2 + movs r1, 0x3 + bl __divsi3 + lsls r0, 16 + lsrs r7, r0, 16 + mov r1, r8 + adds r0, r5, r1 + ldr r2, [sp, 0x4] + adds r0, r2 + movs r1, 0x3 + bl __divsi3 + lsls r0, 16 + lsrs r6, r0, 16 + ldr r3, [sp] + ldrh r1, [r3] + ands r4, r1 + lsls r1, 16 + lsrs r0, r1, 21 + mov r2, r9 + ands r0, r2 + adds r4, r0 + lsrs r1, 26 + ands r1, r2 + adds r4, r1 + adds r0, r4, 0 + movs r1, 0x3 + bl __divsi3 + lsls r0, 16 + lsrs r1, r0, 16 + cmp r7, r6 + bne _080C6266 + cmp r1, r6 + bne _080C6266 + mov r3, r10 + ldrh r0, [r3] + b _080C62CC +_080C6266: + cmp r7, r6 + bls _080C626E + subs r0, r7, r6 + b _080C6270 +_080C626E: + subs r0, r6, r7 +_080C6270: + lsls r0, 16 + lsrs r2, r0, 16 + cmp r1, r6 + bls _080C627C + subs r0, r1, r6 + b _080C627E +_080C627C: + subs r0, r6, r1 +_080C627E: + lsls r0, 16 + lsrs r0, 16 + cmp r2, r0 + bcc _080C6288 + adds r0, r2, 0 +_080C6288: + lsrs r0, 1 + movs r4, 0x1F + subs r4, r0 + lsls r4, 16 + lsrs r4, 16 + adds r0, r5, 0 + muls r0, r4 + movs r1, 0x1F + bl __divsi3 + lsls r0, 16 + lsrs r5, r0, 16 + mov r0, r8 + muls r0, r4 + movs r1, 0x1F + bl __divsi3 + lsls r0, 16 + lsrs r0, 16 + mov r8, r0 + ldr r1, [sp, 0x4] + adds r0, r1, 0 + muls r0, r4 + movs r1, 0x1F + bl __divsi3 + lsls r0, 16 + lsrs r0, 6 + mov r2, r8 + lsls r1, r2, 5 + orrs r0, r1 + orrs r5, r0 + lsls r0, r5, 16 + lsrs r0, 16 +_080C62CC: + add sp, 0x8 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end sub_80C61BC + + thumb_func_start sub_80C62DC +sub_80C62DC: @ 80C62DC + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x8 + adds r3, r0, 0 + mov r10, r1 + str r2, [sp] + ldrh r1, [r3] + mov r0, r10 + ldrh r0, [r0] + cmp r1, r0 + bne _080C6304 + ldrh r0, [r2] + cmp r0, r1 + bne _080C6304 + mov r1, r10 + ldrh r0, [r1] + b _080C63EA +_080C6304: + mov r2, r10 + ldrh r0, [r2] + movs r1, 0x1F + mov r9, r1 + movs r4, 0x1F + adds r5, r4, 0 + ands r5, r0 + lsls r0, 16 + lsrs r2, r0, 21 + mov r1, r9 + ands r1, r2 + mov r8, r1 + lsrs r0, 26 + mov r2, r9 + ands r2, r0 + str r2, [sp, 0x4] + ldrh r2, [r3] + adds r0, r4, 0 + ands r0, r2 + lsls r2, 16 + lsrs r1, r2, 21 + mov r3, r9 + ands r1, r3 + adds r0, r1 + lsrs r2, 26 + ands r2, r3 + adds r0, r2 + movs r1, 0x3 + bl __divsi3 + lsls r0, 16 + lsrs r7, r0, 16 + mov r1, r8 + adds r0, r5, r1 + ldr r2, [sp, 0x4] + adds r0, r2 + movs r1, 0x3 + bl __divsi3 + lsls r0, 16 + lsrs r6, r0, 16 + ldr r3, [sp] + ldrh r1, [r3] + ands r4, r1 + lsls r1, 16 + lsrs r0, r1, 21 + mov r2, r9 + ands r0, r2 + adds r4, r0 + lsrs r1, 26 + ands r1, r2 + adds r4, r1 + adds r0, r4, 0 + movs r1, 0x3 + bl __divsi3 + lsls r0, 16 + lsrs r1, r0, 16 + cmp r7, r6 + bne _080C6386 + cmp r1, r6 + bne _080C6386 + mov r3, r10 + ldrh r0, [r3] + b _080C63EA +_080C6386: + cmp r7, r6 + bls _080C638E + subs r0, r7, r6 + b _080C6390 +_080C638E: + subs r0, r6, r7 +_080C6390: + lsls r0, 16 + lsrs r2, r0, 16 + cmp r1, r6 + bls _080C639C + subs r0, r1, r6 + b _080C639E +_080C639C: + subs r0, r6, r1 +_080C639E: + lsls r0, 16 + lsrs r0, 16 + cmp r2, r0 + bcc _080C63A8 + adds r0, r2, 0 +_080C63A8: + movs r4, 0x1F + subs r4, r0 + lsls r4, 16 + lsrs r4, 16 + adds r0, r5, 0 + muls r0, r4 + movs r1, 0x1F + bl __divsi3 + lsls r0, 16 + lsrs r5, r0, 16 + mov r0, r8 + muls r0, r4 + movs r1, 0x1F + bl __divsi3 + lsls r0, 16 + lsrs r0, 16 + mov r8, r0 + ldr r1, [sp, 0x4] + adds r0, r1, 0 + muls r0, r4 + movs r1, 0x1F + bl __divsi3 + lsls r0, 16 + lsrs r0, 6 + mov r2, r8 + lsls r1, r2, 5 + orrs r0, r1 + orrs r5, r0 + lsls r0, r5, 16 + lsrs r0, 16 +_080C63EA: + add sp, 0x8 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end sub_80C62DC + + thumb_func_start sub_80C63FC +sub_80C63FC: @ 80C63FC + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0xC + ldrb r1, [r0, 0x1D] + lsrs r5, r1, 3 + ldrb r1, [r0, 0x1E] + lsrs r1, 3 + str r1, [sp, 0x8] + ldr r1, [r0, 0x4] + str r1, [sp] + ldr r2, [r0, 0x10] + str r2, [sp, 0x4] + ldrh r0, [r0, 0x16] + cmp r0, 0x2 + bne _080C64AC + movs r1, 0 + ldr r0, [sp, 0x8] + cmp r1, r0 + bcc _080C642A + b _080C6538 +_080C642A: + movs r0, 0 + adds r2, r1, 0x1 + mov r10, r2 + cmp r0, r5 + bcs _080C649E + adds r2, r1, 0 + muls r2, r5 + mov r9, r2 + lsls r1, 3 + mov r8, r1 +_080C643E: + movs r4, 0 + lsls r6, r0, 4 + adds r7, r0, 0x1 + add r0, r9 + lsls r0, 6 + ldr r1, [sp, 0x4] + adds r1, r0 + mov r12, r1 +_080C644E: + lsls r0, r4, 3 + mov r2, r12 + adds r3, r2, r0 + mov r1, r8 + adds r0, r1, r4 + lsls r0, 3 + muls r0, r5 + lsls r0, 1 + ldr r2, [sp] + adds r0, r2, r0 + adds r2, r0, r6 + ldrh r0, [r2, 0x2] + lsls r0, 8 + ldrh r1, [r2] + orrs r0, r1 + strh r0, [r3] + ldrh r0, [r2, 0x6] + lsls r0, 8 + ldrh r1, [r2, 0x4] + orrs r0, r1 + strh r0, [r3, 0x2] + ldrh r0, [r2, 0xA] + lsls r0, 8 + ldrh r1, [r2, 0x8] + orrs r0, r1 + strh r0, [r3, 0x4] + ldrh r0, [r2, 0xE] + lsls r0, 8 + ldrh r1, [r2, 0xC] + orrs r0, r1 + strh r0, [r3, 0x6] + adds r0, r4, 0x1 + lsls r0, 16 + lsrs r4, r0, 16 + cmp r4, 0x7 + bls _080C644E + lsls r0, r7, 16 + lsrs r0, 16 + cmp r0, r5 + bcc _080C643E +_080C649E: + mov r1, r10 + lsls r0, r1, 16 + lsrs r1, r0, 16 + ldr r2, [sp, 0x8] + cmp r1, r2 + bcc _080C642A + b _080C6538 +_080C64AC: + movs r1, 0 + ldr r0, [sp, 0x8] + cmp r1, r0 + bcs _080C6538 +_080C64B4: + movs r0, 0 + adds r2, r1, 0x1 + mov r10, r2 + cmp r0, r5 + bcs _080C652C + adds r2, r1, 0 + muls r2, r5 + mov r9, r2 + lsls r1, 3 + mov r8, r1 +_080C64C8: + movs r4, 0 + lsls r6, r0, 4 + adds r7, r0, 0x1 + add r0, r9 + lsls r0, 5 + ldr r1, [sp, 0x4] + adds r1, r0 + mov r12, r1 +_080C64D8: + lsls r0, r4, 2 + mov r2, r12 + adds r3, r2, r0 + mov r1, r8 + adds r0, r1, r4 + lsls r0, 3 + muls r0, r5 + lsls r0, 1 + ldr r2, [sp] + adds r0, r2, r0 + adds r2, r0, r6 + ldrh r1, [r2, 0x2] + lsls r1, 4 + ldrh r0, [r2] + orrs r1, r0 + ldrh r0, [r2, 0x4] + lsls r0, 8 + orrs r1, r0 + ldrh r0, [r2, 0x6] + lsls r0, 12 + orrs r1, r0 + strh r1, [r3] + ldrh r1, [r2, 0xA] + lsls r1, 4 + ldrh r0, [r2, 0x8] + orrs r1, r0 + ldrh r0, [r2, 0xC] + lsls r0, 8 + orrs r1, r0 + ldrh r0, [r2, 0xE] + lsls r0, 12 + orrs r1, r0 + strh r1, [r3, 0x2] + adds r0, r4, 0x1 + lsls r0, 16 + lsrs r4, r0, 16 + cmp r4, 0x7 + bls _080C64D8 + lsls r0, r7, 16 + lsrs r0, 16 + cmp r0, r5 + bcc _080C64C8 +_080C652C: + mov r1, r10 + lsls r0, r1, 16 + lsrs r1, r0, 16 + ldr r2, [sp, 0x8] + cmp r1, r2 + bcc _080C64B4 +_080C6538: + add sp, 0xC + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end sub_80C63FC + + thumb_func_start sub_80C6548 +sub_80C6548: @ 80C6548 + push {lr} + ldr r2, _080C6598 @ =gUnknown_3005354 + ldrb r1, [r0, 0x18] + lsls r1, 4 + strh r1, [r2] + ldr r3, _080C659C @ =gUnknown_3005350 + ldrh r2, [r2] + lsls r2, 1 + ldr r1, [r0, 0x8] + adds r1, r2 + str r1, [r3] + ldr r2, _080C65A0 @ =gUnknown_3005334 + ldr r1, [r0, 0x4] + str r1, [r2] + ldr r2, _080C65A4 @ =gUnknown_3005330 + ldrb r1, [r0, 0x19] + strb r1, [r2] + ldr r2, _080C65A8 @ =gUnknown_3005344 + ldrb r1, [r0, 0x1A] + strb r1, [r2] + ldr r2, _080C65AC @ =gUnknown_3005340 + ldrb r1, [r0, 0x1B] + strb r1, [r2] + ldr r2, _080C65B0 @ =gUnknown_3005338 + ldrb r1, [r0, 0x1C] + strb r1, [r2] + ldr r2, _080C65B4 @ =gUnknown_300534C + ldrb r1, [r0, 0x1D] + strb r1, [r2] + ldr r2, _080C65B8 @ =gUnknown_300533C + ldrb r1, [r0, 0x1E] + strb r1, [r2] + ldrh r0, [r0, 0x14] + cmp r0, 0x5 + bhi _080C660E + lsls r0, 2 + ldr r1, _080C65BC @ =_080C65C0 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_080C6598: .4byte gUnknown_3005354 +_080C659C: .4byte gUnknown_3005350 +_080C65A0: .4byte gUnknown_3005334 +_080C65A4: .4byte gUnknown_3005330 +_080C65A8: .4byte gUnknown_3005344 +_080C65AC: .4byte gUnknown_3005340 +_080C65B0: .4byte gUnknown_3005338 +_080C65B4: .4byte gUnknown_300534C +_080C65B8: .4byte gUnknown_300533C +_080C65BC: .4byte _080C65C0 + .align 2, 0 +_080C65C0: + .4byte _080C65D8 + .4byte _080C65E0 + .4byte _080C65E8 + .4byte _080C65F2 + .4byte _080C65FC + .4byte _080C6606 +_080C65D8: + movs r0, 0 + bl sub_80C6748 + b _080C660E +_080C65E0: + movs r0, 0x1 + bl sub_80C6748 + b _080C660E +_080C65E8: + bl sub_80C6614 + bl sub_80C6AB8 + b _080C660E +_080C65F2: + bl sub_80C6714 + bl sub_80C6A08 + b _080C660E +_080C65FC: + bl sub_80C66D8 + bl sub_80C6958 + b _080C660E +_080C6606: + bl sub_80C66BC + bl sub_80C68A0 +_080C660E: + pop {r0} + bx r0 + thumb_func_end sub_80C6548 + + thumb_func_start sub_80C6614 +sub_80C6614: @ 80C6614 + ldr r2, _080C667C @ =gUnknown_3005350 + ldr r1, [r2] + movs r0, 0 + strh r0, [r1] + ldr r0, [r2] + ldr r2, _080C6680 @ =0x000018c6 + adds r1, r2, 0 + strh r1, [r0, 0x2] + ldr r2, _080C6684 @ =0x000077bd + adds r1, r2, 0 + strh r1, [r0, 0x4] + ldr r2, _080C6688 @ =0x00002d6b + adds r1, r2, 0 + strh r1, [r0, 0x6] + ldr r2, _080C668C @ =0x000018dd + adds r1, r2, 0 + strh r1, [r0, 0x8] + ldr r2, _080C6690 @ =0x00001ba6 + adds r1, r2, 0 + strh r1, [r0, 0xA] + ldr r2, _080C6694 @ =0x000074c6 + adds r1, r2, 0 + strh r1, [r0, 0xC] + ldr r2, _080C6698 @ =0x00001bbd + adds r1, r2, 0 + strh r1, [r0, 0xE] + ldr r2, _080C669C @ =0x000074dd + adds r1, r2, 0 + strh r1, [r0, 0x10] + ldr r2, _080C66A0 @ =0x000077a6 + adds r1, r2, 0 + strh r1, [r0, 0x12] + ldr r2, _080C66A4 @ =0x0000197d + adds r1, r2, 0 + strh r1, [r0, 0x14] + ldr r2, _080C66A8 @ =0x00001bab + adds r1, r2, 0 + strh r1, [r0, 0x16] + ldr r2, _080C66AC @ =0x00007566 + adds r1, r2, 0 + strh r1, [r0, 0x18] + ldr r2, _080C66B0 @ =0x00002cdd + adds r1, r2, 0 + strh r1, [r0, 0x1A] + ldr r2, _080C66B4 @ =0x00002fa6 + adds r1, r2, 0 + strh r1, [r0, 0x1C] + ldr r2, _080C66B8 @ =0x000074cb + adds r1, r2, 0 + strh r1, [r0, 0x1E] + bx lr + .align 2, 0 +_080C667C: .4byte gUnknown_3005350 +_080C6680: .4byte 0x000018c6 +_080C6684: .4byte 0x000077bd +_080C6688: .4byte 0x00002d6b +_080C668C: .4byte 0x000018dd +_080C6690: .4byte 0x00001ba6 +_080C6694: .4byte 0x000074c6 +_080C6698: .4byte 0x00001bbd +_080C669C: .4byte 0x000074dd +_080C66A0: .4byte 0x000077a6 +_080C66A4: .4byte 0x0000197d +_080C66A8: .4byte 0x00001bab +_080C66AC: .4byte 0x00007566 +_080C66B0: .4byte 0x00002cdd +_080C66B4: .4byte 0x00002fa6 +_080C66B8: .4byte 0x000074cb + thumb_func_end sub_80C6614 + + thumb_func_start sub_80C66BC +sub_80C66BC: @ 80C66BC + ldr r2, _080C66D0 @ =gUnknown_3005350 + ldr r0, [r2] + movs r1, 0 + strh r1, [r0] + ldr r2, [r2] + strh r1, [r2, 0x2] + ldr r1, _080C66D4 @ =0x00007fff + adds r0, r1, 0 + strh r0, [r2, 0x4] + bx lr + .align 2, 0 +_080C66D0: .4byte gUnknown_3005350 +_080C66D4: .4byte 0x00007fff + thumb_func_end sub_80C66BC + + thumb_func_start sub_80C66D8 +sub_80C66D8: @ 80C66D8 + push {r4,r5,lr} + ldr r1, _080C6710 @ =gUnknown_3005350 + ldr r0, [r1] + movs r2, 0 + strh r2, [r0] + ldr r0, [r1] + strh r2, [r0, 0x2] + movs r4, 0 + adds r5, r1, 0 +_080C66EA: + ldr r0, [r5] + lsls r2, r4, 1 + adds r2, r0 + adds r0, r4, 0x2 + lsls r3, r0, 1 + lsls r1, r0, 11 + lsls r0, 6 + orrs r1, r0 + orrs r1, r3 + strh r1, [r2, 0x4] + adds r0, r4, 0x1 + lsls r0, 24 + lsrs r4, r0, 24 + cmp r4, 0xD + bls _080C66EA + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080C6710: .4byte gUnknown_3005350 + thumb_func_end sub_80C66D8 + + thumb_func_start sub_80C6714 +sub_80C6714: @ 80C6714 + push {r4,lr} + ldr r2, _080C6744 @ =gUnknown_3005350 + ldr r1, [r2] + movs r0, 0 + strh r0, [r1] + movs r3, 0 + adds r4, r2, 0 +_080C6722: + ldr r0, [r4] + lsls r2, r3, 1 + adds r2, r0 + lsls r0, r3, 10 + lsls r1, r3, 5 + orrs r0, r1 + orrs r0, r3 + strh r0, [r2, 0x2] + adds r0, r3, 0x1 + lsls r0, 24 + lsrs r3, r0, 24 + cmp r3, 0x1F + bls _080C6722 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080C6744: .4byte gUnknown_3005350 + thumb_func_end sub_80C6714 + + thumb_func_start sub_80C6748 +sub_80C6748: @ 80C6748 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + lsls r0, 24 + movs r1, 0xDF + mov r9, r1 + cmp r0, 0 + bne _080C6760 + movs r2, 0xFF + mov r9, r2 +_080C6760: + movs r6, 0 + ldr r3, _080C67E4 @ =gUnknown_3005350 + mov r12, r3 + mov r0, r9 + lsls r4, r0, 1 + ldr r5, _080C67E8 @ =gUnknown_3005338 + cmp r6, r9 + bcs _080C6784 + movs r2, 0 +_080C6772: + ldr r0, [r3] + lsls r1, r6, 1 + adds r1, r0 + strh r2, [r1] + adds r0, r6, 0x1 + lsls r0, 24 + lsrs r6, r0, 24 + cmp r6, r9 + bcc _080C6772 +_080C6784: + mov r1, r12 + ldr r0, [r1] + adds r0, r4, r0 + ldr r2, _080C67EC @ =0x00003def + adds r1, r2, 0 + strh r1, [r0] + movs r3, 0 + ldrb r5, [r5] + cmp r3, r5 + bcs _080C6888 +_080C6798: + ldr r2, _080C67F0 @ =gUnknown_3005334 + ldr r0, _080C67F4 @ =gUnknown_3005344 + ldrb r1, [r0] + adds r1, r3 + ldr r0, _080C67F8 @ =gUnknown_300534C + ldrb r0, [r0] + muls r0, r1 + lsls r0, 1 + ldr r1, [r2] + adds r1, r0 + ldr r0, _080C67FC @ =gUnknown_3005330 + ldrb r0, [r0] + lsls r0, 1 + adds r4, r1, r0 + movs r6, 0 + ldr r0, _080C6800 @ =gUnknown_3005340 + adds r2, r0, 0 + adds r3, 0x1 + mov r10, r3 + ldrb r3, [r2] + cmp r6, r3 + bcs _080C687A + ldr r0, _080C6804 @ =gUnknown_3005354 + mov r8, r0 +_080C67C8: + ldrh r0, [r4] + movs r3, 0x80 + lsls r3, 8 + adds r1, r3, 0 + ands r0, r1 + cmp r0, 0 + beq _080C6808 + mov r1, r8 + ldrh r0, [r1] + strh r0, [r4] + adds r6, 0x1 + adds r7, r4, 0x2 + b _080C686E + .align 2, 0 +_080C67E4: .4byte gUnknown_3005350 +_080C67E8: .4byte gUnknown_3005338 +_080C67EC: .4byte 0x00003def +_080C67F0: .4byte gUnknown_3005334 +_080C67F4: .4byte gUnknown_3005344 +_080C67F8: .4byte gUnknown_300534C +_080C67FC: .4byte gUnknown_3005330 +_080C6800: .4byte gUnknown_3005340 +_080C6804: .4byte gUnknown_3005354 +_080C6808: + adds r0, r4, 0 + bl sub_80C6B68 + lsls r0, 16 + lsrs r5, r0, 16 + movs r3, 0x1 + adds r6, 0x1 + adds r7, r4, 0x2 + cmp r3, r9 + bcs _080C6864 + ldr r0, _080C6834 @ =gUnknown_3005350 + ldr r2, [r0] + ldrh r1, [r2, 0x2] + mov r12, r0 + cmp r1, 0 + bne _080C6838 + strh r5, [r2, 0x2] + mov r2, r8 + ldrh r0, [r2] + adds r0, 0x1 + b _080C6862 + .align 2, 0 +_080C6834: .4byte gUnknown_3005350 +_080C6838: + mov r2, r12 + ldr r1, [r2] + lsls r0, r3, 1 + adds r0, r1 + ldrh r0, [r0] + cmp r0, r5 + beq _080C685C + adds r0, r3, 0x1 + lsls r0, 24 + lsrs r3, r0, 24 + cmp r3, r9 + bcs _080C6864 + lsls r0, r3, 1 + adds r1, r0, r1 + ldrh r0, [r1] + cmp r0, 0 + bne _080C6838 + strh r5, [r1] +_080C685C: + mov r1, r8 + ldrh r0, [r1] + adds r0, r3 +_080C6862: + strh r0, [r4] +_080C6864: + ldr r2, _080C6898 @ =gUnknown_3005340 + cmp r3, r9 + bne _080C686E + mov r3, r9 + strh r3, [r4] +_080C686E: + lsls r0, r6, 24 + lsrs r6, r0, 24 + adds r4, r7, 0 + ldrb r0, [r2] + cmp r6, r0 + bcc _080C67C8 +_080C687A: + mov r1, r10 + lsls r0, r1, 24 + lsrs r3, r0, 24 + ldr r0, _080C689C @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r3, r0 + bcc _080C6798 +_080C6888: + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080C6898: .4byte gUnknown_3005340 +_080C689C: .4byte gUnknown_3005338 + thumb_func_end sub_80C6748 + + thumb_func_start sub_80C68A0 +sub_80C68A0: @ 80C68A0 + push {r4-r7,lr} + mov r7, r8 + push {r7} + movs r2, 0 + ldr r0, _080C68F4 @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r2, r0 + bcs _080C6944 + ldr r0, _080C68F8 @ =gUnknown_3005334 + mov r8, r0 +_080C68B4: + ldr r0, _080C68FC @ =gUnknown_3005344 + ldrb r1, [r0] + adds r1, r2 + ldr r0, _080C6900 @ =gUnknown_300534C + ldrb r0, [r0] + muls r0, r1 + lsls r0, 1 + mov r3, r8 + ldr r1, [r3] + adds r1, r0 + ldr r0, _080C6904 @ =gUnknown_3005330 + ldrb r0, [r0] + lsls r0, 1 + adds r4, r1, r0 + movs r6, 0 + ldr r0, _080C6908 @ =gUnknown_3005340 + adds r3, r0, 0 + adds r7, r2, 0x1 + ldrb r0, [r3] + cmp r6, r0 + bcs _080C6938 + ldr r5, _080C690C @ =gUnknown_3005354 +_080C68E0: + ldrh r0, [r4] + movs r2, 0x80 + lsls r2, 8 + adds r1, r2, 0 + ands r0, r1 + cmp r0, 0 + beq _080C6910 + ldrh r0, [r5] + strh r0, [r4] + b _080C692A + .align 2, 0 +_080C68F4: .4byte gUnknown_3005338 +_080C68F8: .4byte gUnknown_3005334 +_080C68FC: .4byte gUnknown_3005344 +_080C6900: .4byte gUnknown_300534C +_080C6904: .4byte gUnknown_3005330 +_080C6908: .4byte gUnknown_3005340 +_080C690C: .4byte gUnknown_3005354 +_080C6910: + adds r0, r4, 0 + bl sub_80C600C + lsls r0, 16 + cmp r0, 0 + bne _080C6922 + ldrh r0, [r5] + adds r0, 0x1 + b _080C6926 +_080C6922: + ldrh r0, [r5] + adds r0, 0x2 +_080C6926: + strh r0, [r4] + ldr r3, _080C6950 @ =gUnknown_3005340 +_080C692A: + adds r0, r6, 0x1 + lsls r0, 24 + lsrs r6, r0, 24 + adds r4, 0x2 + ldrb r0, [r3] + cmp r6, r0 + bcc _080C68E0 +_080C6938: + lsls r0, r7, 24 + lsrs r2, r0, 24 + ldr r0, _080C6954 @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r2, r0 + bcc _080C68B4 +_080C6944: + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080C6950: .4byte gUnknown_3005340 +_080C6954: .4byte gUnknown_3005338 + thumb_func_end sub_80C68A0 + + thumb_func_start sub_80C6958 +sub_80C6958: @ 80C6958 + push {r4-r7,lr} + mov r7, r8 + push {r7} + sub sp, 0x4 + movs r2, 0 + ldr r0, _080C69AC @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r2, r0 + bcs _080C69F4 + ldr r0, _080C69B0 @ =gUnknown_3005334 + mov r8, r0 +_080C696E: + ldr r0, _080C69B4 @ =gUnknown_3005344 + ldrb r1, [r0] + adds r1, r2 + ldr r0, _080C69B8 @ =gUnknown_300534C + ldrb r0, [r0] + muls r0, r1 + lsls r0, 1 + mov r3, r8 + ldr r1, [r3] + adds r1, r0 + ldr r0, _080C69BC @ =gUnknown_3005330 + ldrb r0, [r0] + lsls r0, 1 + adds r4, r1, r0 + movs r5, 0 + ldr r0, _080C69C0 @ =gUnknown_3005340 + adds r7, r2, 0x1 + ldrb r0, [r0] + cmp r5, r0 + bcs _080C69E8 + ldr r6, _080C69C4 @ =gUnknown_3005354 + movs r0, 0x80 + lsls r0, 8 + adds r2, r0, 0 +_080C699E: + ldrh r0, [r4] + ands r0, r2 + cmp r0, 0 + beq _080C69C8 + ldrh r0, [r6] + strh r0, [r4] + b _080C69D8 + .align 2, 0 +_080C69AC: .4byte gUnknown_3005338 +_080C69B0: .4byte gUnknown_3005334 +_080C69B4: .4byte gUnknown_3005344 +_080C69B8: .4byte gUnknown_300534C +_080C69BC: .4byte gUnknown_3005330 +_080C69C0: .4byte gUnknown_3005340 +_080C69C4: .4byte gUnknown_3005354 +_080C69C8: + adds r0, r4, 0 + str r2, [sp] + bl sub_80C6CAC + ldrh r1, [r6] + adds r0, r1 + strh r0, [r4] + ldr r2, [sp] +_080C69D8: + adds r0, r5, 0x1 + lsls r0, 24 + lsrs r5, r0, 24 + adds r4, 0x2 + ldr r0, _080C6A00 @ =gUnknown_3005340 + ldrb r0, [r0] + cmp r5, r0 + bcc _080C699E +_080C69E8: + lsls r0, r7, 24 + lsrs r2, r0, 24 + ldr r0, _080C6A04 @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r2, r0 + bcc _080C696E +_080C69F4: + add sp, 0x4 + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080C6A00: .4byte gUnknown_3005340 +_080C6A04: .4byte gUnknown_3005338 + thumb_func_end sub_80C6958 + + thumb_func_start sub_80C6A08 +sub_80C6A08: @ 80C6A08 + push {r4-r7,lr} + mov r7, r8 + push {r7} + sub sp, 0x4 + movs r2, 0 + ldr r0, _080C6A5C @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r2, r0 + bcs _080C6AA4 + ldr r0, _080C6A60 @ =gUnknown_3005334 + mov r8, r0 +_080C6A1E: + ldr r0, _080C6A64 @ =gUnknown_3005344 + ldrb r1, [r0] + adds r1, r2 + ldr r0, _080C6A68 @ =gUnknown_300534C + ldrb r0, [r0] + muls r0, r1 + lsls r0, 1 + mov r3, r8 + ldr r1, [r3] + adds r1, r0 + ldr r0, _080C6A6C @ =gUnknown_3005330 + ldrb r0, [r0] + lsls r0, 1 + adds r4, r1, r0 + movs r5, 0 + ldr r0, _080C6A70 @ =gUnknown_3005340 + adds r7, r2, 0x1 + ldrb r0, [r0] + cmp r5, r0 + bcs _080C6A98 + ldr r6, _080C6A74 @ =gUnknown_3005354 + movs r0, 0x80 + lsls r0, 8 + adds r2, r0, 0 +_080C6A4E: + ldrh r0, [r4] + ands r0, r2 + cmp r0, 0 + beq _080C6A78 + ldrh r0, [r6] + strh r0, [r4] + b _080C6A88 + .align 2, 0 +_080C6A5C: .4byte gUnknown_3005338 +_080C6A60: .4byte gUnknown_3005334 +_080C6A64: .4byte gUnknown_3005344 +_080C6A68: .4byte gUnknown_300534C +_080C6A6C: .4byte gUnknown_3005330 +_080C6A70: .4byte gUnknown_3005340 +_080C6A74: .4byte gUnknown_3005354 +_080C6A78: + adds r0, r4, 0 + str r2, [sp] + bl sub_80C6CE0 + ldrh r1, [r6] + adds r0, r1 + strh r0, [r4] + ldr r2, [sp] +_080C6A88: + adds r0, r5, 0x1 + lsls r0, 24 + lsrs r5, r0, 24 + adds r4, 0x2 + ldr r0, _080C6AB0 @ =gUnknown_3005340 + ldrb r0, [r0] + cmp r5, r0 + bcc _080C6A4E +_080C6A98: + lsls r0, r7, 24 + lsrs r2, r0, 24 + ldr r0, _080C6AB4 @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r2, r0 + bcc _080C6A1E +_080C6AA4: + add sp, 0x4 + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080C6AB0: .4byte gUnknown_3005340 +_080C6AB4: .4byte gUnknown_3005338 + thumb_func_end sub_80C6A08 + + thumb_func_start sub_80C6AB8 +sub_80C6AB8: @ 80C6AB8 + push {r4-r7,lr} + mov r7, r8 + push {r7} + sub sp, 0x4 + movs r2, 0 + ldr r0, _080C6B0C @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r2, r0 + bcs _080C6B54 + ldr r0, _080C6B10 @ =gUnknown_3005334 + mov r8, r0 +_080C6ACE: + ldr r0, _080C6B14 @ =gUnknown_3005344 + ldrb r1, [r0] + adds r1, r2 + ldr r0, _080C6B18 @ =gUnknown_300534C + ldrb r0, [r0] + muls r0, r1 + lsls r0, 1 + mov r3, r8 + ldr r1, [r3] + adds r1, r0 + ldr r0, _080C6B1C @ =gUnknown_3005330 + ldrb r0, [r0] + lsls r0, 1 + adds r4, r1, r0 + movs r5, 0 + ldr r0, _080C6B20 @ =gUnknown_3005340 + adds r7, r2, 0x1 + ldrb r0, [r0] + cmp r5, r0 + bcs _080C6B48 + ldr r6, _080C6B24 @ =gUnknown_3005354 + movs r0, 0x80 + lsls r0, 8 + adds r2, r0, 0 +_080C6AFE: + ldrh r0, [r4] + ands r0, r2 + cmp r0, 0 + beq _080C6B28 + ldrh r0, [r6] + strh r0, [r4] + b _080C6B38 + .align 2, 0 +_080C6B0C: .4byte gUnknown_3005338 +_080C6B10: .4byte gUnknown_3005334 +_080C6B14: .4byte gUnknown_3005344 +_080C6B18: .4byte gUnknown_300534C +_080C6B1C: .4byte gUnknown_3005330 +_080C6B20: .4byte gUnknown_3005340 +_080C6B24: .4byte gUnknown_3005354 +_080C6B28: + adds r0, r4, 0 + str r2, [sp] + bl sub_80C6BDC + ldrh r1, [r6] + adds r0, r1 + strh r0, [r4] + ldr r2, [sp] +_080C6B38: + adds r0, r5, 0x1 + lsls r0, 24 + lsrs r5, r0, 24 + adds r4, 0x2 + ldr r0, _080C6B60 @ =gUnknown_3005340 + ldrb r0, [r0] + cmp r5, r0 + bcc _080C6AFE +_080C6B48: + lsls r0, r7, 24 + lsrs r2, r0, 24 + ldr r0, _080C6B64 @ =gUnknown_3005338 + ldrb r0, [r0] + cmp r2, r0 + bcc _080C6ACE +_080C6B54: + add sp, 0x4 + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080C6B60: .4byte gUnknown_3005340 +_080C6B64: .4byte gUnknown_3005338 + thumb_func_end sub_80C6AB8 + + thumb_func_start sub_80C6B68 +sub_80C6B68: @ 80C6B68 + push {r4,lr} + ldrh r0, [r0] + movs r1, 0x1F + movs r4, 0x1F + ands r4, r0 + lsls r0, 16 + lsrs r3, r0, 21 + ands r3, r1 + lsrs r2, r0, 26 + ands r2, r1 + movs r1, 0x3 + adds r0, r4, 0 + ands r0, r1 + cmp r0, 0 + beq _080C6B8C + movs r0, 0x1C + ands r0, r4 + adds r4, r0, 0x4 +_080C6B8C: + adds r0, r3, 0 + ands r0, r1 + cmp r0, 0 + beq _080C6B9A + movs r0, 0x1C + ands r0, r3 + adds r3, r0, 0x4 +_080C6B9A: + adds r0, r2, 0 + ands r0, r1 + cmp r0, 0 + beq _080C6BA8 + movs r0, 0x1C + ands r0, r2 + adds r2, r0, 0x4 +_080C6BA8: + cmp r4, 0x5 + bhi _080C6BAE + movs r4, 0x6 +_080C6BAE: + cmp r4, 0x1E + bls _080C6BB4 + movs r4, 0x1E +_080C6BB4: + cmp r3, 0x5 + bhi _080C6BBA + movs r3, 0x6 +_080C6BBA: + cmp r3, 0x1E + bls _080C6BC0 + movs r3, 0x1E +_080C6BC0: + cmp r2, 0x5 + bhi _080C6BC6 + movs r2, 0x6 +_080C6BC6: + cmp r2, 0x1E + bls _080C6BCC + movs r2, 0x1E +_080C6BCC: + lsls r0, r2, 10 + lsls r1, r3, 5 + orrs r0, r1 + orrs r4, r0 + adds r0, r4, 0 + pop {r4} + pop {r1} + bx r1 + thumb_func_end sub_80C6B68 + + thumb_func_start sub_80C6BDC +sub_80C6BDC: @ 80C6BDC + push {lr} + ldrh r0, [r0] + movs r1, 0x1F + movs r3, 0x1F + ands r3, r0 + lsls r0, 16 + lsrs r2, r0, 21 + ands r2, r1 + lsrs r0, 26 + ands r0, r1 + cmp r3, 0xB + bhi _080C6C00 + cmp r2, 0xA + bhi _080C6C00 + cmp r0, 0xA + bhi _080C6C00 + movs r0, 0x1 + b _080C6CA6 +_080C6C00: + cmp r3, 0x13 + bls _080C6C24 + cmp r2, 0x13 + bls _080C6C0C + cmp r0, 0x13 + bhi _080C6C30 +_080C6C0C: + cmp r3, 0x13 + bls _080C6C24 + cmp r2, 0x13 + bls _080C6C1A + cmp r0, 0xE + bhi _080C6C30 + b _080C6C68 +_080C6C1A: + cmp r0, 0x13 + bls _080C6C24 + cmp r2, 0xE + bhi _080C6C30 + b _080C6C44 +_080C6C24: + cmp r2, 0x13 + bls _080C6C34 + cmp r0, 0x13 + bls _080C6C34 + cmp r3, 0xE + bls _080C6C8C +_080C6C30: + movs r0, 0x2 + b _080C6CA6 +_080C6C34: + cmp r3, 0x13 + bls _080C6C58 + cmp r2, 0xB + bls _080C6C4C + cmp r0, 0xB + bls _080C6C48 + cmp r2, r0 + bcs _080C6C68 +_080C6C44: + movs r0, 0x8 + b _080C6CA6 +_080C6C48: + movs r0, 0xA + b _080C6CA6 +_080C6C4C: + cmp r0, 0xB + bls _080C6C54 + movs r0, 0xD + b _080C6CA6 +_080C6C54: + movs r0, 0x4 + b _080C6CA6 +_080C6C58: + cmp r2, 0x13 + bls _080C6C7C + cmp r3, 0xB + bls _080C6C70 + cmp r0, 0xB + bls _080C6C6C + cmp r3, r0 + bcc _080C6C8C +_080C6C68: + movs r0, 0x7 + b _080C6CA6 +_080C6C6C: + movs r0, 0xB + b _080C6CA6 +_080C6C70: + cmp r0, 0xB + bls _080C6C78 + movs r0, 0xE + b _080C6CA6 +_080C6C78: + movs r0, 0x5 + b _080C6CA6 +_080C6C7C: + cmp r0, 0x13 + bls _080C6CA4 + cmp r3, 0xB + bls _080C6C90 + cmp r2, 0xB + bls _080C6C98 + cmp r3, r2 + bcs _080C6C44 +_080C6C8C: + movs r0, 0x9 + b _080C6CA6 +_080C6C90: + cmp r2, 0xB + bls _080C6C98 + movs r0, 0xC + b _080C6CA6 +_080C6C98: + cmp r0, 0xB + bls _080C6CA0 + movs r0, 0xF + b _080C6CA6 +_080C6CA0: + movs r0, 0x6 + b _080C6CA6 +_080C6CA4: + movs r0, 0x3 +_080C6CA6: + pop {r1} + bx r1 + thumb_func_end sub_80C6BDC + + thumb_func_start sub_80C6CAC +sub_80C6CAC: @ 80C6CAC + push {lr} + ldrh r1, [r0] + movs r3, 0x1F + movs r0, 0x1F + ands r0, r1 + lsls r1, 16 + lsrs r2, r1, 21 + ands r2, r3 + lsrs r1, 26 + ands r1, r3 + adds r0, r2 + adds r0, r1 + movs r1, 0x3 + bl __divsi3 + movs r1, 0x1E + ands r0, r1 + lsls r0, 16 + cmp r0, 0 + beq _080C6CD8 + lsrs r0, 17 + b _080C6CDA +_080C6CD8: + movs r0, 0x1 +_080C6CDA: + pop {r1} + bx r1 + thumb_func_end sub_80C6CAC + + thumb_func_start sub_80C6CE0 +sub_80C6CE0: @ 80C6CE0 + push {lr} + ldrh r1, [r0] + movs r3, 0x1F + movs r0, 0x1F + ands r0, r1 + lsls r1, 16 + lsrs r2, r1, 21 + ands r2, r3 + lsrs r1, 26 + ands r1, r3 + adds r0, r2 + adds r0, r1 + movs r1, 0x3 + bl __divsi3 + lsls r0, 16 + movs r1, 0x80 + lsls r1, 9 + adds r0, r1 + lsrs r0, 16 + pop {r1} + bx r1 + thumb_func_end sub_80C6CE0 + + .align 2, 0 @ Don't pad with nop. diff --git a/asm/region_map.s b/asm/region_map.s deleted file mode 100644 index 1f63bde6c..000000000 --- a/asm/region_map.s +++ /dev/null @@ -1,3486 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80C52D0 -sub_80C52D0: @ 80C52D0 - push {lr} - ldr r2, _080C5318 @ =gUnknown_3005334 - ldr r1, [r0, 0x4] - str r1, [r2] - ldr r2, _080C531C @ =gUnknown_3005348 - ldrb r1, [r0, 0x1F] - strb r1, [r2] - ldr r2, _080C5320 @ =gUnknown_3005330 - ldrb r1, [r0, 0x19] - strb r1, [r2] - ldr r2, _080C5324 @ =gUnknown_3005344 - ldrb r1, [r0, 0x1A] - strb r1, [r2] - ldr r2, _080C5328 @ =gUnknown_3005340 - ldrb r1, [r0, 0x1B] - strb r1, [r2] - ldr r2, _080C532C @ =gUnknown_3005338 - ldrb r1, [r0, 0x1C] - strb r1, [r2] - ldr r2, _080C5330 @ =gUnknown_300534C - ldrb r1, [r0, 0x1D] - strb r1, [r2] - ldr r2, _080C5334 @ =gUnknown_300533C - ldrb r1, [r0, 0x1E] - strb r1, [r2] - ldrb r0, [r0] - subs r0, 0x2 - cmp r0, 0x22 - bls _080C530C - b _080C5458 -_080C530C: - lsls r0, 2 - ldr r1, _080C5338 @ =_080C533C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C5318: .4byte gUnknown_3005334 -_080C531C: .4byte gUnknown_3005348 -_080C5320: .4byte gUnknown_3005330 -_080C5324: .4byte gUnknown_3005344 -_080C5328: .4byte gUnknown_3005340 -_080C532C: .4byte gUnknown_3005338 -_080C5330: .4byte gUnknown_300534C -_080C5334: .4byte gUnknown_300533C -_080C5338: .4byte _080C533C - .align 2, 0 -_080C533C: - .4byte _080C53C8 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5428 - .4byte _080C5458 - .4byte _080C53CE - .4byte _080C53D4 - .4byte _080C53E8 - .4byte _080C53FA - .4byte _080C5458 - .4byte _080C5410 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5416 - .4byte _080C53F4 - .4byte _080C541C - .4byte _080C5422 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5434 -_080C53C8: - bl sub_80C55D4 - b _080C5458 -_080C53CE: - bl sub_80C568C - b _080C5458 -_080C53D4: - bl sub_80C5884 - ldr r0, _080C53E4 @ =gUnknown_3005348 - ldrb r0, [r0] - bl sub_80C5748 - b _080C5458 - .align 2, 0 -_080C53E4: .4byte gUnknown_3005348 -_080C53E8: - bl sub_80C5884 - bl sub_80C59D4 - bl sub_80C57EC -_080C53F4: - bl sub_80C59D4 - b _080C5458 -_080C53FA: - bl sub_80C5884 - bl sub_80C5B9C - bl sub_80C5B9C - bl sub_80C5C44 - bl sub_80C57EC - b _080C5458 -_080C5410: - bl sub_80C5A6C - b _080C5458 -_080C5416: - bl sub_80C5884 - b _080C5458 -_080C541C: - bl sub_80C5B9C - b _080C5458 -_080C5422: - bl sub_80C5C44 - b _080C5458 -_080C5428: - bl sub_80C55F4 - movs r0, 0x3 - bl sub_80C545C - b _080C5458 -_080C5434: - bl sub_80C5884 - bl sub_80C5B9C - bl sub_80C5C44 - bl sub_80C57EC - bl sub_80C568C - bl sub_80C568C - movs r0, 0x2 - bl sub_80C545C - movs r0, 0x4 - bl sub_80C5514 -_080C5458: - pop {r0} - bx r0 - thumb_func_end sub_80C52D0 - - thumb_func_start sub_80C545C -sub_80C545C: @ 80C545C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r7, r0, 24 - movs r2, 0 - ldr r0, _080C54FC @ =gUnknown_3005338 - mov r8, r0 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C54EE - ldr r1, _080C5500 @ =gUnknown_3005340 - mov r12, r1 - ldr r3, _080C5504 @ =gUnknown_300534C - mov r10, r3 - ldr r0, _080C5508 @ =gUnknown_3005330 - mov r9, r0 -_080C5482: - ldr r1, _080C550C @ =gUnknown_3005344 - ldrb r0, [r1] - adds r0, r2 - mov r3, r10 - ldrb r1, [r3] - muls r0, r1 - lsls r0, 1 - ldr r3, _080C5510 @ =gUnknown_3005334 - ldr r1, [r3] - adds r1, r0 - mov r3, r9 - ldrb r0, [r3] - lsls r0, 1 - adds r3, r1, r0 - movs r4, 0 - adds r5, r2, 0x1 - mov r0, r12 - ldrb r0, [r0] - cmp r4, r0 - bcs _080C54E2 - movs r6, 0x80 - lsls r6, 8 -_080C54AE: - ldrh r1, [r3] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - bne _080C54D2 - movs r0, 0x1F - ands r0, r1 - adds r0, r7 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x1F - bls _080C54C8 - movs r2, 0x1F -_080C54C8: - lsls r0, r2, 10 - lsls r1, r2, 5 - orrs r0, r1 - orrs r0, r2 - strh r0, [r3] -_080C54D2: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - adds r3, 0x2 - mov r1, r12 - ldrb r1, [r1] - cmp r4, r1 - bcc _080C54AE -_080C54E2: - lsls r0, r5, 24 - lsrs r2, r0, 24 - mov r3, r8 - ldrb r3, [r3] - cmp r2, r3 - bcc _080C5482 -_080C54EE: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C54FC: .4byte gUnknown_3005338 -_080C5500: .4byte gUnknown_3005340 -_080C5504: .4byte gUnknown_300534C -_080C5508: .4byte gUnknown_3005330 -_080C550C: .4byte gUnknown_3005344 -_080C5510: .4byte gUnknown_3005334 - thumb_func_end sub_80C545C - - thumb_func_start sub_80C5514 -sub_80C5514: @ 80C5514 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r2, 0 - ldr r0, _080C55BC @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C55AC - ldr r1, _080C55C0 @ =gUnknown_3005340 - mov r10, r1 -_080C5532: - ldr r3, _080C55C4 @ =gUnknown_3005344 - ldrb r0, [r3] - adds r0, r2 - ldr r3, _080C55C8 @ =gUnknown_300534C - ldrb r1, [r3] - muls r0, r1 - lsls r0, 1 - ldr r3, _080C55CC @ =gUnknown_3005334 - ldr r1, [r3] - adds r1, r0 - ldr r3, _080C55D0 @ =gUnknown_3005330 - ldrb r0, [r3] - lsls r0, 1 - adds r3, r1, r0 - movs r5, 0 - adds r7, r2, 0x1 - mov r0, r10 - ldrb r0, [r0] - cmp r5, r0 - bcs _080C55A0 - movs r1, 0x80 - lsls r1, 8 - mov r9, r1 - movs r0, 0x1F - mov r12, r0 - mov r1, r8 - subs r6, r0, r1 -_080C5568: - ldrh r1, [r3] - mov r0, r9 - ands r0, r1 - cmp r0, 0 - bne _080C5590 - movs r4, 0x1F - mov r2, r12 - ands r2, r1 - cmp r2, r6 - ble _080C5586 - mov r1, r8 - lsrs r0, r1, 1 - subs r0, r4, r0 - lsls r0, 24 - lsrs r2, r0, 24 -_080C5586: - lsls r0, r2, 10 - lsls r1, r2, 5 - orrs r0, r1 - orrs r0, r2 - strh r0, [r3] -_080C5590: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r3, 0x2 - mov r0, r10 - ldrb r0, [r0] - cmp r5, r0 - bcc _080C5568 -_080C55A0: - lsls r0, r7, 24 - lsrs r2, r0, 24 - ldr r1, _080C55BC @ =gUnknown_3005338 - ldrb r1, [r1] - cmp r2, r1 - bcc _080C5532 -_080C55AC: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C55BC: .4byte gUnknown_3005338 -_080C55C0: .4byte gUnknown_3005340 -_080C55C4: .4byte gUnknown_3005344 -_080C55C8: .4byte gUnknown_300534C -_080C55CC: .4byte gUnknown_3005334 -_080C55D0: .4byte gUnknown_3005330 - thumb_func_end sub_80C5514 - - thumb_func_start sub_80C55D4 -sub_80C55D4: @ 80C55D4 - push {r4,r5,lr} - movs r4, 0 - ldr r5, _080C55F0 @ =0x00000c7f -_080C55DA: - lsls r0, r4, 16 - lsrs r0, 16 - bl sub_80C5CF8 - adds r4, 0x1 - cmp r4, r5 - bls _080C55DA - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C55F0: .4byte 0x00000c7f - thumb_func_end sub_80C55D4 - - thumb_func_start sub_80C55F4 -sub_80C55F4: @ 80C55F4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080C5674 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C5666 - ldr r0, _080C5678 @ =gUnknown_3005334 - mov r8, r0 - ldr r3, _080C567C @ =gUnknown_3005340 -_080C560C: - ldr r0, _080C5680 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C5684 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r4, r8 - ldr r1, [r4] - adds r1, r0 - ldr r0, _080C5688 @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - adds r6, r2, 0x1 - ldrb r0, [r3] - cmp r5, r0 - bcs _080C565A - movs r0, 0x80 - lsls r0, 8 - adds r7, r0, 0 -_080C5638: - ldrh r0, [r4] - ands r0, r7 - cmp r0, 0 - bne _080C564C - adds r0, r4, 0 - str r3, [sp] - bl sub_80C5ECC - strh r0, [r4] - ldr r3, [sp] -_080C564C: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldrb r0, [r3] - cmp r5, r0 - bcc _080C5638 -_080C565A: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080C5674 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C560C -_080C5666: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C5674: .4byte gUnknown_3005338 -_080C5678: .4byte gUnknown_3005334 -_080C567C: .4byte gUnknown_3005340 -_080C5680: .4byte gUnknown_3005344 -_080C5684: .4byte gUnknown_300534C -_080C5688: .4byte gUnknown_3005330 - thumb_func_end sub_80C55F4 - - thumb_func_start sub_80C568C -sub_80C568C: @ 80C568C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - movs r2, 0 - ldr r0, _080C5730 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C5722 - ldr r0, _080C5734 @ =gUnknown_3005334 - mov r8, r0 - ldr r3, _080C5738 @ =gUnknown_300534C -_080C56A4: - ldr r0, _080C573C @ =gUnknown_3005344 - ldrb r1, [r0] - ldrb r0, [r3] - muls r0, r1 - lsls r0, 1 - mov r4, r8 - ldr r1, [r4] - adds r1, r0 - ldr r0, _080C5740 @ =gUnknown_3005330 - ldrb r0, [r0] - adds r0, r2 - lsls r0, 1 - adds r4, r1, r0 - ldrh r1, [r4] - mov r0, sp - strh r1, [r0] - movs r5, 0x1 - ldrb r0, [r3] - lsls r0, 1 - adds r4, r0 - ldr r0, _080C5744 @ =gUnknown_3005338 - ldrb r0, [r0] - subs r0, 0x1 - adds r7, r2, 0x1 - cmp r5, r0 - bge _080C5716 - ldr r6, _080C5738 @ =gUnknown_300534C -_080C56DA: - ldrh r0, [r4] - movs r2, 0x80 - lsls r2, 8 - adds r1, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _080C5700 - ldrb r2, [r6] - lsls r2, 1 - adds r2, r4, r2 - mov r0, sp - adds r1, r4, 0 - str r3, [sp, 0x4] - bl sub_80C61BC - strh r0, [r4] - mov r1, sp - strh r0, [r1] - ldr r3, [sp, 0x4] -_080C5700: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - ldrb r0, [r6] - lsls r0, 1 - adds r4, r0 - ldr r0, _080C5744 @ =gUnknown_3005338 - ldrb r0, [r0] - subs r0, 0x1 - cmp r5, r0 - blt _080C56DA -_080C5716: - lsls r0, r7, 24 - lsrs r2, r0, 24 - ldr r0, _080C5730 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C56A4 -_080C5722: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C5730: .4byte gUnknown_3005340 -_080C5734: .4byte gUnknown_3005334 -_080C5738: .4byte gUnknown_300534C -_080C573C: .4byte gUnknown_3005344 -_080C5740: .4byte gUnknown_3005330 -_080C5744: .4byte gUnknown_3005338 - thumb_func_end sub_80C568C - - thumb_func_start sub_80C5748 -sub_80C5748: @ 80C5748 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r2, 0 - ldr r0, _080C57D4 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C57C4 - ldr r0, _080C57D8 @ =gUnknown_3005334 - mov r9, r0 - ldr r3, _080C57DC @ =gUnknown_3005340 -_080C5768: - ldr r0, _080C57E0 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C57E4 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r4, r9 - ldr r1, [r4] - adds r1, r0 - ldr r0, _080C57E8 @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - adds r6, r2, 0x1 - ldrb r0, [r3] - cmp r5, r0 - bcs _080C57B8 - movs r0, 0x80 - lsls r0, 8 - adds r7, r0, 0 -_080C5794: - ldrh r0, [r4] - ands r0, r7 - cmp r0, 0 - bne _080C57AA - adds r0, r4, 0 - mov r1, r8 - str r3, [sp] - bl sub_80C5F00 - strh r0, [r4] - ldr r3, [sp] -_080C57AA: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldrb r0, [r3] - cmp r5, r0 - bcc _080C5794 -_080C57B8: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080C57D4 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C5768 -_080C57C4: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C57D4: .4byte gUnknown_3005338 -_080C57D8: .4byte gUnknown_3005334 -_080C57DC: .4byte gUnknown_3005340 -_080C57E0: .4byte gUnknown_3005344 -_080C57E4: .4byte gUnknown_300534C -_080C57E8: .4byte gUnknown_3005330 - thumb_func_end sub_80C5748 - - thumb_func_start sub_80C57EC -sub_80C57EC: @ 80C57EC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080C586C @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C585E - ldr r0, _080C5870 @ =gUnknown_3005334 - mov r8, r0 - ldr r3, _080C5874 @ =gUnknown_3005340 -_080C5804: - ldr r0, _080C5878 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C587C @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r4, r8 - ldr r1, [r4] - adds r1, r0 - ldr r0, _080C5880 @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - adds r6, r2, 0x1 - ldrb r0, [r3] - cmp r5, r0 - bcs _080C5852 - movs r0, 0x80 - lsls r0, 8 - adds r7, r0, 0 -_080C5830: - ldrh r0, [r4] - ands r0, r7 - cmp r0, 0 - bne _080C5844 - adds r0, r4, 0 - str r3, [sp] - bl sub_80C600C - strh r0, [r4] - ldr r3, [sp] -_080C5844: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldrb r0, [r3] - cmp r5, r0 - bcc _080C5830 -_080C5852: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080C586C @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C5804 -_080C585E: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C586C: .4byte gUnknown_3005338 -_080C5870: .4byte gUnknown_3005334 -_080C5874: .4byte gUnknown_3005340 -_080C5878: .4byte gUnknown_3005344 -_080C587C: .4byte gUnknown_300534C -_080C5880: .4byte gUnknown_3005330 - thumb_func_end sub_80C57EC - - thumb_func_start sub_80C5884 -sub_80C5884: @ 80C5884 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - movs r7, 0 - ldr r0, _080C59BC @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r7, r0 - bcs _080C5910 - ldr r0, _080C59C0 @ =gUnknown_3005334 - mov r8, r0 -_080C589A: - ldr r0, _080C59C4 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r7 - ldr r0, _080C59C8 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r2, r8 - ldr r1, [r2] - adds r1, r0 - ldr r0, _080C59CC @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r5, r1, r0 - adds r4, r5, 0x2 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80C603C - strh r0, [r5] - movs r6, 0x1 - adds r5, r4, 0 - ldr r0, _080C59D0 @ =gUnknown_3005340 - ldrb r0, [r0] - subs r0, 0x1 - adds r7, 0x1 - cmp r6, r0 - bge _080C58FA -_080C58D2: - adds r4, r5, 0x2 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80C603C - strh r0, [r5] - subs r1, r5, 0x2 - adds r0, r5, 0 - bl sub_80C603C - strh r0, [r5] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r5, r4, 0 - ldr r0, _080C59D0 @ =gUnknown_3005340 - ldrb r0, [r0] - subs r0, 0x1 - cmp r6, r0 - blt _080C58D2 -_080C58FA: - subs r1, r5, 0x2 - adds r0, r5, 0 - bl sub_80C603C - strh r0, [r5] - lsls r0, r7, 24 - lsrs r7, r0, 24 - ldr r0, _080C59BC @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r7, r0 - bcc _080C589A -_080C5910: - movs r6, 0 - ldr r0, _080C59D0 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r6, r0 - bcs _080C59B0 - ldr r3, _080C59C0 @ =gUnknown_3005334 - mov r9, r3 - ldr r0, _080C59C8 @ =gUnknown_300534C - mov r8, r0 -_080C5922: - ldr r0, _080C59C4 @ =gUnknown_3005344 - ldrb r0, [r0] - mov r2, r8 - ldrb r1, [r2] - muls r0, r1 - lsls r0, 1 - mov r3, r9 - ldr r2, [r3] - adds r2, r0 - ldr r0, _080C59CC @ =gUnknown_3005330 - ldrb r0, [r0] - adds r0, r6 - lsls r0, 1 - adds r5, r2, r0 - lsls r1, 1 - adds r1, r5, r1 - adds r0, r5, 0 - bl sub_80C603C - strh r0, [r5] - movs r7, 0x1 - mov r1, r8 - ldrb r0, [r1] - lsls r0, 1 - adds r5, r0 - ldr r0, _080C59BC @ =gUnknown_3005338 - ldrb r0, [r0] - subs r0, 0x1 - adds r6, 0x1 - cmp r7, r0 - bge _080C5994 - ldr r4, _080C59C8 @ =gUnknown_300534C -_080C5962: - ldrb r1, [r4] - lsls r1, 1 - adds r1, r5, r1 - adds r0, r5, 0 - bl sub_80C603C - strh r0, [r5] - ldrb r1, [r4] - lsls r1, 1 - subs r1, r5, r1 - adds r0, r5, 0 - bl sub_80C603C - strh r0, [r5] - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - ldrb r0, [r4] - lsls r0, 1 - adds r5, r0 - ldr r0, _080C59BC @ =gUnknown_3005338 - ldrb r0, [r0] - subs r0, 0x1 - cmp r7, r0 - blt _080C5962 -_080C5994: - mov r2, r8 - ldrb r1, [r2] - lsls r1, 1 - subs r1, r5, r1 - adds r0, r5, 0 - bl sub_80C603C - strh r0, [r5] - lsls r0, r6, 24 - lsrs r6, r0, 24 - ldr r0, _080C59D0 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r6, r0 - bcc _080C5922 -_080C59B0: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C59BC: .4byte gUnknown_3005338 -_080C59C0: .4byte gUnknown_3005334 -_080C59C4: .4byte gUnknown_3005344 -_080C59C8: .4byte gUnknown_300534C -_080C59CC: .4byte gUnknown_3005330 -_080C59D0: .4byte gUnknown_3005340 - thumb_func_end sub_80C5884 - - thumb_func_start sub_80C59D4 -sub_80C59D4: @ 80C59D4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080C5A54 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C5A46 - ldr r0, _080C5A58 @ =gUnknown_3005334 - mov r8, r0 - ldr r3, _080C5A5C @ =gUnknown_3005340 -_080C59EC: - ldr r0, _080C5A60 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C5A64 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r4, r8 - ldr r1, [r4] - adds r1, r0 - ldr r0, _080C5A68 @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - adds r6, r2, 0x1 - ldrb r0, [r3] - cmp r5, r0 - bcs _080C5A3A - movs r0, 0x80 - lsls r0, 8 - adds r7, r0, 0 -_080C5A18: - ldrh r0, [r4] - ands r0, r7 - cmp r0, 0 - bne _080C5A2C - adds r0, r4, 0 - str r3, [sp] - bl sub_80C606C - strh r0, [r4] - ldr r3, [sp] -_080C5A2C: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldrb r0, [r3] - cmp r5, r0 - bcc _080C5A18 -_080C5A3A: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080C5A54 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C59EC -_080C5A46: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C5A54: .4byte gUnknown_3005338 -_080C5A58: .4byte gUnknown_3005334 -_080C5A5C: .4byte gUnknown_3005340 -_080C5A60: .4byte gUnknown_3005344 -_080C5A64: .4byte gUnknown_300534C -_080C5A68: .4byte gUnknown_3005330 - thumb_func_end sub_80C59D4 - - thumb_func_start sub_80C5A6C -sub_80C5A6C: @ 80C5A6C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - ldr r0, _080C5B98 @ =gUnknown_3005334 - ldr r4, [r0] - movs r6, 0 - movs r0, 0x80 - lsls r0, 8 - adds r5, r0, 0 -_080C5A84: - movs r7, 0 -_080C5A86: - ldrh r0, [r4] - ands r0, r5 - cmp r0, 0 - bne _080C5A96 - adds r0, r4, 0 - bl sub_80C606C - strh r0, [r4] -_080C5A96: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - adds r4, 0x2 - cmp r7, 0x3F - bls _080C5A86 - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x3F - bls _080C5A84 - movs r7, 0 - ldr r1, _080C5B98 @ =gUnknown_3005334 - mov r10, r1 - mov r3, sp - movs r2, 0x80 - lsls r2, 8 - mov r9, r2 -_080C5ABA: - lsls r0, r7, 1 - mov r2, r10 - ldr r1, [r2] - adds r4, r1, r0 - ldrh r1, [r4] - strh r1, [r3] - mov r1, r9 - strh r1, [r4] - movs r6, 0x1 - adds r4, 0x80 - adds r5, r0, 0 -_080C5AD0: - ldrh r0, [r4] - movs r2, 0x80 - lsls r2, 8 - ands r0, r2 - cmp r0, 0 - bne _080C5AF0 - adds r2, r4, 0 - adds r2, 0x80 - mov r0, sp - adds r1, r4, 0 - str r3, [sp, 0x4] - bl sub_80C62DC - strh r0, [r4] - ldr r3, [sp, 0x4] - strh r0, [r3] -_080C5AF0: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r4, 0x80 - cmp r6, 0x3E - bls _080C5AD0 - mov r0, r9 - strh r0, [r4] - mov r1, r10 - ldr r0, [r1] - adds r4, r0, r5 - ldrh r0, [r4] - strh r0, [r3] - mov r2, r9 - strh r2, [r4] - movs r6, 0x1 - adds r4, 0x80 - movs r0, 0x80 - lsls r0, 8 - mov r8, r0 -_080C5B18: - ldrh r0, [r4] - mov r1, r8 - ands r0, r1 - adds r5, r4, 0 - adds r5, 0x80 - cmp r0, 0 - bne _080C5B38 - mov r0, sp - adds r1, r4, 0 - adds r2, r5, 0 - str r3, [sp, 0x4] - bl sub_80C62DC - strh r0, [r4] - ldr r3, [sp, 0x4] - strh r0, [r3] -_080C5B38: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r4, r5, 0 - cmp r6, 0x3E - bls _080C5B18 - mov r2, r9 - strh r2, [r4] - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0x3F - bls _080C5ABA - ldr r0, _080C5B98 @ =gUnknown_3005334 - ldr r4, [r0] - movs r6, 0 - movs r0, 0x80 - lsls r0, 8 - mov r8, r0 -_080C5B5E: - movs r7, 0 - adds r5, r6, 0x1 -_080C5B62: - ldrh r0, [r4] - mov r1, r8 - ands r0, r1 - cmp r0, 0 - bne _080C5B74 - adds r0, r4, 0 - bl sub_80C606C - strh r0, [r4] -_080C5B74: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - adds r4, 0x2 - cmp r7, 0x3F - bls _080C5B62 - lsls r0, r5, 24 - lsrs r6, r0, 24 - cmp r6, 0x3F - bls _080C5B5E - 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 -_080C5B98: .4byte gUnknown_3005334 - thumb_func_end sub_80C5A6C - - thumb_func_start sub_80C5B9C -sub_80C5B9C: @ 80C5B9C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080C5C2C @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C5C1E - ldr r0, _080C5C30 @ =gUnknown_3005334 - mov r8, r0 -_080C5BB2: - ldr r0, _080C5C34 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C5C38 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r3, r8 - ldr r1, [r3] - adds r1, r0 - ldr r0, _080C5C3C @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - ldrh r1, [r4] - mov r0, sp - strh r1, [r0] - movs r5, 0x1 - adds r4, 0x2 - ldr r0, _080C5C40 @ =gUnknown_3005340 - ldrb r0, [r0] - subs r0, 0x1 - adds r6, r2, 0x1 - cmp r5, r0 - bge _080C5C12 - movs r0, 0x80 - lsls r0, 8 - adds r7, r0, 0 -_080C5BEA: - ldrh r0, [r4] - ands r0, r7 - cmp r0, 0 - bne _080C5C00 - mov r0, sp - adds r1, r4, 0 - bl sub_80C6098 - strh r0, [r4] - mov r1, sp - strh r0, [r1] -_080C5C00: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldr r0, _080C5C40 @ =gUnknown_3005340 - ldrb r0, [r0] - subs r0, 0x1 - cmp r5, r0 - blt _080C5BEA -_080C5C12: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080C5C2C @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C5BB2 -_080C5C1E: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C5C2C: .4byte gUnknown_3005338 -_080C5C30: .4byte gUnknown_3005334 -_080C5C34: .4byte gUnknown_3005344 -_080C5C38: .4byte gUnknown_300534C -_080C5C3C: .4byte gUnknown_3005330 -_080C5C40: .4byte gUnknown_3005340 - thumb_func_end sub_80C5B9C - - thumb_func_start sub_80C5C44 -sub_80C5C44: @ 80C5C44 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - movs r2, 0 - ldr r0, _080C5CE0 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C5CD2 - ldr r0, _080C5CE4 @ =gUnknown_3005334 - mov r8, r0 - ldr r7, _080C5CE8 @ =gUnknown_300534C -_080C5C5C: - ldr r0, _080C5CEC @ =gUnknown_3005344 - ldrb r1, [r0] - ldrb r0, [r7] - muls r0, r1 - lsls r0, 1 - mov r3, r8 - ldr r1, [r3] - adds r1, r0 - ldr r0, _080C5CF0 @ =gUnknown_3005330 - ldrb r0, [r0] - adds r0, r2 - lsls r0, 1 - adds r4, r1, r0 - ldrh r1, [r4] - mov r0, sp - strh r1, [r0] - movs r5, 0x1 - ldrb r0, [r7] - lsls r0, 1 - adds r4, r0 - ldr r0, _080C5CF4 @ =gUnknown_3005338 - ldrb r0, [r0] - subs r0, 0x1 - adds r6, r2, 0x1 - cmp r5, r0 - bge _080C5CC6 - movs r0, 0x80 - lsls r0, 8 - adds r2, r0, 0 -_080C5C96: - ldrh r0, [r4] - ands r0, r2 - cmp r0, 0 - bne _080C5CB0 - mov r0, sp - adds r1, r4, 0 - str r2, [sp, 0x4] - bl sub_80C6098 - strh r0, [r4] - mov r1, sp - strh r0, [r1] - ldr r2, [sp, 0x4] -_080C5CB0: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - ldrb r0, [r7] - lsls r0, 1 - adds r4, r0 - ldr r0, _080C5CF4 @ =gUnknown_3005338 - ldrb r0, [r0] - subs r0, 0x1 - cmp r5, r0 - blt _080C5C96 -_080C5CC6: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080C5CE0 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C5C5C -_080C5CD2: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C5CE0: .4byte gUnknown_3005340 -_080C5CE4: .4byte gUnknown_3005334 -_080C5CE8: .4byte gUnknown_300534C -_080C5CEC: .4byte gUnknown_3005344 -_080C5CF0: .4byte gUnknown_3005330 -_080C5CF4: .4byte gUnknown_3005338 - thumb_func_end sub_80C5C44 - - thumb_func_start sub_80C5CF8 -sub_80C5CF8: @ 80C5CF8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x20 - lsls r0, 16 - lsrs r0, 16 - mov r10, r0 - mov r2, sp - ldr r3, _080C5D64 @ =gUnknown_83F3024 - lsls r1, r0, 1 - add r1, r10 - adds r0, r1, r3 - ldrb r0, [r0] - strb r0, [r2] - adds r0, r3, 0x1 - adds r0, r1, r0 - ldrb r0, [r0] - strb r0, [r2, 0x1] - mov r5, sp - adds r0, r3, 0x2 - adds r1, r0 - ldrb r4, [r1] - lsls r2, r4, 24 - lsrs r1, r2, 27 - movs r0, 0x7 - ands r1, r0 - strh r1, [r5, 0x2] - lsrs r2, 25 - mov r9, r2 - movs r0, 0x3 - ands r2, r0 - mov r9, r2 - movs r5, 0x1 - ands r5, r4 - movs r4, 0x1 - mov r8, r4 - cmp r8, r1 - bcs _080C5DAA - mov r3, sp -_080C5D4A: - cmp r5, 0 - bne _080C5D68 - mov r0, r8 - lsls r2, r0, 2 - mov r4, sp - adds r1, r4, r2 - ldrb r0, [r3] - mov r4, r8 - subs r0, r4 - strb r0, [r1] - ldrb r0, [r3, 0x1] - add r0, r8 - b _080C5D7A - .align 2, 0 -_080C5D64: .4byte gUnknown_83F3024 -_080C5D68: - mov r0, r8 - lsls r2, r0, 2 - mov r4, sp - adds r1, r4, r2 - ldrb r0, [r3] - adds r0, 0x1 - strb r0, [r1] - ldrb r0, [r3, 0x1] - subs r0, 0x1 -_080C5D7A: - strb r0, [r1, 0x1] - add r2, sp - ldrb r0, [r2] - cmp r0, 0x3F - bhi _080C5D8A - ldrb r0, [r2, 0x1] - cmp r0, 0x3F - bls _080C5D92 -_080C5D8A: - mov r0, r8 - subs r0, 0x1 - strh r0, [r3, 0x2] - b _080C5DAA -_080C5D92: - ldrh r0, [r3, 0x2] - mov r1, r8 - subs r0, r1 - strh r0, [r2, 0x2] - mov r0, r8 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldrh r0, [r3, 0x2] - cmp r8, r0 - bcc _080C5D4A -_080C5DAA: - movs r2, 0 - mov r8, r2 - mov r0, sp - ldrh r0, [r0, 0x2] - cmp r8, r0 - bcc _080C5DB8 - b _080C5EBA -_080C5DB8: - movs r3, 0x1F -_080C5DBA: - ldr r1, _080C5E18 @ =gUnknown_3005334 - mov r4, r8 - lsls r0, r4, 2 - mov r2, sp - adds r6, r2, r0 - ldrb r0, [r6, 0x1] - lsls r0, 7 - ldr r1, [r1] - adds r1, r0 - ldrb r0, [r6] - lsls r0, 1 - adds r2, r1, r0 - ldrh r1, [r2] - movs r4, 0x80 - lsls r4, 8 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - bne _080C5EA6 - movs r7, 0x1F - ands r7, r1 - lsls r0, r1, 16 - lsrs r5, r0, 21 - ands r5, r3 - lsrs r4, r0, 26 - ands r4, r3 - mov r0, r9 - cmp r0, 0 - blt _080C5E9C - cmp r0, 0x1 - ble _080C5E1C - cmp r0, 0x3 - bgt _080C5E9C - ldrh r0, [r6, 0x2] - adds r1, r7, r0 - lsls r1, 16 - lsrs r7, r1, 16 - adds r1, r5, r0 - lsls r1, 16 - lsrs r5, r1, 16 - adds r0, r4, r0 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r7, 0x1F - bls _080C5E90 - movs r7, 0x1F - b _080C5E90 - .align 2, 0 -_080C5E18: .4byte gUnknown_3005334 -_080C5E1C: - mov r1, r10 - lsls r0, r1, 1 - add r0, r10 - ldr r1, _080C5E50 @ =gUnknown_83F3024 - adds r1, 0x2 - adds r0, r1 - ldrb r0, [r0] - lsrs r0, 3 - movs r1, 0x7 - ands r0, r1 - movs r1, 0x3 - str r2, [sp, 0x18] - str r3, [sp, 0x1C] - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - ldr r2, [sp, 0x18] - ldr r3, [sp, 0x1C] - cmp r0, 0x1 - beq _080C5E6C - cmp r0, 0x1 - bgt _080C5E54 - cmp r0, 0 - beq _080C5E5A - b _080C5E9C - .align 2, 0 -_080C5E50: .4byte gUnknown_83F3024 -_080C5E54: - cmp r0, 0x2 - beq _080C5E7E - b _080C5E9C -_080C5E5A: - ldrh r0, [r6, 0x2] - cmp r7, r0 - bcc _080C5E68 - subs r0, r7, r0 - lsls r0, 16 - lsrs r7, r0, 16 - b _080C5E9C -_080C5E68: - movs r7, 0 - b _080C5E9C -_080C5E6C: - ldrh r0, [r6, 0x2] - cmp r5, r0 - bcc _080C5E7A - subs r0, r5, r0 - lsls r0, 16 - lsrs r5, r0, 16 - b _080C5E9C -_080C5E7A: - movs r5, 0 - b _080C5E9C -_080C5E7E: - ldrh r0, [r6, 0x2] - cmp r4, r0 - bcc _080C5E8C - subs r0, r4, r0 - lsls r0, 16 - lsrs r4, r0, 16 - b _080C5E9C -_080C5E8C: - movs r4, 0 - b _080C5E9C -_080C5E90: - cmp r5, 0x1F - bls _080C5E96 - movs r5, 0x1F -_080C5E96: - cmp r4, 0x1F - bls _080C5E9C - movs r4, 0x1F -_080C5E9C: - lsls r0, r4, 10 - lsls r1, r5, 5 - orrs r0, r1 - orrs r7, r0 - strh r7, [r2] -_080C5EA6: - mov r0, r8 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - mov r0, sp - ldrh r0, [r0, 0x2] - cmp r8, r0 - bcs _080C5EBA - b _080C5DBA -_080C5EBA: - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80C5CF8 - - thumb_func_start sub_80C5ECC -sub_80C5ECC: @ 80C5ECC - push {lr} - ldrh r1, [r0] - movs r3, 0x1F - movs r0, 0x1F - ands r0, r1 - lsls r1, 16 - lsrs r2, r1, 21 - ands r2, r3 - lsrs r1, 26 - ands r1, r3 - adds r0, r2 - adds r0, r1 - movs r1, 0x3 - bl __divsi3 - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - lsls r0, r1, 10 - lsls r2, r1, 5 - orrs r0, r2 - orrs r0, r1 - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - thumb_func_end sub_80C5ECC - - thumb_func_start sub_80C5F00 -sub_80C5F00: @ 80C5F00 - push {r4,lr} - lsls r1, 24 - lsrs r4, r1, 24 - ldrh r0, [r0] - movs r2, 0x1F - movs r1, 0x1F - ands r1, r0 - lsls r0, 16 - lsrs r3, r0, 21 - ands r3, r2 - lsrs r0, 26 - ands r0, r2 - cmp r1, 0x10 - bhi _080C5F30 - cmp r3, 0x10 - bhi _080C5F30 - cmp r0, 0x10 - bhi _080C5F30 - adds r0, r4, 0 - bl sub_80C5F3C - lsls r0, 16 - lsrs r0, 16 - b _080C5F32 -_080C5F30: - ldr r0, _080C5F38 @ =0x00007fff -_080C5F32: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080C5F38: .4byte 0x00007fff - thumb_func_end sub_80C5F00 - - thumb_func_start sub_80C5F3C -sub_80C5F3C: @ 80C5F3C - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0 - mov r8, r0 - movs r6, 0 - movs r7, 0 - adds r0, r4, 0 - movs r1, 0x6 - bl __udivsi3 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x3 - bl __umodsi3 - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r4, 0 - movs r1, 0x6 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x5 - bhi _080C5FF4 - lsls r0, 2 - ldr r1, _080C5F80 @ =_080C5F84 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C5F80: .4byte _080C5F84 - .align 2, 0 -_080C5F84: - .4byte _080C5F9C - .4byte _080C5FAC - .4byte _080C5FBC - .4byte _080C5FCA - .4byte _080C5FD8 - .4byte _080C5FE6 -_080C5F9C: - movs r0, 0x15 - subs r0, r5 - lsls r0, 16 - lsrs r6, r0, 16 - adds r7, r6, 0 - movs r1, 0 - mov r8, r1 - b _080C5FF4 -_080C5FAC: - movs r7, 0 - movs r0, 0x15 - subs r0, r5 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - mov r6, r8 - b _080C5FF4 -_080C5FBC: - movs r0, 0x15 - subs r0, r5 - lsls r0, 16 - lsrs r7, r0, 16 - movs r6, 0 - mov r8, r7 - b _080C5FF4 -_080C5FCA: - movs r7, 0 - movs r6, 0 - movs r0, 0x17 - subs r0, r5 - lsls r0, 16 - lsrs r0, 16 - b _080C5FF2 -_080C5FD8: - movs r0, 0x17 - subs r0, r5 - lsls r0, 16 - lsrs r7, r0, 16 - movs r6, 0 - mov r8, r6 - b _080C5FF4 -_080C5FE6: - movs r7, 0 - movs r0, 0x17 - subs r0, r5 - lsls r0, 16 - lsrs r6, r0, 16 - movs r0, 0 -_080C5FF2: - mov r8, r0 -_080C5FF4: - lsls r0, r7, 10 - lsls r1, r6, 5 - orrs r0, r1 - mov r1, r8 - orrs r1, r0 - lsls r0, r1, 16 - lsrs r0, 16 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80C5F3C - - thumb_func_start sub_80C600C -sub_80C600C: @ 80C600C - push {lr} - ldrh r0, [r0] - movs r2, 0x1F - movs r1, 0x1F - ands r1, r0 - lsls r0, 16 - lsrs r3, r0, 21 - ands r3, r2 - lsrs r0, 26 - ands r0, r2 - cmp r1, 0x10 - bhi _080C6030 - cmp r3, 0x10 - bhi _080C6030 - cmp r0, 0x10 - bhi _080C6030 - movs r0, 0 - b _080C6032 -_080C6030: - ldr r0, _080C6038 @ =0x00007fff -_080C6032: - pop {r1} - bx r1 - .align 2, 0 -_080C6038: .4byte 0x00007fff - thumb_func_end sub_80C600C - - thumb_func_start sub_80C603C -sub_80C603C: @ 80C603C - push {r4,lr} - adds r4, r0, 0 - ldrh r3, [r4] - cmp r3, 0 - beq _080C6064 - movs r2, 0x80 - lsls r2, 8 - adds r0, r2, 0 - ands r0, r3 - cmp r0, 0 - beq _080C6056 - adds r0, r2, 0 - b _080C6066 -_080C6056: - ldrh r1, [r1] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _080C6064 - ldrh r0, [r4] - b _080C6066 -_080C6064: - movs r0, 0 -_080C6066: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80C603C - - thumb_func_start sub_80C606C -sub_80C606C: @ 80C606C - push {r4,lr} - ldrh r1, [r0] - movs r0, 0x1F - movs r3, 0x1F - ands r3, r1 - lsls r1, 16 - lsrs r2, r1, 21 - lsrs r1, 26 - subs r3, r0, r3 - adds r4, r0, 0 - bics r4, r2 - adds r2, r4, 0 - bics r0, r1 - lsls r0, 10 - lsls r2, 5 - orrs r0, r2 - orrs r0, r3 - lsls r0, 16 - lsrs r0, 16 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80C606C - - thumb_func_start sub_80C6098 -sub_80C6098: @ 80C6098 - push {r4-r7,lr} - sub sp, 0x14 - adds r7, r1, 0 - ldrh r4, [r0] - ldrh r5, [r7] - lsls r6, r4, 16 - lsls r0, r5, 16 - mov r12, r0 - cmp r4, r5 - beq _080C610A - mov r2, sp - movs r3, 0x1F - movs r1, 0x1F - adds r0, r1, 0 - ands r0, r4 - strh r0, [r2] - lsrs r0, r6, 21 - ands r0, r3 - strh r0, [r2, 0x2] - lsrs r0, r6, 26 - ands r0, r3 - strh r0, [r2, 0x4] - mov r0, sp - ands r1, r5 - strh r1, [r0, 0x6] - mov r1, sp - mov r2, r12 - lsrs r0, r2, 21 - ands r0, r3 - strh r0, [r1, 0x8] - lsrs r0, r2, 26 - ands r0, r3 - strh r0, [r1, 0xA] - mov r0, sp - ldrh r0, [r0] - cmp r0, 0x19 - bls _080C60F2 - mov r0, sp - ldrh r0, [r0, 0x2] - cmp r0, 0x19 - bls _080C60F2 - mov r0, sp - ldrh r0, [r0, 0x4] - cmp r0, 0x19 - bhi _080C610A -_080C60F2: - mov r0, sp - ldrh r0, [r0, 0x6] - cmp r0, 0x19 - bls _080C610E - mov r0, sp - ldrh r0, [r0, 0x8] - cmp r0, 0x19 - bls _080C610E - mov r0, sp - ldrh r0, [r0, 0xA] - cmp r0, 0x19 - bls _080C610E -_080C610A: - ldrh r0, [r7] - b _080C61B4 -_080C610E: - movs r4, 0 - add r6, sp, 0xC - mov r7, sp - adds r7, 0x6 - adds r5, r6, 0 -_080C6118: - lsls r2, r4, 1 - mov r1, sp - adds r0, r1, r2 - adds r1, r7, r2 - ldrh r3, [r0] - ldrh r0, [r1] - cmp r3, r0 - bls _080C612E - adds r1, r5, r2 - subs r0, r3, r0 - b _080C6132 -_080C612E: - adds r1, r5, r2 - subs r0, r3 -_080C6132: - strh r0, [r1] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x2 - bls _080C6118 - adds r1, r6, 0 - ldrh r0, [r1, 0x2] - ldrh r3, [r1] - cmp r3, r0 - bcc _080C6158 - ldrh r2, [r1, 0x4] - cmp r3, r2 - bcc _080C6152 - adds r2, r3, 0 - b _080C616C -_080C6152: - cmp r0, r2 - bcs _080C615E - b _080C6166 -_080C6158: - ldrh r2, [r1, 0x4] - cmp r0, r2 - bcc _080C6162 -_080C615E: - ldrh r2, [r1, 0x2] - b _080C616C -_080C6162: - cmp r2, r3 - bcc _080C616A -_080C6166: - ldrh r2, [r1, 0x4] - b _080C616C -_080C616A: - ldrh r2, [r6] -_080C616C: - mov r0, sp - ldrh r1, [r0, 0x6] - lsrs r0, r2, 1 - movs r6, 0x1F - subs r6, r0 - adds r0, r1, 0 - muls r0, r6 - movs r1, 0x1F - bl __divsi3 - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - mov r0, sp - ldrh r0, [r0, 0x8] - muls r0, r6 - movs r1, 0x1F - bl __divsi3 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - mov r0, sp - ldrh r0, [r0, 0xA] - muls r0, r6 - movs r1, 0x1F - bl __divsi3 - lsls r0, 16 - lsrs r0, 6 - lsls r4, 5 - orrs r0, r4 - orrs r5, r0 - lsls r5, 16 - lsrs r5, 16 - adds r0, r5, 0 -_080C61B4: - add sp, 0x14 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80C6098 - - thumb_func_start sub_80C61BC -sub_80C61BC: @ 80C61BC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - adds r3, r0, 0 - mov r10, r1 - str r2, [sp] - ldrh r1, [r3] - mov r0, r10 - ldrh r0, [r0] - cmp r1, r0 - bne _080C61E4 - ldrh r0, [r2] - cmp r0, r1 - bne _080C61E4 - mov r1, r10 - ldrh r0, [r1] - b _080C62CC -_080C61E4: - mov r2, r10 - ldrh r0, [r2] - movs r1, 0x1F - mov r9, r1 - movs r4, 0x1F - adds r5, r4, 0 - ands r5, r0 - lsls r0, 16 - lsrs r2, r0, 21 - mov r1, r9 - ands r1, r2 - mov r8, r1 - lsrs r0, 26 - mov r2, r9 - ands r2, r0 - str r2, [sp, 0x4] - ldrh r2, [r3] - adds r0, r4, 0 - ands r0, r2 - lsls r2, 16 - lsrs r1, r2, 21 - mov r3, r9 - ands r1, r3 - adds r0, r1 - lsrs r2, 26 - ands r2, r3 - adds r0, r2 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - lsrs r7, r0, 16 - mov r1, r8 - adds r0, r5, r1 - ldr r2, [sp, 0x4] - adds r0, r2 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - lsrs r6, r0, 16 - ldr r3, [sp] - ldrh r1, [r3] - ands r4, r1 - lsls r1, 16 - lsrs r0, r1, 21 - mov r2, r9 - ands r0, r2 - adds r4, r0 - lsrs r1, 26 - ands r1, r2 - adds r4, r1 - adds r0, r4, 0 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r7, r6 - bne _080C6266 - cmp r1, r6 - bne _080C6266 - mov r3, r10 - ldrh r0, [r3] - b _080C62CC -_080C6266: - cmp r7, r6 - bls _080C626E - subs r0, r7, r6 - b _080C6270 -_080C626E: - subs r0, r6, r7 -_080C6270: - lsls r0, 16 - lsrs r2, r0, 16 - cmp r1, r6 - bls _080C627C - subs r0, r1, r6 - b _080C627E -_080C627C: - subs r0, r6, r1 -_080C627E: - lsls r0, 16 - lsrs r0, 16 - cmp r2, r0 - bcc _080C6288 - adds r0, r2, 0 -_080C6288: - lsrs r0, 1 - movs r4, 0x1F - subs r4, r0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r5, 0 - muls r0, r4 - movs r1, 0x1F - bl __divsi3 - lsls r0, 16 - lsrs r5, r0, 16 - mov r0, r8 - muls r0, r4 - movs r1, 0x1F - bl __divsi3 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - ldr r1, [sp, 0x4] - adds r0, r1, 0 - muls r0, r4 - movs r1, 0x1F - bl __divsi3 - lsls r0, 16 - lsrs r0, 6 - mov r2, r8 - lsls r1, r2, 5 - orrs r0, r1 - orrs r5, r0 - lsls r0, r5, 16 - lsrs r0, 16 -_080C62CC: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80C61BC - - thumb_func_start sub_80C62DC -sub_80C62DC: @ 80C62DC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - adds r3, r0, 0 - mov r10, r1 - str r2, [sp] - ldrh r1, [r3] - mov r0, r10 - ldrh r0, [r0] - cmp r1, r0 - bne _080C6304 - ldrh r0, [r2] - cmp r0, r1 - bne _080C6304 - mov r1, r10 - ldrh r0, [r1] - b _080C63EA -_080C6304: - mov r2, r10 - ldrh r0, [r2] - movs r1, 0x1F - mov r9, r1 - movs r4, 0x1F - adds r5, r4, 0 - ands r5, r0 - lsls r0, 16 - lsrs r2, r0, 21 - mov r1, r9 - ands r1, r2 - mov r8, r1 - lsrs r0, 26 - mov r2, r9 - ands r2, r0 - str r2, [sp, 0x4] - ldrh r2, [r3] - adds r0, r4, 0 - ands r0, r2 - lsls r2, 16 - lsrs r1, r2, 21 - mov r3, r9 - ands r1, r3 - adds r0, r1 - lsrs r2, 26 - ands r2, r3 - adds r0, r2 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - lsrs r7, r0, 16 - mov r1, r8 - adds r0, r5, r1 - ldr r2, [sp, 0x4] - adds r0, r2 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - lsrs r6, r0, 16 - ldr r3, [sp] - ldrh r1, [r3] - ands r4, r1 - lsls r1, 16 - lsrs r0, r1, 21 - mov r2, r9 - ands r0, r2 - adds r4, r0 - lsrs r1, 26 - ands r1, r2 - adds r4, r1 - adds r0, r4, 0 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r7, r6 - bne _080C6386 - cmp r1, r6 - bne _080C6386 - mov r3, r10 - ldrh r0, [r3] - b _080C63EA -_080C6386: - cmp r7, r6 - bls _080C638E - subs r0, r7, r6 - b _080C6390 -_080C638E: - subs r0, r6, r7 -_080C6390: - lsls r0, 16 - lsrs r2, r0, 16 - cmp r1, r6 - bls _080C639C - subs r0, r1, r6 - b _080C639E -_080C639C: - subs r0, r6, r1 -_080C639E: - lsls r0, 16 - lsrs r0, 16 - cmp r2, r0 - bcc _080C63A8 - adds r0, r2, 0 -_080C63A8: - movs r4, 0x1F - subs r4, r0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r5, 0 - muls r0, r4 - movs r1, 0x1F - bl __divsi3 - lsls r0, 16 - lsrs r5, r0, 16 - mov r0, r8 - muls r0, r4 - movs r1, 0x1F - bl __divsi3 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - ldr r1, [sp, 0x4] - adds r0, r1, 0 - muls r0, r4 - movs r1, 0x1F - bl __divsi3 - lsls r0, 16 - lsrs r0, 6 - mov r2, r8 - lsls r1, r2, 5 - orrs r0, r1 - orrs r5, r0 - lsls r0, r5, 16 - lsrs r0, 16 -_080C63EA: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80C62DC - - thumb_func_start sub_80C63FC -sub_80C63FC: @ 80C63FC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - ldrb r1, [r0, 0x1D] - lsrs r5, r1, 3 - ldrb r1, [r0, 0x1E] - lsrs r1, 3 - str r1, [sp, 0x8] - ldr r1, [r0, 0x4] - str r1, [sp] - ldr r2, [r0, 0x10] - str r2, [sp, 0x4] - ldrh r0, [r0, 0x16] - cmp r0, 0x2 - bne _080C64AC - movs r1, 0 - ldr r0, [sp, 0x8] - cmp r1, r0 - bcc _080C642A - b _080C6538 -_080C642A: - movs r0, 0 - adds r2, r1, 0x1 - mov r10, r2 - cmp r0, r5 - bcs _080C649E - adds r2, r1, 0 - muls r2, r5 - mov r9, r2 - lsls r1, 3 - mov r8, r1 -_080C643E: - movs r4, 0 - lsls r6, r0, 4 - adds r7, r0, 0x1 - add r0, r9 - lsls r0, 6 - ldr r1, [sp, 0x4] - adds r1, r0 - mov r12, r1 -_080C644E: - lsls r0, r4, 3 - mov r2, r12 - adds r3, r2, r0 - mov r1, r8 - adds r0, r1, r4 - lsls r0, 3 - muls r0, r5 - lsls r0, 1 - ldr r2, [sp] - adds r0, r2, r0 - adds r2, r0, r6 - ldrh r0, [r2, 0x2] - lsls r0, 8 - ldrh r1, [r2] - orrs r0, r1 - strh r0, [r3] - ldrh r0, [r2, 0x6] - lsls r0, 8 - ldrh r1, [r2, 0x4] - orrs r0, r1 - strh r0, [r3, 0x2] - ldrh r0, [r2, 0xA] - lsls r0, 8 - ldrh r1, [r2, 0x8] - orrs r0, r1 - strh r0, [r3, 0x4] - ldrh r0, [r2, 0xE] - lsls r0, 8 - ldrh r1, [r2, 0xC] - orrs r0, r1 - strh r0, [r3, 0x6] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x7 - bls _080C644E - lsls r0, r7, 16 - lsrs r0, 16 - cmp r0, r5 - bcc _080C643E -_080C649E: - mov r1, r10 - lsls r0, r1, 16 - lsrs r1, r0, 16 - ldr r2, [sp, 0x8] - cmp r1, r2 - bcc _080C642A - b _080C6538 -_080C64AC: - movs r1, 0 - ldr r0, [sp, 0x8] - cmp r1, r0 - bcs _080C6538 -_080C64B4: - movs r0, 0 - adds r2, r1, 0x1 - mov r10, r2 - cmp r0, r5 - bcs _080C652C - adds r2, r1, 0 - muls r2, r5 - mov r9, r2 - lsls r1, 3 - mov r8, r1 -_080C64C8: - movs r4, 0 - lsls r6, r0, 4 - adds r7, r0, 0x1 - add r0, r9 - lsls r0, 5 - ldr r1, [sp, 0x4] - adds r1, r0 - mov r12, r1 -_080C64D8: - lsls r0, r4, 2 - mov r2, r12 - adds r3, r2, r0 - mov r1, r8 - adds r0, r1, r4 - lsls r0, 3 - muls r0, r5 - lsls r0, 1 - ldr r2, [sp] - adds r0, r2, r0 - adds r2, r0, r6 - ldrh r1, [r2, 0x2] - lsls r1, 4 - ldrh r0, [r2] - orrs r1, r0 - ldrh r0, [r2, 0x4] - lsls r0, 8 - orrs r1, r0 - ldrh r0, [r2, 0x6] - lsls r0, 12 - orrs r1, r0 - strh r1, [r3] - ldrh r1, [r2, 0xA] - lsls r1, 4 - ldrh r0, [r2, 0x8] - orrs r1, r0 - ldrh r0, [r2, 0xC] - lsls r0, 8 - orrs r1, r0 - ldrh r0, [r2, 0xE] - lsls r0, 12 - orrs r1, r0 - strh r1, [r3, 0x2] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x7 - bls _080C64D8 - lsls r0, r7, 16 - lsrs r0, 16 - cmp r0, r5 - bcc _080C64C8 -_080C652C: - mov r1, r10 - lsls r0, r1, 16 - lsrs r1, r0, 16 - ldr r2, [sp, 0x8] - cmp r1, r2 - bcc _080C64B4 -_080C6538: - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80C63FC - - thumb_func_start sub_80C6548 -sub_80C6548: @ 80C6548 - push {lr} - ldr r2, _080C6598 @ =gUnknown_3005354 - ldrb r1, [r0, 0x18] - lsls r1, 4 - strh r1, [r2] - ldr r3, _080C659C @ =gUnknown_3005350 - ldrh r2, [r2] - lsls r2, 1 - ldr r1, [r0, 0x8] - adds r1, r2 - str r1, [r3] - ldr r2, _080C65A0 @ =gUnknown_3005334 - ldr r1, [r0, 0x4] - str r1, [r2] - ldr r2, _080C65A4 @ =gUnknown_3005330 - ldrb r1, [r0, 0x19] - strb r1, [r2] - ldr r2, _080C65A8 @ =gUnknown_3005344 - ldrb r1, [r0, 0x1A] - strb r1, [r2] - ldr r2, _080C65AC @ =gUnknown_3005340 - ldrb r1, [r0, 0x1B] - strb r1, [r2] - ldr r2, _080C65B0 @ =gUnknown_3005338 - ldrb r1, [r0, 0x1C] - strb r1, [r2] - ldr r2, _080C65B4 @ =gUnknown_300534C - ldrb r1, [r0, 0x1D] - strb r1, [r2] - ldr r2, _080C65B8 @ =gUnknown_300533C - ldrb r1, [r0, 0x1E] - strb r1, [r2] - ldrh r0, [r0, 0x14] - cmp r0, 0x5 - bhi _080C660E - lsls r0, 2 - ldr r1, _080C65BC @ =_080C65C0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C6598: .4byte gUnknown_3005354 -_080C659C: .4byte gUnknown_3005350 -_080C65A0: .4byte gUnknown_3005334 -_080C65A4: .4byte gUnknown_3005330 -_080C65A8: .4byte gUnknown_3005344 -_080C65AC: .4byte gUnknown_3005340 -_080C65B0: .4byte gUnknown_3005338 -_080C65B4: .4byte gUnknown_300534C -_080C65B8: .4byte gUnknown_300533C -_080C65BC: .4byte _080C65C0 - .align 2, 0 -_080C65C0: - .4byte _080C65D8 - .4byte _080C65E0 - .4byte _080C65E8 - .4byte _080C65F2 - .4byte _080C65FC - .4byte _080C6606 -_080C65D8: - movs r0, 0 - bl sub_80C6748 - b _080C660E -_080C65E0: - movs r0, 0x1 - bl sub_80C6748 - b _080C660E -_080C65E8: - bl sub_80C6614 - bl sub_80C6AB8 - b _080C660E -_080C65F2: - bl sub_80C6714 - bl sub_80C6A08 - b _080C660E -_080C65FC: - bl sub_80C66D8 - bl sub_80C6958 - b _080C660E -_080C6606: - bl sub_80C66BC - bl sub_80C68A0 -_080C660E: - pop {r0} - bx r0 - thumb_func_end sub_80C6548 - - thumb_func_start sub_80C6614 -sub_80C6614: @ 80C6614 - ldr r2, _080C667C @ =gUnknown_3005350 - ldr r1, [r2] - movs r0, 0 - strh r0, [r1] - ldr r0, [r2] - ldr r2, _080C6680 @ =0x000018c6 - adds r1, r2, 0 - strh r1, [r0, 0x2] - ldr r2, _080C6684 @ =0x000077bd - adds r1, r2, 0 - strh r1, [r0, 0x4] - ldr r2, _080C6688 @ =0x00002d6b - adds r1, r2, 0 - strh r1, [r0, 0x6] - ldr r2, _080C668C @ =0x000018dd - adds r1, r2, 0 - strh r1, [r0, 0x8] - ldr r2, _080C6690 @ =0x00001ba6 - adds r1, r2, 0 - strh r1, [r0, 0xA] - ldr r2, _080C6694 @ =0x000074c6 - adds r1, r2, 0 - strh r1, [r0, 0xC] - ldr r2, _080C6698 @ =0x00001bbd - adds r1, r2, 0 - strh r1, [r0, 0xE] - ldr r2, _080C669C @ =0x000074dd - adds r1, r2, 0 - strh r1, [r0, 0x10] - ldr r2, _080C66A0 @ =0x000077a6 - adds r1, r2, 0 - strh r1, [r0, 0x12] - ldr r2, _080C66A4 @ =0x0000197d - adds r1, r2, 0 - strh r1, [r0, 0x14] - ldr r2, _080C66A8 @ =0x00001bab - adds r1, r2, 0 - strh r1, [r0, 0x16] - ldr r2, _080C66AC @ =0x00007566 - adds r1, r2, 0 - strh r1, [r0, 0x18] - ldr r2, _080C66B0 @ =0x00002cdd - adds r1, r2, 0 - strh r1, [r0, 0x1A] - ldr r2, _080C66B4 @ =0x00002fa6 - adds r1, r2, 0 - strh r1, [r0, 0x1C] - ldr r2, _080C66B8 @ =0x000074cb - adds r1, r2, 0 - strh r1, [r0, 0x1E] - bx lr - .align 2, 0 -_080C667C: .4byte gUnknown_3005350 -_080C6680: .4byte 0x000018c6 -_080C6684: .4byte 0x000077bd -_080C6688: .4byte 0x00002d6b -_080C668C: .4byte 0x000018dd -_080C6690: .4byte 0x00001ba6 -_080C6694: .4byte 0x000074c6 -_080C6698: .4byte 0x00001bbd -_080C669C: .4byte 0x000074dd -_080C66A0: .4byte 0x000077a6 -_080C66A4: .4byte 0x0000197d -_080C66A8: .4byte 0x00001bab -_080C66AC: .4byte 0x00007566 -_080C66B0: .4byte 0x00002cdd -_080C66B4: .4byte 0x00002fa6 -_080C66B8: .4byte 0x000074cb - thumb_func_end sub_80C6614 - - thumb_func_start sub_80C66BC -sub_80C66BC: @ 80C66BC - ldr r2, _080C66D0 @ =gUnknown_3005350 - ldr r0, [r2] - movs r1, 0 - strh r1, [r0] - ldr r2, [r2] - strh r1, [r2, 0x2] - ldr r1, _080C66D4 @ =0x00007fff - adds r0, r1, 0 - strh r0, [r2, 0x4] - bx lr - .align 2, 0 -_080C66D0: .4byte gUnknown_3005350 -_080C66D4: .4byte 0x00007fff - thumb_func_end sub_80C66BC - - thumb_func_start sub_80C66D8 -sub_80C66D8: @ 80C66D8 - push {r4,r5,lr} - ldr r1, _080C6710 @ =gUnknown_3005350 - ldr r0, [r1] - movs r2, 0 - strh r2, [r0] - ldr r0, [r1] - strh r2, [r0, 0x2] - movs r4, 0 - adds r5, r1, 0 -_080C66EA: - ldr r0, [r5] - lsls r2, r4, 1 - adds r2, r0 - adds r0, r4, 0x2 - lsls r3, r0, 1 - lsls r1, r0, 11 - lsls r0, 6 - orrs r1, r0 - orrs r1, r3 - strh r1, [r2, 0x4] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xD - bls _080C66EA - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C6710: .4byte gUnknown_3005350 - thumb_func_end sub_80C66D8 - - thumb_func_start sub_80C6714 -sub_80C6714: @ 80C6714 - push {r4,lr} - ldr r2, _080C6744 @ =gUnknown_3005350 - ldr r1, [r2] - movs r0, 0 - strh r0, [r1] - movs r3, 0 - adds r4, r2, 0 -_080C6722: - ldr r0, [r4] - lsls r2, r3, 1 - adds r2, r0 - lsls r0, r3, 10 - lsls r1, r3, 5 - orrs r0, r1 - orrs r0, r3 - strh r0, [r2, 0x2] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x1F - bls _080C6722 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C6744: .4byte gUnknown_3005350 - thumb_func_end sub_80C6714 - - thumb_func_start sub_80C6748 -sub_80C6748: @ 80C6748 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - movs r1, 0xDF - mov r9, r1 - cmp r0, 0 - bne _080C6760 - movs r2, 0xFF - mov r9, r2 -_080C6760: - movs r6, 0 - ldr r3, _080C67E4 @ =gUnknown_3005350 - mov r12, r3 - mov r0, r9 - lsls r4, r0, 1 - ldr r5, _080C67E8 @ =gUnknown_3005338 - cmp r6, r9 - bcs _080C6784 - movs r2, 0 -_080C6772: - ldr r0, [r3] - lsls r1, r6, 1 - adds r1, r0 - strh r2, [r1] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, r9 - bcc _080C6772 -_080C6784: - mov r1, r12 - ldr r0, [r1] - adds r0, r4, r0 - ldr r2, _080C67EC @ =0x00003def - adds r1, r2, 0 - strh r1, [r0] - movs r3, 0 - ldrb r5, [r5] - cmp r3, r5 - bcs _080C6888 -_080C6798: - ldr r2, _080C67F0 @ =gUnknown_3005334 - ldr r0, _080C67F4 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r3 - ldr r0, _080C67F8 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - ldr r1, [r2] - adds r1, r0 - ldr r0, _080C67FC @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r6, 0 - ldr r0, _080C6800 @ =gUnknown_3005340 - adds r2, r0, 0 - adds r3, 0x1 - mov r10, r3 - ldrb r3, [r2] - cmp r6, r3 - bcs _080C687A - ldr r0, _080C6804 @ =gUnknown_3005354 - mov r8, r0 -_080C67C8: - ldrh r0, [r4] - movs r3, 0x80 - lsls r3, 8 - adds r1, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _080C6808 - mov r1, r8 - ldrh r0, [r1] - strh r0, [r4] - adds r6, 0x1 - adds r7, r4, 0x2 - b _080C686E - .align 2, 0 -_080C67E4: .4byte gUnknown_3005350 -_080C67E8: .4byte gUnknown_3005338 -_080C67EC: .4byte 0x00003def -_080C67F0: .4byte gUnknown_3005334 -_080C67F4: .4byte gUnknown_3005344 -_080C67F8: .4byte gUnknown_300534C -_080C67FC: .4byte gUnknown_3005330 -_080C6800: .4byte gUnknown_3005340 -_080C6804: .4byte gUnknown_3005354 -_080C6808: - adds r0, r4, 0 - bl sub_80C6B68 - lsls r0, 16 - lsrs r5, r0, 16 - movs r3, 0x1 - adds r6, 0x1 - adds r7, r4, 0x2 - cmp r3, r9 - bcs _080C6864 - ldr r0, _080C6834 @ =gUnknown_3005350 - ldr r2, [r0] - ldrh r1, [r2, 0x2] - mov r12, r0 - cmp r1, 0 - bne _080C6838 - strh r5, [r2, 0x2] - mov r2, r8 - ldrh r0, [r2] - adds r0, 0x1 - b _080C6862 - .align 2, 0 -_080C6834: .4byte gUnknown_3005350 -_080C6838: - mov r2, r12 - ldr r1, [r2] - lsls r0, r3, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r0, r5 - beq _080C685C - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, r9 - bcs _080C6864 - lsls r0, r3, 1 - adds r1, r0, r1 - ldrh r0, [r1] - cmp r0, 0 - bne _080C6838 - strh r5, [r1] -_080C685C: - mov r1, r8 - ldrh r0, [r1] - adds r0, r3 -_080C6862: - strh r0, [r4] -_080C6864: - ldr r2, _080C6898 @ =gUnknown_3005340 - cmp r3, r9 - bne _080C686E - mov r3, r9 - strh r3, [r4] -_080C686E: - lsls r0, r6, 24 - lsrs r6, r0, 24 - adds r4, r7, 0 - ldrb r0, [r2] - cmp r6, r0 - bcc _080C67C8 -_080C687A: - mov r1, r10 - lsls r0, r1, 24 - lsrs r3, r0, 24 - ldr r0, _080C689C @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r3, r0 - bcc _080C6798 -_080C6888: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C6898: .4byte gUnknown_3005340 -_080C689C: .4byte gUnknown_3005338 - thumb_func_end sub_80C6748 - - thumb_func_start sub_80C68A0 -sub_80C68A0: @ 80C68A0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r2, 0 - ldr r0, _080C68F4 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C6944 - ldr r0, _080C68F8 @ =gUnknown_3005334 - mov r8, r0 -_080C68B4: - ldr r0, _080C68FC @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C6900 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r3, r8 - ldr r1, [r3] - adds r1, r0 - ldr r0, _080C6904 @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r6, 0 - ldr r0, _080C6908 @ =gUnknown_3005340 - adds r3, r0, 0 - adds r7, r2, 0x1 - ldrb r0, [r3] - cmp r6, r0 - bcs _080C6938 - ldr r5, _080C690C @ =gUnknown_3005354 -_080C68E0: - ldrh r0, [r4] - movs r2, 0x80 - lsls r2, 8 - adds r1, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _080C6910 - ldrh r0, [r5] - strh r0, [r4] - b _080C692A - .align 2, 0 -_080C68F4: .4byte gUnknown_3005338 -_080C68F8: .4byte gUnknown_3005334 -_080C68FC: .4byte gUnknown_3005344 -_080C6900: .4byte gUnknown_300534C -_080C6904: .4byte gUnknown_3005330 -_080C6908: .4byte gUnknown_3005340 -_080C690C: .4byte gUnknown_3005354 -_080C6910: - adds r0, r4, 0 - bl sub_80C600C - lsls r0, 16 - cmp r0, 0 - bne _080C6922 - ldrh r0, [r5] - adds r0, 0x1 - b _080C6926 -_080C6922: - ldrh r0, [r5] - adds r0, 0x2 -_080C6926: - strh r0, [r4] - ldr r3, _080C6950 @ =gUnknown_3005340 -_080C692A: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r4, 0x2 - ldrb r0, [r3] - cmp r6, r0 - bcc _080C68E0 -_080C6938: - lsls r0, r7, 24 - lsrs r2, r0, 24 - ldr r0, _080C6954 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C68B4 -_080C6944: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C6950: .4byte gUnknown_3005340 -_080C6954: .4byte gUnknown_3005338 - thumb_func_end sub_80C68A0 - - thumb_func_start sub_80C6958 -sub_80C6958: @ 80C6958 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080C69AC @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C69F4 - ldr r0, _080C69B0 @ =gUnknown_3005334 - mov r8, r0 -_080C696E: - ldr r0, _080C69B4 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C69B8 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r3, r8 - ldr r1, [r3] - adds r1, r0 - ldr r0, _080C69BC @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - ldr r0, _080C69C0 @ =gUnknown_3005340 - adds r7, r2, 0x1 - ldrb r0, [r0] - cmp r5, r0 - bcs _080C69E8 - ldr r6, _080C69C4 @ =gUnknown_3005354 - movs r0, 0x80 - lsls r0, 8 - adds r2, r0, 0 -_080C699E: - ldrh r0, [r4] - ands r0, r2 - cmp r0, 0 - beq _080C69C8 - ldrh r0, [r6] - strh r0, [r4] - b _080C69D8 - .align 2, 0 -_080C69AC: .4byte gUnknown_3005338 -_080C69B0: .4byte gUnknown_3005334 -_080C69B4: .4byte gUnknown_3005344 -_080C69B8: .4byte gUnknown_300534C -_080C69BC: .4byte gUnknown_3005330 -_080C69C0: .4byte gUnknown_3005340 -_080C69C4: .4byte gUnknown_3005354 -_080C69C8: - adds r0, r4, 0 - str r2, [sp] - bl sub_80C6CAC - ldrh r1, [r6] - adds r0, r1 - strh r0, [r4] - ldr r2, [sp] -_080C69D8: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldr r0, _080C6A00 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r5, r0 - bcc _080C699E -_080C69E8: - lsls r0, r7, 24 - lsrs r2, r0, 24 - ldr r0, _080C6A04 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C696E -_080C69F4: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C6A00: .4byte gUnknown_3005340 -_080C6A04: .4byte gUnknown_3005338 - thumb_func_end sub_80C6958 - - thumb_func_start sub_80C6A08 -sub_80C6A08: @ 80C6A08 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080C6A5C @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C6AA4 - ldr r0, _080C6A60 @ =gUnknown_3005334 - mov r8, r0 -_080C6A1E: - ldr r0, _080C6A64 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C6A68 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r3, r8 - ldr r1, [r3] - adds r1, r0 - ldr r0, _080C6A6C @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - ldr r0, _080C6A70 @ =gUnknown_3005340 - adds r7, r2, 0x1 - ldrb r0, [r0] - cmp r5, r0 - bcs _080C6A98 - ldr r6, _080C6A74 @ =gUnknown_3005354 - movs r0, 0x80 - lsls r0, 8 - adds r2, r0, 0 -_080C6A4E: - ldrh r0, [r4] - ands r0, r2 - cmp r0, 0 - beq _080C6A78 - ldrh r0, [r6] - strh r0, [r4] - b _080C6A88 - .align 2, 0 -_080C6A5C: .4byte gUnknown_3005338 -_080C6A60: .4byte gUnknown_3005334 -_080C6A64: .4byte gUnknown_3005344 -_080C6A68: .4byte gUnknown_300534C -_080C6A6C: .4byte gUnknown_3005330 -_080C6A70: .4byte gUnknown_3005340 -_080C6A74: .4byte gUnknown_3005354 -_080C6A78: - adds r0, r4, 0 - str r2, [sp] - bl sub_80C6CE0 - ldrh r1, [r6] - adds r0, r1 - strh r0, [r4] - ldr r2, [sp] -_080C6A88: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldr r0, _080C6AB0 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r5, r0 - bcc _080C6A4E -_080C6A98: - lsls r0, r7, 24 - lsrs r2, r0, 24 - ldr r0, _080C6AB4 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C6A1E -_080C6AA4: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C6AB0: .4byte gUnknown_3005340 -_080C6AB4: .4byte gUnknown_3005338 - thumb_func_end sub_80C6A08 - - thumb_func_start sub_80C6AB8 -sub_80C6AB8: @ 80C6AB8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080C6B0C @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C6B54 - ldr r0, _080C6B10 @ =gUnknown_3005334 - mov r8, r0 -_080C6ACE: - ldr r0, _080C6B14 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C6B18 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r3, r8 - ldr r1, [r3] - adds r1, r0 - ldr r0, _080C6B1C @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - ldr r0, _080C6B20 @ =gUnknown_3005340 - adds r7, r2, 0x1 - ldrb r0, [r0] - cmp r5, r0 - bcs _080C6B48 - ldr r6, _080C6B24 @ =gUnknown_3005354 - movs r0, 0x80 - lsls r0, 8 - adds r2, r0, 0 -_080C6AFE: - ldrh r0, [r4] - ands r0, r2 - cmp r0, 0 - beq _080C6B28 - ldrh r0, [r6] - strh r0, [r4] - b _080C6B38 - .align 2, 0 -_080C6B0C: .4byte gUnknown_3005338 -_080C6B10: .4byte gUnknown_3005334 -_080C6B14: .4byte gUnknown_3005344 -_080C6B18: .4byte gUnknown_300534C -_080C6B1C: .4byte gUnknown_3005330 -_080C6B20: .4byte gUnknown_3005340 -_080C6B24: .4byte gUnknown_3005354 -_080C6B28: - adds r0, r4, 0 - str r2, [sp] - bl sub_80C6BDC - ldrh r1, [r6] - adds r0, r1 - strh r0, [r4] - ldr r2, [sp] -_080C6B38: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldr r0, _080C6B60 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r5, r0 - bcc _080C6AFE -_080C6B48: - lsls r0, r7, 24 - lsrs r2, r0, 24 - ldr r0, _080C6B64 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C6ACE -_080C6B54: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C6B60: .4byte gUnknown_3005340 -_080C6B64: .4byte gUnknown_3005338 - thumb_func_end sub_80C6AB8 - - thumb_func_start sub_80C6B68 -sub_80C6B68: @ 80C6B68 - push {r4,lr} - ldrh r0, [r0] - movs r1, 0x1F - movs r4, 0x1F - ands r4, r0 - lsls r0, 16 - lsrs r3, r0, 21 - ands r3, r1 - lsrs r2, r0, 26 - ands r2, r1 - movs r1, 0x3 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _080C6B8C - movs r0, 0x1C - ands r0, r4 - adds r4, r0, 0x4 -_080C6B8C: - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _080C6B9A - movs r0, 0x1C - ands r0, r3 - adds r3, r0, 0x4 -_080C6B9A: - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _080C6BA8 - movs r0, 0x1C - ands r0, r2 - adds r2, r0, 0x4 -_080C6BA8: - cmp r4, 0x5 - bhi _080C6BAE - movs r4, 0x6 -_080C6BAE: - cmp r4, 0x1E - bls _080C6BB4 - movs r4, 0x1E -_080C6BB4: - cmp r3, 0x5 - bhi _080C6BBA - movs r3, 0x6 -_080C6BBA: - cmp r3, 0x1E - bls _080C6BC0 - movs r3, 0x1E -_080C6BC0: - cmp r2, 0x5 - bhi _080C6BC6 - movs r2, 0x6 -_080C6BC6: - cmp r2, 0x1E - bls _080C6BCC - movs r2, 0x1E -_080C6BCC: - lsls r0, r2, 10 - lsls r1, r3, 5 - orrs r0, r1 - orrs r4, r0 - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80C6B68 - - thumb_func_start sub_80C6BDC -sub_80C6BDC: @ 80C6BDC - push {lr} - ldrh r0, [r0] - movs r1, 0x1F - movs r3, 0x1F - ands r3, r0 - lsls r0, 16 - lsrs r2, r0, 21 - ands r2, r1 - lsrs r0, 26 - ands r0, r1 - cmp r3, 0xB - bhi _080C6C00 - cmp r2, 0xA - bhi _080C6C00 - cmp r0, 0xA - bhi _080C6C00 - movs r0, 0x1 - b _080C6CA6 -_080C6C00: - cmp r3, 0x13 - bls _080C6C24 - cmp r2, 0x13 - bls _080C6C0C - cmp r0, 0x13 - bhi _080C6C30 -_080C6C0C: - cmp r3, 0x13 - bls _080C6C24 - cmp r2, 0x13 - bls _080C6C1A - cmp r0, 0xE - bhi _080C6C30 - b _080C6C68 -_080C6C1A: - cmp r0, 0x13 - bls _080C6C24 - cmp r2, 0xE - bhi _080C6C30 - b _080C6C44 -_080C6C24: - cmp r2, 0x13 - bls _080C6C34 - cmp r0, 0x13 - bls _080C6C34 - cmp r3, 0xE - bls _080C6C8C -_080C6C30: - movs r0, 0x2 - b _080C6CA6 -_080C6C34: - cmp r3, 0x13 - bls _080C6C58 - cmp r2, 0xB - bls _080C6C4C - cmp r0, 0xB - bls _080C6C48 - cmp r2, r0 - bcs _080C6C68 -_080C6C44: - movs r0, 0x8 - b _080C6CA6 -_080C6C48: - movs r0, 0xA - b _080C6CA6 -_080C6C4C: - cmp r0, 0xB - bls _080C6C54 - movs r0, 0xD - b _080C6CA6 -_080C6C54: - movs r0, 0x4 - b _080C6CA6 -_080C6C58: - cmp r2, 0x13 - bls _080C6C7C - cmp r3, 0xB - bls _080C6C70 - cmp r0, 0xB - bls _080C6C6C - cmp r3, r0 - bcc _080C6C8C -_080C6C68: - movs r0, 0x7 - b _080C6CA6 -_080C6C6C: - movs r0, 0xB - b _080C6CA6 -_080C6C70: - cmp r0, 0xB - bls _080C6C78 - movs r0, 0xE - b _080C6CA6 -_080C6C78: - movs r0, 0x5 - b _080C6CA6 -_080C6C7C: - cmp r0, 0x13 - bls _080C6CA4 - cmp r3, 0xB - bls _080C6C90 - cmp r2, 0xB - bls _080C6C98 - cmp r3, r2 - bcs _080C6C44 -_080C6C8C: - movs r0, 0x9 - b _080C6CA6 -_080C6C90: - cmp r2, 0xB - bls _080C6C98 - movs r0, 0xC - b _080C6CA6 -_080C6C98: - cmp r0, 0xB - bls _080C6CA0 - movs r0, 0xF - b _080C6CA6 -_080C6CA0: - movs r0, 0x6 - b _080C6CA6 -_080C6CA4: - movs r0, 0x3 -_080C6CA6: - pop {r1} - bx r1 - thumb_func_end sub_80C6BDC - - thumb_func_start sub_80C6CAC -sub_80C6CAC: @ 80C6CAC - push {lr} - ldrh r1, [r0] - movs r3, 0x1F - movs r0, 0x1F - ands r0, r1 - lsls r1, 16 - lsrs r2, r1, 21 - ands r2, r3 - lsrs r1, 26 - ands r1, r3 - adds r0, r2 - adds r0, r1 - movs r1, 0x3 - bl __divsi3 - movs r1, 0x1E - ands r0, r1 - lsls r0, 16 - cmp r0, 0 - beq _080C6CD8 - lsrs r0, 17 - b _080C6CDA -_080C6CD8: - movs r0, 0x1 -_080C6CDA: - pop {r1} - bx r1 - thumb_func_end sub_80C6CAC - - thumb_func_start sub_80C6CE0 -sub_80C6CE0: @ 80C6CE0 - push {lr} - ldrh r1, [r0] - movs r3, 0x1F - movs r0, 0x1F - ands r0, r1 - lsls r1, 16 - lsrs r2, r1, 21 - ands r2, r3 - lsrs r1, 26 - ands r1, r3 - adds r0, r2 - adds r0, r1 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - movs r1, 0x80 - lsls r1, 9 - adds r0, r1 - lsrs r0, 16 - pop {r1} - bx r1 - thumb_func_end sub_80C6CE0 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/image_processing_effects.s b/data/image_processing_effects.s new file mode 100644 index 000000000..df83b2d54 --- /dev/null +++ b/data/image_processing_effects.s @@ -0,0 +1,3204 @@ + .section .rodata + .align 2, 0 + +gUnknown_83F3024:: @ 83F3024 + .byte 0x00, 0x1d, 0x1c + .byte 0x0e, 0x1e, 0x1b + .byte 0x00, 0x01, 0x32 + .byte 0x2e, 0x1e, 0x37 + .byte 0x0a, 0x22, 0x1f + .byte 0x05, 0x26, 0x2e + .byte 0x12, 0x17, 0x1e + .byte 0x1a, 0x03, 0x11 + .byte 0x05, 0x11, 0x18 + .byte 0x05, 0x27, 0x2f + .byte 0x1a, 0x3f, 0x12 + .byte 0x22, 0x3f, 0x16 + .byte 0x2b, 0x2f, 0x2e + .byte 0x11, 0x02, 0x2d + .byte 0x23, 0x0d, 0x28 + .byte 0x17, 0x0c, 0x19 + .byte 0x2f, 0x0e, 0x13 + .byte 0x30, 0x18, 0x20 + .byte 0x2d, 0x28, 0x22 + .byte 0x01, 0x03, 0x19 + .byte 0x0e, 0x2a, 0x2b + .byte 0x22, 0x15, 0x25 + .byte 0x22, 0x0a, 0x26 + .byte 0x39, 0x06, 0x23 + .byte 0x16, 0x07, 0x2f + .byte 0x22, 0x3a, 0x1b + .byte 0x3b, 0x36, 0x35 + .byte 0x0a, 0x2b, 0x24 + .byte 0x36, 0x09, 0x12 + .byte 0x1c, 0x2f, 0x23 + .byte 0x2e, 0x38, 0x2c + .byte 0x05, 0x2a, 0x20 + .byte 0x07, 0x14, 0x32 + .byte 0x31, 0x08, 0x17 + .byte 0x1a, 0x24, 0x2d + .byte 0x22, 0x0a, 0x16 + .byte 0x1b, 0x26, 0x2b + .byte 0x29, 0x16, 0x11 + .byte 0x35, 0x08, 0x14 + .byte 0x1e, 0x08, 0x14 + .byte 0x05, 0x31, 0x14 + .byte 0x38, 0x31, 0x17 + .byte 0x34, 0x33, 0x12 + .byte 0x11, 0x09, 0x1f + .byte 0x28, 0x3d, 0x32 + .byte 0x35, 0x03, 0x1e + .byte 0x3c, 0x2b, 0x2e + .byte 0x10, 0x01, 0x17 + .byte 0x03, 0x3e, 0x22 + .byte 0x17, 0x18, 0x34 + .byte 0x08, 0x29, 0x19 + .byte 0x03, 0x24, 0x28 + .byte 0x3d, 0x33, 0x2f + .byte 0x31, 0x24, 0x19 + .byte 0x1b, 0x18, 0x26 + .byte 0x07, 0x0d, 0x25 + .byte 0x2d, 0x3f, 0x12 + .byte 0x2f, 0x15, 0x25 + .byte 0x29, 0x0f, 0x12 + .byte 0x07, 0x2c, 0x12 + .byte 0x2c, 0x0b, 0x26 + .byte 0x12, 0x1a, 0x16 + .byte 0x00, 0x0b, 0x2f + .byte 0x16, 0x35, 0x24 + .byte 0x1f, 0x1c, 0x22 + .byte 0x29, 0x33, 0x27 + .byte 0x3b, 0x30, 0x17 + .byte 0x11, 0x06, 0x35 + .byte 0x3e, 0x31, 0x2f + .byte 0x11, 0x3a, 0x25 + .byte 0x2a, 0x02, 0x19 + .byte 0x33, 0x18, 0x35 + .byte 0x2a, 0x20, 0x21 + .byte 0x2e, 0x32, 0x1b + .byte 0x3b, 0x1f, 0x23 + .byte 0x39, 0x29, 0x2a + .byte 0x2e, 0x31, 0x29 + .byte 0x2a, 0x0e, 0x2d + .byte 0x2d, 0x00, 0x1f + .byte 0x38, 0x28, 0x1b + .byte 0x14, 0x3b, 0x2b + .byte 0x2e, 0x04, 0x26 + .byte 0x36, 0x30, 0x11 + .byte 0x3b, 0x21, 0x2d + .byte 0x2b, 0x3f, 0x1b + .byte 0x20, 0x13, 0x31 + .byte 0x33, 0x0c, 0x30 + .byte 0x22, 0x2b, 0x2b + .byte 0x16, 0x02, 0x1e + .byte 0x1c, 0x12, 0x1c + .byte 0x0f, 0x3c, 0x36 + .byte 0x38, 0x10, 0x2d + .byte 0x18, 0x2f, 0x2d + .byte 0x35, 0x3b, 0x11 + .byte 0x37, 0x31, 0x13 + .byte 0x13, 0x3d, 0x2f + .byte 0x1e, 0x2c, 0x33 + .byte 0x2e, 0x37, 0x12 + .byte 0x3c, 0x1f, 0x33 + .byte 0x32, 0x2a, 0x27 + .byte 0x0d, 0x3b, 0x1c + .byte 0x35, 0x2a, 0x27 + .byte 0x09, 0x3d, 0x27 + .byte 0x12, 0x0b, 0x18 + .byte 0x0c, 0x15, 0x1d + .byte 0x20, 0x01, 0x1c + .byte 0x08, 0x3b, 0x1c + .byte 0x12, 0x37, 0x33 + .byte 0x15, 0x03, 0x2c + .byte 0x2a, 0x3b, 0x31 + .byte 0x0f, 0x04, 0x35 + .byte 0x08, 0x17, 0x33 + .byte 0x38, 0x3d, 0x2a + .byte 0x2f, 0x35, 0x16 + .byte 0x10, 0x35, 0x16 + .byte 0x23, 0x13, 0x2c + .byte 0x2f, 0x06, 0x20 + .byte 0x27, 0x3a, 0x24 + .byte 0x00, 0x1c, 0x2a + .byte 0x03, 0x39, 0x1d + .byte 0x28, 0x07, 0x1a + .byte 0x20, 0x0a, 0x37 + .byte 0x07, 0x35, 0x2d + .byte 0x15, 0x2f, 0x2c + .byte 0x10, 0x2c, 0x23 + .byte 0x3f, 0x29, 0x14 + .byte 0x2a, 0x21, 0x36 + .byte 0x34, 0x1a, 0x2c + .byte 0x1c, 0x3d, 0x33 + .byte 0x38, 0x2b, 0x22 + .byte 0x35, 0x28, 0x1f + .byte 0x3d, 0x0f, 0x1c + .byte 0x1e, 0x3e, 0x1b + .byte 0x0c, 0x3e, 0x1f + .byte 0x2b, 0x31, 0x2c + .byte 0x32, 0x39, 0x11 + .byte 0x05, 0x09, 0x11 + .byte 0x04, 0x38, 0x2a + .byte 0x32, 0x00, 0x16 + .byte 0x13, 0x0b, 0x31 + .byte 0x34, 0x2a, 0x13 + .byte 0x2c, 0x22, 0x21 + .byte 0x39, 0x2f, 0x15 + .byte 0x37, 0x28, 0x1e + .byte 0x07, 0x3b, 0x2d + .byte 0x11, 0x03, 0x28 + .byte 0x2d, 0x30, 0x1e + .byte 0x31, 0x11, 0x11 + .byte 0x23, 0x01, 0x1e + .byte 0x3d, 0x31, 0x34 + .byte 0x1c, 0x02, 0x34 + .byte 0x21, 0x0e, 0x25 + .byte 0x3d, 0x07, 0x17 + .byte 0x33, 0x15, 0x10 + .byte 0x29, 0x32, 0x32 + .byte 0x18, 0x1f, 0x30 + .byte 0x2d, 0x3b, 0x30 + .byte 0x27, 0x3e, 0x16 + .byte 0x31, 0x15, 0x12 + .byte 0x30, 0x25, 0x17 + .byte 0x33, 0x06, 0x34 + .byte 0x00, 0x29, 0x18 + .byte 0x3c, 0x03, 0x12 + .byte 0x2c, 0x0c, 0x11 + .byte 0x09, 0x30, 0x30 + .byte 0x10, 0x0e, 0x11 + .byte 0x27, 0x16, 0x1b + .byte 0x0c, 0x3b, 0x2e + .byte 0x2b, 0x33, 0x1e + .byte 0x13, 0x2d, 0x2d + .byte 0x11, 0x24, 0x29 + .byte 0x34, 0x3e, 0x2b + .byte 0x24, 0x1e, 0x21 + .byte 0x27, 0x1a, 0x2d + .byte 0x04, 0x39, 0x16 + .byte 0x3e, 0x33, 0x26 + .byte 0x1b, 0x2e, 0x25 + .byte 0x0c, 0x06, 0x19 + .byte 0x25, 0x19, 0x18 + .byte 0x1d, 0x33, 0x33 + .byte 0x1d, 0x28, 0x2d + .byte 0x1c, 0x10, 0x2a + .byte 0x1f, 0x35, 0x1e + .byte 0x34, 0x02, 0x10 + .byte 0x2b, 0x3a, 0x14 + .byte 0x0d, 0x0b, 0x15 + .byte 0x0c, 0x2c, 0x10 + .byte 0x37, 0x3a, 0x19 + .byte 0x06, 0x13, 0x17 + .byte 0x24, 0x10, 0x25 + .byte 0x24, 0x04, 0x1e + .byte 0x00, 0x35, 0x34 + .byte 0x3a, 0x00, 0x37 + .byte 0x3c, 0x07, 0x1a + .byte 0x2b, 0x28, 0x36 + .byte 0x34, 0x39, 0x2f + .byte 0x28, 0x09, 0x1f + .byte 0x38, 0x31, 0x30 + .byte 0x16, 0x25, 0x31 + .byte 0x18, 0x28, 0x31 + .byte 0x18, 0x0c, 0x22 + .byte 0x06, 0x39, 0x2d + .byte 0x3d, 0x20, 0x24 + .byte 0x2e, 0x27, 0x21 + .byte 0x3e, 0x18, 0x18 + .byte 0x15, 0x3c, 0x24 + .byte 0x06, 0x1b, 0x26 + .byte 0x15, 0x0e, 0x22 + .byte 0x0a, 0x0d, 0x1f + .byte 0x18, 0x16, 0x34 + .byte 0x10, 0x28, 0x21 + .byte 0x20, 0x11, 0x11 + .byte 0x36, 0x32, 0x15 + .byte 0x3b, 0x2e, 0x24 + .byte 0x1f, 0x2d, 0x12 + .byte 0x36, 0x2e, 0x20 + .byte 0x0b, 0x17, 0x33 + .byte 0x26, 0x03, 0x1f + .byte 0x08, 0x19, 0x31 + .byte 0x2a, 0x18, 0x25 + .byte 0x35, 0x2d, 0x2d + .byte 0x30, 0x38, 0x18 + .byte 0x1c, 0x25, 0x14 + .byte 0x1c, 0x22, 0x28 + .byte 0x08, 0x23, 0x21 + .byte 0x26, 0x1e, 0x30 + .byte 0x19, 0x0f, 0x15 + .byte 0x10, 0x2f, 0x22 + .byte 0x12, 0x02, 0x25 + .byte 0x3c, 0x01, 0x1d + .byte 0x0e, 0x14, 0x18 + .byte 0x0d, 0x18, 0x17 + .byte 0x22, 0x0b, 0x31 + .byte 0x13, 0x34, 0x21 + .byte 0x0f, 0x2d, 0x36 + .byte 0x39, 0x1f, 0x25 + .byte 0x18, 0x10, 0x1f + .byte 0x2d, 0x20, 0x20 + .byte 0x19, 0x0b, 0x31 + .byte 0x33, 0x13, 0x14 + .byte 0x2e, 0x11, 0x21 + .byte 0x2d, 0x0a, 0x37 + .byte 0x07, 0x15, 0x1b + .byte 0x32, 0x04, 0x32 + .byte 0x06, 0x18, 0x1b + .byte 0x13, 0x24, 0x12 + .byte 0x36, 0x22, 0x16 + .byte 0x1d, 0x29, 0x1c + .byte 0x35, 0x17, 0x21 + .byte 0x36, 0x17, 0x2b + .byte 0x35, 0x32, 0x19 + .byte 0x2a, 0x0f, 0x2e + .byte 0x10, 0x00, 0x34 + .byte 0x02, 0x0e, 0x28 + .byte 0x31, 0x32, 0x32 + .byte 0x3b, 0x05, 0x20 + .byte 0x36, 0x26, 0x12 + .byte 0x34, 0x06, 0x34 + .byte 0x1e, 0x31, 0x32 + .byte 0x35, 0x05, 0x34 + .byte 0x1e, 0x13, 0x15 + .byte 0x15, 0x14, 0x2c + .byte 0x29, 0x1c, 0x18 + .byte 0x24, 0x24, 0x12 + .byte 0x22, 0x29, 0x18 + .byte 0x34, 0x36, 0x30 + .byte 0x1e, 0x01, 0x23 + .byte 0x0c, 0x3c, 0x24 + .byte 0x0a, 0x3d, 0x16 + .byte 0x27, 0x1e, 0x23 + .byte 0x15, 0x02, 0x12 + .byte 0x11, 0x19, 0x2a + .byte 0x1d, 0x31, 0x15 + .byte 0x03, 0x3b, 0x2a + .byte 0x21, 0x19, 0x2c + .byte 0x0a, 0x23, 0x11 + .byte 0x25, 0x11, 0x1a + .byte 0x1a, 0x0a, 0x34 + .byte 0x3b, 0x0b, 0x33 + .byte 0x21, 0x0b, 0x37 + .byte 0x01, 0x31, 0x28 + .byte 0x35, 0x1d, 0x27 + .byte 0x2c, 0x30, 0x31 + .byte 0x2e, 0x39, 0x2d + .byte 0x30, 0x05, 0x2c + .byte 0x12, 0x2a, 0x2b + .byte 0x39, 0x22, 0x20 + .byte 0x15, 0x34, 0x1c + .byte 0x1c, 0x01, 0x15 + .byte 0x20, 0x16, 0x22 + .byte 0x13, 0x04, 0x18 + .byte 0x1e, 0x13, 0x10 + .byte 0x25, 0x33, 0x15 + .byte 0x39, 0x03, 0x31 + .byte 0x3f, 0x36, 0x18 + .byte 0x14, 0x23, 0x10 + .byte 0x2f, 0x1e, 0x1f + .byte 0x1f, 0x17, 0x2c + .byte 0x02, 0x16, 0x31 + .byte 0x20, 0x18, 0x30 + .byte 0x2e, 0x18, 0x37 + .byte 0x3b, 0x0e, 0x30 + .byte 0x10, 0x39, 0x24 + .byte 0x26, 0x39, 0x1e + .byte 0x30, 0x26, 0x2e + .byte 0x12, 0x01, 0x14 + .byte 0x37, 0x2a, 0x2e + .byte 0x21, 0x06, 0x1d + .byte 0x2a, 0x16, 0x32 + .byte 0x09, 0x38, 0x1c + .byte 0x07, 0x22, 0x17 + .byte 0x3b, 0x2d, 0x15 + .byte 0x07, 0x1e, 0x2e + .byte 0x1b, 0x2e, 0x1d + .byte 0x04, 0x09, 0x30 + .byte 0x30, 0x2d, 0x37 + .byte 0x2d, 0x34, 0x24 + .byte 0x18, 0x24, 0x25 + .byte 0x0e, 0x2d, 0x26 + .byte 0x23, 0x0a, 0x16 + .byte 0x12, 0x2d, 0x11 + .byte 0x21, 0x28, 0x2e + .byte 0x0f, 0x01, 0x21 + .byte 0x01, 0x31, 0x12 + .byte 0x3f, 0x1b, 0x1e + .byte 0x21, 0x25, 0x2b + .byte 0x26, 0x18, 0x13 + .byte 0x15, 0x2d, 0x34 + .byte 0x23, 0x21, 0x36 + .byte 0x0e, 0x2e, 0x1c + .byte 0x14, 0x22, 0x1c + .byte 0x2c, 0x0b, 0x28 + .byte 0x1a, 0x18, 0x21 + .byte 0x21, 0x07, 0x1a + .byte 0x24, 0x26, 0x29 + .byte 0x2b, 0x0a, 0x34 + .byte 0x3e, 0x27, 0x33 + .byte 0x12, 0x34, 0x1b + .byte 0x1f, 0x01, 0x2a + .byte 0x2e, 0x06, 0x23 + .byte 0x2f, 0x1f, 0x14 + .byte 0x18, 0x06, 0x26 + .byte 0x31, 0x1f, 0x2b + .byte 0x22, 0x26, 0x2e + .byte 0x1e, 0x15, 0x16 + .byte 0x20, 0x22, 0x28 + .byte 0x15, 0x37, 0x12 + .byte 0x25, 0x04, 0x2c + .byte 0x1f, 0x04, 0x2e + .byte 0x0c, 0x13, 0x18 + .byte 0x07, 0x0b, 0x36 + .byte 0x1d, 0x1c, 0x2a + .byte 0x30, 0x22, 0x1c + .byte 0x2e, 0x12, 0x2f + .byte 0x2b, 0x21, 0x1e + .byte 0x16, 0x38, 0x30 + .byte 0x04, 0x02, 0x16 + .byte 0x05, 0x14, 0x20 + .byte 0x38, 0x3c, 0x33 + .byte 0x21, 0x1b, 0x2f + .byte 0x14, 0x2a, 0x27 + .byte 0x38, 0x14, 0x1b + .byte 0x2b, 0x1f, 0x2b + .byte 0x29, 0x2b, 0x25 + .byte 0x27, 0x36, 0x21 + .byte 0x11, 0x22, 0x1b + .byte 0x29, 0x03, 0x1b + .byte 0x18, 0x24, 0x28 + .byte 0x21, 0x2d, 0x36 + .byte 0x3c, 0x2c, 0x24 + .byte 0x33, 0x17, 0x1f + .byte 0x2a, 0x3a, 0x21 + .byte 0x0a, 0x23, 0x37 + .byte 0x00, 0x0b, 0x21 + .byte 0x11, 0x38, 0x19 + .byte 0x0f, 0x0e, 0x1c + .byte 0x1f, 0x0f, 0x37 + .byte 0x3c, 0x10, 0x37 + .byte 0x38, 0x31, 0x35 + .byte 0x07, 0x15, 0x28 + .byte 0x1e, 0x2e, 0x19 + .byte 0x26, 0x10, 0x33 + .byte 0x3d, 0x35, 0x2f + .byte 0x3a, 0x04, 0x34 + .byte 0x0d, 0x18, 0x1a + .byte 0x01, 0x2d, 0x15 + .byte 0x3d, 0x1a, 0x17 + .byte 0x17, 0x3f, 0x32 + .byte 0x0b, 0x21, 0x11 + .byte 0x1e, 0x26, 0x2b + .byte 0x0d, 0x19, 0x24 + .byte 0x2e, 0x04, 0x1b + .byte 0x1b, 0x33, 0x20 + .byte 0x15, 0x21, 0x1d + .byte 0x1f, 0x04, 0x21 + .byte 0x0f, 0x12, 0x1f + .byte 0x2d, 0x2a, 0x32 + .byte 0x03, 0x37, 0x1f + .byte 0x35, 0x07, 0x27 + .byte 0x24, 0x1f, 0x31 + .byte 0x2f, 0x30, 0x15 + .byte 0x06, 0x00, 0x24 + .byte 0x0b, 0x22, 0x1a + .byte 0x0c, 0x3b, 0x29 + .byte 0x14, 0x1a, 0x17 + .byte 0x37, 0x20, 0x25 + .byte 0x3f, 0x26, 0x37 + .byte 0x3a, 0x3e, 0x10 + .byte 0x22, 0x04, 0x11 + .byte 0x28, 0x12, 0x1c + .byte 0x03, 0x2e, 0x2e + .byte 0x0e, 0x38, 0x28 + .byte 0x01, 0x29, 0x22 + .byte 0x1e, 0x33, 0x19 + .byte 0x06, 0x21, 0x27 + .byte 0x33, 0x19, 0x1a + .byte 0x02, 0x05, 0x17 + .byte 0x11, 0x11, 0x2c + .byte 0x1f, 0x26, 0x1e + .byte 0x39, 0x1f, 0x28 + .byte 0x2e, 0x2f, 0x12 + .byte 0x22, 0x34, 0x13 + .byte 0x3b, 0x26, 0x2f + .byte 0x34, 0x00, 0x14 + .byte 0x10, 0x31, 0x11 + .byte 0x1d, 0x2d, 0x2a + .byte 0x08, 0x08, 0x37 + .byte 0x15, 0x18, 0x34 + .byte 0x04, 0x2b, 0x24 + .byte 0x2f, 0x1e, 0x27 + .byte 0x22, 0x2a, 0x24 + .byte 0x07, 0x14, 0x25 + .byte 0x01, 0x27, 0x19 + .byte 0x29, 0x0a, 0x29 + .byte 0x3d, 0x1c, 0x2f + .byte 0x0d, 0x1f, 0x1c + .byte 0x24, 0x3d, 0x32 + .byte 0x36, 0x1d, 0x24 + .byte 0x14, 0x21, 0x16 + .byte 0x1a, 0x0d, 0x29 + .byte 0x3f, 0x2b, 0x2a + .byte 0x1a, 0x3e, 0x35 + .byte 0x11, 0x28, 0x18 + .byte 0x32, 0x05, 0x15 + .byte 0x21, 0x2e, 0x34 + .byte 0x2d, 0x14, 0x2a + .byte 0x3c, 0x08, 0x37 + .byte 0x3f, 0x34, 0x1e + .byte 0x27, 0x24, 0x1c + .byte 0x16, 0x16, 0x33 + .byte 0x29, 0x3b, 0x19 + .byte 0x36, 0x2f, 0x1c + .byte 0x03, 0x25, 0x2c + .byte 0x0b, 0x16, 0x36 + .byte 0x1c, 0x1d, 0x1b + .byte 0x2c, 0x27, 0x1b + .byte 0x0b, 0x1f, 0x2b + .byte 0x08, 0x10, 0x27 + .byte 0x3f, 0x25, 0x2f + .byte 0x33, 0x13, 0x1f + .byte 0x04, 0x31, 0x37 + .byte 0x0e, 0x2f, 0x12 + .byte 0x08, 0x23, 0x20 + .byte 0x3a, 0x1a, 0x1e + .byte 0x2f, 0x0b, 0x1f + .byte 0x1e, 0x20, 0x19 + .byte 0x23, 0x3b, 0x14 + .byte 0x25, 0x00, 0x27 + .byte 0x14, 0x04, 0x25 + .byte 0x36, 0x1a, 0x2b + .byte 0x27, 0x21, 0x15 + .byte 0x28, 0x13, 0x2c + .byte 0x0e, 0x3c, 0x35 + .byte 0x0c, 0x2d, 0x2b + .byte 0x37, 0x16, 0x15 + .byte 0x29, 0x15, 0x1d + .byte 0x17, 0x34, 0x36 + .byte 0x09, 0x0a, 0x31 + .byte 0x37, 0x22, 0x28 + .byte 0x17, 0x2b, 0x35 + .byte 0x14, 0x2b, 0x12 + .byte 0x08, 0x13, 0x1f + .byte 0x31, 0x13, 0x28 + .byte 0x06, 0x07, 0x35 + .byte 0x23, 0x3a, 0x29 + .byte 0x0f, 0x24, 0x2e + .byte 0x07, 0x35, 0x26 + .byte 0x0e, 0x12, 0x15 + .byte 0x23, 0x33, 0x2c + .byte 0x0e, 0x21, 0x26 + .byte 0x1c, 0x12, 0x25 + .byte 0x23, 0x1d, 0x2f + .byte 0x04, 0x35, 0x33 + .byte 0x16, 0x01, 0x24 + .byte 0x3d, 0x2c, 0x2e + .byte 0x35, 0x0a, 0x25 + .byte 0x11, 0x13, 0x25 + .byte 0x1b, 0x1b, 0x15 + .byte 0x15, 0x39, 0x10 + .byte 0x0b, 0x35, 0x24 + .byte 0x3a, 0x27, 0x30 + .byte 0x2e, 0x2f, 0x15 + .byte 0x10, 0x1f, 0x35 + .byte 0x1b, 0x28, 0x35 + .byte 0x26, 0x30, 0x37 + .byte 0x34, 0x37, 0x2b + .byte 0x0f, 0x30, 0x29 + .byte 0x2e, 0x3f, 0x2b + .byte 0x38, 0x34, 0x2b + .byte 0x2b, 0x2f, 0x25 + .byte 0x0d, 0x28, 0x2a + .byte 0x33, 0x18, 0x10 + .byte 0x21, 0x12, 0x11 + .byte 0x1f, 0x22, 0x34 + .byte 0x11, 0x25, 0x23 + .byte 0x21, 0x3f, 0x11 + .byte 0x26, 0x27, 0x25 + .byte 0x28, 0x36, 0x12 + .byte 0x15, 0x26, 0x32 + .byte 0x11, 0x18, 0x24 + .byte 0x32, 0x25, 0x37 + .byte 0x27, 0x3a, 0x33 + .byte 0x35, 0x07, 0x1c + .byte 0x1a, 0x0e, 0x2a + .byte 0x1e, 0x2f, 0x1f + .byte 0x00, 0x2e, 0x21 + .byte 0x1b, 0x3c, 0x14 + .byte 0x2f, 0x3a, 0x2f + .byte 0x3e, 0x38, 0x15 + .byte 0x1a, 0x13, 0x2f + .byte 0x29, 0x0d, 0x2f + .byte 0x37, 0x17, 0x18 + .byte 0x30, 0x1c, 0x35 + .byte 0x15, 0x34, 0x14 + .byte 0x28, 0x11, 0x2c + .byte 0x2c, 0x25, 0x2a + .byte 0x20, 0x3f, 0x28 + .byte 0x0c, 0x34, 0x1b + .byte 0x30, 0x2e, 0x25 + .byte 0x37, 0x1c, 0x24 + .byte 0x1f, 0x25, 0x26 + .byte 0x0c, 0x19, 0x34 + .byte 0x18, 0x10, 0x35 + .byte 0x0a, 0x13, 0x11 + .byte 0x25, 0x13, 0x20 + .byte 0x13, 0x19, 0x11 + .byte 0x20, 0x28, 0x1d + .byte 0x3e, 0x30, 0x1b + .byte 0x23, 0x24, 0x21 + .byte 0x0d, 0x23, 0x23 + .byte 0x1d, 0x28, 0x2e + .byte 0x2d, 0x12, 0x1f + .byte 0x0e, 0x2e, 0x2b + .byte 0x0b, 0x31, 0x32 + .byte 0x24, 0x3c, 0x2c + .byte 0x13, 0x3c, 0x12 + .byte 0x28, 0x16, 0x2a + .byte 0x05, 0x0c, 0x32 + .byte 0x39, 0x0b, 0x32 + .byte 0x21, 0x04, 0x14 + .byte 0x10, 0x31, 0x32 + .byte 0x12, 0x1f, 0x23 + .byte 0x39, 0x2e, 0x2e + .byte 0x22, 0x3d, 0x27 + .byte 0x0c, 0x1e, 0x18 + .byte 0x25, 0x00, 0x17 + .byte 0x06, 0x31, 0x14 + .byte 0x13, 0x21, 0x1a + .byte 0x14, 0x20, 0x35 + .byte 0x0a, 0x3b, 0x25 + .byte 0x33, 0x08, 0x28 + .byte 0x3d, 0x02, 0x33 + .byte 0x23, 0x00, 0x13 + .byte 0x22, 0x21, 0x28 + .byte 0x30, 0x14, 0x2e + .byte 0x14, 0x32, 0x36 + .byte 0x39, 0x23, 0x1e + .byte 0x1c, 0x11, 0x30 + .byte 0x37, 0x16, 0x30 + .byte 0x15, 0x31, 0x1f + .byte 0x34, 0x28, 0x2c + .byte 0x35, 0x05, 0x29 + .byte 0x37, 0x33, 0x2a + .byte 0x1c, 0x17, 0x2e + .byte 0x10, 0x06, 0x16 + .byte 0x32, 0x1f, 0x2f + .byte 0x00, 0x29, 0x1e + .byte 0x04, 0x01, 0x16 + .byte 0x3b, 0x23, 0x1e + .byte 0x1b, 0x34, 0x2a + .byte 0x30, 0x11, 0x2b + .byte 0x03, 0x00, 0x1f + .byte 0x1d, 0x37, 0x1a + .byte 0x3a, 0x18, 0x25 + .byte 0x1c, 0x16, 0x2c + .byte 0x04, 0x3f, 0x33 + .byte 0x26, 0x23, 0x2d + .byte 0x15, 0x2c, 0x27 + .byte 0x02, 0x35, 0x27 + .byte 0x07, 0x35, 0x33 + .byte 0x1a, 0x0c, 0x10 + .byte 0x28, 0x26, 0x2c + .byte 0x2f, 0x36, 0x16 + .byte 0x37, 0x0b, 0x27 + .byte 0x1b, 0x3d, 0x18 + .byte 0x27, 0x1f, 0x20 + .byte 0x2b, 0x2a, 0x33 + .byte 0x0b, 0x0f, 0x20 + .byte 0x35, 0x3c, 0x2f + .byte 0x33, 0x21, 0x15 + .byte 0x2d, 0x26, 0x34 + .byte 0x1f, 0x1a, 0x21 + .byte 0x2f, 0x2c, 0x2a + .byte 0x1a, 0x32, 0x1a + .byte 0x3b, 0x3f, 0x21 + .byte 0x13, 0x3f, 0x13 + .byte 0x0f, 0x24, 0x22 + .byte 0x14, 0x1b, 0x10 + .byte 0x21, 0x06, 0x28 + .byte 0x25, 0x34, 0x10 + .byte 0x2e, 0x0e, 0x14 + .byte 0x3c, 0x3e, 0x25 + .byte 0x16, 0x06, 0x30 + .byte 0x0b, 0x04, 0x1f + .byte 0x3e, 0x02, 0x24 + .byte 0x0c, 0x17, 0x25 + .byte 0x2b, 0x3c, 0x2d + .byte 0x15, 0x36, 0x33 + .byte 0x18, 0x23, 0x2a + .byte 0x1d, 0x10, 0x2a + .byte 0x35, 0x17, 0x28 + .byte 0x00, 0x37, 0x24 + .byte 0x0a, 0x3b, 0x15 + .byte 0x1d, 0x0b, 0x1f + .byte 0x3c, 0x31, 0x25 + .byte 0x1d, 0x0f, 0x1d + .byte 0x20, 0x13, 0x34 + .byte 0x11, 0x2b, 0x2e + .byte 0x23, 0x0c, 0x2e + .byte 0x24, 0x02, 0x14 + .byte 0x31, 0x16, 0x19 + .byte 0x0e, 0x23, 0x35 + .byte 0x1a, 0x10, 0x16 + .byte 0x14, 0x04, 0x19 + .byte 0x2d, 0x27, 0x37 + .byte 0x33, 0x02, 0x31 + .byte 0x02, 0x04, 0x16 + .byte 0x0d, 0x22, 0x25 + .byte 0x25, 0x00, 0x16 + .byte 0x2a, 0x3f, 0x26 + .byte 0x20, 0x0c, 0x12 + .byte 0x2f, 0x2e, 0x35 + .byte 0x1b, 0x0d, 0x22 + .byte 0x1e, 0x01, 0x34 + .byte 0x05, 0x22, 0x21 + .byte 0x34, 0x2a, 0x32 + .byte 0x0b, 0x09, 0x1d + .byte 0x3f, 0x32, 0x2f + .byte 0x3d, 0x18, 0x2d + .byte 0x0b, 0x38, 0x36 + .byte 0x39, 0x17, 0x28 + .byte 0x34, 0x04, 0x24 + .byte 0x36, 0x0e, 0x2a + .byte 0x38, 0x01, 0x14 + .byte 0x3c, 0x24, 0x22 + .byte 0x21, 0x03, 0x18 + .byte 0x32, 0x2f, 0x12 + .byte 0x29, 0x24, 0x31 + .byte 0x0a, 0x3b, 0x12 + .byte 0x1a, 0x1c, 0x20 + .byte 0x30, 0x31, 0x1b + .byte 0x1a, 0x21, 0x10 + .byte 0x05, 0x29, 0x10 + .byte 0x26, 0x2d, 0x13 + .byte 0x16, 0x0c, 0x1d + .byte 0x2b, 0x06, 0x1b + .byte 0x06, 0x12, 0x14 + .byte 0x38, 0x0f, 0x35 + .byte 0x23, 0x3a, 0x2c + .byte 0x00, 0x19, 0x33 + .byte 0x29, 0x14, 0x2d + .byte 0x2a, 0x21, 0x29 + .byte 0x14, 0x31, 0x14 + .byte 0x1a, 0x06, 0x1e + .byte 0x18, 0x1b, 0x28 + .byte 0x3b, 0x16, 0x29 + .byte 0x15, 0x1e, 0x12 + .byte 0x34, 0x0a, 0x14 + .byte 0x1b, 0x05, 0x27 + .byte 0x0b, 0x01, 0x26 + .byte 0x2a, 0x22, 0x35 + .byte 0x21, 0x20, 0x18 + .byte 0x20, 0x37, 0x17 + .byte 0x14, 0x1f, 0x11 + .byte 0x1d, 0x11, 0x25 + .byte 0x24, 0x2b, 0x2f + .byte 0x07, 0x3f, 0x1f + .byte 0x2c, 0x25, 0x25 + .byte 0x2a, 0x29, 0x18 + .byte 0x11, 0x24, 0x28 + .byte 0x31, 0x2c, 0x2a + .byte 0x39, 0x0b, 0x26 + .byte 0x28, 0x10, 0x26 + .byte 0x22, 0x06, 0x16 + .byte 0x09, 0x2c, 0x13 + .byte 0x34, 0x19, 0x15 + .byte 0x3a, 0x12, 0x21 + .byte 0x1d, 0x38, 0x23 + .byte 0x12, 0x25, 0x24 + .byte 0x21, 0x30, 0x12 + .byte 0x37, 0x1a, 0x12 + .byte 0x24, 0x3b, 0x25 + .byte 0x32, 0x15, 0x23 + .byte 0x0d, 0x1a, 0x10 + .byte 0x16, 0x2e, 0x26 + .byte 0x1d, 0x14, 0x16 + .byte 0x3e, 0x2e, 0x1f + .byte 0x0a, 0x16, 0x10 + .byte 0x1d, 0x30, 0x2b + .byte 0x04, 0x3a, 0x19 + .byte 0x08, 0x2d, 0x2e + .byte 0x28, 0x1e, 0x33 + .byte 0x0a, 0x12, 0x2e + .byte 0x0d, 0x03, 0x2f + .byte 0x26, 0x3a, 0x1e + .byte 0x35, 0x3b, 0x2a + .byte 0x03, 0x1a, 0x18 + .byte 0x3f, 0x0b, 0x27 + .byte 0x04, 0x05, 0x34 + .byte 0x36, 0x0b, 0x27 + .byte 0x3b, 0x17, 0x11 + .byte 0x0d, 0x27, 0x26 + .byte 0x2c, 0x1f, 0x20 + .byte 0x26, 0x10, 0x20 + .byte 0x25, 0x23, 0x2d + .byte 0x37, 0x09, 0x13 + .byte 0x14, 0x17, 0x2d + .byte 0x2e, 0x3d, 0x23 + .byte 0x1d, 0x1a, 0x1f + .byte 0x21, 0x33, 0x2e + .byte 0x28, 0x17, 0x13 + .byte 0x26, 0x3c, 0x36 + .byte 0x14, 0x1a, 0x33 + .byte 0x32, 0x20, 0x2b + .byte 0x19, 0x3e, 0x20 + .byte 0x0c, 0x02, 0x2d + .byte 0x3c, 0x3c, 0x2a + .byte 0x30, 0x30, 0x28 + .byte 0x25, 0x3f, 0x1e + .byte 0x03, 0x17, 0x1e + .byte 0x35, 0x11, 0x1c + .byte 0x1b, 0x14, 0x2a + .byte 0x28, 0x3a, 0x23 + .byte 0x0e, 0x1f, 0x12 + .byte 0x36, 0x21, 0x20 + .byte 0x07, 0x3b, 0x10 + .byte 0x23, 0x19, 0x34 + .byte 0x0d, 0x2e, 0x18 + .byte 0x3f, 0x20, 0x25 + .byte 0x3e, 0x3b, 0x15 + .byte 0x0b, 0x2e, 0x12 + .byte 0x37, 0x0b, 0x23 + .byte 0x3d, 0x32, 0x1f + .byte 0x16, 0x03, 0x27 + .byte 0x14, 0x0c, 0x21 + .byte 0x18, 0x03, 0x30 + .byte 0x3e, 0x21, 0x13 + .byte 0x0f, 0x00, 0x32 + .byte 0x3f, 0x23, 0x16 + .byte 0x0e, 0x31, 0x1d + .byte 0x18, 0x1c, 0x1d + .byte 0x30, 0x0e, 0x1e + .byte 0x21, 0x20, 0x23 + .byte 0x3f, 0x0c, 0x1e + .byte 0x14, 0x33, 0x22 + .byte 0x22, 0x21, 0x15 + .byte 0x36, 0x05, 0x1e + .byte 0x1d, 0x31, 0x14 + .byte 0x20, 0x11, 0x37 + .byte 0x0d, 0x33, 0x19 + .byte 0x25, 0x05, 0x36 + .byte 0x1e, 0x31, 0x20 + .byte 0x35, 0x3a, 0x2f + .byte 0x32, 0x2f, 0x30 + .byte 0x14, 0x23, 0x2d + .byte 0x35, 0x1e, 0x29 + .byte 0x05, 0x05, 0x1b + .byte 0x09, 0x1f, 0x26 + .byte 0x2f, 0x0b, 0x15 + .byte 0x15, 0x11, 0x13 + .byte 0x29, 0x1b, 0x18 + .byte 0x1c, 0x13, 0x35 + .byte 0x34, 0x31, 0x23 + .byte 0x27, 0x3f, 0x2f + .byte 0x09, 0x30, 0x19 + .byte 0x23, 0x12, 0x34 + .byte 0x02, 0x2a, 0x21 + .byte 0x09, 0x3c, 0x1d + .byte 0x0c, 0x02, 0x10 + .byte 0x22, 0x05, 0x17 + .byte 0x22, 0x08, 0x1b + .byte 0x0a, 0x0f, 0x15 + .byte 0x02, 0x11, 0x13 + .byte 0x01, 0x21, 0x22 + .byte 0x16, 0x39, 0x33 + .byte 0x24, 0x38, 0x34 + .byte 0x0f, 0x1e, 0x2b + .byte 0x2b, 0x15, 0x15 + .byte 0x20, 0x22, 0x2e + .byte 0x3a, 0x3f, 0x31 + .byte 0x1a, 0x27, 0x2b + .byte 0x29, 0x34, 0x14 + .byte 0x16, 0x39, 0x2f + .byte 0x13, 0x3e, 0x16 + .byte 0x36, 0x21, 0x30 + .byte 0x00, 0x24, 0x2b + .byte 0x24, 0x21, 0x30 + .byte 0x15, 0x31, 0x13 + .byte 0x10, 0x37, 0x24 + .byte 0x08, 0x07, 0x23 + .byte 0x21, 0x09, 0x25 + .byte 0x05, 0x3c, 0x32 + .byte 0x19, 0x03, 0x25 + .byte 0x0f, 0x29, 0x2b + .byte 0x16, 0x07, 0x13 + .byte 0x3e, 0x3d, 0x25 + .byte 0x36, 0x0b, 0x28 + .byte 0x2e, 0x2b, 0x16 + .byte 0x0c, 0x31, 0x11 + .byte 0x30, 0x13, 0x2d + .byte 0x26, 0x3e, 0x37 + .byte 0x29, 0x2f, 0x2e + .byte 0x15, 0x3d, 0x17 + .byte 0x1c, 0x2e, 0x21 + .byte 0x33, 0x2f, 0x10 + .byte 0x0d, 0x05, 0x1d + .byte 0x1c, 0x1a, 0x12 + .byte 0x0e, 0x18, 0x37 + .byte 0x1b, 0x11, 0x14 + .byte 0x06, 0x14, 0x21 + .byte 0x31, 0x0e, 0x27 + .byte 0x1a, 0x03, 0x10 + .byte 0x00, 0x34, 0x31 + .byte 0x3f, 0x0b, 0x1d + .byte 0x0f, 0x12, 0x1f + .byte 0x1a, 0x15, 0x10 + .byte 0x0f, 0x00, 0x24 + .byte 0x3e, 0x0a, 0x2a + .byte 0x30, 0x2b, 0x24 + .byte 0x26, 0x31, 0x10 + .byte 0x2d, 0x2f, 0x2f + .byte 0x3f, 0x0c, 0x13 + .byte 0x12, 0x0b, 0x16 + .byte 0x15, 0x07, 0x1f + .byte 0x28, 0x10, 0x32 + .byte 0x0f, 0x17, 0x15 + .byte 0x0b, 0x27, 0x33 + .byte 0x34, 0x1d, 0x10 + .byte 0x1c, 0x3a, 0x12 + .byte 0x2c, 0x27, 0x37 + .byte 0x0a, 0x1a, 0x32 + .byte 0x05, 0x1f, 0x21 + .byte 0x24, 0x0d, 0x1f + .byte 0x1c, 0x17, 0x24 + .byte 0x2f, 0x3b, 0x32 + .byte 0x3b, 0x25, 0x10 + .byte 0x03, 0x2f, 0x21 + .byte 0x0c, 0x10, 0x23 + .byte 0x0e, 0x3a, 0x2c + .byte 0x33, 0x03, 0x2c + .byte 0x12, 0x06, 0x1c + .byte 0x2a, 0x37, 0x30 + .byte 0x3f, 0x01, 0x1e + .byte 0x35, 0x16, 0x37 + .byte 0x2c, 0x32, 0x35 + .byte 0x05, 0x11, 0x22 + .byte 0x29, 0x09, 0x20 + .byte 0x2b, 0x0d, 0x1f + .byte 0x18, 0x0d, 0x20 + .byte 0x23, 0x39, 0x16 + .byte 0x0f, 0x3a, 0x18 + .byte 0x21, 0x35, 0x2b + .byte 0x36, 0x26, 0x2b + .byte 0x23, 0x05, 0x2f + .byte 0x1b, 0x08, 0x17 + .byte 0x3e, 0x09, 0x16 + .byte 0x2d, 0x3a, 0x37 + .byte 0x15, 0x35, 0x35 + .byte 0x29, 0x0a, 0x12 + .byte 0x02, 0x39, 0x1f + .byte 0x14, 0x34, 0x33 + .byte 0x17, 0x1d, 0x18 + .byte 0x16, 0x1d, 0x1a + .byte 0x01, 0x39, 0x22 + .byte 0x1e, 0x27, 0x36 + .byte 0x32, 0x14, 0x26 + .byte 0x0a, 0x39, 0x36 + .byte 0x1f, 0x0d, 0x1e + .byte 0x0b, 0x0a, 0x19 + .byte 0x35, 0x1d, 0x34 + .byte 0x03, 0x12, 0x16 + .byte 0x0c, 0x13, 0x2e + .byte 0x0c, 0x34, 0x1e + .byte 0x10, 0x14, 0x1e + .byte 0x23, 0x32, 0x27 + .byte 0x02, 0x10, 0x29 + .byte 0x35, 0x18, 0x33 + .byte 0x33, 0x1d, 0x1a + .byte 0x3c, 0x15, 0x23 + .byte 0x3e, 0x3f, 0x22 + .byte 0x2a, 0x02, 0x2c + .byte 0x28, 0x0a, 0x2f + .byte 0x1a, 0x06, 0x35 + .byte 0x3c, 0x17, 0x2b + .byte 0x03, 0x12, 0x17 + .byte 0x2f, 0x0a, 0x26 + .byte 0x12, 0x38, 0x11 + .byte 0x36, 0x1b, 0x23 + .byte 0x01, 0x39, 0x35 + .byte 0x19, 0x19, 0x17 + .byte 0x09, 0x28, 0x22 + .byte 0x1e, 0x27, 0x2c + .byte 0x35, 0x33, 0x2c + .byte 0x27, 0x25, 0x31 + .byte 0x06, 0x31, 0x2d + .byte 0x1a, 0x39, 0x28 + .byte 0x2d, 0x04, 0x1e + .byte 0x24, 0x3e, 0x1c + .byte 0x3c, 0x30, 0x1b + .byte 0x3f, 0x3e, 0x37 + .byte 0x22, 0x36, 0x11 + .byte 0x00, 0x01, 0x1c + .byte 0x12, 0x1a, 0x10 + .byte 0x12, 0x1e, 0x2c + .byte 0x1f, 0x12, 0x2a + .byte 0x2f, 0x06, 0x19 + .byte 0x35, 0x1a, 0x18 + .byte 0x3b, 0x09, 0x36 + .byte 0x34, 0x1d, 0x13 + .byte 0x02, 0x07, 0x10 + .byte 0x20, 0x2f, 0x1d + .byte 0x0b, 0x03, 0x33 + .byte 0x1c, 0x16, 0x31 + .byte 0x05, 0x13, 0x1b + .byte 0x29, 0x06, 0x13 + .byte 0x30, 0x2d, 0x36 + .byte 0x2a, 0x2d, 0x2c + .byte 0x19, 0x34, 0x1c + .byte 0x0f, 0x15, 0x12 + .byte 0x36, 0x15, 0x2c + .byte 0x3a, 0x06, 0x1c + .byte 0x12, 0x1d, 0x26 + .byte 0x03, 0x38, 0x1d + .byte 0x01, 0x01, 0x2d + .byte 0x17, 0x2e, 0x10 + .byte 0x14, 0x17, 0x1c + .byte 0x34, 0x0f, 0x28 + .byte 0x09, 0x37, 0x1b + .byte 0x28, 0x1d, 0x26 + .byte 0x29, 0x2d, 0x36 + .byte 0x1e, 0x17, 0x28 + .byte 0x15, 0x0f, 0x1c + .byte 0x20, 0x2d, 0x10 + .byte 0x27, 0x16, 0x2e + .byte 0x14, 0x09, 0x12 + .byte 0x3b, 0x3d, 0x21 + .byte 0x25, 0x1a, 0x2c + .byte 0x00, 0x22, 0x36 + .byte 0x0d, 0x30, 0x10 + .byte 0x17, 0x19, 0x1b + .byte 0x00, 0x3b, 0x21 + .byte 0x2a, 0x28, 0x34 + .byte 0x2d, 0x0f, 0x16 + .byte 0x0a, 0x30, 0x28 + .byte 0x06, 0x00, 0x25 + .byte 0x31, 0x2e, 0x2a + .byte 0x14, 0x33, 0x28 + .byte 0x36, 0x10, 0x2e + .byte 0x05, 0x2e, 0x19 + .byte 0x19, 0x1a, 0x15 + .byte 0x2c, 0x14, 0x17 + .byte 0x37, 0x0f, 0x13 + .byte 0x32, 0x17, 0x1b + .byte 0x39, 0x18, 0x32 + .byte 0x2e, 0x32, 0x1e + .byte 0x24, 0x1d, 0x31 + .byte 0x12, 0x1d, 0x2b + .byte 0x14, 0x0c, 0x27 + .byte 0x36, 0x2e, 0x32 + .byte 0x06, 0x0a, 0x1a + .byte 0x28, 0x28, 0x20 + .byte 0x3a, 0x3a, 0x17 + .byte 0x08, 0x27, 0x36 + .byte 0x18, 0x1a, 0x10 + .byte 0x1e, 0x26, 0x1b + .byte 0x1f, 0x33, 0x1f + .byte 0x21, 0x17, 0x2f + .byte 0x01, 0x08, 0x20 + .byte 0x35, 0x03, 0x19 + .byte 0x3b, 0x02, 0x20 + .byte 0x02, 0x2d, 0x23 + .byte 0x0e, 0x17, 0x32 + .byte 0x31, 0x29, 0x11 + .byte 0x22, 0x17, 0x22 + .byte 0x3a, 0x2c, 0x23 + .byte 0x34, 0x20, 0x18 + .byte 0x00, 0x3a, 0x22 + .byte 0x25, 0x33, 0x21 + .byte 0x33, 0x04, 0x27 + .byte 0x04, 0x18, 0x32 + .byte 0x2c, 0x0c, 0x2f + .byte 0x28, 0x14, 0x2c + .byte 0x3f, 0x30, 0x2b + .byte 0x30, 0x21, 0x1d + .byte 0x01, 0x25, 0x32 + .byte 0x05, 0x23, 0x34 + .byte 0x24, 0x10, 0x30 + .byte 0x3d, 0x14, 0x1b + .byte 0x3f, 0x38, 0x2f + .byte 0x22, 0x1b, 0x32 + .byte 0x25, 0x07, 0x37 + .byte 0x0a, 0x0c, 0x1d + .byte 0x03, 0x1e, 0x1a + .byte 0x0f, 0x3c, 0x12 + .byte 0x11, 0x18, 0x1d + .byte 0x00, 0x35, 0x2f + .byte 0x32, 0x18, 0x14 + .byte 0x23, 0x30, 0x1b + .byte 0x11, 0x3d, 0x12 + .byte 0x1a, 0x16, 0x35 + .byte 0x28, 0x05, 0x24 + .byte 0x17, 0x3d, 0x37 + .byte 0x2e, 0x09, 0x2e + .byte 0x18, 0x1d, 0x17 + .byte 0x20, 0x1f, 0x18 + .byte 0x23, 0x2c, 0x2f + .byte 0x20, 0x3f, 0x16 + .byte 0x3f, 0x29, 0x2e + .byte 0x23, 0x3b, 0x29 + .byte 0x18, 0x39, 0x13 + .byte 0x1e, 0x32, 0x35 + .byte 0x14, 0x1d, 0x2a + .byte 0x35, 0x01, 0x1d + .byte 0x3e, 0x3b, 0x1e + .byte 0x22, 0x1e, 0x16 + .byte 0x18, 0x22, 0x12 + .byte 0x3e, 0x29, 0x33 + .byte 0x2f, 0x14, 0x19 + .byte 0x3b, 0x07, 0x15 + .byte 0x06, 0x3d, 0x29 + .byte 0x35, 0x37, 0x23 + .byte 0x34, 0x1d, 0x2d + .byte 0x18, 0x12, 0x1b + .byte 0x0b, 0x13, 0x24 + .byte 0x13, 0x38, 0x1c + .byte 0x1f, 0x0b, 0x1b + .byte 0x13, 0x21, 0x1c + .byte 0x06, 0x39, 0x32 + .byte 0x37, 0x3d, 0x26 + .byte 0x29, 0x26, 0x15 + .byte 0x3c, 0x33, 0x27 + .byte 0x00, 0x01, 0x2e + .byte 0x15, 0x18, 0x31 + .byte 0x0d, 0x2c, 0x13 + .byte 0x27, 0x3b, 0x20 + .byte 0x2d, 0x01, 0x26 + .byte 0x23, 0x15, 0x30 + .byte 0x24, 0x00, 0x17 + .byte 0x37, 0x3f, 0x33 + .byte 0x25, 0x24, 0x31 + .byte 0x06, 0x3b, 0x37 + .byte 0x03, 0x18, 0x1a + .byte 0x2c, 0x34, 0x14 + .byte 0x1d, 0x36, 0x18 + .byte 0x3a, 0x04, 0x23 + .byte 0x12, 0x26, 0x15 + .byte 0x2b, 0x19, 0x1a + .byte 0x29, 0x2c, 0x36 + .byte 0x01, 0x19, 0x1d + .byte 0x2f, 0x06, 0x2b + .byte 0x0c, 0x12, 0x26 + .byte 0x36, 0x32, 0x1d + .byte 0x0d, 0x12, 0x28 + .byte 0x03, 0x28, 0x13 + .byte 0x29, 0x06, 0x17 + .byte 0x03, 0x38, 0x21 + .byte 0x30, 0x2c, 0x10 + .byte 0x22, 0x00, 0x28 + .byte 0x24, 0x3b, 0x1c + .byte 0x20, 0x3e, 0x13 + .byte 0x02, 0x0c, 0x19 + .byte 0x29, 0x2c, 0x1a + .byte 0x39, 0x30, 0x22 + .byte 0x2a, 0x1f, 0x22 + .byte 0x14, 0x34, 0x2c + .byte 0x14, 0x25, 0x1b + .byte 0x06, 0x3b, 0x15 + .byte 0x06, 0x1c, 0x13 + .byte 0x15, 0x03, 0x18 + .byte 0x1e, 0x2a, 0x1b + .byte 0x17, 0x25, 0x2f + .byte 0x1c, 0x29, 0x2e + .byte 0x02, 0x32, 0x1e + .byte 0x1d, 0x28, 0x35 + .byte 0x36, 0x03, 0x34 + .byte 0x16, 0x3d, 0x2a + .byte 0x12, 0x0d, 0x13 + .byte 0x1d, 0x2d, 0x21 + .byte 0x32, 0x17, 0x2e + .byte 0x1a, 0x15, 0x26 + .byte 0x22, 0x2f, 0x15 + .byte 0x3c, 0x0e, 0x20 + .byte 0x2f, 0x27, 0x13 + .byte 0x04, 0x09, 0x32 + .byte 0x1e, 0x01, 0x34 + .byte 0x06, 0x16, 0x1e + .byte 0x2e, 0x1b, 0x1c + .byte 0x28, 0x13, 0x2a + .byte 0x30, 0x34, 0x12 + .byte 0x12, 0x32, 0x18 + .byte 0x1d, 0x1d, 0x35 + .byte 0x07, 0x1c, 0x16 + .byte 0x2d, 0x3d, 0x35 + .byte 0x1c, 0x1b, 0x24 + .byte 0x21, 0x2d, 0x1e + .byte 0x10, 0x09, 0x14 + .byte 0x3d, 0x11, 0x12 + .byte 0x25, 0x02, 0x26 + .byte 0x23, 0x02, 0x19 + .byte 0x19, 0x05, 0x14 + .byte 0x0b, 0x21, 0x1a + .byte 0x09, 0x02, 0x2c + .byte 0x18, 0x28, 0x2d + .byte 0x1e, 0x10, 0x12 + .byte 0x2e, 0x18, 0x2e + .byte 0x1f, 0x02, 0x2c + .byte 0x14, 0x17, 0x24 + .byte 0x39, 0x08, 0x32 + .byte 0x16, 0x14, 0x22 + .byte 0x16, 0x28, 0x21 + .byte 0x11, 0x10, 0x2c + .byte 0x23, 0x36, 0x2b + .byte 0x39, 0x21, 0x26 + .byte 0x0e, 0x06, 0x2d + .byte 0x3c, 0x3e, 0x26 + .byte 0x2a, 0x1b, 0x1f + .byte 0x00, 0x3c, 0x33 + .byte 0x35, 0x3f, 0x14 + .byte 0x00, 0x0b, 0x10 + .byte 0x34, 0x3c, 0x17 + .byte 0x2d, 0x07, 0x1f + .byte 0x24, 0x39, 0x27 + .byte 0x16, 0x00, 0x1d + .byte 0x33, 0x2b, 0x1e + .byte 0x0f, 0x08, 0x31 + .byte 0x3a, 0x09, 0x13 + .byte 0x0c, 0x21, 0x1c + .byte 0x2a, 0x17, 0x34 + .byte 0x29, 0x27, 0x10 + .byte 0x37, 0x1b, 0x18 + .byte 0x15, 0x08, 0x2f + .byte 0x1f, 0x16, 0x12 + .byte 0x1f, 0x28, 0x34 + .byte 0x1c, 0x20, 0x22 + .byte 0x12, 0x01, 0x12 + .byte 0x21, 0x31, 0x10 + .byte 0x22, 0x26, 0x1e + .byte 0x01, 0x3d, 0x11 + .byte 0x1e, 0x27, 0x25 + .byte 0x3d, 0x30, 0x24 + .byte 0x1d, 0x11, 0x22 + .byte 0x36, 0x30, 0x16 + .byte 0x1f, 0x3e, 0x2a + .byte 0x3c, 0x27, 0x1b + .byte 0x1f, 0x29, 0x10 + .byte 0x1e, 0x05, 0x2a + .byte 0x0a, 0x10, 0x14 + .byte 0x1f, 0x00, 0x2e + .byte 0x0b, 0x3b, 0x18 + .byte 0x0a, 0x39, 0x30 + .byte 0x37, 0x0b, 0x1f + .byte 0x1d, 0x0a, 0x29 + .byte 0x3e, 0x1c, 0x33 + .byte 0x13, 0x2e, 0x28 + .byte 0x27, 0x1b, 0x1e + .byte 0x1d, 0x02, 0x1c + .byte 0x01, 0x25, 0x14 + .byte 0x3a, 0x10, 0x1c + .byte 0x12, 0x05, 0x2a + .byte 0x30, 0x20, 0x26 + .byte 0x2f, 0x2e, 0x2e + .byte 0x03, 0x07, 0x24 + .byte 0x36, 0x04, 0x2b + .byte 0x11, 0x25, 0x2d + .byte 0x28, 0x0e, 0x2e + .byte 0x0f, 0x1d, 0x15 + .byte 0x1c, 0x28, 0x30 + .byte 0x1f, 0x23, 0x26 + .byte 0x36, 0x12, 0x37 + .byte 0x3a, 0x31, 0x10 + .byte 0x2c, 0x2c, 0x2f + .byte 0x1a, 0x0d, 0x15 + .byte 0x3f, 0x3c, 0x32 + .byte 0x35, 0x1c, 0x16 + .byte 0x33, 0x16, 0x28 + .byte 0x1d, 0x3f, 0x21 + .byte 0x2c, 0x3e, 0x2b + .byte 0x24, 0x23, 0x2f + .byte 0x32, 0x15, 0x2a + .byte 0x1b, 0x10, 0x35 + .byte 0x18, 0x37, 0x10 + .byte 0x3b, 0x1e, 0x11 + .byte 0x2b, 0x16, 0x24 + .byte 0x1d, 0x16, 0x26 + .byte 0x3c, 0x2d, 0x11 + .byte 0x15, 0x28, 0x28 + .byte 0x27, 0x27, 0x27 + .byte 0x3b, 0x3a, 0x16 + .byte 0x1a, 0x0c, 0x1a + .byte 0x15, 0x08, 0x25 + .byte 0x0b, 0x10, 0x22 + .byte 0x1a, 0x3e, 0x17 + .byte 0x28, 0x1f, 0x1e + .byte 0x01, 0x1e, 0x1e + .byte 0x1c, 0x2f, 0x10 + .byte 0x25, 0x0b, 0x34 + .byte 0x3e, 0x0c, 0x1a + .byte 0x1b, 0x10, 0x2a + .byte 0x0f, 0x14, 0x17 + .byte 0x0f, 0x3f, 0x17 + .byte 0x03, 0x15, 0x1f + .byte 0x02, 0x36, 0x17 + .byte 0x15, 0x1d, 0x18 + .byte 0x08, 0x36, 0x10 + .byte 0x14, 0x0d, 0x2b + .byte 0x0a, 0x05, 0x1d + .byte 0x26, 0x12, 0x1e + .byte 0x3e, 0x18, 0x19 + .byte 0x36, 0x18, 0x37 + .byte 0x17, 0x39, 0x2e + .byte 0x0d, 0x04, 0x19 + .byte 0x16, 0x22, 0x15 + .byte 0x3e, 0x26, 0x1f + .byte 0x00, 0x06, 0x17 + .byte 0x33, 0x22, 0x1d + .byte 0x2b, 0x39, 0x2b + .byte 0x3e, 0x31, 0x1c + .byte 0x22, 0x3f, 0x13 + .byte 0x30, 0x1c, 0x31 + .byte 0x07, 0x2b, 0x14 + .byte 0x32, 0x35, 0x1e + .byte 0x02, 0x07, 0x20 + .byte 0x0f, 0x3b, 0x11 + .byte 0x20, 0x07, 0x12 + .byte 0x2a, 0x30, 0x1d + .byte 0x28, 0x38, 0x36 + .byte 0x20, 0x01, 0x17 + .byte 0x15, 0x20, 0x21 + .byte 0x3a, 0x1b, 0x1e + .byte 0x38, 0x12, 0x24 + .byte 0x03, 0x3e, 0x1f + .byte 0x29, 0x1d, 0x13 + .byte 0x20, 0x27, 0x19 + .byte 0x12, 0x25, 0x20 + .byte 0x32, 0x33, 0x2b + .byte 0x3f, 0x05, 0x31 + .byte 0x35, 0x3c, 0x2d + .byte 0x2d, 0x02, 0x2e + .byte 0x10, 0x2a, 0x16 + .byte 0x17, 0x08, 0x31 + .byte 0x17, 0x2e, 0x2b + .byte 0x30, 0x1e, 0x15 + .byte 0x31, 0x15, 0x26 + .byte 0x08, 0x10, 0x33 + .byte 0x15, 0x01, 0x27 + .byte 0x12, 0x07, 0x2f + .byte 0x29, 0x27, 0x34 + .byte 0x3f, 0x08, 0x31 + .byte 0x1c, 0x20, 0x1a + .byte 0x33, 0x0c, 0x13 + .byte 0x18, 0x31, 0x24 + .byte 0x37, 0x2d, 0x2e + .byte 0x21, 0x18, 0x24 + .byte 0x3a, 0x27, 0x31 + .byte 0x35, 0x3e, 0x30 + .byte 0x3a, 0x14, 0x33 + .byte 0x0f, 0x1a, 0x2d + .byte 0x30, 0x2e, 0x11 + .byte 0x1a, 0x31, 0x1d + .byte 0x17, 0x3c, 0x18 + .byte 0x33, 0x31, 0x23 + .byte 0x1d, 0x39, 0x2d + .byte 0x10, 0x1d, 0x2f + .byte 0x24, 0x15, 0x1c + .byte 0x25, 0x01, 0x2b + .byte 0x22, 0x16, 0x2e + .byte 0x1b, 0x25, 0x35 + .byte 0x37, 0x10, 0x26 + .byte 0x39, 0x01, 0x36 + .byte 0x17, 0x2b, 0x14 + .byte 0x09, 0x16, 0x17 + .byte 0x20, 0x28, 0x23 + .byte 0x26, 0x3a, 0x26 + .byte 0x27, 0x2a, 0x24 + .byte 0x36, 0x02, 0x2c + .byte 0x29, 0x30, 0x35 + .byte 0x36, 0x01, 0x1f + .byte 0x28, 0x3b, 0x1d + .byte 0x23, 0x1e, 0x2d + .byte 0x11, 0x1e, 0x2c + .byte 0x2f, 0x32, 0x19 + .byte 0x3f, 0x26, 0x31 + .byte 0x38, 0x1e, 0x17 + .byte 0x05, 0x18, 0x2e + .byte 0x00, 0x2e, 0x12 + .byte 0x34, 0x3f, 0x34 + .byte 0x16, 0x10, 0x29 + .byte 0x20, 0x3d, 0x36 + .byte 0x2f, 0x16, 0x25 + .byte 0x12, 0x17, 0x10 + .byte 0x21, 0x37, 0x35 + .byte 0x25, 0x37, 0x2d + .byte 0x01, 0x08, 0x27 + .byte 0x03, 0x1f, 0x29 + .byte 0x0d, 0x2a, 0x16 + .byte 0x3a, 0x3f, 0x33 + .byte 0x2b, 0x19, 0x1d + .byte 0x2a, 0x1f, 0x29 + .byte 0x28, 0x2c, 0x10 + .byte 0x28, 0x30, 0x10 + .byte 0x39, 0x14, 0x1b + .byte 0x00, 0x18, 0x21 + .byte 0x28, 0x0c, 0x37 + .byte 0x11, 0x10, 0x11 + .byte 0x3c, 0x33, 0x32 + .byte 0x33, 0x36, 0x1a + .byte 0x36, 0x00, 0x1c + .byte 0x31, 0x1b, 0x1d + .byte 0x38, 0x1d, 0x10 + .byte 0x3c, 0x39, 0x27 + .byte 0x3a, 0x3f, 0x14 + .byte 0x19, 0x12, 0x14 + .byte 0x0d, 0x1f, 0x18 + .byte 0x00, 0x25, 0x18 + .byte 0x28, 0x1c, 0x32 + .byte 0x27, 0x03, 0x1a + .byte 0x26, 0x2d, 0x2a + .byte 0x29, 0x28, 0x27 + .byte 0x0a, 0x2a, 0x18 + .byte 0x0a, 0x1a, 0x30 + .byte 0x20, 0x1a, 0x2e + .byte 0x06, 0x0b, 0x1d + .byte 0x0f, 0x0c, 0x1c + .byte 0x35, 0x28, 0x1c + .byte 0x3d, 0x16, 0x23 + .byte 0x21, 0x1c, 0x31 + .byte 0x14, 0x1c, 0x2e + .byte 0x22, 0x32, 0x35 + .byte 0x09, 0x29, 0x30 + .byte 0x20, 0x1a, 0x10 + .byte 0x31, 0x3f, 0x2c + .byte 0x0a, 0x3d, 0x37 + .byte 0x0b, 0x2e, 0x2d + .byte 0x1f, 0x22, 0x31 + .byte 0x06, 0x07, 0x29 + .byte 0x22, 0x17, 0x2d + .byte 0x30, 0x11, 0x18 + .byte 0x0c, 0x19, 0x15 + .byte 0x07, 0x0a, 0x34 + .byte 0x18, 0x29, 0x27 + .byte 0x33, 0x0c, 0x30 + .byte 0x03, 0x1a, 0x37 + .byte 0x06, 0x01, 0x2d + .byte 0x0f, 0x3b, 0x2b + .byte 0x11, 0x1f, 0x37 + .byte 0x2b, 0x21, 0x36 + .byte 0x3f, 0x23, 0x17 + .byte 0x17, 0x07, 0x2b + .byte 0x2b, 0x0e, 0x30 + .byte 0x11, 0x39, 0x1d + .byte 0x29, 0x03, 0x33 + .byte 0x30, 0x03, 0x2f + .byte 0x3c, 0x20, 0x26 + .byte 0x03, 0x22, 0x14 + .byte 0x3a, 0x28, 0x35 + .byte 0x01, 0x28, 0x2b + .byte 0x3e, 0x15, 0x18 + .byte 0x30, 0x07, 0x17 + .byte 0x3b, 0x2c, 0x30 + .byte 0x15, 0x07, 0x2c + .byte 0x17, 0x27, 0x1d + .byte 0x3f, 0x1e, 0x33 + .byte 0x0d, 0x17, 0x10 + .byte 0x15, 0x0e, 0x30 + .byte 0x09, 0x05, 0x30 + .byte 0x2d, 0x20, 0x15 + .byte 0x3c, 0x3d, 0x30 + .byte 0x0c, 0x17, 0x1c + .byte 0x1a, 0x0d, 0x25 + .byte 0x2b, 0x2b, 0x2a + .byte 0x02, 0x16, 0x2d + .byte 0x17, 0x31, 0x17 + .byte 0x00, 0x08, 0x13 + .byte 0x37, 0x35, 0x21 + .byte 0x1e, 0x1c, 0x1f + .byte 0x2b, 0x32, 0x1c + .byte 0x10, 0x2a, 0x16 + .byte 0x3a, 0x33, 0x31 + .byte 0x17, 0x2b, 0x2a + .byte 0x0c, 0x3d, 0x11 + .byte 0x28, 0x0a, 0x30 + .byte 0x23, 0x0a, 0x26 + .byte 0x0a, 0x14, 0x24 + .byte 0x0b, 0x0f, 0x30 + .byte 0x1b, 0x1e, 0x29 + .byte 0x02, 0x35, 0x28 + .byte 0x3b, 0x02, 0x14 + .byte 0x00, 0x0f, 0x35 + .byte 0x1c, 0x3c, 0x2e + .byte 0x28, 0x38, 0x19 + .byte 0x1b, 0x11, 0x12 + .byte 0x09, 0x16, 0x10 + .byte 0x2e, 0x0d, 0x20 + .byte 0x3d, 0x04, 0x32 + .byte 0x16, 0x2c, 0x25 + .byte 0x02, 0x3d, 0x18 + .byte 0x0b, 0x13, 0x1c + .byte 0x22, 0x2a, 0x1c + .byte 0x20, 0x27, 0x22 + .byte 0x05, 0x26, 0x22 + .byte 0x12, 0x1d, 0x2c + .byte 0x08, 0x05, 0x2e + .byte 0x3f, 0x1c, 0x17 + .byte 0x24, 0x0d, 0x33 + .byte 0x36, 0x08, 0x24 + .byte 0x10, 0x22, 0x29 + .byte 0x1c, 0x0a, 0x11 + .byte 0x25, 0x0f, 0x10 + .byte 0x24, 0x38, 0x2f + .byte 0x25, 0x32, 0x1e + .byte 0x06, 0x2a, 0x29 + .byte 0x3e, 0x3a, 0x28 + .byte 0x34, 0x17, 0x33 + .byte 0x18, 0x33, 0x17 + .byte 0x07, 0x14, 0x1f + .byte 0x11, 0x17, 0x20 + .byte 0x13, 0x0e, 0x14 + .byte 0x3b, 0x1c, 0x12 + .byte 0x2a, 0x13, 0x37 + .byte 0x2a, 0x35, 0x32 + .byte 0x30, 0x02, 0x25 + .byte 0x00, 0x07, 0x1f + .byte 0x0c, 0x04, 0x2c + .byte 0x37, 0x37, 0x30 + .byte 0x25, 0x12, 0x25 + .byte 0x12, 0x22, 0x21 + .byte 0x22, 0x35, 0x33 + .byte 0x07, 0x20, 0x2d + .byte 0x27, 0x0e, 0x30 + .byte 0x34, 0x19, 0x1a + .byte 0x0a, 0x3c, 0x25 + .byte 0x07, 0x1d, 0x2b + .byte 0x31, 0x3a, 0x12 + .byte 0x1a, 0x3d, 0x37 + .byte 0x16, 0x15, 0x16 + .byte 0x39, 0x13, 0x15 + .byte 0x2d, 0x03, 0x2e + .byte 0x06, 0x39, 0x2c + .byte 0x16, 0x00, 0x13 + .byte 0x35, 0x2a, 0x35 + .byte 0x24, 0x01, 0x18 + .byte 0x24, 0x37, 0x28 + .byte 0x25, 0x1b, 0x34 + .byte 0x25, 0x19, 0x17 + .byte 0x27, 0x2f, 0x1b + .byte 0x27, 0x0d, 0x10 + .byte 0x36, 0x3c, 0x30 + .byte 0x3c, 0x33, 0x23 + .byte 0x3e, 0x27, 0x1e + .byte 0x25, 0x2d, 0x29 + .byte 0x1f, 0x12, 0x21 + .byte 0x37, 0x32, 0x1f + .byte 0x11, 0x21, 0x35 + .byte 0x30, 0x0c, 0x19 + .byte 0x25, 0x3d, 0x26 + .byte 0x17, 0x02, 0x1d + .byte 0x14, 0x2e, 0x11 + .byte 0x38, 0x13, 0x30 + .byte 0x0a, 0x2b, 0x20 + .byte 0x1e, 0x10, 0x15 + .byte 0x37, 0x30, 0x2e + .byte 0x1e, 0x04, 0x2c + .byte 0x14, 0x34, 0x19 + .byte 0x08, 0x14, 0x18 + .byte 0x0e, 0x1c, 0x30 + .byte 0x1a, 0x2e, 0x1b + .byte 0x1f, 0x39, 0x31 + .byte 0x0c, 0x1c, 0x28 + .byte 0x3e, 0x33, 0x23 + .byte 0x0f, 0x13, 0x16 + .byte 0x25, 0x39, 0x2f + .byte 0x14, 0x1b, 0x1a + .byte 0x28, 0x3e, 0x21 + .byte 0x2d, 0x19, 0x11 + .byte 0x0c, 0x34, 0x32 + .byte 0x39, 0x31, 0x19 + .byte 0x1a, 0x08, 0x34 + .byte 0x09, 0x2f, 0x11 + .byte 0x30, 0x04, 0x1c + .byte 0x02, 0x3b, 0x1b + .byte 0x33, 0x21, 0x33 + .byte 0x38, 0x02, 0x1a + .byte 0x31, 0x38, 0x32 + .byte 0x1f, 0x1d, 0x16 + .byte 0x17, 0x10, 0x1b + .byte 0x32, 0x20, 0x17 + .byte 0x00, 0x33, 0x12 + .byte 0x21, 0x0f, 0x27 + .byte 0x14, 0x19, 0x27 + .byte 0x24, 0x2c, 0x37 + .byte 0x25, 0x05, 0x2f + .byte 0x3d, 0x25, 0x11 + .byte 0x12, 0x30, 0x1a + .byte 0x16, 0x03, 0x1a + .byte 0x14, 0x09, 0x13 + .byte 0x02, 0x23, 0x22 + .byte 0x01, 0x3c, 0x10 + .byte 0x3f, 0x2d, 0x23 + .byte 0x31, 0x3f, 0x23 + .byte 0x17, 0x00, 0x33 + .byte 0x3f, 0x0f, 0x2f + .byte 0x26, 0x07, 0x15 + .byte 0x21, 0x2b, 0x2a + .byte 0x38, 0x39, 0x1e + .byte 0x09, 0x25, 0x2b + .byte 0x3b, 0x30, 0x25 + .byte 0x12, 0x2d, 0x13 + .byte 0x32, 0x19, 0x28 + .byte 0x24, 0x1c, 0x2d + .byte 0x35, 0x32, 0x26 + .byte 0x0d, 0x23, 0x1e + .byte 0x1d, 0x07, 0x21 + .byte 0x0b, 0x34, 0x17 + .byte 0x2d, 0x32, 0x32 + .byte 0x3a, 0x3c, 0x35 + .byte 0x1a, 0x10, 0x33 + .byte 0x1a, 0x07, 0x22 + .byte 0x3b, 0x1b, 0x2a + .byte 0x33, 0x1f, 0x26 + .byte 0x0e, 0x35, 0x1a + .byte 0x3b, 0x0a, 0x1c + .byte 0x11, 0x07, 0x11 + .byte 0x0d, 0x3c, 0x2d + .byte 0x1e, 0x37, 0x29 + .byte 0x11, 0x05, 0x12 + .byte 0x15, 0x2f, 0x1c + .byte 0x24, 0x31, 0x16 + .byte 0x2b, 0x21, 0x1b + .byte 0x23, 0x10, 0x31 + .byte 0x02, 0x14, 0x29 + .byte 0x26, 0x20, 0x16 + .byte 0x10, 0x17, 0x10 + .byte 0x0b, 0x0f, 0x33 + .byte 0x01, 0x2e, 0x14 + .byte 0x21, 0x0e, 0x37 + .byte 0x1a, 0x1d, 0x2f + .byte 0x1e, 0x30, 0x24 + .byte 0x04, 0x14, 0x2d + .byte 0x11, 0x00, 0x30 + .byte 0x08, 0x2a, 0x1d + .byte 0x1d, 0x22, 0x21 + .byte 0x24, 0x2c, 0x37 + .byte 0x24, 0x11, 0x12 + .byte 0x04, 0x2e, 0x28 + .byte 0x1d, 0x18, 0x23 + .byte 0x3c, 0x16, 0x16 + .byte 0x10, 0x17, 0x31 + .byte 0x20, 0x21, 0x12 + .byte 0x33, 0x3e, 0x34 + .byte 0x06, 0x13, 0x13 + .byte 0x17, 0x38, 0x2b + .byte 0x14, 0x0d, 0x15 + .byte 0x24, 0x3b, 0x2b + .byte 0x34, 0x3b, 0x1e + .byte 0x18, 0x07, 0x34 + .byte 0x37, 0x1d, 0x1f + .byte 0x0b, 0x29, 0x20 + .byte 0x12, 0x1e, 0x1d + .byte 0x1a, 0x24, 0x24 + .byte 0x3d, 0x28, 0x24 + .byte 0x0b, 0x12, 0x33 + .byte 0x1b, 0x3a, 0x22 + .byte 0x14, 0x13, 0x2a + .byte 0x31, 0x38, 0x15 + .byte 0x37, 0x2b, 0x2e + .byte 0x19, 0x1e, 0x2c + .byte 0x3f, 0x1b, 0x2a + .byte 0x33, 0x1f, 0x33 + .byte 0x3f, 0x15, 0x29 + .byte 0x01, 0x1e, 0x18 + .byte 0x1f, 0x22, 0x19 + .byte 0x33, 0x3c, 0x34 + .byte 0x1e, 0x12, 0x22 + .byte 0x0d, 0x37, 0x2c + .byte 0x0f, 0x08, 0x31 + .byte 0x2e, 0x09, 0x36 + .byte 0x01, 0x05, 0x1e + .byte 0x1c, 0x04, 0x1e + .byte 0x0c, 0x01, 0x1c + .byte 0x29, 0x28, 0x2f + .byte 0x39, 0x2d, 0x14 + .byte 0x09, 0x22, 0x36 + .byte 0x04, 0x37, 0x37 + .byte 0x2d, 0x2f, 0x35 + .byte 0x24, 0x23, 0x1b + .byte 0x08, 0x20, 0x32 + .byte 0x20, 0x1f, 0x34 + .byte 0x02, 0x31, 0x19 + .byte 0x18, 0x13, 0x36 + .byte 0x06, 0x2b, 0x1e + .byte 0x0e, 0x1b, 0x10 + .byte 0x2f, 0x0e, 0x1c + .byte 0x11, 0x38, 0x13 + .byte 0x01, 0x37, 0x19 + .byte 0x14, 0x11, 0x26 + .byte 0x31, 0x3d, 0x33 + .byte 0x1d, 0x1b, 0x34 + .byte 0x25, 0x31, 0x2f + .byte 0x11, 0x0a, 0x2f + .byte 0x39, 0x17, 0x1b + .byte 0x05, 0x0e, 0x13 + .byte 0x29, 0x25, 0x22 + .byte 0x15, 0x0d, 0x20 + .byte 0x2b, 0x27, 0x21 + .byte 0x3e, 0x24, 0x27 + .byte 0x2a, 0x2b, 0x16 + .byte 0x24, 0x3d, 0x15 + .byte 0x15, 0x30, 0x31 + .byte 0x0f, 0x33, 0x24 + .byte 0x06, 0x16, 0x13 + .byte 0x06, 0x31, 0x10 + .byte 0x2e, 0x3f, 0x10 + .byte 0x05, 0x0d, 0x2f + .byte 0x3c, 0x1f, 0x19 + .byte 0x12, 0x13, 0x24 + .byte 0x0f, 0x33, 0x36 + .byte 0x15, 0x3b, 0x33 + .byte 0x03, 0x0f, 0x2a + .byte 0x3b, 0x3c, 0x2c + .byte 0x36, 0x09, 0x29 + .byte 0x11, 0x3b, 0x27 + .byte 0x28, 0x2b, 0x31 + .byte 0x1a, 0x0e, 0x2f + .byte 0x39, 0x2c, 0x31 + .byte 0x0e, 0x3c, 0x35 + .byte 0x2c, 0x24, 0x33 + .byte 0x3d, 0x11, 0x2b + .byte 0x07, 0x3c, 0x37 + .byte 0x14, 0x18, 0x13 + .byte 0x1d, 0x3f, 0x2e + .byte 0x30, 0x12, 0x25 + .byte 0x26, 0x1d, 0x11 + .byte 0x07, 0x11, 0x1e + .byte 0x34, 0x01, 0x11 + .byte 0x0b, 0x39, 0x21 + .byte 0x29, 0x02, 0x29 + .byte 0x15, 0x10, 0x1a + .byte 0x30, 0x1f, 0x35 + .byte 0x3c, 0x2b, 0x2a + .byte 0x30, 0x3b, 0x36 + .byte 0x20, 0x1a, 0x23 + .byte 0x32, 0x24, 0x2b + .byte 0x15, 0x20, 0x1c + .byte 0x25, 0x3d, 0x36 + .byte 0x2d, 0x14, 0x31 + .byte 0x18, 0x23, 0x17 + .byte 0x18, 0x05, 0x13 + .byte 0x34, 0x30, 0x37 + .byte 0x0e, 0x39, 0x23 + .byte 0x1d, 0x1f, 0x17 + .byte 0x01, 0x15, 0x2f + .byte 0x0b, 0x3e, 0x1b + .byte 0x0d, 0x19, 0x2e + .byte 0x31, 0x38, 0x1c + .byte 0x15, 0x34, 0x15 + .byte 0x13, 0x19, 0x29 + .byte 0x19, 0x14, 0x27 + .byte 0x15, 0x18, 0x23 + .byte 0x29, 0x0c, 0x27 + .byte 0x2d, 0x0e, 0x17 + .byte 0x34, 0x18, 0x10 + .byte 0x3b, 0x1e, 0x29 + .byte 0x34, 0x2c, 0x22 + .byte 0x31, 0x08, 0x13 + .byte 0x1d, 0x18, 0x1a + .byte 0x1c, 0x0b, 0x2a + .byte 0x19, 0x1e, 0x1a + .byte 0x23, 0x27, 0x17 + .byte 0x3b, 0x0e, 0x37 + .byte 0x19, 0x2b, 0x16 + .byte 0x2f, 0x08, 0x21 + .byte 0x37, 0x02, 0x20 + .byte 0x0b, 0x32, 0x30 + .byte 0x16, 0x05, 0x30 + .byte 0x13, 0x05, 0x1a + .byte 0x07, 0x39, 0x19 + .byte 0x0c, 0x3b, 0x2a + .byte 0x15, 0x05, 0x30 + .byte 0x30, 0x05, 0x19 + .byte 0x13, 0x00, 0x12 + .byte 0x27, 0x16, 0x2a + .byte 0x0f, 0x28, 0x27 + .byte 0x0c, 0x23, 0x2f + .byte 0x39, 0x28, 0x2a + .byte 0x24, 0x25, 0x1f + .byte 0x18, 0x29, 0x14 + .byte 0x16, 0x05, 0x1a + .byte 0x35, 0x2f, 0x26 + .byte 0x0a, 0x3a, 0x29 + .byte 0x34, 0x2c, 0x36 + .byte 0x2e, 0x3a, 0x15 + .byte 0x1a, 0x0a, 0x2d + .byte 0x16, 0x14, 0x2e + .byte 0x35, 0x28, 0x2a + .byte 0x35, 0x0f, 0x11 + .byte 0x11, 0x32, 0x19 + .byte 0x20, 0x1a, 0x28 + .byte 0x17, 0x1a, 0x28 + .byte 0x16, 0x33, 0x25 + .byte 0x13, 0x2c, 0x29 + .byte 0x09, 0x16, 0x33 + .byte 0x1d, 0x27, 0x26 + .byte 0x15, 0x0c, 0x2f + .byte 0x22, 0x1c, 0x19 + .byte 0x29, 0x33, 0x10 + .byte 0x2d, 0x11, 0x1b + .byte 0x16, 0x19, 0x2e + .byte 0x0d, 0x0c, 0x28 + .byte 0x37, 0x3a, 0x34 + .byte 0x2a, 0x1d, 0x37 + .byte 0x30, 0x0a, 0x36 + .byte 0x24, 0x39, 0x1b + .byte 0x39, 0x0a, 0x32 + .byte 0x11, 0x03, 0x2d + .byte 0x32, 0x1d, 0x30 + .byte 0x38, 0x1e, 0x27 + .byte 0x2e, 0x17, 0x18 + .byte 0x16, 0x17, 0x2a + .byte 0x36, 0x3b, 0x31 + .byte 0x17, 0x04, 0x19 + .byte 0x3a, 0x25, 0x2d + .byte 0x00, 0x36, 0x27 + .byte 0x25, 0x12, 0x33 + .byte 0x06, 0x0a, 0x14 + .byte 0x11, 0x05, 0x2f + .byte 0x03, 0x35, 0x2f + .byte 0x0b, 0x34, 0x29 + .byte 0x00, 0x31, 0x13 + .byte 0x27, 0x0f, 0x1c + .byte 0x1d, 0x06, 0x2d + .byte 0x1c, 0x30, 0x27 + .byte 0x2f, 0x2a, 0x27 + .byte 0x16, 0x20, 0x31 + .byte 0x33, 0x2b, 0x2b + .byte 0x05, 0x30, 0x36 + .byte 0x29, 0x23, 0x35 + .byte 0x10, 0x16, 0x2f + .byte 0x2d, 0x20, 0x29 + .byte 0x37, 0x13, 0x24 + .byte 0x2d, 0x0e, 0x25 + .byte 0x08, 0x0a, 0x18 + .byte 0x0f, 0x03, 0x1b + .byte 0x31, 0x0c, 0x37 + .byte 0x1e, 0x34, 0x31 + .byte 0x1b, 0x0e, 0x25 + .byte 0x1a, 0x07, 0x34 + .byte 0x0d, 0x3c, 0x33 + .byte 0x00, 0x3a, 0x36 + .byte 0x04, 0x27, 0x12 + .byte 0x23, 0x18, 0x24 + .byte 0x0d, 0x0b, 0x18 + .byte 0x31, 0x32, 0x37 + .byte 0x00, 0x0d, 0x21 + .byte 0x32, 0x10, 0x12 + .byte 0x26, 0x0d, 0x19 + .byte 0x29, 0x24, 0x2b + .byte 0x3d, 0x21, 0x1f + .byte 0x1e, 0x1b, 0x28 + .byte 0x0d, 0x12, 0x28 + .byte 0x35, 0x1e, 0x23 + .byte 0x0a, 0x2e, 0x22 + .byte 0x27, 0x27, 0x35 + .byte 0x01, 0x0e, 0x20 + .byte 0x31, 0x39, 0x29 + .byte 0x3b, 0x24, 0x36 + .byte 0x14, 0x10, 0x33 + .byte 0x18, 0x2c, 0x26 + .byte 0x04, 0x2d, 0x15 + .byte 0x1a, 0x11, 0x37 + .byte 0x0f, 0x0b, 0x14 + .byte 0x0e, 0x2c, 0x2c + .byte 0x21, 0x17, 0x2c + .byte 0x16, 0x21, 0x35 + .byte 0x3e, 0x10, 0x10 + .byte 0x0a, 0x05, 0x1e + .byte 0x3b, 0x09, 0x13 + .byte 0x26, 0x18, 0x1e + .byte 0x23, 0x0c, 0x1a + .byte 0x33, 0x37, 0x1f + .byte 0x09, 0x12, 0x35 + .byte 0x3d, 0x0d, 0x15 + .byte 0x36, 0x06, 0x24 + .byte 0x33, 0x30, 0x29 + .byte 0x3b, 0x0f, 0x28 + .byte 0x34, 0x2a, 0x2c + .byte 0x02, 0x12, 0x35 + .byte 0x09, 0x22, 0x31 + .byte 0x3b, 0x31, 0x1c + .byte 0x33, 0x22, 0x27 + .byte 0x3d, 0x34, 0x15 + .byte 0x14, 0x22, 0x28 + .byte 0x28, 0x10, 0x1e + .byte 0x21, 0x31, 0x10 + .byte 0x2d, 0x16, 0x21 + .byte 0x1e, 0x05, 0x33 + .byte 0x0f, 0x30, 0x31 + .byte 0x0e, 0x1a, 0x35 + .byte 0x38, 0x2e, 0x28 + .byte 0x26, 0x37, 0x1e + .byte 0x2b, 0x13, 0x33 + .byte 0x1f, 0x1e, 0x37 + .byte 0x0a, 0x28, 0x24 + .byte 0x32, 0x1c, 0x1a + .byte 0x1f, 0x3f, 0x19 + .byte 0x39, 0x39, 0x29 + .byte 0x2c, 0x1b, 0x14 + .byte 0x15, 0x2a, 0x17 + .byte 0x32, 0x0f, 0x21 + .byte 0x30, 0x21, 0x18 + .byte 0x23, 0x2a, 0x27 + .byte 0x3d, 0x07, 0x10 + .byte 0x0b, 0x3f, 0x2f + .byte 0x31, 0x02, 0x2e + .byte 0x08, 0x39, 0x2f + .byte 0x3f, 0x20, 0x18 + .byte 0x2d, 0x34, 0x11 + .byte 0x2e, 0x34, 0x10 + .byte 0x26, 0x12, 0x23 + .byte 0x25, 0x0a, 0x37 + .byte 0x34, 0x09, 0x25 + .byte 0x0a, 0x3e, 0x16 + .byte 0x1a, 0x17, 0x11 + .byte 0x38, 0x1c, 0x20 + .byte 0x11, 0x21, 0x26 + .byte 0x05, 0x0f, 0x18 + .byte 0x26, 0x2b, 0x32 + .byte 0x0a, 0x0c, 0x16 + .byte 0x03, 0x29, 0x1d + .byte 0x29, 0x3b, 0x23 + .byte 0x16, 0x1b, 0x29 + .byte 0x07, 0x09, 0x17 + .byte 0x17, 0x2c, 0x1c + .byte 0x35, 0x33, 0x30 + .byte 0x17, 0x12, 0x1e + .byte 0x3d, 0x1a, 0x2b + .byte 0x21, 0x1d, 0x10 + .byte 0x0a, 0x08, 0x17 + .byte 0x14, 0x3c, 0x36 + .byte 0x28, 0x36, 0x36 + .byte 0x3b, 0x20, 0x1b + .byte 0x13, 0x22, 0x1d + .byte 0x13, 0x3a, 0x15 + .byte 0x02, 0x23, 0x2c + .byte 0x3e, 0x19, 0x14 + .byte 0x39, 0x3c, 0x1a + .byte 0x10, 0x08, 0x1e + .byte 0x0a, 0x13, 0x29 + .byte 0x3f, 0x38, 0x2c + .byte 0x07, 0x23, 0x1f + .byte 0x19, 0x2a, 0x24 + .byte 0x14, 0x3c, 0x1f + .byte 0x0d, 0x04, 0x37 + .byte 0x1a, 0x2f, 0x28 + .byte 0x2a, 0x1d, 0x1e + .byte 0x11, 0x37, 0x29 + .byte 0x28, 0x27, 0x12 + .byte 0x0d, 0x00, 0x26 + .byte 0x0a, 0x3c, 0x26 + .byte 0x1f, 0x1c, 0x33 + .byte 0x04, 0x3a, 0x2c + .byte 0x24, 0x3d, 0x2b + .byte 0x26, 0x31, 0x2f + .byte 0x13, 0x1c, 0x21 + .byte 0x3e, 0x12, 0x23 + .byte 0x36, 0x0a, 0x1a + .byte 0x2d, 0x1e, 0x19 + .byte 0x05, 0x1f, 0x1b + .byte 0x1e, 0x0a, 0x1f + .byte 0x20, 0x08, 0x24 + .byte 0x2c, 0x0c, 0x33 + .byte 0x1d, 0x1f, 0x11 + .byte 0x0e, 0x12, 0x10 + .byte 0x27, 0x12, 0x19 + .byte 0x2a, 0x13, 0x31 + .byte 0x1c, 0x04, 0x30 + .byte 0x1a, 0x38, 0x1f + .byte 0x2c, 0x35, 0x25 + .byte 0x07, 0x0b, 0x33 + .byte 0x2d, 0x02, 0x1a + .byte 0x2a, 0x35, 0x35 + .byte 0x16, 0x2f, 0x14 + .byte 0x11, 0x31, 0x33 + .byte 0x2c, 0x31, 0x1e + .byte 0x3c, 0x3a, 0x27 + .byte 0x3c, 0x2b, 0x12 + .byte 0x27, 0x1d, 0x12 + .byte 0x36, 0x2c, 0x2b + .byte 0x25, 0x3b, 0x35 + .byte 0x12, 0x3d, 0x27 + .byte 0x13, 0x23, 0x19 + .byte 0x33, 0x2c, 0x26 + .byte 0x09, 0x3c, 0x12 + .byte 0x15, 0x1a, 0x23 + .byte 0x21, 0x07, 0x1a + .byte 0x22, 0x25, 0x20 + .byte 0x19, 0x1b, 0x2c + .byte 0x3a, 0x19, 0x35 + .byte 0x05, 0x26, 0x1d + .byte 0x23, 0x22, 0x25 + .byte 0x0e, 0x1e, 0x11 + .byte 0x13, 0x30, 0x12 + .byte 0x2c, 0x22, 0x25 + .byte 0x0a, 0x1d, 0x18 + .byte 0x23, 0x3e, 0x1d + .byte 0x02, 0x28, 0x25 + .byte 0x21, 0x0e, 0x20 + .byte 0x21, 0x22, 0x37 + .byte 0x18, 0x33, 0x27 + .byte 0x23, 0x23, 0x31 + .byte 0x24, 0x1a, 0x1a + .byte 0x3e, 0x25, 0x24 + .byte 0x24, 0x01, 0x18 + .byte 0x34, 0x10, 0x22 + .byte 0x07, 0x00, 0x37 + .byte 0x06, 0x20, 0x20 + .byte 0x3a, 0x02, 0x2b + .byte 0x07, 0x2c, 0x2c + .byte 0x09, 0x2f, 0x2a + .byte 0x01, 0x32, 0x2c + .byte 0x00, 0x35, 0x13 + .byte 0x2b, 0x3c, 0x1f + .byte 0x36, 0x37, 0x1e + .byte 0x20, 0x35, 0x1d + .byte 0x0c, 0x07, 0x33 + .byte 0x16, 0x08, 0x12 + .byte 0x3f, 0x36, 0x11 + .byte 0x0b, 0x1f, 0x2d + .byte 0x21, 0x20, 0x33 + .byte 0x17, 0x1a, 0x2e + .byte 0x16, 0x01, 0x2f + .byte 0x2f, 0x1c, 0x34 + .byte 0x29, 0x31, 0x2e + .byte 0x3b, 0x38, 0x31 + .byte 0x0d, 0x16, 0x12 + .byte 0x07, 0x29, 0x24 + .byte 0x33, 0x3c, 0x34 + .byte 0x3e, 0x1e, 0x18 + .byte 0x30, 0x02, 0x34 + .byte 0x2a, 0x34, 0x1b + .byte 0x2e, 0x23, 0x18 + .byte 0x34, 0x00, 0x1f + .byte 0x20, 0x0e, 0x28 + .byte 0x15, 0x33, 0x37 + .byte 0x27, 0x35, 0x23 + .byte 0x37, 0x3e, 0x11 + .byte 0x32, 0x2e, 0x36 + .byte 0x3a, 0x02, 0x2b + .byte 0x00, 0x36, 0x1d + .byte 0x13, 0x29, 0x16 + .byte 0x08, 0x2b, 0x37 + .byte 0x08, 0x02, 0x27 + .byte 0x32, 0x2d, 0x34 + .byte 0x30, 0x36, 0x29 + .byte 0x2e, 0x10, 0x12 + .byte 0x3c, 0x2e, 0x2a + .byte 0x04, 0x33, 0x30 + .byte 0x3f, 0x01, 0x22 + .byte 0x37, 0x14, 0x1d + .byte 0x27, 0x00, 0x2f + .byte 0x0c, 0x39, 0x26 + .byte 0x27, 0x04, 0x21 + .byte 0x19, 0x08, 0x1d + .byte 0x01, 0x04, 0x1e + .byte 0x27, 0x1b, 0x2b + .byte 0x31, 0x17, 0x1f + .byte 0x07, 0x01, 0x2d + .byte 0x2e, 0x3b, 0x1f + .byte 0x34, 0x24, 0x31 + .byte 0x32, 0x2b, 0x24 + .byte 0x0e, 0x07, 0x1e + .byte 0x0f, 0x33, 0x10 + .byte 0x16, 0x21, 0x32 + .byte 0x39, 0x02, 0x1a + .byte 0x33, 0x3d, 0x22 + .byte 0x0c, 0x25, 0x1a + .byte 0x29, 0x29, 0x28 + .byte 0x3a, 0x32, 0x26 + .byte 0x0b, 0x13, 0x22 + .byte 0x1f, 0x0f, 0x1c + .byte 0x04, 0x2c, 0x20 + .byte 0x39, 0x1a, 0x1b + .byte 0x1a, 0x2a, 0x1f + .byte 0x24, 0x13, 0x1a + .byte 0x31, 0x3b, 0x33 + .byte 0x39, 0x23, 0x28 + .byte 0x31, 0x07, 0x31 + .byte 0x1f, 0x10, 0x20 + .byte 0x29, 0x17, 0x32 + .byte 0x26, 0x3b, 0x2d + .byte 0x02, 0x3c, 0x1c + .byte 0x0e, 0x00, 0x20 + .byte 0x14, 0x3e, 0x37 + .byte 0x01, 0x0f, 0x2d + .byte 0x06, 0x12, 0x27 + .byte 0x30, 0x13, 0x19 + .byte 0x00, 0x33, 0x2a + .byte 0x0c, 0x07, 0x27 + .byte 0x11, 0x3a, 0x1c + .byte 0x15, 0x0a, 0x13 + .byte 0x1f, 0x0d, 0x2a + .byte 0x37, 0x07, 0x2a + .byte 0x34, 0x35, 0x34 + .byte 0x28, 0x16, 0x27 + .byte 0x06, 0x02, 0x36 + .byte 0x09, 0x23, 0x30 + .byte 0x14, 0x02, 0x28 + .byte 0x39, 0x32, 0x34 + .byte 0x24, 0x35, 0x12 + .byte 0x12, 0x22, 0x26 + .byte 0x09, 0x07, 0x33 + .byte 0x0f, 0x3e, 0x1e + .byte 0x00, 0x3c, 0x33 + .byte 0x10, 0x37, 0x14 + .byte 0x3a, 0x03, 0x25 + .byte 0x2d, 0x1e, 0x24 + .byte 0x36, 0x36, 0x26 + .byte 0x1f, 0x3c, 0x1a + .byte 0x37, 0x33, 0x25 + .byte 0x23, 0x13, 0x1f + .byte 0x33, 0x0d, 0x13 + .byte 0x25, 0x30, 0x1e + .byte 0x17, 0x03, 0x18 + .byte 0x18, 0x18, 0x14 + .byte 0x30, 0x07, 0x22 + .byte 0x3e, 0x33, 0x21 + .byte 0x14, 0x37, 0x16 + .byte 0x16, 0x00, 0x12 + .byte 0x2c, 0x12, 0x2f + .byte 0x25, 0x3f, 0x1e + .byte 0x24, 0x19, 0x16 + .byte 0x16, 0x0f, 0x35 + .byte 0x2d, 0x10, 0x11 + .byte 0x24, 0x2a, 0x28 + .byte 0x19, 0x25, 0x2e + .byte 0x0c, 0x16, 0x1f + .byte 0x38, 0x21, 0x36 + .byte 0x3d, 0x1a, 0x2f + .byte 0x3b, 0x32, 0x12 + .byte 0x36, 0x13, 0x29 + .byte 0x0e, 0x30, 0x31 + .byte 0x19, 0x07, 0x2f + .byte 0x25, 0x23, 0x28 + .byte 0x20, 0x08, 0x29 + .byte 0x2a, 0x00, 0x30 + .byte 0x30, 0x38, 0x23 + .byte 0x1e, 0x0f, 0x1f + .byte 0x3b, 0x1b, 0x30 + .byte 0x3a, 0x37, 0x2f + .byte 0x39, 0x37, 0x35 + .byte 0x39, 0x2d, 0x2f + .byte 0x1f, 0x2e, 0x1e + .byte 0x1a, 0x2b, 0x1e + .byte 0x14, 0x17, 0x20 + .byte 0x2f, 0x03, 0x11 + .byte 0x1d, 0x00, 0x30 + .byte 0x17, 0x2b, 0x1d + .byte 0x35, 0x28, 0x25 + .byte 0x3b, 0x0f, 0x11 + .byte 0x09, 0x04, 0x2e + .byte 0x23, 0x11, 0x1e + .byte 0x13, 0x37, 0x1e + .byte 0x37, 0x37, 0x1e + .byte 0x07, 0x01, 0x32 + .byte 0x14, 0x06, 0x32 + .byte 0x11, 0x0c, 0x2e + .byte 0x36, 0x2e, 0x24 + .byte 0x15, 0x2a, 0x1c + .byte 0x22, 0x15, 0x34 + .byte 0x2c, 0x1e, 0x35 + .byte 0x22, 0x27, 0x33 + .byte 0x19, 0x3f, 0x2d + .byte 0x21, 0x33, 0x15 + .byte 0x26, 0x1a, 0x11 + .byte 0x16, 0x3e, 0x12 + .byte 0x2b, 0x24, 0x15 + .byte 0x3c, 0x0f, 0x2d + .byte 0x31, 0x15, 0x36 + .byte 0x3f, 0x24, 0x1d + .byte 0x25, 0x01, 0x37 + .byte 0x33, 0x16, 0x1a + .byte 0x1f, 0x0e, 0x10 + .byte 0x2f, 0x0b, 0x12 + .byte 0x2a, 0x1a, 0x25 + .byte 0x17, 0x0a, 0x35 + .byte 0x09, 0x28, 0x35 + .byte 0x02, 0x13, 0x36 + .byte 0x34, 0x2f, 0x17 + .byte 0x03, 0x04, 0x31 + .byte 0x3e, 0x26, 0x11 + .byte 0x35, 0x33, 0x31 + .byte 0x22, 0x17, 0x23 + .byte 0x1d, 0x05, 0x2b + .byte 0x2e, 0x27, 0x20 + .byte 0x03, 0x2b, 0x1d + .byte 0x01, 0x19, 0x1e + .byte 0x0e, 0x05, 0x18 + .byte 0x16, 0x25, 0x17 + .byte 0x02, 0x28, 0x18 + .byte 0x19, 0x0b, 0x24 + .byte 0x3e, 0x35, 0x16 + .byte 0x2e, 0x29, 0x25 + .byte 0x3e, 0x38, 0x1e + .byte 0x3a, 0x2f, 0x12 + .byte 0x14, 0x17, 0x2d + .byte 0x11, 0x12, 0x30 + .byte 0x15, 0x31, 0x18 + .byte 0x08, 0x0b, 0x29 + .byte 0x2d, 0x00, 0x33 + .byte 0x2c, 0x06, 0x1a + .byte 0x14, 0x1c, 0x2e + .byte 0x04, 0x08, 0x12 + .byte 0x1b, 0x2b, 0x2d + .byte 0x2a, 0x37, 0x33 + .byte 0x10, 0x27, 0x2c + .byte 0x1d, 0x0e, 0x34 + .byte 0x20, 0x02, 0x12 + .byte 0x1e, 0x1a, 0x2e + .byte 0x07, 0x0b, 0x10 + .byte 0x36, 0x1e, 0x33 + .byte 0x2b, 0x28, 0x1b + .byte 0x31, 0x25, 0x1f + .byte 0x38, 0x3a, 0x2f + .byte 0x39, 0x30, 0x2f + .byte 0x12, 0x09, 0x14 + .byte 0x0e, 0x08, 0x19 + .byte 0x00, 0x0d, 0x2c + .byte 0x1b, 0x0e, 0x34 + .byte 0x11, 0x25, 0x15 + .byte 0x0c, 0x2d, 0x26 + .byte 0x36, 0x2c, 0x16 + .byte 0x31, 0x31, 0x2c + .byte 0x03, 0x1a, 0x16 + .byte 0x1c, 0x32, 0x14 + .byte 0x0a, 0x3e, 0x36 + .byte 0x33, 0x1b, 0x27 + .byte 0x1f, 0x32, 0x18 + .byte 0x33, 0x26, 0x33 + .byte 0x1a, 0x13, 0x1a + .byte 0x0f, 0x34, 0x1c + .byte 0x35, 0x2c, 0x2f + .byte 0x38, 0x03, 0x18 + .byte 0x15, 0x0f, 0x27 + .byte 0x31, 0x29, 0x20 + .byte 0x28, 0x0e, 0x28 + .byte 0x31, 0x2c, 0x2e + .byte 0x15, 0x19, 0x1b + .byte 0x10, 0x03, 0x2f + .byte 0x2e, 0x2a, 0x32 + .byte 0x2a, 0x27, 0x1b + .byte 0x36, 0x04, 0x1e + .byte 0x3b, 0x04, 0x21 + .byte 0x07, 0x2f, 0x19 + .byte 0x27, 0x1d, 0x1d + .byte 0x3c, 0x3d, 0x2e + .byte 0x25, 0x08, 0x32 + .byte 0x3b, 0x34, 0x2a + .byte 0x0c, 0x10, 0x13 + .byte 0x25, 0x35, 0x1a + .byte 0x2f, 0x19, 0x28 + .byte 0x17, 0x00, 0x2b + .byte 0x0a, 0x1c, 0x17 + .byte 0x0a, 0x11, 0x1b + .byte 0x35, 0x13, 0x37 + .byte 0x29, 0x1c, 0x28 + .byte 0x0c, 0x31, 0x35 + .byte 0x3c, 0x10, 0x1a + .byte 0x1b, 0x3a, 0x2d + .byte 0x3a, 0x1c, 0x18 + .byte 0x22, 0x10, 0x2d + .byte 0x1c, 0x3c, 0x12 + .byte 0x17, 0x18, 0x2a + .byte 0x0b, 0x2b, 0x2f + .byte 0x2d, 0x04, 0x2e + .byte 0x3c, 0x13, 0x23 + .byte 0x01, 0x1c, 0x2e + .byte 0x14, 0x16, 0x22 + .byte 0x0c, 0x24, 0x13 + .byte 0x35, 0x37, 0x34 + .byte 0x1b, 0x30, 0x1e + .byte 0x3a, 0x1c, 0x20 + .byte 0x06, 0x06, 0x36 + .byte 0x09, 0x15, 0x1a + .byte 0x1b, 0x1a, 0x27 + .byte 0x0f, 0x33, 0x35 + .byte 0x37, 0x06, 0x23 + .byte 0x3a, 0x12, 0x1d + .byte 0x00, 0x16, 0x29 + .byte 0x0e, 0x1d, 0x35 + .byte 0x3f, 0x38, 0x16 + .byte 0x2a, 0x3c, 0x34 + .byte 0x13, 0x32, 0x10 + .byte 0x17, 0x2c, 0x37 + .byte 0x29, 0x2a, 0x1e + .byte 0x35, 0x2f, 0x2d + .byte 0x3c, 0x2a, 0x11 + .byte 0x28, 0x13, 0x21 + .byte 0x19, 0x1e, 0x34 + .byte 0x0c, 0x06, 0x2d + .byte 0x09, 0x04, 0x1c + .byte 0x1d, 0x2f, 0x26 + .byte 0x39, 0x07, 0x16 + .byte 0x14, 0x04, 0x2d + .byte 0x3a, 0x2f, 0x2e + .byte 0x29, 0x15, 0x35 + .byte 0x24, 0x02, 0x36 + .byte 0x3f, 0x02, 0x1a + .byte 0x0f, 0x18, 0x24 + .byte 0x16, 0x1d, 0x19 + .byte 0x14, 0x16, 0x10 + .byte 0x29, 0x1b, 0x13 + .byte 0x15, 0x0e, 0x19 + .byte 0x3a, 0x2e, 0x2b + .byte 0x08, 0x30, 0x15 + .byte 0x35, 0x16, 0x30 + .byte 0x2e, 0x18, 0x35 + .byte 0x3b, 0x0b, 0x1c + .byte 0x3a, 0x18, 0x13 + .byte 0x29, 0x13, 0x1e + .byte 0x20, 0x13, 0x27 + .byte 0x04, 0x1d, 0x34 + .byte 0x00, 0x38, 0x19 + .byte 0x08, 0x39, 0x32 + .byte 0x20, 0x10, 0x26 + .byte 0x08, 0x02, 0x28 + .byte 0x3f, 0x0f, 0x16 + .byte 0x30, 0x1f, 0x19 + .byte 0x20, 0x2d, 0x10 + .byte 0x38, 0x17, 0x1c + .byte 0x18, 0x31, 0x27 + .byte 0x33, 0x38, 0x30 + .byte 0x16, 0x33, 0x23 + .byte 0x00, 0x01, 0x36 + .byte 0x0d, 0x02, 0x23 + .byte 0x39, 0x04, 0x1f + .byte 0x0e, 0x30, 0x24 + .byte 0x06, 0x01, 0x2c + .byte 0x34, 0x33, 0x35 + .byte 0x16, 0x34, 0x2e + .byte 0x32, 0x16, 0x24 + .byte 0x26, 0x39, 0x34 + .byte 0x1f, 0x3c, 0x1d + .byte 0x28, 0x1d, 0x37 + .byte 0x17, 0x15, 0x2b + .byte 0x27, 0x39, 0x30 + .byte 0x0b, 0x1b, 0x18 + .byte 0x35, 0x20, 0x2d + .byte 0x0b, 0x35, 0x1c + .byte 0x03, 0x0e, 0x21 + .byte 0x06, 0x0c, 0x20 + .byte 0x02, 0x18, 0x34 + .byte 0x1e, 0x36, 0x2d + .byte 0x16, 0x0c, 0x19 + .byte 0x25, 0x09, 0x2c + .byte 0x37, 0x05, 0x2e + .byte 0x2e, 0x2b, 0x2c + .byte 0x24, 0x1a, 0x14 + .byte 0x27, 0x04, 0x10 + .byte 0x32, 0x38, 0x33 + .byte 0x37, 0x15, 0x35 + .byte 0x11, 0x3f, 0x1d + .byte 0x23, 0x23, 0x1f + .byte 0x29, 0x3f, 0x1d + .byte 0x1a, 0x3c, 0x2b + .byte 0x1b, 0x2c, 0x2c + .byte 0x38, 0x3b, 0x36 + .byte 0x04, 0x13, 0x33 + .byte 0x2c, 0x14, 0x12 + .byte 0x1a, 0x09, 0x1b + .byte 0x36, 0x11, 0x24 + .byte 0x3a, 0x3f, 0x11 + .byte 0x01, 0x0e, 0x2b + .byte 0x3b, 0x03, 0x2a + .byte 0x08, 0x0d, 0x2b + .byte 0x2b, 0x13, 0x27 + .byte 0x3a, 0x3c, 0x1c + .byte 0x3a, 0x15, 0x2a + .byte 0x24, 0x00, 0x17 + .byte 0x3e, 0x0a, 0x15 + .byte 0x0c, 0x29, 0x2d + .byte 0x1f, 0x15, 0x30 + .byte 0x35, 0x18, 0x19 + .byte 0x3d, 0x37, 0x37 + .byte 0x12, 0x38, 0x1b + .byte 0x3b, 0x02, 0x20 + .byte 0x08, 0x21, 0x19 + .byte 0x2e, 0x36, 0x1d + .byte 0x15, 0x3d, 0x24 + .byte 0x22, 0x0c, 0x27 + .byte 0x36, 0x3f, 0x33 + .byte 0x33, 0x12, 0x11 + .byte 0x1a, 0x19, 0x1f + .byte 0x2b, 0x24, 0x12 + .byte 0x11, 0x2a, 0x18 + .byte 0x25, 0x32, 0x2a + .byte 0x2c, 0x1a, 0x12 + .byte 0x26, 0x06, 0x10 + .byte 0x11, 0x29, 0x33 + .byte 0x2c, 0x09, 0x14 + .byte 0x2b, 0x12, 0x2b + .byte 0x1d, 0x03, 0x24 + .byte 0x00, 0x12, 0x15 + .byte 0x22, 0x3d, 0x26 + .byte 0x15, 0x37, 0x1a + .byte 0x0f, 0x12, 0x37 + .byte 0x24, 0x01, 0x18 + .byte 0x2a, 0x17, 0x13 + .byte 0x14, 0x3b, 0x29 + .byte 0x2a, 0x19, 0x32 + .byte 0x2d, 0x17, 0x17 + .byte 0x0b, 0x2c, 0x33 + .byte 0x07, 0x2d, 0x34 + .byte 0x07, 0x38, 0x1d + .byte 0x1f, 0x36, 0x22 + .byte 0x11, 0x0a, 0x17 + .byte 0x14, 0x11, 0x13 + .byte 0x2a, 0x17, 0x25 + .byte 0x01, 0x3a, 0x1c + .byte 0x26, 0x27, 0x30 + .byte 0x2d, 0x3b, 0x35 + .byte 0x3a, 0x30, 0x34 + .byte 0x06, 0x3a, 0x1c + .byte 0x2d, 0x05, 0x13 + .byte 0x21, 0x32, 0x12 + .byte 0x3e, 0x1e, 0x2c + .byte 0x3a, 0x3f, 0x2d + .byte 0x20, 0x2a, 0x34 + .byte 0x26, 0x03, 0x1a + .byte 0x19, 0x27, 0x2e + .byte 0x31, 0x04, 0x26 + .byte 0x2a, 0x3f, 0x30 + .byte 0x25, 0x23, 0x2a + .byte 0x08, 0x08, 0x35 + .byte 0x2c, 0x30, 0x1e + .byte 0x08, 0x05, 0x18 + .byte 0x06, 0x09, 0x2d + .byte 0x19, 0x00, 0x27 + .byte 0x0d, 0x10, 0x19 + .byte 0x1c, 0x00, 0x13 + .byte 0x3d, 0x0b, 0x24 + .byte 0x2e, 0x1f, 0x16 + .byte 0x3d, 0x18, 0x34 + .byte 0x12, 0x1e, 0x15 + .byte 0x15, 0x39, 0x25 + .byte 0x33, 0x0f, 0x17 + .byte 0x1a, 0x1c, 0x1b + .byte 0x37, 0x29, 0x1b + .byte 0x3b, 0x38, 0x12 + .byte 0x1d, 0x22, 0x34 + .byte 0x26, 0x0a, 0x31 + .byte 0x16, 0x2d, 0x13 + .byte 0x0d, 0x20, 0x27 + .byte 0x24, 0x1d, 0x16 + .byte 0x2e, 0x2b, 0x18 + .byte 0x16, 0x2a, 0x1b + .byte 0x24, 0x17, 0x36 + .byte 0x02, 0x05, 0x2b + .byte 0x37, 0x1a, 0x17 + .byte 0x11, 0x3d, 0x2c + .byte 0x1e, 0x2f, 0x22 + .byte 0x2c, 0x29, 0x1a + .byte 0x2f, 0x04, 0x25 + .byte 0x36, 0x0c, 0x35 + .byte 0x30, 0x3e, 0x12 + .byte 0x11, 0x30, 0x37 + .byte 0x12, 0x21, 0x2e + .byte 0x21, 0x30, 0x17 + .byte 0x2c, 0x3d, 0x24 + .byte 0x11, 0x23, 0x14 + .byte 0x1a, 0x32, 0x17 + .byte 0x39, 0x27, 0x18 + .byte 0x0f, 0x24, 0x19 + .byte 0x00, 0x3d, 0x37 + .byte 0x2c, 0x3c, 0x1c + .byte 0x0b, 0x39, 0x23 + .byte 0x0e, 0x04, 0x1f + .byte 0x1c, 0x31, 0x14 + .byte 0x00, 0x04, 0x15 + .byte 0x26, 0x2a, 0x2a + .byte 0x20, 0x25, 0x2a + .byte 0x0b, 0x3c, 0x33 + .byte 0x11, 0x0b, 0x2e + .byte 0x37, 0x22, 0x2e + .byte 0x0e, 0x22, 0x26 + .byte 0x18, 0x2d, 0x27 + .byte 0x06, 0x0c, 0x1c + .byte 0x26, 0x18, 0x2f + .byte 0x3a, 0x01, 0x2a + .byte 0x2f, 0x31, 0x34 + .byte 0x1f, 0x34, 0x1a + .byte 0x31, 0x05, 0x10 + .byte 0x2e, 0x17, 0x34 + .byte 0x18, 0x22, 0x23 + .byte 0x23, 0x21, 0x32 + .byte 0x07, 0x08, 0x22 + .byte 0x26, 0x1c, 0x22 + .byte 0x31, 0x12, 0x2f + .byte 0x08, 0x1f, 0x10 + .byte 0x27, 0x15, 0x2a + .byte 0x1f, 0x0b, 0x26 + .byte 0x2f, 0x14, 0x35 + .byte 0x24, 0x1f, 0x26 + .byte 0x3b, 0x23, 0x33 + .byte 0x20, 0x3e, 0x2d + .byte 0x17, 0x0c, 0x15 + .byte 0x13, 0x39, 0x1a + .byte 0x30, 0x14, 0x25 + .byte 0x09, 0x07, 0x17 + .byte 0x38, 0x38, 0x1f + .byte 0x29, 0x24, 0x27 + .byte 0x17, 0x27, 0x28 + .byte 0x1b, 0x12, 0x2a + .byte 0x2b, 0x3d, 0x2d + .byte 0x19, 0x34, 0x1c + .byte 0x01, 0x1d, 0x10 + .byte 0x08, 0x39, 0x11 + .byte 0x0e, 0x36, 0x1b + .byte 0x26, 0x13, 0x10 + .byte 0x16, 0x28, 0x1e + .byte 0x3c, 0x28, 0x17 + .byte 0x3e, 0x39, 0x34 + .byte 0x0a, 0x03, 0x2e + .byte 0x37, 0x1a, 0x13 + .byte 0x2b, 0x33, 0x26 + .byte 0x13, 0x2c, 0x21 + .byte 0x25, 0x14, 0x10 + .byte 0x16, 0x0b, 0x35 + .byte 0x1d, 0x35, 0x33 + .byte 0x21, 0x08, 0x33 + .byte 0x28, 0x21, 0x1a + .byte 0x12, 0x0c, 0x1b + .byte 0x36, 0x2a, 0x19 + .byte 0x2c, 0x2b, 0x23 + .byte 0x01, 0x0f, 0x26 + .byte 0x17, 0x0c, 0x18 + .byte 0x09, 0x0f, 0x11 + .byte 0x2b, 0x24, 0x1c + .byte 0x09, 0x09, 0x15 + .byte 0x36, 0x08, 0x13 + .byte 0x20, 0x39, 0x21 + .byte 0x00, 0x3a, 0x1f + .byte 0x2b, 0x36, 0x31 + .byte 0x02, 0x37, 0x13 + .byte 0x04, 0x34, 0x35 + .byte 0x37, 0x3d, 0x1a + .byte 0x17, 0x3d, 0x13 + .byte 0x2b, 0x36, 0x2f + .byte 0x13, 0x1e, 0x13 + .byte 0x3e, 0x11, 0x33 + .byte 0x27, 0x3a, 0x2d + .byte 0x1e, 0x31, 0x1a + .byte 0x03, 0x03, 0x2d + .byte 0x25, 0x37, 0x1f + .byte 0x11, 0x01, 0x22 + .byte 0x1c, 0x12, 0x17 + .byte 0x30, 0x3a, 0x30 + .byte 0x17, 0x1d, 0x29 + .byte 0x0e, 0x13, 0x27 + .byte 0x1a, 0x2e, 0x24 + .byte 0x2d, 0x00, 0x1c + .byte 0x17, 0x28, 0x1d + .byte 0x09, 0x1f, 0x2e + .byte 0x1a, 0x2d, 0x26 + .byte 0x0a, 0x13, 0x32 + .byte 0x3e, 0x00, 0x27 + .byte 0x0b, 0x3b, 0x30 + .byte 0x08, 0x3a, 0x2d + .byte 0x22, 0x12, 0x1e + .byte 0x34, 0x1d, 0x2b + .byte 0x26, 0x22, 0x35 + .byte 0x17, 0x2c, 0x17 + .byte 0x29, 0x13, 0x2d + .byte 0x2d, 0x10, 0x10 + .byte 0x20, 0x31, 0x23 + .byte 0x1e, 0x33, 0x18 + .byte 0x33, 0x06, 0x2d + .byte 0x26, 0x14, 0x27 + .byte 0x22, 0x1d, 0x2a + .byte 0x2d, 0x06, 0x18 + .byte 0x07, 0x09, 0x2e + .byte 0x21, 0x15, 0x2e + .byte 0x21, 0x38, 0x23 + .byte 0x35, 0x0b, 0x34 + .byte 0x24, 0x0b, 0x22 + .byte 0x1e, 0x01, 0x17 + .byte 0x0b, 0x24, 0x11 + .byte 0x17, 0x07, 0x20 + .byte 0x14, 0x25, 0x32 + .byte 0x1a, 0x0e, 0x2f + .byte 0x35, 0x17, 0x1f + .byte 0x0c, 0x08, 0x21 + .byte 0x30, 0x35, 0x1f + .byte 0x0c, 0x0b, 0x20 + .byte 0x04, 0x10, 0x11 + .byte 0x35, 0x11, 0x1e + .byte 0x33, 0x3d, 0x16 + .byte 0x1e, 0x2b, 0x1d + .byte 0x1a, 0x19, 0x10 + .byte 0x04, 0x06, 0x22 + .byte 0x03, 0x3d, 0x24 + .byte 0x2a, 0x0e, 0x35 + .byte 0x03, 0x3e, 0x17 + .byte 0x0b, 0x18, 0x36 + .byte 0x3d, 0x0d, 0x26 + .byte 0x35, 0x12, 0x20 + .byte 0x1f, 0x0d, 0x16 + .byte 0x23, 0x32, 0x1a + .byte 0x00, 0x3d, 0x26 + .byte 0x30, 0x19, 0x36 + .byte 0x12, 0x0e, 0x23 + .byte 0x01, 0x23, 0x28 + .byte 0x3b, 0x31, 0x11 + .byte 0x2d, 0x1c, 0x36 + .byte 0x2a, 0x05, 0x16 + .byte 0x14, 0x0e, 0x30 + .byte 0x3a, 0x37, 0x19 + .byte 0x1f, 0x30, 0x25 + .byte 0x10, 0x26, 0x2f + .byte 0x22, 0x11, 0x1f + .byte 0x2e, 0x2b, 0x1e + .byte 0x16, 0x16, 0x21 + .byte 0x32, 0x18, 0x35 + .byte 0x23, 0x32, 0x1a + .byte 0x3d, 0x0d, 0x19 + .byte 0x39, 0x09, 0x23 + .byte 0x30, 0x2e, 0x24 + .byte 0x1e, 0x0f, 0x24 + .byte 0x09, 0x21, 0x31 + .byte 0x05, 0x03, 0x11 + .byte 0x05, 0x22, 0x2a + .byte 0x03, 0x07, 0x37 + .byte 0x04, 0x08, 0x13 + .byte 0x05, 0x10, 0x34 + .byte 0x37, 0x14, 0x29 + .byte 0x0a, 0x24, 0x32 + .byte 0x34, 0x1e, 0x1b + .byte 0x12, 0x17, 0x2e + .byte 0x01, 0x02, 0x13 + .byte 0x0a, 0x0c, 0x11 + .byte 0x02, 0x14, 0x13 + .byte 0x0d, 0x25, 0x23 + .byte 0x00, 0x07, 0x1a + .byte 0x1c, 0x28, 0x35 + .byte 0x08, 0x0e, 0x2c + .byte 0x1b, 0x3c, 0x15 + .byte 0x1c, 0x19, 0x1d + .byte 0x32, 0x13, 0x1a + .byte 0x1c, 0x00, 0x37 + .byte 0x22, 0x1b, 0x35 + .byte 0x39, 0x3e, 0x14 + .byte 0x32, 0x06, 0x31 + .byte 0x17, 0x05, 0x2b + .byte 0x01, 0x0f, 0x20 + .byte 0x1e, 0x0f, 0x34 + .byte 0x18, 0x03, 0x1f + .byte 0x2b, 0x00, 0x14 + .byte 0x15, 0x3a, 0x30 + .byte 0x25, 0x30, 0x21 + .byte 0x0b, 0x00, 0x37 + .byte 0x24, 0x37, 0x1d + .byte 0x29, 0x21, 0x16 + .byte 0x24, 0x0f, 0x2c + .byte 0x3e, 0x15, 0x36 + .byte 0x3c, 0x2d, 0x23 + .byte 0x3d, 0x3c, 0x17 + .byte 0x1a, 0x1c, 0x13 + .byte 0x0a, 0x29, 0x22 + .byte 0x25, 0x3f, 0x26 + .byte 0x3b, 0x39, 0x2f + .byte 0x1d, 0x08, 0x16 + .byte 0x0b, 0x19, 0x14 + .byte 0x12, 0x01, 0x2c + .byte 0x35, 0x11, 0x2a + .byte 0x02, 0x00, 0x13 + .byte 0x39, 0x2a, 0x35 + .byte 0x07, 0x1a, 0x11 + .byte 0x24, 0x0e, 0x1e + .byte 0x0e, 0x2c, 0x15 + .byte 0x08, 0x31, 0x1b + .byte 0x21, 0x1d, 0x26 + .byte 0x1d, 0x1c, 0x2a + .byte 0x1d, 0x24, 0x13 + .byte 0x01, 0x00, 0x18 + .byte 0x28, 0x2a, 0x37 + .byte 0x15, 0x0f, 0x13 + .byte 0x10, 0x32, 0x36 + .byte 0x22, 0x13, 0x31 + .byte 0x13, 0x05, 0x1e + .byte 0x17, 0x35, 0x35 + .byte 0x3b, 0x0e, 0x24 + .byte 0x35, 0x3a, 0x1d + .byte 0x1b, 0x36, 0x1b + .byte 0x03, 0x1d, 0x24 + .byte 0x0f, 0x16, 0x30 + .byte 0x2d, 0x09, 0x25 + .byte 0x05, 0x21, 0x13 + .byte 0x0a, 0x27, 0x36 + .byte 0x04, 0x0d, 0x1c + .byte 0x06, 0x3e, 0x21 + .byte 0x2a, 0x27, 0x33 + .byte 0x28, 0x0e, 0x15 + .byte 0x0b, 0x17, 0x1d + .byte 0x1d, 0x32, 0x2d + .byte 0x08, 0x3d, 0x29 + .byte 0x21, 0x32, 0x17 + .byte 0x33, 0x31, 0x22 + .byte 0x0e, 0x03, 0x21 + .byte 0x0d, 0x0b, 0x16 + .byte 0x3e, 0x2a, 0x2e + .byte 0x19, 0x36, 0x2a + .byte 0x0d, 0x00, 0x14 + .byte 0x22, 0x07, 0x36 + .byte 0x0a, 0x09, 0x15 + .byte 0x14, 0x10, 0x22 + .byte 0x07, 0x16, 0x2c + .byte 0x36, 0x13, 0x15 + .byte 0x09, 0x2f, 0x1b + .byte 0x20, 0x3b, 0x2e + .byte 0x3a, 0x3a, 0x16 + .byte 0x0d, 0x15, 0x2a + .byte 0x39, 0x13, 0x2b + .byte 0x0b, 0x01, 0x2a + .byte 0x13, 0x17, 0x1e + .byte 0x08, 0x17, 0x1e + .byte 0x0c, 0x0f, 0x34 + .byte 0x1f, 0x31, 0x12 + .byte 0x07, 0x3a, 0x1d + .byte 0x35, 0x1e, 0x12 + .byte 0x24, 0x2c, 0x15 + .byte 0x0e, 0x21, 0x19 + .byte 0x34, 0x3b, 0x33 + .byte 0x19, 0x0f, 0x28 + .byte 0x10, 0x2f, 0x2e + .byte 0x23, 0x27, 0x31 + .byte 0x39, 0x2e, 0x18 + .byte 0x3c, 0x3f, 0x24 + .byte 0x07, 0x23, 0x30 + .byte 0x28, 0x13, 0x35 + .byte 0x13, 0x0a, 0x10 + .byte 0x35, 0x19, 0x33 + .byte 0x23, 0x28, 0x29 + .byte 0x13, 0x2f, 0x1a + .byte 0x3a, 0x19, 0x14 + .byte 0x37, 0x36, 0x26 + .byte 0x20, 0x3b, 0x15 + .byte 0x37, 0x39, 0x10 + .byte 0x3c, 0x21, 0x34 + .byte 0x1c, 0x38, 0x30 + .byte 0x15, 0x07, 0x26 + .byte 0x27, 0x21, 0x19 + .byte 0x18, 0x11, 0x23 + .byte 0x30, 0x28, 0x37 + .byte 0x32, 0x2d, 0x1f + .byte 0x2c, 0x3f, 0x30 + .byte 0x1d, 0x2f, 0x26 + .byte 0x01, 0x11, 0x1c + .byte 0x3b, 0x0f, 0x12 + .byte 0x2a, 0x17, 0x27 + .byte 0x05, 0x00, 0x1b + .byte 0x25, 0x1c, 0x32 + .byte 0x04, 0x22, 0x2d + .byte 0x10, 0x0f, 0x25 + .byte 0x0d, 0x39, 0x30 + .byte 0x0b, 0x2e, 0x27 + .byte 0x2d, 0x34, 0x15 + .byte 0x3e, 0x30, 0x36 + .byte 0x16, 0x26, 0x2a + .byte 0x05, 0x3f, 0x2b + .byte 0x20, 0x3b, 0x2e + .byte 0x3b, 0x1c, 0x2f + .byte 0x01, 0x18, 0x16 + .byte 0x16, 0x3d, 0x10 + .byte 0x0a, 0x1f, 0x18 + .byte 0x17, 0x0f, 0x22 + .byte 0x06, 0x13, 0x11 + .byte 0x38, 0x21, 0x17 + .byte 0x17, 0x0a, 0x37 + .byte 0x1c, 0x19, 0x30 + .byte 0x16, 0x38, 0x31 + .byte 0x30, 0x10, 0x36 + .byte 0x31, 0x2f, 0x26 + .byte 0x3c, 0x1b, 0x23 + .byte 0x33, 0x2f, 0x19 + .byte 0x16, 0x35, 0x25 + .byte 0x3a, 0x18, 0x1f + .byte 0x37, 0x01, 0x1e + .byte 0x0d, 0x18, 0x12 + .byte 0x1f, 0x1c, 0x1b + .byte 0x07, 0x34, 0x2d + .byte 0x0b, 0x3f, 0x33 + .byte 0x1e, 0x34, 0x1d + .byte 0x2c, 0x13, 0x2c + .byte 0x20, 0x20, 0x13 + .byte 0x20, 0x0f, 0x31 + .byte 0x08, 0x0f, 0x24 + .byte 0x18, 0x3d, 0x1c + .byte 0x36, 0x34, 0x27 + .byte 0x33, 0x2a, 0x25 + .byte 0x2d, 0x30, 0x26 + .byte 0x3d, 0x37, 0x26 + .byte 0x25, 0x11, 0x11 + .byte 0x03, 0x05, 0x18 + .byte 0x10, 0x04, 0x29 + .byte 0x07, 0x2e, 0x36 + .byte 0x2a, 0x29, 0x15 + .byte 0x3a, 0x0e, 0x33 + .byte 0x2a, 0x06, 0x29 + .byte 0x3d, 0x01, 0x29 + .byte 0x27, 0x0e, 0x16 + .byte 0x1d, 0x28, 0x1b + .byte 0x10, 0x33, 0x2b + .byte 0x0c, 0x14, 0x1d + .byte 0x15, 0x3f, 0x25 + .byte 0x37, 0x23, 0x1e + .byte 0x04, 0x2c, 0x1c + .byte 0x15, 0x34, 0x2a + .byte 0x09, 0x2f, 0x15 + .byte 0x02, 0x3f, 0x14 + .byte 0x19, 0x2c, 0x33 + .byte 0x39, 0x32, 0x20 + .byte 0x2a, 0x18, 0x32 + .byte 0x17, 0x23, 0x21 + .byte 0x0b, 0x2d, 0x25 + .byte 0x24, 0x3a, 0x2d + .byte 0x31, 0x3f, 0x34 + .byte 0x18, 0x19, 0x24 + .byte 0x1e, 0x15, 0x1a + .byte 0x17, 0x33, 0x2b + .byte 0x23, 0x09, 0x26 + .byte 0x1b, 0x0d, 0x15 + .byte 0x36, 0x26, 0x28 + .byte 0x3a, 0x1c, 0x14 + .byte 0x0c, 0x3e, 0x10 + .byte 0x18, 0x06, 0x35 + .byte 0x37, 0x26, 0x36 + .byte 0x21, 0x26, 0x17 + .byte 0x3d, 0x1c, 0x2c + .byte 0x16, 0x25, 0x1d + .byte 0x1e, 0x0b, 0x1e + .byte 0x1d, 0x0d, 0x32 + .byte 0x08, 0x1f, 0x1b + .byte 0x12, 0x1c, 0x12 + .byte 0x20, 0x2a, 0x28 + .byte 0x06, 0x3b, 0x35 + .byte 0x39, 0x0e, 0x1e + .byte 0x31, 0x30, 0x28 + .byte 0x02, 0x21, 0x14 + .byte 0x06, 0x1e, 0x29 + .byte 0x16, 0x09, 0x1c + .byte 0x27, 0x32, 0x2d + .byte 0x39, 0x03, 0x27 + .byte 0x29, 0x09, 0x1e + .byte 0x1b, 0x11, 0x1c + .byte 0x28, 0x3a, 0x2c + .byte 0x03, 0x03, 0x18 + .byte 0x23, 0x09, 0x2f + .byte 0x30, 0x17, 0x23 + .byte 0x0f, 0x25, 0x33 + .byte 0x06, 0x24, 0x37 + .byte 0x22, 0x09, 0x33 + .byte 0x2c, 0x09, 0x2a + .byte 0x0c, 0x12, 0x2a + .byte 0x28, 0x20, 0x10 + .byte 0x15, 0x29, 0x33 + .byte 0x0f, 0x1a, 0x13 + .byte 0x13, 0x18, 0x36 + .byte 0x2e, 0x16, 0x13 + .byte 0x3c, 0x1a, 0x15 + .byte 0x3a, 0x11, 0x32 + .byte 0x02, 0x0a, 0x2c + .byte 0x19, 0x39, 0x11 + .byte 0x31, 0x3e, 0x1d + .byte 0x32, 0x14, 0x32 + .byte 0x12, 0x2e, 0x34 + .byte 0x3e, 0x36, 0x23 + .byte 0x37, 0x3e, 0x15 + .byte 0x15, 0x35, 0x34 + .byte 0x01, 0x3a, 0x2c + .byte 0x26, 0x25, 0x22 + .byte 0x01, 0x2b, 0x37 + .byte 0x1c, 0x3d, 0x33 + .byte 0x3e, 0x10, 0x1c + .byte 0x26, 0x33, 0x19 + .byte 0x05, 0x19, 0x17 + .byte 0x12, 0x38, 0x1c + .byte 0x15, 0x3c, 0x32 + .byte 0x3f, 0x0f, 0x37 + .byte 0x02, 0x39, 0x32 + .byte 0x13, 0x00, 0x1d + .byte 0x1d, 0x2c, 0x10 + .byte 0x39, 0x13, 0x31 + .byte 0x0f, 0x37, 0x19 + .byte 0x09, 0x0d, 0x2a + .byte 0x20, 0x2f, 0x32 + .byte 0x3b, 0x34, 0x22 + .byte 0x26, 0x14, 0x10 + .byte 0x24, 0x3d, 0x22 + .byte 0x0b, 0x31, 0x23 + .byte 0x2f, 0x2d, 0x2a + .byte 0x30, 0x04, 0x35 + .byte 0x19, 0x20, 0x2a + .byte 0x16, 0x36, 0x37 + .byte 0x14, 0x28, 0x37 + .byte 0x11, 0x0b, 0x27 + .byte 0x1d, 0x06, 0x29 + .byte 0x35, 0x16, 0x2e + .byte 0x24, 0x2e, 0x29 + .byte 0x36, 0x14, 0x2a + .byte 0x21, 0x0c, 0x1f + .byte 0x3f, 0x39, 0x19 + .byte 0x27, 0x10, 0x2a + .byte 0x1e, 0x12, 0x34 + .byte 0x10, 0x24, 0x34 + .byte 0x1d, 0x13, 0x1d + .byte 0x17, 0x16, 0x37 + .byte 0x27, 0x1b, 0x27 + .byte 0x07, 0x24, 0x21 + .byte 0x37, 0x21, 0x11 + .byte 0x37, 0x28, 0x24 + .byte 0x19, 0x02, 0x1c + .byte 0x14, 0x12, 0x1d + .byte 0x1b, 0x24, 0x2e + .byte 0x2e, 0x3a, 0x15 + .byte 0x37, 0x34, 0x21 + .byte 0x33, 0x2d, 0x29 + .byte 0x2f, 0x1e, 0x34 + .byte 0x29, 0x3c, 0x12 + .byte 0x05, 0x15, 0x20 + .byte 0x05, 0x3e, 0x19 + .byte 0x18, 0x0b, 0x30 + .byte 0x2f, 0x02, 0x27 + .byte 0x14, 0x1c, 0x34 + .byte 0x12, 0x20, 0x30 + .byte 0x2b, 0x22, 0x1b + .byte 0x06, 0x31, 0x28 + .byte 0x15, 0x2d, 0x12 + .byte 0x01, 0x0e, 0x13 + .byte 0x13, 0x0c, 0x28 + .byte 0x07, 0x2a, 0x14 + .byte 0x1d, 0x36, 0x14 + .byte 0x15, 0x2b, 0x26 + .byte 0x03, 0x25, 0x15 + .byte 0x3e, 0x3b, 0x20 + .byte 0x35, 0x0c, 0x25 + .byte 0x2b, 0x16, 0x35 + .byte 0x1e, 0x31, 0x2c + .byte 0x06, 0x03, 0x29 + .byte 0x24, 0x07, 0x1f + .byte 0x32, 0x2f, 0x19 + .byte 0x25, 0x21, 0x31 + .byte 0x22, 0x26, 0x1d + .byte 0x00, 0x1b, 0x18 + .byte 0x2a, 0x24, 0x31 + .byte 0x20, 0x06, 0x2f + .byte 0x1e, 0x32, 0x26 + .byte 0x32, 0x39, 0x12 + .byte 0x20, 0x01, 0x19 + .byte 0x0f, 0x15, 0x15 + .byte 0x27, 0x10, 0x2e + .byte 0x09, 0x25, 0x19 + .byte 0x29, 0x37, 0x30 + .byte 0x13, 0x1c, 0x1d + .byte 0x29, 0x2d, 0x26 + .byte 0x02, 0x1a, 0x16 + .byte 0x1d, 0x2b, 0x1c + .byte 0x18, 0x04, 0x34 + .byte 0x28, 0x2a, 0x21 + .byte 0x15, 0x1b, 0x2e + .byte 0x16, 0x01, 0x10 + .byte 0x05, 0x09, 0x14 + .byte 0x22, 0x03, 0x22 + .byte 0x02, 0x1b, 0x34 + .byte 0x29, 0x2a, 0x23 + .byte 0x26, 0x36, 0x13 + .byte 0x23, 0x3d, 0x1a + .byte 0x1d, 0x10, 0x24 + .byte 0x25, 0x2b, 0x37 + .byte 0x19, 0x24, 0x26 + .byte 0x28, 0x13, 0x16 + .byte 0x17, 0x14, 0x19 + .byte 0x0b, 0x2f, 0x25 + .byte 0x37, 0x34, 0x37 + .byte 0x39, 0x21, 0x1b + .byte 0x0f, 0x3d, 0x2d + .byte 0x0d, 0x10, 0x20 + .byte 0x05, 0x0b, 0x2d + .byte 0x01, 0x12, 0x24 + .byte 0x18, 0x3d, 0x32 + .byte 0x09, 0x21, 0x26 + .byte 0x1a, 0x0e, 0x1f + .byte 0x30, 0x06, 0x1f + .byte 0x0b, 0x3c, 0x29 + .byte 0x07, 0x3e, 0x27 + .byte 0x13, 0x1e, 0x1a + .byte 0x13, 0x07, 0x23 + .byte 0x10, 0x34, 0x1e + .byte 0x32, 0x17, 0x23 + .byte 0x35, 0x16, 0x31 + .byte 0x32, 0x2e, 0x1b + .byte 0x28, 0x0e, 0x22 + .byte 0x14, 0x3a, 0x23 + .byte 0x22, 0x03, 0x29 + .byte 0x2a, 0x10, 0x20 + .byte 0x3e, 0x3c, 0x27 + .byte 0x16, 0x20, 0x12 + .byte 0x3f, 0x24, 0x31 + .byte 0x0d, 0x2e, 0x32 + .byte 0x2f, 0x17, 0x2d + .byte 0x36, 0x3b, 0x17 + .byte 0x24, 0x23, 0x18 + .byte 0x37, 0x1d, 0x13 + .byte 0x17, 0x3a, 0x1a + .byte 0x0a, 0x3d, 0x1e + .byte 0x05, 0x12, 0x16 + .byte 0x33, 0x32, 0x25 + .byte 0x1d, 0x1f, 0x29 + .byte 0x34, 0x2c, 0x26 + .byte 0x20, 0x29, 0x35 + .byte 0x0e, 0x32, 0x17 + .byte 0x01, 0x39, 0x2d + .byte 0x27, 0x24, 0x23 + .byte 0x28, 0x3f, 0x18 + .byte 0x39, 0x38, 0x25 + .byte 0x23, 0x11, 0x11 + .byte 0x19, 0x2c, 0x29 + .byte 0x30, 0x08, 0x28 + .byte 0x25, 0x27, 0x1d + .byte 0x17, 0x25, 0x21 + .byte 0x09, 0x3d, 0x16 + .byte 0x1b, 0x0f, 0x2c + .byte 0x1b, 0x12, 0x22 + .byte 0x28, 0x3e, 0x26 + .byte 0x34, 0x10, 0x1b + .byte 0x02, 0x34, 0x15 + .byte 0x1a, 0x29, 0x19 + .byte 0x29, 0x11, 0x31 + .byte 0x12, 0x27, 0x17 + .byte 0x27, 0x27, 0x2f + .byte 0x34, 0x27, 0x24 + .byte 0x03, 0x19, 0x36 + .byte 0x17, 0x1d, 0x33 + .byte 0x19, 0x25, 0x1a + .byte 0x2b, 0x39, 0x13 + .byte 0x3b, 0x33, 0x1d + .byte 0x27, 0x31, 0x34 + .byte 0x28, 0x33, 0x37 + .byte 0x09, 0x30, 0x1b + .byte 0x03, 0x3a, 0x27 + .byte 0x19, 0x11, 0x1f + .byte 0x0b, 0x1a, 0x34 + .byte 0x3d, 0x2a, 0x15 + .byte 0x04, 0x24, 0x36 + .byte 0x30, 0x23, 0x30 + .byte 0x0f, 0x22, 0x1b + .byte 0x3d, 0x3d, 0x24 + .byte 0x29, 0x1d, 0x12 + .byte 0x16, 0x19, 0x2e + .byte 0x03, 0x12, 0x17 + .byte 0x18, 0x25, 0x33 + .byte 0x2f, 0x23, 0x1a + .byte 0x1a, 0x35, 0x27 + .byte 0x21, 0x26, 0x19 + .byte 0x1b, 0x30, 0x18 + .byte 0x2b, 0x22, 0x2d + .byte 0x2c, 0x1a, 0x34 + .byte 0x3e, 0x12, 0x19 + .byte 0x28, 0x27, 0x15 + .byte 0x1b, 0x11, 0x12 + .byte 0x17, 0x15, 0x10 + .byte 0x34, 0x37, 0x25 + .byte 0x12, 0x3f, 0x15 + .byte 0x31, 0x0d, 0x37 + .byte 0x3e, 0x2a, 0x2d + .byte 0x0f, 0x24, 0x24 + .byte 0x3c, 0x3f, 0x1f + .byte 0x1d, 0x34, 0x17 + .byte 0x1a, 0x23, 0x1f + .byte 0x37, 0x0f, 0x10 + .byte 0x32, 0x34, 0x35 + .byte 0x19, 0x05, 0x22 + .byte 0x33, 0x16, 0x34 + .byte 0x1e, 0x14, 0x1e + .byte 0x08, 0x13, 0x29 + .byte 0x3a, 0x37, 0x30 + .byte 0x1d, 0x36, 0x15 + .byte 0x29, 0x2e, 0x1d + .byte 0x32, 0x2e, 0x23 + .byte 0x35, 0x17, 0x1c + .byte 0x36, 0x1d, 0x13 + .byte 0x23, 0x34, 0x34 + .byte 0x24, 0x1a, 0x37 + .byte 0x2f, 0x26, 0x2e + .byte 0x1e, 0x17, 0x1a + .byte 0x1f, 0x15, 0x1f + .byte 0x2b, 0x1f, 0x19 + .byte 0x0a, 0x33, 0x1a + .byte 0x35, 0x31, 0x24 + .byte 0x2d, 0x17, 0x2c + .byte 0x0c, 0x21, 0x36 + .byte 0x2c, 0x35, 0x35 + .byte 0x1b, 0x03, 0x27 + .byte 0x01, 0x0d, 0x1d + .byte 0x1c, 0x0e, 0x11 + .byte 0x11, 0x2b, 0x10 + .byte 0x25, 0x3b, 0x20 + .byte 0x1f, 0x17, 0x19 + .byte 0x20, 0x08, 0x36 + .byte 0x13, 0x38, 0x19 + .byte 0x1b, 0x2b, 0x24 + .byte 0x0b, 0x1f, 0x29 + .byte 0x27, 0x15, 0x2c + .byte 0x37, 0x39, 0x10 + .byte 0x3a, 0x15, 0x2e + .byte 0x2f, 0x11, 0x36 + .byte 0x24, 0x04, 0x20 + .byte 0x3b, 0x2a, 0x35 + .byte 0x27, 0x35, 0x34 + .byte 0x0d, 0x1b, 0x20 + .byte 0x10, 0x22, 0x37 + .byte 0x1f, 0x38, 0x27 + .byte 0x31, 0x0f, 0x28 + .byte 0x28, 0x25, 0x15 + .byte 0x00, 0x1d, 0x25 + .byte 0x31, 0x28, 0x28 + .byte 0x0b, 0x3a, 0x1d + .byte 0x2d, 0x13, 0x1b + .byte 0x03, 0x37, 0x2e + .byte 0x1d, 0x28, 0x19 + .byte 0x08, 0x2d, 0x22 + .byte 0x27, 0x39, 0x32 + .byte 0x3f, 0x2f, 0x1d + .byte 0x33, 0x34, 0x28 + .byte 0x18, 0x08, 0x31 + .byte 0x23, 0x1f, 0x13 + .byte 0x0d, 0x2c, 0x23 + .byte 0x3a, 0x2d, 0x1a + .byte 0x02, 0x25, 0x13 + .byte 0x20, 0x36, 0x34 + .byte 0x12, 0x2b, 0x2d + .byte 0x35, 0x35, 0x34 + .byte 0x23, 0x20, 0x21 + .byte 0x3a, 0x19, 0x1b + .byte 0x1f, 0x2b, 0x19 + .byte 0x35, 0x0e, 0x19 + .byte 0x26, 0x24, 0x37 + .byte 0x18, 0x08, 0x10 + .byte 0x0c, 0x16, 0x2d + .byte 0x1f, 0x34, 0x21 + .byte 0x05, 0x38, 0x19 + .byte 0x14, 0x21, 0x24 + .byte 0x11, 0x31, 0x14 + .byte 0x3e, 0x38, 0x29 + .byte 0x3f, 0x08, 0x25 + .byte 0x2a, 0x1f, 0x25 + .byte 0x25, 0x06, 0x28 + .byte 0x0b, 0x1e, 0x14 + .byte 0x1a, 0x38, 0x22 + .byte 0x24, 0x18, 0x29 + .byte 0x1a, 0x11, 0x20 + .byte 0x3b, 0x3a, 0x1e + .byte 0x1c, 0x26, 0x1a + .byte 0x05, 0x32, 0x19 + .byte 0x39, 0x2a, 0x31 + .byte 0x09, 0x07, 0x25 + .byte 0x05, 0x3e, 0x16 + .byte 0x34, 0x26, 0x14 + .byte 0x1b, 0x32, 0x26 + .byte 0x05, 0x08, 0x37 + .byte 0x0f, 0x03, 0x20 + .byte 0x2a, 0x39, 0x31 + .byte 0x08, 0x01, 0x1e + .byte 0x1d, 0x23, 0x31 + .byte 0x28, 0x1b, 0x28 + .byte 0x1e, 0x37, 0x14 + .byte 0x13, 0x0e, 0x28 + .byte 0x2a, 0x3b, 0x37 + .byte 0x2f, 0x1c, 0x28 + .byte 0x30, 0x30, 0x1a + .byte 0x36, 0x1f, 0x16 + .byte 0x3e, 0x0d, 0x15 + .byte 0x2e, 0x16, 0x18 + .byte 0x15, 0x37, 0x20 + .byte 0x2a, 0x33, 0x30 + .byte 0x2b, 0x0e, 0x25 + .byte 0x18, 0x20, 0x16 + .byte 0x02, 0x19, 0x25 + .byte 0x0a, 0x2e, 0x30 + .byte 0x16, 0x03, 0x11 + .byte 0x04, 0x27, 0x25 + .byte 0x1b, 0x1c, 0x21 + .byte 0x29, 0x04, 0x27 + .byte 0x3d, 0x20, 0x1e + .byte 0x28, 0x33, 0x31 + .byte 0x1e, 0x39, 0x10 + .byte 0x31, 0x29, 0x1e + .byte 0x06, 0x25, 0x28 + .byte 0x19, 0x3b, 0x12 + .byte 0x0b, 0x1b, 0x1c + .byte 0x3e, 0x37, 0x20 + .byte 0x0a, 0x37, 0x33 + .byte 0x02, 0x2c, 0x25 + .byte 0x15, 0x18, 0x14 + .byte 0x3b, 0x20, 0x1c + .byte 0x22, 0x3b, 0x1c + .byte 0x24, 0x34, 0x35 + .byte 0x0f, 0x2f, 0x31 + .byte 0x3b, 0x17, 0x35 + .byte 0x30, 0x39, 0x37 + .byte 0x0d, 0x15, 0x11 + .byte 0x10, 0x03, 0x1e + .byte 0x1a, 0x39, 0x33 + .byte 0x2f, 0x2e, 0x28 + .byte 0x1c, 0x28, 0x36 + .byte 0x28, 0x18, 0x1f + .byte 0x15, 0x01, 0x30 + .byte 0x3e, 0x32, 0x28 + .byte 0x34, 0x2f, 0x23 + .byte 0x07, 0x0c, 0x36 + .byte 0x28, 0x2c, 0x34 + .byte 0x2a, 0x0c, 0x1f + .byte 0x3f, 0x20, 0x13 + .byte 0x2b, 0x17, 0x27 + .byte 0x28, 0x29, 0x2a + .byte 0x3c, 0x13, 0x36 + .byte 0x26, 0x2d, 0x2a + .byte 0x0a, 0x06, 0x1e + .byte 0x20, 0x04, 0x1a + .byte 0x02, 0x07, 0x35 + .byte 0x0e, 0x18, 0x30 + .byte 0x00, 0x34, 0x34 + .byte 0x2f, 0x14, 0x37 + .byte 0x21, 0x30, 0x1f + .byte 0x15, 0x37, 0x1b + .byte 0x3a, 0x0b, 0x32 + .byte 0x22, 0x22, 0x21 + .byte 0x1b, 0x35, 0x23 + .byte 0x0d, 0x03, 0x1c + .byte 0x23, 0x3b, 0x13 + .byte 0x0e, 0x1d, 0x1f + .byte 0x1d, 0x3f, 0x2e + .byte 0x39, 0x27, 0x2e + .byte 0x0f, 0x38, 0x20 + .byte 0x31, 0x3c, 0x35 + .byte 0x0b, 0x0f, 0x2e + .byte 0x06, 0x06, 0x28 + .byte 0x25, 0x39, 0x23 + .byte 0x0a, 0x32, 0x15 + .byte 0x0f, 0x1d, 0x25 + .byte 0x0c, 0x0d, 0x34 + .byte 0x12, 0x2e, 0x21 + .byte 0x36, 0x18, 0x1f + .byte 0x1f, 0x34, 0x1b + .byte 0x05, 0x3a, 0x36 + .byte 0x2b, 0x01, 0x17 + .byte 0x0e, 0x16, 0x2b + .byte 0x0e, 0x0b, 0x26 + .byte 0x0d, 0x2d, 0x10 + .byte 0x21, 0x11, 0x27 + .byte 0x3d, 0x13, 0x32 + .byte 0x15, 0x25, 0x2a + .byte 0x1b, 0x2d, 0x35 + .byte 0x2c, 0x2b, 0x26 + .byte 0x26, 0x1f, 0x20 + .byte 0x22, 0x2b, 0x12 + .byte 0x3f, 0x3d, 0x27 + .byte 0x30, 0x0a, 0x36 + .byte 0x35, 0x1f, 0x17 + .byte 0x21, 0x08, 0x29 + .byte 0x1d, 0x20, 0x33 + .byte 0x34, 0x11, 0x16 + .byte 0x05, 0x38, 0x2d diff --git a/data/region_map.s b/data/region_map.s index 2cca09daf..14ea9c5f4 100644 --- a/data/region_map.s +++ b/data/region_map.s @@ -1222,3205 +1222,3 @@ gUnknown_83F2EE0:: @ 83F2EE0 .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - -gUnknown_83F3024:: @ 83F3024 - .byte 0x00, 0x1d, 0x1c - .byte 0x0e, 0x1e, 0x1b - .byte 0x00, 0x01, 0x32 - .byte 0x2e, 0x1e, 0x37 - .byte 0x0a, 0x22, 0x1f - .byte 0x05, 0x26, 0x2e - .byte 0x12, 0x17, 0x1e - .byte 0x1a, 0x03, 0x11 - .byte 0x05, 0x11, 0x18 - .byte 0x05, 0x27, 0x2f - .byte 0x1a, 0x3f, 0x12 - .byte 0x22, 0x3f, 0x16 - .byte 0x2b, 0x2f, 0x2e - .byte 0x11, 0x02, 0x2d - .byte 0x23, 0x0d, 0x28 - .byte 0x17, 0x0c, 0x19 - .byte 0x2f, 0x0e, 0x13 - .byte 0x30, 0x18, 0x20 - .byte 0x2d, 0x28, 0x22 - .byte 0x01, 0x03, 0x19 - .byte 0x0e, 0x2a, 0x2b - .byte 0x22, 0x15, 0x25 - .byte 0x22, 0x0a, 0x26 - .byte 0x39, 0x06, 0x23 - .byte 0x16, 0x07, 0x2f - .byte 0x22, 0x3a, 0x1b - .byte 0x3b, 0x36, 0x35 - .byte 0x0a, 0x2b, 0x24 - .byte 0x36, 0x09, 0x12 - .byte 0x1c, 0x2f, 0x23 - .byte 0x2e, 0x38, 0x2c - .byte 0x05, 0x2a, 0x20 - .byte 0x07, 0x14, 0x32 - .byte 0x31, 0x08, 0x17 - .byte 0x1a, 0x24, 0x2d - .byte 0x22, 0x0a, 0x16 - .byte 0x1b, 0x26, 0x2b - .byte 0x29, 0x16, 0x11 - .byte 0x35, 0x08, 0x14 - .byte 0x1e, 0x08, 0x14 - .byte 0x05, 0x31, 0x14 - .byte 0x38, 0x31, 0x17 - .byte 0x34, 0x33, 0x12 - .byte 0x11, 0x09, 0x1f - .byte 0x28, 0x3d, 0x32 - .byte 0x35, 0x03, 0x1e - .byte 0x3c, 0x2b, 0x2e - .byte 0x10, 0x01, 0x17 - .byte 0x03, 0x3e, 0x22 - .byte 0x17, 0x18, 0x34 - .byte 0x08, 0x29, 0x19 - .byte 0x03, 0x24, 0x28 - .byte 0x3d, 0x33, 0x2f - .byte 0x31, 0x24, 0x19 - .byte 0x1b, 0x18, 0x26 - .byte 0x07, 0x0d, 0x25 - .byte 0x2d, 0x3f, 0x12 - .byte 0x2f, 0x15, 0x25 - .byte 0x29, 0x0f, 0x12 - .byte 0x07, 0x2c, 0x12 - .byte 0x2c, 0x0b, 0x26 - .byte 0x12, 0x1a, 0x16 - .byte 0x00, 0x0b, 0x2f - .byte 0x16, 0x35, 0x24 - .byte 0x1f, 0x1c, 0x22 - .byte 0x29, 0x33, 0x27 - .byte 0x3b, 0x30, 0x17 - .byte 0x11, 0x06, 0x35 - .byte 0x3e, 0x31, 0x2f - .byte 0x11, 0x3a, 0x25 - .byte 0x2a, 0x02, 0x19 - .byte 0x33, 0x18, 0x35 - .byte 0x2a, 0x20, 0x21 - .byte 0x2e, 0x32, 0x1b - .byte 0x3b, 0x1f, 0x23 - .byte 0x39, 0x29, 0x2a - .byte 0x2e, 0x31, 0x29 - .byte 0x2a, 0x0e, 0x2d - .byte 0x2d, 0x00, 0x1f - .byte 0x38, 0x28, 0x1b - .byte 0x14, 0x3b, 0x2b - .byte 0x2e, 0x04, 0x26 - .byte 0x36, 0x30, 0x11 - .byte 0x3b, 0x21, 0x2d - .byte 0x2b, 0x3f, 0x1b - .byte 0x20, 0x13, 0x31 - .byte 0x33, 0x0c, 0x30 - .byte 0x22, 0x2b, 0x2b - .byte 0x16, 0x02, 0x1e - .byte 0x1c, 0x12, 0x1c - .byte 0x0f, 0x3c, 0x36 - .byte 0x38, 0x10, 0x2d - .byte 0x18, 0x2f, 0x2d - .byte 0x35, 0x3b, 0x11 - .byte 0x37, 0x31, 0x13 - .byte 0x13, 0x3d, 0x2f - .byte 0x1e, 0x2c, 0x33 - .byte 0x2e, 0x37, 0x12 - .byte 0x3c, 0x1f, 0x33 - .byte 0x32, 0x2a, 0x27 - .byte 0x0d, 0x3b, 0x1c - .byte 0x35, 0x2a, 0x27 - .byte 0x09, 0x3d, 0x27 - .byte 0x12, 0x0b, 0x18 - .byte 0x0c, 0x15, 0x1d - .byte 0x20, 0x01, 0x1c - .byte 0x08, 0x3b, 0x1c - .byte 0x12, 0x37, 0x33 - .byte 0x15, 0x03, 0x2c - .byte 0x2a, 0x3b, 0x31 - .byte 0x0f, 0x04, 0x35 - .byte 0x08, 0x17, 0x33 - .byte 0x38, 0x3d, 0x2a - .byte 0x2f, 0x35, 0x16 - .byte 0x10, 0x35, 0x16 - .byte 0x23, 0x13, 0x2c - .byte 0x2f, 0x06, 0x20 - .byte 0x27, 0x3a, 0x24 - .byte 0x00, 0x1c, 0x2a - .byte 0x03, 0x39, 0x1d - .byte 0x28, 0x07, 0x1a - .byte 0x20, 0x0a, 0x37 - .byte 0x07, 0x35, 0x2d - .byte 0x15, 0x2f, 0x2c - .byte 0x10, 0x2c, 0x23 - .byte 0x3f, 0x29, 0x14 - .byte 0x2a, 0x21, 0x36 - .byte 0x34, 0x1a, 0x2c - .byte 0x1c, 0x3d, 0x33 - .byte 0x38, 0x2b, 0x22 - .byte 0x35, 0x28, 0x1f - .byte 0x3d, 0x0f, 0x1c - .byte 0x1e, 0x3e, 0x1b - .byte 0x0c, 0x3e, 0x1f - .byte 0x2b, 0x31, 0x2c - .byte 0x32, 0x39, 0x11 - .byte 0x05, 0x09, 0x11 - .byte 0x04, 0x38, 0x2a - .byte 0x32, 0x00, 0x16 - .byte 0x13, 0x0b, 0x31 - .byte 0x34, 0x2a, 0x13 - .byte 0x2c, 0x22, 0x21 - .byte 0x39, 0x2f, 0x15 - .byte 0x37, 0x28, 0x1e - .byte 0x07, 0x3b, 0x2d - .byte 0x11, 0x03, 0x28 - .byte 0x2d, 0x30, 0x1e - .byte 0x31, 0x11, 0x11 - .byte 0x23, 0x01, 0x1e - .byte 0x3d, 0x31, 0x34 - .byte 0x1c, 0x02, 0x34 - .byte 0x21, 0x0e, 0x25 - .byte 0x3d, 0x07, 0x17 - .byte 0x33, 0x15, 0x10 - .byte 0x29, 0x32, 0x32 - .byte 0x18, 0x1f, 0x30 - .byte 0x2d, 0x3b, 0x30 - .byte 0x27, 0x3e, 0x16 - .byte 0x31, 0x15, 0x12 - .byte 0x30, 0x25, 0x17 - .byte 0x33, 0x06, 0x34 - .byte 0x00, 0x29, 0x18 - .byte 0x3c, 0x03, 0x12 - .byte 0x2c, 0x0c, 0x11 - .byte 0x09, 0x30, 0x30 - .byte 0x10, 0x0e, 0x11 - .byte 0x27, 0x16, 0x1b - .byte 0x0c, 0x3b, 0x2e - .byte 0x2b, 0x33, 0x1e - .byte 0x13, 0x2d, 0x2d - .byte 0x11, 0x24, 0x29 - .byte 0x34, 0x3e, 0x2b - .byte 0x24, 0x1e, 0x21 - .byte 0x27, 0x1a, 0x2d - .byte 0x04, 0x39, 0x16 - .byte 0x3e, 0x33, 0x26 - .byte 0x1b, 0x2e, 0x25 - .byte 0x0c, 0x06, 0x19 - .byte 0x25, 0x19, 0x18 - .byte 0x1d, 0x33, 0x33 - .byte 0x1d, 0x28, 0x2d - .byte 0x1c, 0x10, 0x2a - .byte 0x1f, 0x35, 0x1e - .byte 0x34, 0x02, 0x10 - .byte 0x2b, 0x3a, 0x14 - .byte 0x0d, 0x0b, 0x15 - .byte 0x0c, 0x2c, 0x10 - .byte 0x37, 0x3a, 0x19 - .byte 0x06, 0x13, 0x17 - .byte 0x24, 0x10, 0x25 - .byte 0x24, 0x04, 0x1e - .byte 0x00, 0x35, 0x34 - .byte 0x3a, 0x00, 0x37 - .byte 0x3c, 0x07, 0x1a - .byte 0x2b, 0x28, 0x36 - .byte 0x34, 0x39, 0x2f - .byte 0x28, 0x09, 0x1f - .byte 0x38, 0x31, 0x30 - .byte 0x16, 0x25, 0x31 - .byte 0x18, 0x28, 0x31 - .byte 0x18, 0x0c, 0x22 - .byte 0x06, 0x39, 0x2d - .byte 0x3d, 0x20, 0x24 - .byte 0x2e, 0x27, 0x21 - .byte 0x3e, 0x18, 0x18 - .byte 0x15, 0x3c, 0x24 - .byte 0x06, 0x1b, 0x26 - .byte 0x15, 0x0e, 0x22 - .byte 0x0a, 0x0d, 0x1f - .byte 0x18, 0x16, 0x34 - .byte 0x10, 0x28, 0x21 - .byte 0x20, 0x11, 0x11 - .byte 0x36, 0x32, 0x15 - .byte 0x3b, 0x2e, 0x24 - .byte 0x1f, 0x2d, 0x12 - .byte 0x36, 0x2e, 0x20 - .byte 0x0b, 0x17, 0x33 - .byte 0x26, 0x03, 0x1f - .byte 0x08, 0x19, 0x31 - .byte 0x2a, 0x18, 0x25 - .byte 0x35, 0x2d, 0x2d - .byte 0x30, 0x38, 0x18 - .byte 0x1c, 0x25, 0x14 - .byte 0x1c, 0x22, 0x28 - .byte 0x08, 0x23, 0x21 - .byte 0x26, 0x1e, 0x30 - .byte 0x19, 0x0f, 0x15 - .byte 0x10, 0x2f, 0x22 - .byte 0x12, 0x02, 0x25 - .byte 0x3c, 0x01, 0x1d - .byte 0x0e, 0x14, 0x18 - .byte 0x0d, 0x18, 0x17 - .byte 0x22, 0x0b, 0x31 - .byte 0x13, 0x34, 0x21 - .byte 0x0f, 0x2d, 0x36 - .byte 0x39, 0x1f, 0x25 - .byte 0x18, 0x10, 0x1f - .byte 0x2d, 0x20, 0x20 - .byte 0x19, 0x0b, 0x31 - .byte 0x33, 0x13, 0x14 - .byte 0x2e, 0x11, 0x21 - .byte 0x2d, 0x0a, 0x37 - .byte 0x07, 0x15, 0x1b - .byte 0x32, 0x04, 0x32 - .byte 0x06, 0x18, 0x1b - .byte 0x13, 0x24, 0x12 - .byte 0x36, 0x22, 0x16 - .byte 0x1d, 0x29, 0x1c - .byte 0x35, 0x17, 0x21 - .byte 0x36, 0x17, 0x2b - .byte 0x35, 0x32, 0x19 - .byte 0x2a, 0x0f, 0x2e - .byte 0x10, 0x00, 0x34 - .byte 0x02, 0x0e, 0x28 - .byte 0x31, 0x32, 0x32 - .byte 0x3b, 0x05, 0x20 - .byte 0x36, 0x26, 0x12 - .byte 0x34, 0x06, 0x34 - .byte 0x1e, 0x31, 0x32 - .byte 0x35, 0x05, 0x34 - .byte 0x1e, 0x13, 0x15 - .byte 0x15, 0x14, 0x2c - .byte 0x29, 0x1c, 0x18 - .byte 0x24, 0x24, 0x12 - .byte 0x22, 0x29, 0x18 - .byte 0x34, 0x36, 0x30 - .byte 0x1e, 0x01, 0x23 - .byte 0x0c, 0x3c, 0x24 - .byte 0x0a, 0x3d, 0x16 - .byte 0x27, 0x1e, 0x23 - .byte 0x15, 0x02, 0x12 - .byte 0x11, 0x19, 0x2a - .byte 0x1d, 0x31, 0x15 - .byte 0x03, 0x3b, 0x2a - .byte 0x21, 0x19, 0x2c - .byte 0x0a, 0x23, 0x11 - .byte 0x25, 0x11, 0x1a - .byte 0x1a, 0x0a, 0x34 - .byte 0x3b, 0x0b, 0x33 - .byte 0x21, 0x0b, 0x37 - .byte 0x01, 0x31, 0x28 - .byte 0x35, 0x1d, 0x27 - .byte 0x2c, 0x30, 0x31 - .byte 0x2e, 0x39, 0x2d - .byte 0x30, 0x05, 0x2c - .byte 0x12, 0x2a, 0x2b - .byte 0x39, 0x22, 0x20 - .byte 0x15, 0x34, 0x1c - .byte 0x1c, 0x01, 0x15 - .byte 0x20, 0x16, 0x22 - .byte 0x13, 0x04, 0x18 - .byte 0x1e, 0x13, 0x10 - .byte 0x25, 0x33, 0x15 - .byte 0x39, 0x03, 0x31 - .byte 0x3f, 0x36, 0x18 - .byte 0x14, 0x23, 0x10 - .byte 0x2f, 0x1e, 0x1f - .byte 0x1f, 0x17, 0x2c - .byte 0x02, 0x16, 0x31 - .byte 0x20, 0x18, 0x30 - .byte 0x2e, 0x18, 0x37 - .byte 0x3b, 0x0e, 0x30 - .byte 0x10, 0x39, 0x24 - .byte 0x26, 0x39, 0x1e - .byte 0x30, 0x26, 0x2e - .byte 0x12, 0x01, 0x14 - .byte 0x37, 0x2a, 0x2e - .byte 0x21, 0x06, 0x1d - .byte 0x2a, 0x16, 0x32 - .byte 0x09, 0x38, 0x1c - .byte 0x07, 0x22, 0x17 - .byte 0x3b, 0x2d, 0x15 - .byte 0x07, 0x1e, 0x2e - .byte 0x1b, 0x2e, 0x1d - .byte 0x04, 0x09, 0x30 - .byte 0x30, 0x2d, 0x37 - .byte 0x2d, 0x34, 0x24 - .byte 0x18, 0x24, 0x25 - .byte 0x0e, 0x2d, 0x26 - .byte 0x23, 0x0a, 0x16 - .byte 0x12, 0x2d, 0x11 - .byte 0x21, 0x28, 0x2e - .byte 0x0f, 0x01, 0x21 - .byte 0x01, 0x31, 0x12 - .byte 0x3f, 0x1b, 0x1e - .byte 0x21, 0x25, 0x2b - .byte 0x26, 0x18, 0x13 - .byte 0x15, 0x2d, 0x34 - .byte 0x23, 0x21, 0x36 - .byte 0x0e, 0x2e, 0x1c - .byte 0x14, 0x22, 0x1c - .byte 0x2c, 0x0b, 0x28 - .byte 0x1a, 0x18, 0x21 - .byte 0x21, 0x07, 0x1a - .byte 0x24, 0x26, 0x29 - .byte 0x2b, 0x0a, 0x34 - .byte 0x3e, 0x27, 0x33 - .byte 0x12, 0x34, 0x1b - .byte 0x1f, 0x01, 0x2a - .byte 0x2e, 0x06, 0x23 - .byte 0x2f, 0x1f, 0x14 - .byte 0x18, 0x06, 0x26 - .byte 0x31, 0x1f, 0x2b - .byte 0x22, 0x26, 0x2e - .byte 0x1e, 0x15, 0x16 - .byte 0x20, 0x22, 0x28 - .byte 0x15, 0x37, 0x12 - .byte 0x25, 0x04, 0x2c - .byte 0x1f, 0x04, 0x2e - .byte 0x0c, 0x13, 0x18 - .byte 0x07, 0x0b, 0x36 - .byte 0x1d, 0x1c, 0x2a - .byte 0x30, 0x22, 0x1c - .byte 0x2e, 0x12, 0x2f - .byte 0x2b, 0x21, 0x1e - .byte 0x16, 0x38, 0x30 - .byte 0x04, 0x02, 0x16 - .byte 0x05, 0x14, 0x20 - .byte 0x38, 0x3c, 0x33 - .byte 0x21, 0x1b, 0x2f - .byte 0x14, 0x2a, 0x27 - .byte 0x38, 0x14, 0x1b - .byte 0x2b, 0x1f, 0x2b - .byte 0x29, 0x2b, 0x25 - .byte 0x27, 0x36, 0x21 - .byte 0x11, 0x22, 0x1b - .byte 0x29, 0x03, 0x1b - .byte 0x18, 0x24, 0x28 - .byte 0x21, 0x2d, 0x36 - .byte 0x3c, 0x2c, 0x24 - .byte 0x33, 0x17, 0x1f - .byte 0x2a, 0x3a, 0x21 - .byte 0x0a, 0x23, 0x37 - .byte 0x00, 0x0b, 0x21 - .byte 0x11, 0x38, 0x19 - .byte 0x0f, 0x0e, 0x1c - .byte 0x1f, 0x0f, 0x37 - .byte 0x3c, 0x10, 0x37 - .byte 0x38, 0x31, 0x35 - .byte 0x07, 0x15, 0x28 - .byte 0x1e, 0x2e, 0x19 - .byte 0x26, 0x10, 0x33 - .byte 0x3d, 0x35, 0x2f - .byte 0x3a, 0x04, 0x34 - .byte 0x0d, 0x18, 0x1a - .byte 0x01, 0x2d, 0x15 - .byte 0x3d, 0x1a, 0x17 - .byte 0x17, 0x3f, 0x32 - .byte 0x0b, 0x21, 0x11 - .byte 0x1e, 0x26, 0x2b - .byte 0x0d, 0x19, 0x24 - .byte 0x2e, 0x04, 0x1b - .byte 0x1b, 0x33, 0x20 - .byte 0x15, 0x21, 0x1d - .byte 0x1f, 0x04, 0x21 - .byte 0x0f, 0x12, 0x1f - .byte 0x2d, 0x2a, 0x32 - .byte 0x03, 0x37, 0x1f - .byte 0x35, 0x07, 0x27 - .byte 0x24, 0x1f, 0x31 - .byte 0x2f, 0x30, 0x15 - .byte 0x06, 0x00, 0x24 - .byte 0x0b, 0x22, 0x1a - .byte 0x0c, 0x3b, 0x29 - .byte 0x14, 0x1a, 0x17 - .byte 0x37, 0x20, 0x25 - .byte 0x3f, 0x26, 0x37 - .byte 0x3a, 0x3e, 0x10 - .byte 0x22, 0x04, 0x11 - .byte 0x28, 0x12, 0x1c - .byte 0x03, 0x2e, 0x2e - .byte 0x0e, 0x38, 0x28 - .byte 0x01, 0x29, 0x22 - .byte 0x1e, 0x33, 0x19 - .byte 0x06, 0x21, 0x27 - .byte 0x33, 0x19, 0x1a - .byte 0x02, 0x05, 0x17 - .byte 0x11, 0x11, 0x2c - .byte 0x1f, 0x26, 0x1e - .byte 0x39, 0x1f, 0x28 - .byte 0x2e, 0x2f, 0x12 - .byte 0x22, 0x34, 0x13 - .byte 0x3b, 0x26, 0x2f - .byte 0x34, 0x00, 0x14 - .byte 0x10, 0x31, 0x11 - .byte 0x1d, 0x2d, 0x2a - .byte 0x08, 0x08, 0x37 - .byte 0x15, 0x18, 0x34 - .byte 0x04, 0x2b, 0x24 - .byte 0x2f, 0x1e, 0x27 - .byte 0x22, 0x2a, 0x24 - .byte 0x07, 0x14, 0x25 - .byte 0x01, 0x27, 0x19 - .byte 0x29, 0x0a, 0x29 - .byte 0x3d, 0x1c, 0x2f - .byte 0x0d, 0x1f, 0x1c - .byte 0x24, 0x3d, 0x32 - .byte 0x36, 0x1d, 0x24 - .byte 0x14, 0x21, 0x16 - .byte 0x1a, 0x0d, 0x29 - .byte 0x3f, 0x2b, 0x2a - .byte 0x1a, 0x3e, 0x35 - .byte 0x11, 0x28, 0x18 - .byte 0x32, 0x05, 0x15 - .byte 0x21, 0x2e, 0x34 - .byte 0x2d, 0x14, 0x2a - .byte 0x3c, 0x08, 0x37 - .byte 0x3f, 0x34, 0x1e - .byte 0x27, 0x24, 0x1c - .byte 0x16, 0x16, 0x33 - .byte 0x29, 0x3b, 0x19 - .byte 0x36, 0x2f, 0x1c - .byte 0x03, 0x25, 0x2c - .byte 0x0b, 0x16, 0x36 - .byte 0x1c, 0x1d, 0x1b - .byte 0x2c, 0x27, 0x1b - .byte 0x0b, 0x1f, 0x2b - .byte 0x08, 0x10, 0x27 - .byte 0x3f, 0x25, 0x2f - .byte 0x33, 0x13, 0x1f - .byte 0x04, 0x31, 0x37 - .byte 0x0e, 0x2f, 0x12 - .byte 0x08, 0x23, 0x20 - .byte 0x3a, 0x1a, 0x1e - .byte 0x2f, 0x0b, 0x1f - .byte 0x1e, 0x20, 0x19 - .byte 0x23, 0x3b, 0x14 - .byte 0x25, 0x00, 0x27 - .byte 0x14, 0x04, 0x25 - .byte 0x36, 0x1a, 0x2b - .byte 0x27, 0x21, 0x15 - .byte 0x28, 0x13, 0x2c - .byte 0x0e, 0x3c, 0x35 - .byte 0x0c, 0x2d, 0x2b - .byte 0x37, 0x16, 0x15 - .byte 0x29, 0x15, 0x1d - .byte 0x17, 0x34, 0x36 - .byte 0x09, 0x0a, 0x31 - .byte 0x37, 0x22, 0x28 - .byte 0x17, 0x2b, 0x35 - .byte 0x14, 0x2b, 0x12 - .byte 0x08, 0x13, 0x1f - .byte 0x31, 0x13, 0x28 - .byte 0x06, 0x07, 0x35 - .byte 0x23, 0x3a, 0x29 - .byte 0x0f, 0x24, 0x2e - .byte 0x07, 0x35, 0x26 - .byte 0x0e, 0x12, 0x15 - .byte 0x23, 0x33, 0x2c - .byte 0x0e, 0x21, 0x26 - .byte 0x1c, 0x12, 0x25 - .byte 0x23, 0x1d, 0x2f - .byte 0x04, 0x35, 0x33 - .byte 0x16, 0x01, 0x24 - .byte 0x3d, 0x2c, 0x2e - .byte 0x35, 0x0a, 0x25 - .byte 0x11, 0x13, 0x25 - .byte 0x1b, 0x1b, 0x15 - .byte 0x15, 0x39, 0x10 - .byte 0x0b, 0x35, 0x24 - .byte 0x3a, 0x27, 0x30 - .byte 0x2e, 0x2f, 0x15 - .byte 0x10, 0x1f, 0x35 - .byte 0x1b, 0x28, 0x35 - .byte 0x26, 0x30, 0x37 - .byte 0x34, 0x37, 0x2b - .byte 0x0f, 0x30, 0x29 - .byte 0x2e, 0x3f, 0x2b - .byte 0x38, 0x34, 0x2b - .byte 0x2b, 0x2f, 0x25 - .byte 0x0d, 0x28, 0x2a - .byte 0x33, 0x18, 0x10 - .byte 0x21, 0x12, 0x11 - .byte 0x1f, 0x22, 0x34 - .byte 0x11, 0x25, 0x23 - .byte 0x21, 0x3f, 0x11 - .byte 0x26, 0x27, 0x25 - .byte 0x28, 0x36, 0x12 - .byte 0x15, 0x26, 0x32 - .byte 0x11, 0x18, 0x24 - .byte 0x32, 0x25, 0x37 - .byte 0x27, 0x3a, 0x33 - .byte 0x35, 0x07, 0x1c - .byte 0x1a, 0x0e, 0x2a - .byte 0x1e, 0x2f, 0x1f - .byte 0x00, 0x2e, 0x21 - .byte 0x1b, 0x3c, 0x14 - .byte 0x2f, 0x3a, 0x2f - .byte 0x3e, 0x38, 0x15 - .byte 0x1a, 0x13, 0x2f - .byte 0x29, 0x0d, 0x2f - .byte 0x37, 0x17, 0x18 - .byte 0x30, 0x1c, 0x35 - .byte 0x15, 0x34, 0x14 - .byte 0x28, 0x11, 0x2c - .byte 0x2c, 0x25, 0x2a - .byte 0x20, 0x3f, 0x28 - .byte 0x0c, 0x34, 0x1b - .byte 0x30, 0x2e, 0x25 - .byte 0x37, 0x1c, 0x24 - .byte 0x1f, 0x25, 0x26 - .byte 0x0c, 0x19, 0x34 - .byte 0x18, 0x10, 0x35 - .byte 0x0a, 0x13, 0x11 - .byte 0x25, 0x13, 0x20 - .byte 0x13, 0x19, 0x11 - .byte 0x20, 0x28, 0x1d - .byte 0x3e, 0x30, 0x1b - .byte 0x23, 0x24, 0x21 - .byte 0x0d, 0x23, 0x23 - .byte 0x1d, 0x28, 0x2e - .byte 0x2d, 0x12, 0x1f - .byte 0x0e, 0x2e, 0x2b - .byte 0x0b, 0x31, 0x32 - .byte 0x24, 0x3c, 0x2c - .byte 0x13, 0x3c, 0x12 - .byte 0x28, 0x16, 0x2a - .byte 0x05, 0x0c, 0x32 - .byte 0x39, 0x0b, 0x32 - .byte 0x21, 0x04, 0x14 - .byte 0x10, 0x31, 0x32 - .byte 0x12, 0x1f, 0x23 - .byte 0x39, 0x2e, 0x2e - .byte 0x22, 0x3d, 0x27 - .byte 0x0c, 0x1e, 0x18 - .byte 0x25, 0x00, 0x17 - .byte 0x06, 0x31, 0x14 - .byte 0x13, 0x21, 0x1a - .byte 0x14, 0x20, 0x35 - .byte 0x0a, 0x3b, 0x25 - .byte 0x33, 0x08, 0x28 - .byte 0x3d, 0x02, 0x33 - .byte 0x23, 0x00, 0x13 - .byte 0x22, 0x21, 0x28 - .byte 0x30, 0x14, 0x2e - .byte 0x14, 0x32, 0x36 - .byte 0x39, 0x23, 0x1e - .byte 0x1c, 0x11, 0x30 - .byte 0x37, 0x16, 0x30 - .byte 0x15, 0x31, 0x1f - .byte 0x34, 0x28, 0x2c - .byte 0x35, 0x05, 0x29 - .byte 0x37, 0x33, 0x2a - .byte 0x1c, 0x17, 0x2e - .byte 0x10, 0x06, 0x16 - .byte 0x32, 0x1f, 0x2f - .byte 0x00, 0x29, 0x1e - .byte 0x04, 0x01, 0x16 - .byte 0x3b, 0x23, 0x1e - .byte 0x1b, 0x34, 0x2a - .byte 0x30, 0x11, 0x2b - .byte 0x03, 0x00, 0x1f - .byte 0x1d, 0x37, 0x1a - .byte 0x3a, 0x18, 0x25 - .byte 0x1c, 0x16, 0x2c - .byte 0x04, 0x3f, 0x33 - .byte 0x26, 0x23, 0x2d - .byte 0x15, 0x2c, 0x27 - .byte 0x02, 0x35, 0x27 - .byte 0x07, 0x35, 0x33 - .byte 0x1a, 0x0c, 0x10 - .byte 0x28, 0x26, 0x2c - .byte 0x2f, 0x36, 0x16 - .byte 0x37, 0x0b, 0x27 - .byte 0x1b, 0x3d, 0x18 - .byte 0x27, 0x1f, 0x20 - .byte 0x2b, 0x2a, 0x33 - .byte 0x0b, 0x0f, 0x20 - .byte 0x35, 0x3c, 0x2f - .byte 0x33, 0x21, 0x15 - .byte 0x2d, 0x26, 0x34 - .byte 0x1f, 0x1a, 0x21 - .byte 0x2f, 0x2c, 0x2a - .byte 0x1a, 0x32, 0x1a - .byte 0x3b, 0x3f, 0x21 - .byte 0x13, 0x3f, 0x13 - .byte 0x0f, 0x24, 0x22 - .byte 0x14, 0x1b, 0x10 - .byte 0x21, 0x06, 0x28 - .byte 0x25, 0x34, 0x10 - .byte 0x2e, 0x0e, 0x14 - .byte 0x3c, 0x3e, 0x25 - .byte 0x16, 0x06, 0x30 - .byte 0x0b, 0x04, 0x1f - .byte 0x3e, 0x02, 0x24 - .byte 0x0c, 0x17, 0x25 - .byte 0x2b, 0x3c, 0x2d - .byte 0x15, 0x36, 0x33 - .byte 0x18, 0x23, 0x2a - .byte 0x1d, 0x10, 0x2a - .byte 0x35, 0x17, 0x28 - .byte 0x00, 0x37, 0x24 - .byte 0x0a, 0x3b, 0x15 - .byte 0x1d, 0x0b, 0x1f - .byte 0x3c, 0x31, 0x25 - .byte 0x1d, 0x0f, 0x1d - .byte 0x20, 0x13, 0x34 - .byte 0x11, 0x2b, 0x2e - .byte 0x23, 0x0c, 0x2e - .byte 0x24, 0x02, 0x14 - .byte 0x31, 0x16, 0x19 - .byte 0x0e, 0x23, 0x35 - .byte 0x1a, 0x10, 0x16 - .byte 0x14, 0x04, 0x19 - .byte 0x2d, 0x27, 0x37 - .byte 0x33, 0x02, 0x31 - .byte 0x02, 0x04, 0x16 - .byte 0x0d, 0x22, 0x25 - .byte 0x25, 0x00, 0x16 - .byte 0x2a, 0x3f, 0x26 - .byte 0x20, 0x0c, 0x12 - .byte 0x2f, 0x2e, 0x35 - .byte 0x1b, 0x0d, 0x22 - .byte 0x1e, 0x01, 0x34 - .byte 0x05, 0x22, 0x21 - .byte 0x34, 0x2a, 0x32 - .byte 0x0b, 0x09, 0x1d - .byte 0x3f, 0x32, 0x2f - .byte 0x3d, 0x18, 0x2d - .byte 0x0b, 0x38, 0x36 - .byte 0x39, 0x17, 0x28 - .byte 0x34, 0x04, 0x24 - .byte 0x36, 0x0e, 0x2a - .byte 0x38, 0x01, 0x14 - .byte 0x3c, 0x24, 0x22 - .byte 0x21, 0x03, 0x18 - .byte 0x32, 0x2f, 0x12 - .byte 0x29, 0x24, 0x31 - .byte 0x0a, 0x3b, 0x12 - .byte 0x1a, 0x1c, 0x20 - .byte 0x30, 0x31, 0x1b - .byte 0x1a, 0x21, 0x10 - .byte 0x05, 0x29, 0x10 - .byte 0x26, 0x2d, 0x13 - .byte 0x16, 0x0c, 0x1d - .byte 0x2b, 0x06, 0x1b - .byte 0x06, 0x12, 0x14 - .byte 0x38, 0x0f, 0x35 - .byte 0x23, 0x3a, 0x2c - .byte 0x00, 0x19, 0x33 - .byte 0x29, 0x14, 0x2d - .byte 0x2a, 0x21, 0x29 - .byte 0x14, 0x31, 0x14 - .byte 0x1a, 0x06, 0x1e - .byte 0x18, 0x1b, 0x28 - .byte 0x3b, 0x16, 0x29 - .byte 0x15, 0x1e, 0x12 - .byte 0x34, 0x0a, 0x14 - .byte 0x1b, 0x05, 0x27 - .byte 0x0b, 0x01, 0x26 - .byte 0x2a, 0x22, 0x35 - .byte 0x21, 0x20, 0x18 - .byte 0x20, 0x37, 0x17 - .byte 0x14, 0x1f, 0x11 - .byte 0x1d, 0x11, 0x25 - .byte 0x24, 0x2b, 0x2f - .byte 0x07, 0x3f, 0x1f - .byte 0x2c, 0x25, 0x25 - .byte 0x2a, 0x29, 0x18 - .byte 0x11, 0x24, 0x28 - .byte 0x31, 0x2c, 0x2a - .byte 0x39, 0x0b, 0x26 - .byte 0x28, 0x10, 0x26 - .byte 0x22, 0x06, 0x16 - .byte 0x09, 0x2c, 0x13 - .byte 0x34, 0x19, 0x15 - .byte 0x3a, 0x12, 0x21 - .byte 0x1d, 0x38, 0x23 - .byte 0x12, 0x25, 0x24 - .byte 0x21, 0x30, 0x12 - .byte 0x37, 0x1a, 0x12 - .byte 0x24, 0x3b, 0x25 - .byte 0x32, 0x15, 0x23 - .byte 0x0d, 0x1a, 0x10 - .byte 0x16, 0x2e, 0x26 - .byte 0x1d, 0x14, 0x16 - .byte 0x3e, 0x2e, 0x1f - .byte 0x0a, 0x16, 0x10 - .byte 0x1d, 0x30, 0x2b - .byte 0x04, 0x3a, 0x19 - .byte 0x08, 0x2d, 0x2e - .byte 0x28, 0x1e, 0x33 - .byte 0x0a, 0x12, 0x2e - .byte 0x0d, 0x03, 0x2f - .byte 0x26, 0x3a, 0x1e - .byte 0x35, 0x3b, 0x2a - .byte 0x03, 0x1a, 0x18 - .byte 0x3f, 0x0b, 0x27 - .byte 0x04, 0x05, 0x34 - .byte 0x36, 0x0b, 0x27 - .byte 0x3b, 0x17, 0x11 - .byte 0x0d, 0x27, 0x26 - .byte 0x2c, 0x1f, 0x20 - .byte 0x26, 0x10, 0x20 - .byte 0x25, 0x23, 0x2d - .byte 0x37, 0x09, 0x13 - .byte 0x14, 0x17, 0x2d - .byte 0x2e, 0x3d, 0x23 - .byte 0x1d, 0x1a, 0x1f - .byte 0x21, 0x33, 0x2e - .byte 0x28, 0x17, 0x13 - .byte 0x26, 0x3c, 0x36 - .byte 0x14, 0x1a, 0x33 - .byte 0x32, 0x20, 0x2b - .byte 0x19, 0x3e, 0x20 - .byte 0x0c, 0x02, 0x2d - .byte 0x3c, 0x3c, 0x2a - .byte 0x30, 0x30, 0x28 - .byte 0x25, 0x3f, 0x1e - .byte 0x03, 0x17, 0x1e - .byte 0x35, 0x11, 0x1c - .byte 0x1b, 0x14, 0x2a - .byte 0x28, 0x3a, 0x23 - .byte 0x0e, 0x1f, 0x12 - .byte 0x36, 0x21, 0x20 - .byte 0x07, 0x3b, 0x10 - .byte 0x23, 0x19, 0x34 - .byte 0x0d, 0x2e, 0x18 - .byte 0x3f, 0x20, 0x25 - .byte 0x3e, 0x3b, 0x15 - .byte 0x0b, 0x2e, 0x12 - .byte 0x37, 0x0b, 0x23 - .byte 0x3d, 0x32, 0x1f - .byte 0x16, 0x03, 0x27 - .byte 0x14, 0x0c, 0x21 - .byte 0x18, 0x03, 0x30 - .byte 0x3e, 0x21, 0x13 - .byte 0x0f, 0x00, 0x32 - .byte 0x3f, 0x23, 0x16 - .byte 0x0e, 0x31, 0x1d - .byte 0x18, 0x1c, 0x1d - .byte 0x30, 0x0e, 0x1e - .byte 0x21, 0x20, 0x23 - .byte 0x3f, 0x0c, 0x1e - .byte 0x14, 0x33, 0x22 - .byte 0x22, 0x21, 0x15 - .byte 0x36, 0x05, 0x1e - .byte 0x1d, 0x31, 0x14 - .byte 0x20, 0x11, 0x37 - .byte 0x0d, 0x33, 0x19 - .byte 0x25, 0x05, 0x36 - .byte 0x1e, 0x31, 0x20 - .byte 0x35, 0x3a, 0x2f - .byte 0x32, 0x2f, 0x30 - .byte 0x14, 0x23, 0x2d - .byte 0x35, 0x1e, 0x29 - .byte 0x05, 0x05, 0x1b - .byte 0x09, 0x1f, 0x26 - .byte 0x2f, 0x0b, 0x15 - .byte 0x15, 0x11, 0x13 - .byte 0x29, 0x1b, 0x18 - .byte 0x1c, 0x13, 0x35 - .byte 0x34, 0x31, 0x23 - .byte 0x27, 0x3f, 0x2f - .byte 0x09, 0x30, 0x19 - .byte 0x23, 0x12, 0x34 - .byte 0x02, 0x2a, 0x21 - .byte 0x09, 0x3c, 0x1d - .byte 0x0c, 0x02, 0x10 - .byte 0x22, 0x05, 0x17 - .byte 0x22, 0x08, 0x1b - .byte 0x0a, 0x0f, 0x15 - .byte 0x02, 0x11, 0x13 - .byte 0x01, 0x21, 0x22 - .byte 0x16, 0x39, 0x33 - .byte 0x24, 0x38, 0x34 - .byte 0x0f, 0x1e, 0x2b - .byte 0x2b, 0x15, 0x15 - .byte 0x20, 0x22, 0x2e - .byte 0x3a, 0x3f, 0x31 - .byte 0x1a, 0x27, 0x2b - .byte 0x29, 0x34, 0x14 - .byte 0x16, 0x39, 0x2f - .byte 0x13, 0x3e, 0x16 - .byte 0x36, 0x21, 0x30 - .byte 0x00, 0x24, 0x2b - .byte 0x24, 0x21, 0x30 - .byte 0x15, 0x31, 0x13 - .byte 0x10, 0x37, 0x24 - .byte 0x08, 0x07, 0x23 - .byte 0x21, 0x09, 0x25 - .byte 0x05, 0x3c, 0x32 - .byte 0x19, 0x03, 0x25 - .byte 0x0f, 0x29, 0x2b - .byte 0x16, 0x07, 0x13 - .byte 0x3e, 0x3d, 0x25 - .byte 0x36, 0x0b, 0x28 - .byte 0x2e, 0x2b, 0x16 - .byte 0x0c, 0x31, 0x11 - .byte 0x30, 0x13, 0x2d - .byte 0x26, 0x3e, 0x37 - .byte 0x29, 0x2f, 0x2e - .byte 0x15, 0x3d, 0x17 - .byte 0x1c, 0x2e, 0x21 - .byte 0x33, 0x2f, 0x10 - .byte 0x0d, 0x05, 0x1d - .byte 0x1c, 0x1a, 0x12 - .byte 0x0e, 0x18, 0x37 - .byte 0x1b, 0x11, 0x14 - .byte 0x06, 0x14, 0x21 - .byte 0x31, 0x0e, 0x27 - .byte 0x1a, 0x03, 0x10 - .byte 0x00, 0x34, 0x31 - .byte 0x3f, 0x0b, 0x1d - .byte 0x0f, 0x12, 0x1f - .byte 0x1a, 0x15, 0x10 - .byte 0x0f, 0x00, 0x24 - .byte 0x3e, 0x0a, 0x2a - .byte 0x30, 0x2b, 0x24 - .byte 0x26, 0x31, 0x10 - .byte 0x2d, 0x2f, 0x2f - .byte 0x3f, 0x0c, 0x13 - .byte 0x12, 0x0b, 0x16 - .byte 0x15, 0x07, 0x1f - .byte 0x28, 0x10, 0x32 - .byte 0x0f, 0x17, 0x15 - .byte 0x0b, 0x27, 0x33 - .byte 0x34, 0x1d, 0x10 - .byte 0x1c, 0x3a, 0x12 - .byte 0x2c, 0x27, 0x37 - .byte 0x0a, 0x1a, 0x32 - .byte 0x05, 0x1f, 0x21 - .byte 0x24, 0x0d, 0x1f - .byte 0x1c, 0x17, 0x24 - .byte 0x2f, 0x3b, 0x32 - .byte 0x3b, 0x25, 0x10 - .byte 0x03, 0x2f, 0x21 - .byte 0x0c, 0x10, 0x23 - .byte 0x0e, 0x3a, 0x2c - .byte 0x33, 0x03, 0x2c - .byte 0x12, 0x06, 0x1c - .byte 0x2a, 0x37, 0x30 - .byte 0x3f, 0x01, 0x1e - .byte 0x35, 0x16, 0x37 - .byte 0x2c, 0x32, 0x35 - .byte 0x05, 0x11, 0x22 - .byte 0x29, 0x09, 0x20 - .byte 0x2b, 0x0d, 0x1f - .byte 0x18, 0x0d, 0x20 - .byte 0x23, 0x39, 0x16 - .byte 0x0f, 0x3a, 0x18 - .byte 0x21, 0x35, 0x2b - .byte 0x36, 0x26, 0x2b - .byte 0x23, 0x05, 0x2f - .byte 0x1b, 0x08, 0x17 - .byte 0x3e, 0x09, 0x16 - .byte 0x2d, 0x3a, 0x37 - .byte 0x15, 0x35, 0x35 - .byte 0x29, 0x0a, 0x12 - .byte 0x02, 0x39, 0x1f - .byte 0x14, 0x34, 0x33 - .byte 0x17, 0x1d, 0x18 - .byte 0x16, 0x1d, 0x1a - .byte 0x01, 0x39, 0x22 - .byte 0x1e, 0x27, 0x36 - .byte 0x32, 0x14, 0x26 - .byte 0x0a, 0x39, 0x36 - .byte 0x1f, 0x0d, 0x1e - .byte 0x0b, 0x0a, 0x19 - .byte 0x35, 0x1d, 0x34 - .byte 0x03, 0x12, 0x16 - .byte 0x0c, 0x13, 0x2e - .byte 0x0c, 0x34, 0x1e - .byte 0x10, 0x14, 0x1e - .byte 0x23, 0x32, 0x27 - .byte 0x02, 0x10, 0x29 - .byte 0x35, 0x18, 0x33 - .byte 0x33, 0x1d, 0x1a - .byte 0x3c, 0x15, 0x23 - .byte 0x3e, 0x3f, 0x22 - .byte 0x2a, 0x02, 0x2c - .byte 0x28, 0x0a, 0x2f - .byte 0x1a, 0x06, 0x35 - .byte 0x3c, 0x17, 0x2b - .byte 0x03, 0x12, 0x17 - .byte 0x2f, 0x0a, 0x26 - .byte 0x12, 0x38, 0x11 - .byte 0x36, 0x1b, 0x23 - .byte 0x01, 0x39, 0x35 - .byte 0x19, 0x19, 0x17 - .byte 0x09, 0x28, 0x22 - .byte 0x1e, 0x27, 0x2c - .byte 0x35, 0x33, 0x2c - .byte 0x27, 0x25, 0x31 - .byte 0x06, 0x31, 0x2d - .byte 0x1a, 0x39, 0x28 - .byte 0x2d, 0x04, 0x1e - .byte 0x24, 0x3e, 0x1c - .byte 0x3c, 0x30, 0x1b - .byte 0x3f, 0x3e, 0x37 - .byte 0x22, 0x36, 0x11 - .byte 0x00, 0x01, 0x1c - .byte 0x12, 0x1a, 0x10 - .byte 0x12, 0x1e, 0x2c - .byte 0x1f, 0x12, 0x2a - .byte 0x2f, 0x06, 0x19 - .byte 0x35, 0x1a, 0x18 - .byte 0x3b, 0x09, 0x36 - .byte 0x34, 0x1d, 0x13 - .byte 0x02, 0x07, 0x10 - .byte 0x20, 0x2f, 0x1d - .byte 0x0b, 0x03, 0x33 - .byte 0x1c, 0x16, 0x31 - .byte 0x05, 0x13, 0x1b - .byte 0x29, 0x06, 0x13 - .byte 0x30, 0x2d, 0x36 - .byte 0x2a, 0x2d, 0x2c - .byte 0x19, 0x34, 0x1c - .byte 0x0f, 0x15, 0x12 - .byte 0x36, 0x15, 0x2c - .byte 0x3a, 0x06, 0x1c - .byte 0x12, 0x1d, 0x26 - .byte 0x03, 0x38, 0x1d - .byte 0x01, 0x01, 0x2d - .byte 0x17, 0x2e, 0x10 - .byte 0x14, 0x17, 0x1c - .byte 0x34, 0x0f, 0x28 - .byte 0x09, 0x37, 0x1b - .byte 0x28, 0x1d, 0x26 - .byte 0x29, 0x2d, 0x36 - .byte 0x1e, 0x17, 0x28 - .byte 0x15, 0x0f, 0x1c - .byte 0x20, 0x2d, 0x10 - .byte 0x27, 0x16, 0x2e - .byte 0x14, 0x09, 0x12 - .byte 0x3b, 0x3d, 0x21 - .byte 0x25, 0x1a, 0x2c - .byte 0x00, 0x22, 0x36 - .byte 0x0d, 0x30, 0x10 - .byte 0x17, 0x19, 0x1b - .byte 0x00, 0x3b, 0x21 - .byte 0x2a, 0x28, 0x34 - .byte 0x2d, 0x0f, 0x16 - .byte 0x0a, 0x30, 0x28 - .byte 0x06, 0x00, 0x25 - .byte 0x31, 0x2e, 0x2a - .byte 0x14, 0x33, 0x28 - .byte 0x36, 0x10, 0x2e - .byte 0x05, 0x2e, 0x19 - .byte 0x19, 0x1a, 0x15 - .byte 0x2c, 0x14, 0x17 - .byte 0x37, 0x0f, 0x13 - .byte 0x32, 0x17, 0x1b - .byte 0x39, 0x18, 0x32 - .byte 0x2e, 0x32, 0x1e - .byte 0x24, 0x1d, 0x31 - .byte 0x12, 0x1d, 0x2b - .byte 0x14, 0x0c, 0x27 - .byte 0x36, 0x2e, 0x32 - .byte 0x06, 0x0a, 0x1a - .byte 0x28, 0x28, 0x20 - .byte 0x3a, 0x3a, 0x17 - .byte 0x08, 0x27, 0x36 - .byte 0x18, 0x1a, 0x10 - .byte 0x1e, 0x26, 0x1b - .byte 0x1f, 0x33, 0x1f - .byte 0x21, 0x17, 0x2f - .byte 0x01, 0x08, 0x20 - .byte 0x35, 0x03, 0x19 - .byte 0x3b, 0x02, 0x20 - .byte 0x02, 0x2d, 0x23 - .byte 0x0e, 0x17, 0x32 - .byte 0x31, 0x29, 0x11 - .byte 0x22, 0x17, 0x22 - .byte 0x3a, 0x2c, 0x23 - .byte 0x34, 0x20, 0x18 - .byte 0x00, 0x3a, 0x22 - .byte 0x25, 0x33, 0x21 - .byte 0x33, 0x04, 0x27 - .byte 0x04, 0x18, 0x32 - .byte 0x2c, 0x0c, 0x2f - .byte 0x28, 0x14, 0x2c - .byte 0x3f, 0x30, 0x2b - .byte 0x30, 0x21, 0x1d - .byte 0x01, 0x25, 0x32 - .byte 0x05, 0x23, 0x34 - .byte 0x24, 0x10, 0x30 - .byte 0x3d, 0x14, 0x1b - .byte 0x3f, 0x38, 0x2f - .byte 0x22, 0x1b, 0x32 - .byte 0x25, 0x07, 0x37 - .byte 0x0a, 0x0c, 0x1d - .byte 0x03, 0x1e, 0x1a - .byte 0x0f, 0x3c, 0x12 - .byte 0x11, 0x18, 0x1d - .byte 0x00, 0x35, 0x2f - .byte 0x32, 0x18, 0x14 - .byte 0x23, 0x30, 0x1b - .byte 0x11, 0x3d, 0x12 - .byte 0x1a, 0x16, 0x35 - .byte 0x28, 0x05, 0x24 - .byte 0x17, 0x3d, 0x37 - .byte 0x2e, 0x09, 0x2e - .byte 0x18, 0x1d, 0x17 - .byte 0x20, 0x1f, 0x18 - .byte 0x23, 0x2c, 0x2f - .byte 0x20, 0x3f, 0x16 - .byte 0x3f, 0x29, 0x2e - .byte 0x23, 0x3b, 0x29 - .byte 0x18, 0x39, 0x13 - .byte 0x1e, 0x32, 0x35 - .byte 0x14, 0x1d, 0x2a - .byte 0x35, 0x01, 0x1d - .byte 0x3e, 0x3b, 0x1e - .byte 0x22, 0x1e, 0x16 - .byte 0x18, 0x22, 0x12 - .byte 0x3e, 0x29, 0x33 - .byte 0x2f, 0x14, 0x19 - .byte 0x3b, 0x07, 0x15 - .byte 0x06, 0x3d, 0x29 - .byte 0x35, 0x37, 0x23 - .byte 0x34, 0x1d, 0x2d - .byte 0x18, 0x12, 0x1b - .byte 0x0b, 0x13, 0x24 - .byte 0x13, 0x38, 0x1c - .byte 0x1f, 0x0b, 0x1b - .byte 0x13, 0x21, 0x1c - .byte 0x06, 0x39, 0x32 - .byte 0x37, 0x3d, 0x26 - .byte 0x29, 0x26, 0x15 - .byte 0x3c, 0x33, 0x27 - .byte 0x00, 0x01, 0x2e - .byte 0x15, 0x18, 0x31 - .byte 0x0d, 0x2c, 0x13 - .byte 0x27, 0x3b, 0x20 - .byte 0x2d, 0x01, 0x26 - .byte 0x23, 0x15, 0x30 - .byte 0x24, 0x00, 0x17 - .byte 0x37, 0x3f, 0x33 - .byte 0x25, 0x24, 0x31 - .byte 0x06, 0x3b, 0x37 - .byte 0x03, 0x18, 0x1a - .byte 0x2c, 0x34, 0x14 - .byte 0x1d, 0x36, 0x18 - .byte 0x3a, 0x04, 0x23 - .byte 0x12, 0x26, 0x15 - .byte 0x2b, 0x19, 0x1a - .byte 0x29, 0x2c, 0x36 - .byte 0x01, 0x19, 0x1d - .byte 0x2f, 0x06, 0x2b - .byte 0x0c, 0x12, 0x26 - .byte 0x36, 0x32, 0x1d - .byte 0x0d, 0x12, 0x28 - .byte 0x03, 0x28, 0x13 - .byte 0x29, 0x06, 0x17 - .byte 0x03, 0x38, 0x21 - .byte 0x30, 0x2c, 0x10 - .byte 0x22, 0x00, 0x28 - .byte 0x24, 0x3b, 0x1c - .byte 0x20, 0x3e, 0x13 - .byte 0x02, 0x0c, 0x19 - .byte 0x29, 0x2c, 0x1a - .byte 0x39, 0x30, 0x22 - .byte 0x2a, 0x1f, 0x22 - .byte 0x14, 0x34, 0x2c - .byte 0x14, 0x25, 0x1b - .byte 0x06, 0x3b, 0x15 - .byte 0x06, 0x1c, 0x13 - .byte 0x15, 0x03, 0x18 - .byte 0x1e, 0x2a, 0x1b - .byte 0x17, 0x25, 0x2f - .byte 0x1c, 0x29, 0x2e - .byte 0x02, 0x32, 0x1e - .byte 0x1d, 0x28, 0x35 - .byte 0x36, 0x03, 0x34 - .byte 0x16, 0x3d, 0x2a - .byte 0x12, 0x0d, 0x13 - .byte 0x1d, 0x2d, 0x21 - .byte 0x32, 0x17, 0x2e - .byte 0x1a, 0x15, 0x26 - .byte 0x22, 0x2f, 0x15 - .byte 0x3c, 0x0e, 0x20 - .byte 0x2f, 0x27, 0x13 - .byte 0x04, 0x09, 0x32 - .byte 0x1e, 0x01, 0x34 - .byte 0x06, 0x16, 0x1e - .byte 0x2e, 0x1b, 0x1c - .byte 0x28, 0x13, 0x2a - .byte 0x30, 0x34, 0x12 - .byte 0x12, 0x32, 0x18 - .byte 0x1d, 0x1d, 0x35 - .byte 0x07, 0x1c, 0x16 - .byte 0x2d, 0x3d, 0x35 - .byte 0x1c, 0x1b, 0x24 - .byte 0x21, 0x2d, 0x1e - .byte 0x10, 0x09, 0x14 - .byte 0x3d, 0x11, 0x12 - .byte 0x25, 0x02, 0x26 - .byte 0x23, 0x02, 0x19 - .byte 0x19, 0x05, 0x14 - .byte 0x0b, 0x21, 0x1a - .byte 0x09, 0x02, 0x2c - .byte 0x18, 0x28, 0x2d - .byte 0x1e, 0x10, 0x12 - .byte 0x2e, 0x18, 0x2e - .byte 0x1f, 0x02, 0x2c - .byte 0x14, 0x17, 0x24 - .byte 0x39, 0x08, 0x32 - .byte 0x16, 0x14, 0x22 - .byte 0x16, 0x28, 0x21 - .byte 0x11, 0x10, 0x2c - .byte 0x23, 0x36, 0x2b - .byte 0x39, 0x21, 0x26 - .byte 0x0e, 0x06, 0x2d - .byte 0x3c, 0x3e, 0x26 - .byte 0x2a, 0x1b, 0x1f - .byte 0x00, 0x3c, 0x33 - .byte 0x35, 0x3f, 0x14 - .byte 0x00, 0x0b, 0x10 - .byte 0x34, 0x3c, 0x17 - .byte 0x2d, 0x07, 0x1f - .byte 0x24, 0x39, 0x27 - .byte 0x16, 0x00, 0x1d - .byte 0x33, 0x2b, 0x1e - .byte 0x0f, 0x08, 0x31 - .byte 0x3a, 0x09, 0x13 - .byte 0x0c, 0x21, 0x1c - .byte 0x2a, 0x17, 0x34 - .byte 0x29, 0x27, 0x10 - .byte 0x37, 0x1b, 0x18 - .byte 0x15, 0x08, 0x2f - .byte 0x1f, 0x16, 0x12 - .byte 0x1f, 0x28, 0x34 - .byte 0x1c, 0x20, 0x22 - .byte 0x12, 0x01, 0x12 - .byte 0x21, 0x31, 0x10 - .byte 0x22, 0x26, 0x1e - .byte 0x01, 0x3d, 0x11 - .byte 0x1e, 0x27, 0x25 - .byte 0x3d, 0x30, 0x24 - .byte 0x1d, 0x11, 0x22 - .byte 0x36, 0x30, 0x16 - .byte 0x1f, 0x3e, 0x2a - .byte 0x3c, 0x27, 0x1b - .byte 0x1f, 0x29, 0x10 - .byte 0x1e, 0x05, 0x2a - .byte 0x0a, 0x10, 0x14 - .byte 0x1f, 0x00, 0x2e - .byte 0x0b, 0x3b, 0x18 - .byte 0x0a, 0x39, 0x30 - .byte 0x37, 0x0b, 0x1f - .byte 0x1d, 0x0a, 0x29 - .byte 0x3e, 0x1c, 0x33 - .byte 0x13, 0x2e, 0x28 - .byte 0x27, 0x1b, 0x1e - .byte 0x1d, 0x02, 0x1c - .byte 0x01, 0x25, 0x14 - .byte 0x3a, 0x10, 0x1c - .byte 0x12, 0x05, 0x2a - .byte 0x30, 0x20, 0x26 - .byte 0x2f, 0x2e, 0x2e - .byte 0x03, 0x07, 0x24 - .byte 0x36, 0x04, 0x2b - .byte 0x11, 0x25, 0x2d - .byte 0x28, 0x0e, 0x2e - .byte 0x0f, 0x1d, 0x15 - .byte 0x1c, 0x28, 0x30 - .byte 0x1f, 0x23, 0x26 - .byte 0x36, 0x12, 0x37 - .byte 0x3a, 0x31, 0x10 - .byte 0x2c, 0x2c, 0x2f - .byte 0x1a, 0x0d, 0x15 - .byte 0x3f, 0x3c, 0x32 - .byte 0x35, 0x1c, 0x16 - .byte 0x33, 0x16, 0x28 - .byte 0x1d, 0x3f, 0x21 - .byte 0x2c, 0x3e, 0x2b - .byte 0x24, 0x23, 0x2f - .byte 0x32, 0x15, 0x2a - .byte 0x1b, 0x10, 0x35 - .byte 0x18, 0x37, 0x10 - .byte 0x3b, 0x1e, 0x11 - .byte 0x2b, 0x16, 0x24 - .byte 0x1d, 0x16, 0x26 - .byte 0x3c, 0x2d, 0x11 - .byte 0x15, 0x28, 0x28 - .byte 0x27, 0x27, 0x27 - .byte 0x3b, 0x3a, 0x16 - .byte 0x1a, 0x0c, 0x1a - .byte 0x15, 0x08, 0x25 - .byte 0x0b, 0x10, 0x22 - .byte 0x1a, 0x3e, 0x17 - .byte 0x28, 0x1f, 0x1e - .byte 0x01, 0x1e, 0x1e - .byte 0x1c, 0x2f, 0x10 - .byte 0x25, 0x0b, 0x34 - .byte 0x3e, 0x0c, 0x1a - .byte 0x1b, 0x10, 0x2a - .byte 0x0f, 0x14, 0x17 - .byte 0x0f, 0x3f, 0x17 - .byte 0x03, 0x15, 0x1f - .byte 0x02, 0x36, 0x17 - .byte 0x15, 0x1d, 0x18 - .byte 0x08, 0x36, 0x10 - .byte 0x14, 0x0d, 0x2b - .byte 0x0a, 0x05, 0x1d - .byte 0x26, 0x12, 0x1e - .byte 0x3e, 0x18, 0x19 - .byte 0x36, 0x18, 0x37 - .byte 0x17, 0x39, 0x2e - .byte 0x0d, 0x04, 0x19 - .byte 0x16, 0x22, 0x15 - .byte 0x3e, 0x26, 0x1f - .byte 0x00, 0x06, 0x17 - .byte 0x33, 0x22, 0x1d - .byte 0x2b, 0x39, 0x2b - .byte 0x3e, 0x31, 0x1c - .byte 0x22, 0x3f, 0x13 - .byte 0x30, 0x1c, 0x31 - .byte 0x07, 0x2b, 0x14 - .byte 0x32, 0x35, 0x1e - .byte 0x02, 0x07, 0x20 - .byte 0x0f, 0x3b, 0x11 - .byte 0x20, 0x07, 0x12 - .byte 0x2a, 0x30, 0x1d - .byte 0x28, 0x38, 0x36 - .byte 0x20, 0x01, 0x17 - .byte 0x15, 0x20, 0x21 - .byte 0x3a, 0x1b, 0x1e - .byte 0x38, 0x12, 0x24 - .byte 0x03, 0x3e, 0x1f - .byte 0x29, 0x1d, 0x13 - .byte 0x20, 0x27, 0x19 - .byte 0x12, 0x25, 0x20 - .byte 0x32, 0x33, 0x2b - .byte 0x3f, 0x05, 0x31 - .byte 0x35, 0x3c, 0x2d - .byte 0x2d, 0x02, 0x2e - .byte 0x10, 0x2a, 0x16 - .byte 0x17, 0x08, 0x31 - .byte 0x17, 0x2e, 0x2b - .byte 0x30, 0x1e, 0x15 - .byte 0x31, 0x15, 0x26 - .byte 0x08, 0x10, 0x33 - .byte 0x15, 0x01, 0x27 - .byte 0x12, 0x07, 0x2f - .byte 0x29, 0x27, 0x34 - .byte 0x3f, 0x08, 0x31 - .byte 0x1c, 0x20, 0x1a - .byte 0x33, 0x0c, 0x13 - .byte 0x18, 0x31, 0x24 - .byte 0x37, 0x2d, 0x2e - .byte 0x21, 0x18, 0x24 - .byte 0x3a, 0x27, 0x31 - .byte 0x35, 0x3e, 0x30 - .byte 0x3a, 0x14, 0x33 - .byte 0x0f, 0x1a, 0x2d - .byte 0x30, 0x2e, 0x11 - .byte 0x1a, 0x31, 0x1d - .byte 0x17, 0x3c, 0x18 - .byte 0x33, 0x31, 0x23 - .byte 0x1d, 0x39, 0x2d - .byte 0x10, 0x1d, 0x2f - .byte 0x24, 0x15, 0x1c - .byte 0x25, 0x01, 0x2b - .byte 0x22, 0x16, 0x2e - .byte 0x1b, 0x25, 0x35 - .byte 0x37, 0x10, 0x26 - .byte 0x39, 0x01, 0x36 - .byte 0x17, 0x2b, 0x14 - .byte 0x09, 0x16, 0x17 - .byte 0x20, 0x28, 0x23 - .byte 0x26, 0x3a, 0x26 - .byte 0x27, 0x2a, 0x24 - .byte 0x36, 0x02, 0x2c - .byte 0x29, 0x30, 0x35 - .byte 0x36, 0x01, 0x1f - .byte 0x28, 0x3b, 0x1d - .byte 0x23, 0x1e, 0x2d - .byte 0x11, 0x1e, 0x2c - .byte 0x2f, 0x32, 0x19 - .byte 0x3f, 0x26, 0x31 - .byte 0x38, 0x1e, 0x17 - .byte 0x05, 0x18, 0x2e - .byte 0x00, 0x2e, 0x12 - .byte 0x34, 0x3f, 0x34 - .byte 0x16, 0x10, 0x29 - .byte 0x20, 0x3d, 0x36 - .byte 0x2f, 0x16, 0x25 - .byte 0x12, 0x17, 0x10 - .byte 0x21, 0x37, 0x35 - .byte 0x25, 0x37, 0x2d - .byte 0x01, 0x08, 0x27 - .byte 0x03, 0x1f, 0x29 - .byte 0x0d, 0x2a, 0x16 - .byte 0x3a, 0x3f, 0x33 - .byte 0x2b, 0x19, 0x1d - .byte 0x2a, 0x1f, 0x29 - .byte 0x28, 0x2c, 0x10 - .byte 0x28, 0x30, 0x10 - .byte 0x39, 0x14, 0x1b - .byte 0x00, 0x18, 0x21 - .byte 0x28, 0x0c, 0x37 - .byte 0x11, 0x10, 0x11 - .byte 0x3c, 0x33, 0x32 - .byte 0x33, 0x36, 0x1a - .byte 0x36, 0x00, 0x1c - .byte 0x31, 0x1b, 0x1d - .byte 0x38, 0x1d, 0x10 - .byte 0x3c, 0x39, 0x27 - .byte 0x3a, 0x3f, 0x14 - .byte 0x19, 0x12, 0x14 - .byte 0x0d, 0x1f, 0x18 - .byte 0x00, 0x25, 0x18 - .byte 0x28, 0x1c, 0x32 - .byte 0x27, 0x03, 0x1a - .byte 0x26, 0x2d, 0x2a - .byte 0x29, 0x28, 0x27 - .byte 0x0a, 0x2a, 0x18 - .byte 0x0a, 0x1a, 0x30 - .byte 0x20, 0x1a, 0x2e - .byte 0x06, 0x0b, 0x1d - .byte 0x0f, 0x0c, 0x1c - .byte 0x35, 0x28, 0x1c - .byte 0x3d, 0x16, 0x23 - .byte 0x21, 0x1c, 0x31 - .byte 0x14, 0x1c, 0x2e - .byte 0x22, 0x32, 0x35 - .byte 0x09, 0x29, 0x30 - .byte 0x20, 0x1a, 0x10 - .byte 0x31, 0x3f, 0x2c - .byte 0x0a, 0x3d, 0x37 - .byte 0x0b, 0x2e, 0x2d - .byte 0x1f, 0x22, 0x31 - .byte 0x06, 0x07, 0x29 - .byte 0x22, 0x17, 0x2d - .byte 0x30, 0x11, 0x18 - .byte 0x0c, 0x19, 0x15 - .byte 0x07, 0x0a, 0x34 - .byte 0x18, 0x29, 0x27 - .byte 0x33, 0x0c, 0x30 - .byte 0x03, 0x1a, 0x37 - .byte 0x06, 0x01, 0x2d - .byte 0x0f, 0x3b, 0x2b - .byte 0x11, 0x1f, 0x37 - .byte 0x2b, 0x21, 0x36 - .byte 0x3f, 0x23, 0x17 - .byte 0x17, 0x07, 0x2b - .byte 0x2b, 0x0e, 0x30 - .byte 0x11, 0x39, 0x1d - .byte 0x29, 0x03, 0x33 - .byte 0x30, 0x03, 0x2f - .byte 0x3c, 0x20, 0x26 - .byte 0x03, 0x22, 0x14 - .byte 0x3a, 0x28, 0x35 - .byte 0x01, 0x28, 0x2b - .byte 0x3e, 0x15, 0x18 - .byte 0x30, 0x07, 0x17 - .byte 0x3b, 0x2c, 0x30 - .byte 0x15, 0x07, 0x2c - .byte 0x17, 0x27, 0x1d - .byte 0x3f, 0x1e, 0x33 - .byte 0x0d, 0x17, 0x10 - .byte 0x15, 0x0e, 0x30 - .byte 0x09, 0x05, 0x30 - .byte 0x2d, 0x20, 0x15 - .byte 0x3c, 0x3d, 0x30 - .byte 0x0c, 0x17, 0x1c - .byte 0x1a, 0x0d, 0x25 - .byte 0x2b, 0x2b, 0x2a - .byte 0x02, 0x16, 0x2d - .byte 0x17, 0x31, 0x17 - .byte 0x00, 0x08, 0x13 - .byte 0x37, 0x35, 0x21 - .byte 0x1e, 0x1c, 0x1f - .byte 0x2b, 0x32, 0x1c - .byte 0x10, 0x2a, 0x16 - .byte 0x3a, 0x33, 0x31 - .byte 0x17, 0x2b, 0x2a - .byte 0x0c, 0x3d, 0x11 - .byte 0x28, 0x0a, 0x30 - .byte 0x23, 0x0a, 0x26 - .byte 0x0a, 0x14, 0x24 - .byte 0x0b, 0x0f, 0x30 - .byte 0x1b, 0x1e, 0x29 - .byte 0x02, 0x35, 0x28 - .byte 0x3b, 0x02, 0x14 - .byte 0x00, 0x0f, 0x35 - .byte 0x1c, 0x3c, 0x2e - .byte 0x28, 0x38, 0x19 - .byte 0x1b, 0x11, 0x12 - .byte 0x09, 0x16, 0x10 - .byte 0x2e, 0x0d, 0x20 - .byte 0x3d, 0x04, 0x32 - .byte 0x16, 0x2c, 0x25 - .byte 0x02, 0x3d, 0x18 - .byte 0x0b, 0x13, 0x1c - .byte 0x22, 0x2a, 0x1c - .byte 0x20, 0x27, 0x22 - .byte 0x05, 0x26, 0x22 - .byte 0x12, 0x1d, 0x2c - .byte 0x08, 0x05, 0x2e - .byte 0x3f, 0x1c, 0x17 - .byte 0x24, 0x0d, 0x33 - .byte 0x36, 0x08, 0x24 - .byte 0x10, 0x22, 0x29 - .byte 0x1c, 0x0a, 0x11 - .byte 0x25, 0x0f, 0x10 - .byte 0x24, 0x38, 0x2f - .byte 0x25, 0x32, 0x1e - .byte 0x06, 0x2a, 0x29 - .byte 0x3e, 0x3a, 0x28 - .byte 0x34, 0x17, 0x33 - .byte 0x18, 0x33, 0x17 - .byte 0x07, 0x14, 0x1f - .byte 0x11, 0x17, 0x20 - .byte 0x13, 0x0e, 0x14 - .byte 0x3b, 0x1c, 0x12 - .byte 0x2a, 0x13, 0x37 - .byte 0x2a, 0x35, 0x32 - .byte 0x30, 0x02, 0x25 - .byte 0x00, 0x07, 0x1f - .byte 0x0c, 0x04, 0x2c - .byte 0x37, 0x37, 0x30 - .byte 0x25, 0x12, 0x25 - .byte 0x12, 0x22, 0x21 - .byte 0x22, 0x35, 0x33 - .byte 0x07, 0x20, 0x2d - .byte 0x27, 0x0e, 0x30 - .byte 0x34, 0x19, 0x1a - .byte 0x0a, 0x3c, 0x25 - .byte 0x07, 0x1d, 0x2b - .byte 0x31, 0x3a, 0x12 - .byte 0x1a, 0x3d, 0x37 - .byte 0x16, 0x15, 0x16 - .byte 0x39, 0x13, 0x15 - .byte 0x2d, 0x03, 0x2e - .byte 0x06, 0x39, 0x2c - .byte 0x16, 0x00, 0x13 - .byte 0x35, 0x2a, 0x35 - .byte 0x24, 0x01, 0x18 - .byte 0x24, 0x37, 0x28 - .byte 0x25, 0x1b, 0x34 - .byte 0x25, 0x19, 0x17 - .byte 0x27, 0x2f, 0x1b - .byte 0x27, 0x0d, 0x10 - .byte 0x36, 0x3c, 0x30 - .byte 0x3c, 0x33, 0x23 - .byte 0x3e, 0x27, 0x1e - .byte 0x25, 0x2d, 0x29 - .byte 0x1f, 0x12, 0x21 - .byte 0x37, 0x32, 0x1f - .byte 0x11, 0x21, 0x35 - .byte 0x30, 0x0c, 0x19 - .byte 0x25, 0x3d, 0x26 - .byte 0x17, 0x02, 0x1d - .byte 0x14, 0x2e, 0x11 - .byte 0x38, 0x13, 0x30 - .byte 0x0a, 0x2b, 0x20 - .byte 0x1e, 0x10, 0x15 - .byte 0x37, 0x30, 0x2e - .byte 0x1e, 0x04, 0x2c - .byte 0x14, 0x34, 0x19 - .byte 0x08, 0x14, 0x18 - .byte 0x0e, 0x1c, 0x30 - .byte 0x1a, 0x2e, 0x1b - .byte 0x1f, 0x39, 0x31 - .byte 0x0c, 0x1c, 0x28 - .byte 0x3e, 0x33, 0x23 - .byte 0x0f, 0x13, 0x16 - .byte 0x25, 0x39, 0x2f - .byte 0x14, 0x1b, 0x1a - .byte 0x28, 0x3e, 0x21 - .byte 0x2d, 0x19, 0x11 - .byte 0x0c, 0x34, 0x32 - .byte 0x39, 0x31, 0x19 - .byte 0x1a, 0x08, 0x34 - .byte 0x09, 0x2f, 0x11 - .byte 0x30, 0x04, 0x1c - .byte 0x02, 0x3b, 0x1b - .byte 0x33, 0x21, 0x33 - .byte 0x38, 0x02, 0x1a - .byte 0x31, 0x38, 0x32 - .byte 0x1f, 0x1d, 0x16 - .byte 0x17, 0x10, 0x1b - .byte 0x32, 0x20, 0x17 - .byte 0x00, 0x33, 0x12 - .byte 0x21, 0x0f, 0x27 - .byte 0x14, 0x19, 0x27 - .byte 0x24, 0x2c, 0x37 - .byte 0x25, 0x05, 0x2f - .byte 0x3d, 0x25, 0x11 - .byte 0x12, 0x30, 0x1a - .byte 0x16, 0x03, 0x1a - .byte 0x14, 0x09, 0x13 - .byte 0x02, 0x23, 0x22 - .byte 0x01, 0x3c, 0x10 - .byte 0x3f, 0x2d, 0x23 - .byte 0x31, 0x3f, 0x23 - .byte 0x17, 0x00, 0x33 - .byte 0x3f, 0x0f, 0x2f - .byte 0x26, 0x07, 0x15 - .byte 0x21, 0x2b, 0x2a - .byte 0x38, 0x39, 0x1e - .byte 0x09, 0x25, 0x2b - .byte 0x3b, 0x30, 0x25 - .byte 0x12, 0x2d, 0x13 - .byte 0x32, 0x19, 0x28 - .byte 0x24, 0x1c, 0x2d - .byte 0x35, 0x32, 0x26 - .byte 0x0d, 0x23, 0x1e - .byte 0x1d, 0x07, 0x21 - .byte 0x0b, 0x34, 0x17 - .byte 0x2d, 0x32, 0x32 - .byte 0x3a, 0x3c, 0x35 - .byte 0x1a, 0x10, 0x33 - .byte 0x1a, 0x07, 0x22 - .byte 0x3b, 0x1b, 0x2a - .byte 0x33, 0x1f, 0x26 - .byte 0x0e, 0x35, 0x1a - .byte 0x3b, 0x0a, 0x1c - .byte 0x11, 0x07, 0x11 - .byte 0x0d, 0x3c, 0x2d - .byte 0x1e, 0x37, 0x29 - .byte 0x11, 0x05, 0x12 - .byte 0x15, 0x2f, 0x1c - .byte 0x24, 0x31, 0x16 - .byte 0x2b, 0x21, 0x1b - .byte 0x23, 0x10, 0x31 - .byte 0x02, 0x14, 0x29 - .byte 0x26, 0x20, 0x16 - .byte 0x10, 0x17, 0x10 - .byte 0x0b, 0x0f, 0x33 - .byte 0x01, 0x2e, 0x14 - .byte 0x21, 0x0e, 0x37 - .byte 0x1a, 0x1d, 0x2f - .byte 0x1e, 0x30, 0x24 - .byte 0x04, 0x14, 0x2d - .byte 0x11, 0x00, 0x30 - .byte 0x08, 0x2a, 0x1d - .byte 0x1d, 0x22, 0x21 - .byte 0x24, 0x2c, 0x37 - .byte 0x24, 0x11, 0x12 - .byte 0x04, 0x2e, 0x28 - .byte 0x1d, 0x18, 0x23 - .byte 0x3c, 0x16, 0x16 - .byte 0x10, 0x17, 0x31 - .byte 0x20, 0x21, 0x12 - .byte 0x33, 0x3e, 0x34 - .byte 0x06, 0x13, 0x13 - .byte 0x17, 0x38, 0x2b - .byte 0x14, 0x0d, 0x15 - .byte 0x24, 0x3b, 0x2b - .byte 0x34, 0x3b, 0x1e - .byte 0x18, 0x07, 0x34 - .byte 0x37, 0x1d, 0x1f - .byte 0x0b, 0x29, 0x20 - .byte 0x12, 0x1e, 0x1d - .byte 0x1a, 0x24, 0x24 - .byte 0x3d, 0x28, 0x24 - .byte 0x0b, 0x12, 0x33 - .byte 0x1b, 0x3a, 0x22 - .byte 0x14, 0x13, 0x2a - .byte 0x31, 0x38, 0x15 - .byte 0x37, 0x2b, 0x2e - .byte 0x19, 0x1e, 0x2c - .byte 0x3f, 0x1b, 0x2a - .byte 0x33, 0x1f, 0x33 - .byte 0x3f, 0x15, 0x29 - .byte 0x01, 0x1e, 0x18 - .byte 0x1f, 0x22, 0x19 - .byte 0x33, 0x3c, 0x34 - .byte 0x1e, 0x12, 0x22 - .byte 0x0d, 0x37, 0x2c - .byte 0x0f, 0x08, 0x31 - .byte 0x2e, 0x09, 0x36 - .byte 0x01, 0x05, 0x1e - .byte 0x1c, 0x04, 0x1e - .byte 0x0c, 0x01, 0x1c - .byte 0x29, 0x28, 0x2f - .byte 0x39, 0x2d, 0x14 - .byte 0x09, 0x22, 0x36 - .byte 0x04, 0x37, 0x37 - .byte 0x2d, 0x2f, 0x35 - .byte 0x24, 0x23, 0x1b - .byte 0x08, 0x20, 0x32 - .byte 0x20, 0x1f, 0x34 - .byte 0x02, 0x31, 0x19 - .byte 0x18, 0x13, 0x36 - .byte 0x06, 0x2b, 0x1e - .byte 0x0e, 0x1b, 0x10 - .byte 0x2f, 0x0e, 0x1c - .byte 0x11, 0x38, 0x13 - .byte 0x01, 0x37, 0x19 - .byte 0x14, 0x11, 0x26 - .byte 0x31, 0x3d, 0x33 - .byte 0x1d, 0x1b, 0x34 - .byte 0x25, 0x31, 0x2f - .byte 0x11, 0x0a, 0x2f - .byte 0x39, 0x17, 0x1b - .byte 0x05, 0x0e, 0x13 - .byte 0x29, 0x25, 0x22 - .byte 0x15, 0x0d, 0x20 - .byte 0x2b, 0x27, 0x21 - .byte 0x3e, 0x24, 0x27 - .byte 0x2a, 0x2b, 0x16 - .byte 0x24, 0x3d, 0x15 - .byte 0x15, 0x30, 0x31 - .byte 0x0f, 0x33, 0x24 - .byte 0x06, 0x16, 0x13 - .byte 0x06, 0x31, 0x10 - .byte 0x2e, 0x3f, 0x10 - .byte 0x05, 0x0d, 0x2f - .byte 0x3c, 0x1f, 0x19 - .byte 0x12, 0x13, 0x24 - .byte 0x0f, 0x33, 0x36 - .byte 0x15, 0x3b, 0x33 - .byte 0x03, 0x0f, 0x2a - .byte 0x3b, 0x3c, 0x2c - .byte 0x36, 0x09, 0x29 - .byte 0x11, 0x3b, 0x27 - .byte 0x28, 0x2b, 0x31 - .byte 0x1a, 0x0e, 0x2f - .byte 0x39, 0x2c, 0x31 - .byte 0x0e, 0x3c, 0x35 - .byte 0x2c, 0x24, 0x33 - .byte 0x3d, 0x11, 0x2b - .byte 0x07, 0x3c, 0x37 - .byte 0x14, 0x18, 0x13 - .byte 0x1d, 0x3f, 0x2e - .byte 0x30, 0x12, 0x25 - .byte 0x26, 0x1d, 0x11 - .byte 0x07, 0x11, 0x1e - .byte 0x34, 0x01, 0x11 - .byte 0x0b, 0x39, 0x21 - .byte 0x29, 0x02, 0x29 - .byte 0x15, 0x10, 0x1a - .byte 0x30, 0x1f, 0x35 - .byte 0x3c, 0x2b, 0x2a - .byte 0x30, 0x3b, 0x36 - .byte 0x20, 0x1a, 0x23 - .byte 0x32, 0x24, 0x2b - .byte 0x15, 0x20, 0x1c - .byte 0x25, 0x3d, 0x36 - .byte 0x2d, 0x14, 0x31 - .byte 0x18, 0x23, 0x17 - .byte 0x18, 0x05, 0x13 - .byte 0x34, 0x30, 0x37 - .byte 0x0e, 0x39, 0x23 - .byte 0x1d, 0x1f, 0x17 - .byte 0x01, 0x15, 0x2f - .byte 0x0b, 0x3e, 0x1b - .byte 0x0d, 0x19, 0x2e - .byte 0x31, 0x38, 0x1c - .byte 0x15, 0x34, 0x15 - .byte 0x13, 0x19, 0x29 - .byte 0x19, 0x14, 0x27 - .byte 0x15, 0x18, 0x23 - .byte 0x29, 0x0c, 0x27 - .byte 0x2d, 0x0e, 0x17 - .byte 0x34, 0x18, 0x10 - .byte 0x3b, 0x1e, 0x29 - .byte 0x34, 0x2c, 0x22 - .byte 0x31, 0x08, 0x13 - .byte 0x1d, 0x18, 0x1a - .byte 0x1c, 0x0b, 0x2a - .byte 0x19, 0x1e, 0x1a - .byte 0x23, 0x27, 0x17 - .byte 0x3b, 0x0e, 0x37 - .byte 0x19, 0x2b, 0x16 - .byte 0x2f, 0x08, 0x21 - .byte 0x37, 0x02, 0x20 - .byte 0x0b, 0x32, 0x30 - .byte 0x16, 0x05, 0x30 - .byte 0x13, 0x05, 0x1a - .byte 0x07, 0x39, 0x19 - .byte 0x0c, 0x3b, 0x2a - .byte 0x15, 0x05, 0x30 - .byte 0x30, 0x05, 0x19 - .byte 0x13, 0x00, 0x12 - .byte 0x27, 0x16, 0x2a - .byte 0x0f, 0x28, 0x27 - .byte 0x0c, 0x23, 0x2f - .byte 0x39, 0x28, 0x2a - .byte 0x24, 0x25, 0x1f - .byte 0x18, 0x29, 0x14 - .byte 0x16, 0x05, 0x1a - .byte 0x35, 0x2f, 0x26 - .byte 0x0a, 0x3a, 0x29 - .byte 0x34, 0x2c, 0x36 - .byte 0x2e, 0x3a, 0x15 - .byte 0x1a, 0x0a, 0x2d - .byte 0x16, 0x14, 0x2e - .byte 0x35, 0x28, 0x2a - .byte 0x35, 0x0f, 0x11 - .byte 0x11, 0x32, 0x19 - .byte 0x20, 0x1a, 0x28 - .byte 0x17, 0x1a, 0x28 - .byte 0x16, 0x33, 0x25 - .byte 0x13, 0x2c, 0x29 - .byte 0x09, 0x16, 0x33 - .byte 0x1d, 0x27, 0x26 - .byte 0x15, 0x0c, 0x2f - .byte 0x22, 0x1c, 0x19 - .byte 0x29, 0x33, 0x10 - .byte 0x2d, 0x11, 0x1b - .byte 0x16, 0x19, 0x2e - .byte 0x0d, 0x0c, 0x28 - .byte 0x37, 0x3a, 0x34 - .byte 0x2a, 0x1d, 0x37 - .byte 0x30, 0x0a, 0x36 - .byte 0x24, 0x39, 0x1b - .byte 0x39, 0x0a, 0x32 - .byte 0x11, 0x03, 0x2d - .byte 0x32, 0x1d, 0x30 - .byte 0x38, 0x1e, 0x27 - .byte 0x2e, 0x17, 0x18 - .byte 0x16, 0x17, 0x2a - .byte 0x36, 0x3b, 0x31 - .byte 0x17, 0x04, 0x19 - .byte 0x3a, 0x25, 0x2d - .byte 0x00, 0x36, 0x27 - .byte 0x25, 0x12, 0x33 - .byte 0x06, 0x0a, 0x14 - .byte 0x11, 0x05, 0x2f - .byte 0x03, 0x35, 0x2f - .byte 0x0b, 0x34, 0x29 - .byte 0x00, 0x31, 0x13 - .byte 0x27, 0x0f, 0x1c - .byte 0x1d, 0x06, 0x2d - .byte 0x1c, 0x30, 0x27 - .byte 0x2f, 0x2a, 0x27 - .byte 0x16, 0x20, 0x31 - .byte 0x33, 0x2b, 0x2b - .byte 0x05, 0x30, 0x36 - .byte 0x29, 0x23, 0x35 - .byte 0x10, 0x16, 0x2f - .byte 0x2d, 0x20, 0x29 - .byte 0x37, 0x13, 0x24 - .byte 0x2d, 0x0e, 0x25 - .byte 0x08, 0x0a, 0x18 - .byte 0x0f, 0x03, 0x1b - .byte 0x31, 0x0c, 0x37 - .byte 0x1e, 0x34, 0x31 - .byte 0x1b, 0x0e, 0x25 - .byte 0x1a, 0x07, 0x34 - .byte 0x0d, 0x3c, 0x33 - .byte 0x00, 0x3a, 0x36 - .byte 0x04, 0x27, 0x12 - .byte 0x23, 0x18, 0x24 - .byte 0x0d, 0x0b, 0x18 - .byte 0x31, 0x32, 0x37 - .byte 0x00, 0x0d, 0x21 - .byte 0x32, 0x10, 0x12 - .byte 0x26, 0x0d, 0x19 - .byte 0x29, 0x24, 0x2b - .byte 0x3d, 0x21, 0x1f - .byte 0x1e, 0x1b, 0x28 - .byte 0x0d, 0x12, 0x28 - .byte 0x35, 0x1e, 0x23 - .byte 0x0a, 0x2e, 0x22 - .byte 0x27, 0x27, 0x35 - .byte 0x01, 0x0e, 0x20 - .byte 0x31, 0x39, 0x29 - .byte 0x3b, 0x24, 0x36 - .byte 0x14, 0x10, 0x33 - .byte 0x18, 0x2c, 0x26 - .byte 0x04, 0x2d, 0x15 - .byte 0x1a, 0x11, 0x37 - .byte 0x0f, 0x0b, 0x14 - .byte 0x0e, 0x2c, 0x2c - .byte 0x21, 0x17, 0x2c - .byte 0x16, 0x21, 0x35 - .byte 0x3e, 0x10, 0x10 - .byte 0x0a, 0x05, 0x1e - .byte 0x3b, 0x09, 0x13 - .byte 0x26, 0x18, 0x1e - .byte 0x23, 0x0c, 0x1a - .byte 0x33, 0x37, 0x1f - .byte 0x09, 0x12, 0x35 - .byte 0x3d, 0x0d, 0x15 - .byte 0x36, 0x06, 0x24 - .byte 0x33, 0x30, 0x29 - .byte 0x3b, 0x0f, 0x28 - .byte 0x34, 0x2a, 0x2c - .byte 0x02, 0x12, 0x35 - .byte 0x09, 0x22, 0x31 - .byte 0x3b, 0x31, 0x1c - .byte 0x33, 0x22, 0x27 - .byte 0x3d, 0x34, 0x15 - .byte 0x14, 0x22, 0x28 - .byte 0x28, 0x10, 0x1e - .byte 0x21, 0x31, 0x10 - .byte 0x2d, 0x16, 0x21 - .byte 0x1e, 0x05, 0x33 - .byte 0x0f, 0x30, 0x31 - .byte 0x0e, 0x1a, 0x35 - .byte 0x38, 0x2e, 0x28 - .byte 0x26, 0x37, 0x1e - .byte 0x2b, 0x13, 0x33 - .byte 0x1f, 0x1e, 0x37 - .byte 0x0a, 0x28, 0x24 - .byte 0x32, 0x1c, 0x1a - .byte 0x1f, 0x3f, 0x19 - .byte 0x39, 0x39, 0x29 - .byte 0x2c, 0x1b, 0x14 - .byte 0x15, 0x2a, 0x17 - .byte 0x32, 0x0f, 0x21 - .byte 0x30, 0x21, 0x18 - .byte 0x23, 0x2a, 0x27 - .byte 0x3d, 0x07, 0x10 - .byte 0x0b, 0x3f, 0x2f - .byte 0x31, 0x02, 0x2e - .byte 0x08, 0x39, 0x2f - .byte 0x3f, 0x20, 0x18 - .byte 0x2d, 0x34, 0x11 - .byte 0x2e, 0x34, 0x10 - .byte 0x26, 0x12, 0x23 - .byte 0x25, 0x0a, 0x37 - .byte 0x34, 0x09, 0x25 - .byte 0x0a, 0x3e, 0x16 - .byte 0x1a, 0x17, 0x11 - .byte 0x38, 0x1c, 0x20 - .byte 0x11, 0x21, 0x26 - .byte 0x05, 0x0f, 0x18 - .byte 0x26, 0x2b, 0x32 - .byte 0x0a, 0x0c, 0x16 - .byte 0x03, 0x29, 0x1d - .byte 0x29, 0x3b, 0x23 - .byte 0x16, 0x1b, 0x29 - .byte 0x07, 0x09, 0x17 - .byte 0x17, 0x2c, 0x1c - .byte 0x35, 0x33, 0x30 - .byte 0x17, 0x12, 0x1e - .byte 0x3d, 0x1a, 0x2b - .byte 0x21, 0x1d, 0x10 - .byte 0x0a, 0x08, 0x17 - .byte 0x14, 0x3c, 0x36 - .byte 0x28, 0x36, 0x36 - .byte 0x3b, 0x20, 0x1b - .byte 0x13, 0x22, 0x1d - .byte 0x13, 0x3a, 0x15 - .byte 0x02, 0x23, 0x2c - .byte 0x3e, 0x19, 0x14 - .byte 0x39, 0x3c, 0x1a - .byte 0x10, 0x08, 0x1e - .byte 0x0a, 0x13, 0x29 - .byte 0x3f, 0x38, 0x2c - .byte 0x07, 0x23, 0x1f - .byte 0x19, 0x2a, 0x24 - .byte 0x14, 0x3c, 0x1f - .byte 0x0d, 0x04, 0x37 - .byte 0x1a, 0x2f, 0x28 - .byte 0x2a, 0x1d, 0x1e - .byte 0x11, 0x37, 0x29 - .byte 0x28, 0x27, 0x12 - .byte 0x0d, 0x00, 0x26 - .byte 0x0a, 0x3c, 0x26 - .byte 0x1f, 0x1c, 0x33 - .byte 0x04, 0x3a, 0x2c - .byte 0x24, 0x3d, 0x2b - .byte 0x26, 0x31, 0x2f - .byte 0x13, 0x1c, 0x21 - .byte 0x3e, 0x12, 0x23 - .byte 0x36, 0x0a, 0x1a - .byte 0x2d, 0x1e, 0x19 - .byte 0x05, 0x1f, 0x1b - .byte 0x1e, 0x0a, 0x1f - .byte 0x20, 0x08, 0x24 - .byte 0x2c, 0x0c, 0x33 - .byte 0x1d, 0x1f, 0x11 - .byte 0x0e, 0x12, 0x10 - .byte 0x27, 0x12, 0x19 - .byte 0x2a, 0x13, 0x31 - .byte 0x1c, 0x04, 0x30 - .byte 0x1a, 0x38, 0x1f - .byte 0x2c, 0x35, 0x25 - .byte 0x07, 0x0b, 0x33 - .byte 0x2d, 0x02, 0x1a - .byte 0x2a, 0x35, 0x35 - .byte 0x16, 0x2f, 0x14 - .byte 0x11, 0x31, 0x33 - .byte 0x2c, 0x31, 0x1e - .byte 0x3c, 0x3a, 0x27 - .byte 0x3c, 0x2b, 0x12 - .byte 0x27, 0x1d, 0x12 - .byte 0x36, 0x2c, 0x2b - .byte 0x25, 0x3b, 0x35 - .byte 0x12, 0x3d, 0x27 - .byte 0x13, 0x23, 0x19 - .byte 0x33, 0x2c, 0x26 - .byte 0x09, 0x3c, 0x12 - .byte 0x15, 0x1a, 0x23 - .byte 0x21, 0x07, 0x1a - .byte 0x22, 0x25, 0x20 - .byte 0x19, 0x1b, 0x2c - .byte 0x3a, 0x19, 0x35 - .byte 0x05, 0x26, 0x1d - .byte 0x23, 0x22, 0x25 - .byte 0x0e, 0x1e, 0x11 - .byte 0x13, 0x30, 0x12 - .byte 0x2c, 0x22, 0x25 - .byte 0x0a, 0x1d, 0x18 - .byte 0x23, 0x3e, 0x1d - .byte 0x02, 0x28, 0x25 - .byte 0x21, 0x0e, 0x20 - .byte 0x21, 0x22, 0x37 - .byte 0x18, 0x33, 0x27 - .byte 0x23, 0x23, 0x31 - .byte 0x24, 0x1a, 0x1a - .byte 0x3e, 0x25, 0x24 - .byte 0x24, 0x01, 0x18 - .byte 0x34, 0x10, 0x22 - .byte 0x07, 0x00, 0x37 - .byte 0x06, 0x20, 0x20 - .byte 0x3a, 0x02, 0x2b - .byte 0x07, 0x2c, 0x2c - .byte 0x09, 0x2f, 0x2a - .byte 0x01, 0x32, 0x2c - .byte 0x00, 0x35, 0x13 - .byte 0x2b, 0x3c, 0x1f - .byte 0x36, 0x37, 0x1e - .byte 0x20, 0x35, 0x1d - .byte 0x0c, 0x07, 0x33 - .byte 0x16, 0x08, 0x12 - .byte 0x3f, 0x36, 0x11 - .byte 0x0b, 0x1f, 0x2d - .byte 0x21, 0x20, 0x33 - .byte 0x17, 0x1a, 0x2e - .byte 0x16, 0x01, 0x2f - .byte 0x2f, 0x1c, 0x34 - .byte 0x29, 0x31, 0x2e - .byte 0x3b, 0x38, 0x31 - .byte 0x0d, 0x16, 0x12 - .byte 0x07, 0x29, 0x24 - .byte 0x33, 0x3c, 0x34 - .byte 0x3e, 0x1e, 0x18 - .byte 0x30, 0x02, 0x34 - .byte 0x2a, 0x34, 0x1b - .byte 0x2e, 0x23, 0x18 - .byte 0x34, 0x00, 0x1f - .byte 0x20, 0x0e, 0x28 - .byte 0x15, 0x33, 0x37 - .byte 0x27, 0x35, 0x23 - .byte 0x37, 0x3e, 0x11 - .byte 0x32, 0x2e, 0x36 - .byte 0x3a, 0x02, 0x2b - .byte 0x00, 0x36, 0x1d - .byte 0x13, 0x29, 0x16 - .byte 0x08, 0x2b, 0x37 - .byte 0x08, 0x02, 0x27 - .byte 0x32, 0x2d, 0x34 - .byte 0x30, 0x36, 0x29 - .byte 0x2e, 0x10, 0x12 - .byte 0x3c, 0x2e, 0x2a - .byte 0x04, 0x33, 0x30 - .byte 0x3f, 0x01, 0x22 - .byte 0x37, 0x14, 0x1d - .byte 0x27, 0x00, 0x2f - .byte 0x0c, 0x39, 0x26 - .byte 0x27, 0x04, 0x21 - .byte 0x19, 0x08, 0x1d - .byte 0x01, 0x04, 0x1e - .byte 0x27, 0x1b, 0x2b - .byte 0x31, 0x17, 0x1f - .byte 0x07, 0x01, 0x2d - .byte 0x2e, 0x3b, 0x1f - .byte 0x34, 0x24, 0x31 - .byte 0x32, 0x2b, 0x24 - .byte 0x0e, 0x07, 0x1e - .byte 0x0f, 0x33, 0x10 - .byte 0x16, 0x21, 0x32 - .byte 0x39, 0x02, 0x1a - .byte 0x33, 0x3d, 0x22 - .byte 0x0c, 0x25, 0x1a - .byte 0x29, 0x29, 0x28 - .byte 0x3a, 0x32, 0x26 - .byte 0x0b, 0x13, 0x22 - .byte 0x1f, 0x0f, 0x1c - .byte 0x04, 0x2c, 0x20 - .byte 0x39, 0x1a, 0x1b - .byte 0x1a, 0x2a, 0x1f - .byte 0x24, 0x13, 0x1a - .byte 0x31, 0x3b, 0x33 - .byte 0x39, 0x23, 0x28 - .byte 0x31, 0x07, 0x31 - .byte 0x1f, 0x10, 0x20 - .byte 0x29, 0x17, 0x32 - .byte 0x26, 0x3b, 0x2d - .byte 0x02, 0x3c, 0x1c - .byte 0x0e, 0x00, 0x20 - .byte 0x14, 0x3e, 0x37 - .byte 0x01, 0x0f, 0x2d - .byte 0x06, 0x12, 0x27 - .byte 0x30, 0x13, 0x19 - .byte 0x00, 0x33, 0x2a - .byte 0x0c, 0x07, 0x27 - .byte 0x11, 0x3a, 0x1c - .byte 0x15, 0x0a, 0x13 - .byte 0x1f, 0x0d, 0x2a - .byte 0x37, 0x07, 0x2a - .byte 0x34, 0x35, 0x34 - .byte 0x28, 0x16, 0x27 - .byte 0x06, 0x02, 0x36 - .byte 0x09, 0x23, 0x30 - .byte 0x14, 0x02, 0x28 - .byte 0x39, 0x32, 0x34 - .byte 0x24, 0x35, 0x12 - .byte 0x12, 0x22, 0x26 - .byte 0x09, 0x07, 0x33 - .byte 0x0f, 0x3e, 0x1e - .byte 0x00, 0x3c, 0x33 - .byte 0x10, 0x37, 0x14 - .byte 0x3a, 0x03, 0x25 - .byte 0x2d, 0x1e, 0x24 - .byte 0x36, 0x36, 0x26 - .byte 0x1f, 0x3c, 0x1a - .byte 0x37, 0x33, 0x25 - .byte 0x23, 0x13, 0x1f - .byte 0x33, 0x0d, 0x13 - .byte 0x25, 0x30, 0x1e - .byte 0x17, 0x03, 0x18 - .byte 0x18, 0x18, 0x14 - .byte 0x30, 0x07, 0x22 - .byte 0x3e, 0x33, 0x21 - .byte 0x14, 0x37, 0x16 - .byte 0x16, 0x00, 0x12 - .byte 0x2c, 0x12, 0x2f - .byte 0x25, 0x3f, 0x1e - .byte 0x24, 0x19, 0x16 - .byte 0x16, 0x0f, 0x35 - .byte 0x2d, 0x10, 0x11 - .byte 0x24, 0x2a, 0x28 - .byte 0x19, 0x25, 0x2e - .byte 0x0c, 0x16, 0x1f - .byte 0x38, 0x21, 0x36 - .byte 0x3d, 0x1a, 0x2f - .byte 0x3b, 0x32, 0x12 - .byte 0x36, 0x13, 0x29 - .byte 0x0e, 0x30, 0x31 - .byte 0x19, 0x07, 0x2f - .byte 0x25, 0x23, 0x28 - .byte 0x20, 0x08, 0x29 - .byte 0x2a, 0x00, 0x30 - .byte 0x30, 0x38, 0x23 - .byte 0x1e, 0x0f, 0x1f - .byte 0x3b, 0x1b, 0x30 - .byte 0x3a, 0x37, 0x2f - .byte 0x39, 0x37, 0x35 - .byte 0x39, 0x2d, 0x2f - .byte 0x1f, 0x2e, 0x1e - .byte 0x1a, 0x2b, 0x1e - .byte 0x14, 0x17, 0x20 - .byte 0x2f, 0x03, 0x11 - .byte 0x1d, 0x00, 0x30 - .byte 0x17, 0x2b, 0x1d - .byte 0x35, 0x28, 0x25 - .byte 0x3b, 0x0f, 0x11 - .byte 0x09, 0x04, 0x2e - .byte 0x23, 0x11, 0x1e - .byte 0x13, 0x37, 0x1e - .byte 0x37, 0x37, 0x1e - .byte 0x07, 0x01, 0x32 - .byte 0x14, 0x06, 0x32 - .byte 0x11, 0x0c, 0x2e - .byte 0x36, 0x2e, 0x24 - .byte 0x15, 0x2a, 0x1c - .byte 0x22, 0x15, 0x34 - .byte 0x2c, 0x1e, 0x35 - .byte 0x22, 0x27, 0x33 - .byte 0x19, 0x3f, 0x2d - .byte 0x21, 0x33, 0x15 - .byte 0x26, 0x1a, 0x11 - .byte 0x16, 0x3e, 0x12 - .byte 0x2b, 0x24, 0x15 - .byte 0x3c, 0x0f, 0x2d - .byte 0x31, 0x15, 0x36 - .byte 0x3f, 0x24, 0x1d - .byte 0x25, 0x01, 0x37 - .byte 0x33, 0x16, 0x1a - .byte 0x1f, 0x0e, 0x10 - .byte 0x2f, 0x0b, 0x12 - .byte 0x2a, 0x1a, 0x25 - .byte 0x17, 0x0a, 0x35 - .byte 0x09, 0x28, 0x35 - .byte 0x02, 0x13, 0x36 - .byte 0x34, 0x2f, 0x17 - .byte 0x03, 0x04, 0x31 - .byte 0x3e, 0x26, 0x11 - .byte 0x35, 0x33, 0x31 - .byte 0x22, 0x17, 0x23 - .byte 0x1d, 0x05, 0x2b - .byte 0x2e, 0x27, 0x20 - .byte 0x03, 0x2b, 0x1d - .byte 0x01, 0x19, 0x1e - .byte 0x0e, 0x05, 0x18 - .byte 0x16, 0x25, 0x17 - .byte 0x02, 0x28, 0x18 - .byte 0x19, 0x0b, 0x24 - .byte 0x3e, 0x35, 0x16 - .byte 0x2e, 0x29, 0x25 - .byte 0x3e, 0x38, 0x1e - .byte 0x3a, 0x2f, 0x12 - .byte 0x14, 0x17, 0x2d - .byte 0x11, 0x12, 0x30 - .byte 0x15, 0x31, 0x18 - .byte 0x08, 0x0b, 0x29 - .byte 0x2d, 0x00, 0x33 - .byte 0x2c, 0x06, 0x1a - .byte 0x14, 0x1c, 0x2e - .byte 0x04, 0x08, 0x12 - .byte 0x1b, 0x2b, 0x2d - .byte 0x2a, 0x37, 0x33 - .byte 0x10, 0x27, 0x2c - .byte 0x1d, 0x0e, 0x34 - .byte 0x20, 0x02, 0x12 - .byte 0x1e, 0x1a, 0x2e - .byte 0x07, 0x0b, 0x10 - .byte 0x36, 0x1e, 0x33 - .byte 0x2b, 0x28, 0x1b - .byte 0x31, 0x25, 0x1f - .byte 0x38, 0x3a, 0x2f - .byte 0x39, 0x30, 0x2f - .byte 0x12, 0x09, 0x14 - .byte 0x0e, 0x08, 0x19 - .byte 0x00, 0x0d, 0x2c - .byte 0x1b, 0x0e, 0x34 - .byte 0x11, 0x25, 0x15 - .byte 0x0c, 0x2d, 0x26 - .byte 0x36, 0x2c, 0x16 - .byte 0x31, 0x31, 0x2c - .byte 0x03, 0x1a, 0x16 - .byte 0x1c, 0x32, 0x14 - .byte 0x0a, 0x3e, 0x36 - .byte 0x33, 0x1b, 0x27 - .byte 0x1f, 0x32, 0x18 - .byte 0x33, 0x26, 0x33 - .byte 0x1a, 0x13, 0x1a - .byte 0x0f, 0x34, 0x1c - .byte 0x35, 0x2c, 0x2f - .byte 0x38, 0x03, 0x18 - .byte 0x15, 0x0f, 0x27 - .byte 0x31, 0x29, 0x20 - .byte 0x28, 0x0e, 0x28 - .byte 0x31, 0x2c, 0x2e - .byte 0x15, 0x19, 0x1b - .byte 0x10, 0x03, 0x2f - .byte 0x2e, 0x2a, 0x32 - .byte 0x2a, 0x27, 0x1b - .byte 0x36, 0x04, 0x1e - .byte 0x3b, 0x04, 0x21 - .byte 0x07, 0x2f, 0x19 - .byte 0x27, 0x1d, 0x1d - .byte 0x3c, 0x3d, 0x2e - .byte 0x25, 0x08, 0x32 - .byte 0x3b, 0x34, 0x2a - .byte 0x0c, 0x10, 0x13 - .byte 0x25, 0x35, 0x1a - .byte 0x2f, 0x19, 0x28 - .byte 0x17, 0x00, 0x2b - .byte 0x0a, 0x1c, 0x17 - .byte 0x0a, 0x11, 0x1b - .byte 0x35, 0x13, 0x37 - .byte 0x29, 0x1c, 0x28 - .byte 0x0c, 0x31, 0x35 - .byte 0x3c, 0x10, 0x1a - .byte 0x1b, 0x3a, 0x2d - .byte 0x3a, 0x1c, 0x18 - .byte 0x22, 0x10, 0x2d - .byte 0x1c, 0x3c, 0x12 - .byte 0x17, 0x18, 0x2a - .byte 0x0b, 0x2b, 0x2f - .byte 0x2d, 0x04, 0x2e - .byte 0x3c, 0x13, 0x23 - .byte 0x01, 0x1c, 0x2e - .byte 0x14, 0x16, 0x22 - .byte 0x0c, 0x24, 0x13 - .byte 0x35, 0x37, 0x34 - .byte 0x1b, 0x30, 0x1e - .byte 0x3a, 0x1c, 0x20 - .byte 0x06, 0x06, 0x36 - .byte 0x09, 0x15, 0x1a - .byte 0x1b, 0x1a, 0x27 - .byte 0x0f, 0x33, 0x35 - .byte 0x37, 0x06, 0x23 - .byte 0x3a, 0x12, 0x1d - .byte 0x00, 0x16, 0x29 - .byte 0x0e, 0x1d, 0x35 - .byte 0x3f, 0x38, 0x16 - .byte 0x2a, 0x3c, 0x34 - .byte 0x13, 0x32, 0x10 - .byte 0x17, 0x2c, 0x37 - .byte 0x29, 0x2a, 0x1e - .byte 0x35, 0x2f, 0x2d - .byte 0x3c, 0x2a, 0x11 - .byte 0x28, 0x13, 0x21 - .byte 0x19, 0x1e, 0x34 - .byte 0x0c, 0x06, 0x2d - .byte 0x09, 0x04, 0x1c - .byte 0x1d, 0x2f, 0x26 - .byte 0x39, 0x07, 0x16 - .byte 0x14, 0x04, 0x2d - .byte 0x3a, 0x2f, 0x2e - .byte 0x29, 0x15, 0x35 - .byte 0x24, 0x02, 0x36 - .byte 0x3f, 0x02, 0x1a - .byte 0x0f, 0x18, 0x24 - .byte 0x16, 0x1d, 0x19 - .byte 0x14, 0x16, 0x10 - .byte 0x29, 0x1b, 0x13 - .byte 0x15, 0x0e, 0x19 - .byte 0x3a, 0x2e, 0x2b - .byte 0x08, 0x30, 0x15 - .byte 0x35, 0x16, 0x30 - .byte 0x2e, 0x18, 0x35 - .byte 0x3b, 0x0b, 0x1c - .byte 0x3a, 0x18, 0x13 - .byte 0x29, 0x13, 0x1e - .byte 0x20, 0x13, 0x27 - .byte 0x04, 0x1d, 0x34 - .byte 0x00, 0x38, 0x19 - .byte 0x08, 0x39, 0x32 - .byte 0x20, 0x10, 0x26 - .byte 0x08, 0x02, 0x28 - .byte 0x3f, 0x0f, 0x16 - .byte 0x30, 0x1f, 0x19 - .byte 0x20, 0x2d, 0x10 - .byte 0x38, 0x17, 0x1c - .byte 0x18, 0x31, 0x27 - .byte 0x33, 0x38, 0x30 - .byte 0x16, 0x33, 0x23 - .byte 0x00, 0x01, 0x36 - .byte 0x0d, 0x02, 0x23 - .byte 0x39, 0x04, 0x1f - .byte 0x0e, 0x30, 0x24 - .byte 0x06, 0x01, 0x2c - .byte 0x34, 0x33, 0x35 - .byte 0x16, 0x34, 0x2e - .byte 0x32, 0x16, 0x24 - .byte 0x26, 0x39, 0x34 - .byte 0x1f, 0x3c, 0x1d - .byte 0x28, 0x1d, 0x37 - .byte 0x17, 0x15, 0x2b - .byte 0x27, 0x39, 0x30 - .byte 0x0b, 0x1b, 0x18 - .byte 0x35, 0x20, 0x2d - .byte 0x0b, 0x35, 0x1c - .byte 0x03, 0x0e, 0x21 - .byte 0x06, 0x0c, 0x20 - .byte 0x02, 0x18, 0x34 - .byte 0x1e, 0x36, 0x2d - .byte 0x16, 0x0c, 0x19 - .byte 0x25, 0x09, 0x2c - .byte 0x37, 0x05, 0x2e - .byte 0x2e, 0x2b, 0x2c - .byte 0x24, 0x1a, 0x14 - .byte 0x27, 0x04, 0x10 - .byte 0x32, 0x38, 0x33 - .byte 0x37, 0x15, 0x35 - .byte 0x11, 0x3f, 0x1d - .byte 0x23, 0x23, 0x1f - .byte 0x29, 0x3f, 0x1d - .byte 0x1a, 0x3c, 0x2b - .byte 0x1b, 0x2c, 0x2c - .byte 0x38, 0x3b, 0x36 - .byte 0x04, 0x13, 0x33 - .byte 0x2c, 0x14, 0x12 - .byte 0x1a, 0x09, 0x1b - .byte 0x36, 0x11, 0x24 - .byte 0x3a, 0x3f, 0x11 - .byte 0x01, 0x0e, 0x2b - .byte 0x3b, 0x03, 0x2a - .byte 0x08, 0x0d, 0x2b - .byte 0x2b, 0x13, 0x27 - .byte 0x3a, 0x3c, 0x1c - .byte 0x3a, 0x15, 0x2a - .byte 0x24, 0x00, 0x17 - .byte 0x3e, 0x0a, 0x15 - .byte 0x0c, 0x29, 0x2d - .byte 0x1f, 0x15, 0x30 - .byte 0x35, 0x18, 0x19 - .byte 0x3d, 0x37, 0x37 - .byte 0x12, 0x38, 0x1b - .byte 0x3b, 0x02, 0x20 - .byte 0x08, 0x21, 0x19 - .byte 0x2e, 0x36, 0x1d - .byte 0x15, 0x3d, 0x24 - .byte 0x22, 0x0c, 0x27 - .byte 0x36, 0x3f, 0x33 - .byte 0x33, 0x12, 0x11 - .byte 0x1a, 0x19, 0x1f - .byte 0x2b, 0x24, 0x12 - .byte 0x11, 0x2a, 0x18 - .byte 0x25, 0x32, 0x2a - .byte 0x2c, 0x1a, 0x12 - .byte 0x26, 0x06, 0x10 - .byte 0x11, 0x29, 0x33 - .byte 0x2c, 0x09, 0x14 - .byte 0x2b, 0x12, 0x2b - .byte 0x1d, 0x03, 0x24 - .byte 0x00, 0x12, 0x15 - .byte 0x22, 0x3d, 0x26 - .byte 0x15, 0x37, 0x1a - .byte 0x0f, 0x12, 0x37 - .byte 0x24, 0x01, 0x18 - .byte 0x2a, 0x17, 0x13 - .byte 0x14, 0x3b, 0x29 - .byte 0x2a, 0x19, 0x32 - .byte 0x2d, 0x17, 0x17 - .byte 0x0b, 0x2c, 0x33 - .byte 0x07, 0x2d, 0x34 - .byte 0x07, 0x38, 0x1d - .byte 0x1f, 0x36, 0x22 - .byte 0x11, 0x0a, 0x17 - .byte 0x14, 0x11, 0x13 - .byte 0x2a, 0x17, 0x25 - .byte 0x01, 0x3a, 0x1c - .byte 0x26, 0x27, 0x30 - .byte 0x2d, 0x3b, 0x35 - .byte 0x3a, 0x30, 0x34 - .byte 0x06, 0x3a, 0x1c - .byte 0x2d, 0x05, 0x13 - .byte 0x21, 0x32, 0x12 - .byte 0x3e, 0x1e, 0x2c - .byte 0x3a, 0x3f, 0x2d - .byte 0x20, 0x2a, 0x34 - .byte 0x26, 0x03, 0x1a - .byte 0x19, 0x27, 0x2e - .byte 0x31, 0x04, 0x26 - .byte 0x2a, 0x3f, 0x30 - .byte 0x25, 0x23, 0x2a - .byte 0x08, 0x08, 0x35 - .byte 0x2c, 0x30, 0x1e - .byte 0x08, 0x05, 0x18 - .byte 0x06, 0x09, 0x2d - .byte 0x19, 0x00, 0x27 - .byte 0x0d, 0x10, 0x19 - .byte 0x1c, 0x00, 0x13 - .byte 0x3d, 0x0b, 0x24 - .byte 0x2e, 0x1f, 0x16 - .byte 0x3d, 0x18, 0x34 - .byte 0x12, 0x1e, 0x15 - .byte 0x15, 0x39, 0x25 - .byte 0x33, 0x0f, 0x17 - .byte 0x1a, 0x1c, 0x1b - .byte 0x37, 0x29, 0x1b - .byte 0x3b, 0x38, 0x12 - .byte 0x1d, 0x22, 0x34 - .byte 0x26, 0x0a, 0x31 - .byte 0x16, 0x2d, 0x13 - .byte 0x0d, 0x20, 0x27 - .byte 0x24, 0x1d, 0x16 - .byte 0x2e, 0x2b, 0x18 - .byte 0x16, 0x2a, 0x1b - .byte 0x24, 0x17, 0x36 - .byte 0x02, 0x05, 0x2b - .byte 0x37, 0x1a, 0x17 - .byte 0x11, 0x3d, 0x2c - .byte 0x1e, 0x2f, 0x22 - .byte 0x2c, 0x29, 0x1a - .byte 0x2f, 0x04, 0x25 - .byte 0x36, 0x0c, 0x35 - .byte 0x30, 0x3e, 0x12 - .byte 0x11, 0x30, 0x37 - .byte 0x12, 0x21, 0x2e - .byte 0x21, 0x30, 0x17 - .byte 0x2c, 0x3d, 0x24 - .byte 0x11, 0x23, 0x14 - .byte 0x1a, 0x32, 0x17 - .byte 0x39, 0x27, 0x18 - .byte 0x0f, 0x24, 0x19 - .byte 0x00, 0x3d, 0x37 - .byte 0x2c, 0x3c, 0x1c - .byte 0x0b, 0x39, 0x23 - .byte 0x0e, 0x04, 0x1f - .byte 0x1c, 0x31, 0x14 - .byte 0x00, 0x04, 0x15 - .byte 0x26, 0x2a, 0x2a - .byte 0x20, 0x25, 0x2a - .byte 0x0b, 0x3c, 0x33 - .byte 0x11, 0x0b, 0x2e - .byte 0x37, 0x22, 0x2e - .byte 0x0e, 0x22, 0x26 - .byte 0x18, 0x2d, 0x27 - .byte 0x06, 0x0c, 0x1c - .byte 0x26, 0x18, 0x2f - .byte 0x3a, 0x01, 0x2a - .byte 0x2f, 0x31, 0x34 - .byte 0x1f, 0x34, 0x1a - .byte 0x31, 0x05, 0x10 - .byte 0x2e, 0x17, 0x34 - .byte 0x18, 0x22, 0x23 - .byte 0x23, 0x21, 0x32 - .byte 0x07, 0x08, 0x22 - .byte 0x26, 0x1c, 0x22 - .byte 0x31, 0x12, 0x2f - .byte 0x08, 0x1f, 0x10 - .byte 0x27, 0x15, 0x2a - .byte 0x1f, 0x0b, 0x26 - .byte 0x2f, 0x14, 0x35 - .byte 0x24, 0x1f, 0x26 - .byte 0x3b, 0x23, 0x33 - .byte 0x20, 0x3e, 0x2d - .byte 0x17, 0x0c, 0x15 - .byte 0x13, 0x39, 0x1a - .byte 0x30, 0x14, 0x25 - .byte 0x09, 0x07, 0x17 - .byte 0x38, 0x38, 0x1f - .byte 0x29, 0x24, 0x27 - .byte 0x17, 0x27, 0x28 - .byte 0x1b, 0x12, 0x2a - .byte 0x2b, 0x3d, 0x2d - .byte 0x19, 0x34, 0x1c - .byte 0x01, 0x1d, 0x10 - .byte 0x08, 0x39, 0x11 - .byte 0x0e, 0x36, 0x1b - .byte 0x26, 0x13, 0x10 - .byte 0x16, 0x28, 0x1e - .byte 0x3c, 0x28, 0x17 - .byte 0x3e, 0x39, 0x34 - .byte 0x0a, 0x03, 0x2e - .byte 0x37, 0x1a, 0x13 - .byte 0x2b, 0x33, 0x26 - .byte 0x13, 0x2c, 0x21 - .byte 0x25, 0x14, 0x10 - .byte 0x16, 0x0b, 0x35 - .byte 0x1d, 0x35, 0x33 - .byte 0x21, 0x08, 0x33 - .byte 0x28, 0x21, 0x1a - .byte 0x12, 0x0c, 0x1b - .byte 0x36, 0x2a, 0x19 - .byte 0x2c, 0x2b, 0x23 - .byte 0x01, 0x0f, 0x26 - .byte 0x17, 0x0c, 0x18 - .byte 0x09, 0x0f, 0x11 - .byte 0x2b, 0x24, 0x1c - .byte 0x09, 0x09, 0x15 - .byte 0x36, 0x08, 0x13 - .byte 0x20, 0x39, 0x21 - .byte 0x00, 0x3a, 0x1f - .byte 0x2b, 0x36, 0x31 - .byte 0x02, 0x37, 0x13 - .byte 0x04, 0x34, 0x35 - .byte 0x37, 0x3d, 0x1a - .byte 0x17, 0x3d, 0x13 - .byte 0x2b, 0x36, 0x2f - .byte 0x13, 0x1e, 0x13 - .byte 0x3e, 0x11, 0x33 - .byte 0x27, 0x3a, 0x2d - .byte 0x1e, 0x31, 0x1a - .byte 0x03, 0x03, 0x2d - .byte 0x25, 0x37, 0x1f - .byte 0x11, 0x01, 0x22 - .byte 0x1c, 0x12, 0x17 - .byte 0x30, 0x3a, 0x30 - .byte 0x17, 0x1d, 0x29 - .byte 0x0e, 0x13, 0x27 - .byte 0x1a, 0x2e, 0x24 - .byte 0x2d, 0x00, 0x1c - .byte 0x17, 0x28, 0x1d - .byte 0x09, 0x1f, 0x2e - .byte 0x1a, 0x2d, 0x26 - .byte 0x0a, 0x13, 0x32 - .byte 0x3e, 0x00, 0x27 - .byte 0x0b, 0x3b, 0x30 - .byte 0x08, 0x3a, 0x2d - .byte 0x22, 0x12, 0x1e - .byte 0x34, 0x1d, 0x2b - .byte 0x26, 0x22, 0x35 - .byte 0x17, 0x2c, 0x17 - .byte 0x29, 0x13, 0x2d - .byte 0x2d, 0x10, 0x10 - .byte 0x20, 0x31, 0x23 - .byte 0x1e, 0x33, 0x18 - .byte 0x33, 0x06, 0x2d - .byte 0x26, 0x14, 0x27 - .byte 0x22, 0x1d, 0x2a - .byte 0x2d, 0x06, 0x18 - .byte 0x07, 0x09, 0x2e - .byte 0x21, 0x15, 0x2e - .byte 0x21, 0x38, 0x23 - .byte 0x35, 0x0b, 0x34 - .byte 0x24, 0x0b, 0x22 - .byte 0x1e, 0x01, 0x17 - .byte 0x0b, 0x24, 0x11 - .byte 0x17, 0x07, 0x20 - .byte 0x14, 0x25, 0x32 - .byte 0x1a, 0x0e, 0x2f - .byte 0x35, 0x17, 0x1f - .byte 0x0c, 0x08, 0x21 - .byte 0x30, 0x35, 0x1f - .byte 0x0c, 0x0b, 0x20 - .byte 0x04, 0x10, 0x11 - .byte 0x35, 0x11, 0x1e - .byte 0x33, 0x3d, 0x16 - .byte 0x1e, 0x2b, 0x1d - .byte 0x1a, 0x19, 0x10 - .byte 0x04, 0x06, 0x22 - .byte 0x03, 0x3d, 0x24 - .byte 0x2a, 0x0e, 0x35 - .byte 0x03, 0x3e, 0x17 - .byte 0x0b, 0x18, 0x36 - .byte 0x3d, 0x0d, 0x26 - .byte 0x35, 0x12, 0x20 - .byte 0x1f, 0x0d, 0x16 - .byte 0x23, 0x32, 0x1a - .byte 0x00, 0x3d, 0x26 - .byte 0x30, 0x19, 0x36 - .byte 0x12, 0x0e, 0x23 - .byte 0x01, 0x23, 0x28 - .byte 0x3b, 0x31, 0x11 - .byte 0x2d, 0x1c, 0x36 - .byte 0x2a, 0x05, 0x16 - .byte 0x14, 0x0e, 0x30 - .byte 0x3a, 0x37, 0x19 - .byte 0x1f, 0x30, 0x25 - .byte 0x10, 0x26, 0x2f - .byte 0x22, 0x11, 0x1f - .byte 0x2e, 0x2b, 0x1e - .byte 0x16, 0x16, 0x21 - .byte 0x32, 0x18, 0x35 - .byte 0x23, 0x32, 0x1a - .byte 0x3d, 0x0d, 0x19 - .byte 0x39, 0x09, 0x23 - .byte 0x30, 0x2e, 0x24 - .byte 0x1e, 0x0f, 0x24 - .byte 0x09, 0x21, 0x31 - .byte 0x05, 0x03, 0x11 - .byte 0x05, 0x22, 0x2a - .byte 0x03, 0x07, 0x37 - .byte 0x04, 0x08, 0x13 - .byte 0x05, 0x10, 0x34 - .byte 0x37, 0x14, 0x29 - .byte 0x0a, 0x24, 0x32 - .byte 0x34, 0x1e, 0x1b - .byte 0x12, 0x17, 0x2e - .byte 0x01, 0x02, 0x13 - .byte 0x0a, 0x0c, 0x11 - .byte 0x02, 0x14, 0x13 - .byte 0x0d, 0x25, 0x23 - .byte 0x00, 0x07, 0x1a - .byte 0x1c, 0x28, 0x35 - .byte 0x08, 0x0e, 0x2c - .byte 0x1b, 0x3c, 0x15 - .byte 0x1c, 0x19, 0x1d - .byte 0x32, 0x13, 0x1a - .byte 0x1c, 0x00, 0x37 - .byte 0x22, 0x1b, 0x35 - .byte 0x39, 0x3e, 0x14 - .byte 0x32, 0x06, 0x31 - .byte 0x17, 0x05, 0x2b - .byte 0x01, 0x0f, 0x20 - .byte 0x1e, 0x0f, 0x34 - .byte 0x18, 0x03, 0x1f - .byte 0x2b, 0x00, 0x14 - .byte 0x15, 0x3a, 0x30 - .byte 0x25, 0x30, 0x21 - .byte 0x0b, 0x00, 0x37 - .byte 0x24, 0x37, 0x1d - .byte 0x29, 0x21, 0x16 - .byte 0x24, 0x0f, 0x2c - .byte 0x3e, 0x15, 0x36 - .byte 0x3c, 0x2d, 0x23 - .byte 0x3d, 0x3c, 0x17 - .byte 0x1a, 0x1c, 0x13 - .byte 0x0a, 0x29, 0x22 - .byte 0x25, 0x3f, 0x26 - .byte 0x3b, 0x39, 0x2f - .byte 0x1d, 0x08, 0x16 - .byte 0x0b, 0x19, 0x14 - .byte 0x12, 0x01, 0x2c - .byte 0x35, 0x11, 0x2a - .byte 0x02, 0x00, 0x13 - .byte 0x39, 0x2a, 0x35 - .byte 0x07, 0x1a, 0x11 - .byte 0x24, 0x0e, 0x1e - .byte 0x0e, 0x2c, 0x15 - .byte 0x08, 0x31, 0x1b - .byte 0x21, 0x1d, 0x26 - .byte 0x1d, 0x1c, 0x2a - .byte 0x1d, 0x24, 0x13 - .byte 0x01, 0x00, 0x18 - .byte 0x28, 0x2a, 0x37 - .byte 0x15, 0x0f, 0x13 - .byte 0x10, 0x32, 0x36 - .byte 0x22, 0x13, 0x31 - .byte 0x13, 0x05, 0x1e - .byte 0x17, 0x35, 0x35 - .byte 0x3b, 0x0e, 0x24 - .byte 0x35, 0x3a, 0x1d - .byte 0x1b, 0x36, 0x1b - .byte 0x03, 0x1d, 0x24 - .byte 0x0f, 0x16, 0x30 - .byte 0x2d, 0x09, 0x25 - .byte 0x05, 0x21, 0x13 - .byte 0x0a, 0x27, 0x36 - .byte 0x04, 0x0d, 0x1c - .byte 0x06, 0x3e, 0x21 - .byte 0x2a, 0x27, 0x33 - .byte 0x28, 0x0e, 0x15 - .byte 0x0b, 0x17, 0x1d - .byte 0x1d, 0x32, 0x2d - .byte 0x08, 0x3d, 0x29 - .byte 0x21, 0x32, 0x17 - .byte 0x33, 0x31, 0x22 - .byte 0x0e, 0x03, 0x21 - .byte 0x0d, 0x0b, 0x16 - .byte 0x3e, 0x2a, 0x2e - .byte 0x19, 0x36, 0x2a - .byte 0x0d, 0x00, 0x14 - .byte 0x22, 0x07, 0x36 - .byte 0x0a, 0x09, 0x15 - .byte 0x14, 0x10, 0x22 - .byte 0x07, 0x16, 0x2c - .byte 0x36, 0x13, 0x15 - .byte 0x09, 0x2f, 0x1b - .byte 0x20, 0x3b, 0x2e - .byte 0x3a, 0x3a, 0x16 - .byte 0x0d, 0x15, 0x2a - .byte 0x39, 0x13, 0x2b - .byte 0x0b, 0x01, 0x2a - .byte 0x13, 0x17, 0x1e - .byte 0x08, 0x17, 0x1e - .byte 0x0c, 0x0f, 0x34 - .byte 0x1f, 0x31, 0x12 - .byte 0x07, 0x3a, 0x1d - .byte 0x35, 0x1e, 0x12 - .byte 0x24, 0x2c, 0x15 - .byte 0x0e, 0x21, 0x19 - .byte 0x34, 0x3b, 0x33 - .byte 0x19, 0x0f, 0x28 - .byte 0x10, 0x2f, 0x2e - .byte 0x23, 0x27, 0x31 - .byte 0x39, 0x2e, 0x18 - .byte 0x3c, 0x3f, 0x24 - .byte 0x07, 0x23, 0x30 - .byte 0x28, 0x13, 0x35 - .byte 0x13, 0x0a, 0x10 - .byte 0x35, 0x19, 0x33 - .byte 0x23, 0x28, 0x29 - .byte 0x13, 0x2f, 0x1a - .byte 0x3a, 0x19, 0x14 - .byte 0x37, 0x36, 0x26 - .byte 0x20, 0x3b, 0x15 - .byte 0x37, 0x39, 0x10 - .byte 0x3c, 0x21, 0x34 - .byte 0x1c, 0x38, 0x30 - .byte 0x15, 0x07, 0x26 - .byte 0x27, 0x21, 0x19 - .byte 0x18, 0x11, 0x23 - .byte 0x30, 0x28, 0x37 - .byte 0x32, 0x2d, 0x1f - .byte 0x2c, 0x3f, 0x30 - .byte 0x1d, 0x2f, 0x26 - .byte 0x01, 0x11, 0x1c - .byte 0x3b, 0x0f, 0x12 - .byte 0x2a, 0x17, 0x27 - .byte 0x05, 0x00, 0x1b - .byte 0x25, 0x1c, 0x32 - .byte 0x04, 0x22, 0x2d - .byte 0x10, 0x0f, 0x25 - .byte 0x0d, 0x39, 0x30 - .byte 0x0b, 0x2e, 0x27 - .byte 0x2d, 0x34, 0x15 - .byte 0x3e, 0x30, 0x36 - .byte 0x16, 0x26, 0x2a - .byte 0x05, 0x3f, 0x2b - .byte 0x20, 0x3b, 0x2e - .byte 0x3b, 0x1c, 0x2f - .byte 0x01, 0x18, 0x16 - .byte 0x16, 0x3d, 0x10 - .byte 0x0a, 0x1f, 0x18 - .byte 0x17, 0x0f, 0x22 - .byte 0x06, 0x13, 0x11 - .byte 0x38, 0x21, 0x17 - .byte 0x17, 0x0a, 0x37 - .byte 0x1c, 0x19, 0x30 - .byte 0x16, 0x38, 0x31 - .byte 0x30, 0x10, 0x36 - .byte 0x31, 0x2f, 0x26 - .byte 0x3c, 0x1b, 0x23 - .byte 0x33, 0x2f, 0x19 - .byte 0x16, 0x35, 0x25 - .byte 0x3a, 0x18, 0x1f - .byte 0x37, 0x01, 0x1e - .byte 0x0d, 0x18, 0x12 - .byte 0x1f, 0x1c, 0x1b - .byte 0x07, 0x34, 0x2d - .byte 0x0b, 0x3f, 0x33 - .byte 0x1e, 0x34, 0x1d - .byte 0x2c, 0x13, 0x2c - .byte 0x20, 0x20, 0x13 - .byte 0x20, 0x0f, 0x31 - .byte 0x08, 0x0f, 0x24 - .byte 0x18, 0x3d, 0x1c - .byte 0x36, 0x34, 0x27 - .byte 0x33, 0x2a, 0x25 - .byte 0x2d, 0x30, 0x26 - .byte 0x3d, 0x37, 0x26 - .byte 0x25, 0x11, 0x11 - .byte 0x03, 0x05, 0x18 - .byte 0x10, 0x04, 0x29 - .byte 0x07, 0x2e, 0x36 - .byte 0x2a, 0x29, 0x15 - .byte 0x3a, 0x0e, 0x33 - .byte 0x2a, 0x06, 0x29 - .byte 0x3d, 0x01, 0x29 - .byte 0x27, 0x0e, 0x16 - .byte 0x1d, 0x28, 0x1b - .byte 0x10, 0x33, 0x2b - .byte 0x0c, 0x14, 0x1d - .byte 0x15, 0x3f, 0x25 - .byte 0x37, 0x23, 0x1e - .byte 0x04, 0x2c, 0x1c - .byte 0x15, 0x34, 0x2a - .byte 0x09, 0x2f, 0x15 - .byte 0x02, 0x3f, 0x14 - .byte 0x19, 0x2c, 0x33 - .byte 0x39, 0x32, 0x20 - .byte 0x2a, 0x18, 0x32 - .byte 0x17, 0x23, 0x21 - .byte 0x0b, 0x2d, 0x25 - .byte 0x24, 0x3a, 0x2d - .byte 0x31, 0x3f, 0x34 - .byte 0x18, 0x19, 0x24 - .byte 0x1e, 0x15, 0x1a - .byte 0x17, 0x33, 0x2b - .byte 0x23, 0x09, 0x26 - .byte 0x1b, 0x0d, 0x15 - .byte 0x36, 0x26, 0x28 - .byte 0x3a, 0x1c, 0x14 - .byte 0x0c, 0x3e, 0x10 - .byte 0x18, 0x06, 0x35 - .byte 0x37, 0x26, 0x36 - .byte 0x21, 0x26, 0x17 - .byte 0x3d, 0x1c, 0x2c - .byte 0x16, 0x25, 0x1d - .byte 0x1e, 0x0b, 0x1e - .byte 0x1d, 0x0d, 0x32 - .byte 0x08, 0x1f, 0x1b - .byte 0x12, 0x1c, 0x12 - .byte 0x20, 0x2a, 0x28 - .byte 0x06, 0x3b, 0x35 - .byte 0x39, 0x0e, 0x1e - .byte 0x31, 0x30, 0x28 - .byte 0x02, 0x21, 0x14 - .byte 0x06, 0x1e, 0x29 - .byte 0x16, 0x09, 0x1c - .byte 0x27, 0x32, 0x2d - .byte 0x39, 0x03, 0x27 - .byte 0x29, 0x09, 0x1e - .byte 0x1b, 0x11, 0x1c - .byte 0x28, 0x3a, 0x2c - .byte 0x03, 0x03, 0x18 - .byte 0x23, 0x09, 0x2f - .byte 0x30, 0x17, 0x23 - .byte 0x0f, 0x25, 0x33 - .byte 0x06, 0x24, 0x37 - .byte 0x22, 0x09, 0x33 - .byte 0x2c, 0x09, 0x2a - .byte 0x0c, 0x12, 0x2a - .byte 0x28, 0x20, 0x10 - .byte 0x15, 0x29, 0x33 - .byte 0x0f, 0x1a, 0x13 - .byte 0x13, 0x18, 0x36 - .byte 0x2e, 0x16, 0x13 - .byte 0x3c, 0x1a, 0x15 - .byte 0x3a, 0x11, 0x32 - .byte 0x02, 0x0a, 0x2c - .byte 0x19, 0x39, 0x11 - .byte 0x31, 0x3e, 0x1d - .byte 0x32, 0x14, 0x32 - .byte 0x12, 0x2e, 0x34 - .byte 0x3e, 0x36, 0x23 - .byte 0x37, 0x3e, 0x15 - .byte 0x15, 0x35, 0x34 - .byte 0x01, 0x3a, 0x2c - .byte 0x26, 0x25, 0x22 - .byte 0x01, 0x2b, 0x37 - .byte 0x1c, 0x3d, 0x33 - .byte 0x3e, 0x10, 0x1c - .byte 0x26, 0x33, 0x19 - .byte 0x05, 0x19, 0x17 - .byte 0x12, 0x38, 0x1c - .byte 0x15, 0x3c, 0x32 - .byte 0x3f, 0x0f, 0x37 - .byte 0x02, 0x39, 0x32 - .byte 0x13, 0x00, 0x1d - .byte 0x1d, 0x2c, 0x10 - .byte 0x39, 0x13, 0x31 - .byte 0x0f, 0x37, 0x19 - .byte 0x09, 0x0d, 0x2a - .byte 0x20, 0x2f, 0x32 - .byte 0x3b, 0x34, 0x22 - .byte 0x26, 0x14, 0x10 - .byte 0x24, 0x3d, 0x22 - .byte 0x0b, 0x31, 0x23 - .byte 0x2f, 0x2d, 0x2a - .byte 0x30, 0x04, 0x35 - .byte 0x19, 0x20, 0x2a - .byte 0x16, 0x36, 0x37 - .byte 0x14, 0x28, 0x37 - .byte 0x11, 0x0b, 0x27 - .byte 0x1d, 0x06, 0x29 - .byte 0x35, 0x16, 0x2e - .byte 0x24, 0x2e, 0x29 - .byte 0x36, 0x14, 0x2a - .byte 0x21, 0x0c, 0x1f - .byte 0x3f, 0x39, 0x19 - .byte 0x27, 0x10, 0x2a - .byte 0x1e, 0x12, 0x34 - .byte 0x10, 0x24, 0x34 - .byte 0x1d, 0x13, 0x1d - .byte 0x17, 0x16, 0x37 - .byte 0x27, 0x1b, 0x27 - .byte 0x07, 0x24, 0x21 - .byte 0x37, 0x21, 0x11 - .byte 0x37, 0x28, 0x24 - .byte 0x19, 0x02, 0x1c - .byte 0x14, 0x12, 0x1d - .byte 0x1b, 0x24, 0x2e - .byte 0x2e, 0x3a, 0x15 - .byte 0x37, 0x34, 0x21 - .byte 0x33, 0x2d, 0x29 - .byte 0x2f, 0x1e, 0x34 - .byte 0x29, 0x3c, 0x12 - .byte 0x05, 0x15, 0x20 - .byte 0x05, 0x3e, 0x19 - .byte 0x18, 0x0b, 0x30 - .byte 0x2f, 0x02, 0x27 - .byte 0x14, 0x1c, 0x34 - .byte 0x12, 0x20, 0x30 - .byte 0x2b, 0x22, 0x1b - .byte 0x06, 0x31, 0x28 - .byte 0x15, 0x2d, 0x12 - .byte 0x01, 0x0e, 0x13 - .byte 0x13, 0x0c, 0x28 - .byte 0x07, 0x2a, 0x14 - .byte 0x1d, 0x36, 0x14 - .byte 0x15, 0x2b, 0x26 - .byte 0x03, 0x25, 0x15 - .byte 0x3e, 0x3b, 0x20 - .byte 0x35, 0x0c, 0x25 - .byte 0x2b, 0x16, 0x35 - .byte 0x1e, 0x31, 0x2c - .byte 0x06, 0x03, 0x29 - .byte 0x24, 0x07, 0x1f - .byte 0x32, 0x2f, 0x19 - .byte 0x25, 0x21, 0x31 - .byte 0x22, 0x26, 0x1d - .byte 0x00, 0x1b, 0x18 - .byte 0x2a, 0x24, 0x31 - .byte 0x20, 0x06, 0x2f - .byte 0x1e, 0x32, 0x26 - .byte 0x32, 0x39, 0x12 - .byte 0x20, 0x01, 0x19 - .byte 0x0f, 0x15, 0x15 - .byte 0x27, 0x10, 0x2e - .byte 0x09, 0x25, 0x19 - .byte 0x29, 0x37, 0x30 - .byte 0x13, 0x1c, 0x1d - .byte 0x29, 0x2d, 0x26 - .byte 0x02, 0x1a, 0x16 - .byte 0x1d, 0x2b, 0x1c - .byte 0x18, 0x04, 0x34 - .byte 0x28, 0x2a, 0x21 - .byte 0x15, 0x1b, 0x2e - .byte 0x16, 0x01, 0x10 - .byte 0x05, 0x09, 0x14 - .byte 0x22, 0x03, 0x22 - .byte 0x02, 0x1b, 0x34 - .byte 0x29, 0x2a, 0x23 - .byte 0x26, 0x36, 0x13 - .byte 0x23, 0x3d, 0x1a - .byte 0x1d, 0x10, 0x24 - .byte 0x25, 0x2b, 0x37 - .byte 0x19, 0x24, 0x26 - .byte 0x28, 0x13, 0x16 - .byte 0x17, 0x14, 0x19 - .byte 0x0b, 0x2f, 0x25 - .byte 0x37, 0x34, 0x37 - .byte 0x39, 0x21, 0x1b - .byte 0x0f, 0x3d, 0x2d - .byte 0x0d, 0x10, 0x20 - .byte 0x05, 0x0b, 0x2d - .byte 0x01, 0x12, 0x24 - .byte 0x18, 0x3d, 0x32 - .byte 0x09, 0x21, 0x26 - .byte 0x1a, 0x0e, 0x1f - .byte 0x30, 0x06, 0x1f - .byte 0x0b, 0x3c, 0x29 - .byte 0x07, 0x3e, 0x27 - .byte 0x13, 0x1e, 0x1a - .byte 0x13, 0x07, 0x23 - .byte 0x10, 0x34, 0x1e - .byte 0x32, 0x17, 0x23 - .byte 0x35, 0x16, 0x31 - .byte 0x32, 0x2e, 0x1b - .byte 0x28, 0x0e, 0x22 - .byte 0x14, 0x3a, 0x23 - .byte 0x22, 0x03, 0x29 - .byte 0x2a, 0x10, 0x20 - .byte 0x3e, 0x3c, 0x27 - .byte 0x16, 0x20, 0x12 - .byte 0x3f, 0x24, 0x31 - .byte 0x0d, 0x2e, 0x32 - .byte 0x2f, 0x17, 0x2d - .byte 0x36, 0x3b, 0x17 - .byte 0x24, 0x23, 0x18 - .byte 0x37, 0x1d, 0x13 - .byte 0x17, 0x3a, 0x1a - .byte 0x0a, 0x3d, 0x1e - .byte 0x05, 0x12, 0x16 - .byte 0x33, 0x32, 0x25 - .byte 0x1d, 0x1f, 0x29 - .byte 0x34, 0x2c, 0x26 - .byte 0x20, 0x29, 0x35 - .byte 0x0e, 0x32, 0x17 - .byte 0x01, 0x39, 0x2d - .byte 0x27, 0x24, 0x23 - .byte 0x28, 0x3f, 0x18 - .byte 0x39, 0x38, 0x25 - .byte 0x23, 0x11, 0x11 - .byte 0x19, 0x2c, 0x29 - .byte 0x30, 0x08, 0x28 - .byte 0x25, 0x27, 0x1d - .byte 0x17, 0x25, 0x21 - .byte 0x09, 0x3d, 0x16 - .byte 0x1b, 0x0f, 0x2c - .byte 0x1b, 0x12, 0x22 - .byte 0x28, 0x3e, 0x26 - .byte 0x34, 0x10, 0x1b - .byte 0x02, 0x34, 0x15 - .byte 0x1a, 0x29, 0x19 - .byte 0x29, 0x11, 0x31 - .byte 0x12, 0x27, 0x17 - .byte 0x27, 0x27, 0x2f - .byte 0x34, 0x27, 0x24 - .byte 0x03, 0x19, 0x36 - .byte 0x17, 0x1d, 0x33 - .byte 0x19, 0x25, 0x1a - .byte 0x2b, 0x39, 0x13 - .byte 0x3b, 0x33, 0x1d - .byte 0x27, 0x31, 0x34 - .byte 0x28, 0x33, 0x37 - .byte 0x09, 0x30, 0x1b - .byte 0x03, 0x3a, 0x27 - .byte 0x19, 0x11, 0x1f - .byte 0x0b, 0x1a, 0x34 - .byte 0x3d, 0x2a, 0x15 - .byte 0x04, 0x24, 0x36 - .byte 0x30, 0x23, 0x30 - .byte 0x0f, 0x22, 0x1b - .byte 0x3d, 0x3d, 0x24 - .byte 0x29, 0x1d, 0x12 - .byte 0x16, 0x19, 0x2e - .byte 0x03, 0x12, 0x17 - .byte 0x18, 0x25, 0x33 - .byte 0x2f, 0x23, 0x1a - .byte 0x1a, 0x35, 0x27 - .byte 0x21, 0x26, 0x19 - .byte 0x1b, 0x30, 0x18 - .byte 0x2b, 0x22, 0x2d - .byte 0x2c, 0x1a, 0x34 - .byte 0x3e, 0x12, 0x19 - .byte 0x28, 0x27, 0x15 - .byte 0x1b, 0x11, 0x12 - .byte 0x17, 0x15, 0x10 - .byte 0x34, 0x37, 0x25 - .byte 0x12, 0x3f, 0x15 - .byte 0x31, 0x0d, 0x37 - .byte 0x3e, 0x2a, 0x2d - .byte 0x0f, 0x24, 0x24 - .byte 0x3c, 0x3f, 0x1f - .byte 0x1d, 0x34, 0x17 - .byte 0x1a, 0x23, 0x1f - .byte 0x37, 0x0f, 0x10 - .byte 0x32, 0x34, 0x35 - .byte 0x19, 0x05, 0x22 - .byte 0x33, 0x16, 0x34 - .byte 0x1e, 0x14, 0x1e - .byte 0x08, 0x13, 0x29 - .byte 0x3a, 0x37, 0x30 - .byte 0x1d, 0x36, 0x15 - .byte 0x29, 0x2e, 0x1d - .byte 0x32, 0x2e, 0x23 - .byte 0x35, 0x17, 0x1c - .byte 0x36, 0x1d, 0x13 - .byte 0x23, 0x34, 0x34 - .byte 0x24, 0x1a, 0x37 - .byte 0x2f, 0x26, 0x2e - .byte 0x1e, 0x17, 0x1a - .byte 0x1f, 0x15, 0x1f - .byte 0x2b, 0x1f, 0x19 - .byte 0x0a, 0x33, 0x1a - .byte 0x35, 0x31, 0x24 - .byte 0x2d, 0x17, 0x2c - .byte 0x0c, 0x21, 0x36 - .byte 0x2c, 0x35, 0x35 - .byte 0x1b, 0x03, 0x27 - .byte 0x01, 0x0d, 0x1d - .byte 0x1c, 0x0e, 0x11 - .byte 0x11, 0x2b, 0x10 - .byte 0x25, 0x3b, 0x20 - .byte 0x1f, 0x17, 0x19 - .byte 0x20, 0x08, 0x36 - .byte 0x13, 0x38, 0x19 - .byte 0x1b, 0x2b, 0x24 - .byte 0x0b, 0x1f, 0x29 - .byte 0x27, 0x15, 0x2c - .byte 0x37, 0x39, 0x10 - .byte 0x3a, 0x15, 0x2e - .byte 0x2f, 0x11, 0x36 - .byte 0x24, 0x04, 0x20 - .byte 0x3b, 0x2a, 0x35 - .byte 0x27, 0x35, 0x34 - .byte 0x0d, 0x1b, 0x20 - .byte 0x10, 0x22, 0x37 - .byte 0x1f, 0x38, 0x27 - .byte 0x31, 0x0f, 0x28 - .byte 0x28, 0x25, 0x15 - .byte 0x00, 0x1d, 0x25 - .byte 0x31, 0x28, 0x28 - .byte 0x0b, 0x3a, 0x1d - .byte 0x2d, 0x13, 0x1b - .byte 0x03, 0x37, 0x2e - .byte 0x1d, 0x28, 0x19 - .byte 0x08, 0x2d, 0x22 - .byte 0x27, 0x39, 0x32 - .byte 0x3f, 0x2f, 0x1d - .byte 0x33, 0x34, 0x28 - .byte 0x18, 0x08, 0x31 - .byte 0x23, 0x1f, 0x13 - .byte 0x0d, 0x2c, 0x23 - .byte 0x3a, 0x2d, 0x1a - .byte 0x02, 0x25, 0x13 - .byte 0x20, 0x36, 0x34 - .byte 0x12, 0x2b, 0x2d - .byte 0x35, 0x35, 0x34 - .byte 0x23, 0x20, 0x21 - .byte 0x3a, 0x19, 0x1b - .byte 0x1f, 0x2b, 0x19 - .byte 0x35, 0x0e, 0x19 - .byte 0x26, 0x24, 0x37 - .byte 0x18, 0x08, 0x10 - .byte 0x0c, 0x16, 0x2d - .byte 0x1f, 0x34, 0x21 - .byte 0x05, 0x38, 0x19 - .byte 0x14, 0x21, 0x24 - .byte 0x11, 0x31, 0x14 - .byte 0x3e, 0x38, 0x29 - .byte 0x3f, 0x08, 0x25 - .byte 0x2a, 0x1f, 0x25 - .byte 0x25, 0x06, 0x28 - .byte 0x0b, 0x1e, 0x14 - .byte 0x1a, 0x38, 0x22 - .byte 0x24, 0x18, 0x29 - .byte 0x1a, 0x11, 0x20 - .byte 0x3b, 0x3a, 0x1e - .byte 0x1c, 0x26, 0x1a - .byte 0x05, 0x32, 0x19 - .byte 0x39, 0x2a, 0x31 - .byte 0x09, 0x07, 0x25 - .byte 0x05, 0x3e, 0x16 - .byte 0x34, 0x26, 0x14 - .byte 0x1b, 0x32, 0x26 - .byte 0x05, 0x08, 0x37 - .byte 0x0f, 0x03, 0x20 - .byte 0x2a, 0x39, 0x31 - .byte 0x08, 0x01, 0x1e - .byte 0x1d, 0x23, 0x31 - .byte 0x28, 0x1b, 0x28 - .byte 0x1e, 0x37, 0x14 - .byte 0x13, 0x0e, 0x28 - .byte 0x2a, 0x3b, 0x37 - .byte 0x2f, 0x1c, 0x28 - .byte 0x30, 0x30, 0x1a - .byte 0x36, 0x1f, 0x16 - .byte 0x3e, 0x0d, 0x15 - .byte 0x2e, 0x16, 0x18 - .byte 0x15, 0x37, 0x20 - .byte 0x2a, 0x33, 0x30 - .byte 0x2b, 0x0e, 0x25 - .byte 0x18, 0x20, 0x16 - .byte 0x02, 0x19, 0x25 - .byte 0x0a, 0x2e, 0x30 - .byte 0x16, 0x03, 0x11 - .byte 0x04, 0x27, 0x25 - .byte 0x1b, 0x1c, 0x21 - .byte 0x29, 0x04, 0x27 - .byte 0x3d, 0x20, 0x1e - .byte 0x28, 0x33, 0x31 - .byte 0x1e, 0x39, 0x10 - .byte 0x31, 0x29, 0x1e - .byte 0x06, 0x25, 0x28 - .byte 0x19, 0x3b, 0x12 - .byte 0x0b, 0x1b, 0x1c - .byte 0x3e, 0x37, 0x20 - .byte 0x0a, 0x37, 0x33 - .byte 0x02, 0x2c, 0x25 - .byte 0x15, 0x18, 0x14 - .byte 0x3b, 0x20, 0x1c - .byte 0x22, 0x3b, 0x1c - .byte 0x24, 0x34, 0x35 - .byte 0x0f, 0x2f, 0x31 - .byte 0x3b, 0x17, 0x35 - .byte 0x30, 0x39, 0x37 - .byte 0x0d, 0x15, 0x11 - .byte 0x10, 0x03, 0x1e - .byte 0x1a, 0x39, 0x33 - .byte 0x2f, 0x2e, 0x28 - .byte 0x1c, 0x28, 0x36 - .byte 0x28, 0x18, 0x1f - .byte 0x15, 0x01, 0x30 - .byte 0x3e, 0x32, 0x28 - .byte 0x34, 0x2f, 0x23 - .byte 0x07, 0x0c, 0x36 - .byte 0x28, 0x2c, 0x34 - .byte 0x2a, 0x0c, 0x1f - .byte 0x3f, 0x20, 0x13 - .byte 0x2b, 0x17, 0x27 - .byte 0x28, 0x29, 0x2a - .byte 0x3c, 0x13, 0x36 - .byte 0x26, 0x2d, 0x2a - .byte 0x0a, 0x06, 0x1e - .byte 0x20, 0x04, 0x1a - .byte 0x02, 0x07, 0x35 - .byte 0x0e, 0x18, 0x30 - .byte 0x00, 0x34, 0x34 - .byte 0x2f, 0x14, 0x37 - .byte 0x21, 0x30, 0x1f - .byte 0x15, 0x37, 0x1b - .byte 0x3a, 0x0b, 0x32 - .byte 0x22, 0x22, 0x21 - .byte 0x1b, 0x35, 0x23 - .byte 0x0d, 0x03, 0x1c - .byte 0x23, 0x3b, 0x13 - .byte 0x0e, 0x1d, 0x1f - .byte 0x1d, 0x3f, 0x2e - .byte 0x39, 0x27, 0x2e - .byte 0x0f, 0x38, 0x20 - .byte 0x31, 0x3c, 0x35 - .byte 0x0b, 0x0f, 0x2e - .byte 0x06, 0x06, 0x28 - .byte 0x25, 0x39, 0x23 - .byte 0x0a, 0x32, 0x15 - .byte 0x0f, 0x1d, 0x25 - .byte 0x0c, 0x0d, 0x34 - .byte 0x12, 0x2e, 0x21 - .byte 0x36, 0x18, 0x1f - .byte 0x1f, 0x34, 0x1b - .byte 0x05, 0x3a, 0x36 - .byte 0x2b, 0x01, 0x17 - .byte 0x0e, 0x16, 0x2b - .byte 0x0e, 0x0b, 0x26 - .byte 0x0d, 0x2d, 0x10 - .byte 0x21, 0x11, 0x27 - .byte 0x3d, 0x13, 0x32 - .byte 0x15, 0x25, 0x2a - .byte 0x1b, 0x2d, 0x35 - .byte 0x2c, 0x2b, 0x26 - .byte 0x26, 0x1f, 0x20 - .byte 0x22, 0x2b, 0x12 - .byte 0x3f, 0x3d, 0x27 - .byte 0x30, 0x0a, 0x36 - .byte 0x35, 0x1f, 0x17 - .byte 0x21, 0x08, 0x29 - .byte 0x1d, 0x20, 0x33 - .byte 0x34, 0x11, 0x16 - .byte 0x05, 0x38, 0x2d diff --git a/ld_script.txt b/ld_script.txt index 01bc181a6..838aebcac 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -181,7 +181,7 @@ SECTIONS { asm/script_pokemon_util_80BF8FC.o(.text); src/heal_location.o(.text); src/region_map.o(.text); - asm/region_map.o(.text); + asm/image_processing_effects.o(.text); src/battle_ai_script_commands.o(.text); src/fldeff_rocksmash.o(.text); src/fldeff_dig.o(.text); @@ -480,6 +480,7 @@ SECTIONS { src/heal_location.o(.rodata); src/region_map.o(.rodata); data/region_map.o(.rodata); + data/image_processing_effects.o(.rodata); src/battle_ai_script_commands.o(.rodata); data/fldeff_flash.o(.rodata); src/field_specials.o(.rodata); -- cgit v1.2.3 From 4cde8cf0e136b6a0eddc97cf51b5aeebc4b8f016 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 7 Jan 2020 17:03:36 -0500 Subject: Port image_processing_effects from Emerald --- asm/image_processing_effects.s | 3486 --------------------------------------- data/image_processing_effects.s | 2 +- ld_script.txt | 2 +- src/image_processing_effects.c | 1224 ++++++++++++++ sym_common.txt | 33 +- 5 files changed, 1228 insertions(+), 3519 deletions(-) delete mode 100644 asm/image_processing_effects.s create mode 100644 src/image_processing_effects.c diff --git a/asm/image_processing_effects.s b/asm/image_processing_effects.s deleted file mode 100644 index 1f63bde6c..000000000 --- a/asm/image_processing_effects.s +++ /dev/null @@ -1,3486 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80C52D0 -sub_80C52D0: @ 80C52D0 - push {lr} - ldr r2, _080C5318 @ =gUnknown_3005334 - ldr r1, [r0, 0x4] - str r1, [r2] - ldr r2, _080C531C @ =gUnknown_3005348 - ldrb r1, [r0, 0x1F] - strb r1, [r2] - ldr r2, _080C5320 @ =gUnknown_3005330 - ldrb r1, [r0, 0x19] - strb r1, [r2] - ldr r2, _080C5324 @ =gUnknown_3005344 - ldrb r1, [r0, 0x1A] - strb r1, [r2] - ldr r2, _080C5328 @ =gUnknown_3005340 - ldrb r1, [r0, 0x1B] - strb r1, [r2] - ldr r2, _080C532C @ =gUnknown_3005338 - ldrb r1, [r0, 0x1C] - strb r1, [r2] - ldr r2, _080C5330 @ =gUnknown_300534C - ldrb r1, [r0, 0x1D] - strb r1, [r2] - ldr r2, _080C5334 @ =gUnknown_300533C - ldrb r1, [r0, 0x1E] - strb r1, [r2] - ldrb r0, [r0] - subs r0, 0x2 - cmp r0, 0x22 - bls _080C530C - b _080C5458 -_080C530C: - lsls r0, 2 - ldr r1, _080C5338 @ =_080C533C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C5318: .4byte gUnknown_3005334 -_080C531C: .4byte gUnknown_3005348 -_080C5320: .4byte gUnknown_3005330 -_080C5324: .4byte gUnknown_3005344 -_080C5328: .4byte gUnknown_3005340 -_080C532C: .4byte gUnknown_3005338 -_080C5330: .4byte gUnknown_300534C -_080C5334: .4byte gUnknown_300533C -_080C5338: .4byte _080C533C - .align 2, 0 -_080C533C: - .4byte _080C53C8 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5428 - .4byte _080C5458 - .4byte _080C53CE - .4byte _080C53D4 - .4byte _080C53E8 - .4byte _080C53FA - .4byte _080C5458 - .4byte _080C5410 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5416 - .4byte _080C53F4 - .4byte _080C541C - .4byte _080C5422 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5434 -_080C53C8: - bl sub_80C55D4 - b _080C5458 -_080C53CE: - bl sub_80C568C - b _080C5458 -_080C53D4: - bl sub_80C5884 - ldr r0, _080C53E4 @ =gUnknown_3005348 - ldrb r0, [r0] - bl sub_80C5748 - b _080C5458 - .align 2, 0 -_080C53E4: .4byte gUnknown_3005348 -_080C53E8: - bl sub_80C5884 - bl sub_80C59D4 - bl sub_80C57EC -_080C53F4: - bl sub_80C59D4 - b _080C5458 -_080C53FA: - bl sub_80C5884 - bl sub_80C5B9C - bl sub_80C5B9C - bl sub_80C5C44 - bl sub_80C57EC - b _080C5458 -_080C5410: - bl sub_80C5A6C - b _080C5458 -_080C5416: - bl sub_80C5884 - b _080C5458 -_080C541C: - bl sub_80C5B9C - b _080C5458 -_080C5422: - bl sub_80C5C44 - b _080C5458 -_080C5428: - bl sub_80C55F4 - movs r0, 0x3 - bl sub_80C545C - b _080C5458 -_080C5434: - bl sub_80C5884 - bl sub_80C5B9C - bl sub_80C5C44 - bl sub_80C57EC - bl sub_80C568C - bl sub_80C568C - movs r0, 0x2 - bl sub_80C545C - movs r0, 0x4 - bl sub_80C5514 -_080C5458: - pop {r0} - bx r0 - thumb_func_end sub_80C52D0 - - thumb_func_start sub_80C545C -sub_80C545C: @ 80C545C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r7, r0, 24 - movs r2, 0 - ldr r0, _080C54FC @ =gUnknown_3005338 - mov r8, r0 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C54EE - ldr r1, _080C5500 @ =gUnknown_3005340 - mov r12, r1 - ldr r3, _080C5504 @ =gUnknown_300534C - mov r10, r3 - ldr r0, _080C5508 @ =gUnknown_3005330 - mov r9, r0 -_080C5482: - ldr r1, _080C550C @ =gUnknown_3005344 - ldrb r0, [r1] - adds r0, r2 - mov r3, r10 - ldrb r1, [r3] - muls r0, r1 - lsls r0, 1 - ldr r3, _080C5510 @ =gUnknown_3005334 - ldr r1, [r3] - adds r1, r0 - mov r3, r9 - ldrb r0, [r3] - lsls r0, 1 - adds r3, r1, r0 - movs r4, 0 - adds r5, r2, 0x1 - mov r0, r12 - ldrb r0, [r0] - cmp r4, r0 - bcs _080C54E2 - movs r6, 0x80 - lsls r6, 8 -_080C54AE: - ldrh r1, [r3] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - bne _080C54D2 - movs r0, 0x1F - ands r0, r1 - adds r0, r7 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x1F - bls _080C54C8 - movs r2, 0x1F -_080C54C8: - lsls r0, r2, 10 - lsls r1, r2, 5 - orrs r0, r1 - orrs r0, r2 - strh r0, [r3] -_080C54D2: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - adds r3, 0x2 - mov r1, r12 - ldrb r1, [r1] - cmp r4, r1 - bcc _080C54AE -_080C54E2: - lsls r0, r5, 24 - lsrs r2, r0, 24 - mov r3, r8 - ldrb r3, [r3] - cmp r2, r3 - bcc _080C5482 -_080C54EE: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C54FC: .4byte gUnknown_3005338 -_080C5500: .4byte gUnknown_3005340 -_080C5504: .4byte gUnknown_300534C -_080C5508: .4byte gUnknown_3005330 -_080C550C: .4byte gUnknown_3005344 -_080C5510: .4byte gUnknown_3005334 - thumb_func_end sub_80C545C - - thumb_func_start sub_80C5514 -sub_80C5514: @ 80C5514 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r2, 0 - ldr r0, _080C55BC @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C55AC - ldr r1, _080C55C0 @ =gUnknown_3005340 - mov r10, r1 -_080C5532: - ldr r3, _080C55C4 @ =gUnknown_3005344 - ldrb r0, [r3] - adds r0, r2 - ldr r3, _080C55C8 @ =gUnknown_300534C - ldrb r1, [r3] - muls r0, r1 - lsls r0, 1 - ldr r3, _080C55CC @ =gUnknown_3005334 - ldr r1, [r3] - adds r1, r0 - ldr r3, _080C55D0 @ =gUnknown_3005330 - ldrb r0, [r3] - lsls r0, 1 - adds r3, r1, r0 - movs r5, 0 - adds r7, r2, 0x1 - mov r0, r10 - ldrb r0, [r0] - cmp r5, r0 - bcs _080C55A0 - movs r1, 0x80 - lsls r1, 8 - mov r9, r1 - movs r0, 0x1F - mov r12, r0 - mov r1, r8 - subs r6, r0, r1 -_080C5568: - ldrh r1, [r3] - mov r0, r9 - ands r0, r1 - cmp r0, 0 - bne _080C5590 - movs r4, 0x1F - mov r2, r12 - ands r2, r1 - cmp r2, r6 - ble _080C5586 - mov r1, r8 - lsrs r0, r1, 1 - subs r0, r4, r0 - lsls r0, 24 - lsrs r2, r0, 24 -_080C5586: - lsls r0, r2, 10 - lsls r1, r2, 5 - orrs r0, r1 - orrs r0, r2 - strh r0, [r3] -_080C5590: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r3, 0x2 - mov r0, r10 - ldrb r0, [r0] - cmp r5, r0 - bcc _080C5568 -_080C55A0: - lsls r0, r7, 24 - lsrs r2, r0, 24 - ldr r1, _080C55BC @ =gUnknown_3005338 - ldrb r1, [r1] - cmp r2, r1 - bcc _080C5532 -_080C55AC: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C55BC: .4byte gUnknown_3005338 -_080C55C0: .4byte gUnknown_3005340 -_080C55C4: .4byte gUnknown_3005344 -_080C55C8: .4byte gUnknown_300534C -_080C55CC: .4byte gUnknown_3005334 -_080C55D0: .4byte gUnknown_3005330 - thumb_func_end sub_80C5514 - - thumb_func_start sub_80C55D4 -sub_80C55D4: @ 80C55D4 - push {r4,r5,lr} - movs r4, 0 - ldr r5, _080C55F0 @ =0x00000c7f -_080C55DA: - lsls r0, r4, 16 - lsrs r0, 16 - bl sub_80C5CF8 - adds r4, 0x1 - cmp r4, r5 - bls _080C55DA - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C55F0: .4byte 0x00000c7f - thumb_func_end sub_80C55D4 - - thumb_func_start sub_80C55F4 -sub_80C55F4: @ 80C55F4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080C5674 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C5666 - ldr r0, _080C5678 @ =gUnknown_3005334 - mov r8, r0 - ldr r3, _080C567C @ =gUnknown_3005340 -_080C560C: - ldr r0, _080C5680 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C5684 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r4, r8 - ldr r1, [r4] - adds r1, r0 - ldr r0, _080C5688 @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - adds r6, r2, 0x1 - ldrb r0, [r3] - cmp r5, r0 - bcs _080C565A - movs r0, 0x80 - lsls r0, 8 - adds r7, r0, 0 -_080C5638: - ldrh r0, [r4] - ands r0, r7 - cmp r0, 0 - bne _080C564C - adds r0, r4, 0 - str r3, [sp] - bl sub_80C5ECC - strh r0, [r4] - ldr r3, [sp] -_080C564C: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldrb r0, [r3] - cmp r5, r0 - bcc _080C5638 -_080C565A: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080C5674 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C560C -_080C5666: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C5674: .4byte gUnknown_3005338 -_080C5678: .4byte gUnknown_3005334 -_080C567C: .4byte gUnknown_3005340 -_080C5680: .4byte gUnknown_3005344 -_080C5684: .4byte gUnknown_300534C -_080C5688: .4byte gUnknown_3005330 - thumb_func_end sub_80C55F4 - - thumb_func_start sub_80C568C -sub_80C568C: @ 80C568C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - movs r2, 0 - ldr r0, _080C5730 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C5722 - ldr r0, _080C5734 @ =gUnknown_3005334 - mov r8, r0 - ldr r3, _080C5738 @ =gUnknown_300534C -_080C56A4: - ldr r0, _080C573C @ =gUnknown_3005344 - ldrb r1, [r0] - ldrb r0, [r3] - muls r0, r1 - lsls r0, 1 - mov r4, r8 - ldr r1, [r4] - adds r1, r0 - ldr r0, _080C5740 @ =gUnknown_3005330 - ldrb r0, [r0] - adds r0, r2 - lsls r0, 1 - adds r4, r1, r0 - ldrh r1, [r4] - mov r0, sp - strh r1, [r0] - movs r5, 0x1 - ldrb r0, [r3] - lsls r0, 1 - adds r4, r0 - ldr r0, _080C5744 @ =gUnknown_3005338 - ldrb r0, [r0] - subs r0, 0x1 - adds r7, r2, 0x1 - cmp r5, r0 - bge _080C5716 - ldr r6, _080C5738 @ =gUnknown_300534C -_080C56DA: - ldrh r0, [r4] - movs r2, 0x80 - lsls r2, 8 - adds r1, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _080C5700 - ldrb r2, [r6] - lsls r2, 1 - adds r2, r4, r2 - mov r0, sp - adds r1, r4, 0 - str r3, [sp, 0x4] - bl sub_80C61BC - strh r0, [r4] - mov r1, sp - strh r0, [r1] - ldr r3, [sp, 0x4] -_080C5700: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - ldrb r0, [r6] - lsls r0, 1 - adds r4, r0 - ldr r0, _080C5744 @ =gUnknown_3005338 - ldrb r0, [r0] - subs r0, 0x1 - cmp r5, r0 - blt _080C56DA -_080C5716: - lsls r0, r7, 24 - lsrs r2, r0, 24 - ldr r0, _080C5730 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C56A4 -_080C5722: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C5730: .4byte gUnknown_3005340 -_080C5734: .4byte gUnknown_3005334 -_080C5738: .4byte gUnknown_300534C -_080C573C: .4byte gUnknown_3005344 -_080C5740: .4byte gUnknown_3005330 -_080C5744: .4byte gUnknown_3005338 - thumb_func_end sub_80C568C - - thumb_func_start sub_80C5748 -sub_80C5748: @ 80C5748 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r2, 0 - ldr r0, _080C57D4 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C57C4 - ldr r0, _080C57D8 @ =gUnknown_3005334 - mov r9, r0 - ldr r3, _080C57DC @ =gUnknown_3005340 -_080C5768: - ldr r0, _080C57E0 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C57E4 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r4, r9 - ldr r1, [r4] - adds r1, r0 - ldr r0, _080C57E8 @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - adds r6, r2, 0x1 - ldrb r0, [r3] - cmp r5, r0 - bcs _080C57B8 - movs r0, 0x80 - lsls r0, 8 - adds r7, r0, 0 -_080C5794: - ldrh r0, [r4] - ands r0, r7 - cmp r0, 0 - bne _080C57AA - adds r0, r4, 0 - mov r1, r8 - str r3, [sp] - bl sub_80C5F00 - strh r0, [r4] - ldr r3, [sp] -_080C57AA: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldrb r0, [r3] - cmp r5, r0 - bcc _080C5794 -_080C57B8: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080C57D4 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C5768 -_080C57C4: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C57D4: .4byte gUnknown_3005338 -_080C57D8: .4byte gUnknown_3005334 -_080C57DC: .4byte gUnknown_3005340 -_080C57E0: .4byte gUnknown_3005344 -_080C57E4: .4byte gUnknown_300534C -_080C57E8: .4byte gUnknown_3005330 - thumb_func_end sub_80C5748 - - thumb_func_start sub_80C57EC -sub_80C57EC: @ 80C57EC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080C586C @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C585E - ldr r0, _080C5870 @ =gUnknown_3005334 - mov r8, r0 - ldr r3, _080C5874 @ =gUnknown_3005340 -_080C5804: - ldr r0, _080C5878 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C587C @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r4, r8 - ldr r1, [r4] - adds r1, r0 - ldr r0, _080C5880 @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - adds r6, r2, 0x1 - ldrb r0, [r3] - cmp r5, r0 - bcs _080C5852 - movs r0, 0x80 - lsls r0, 8 - adds r7, r0, 0 -_080C5830: - ldrh r0, [r4] - ands r0, r7 - cmp r0, 0 - bne _080C5844 - adds r0, r4, 0 - str r3, [sp] - bl sub_80C600C - strh r0, [r4] - ldr r3, [sp] -_080C5844: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldrb r0, [r3] - cmp r5, r0 - bcc _080C5830 -_080C5852: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080C586C @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C5804 -_080C585E: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C586C: .4byte gUnknown_3005338 -_080C5870: .4byte gUnknown_3005334 -_080C5874: .4byte gUnknown_3005340 -_080C5878: .4byte gUnknown_3005344 -_080C587C: .4byte gUnknown_300534C -_080C5880: .4byte gUnknown_3005330 - thumb_func_end sub_80C57EC - - thumb_func_start sub_80C5884 -sub_80C5884: @ 80C5884 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - movs r7, 0 - ldr r0, _080C59BC @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r7, r0 - bcs _080C5910 - ldr r0, _080C59C0 @ =gUnknown_3005334 - mov r8, r0 -_080C589A: - ldr r0, _080C59C4 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r7 - ldr r0, _080C59C8 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r2, r8 - ldr r1, [r2] - adds r1, r0 - ldr r0, _080C59CC @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r5, r1, r0 - adds r4, r5, 0x2 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80C603C - strh r0, [r5] - movs r6, 0x1 - adds r5, r4, 0 - ldr r0, _080C59D0 @ =gUnknown_3005340 - ldrb r0, [r0] - subs r0, 0x1 - adds r7, 0x1 - cmp r6, r0 - bge _080C58FA -_080C58D2: - adds r4, r5, 0x2 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80C603C - strh r0, [r5] - subs r1, r5, 0x2 - adds r0, r5, 0 - bl sub_80C603C - strh r0, [r5] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r5, r4, 0 - ldr r0, _080C59D0 @ =gUnknown_3005340 - ldrb r0, [r0] - subs r0, 0x1 - cmp r6, r0 - blt _080C58D2 -_080C58FA: - subs r1, r5, 0x2 - adds r0, r5, 0 - bl sub_80C603C - strh r0, [r5] - lsls r0, r7, 24 - lsrs r7, r0, 24 - ldr r0, _080C59BC @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r7, r0 - bcc _080C589A -_080C5910: - movs r6, 0 - ldr r0, _080C59D0 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r6, r0 - bcs _080C59B0 - ldr r3, _080C59C0 @ =gUnknown_3005334 - mov r9, r3 - ldr r0, _080C59C8 @ =gUnknown_300534C - mov r8, r0 -_080C5922: - ldr r0, _080C59C4 @ =gUnknown_3005344 - ldrb r0, [r0] - mov r2, r8 - ldrb r1, [r2] - muls r0, r1 - lsls r0, 1 - mov r3, r9 - ldr r2, [r3] - adds r2, r0 - ldr r0, _080C59CC @ =gUnknown_3005330 - ldrb r0, [r0] - adds r0, r6 - lsls r0, 1 - adds r5, r2, r0 - lsls r1, 1 - adds r1, r5, r1 - adds r0, r5, 0 - bl sub_80C603C - strh r0, [r5] - movs r7, 0x1 - mov r1, r8 - ldrb r0, [r1] - lsls r0, 1 - adds r5, r0 - ldr r0, _080C59BC @ =gUnknown_3005338 - ldrb r0, [r0] - subs r0, 0x1 - adds r6, 0x1 - cmp r7, r0 - bge _080C5994 - ldr r4, _080C59C8 @ =gUnknown_300534C -_080C5962: - ldrb r1, [r4] - lsls r1, 1 - adds r1, r5, r1 - adds r0, r5, 0 - bl sub_80C603C - strh r0, [r5] - ldrb r1, [r4] - lsls r1, 1 - subs r1, r5, r1 - adds r0, r5, 0 - bl sub_80C603C - strh r0, [r5] - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - ldrb r0, [r4] - lsls r0, 1 - adds r5, r0 - ldr r0, _080C59BC @ =gUnknown_3005338 - ldrb r0, [r0] - subs r0, 0x1 - cmp r7, r0 - blt _080C5962 -_080C5994: - mov r2, r8 - ldrb r1, [r2] - lsls r1, 1 - subs r1, r5, r1 - adds r0, r5, 0 - bl sub_80C603C - strh r0, [r5] - lsls r0, r6, 24 - lsrs r6, r0, 24 - ldr r0, _080C59D0 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r6, r0 - bcc _080C5922 -_080C59B0: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C59BC: .4byte gUnknown_3005338 -_080C59C0: .4byte gUnknown_3005334 -_080C59C4: .4byte gUnknown_3005344 -_080C59C8: .4byte gUnknown_300534C -_080C59CC: .4byte gUnknown_3005330 -_080C59D0: .4byte gUnknown_3005340 - thumb_func_end sub_80C5884 - - thumb_func_start sub_80C59D4 -sub_80C59D4: @ 80C59D4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080C5A54 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C5A46 - ldr r0, _080C5A58 @ =gUnknown_3005334 - mov r8, r0 - ldr r3, _080C5A5C @ =gUnknown_3005340 -_080C59EC: - ldr r0, _080C5A60 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C5A64 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r4, r8 - ldr r1, [r4] - adds r1, r0 - ldr r0, _080C5A68 @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - adds r6, r2, 0x1 - ldrb r0, [r3] - cmp r5, r0 - bcs _080C5A3A - movs r0, 0x80 - lsls r0, 8 - adds r7, r0, 0 -_080C5A18: - ldrh r0, [r4] - ands r0, r7 - cmp r0, 0 - bne _080C5A2C - adds r0, r4, 0 - str r3, [sp] - bl sub_80C606C - strh r0, [r4] - ldr r3, [sp] -_080C5A2C: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldrb r0, [r3] - cmp r5, r0 - bcc _080C5A18 -_080C5A3A: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080C5A54 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C59EC -_080C5A46: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C5A54: .4byte gUnknown_3005338 -_080C5A58: .4byte gUnknown_3005334 -_080C5A5C: .4byte gUnknown_3005340 -_080C5A60: .4byte gUnknown_3005344 -_080C5A64: .4byte gUnknown_300534C -_080C5A68: .4byte gUnknown_3005330 - thumb_func_end sub_80C59D4 - - thumb_func_start sub_80C5A6C -sub_80C5A6C: @ 80C5A6C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - ldr r0, _080C5B98 @ =gUnknown_3005334 - ldr r4, [r0] - movs r6, 0 - movs r0, 0x80 - lsls r0, 8 - adds r5, r0, 0 -_080C5A84: - movs r7, 0 -_080C5A86: - ldrh r0, [r4] - ands r0, r5 - cmp r0, 0 - bne _080C5A96 - adds r0, r4, 0 - bl sub_80C606C - strh r0, [r4] -_080C5A96: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - adds r4, 0x2 - cmp r7, 0x3F - bls _080C5A86 - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x3F - bls _080C5A84 - movs r7, 0 - ldr r1, _080C5B98 @ =gUnknown_3005334 - mov r10, r1 - mov r3, sp - movs r2, 0x80 - lsls r2, 8 - mov r9, r2 -_080C5ABA: - lsls r0, r7, 1 - mov r2, r10 - ldr r1, [r2] - adds r4, r1, r0 - ldrh r1, [r4] - strh r1, [r3] - mov r1, r9 - strh r1, [r4] - movs r6, 0x1 - adds r4, 0x80 - adds r5, r0, 0 -_080C5AD0: - ldrh r0, [r4] - movs r2, 0x80 - lsls r2, 8 - ands r0, r2 - cmp r0, 0 - bne _080C5AF0 - adds r2, r4, 0 - adds r2, 0x80 - mov r0, sp - adds r1, r4, 0 - str r3, [sp, 0x4] - bl sub_80C62DC - strh r0, [r4] - ldr r3, [sp, 0x4] - strh r0, [r3] -_080C5AF0: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r4, 0x80 - cmp r6, 0x3E - bls _080C5AD0 - mov r0, r9 - strh r0, [r4] - mov r1, r10 - ldr r0, [r1] - adds r4, r0, r5 - ldrh r0, [r4] - strh r0, [r3] - mov r2, r9 - strh r2, [r4] - movs r6, 0x1 - adds r4, 0x80 - movs r0, 0x80 - lsls r0, 8 - mov r8, r0 -_080C5B18: - ldrh r0, [r4] - mov r1, r8 - ands r0, r1 - adds r5, r4, 0 - adds r5, 0x80 - cmp r0, 0 - bne _080C5B38 - mov r0, sp - adds r1, r4, 0 - adds r2, r5, 0 - str r3, [sp, 0x4] - bl sub_80C62DC - strh r0, [r4] - ldr r3, [sp, 0x4] - strh r0, [r3] -_080C5B38: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r4, r5, 0 - cmp r6, 0x3E - bls _080C5B18 - mov r2, r9 - strh r2, [r4] - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0x3F - bls _080C5ABA - ldr r0, _080C5B98 @ =gUnknown_3005334 - ldr r4, [r0] - movs r6, 0 - movs r0, 0x80 - lsls r0, 8 - mov r8, r0 -_080C5B5E: - movs r7, 0 - adds r5, r6, 0x1 -_080C5B62: - ldrh r0, [r4] - mov r1, r8 - ands r0, r1 - cmp r0, 0 - bne _080C5B74 - adds r0, r4, 0 - bl sub_80C606C - strh r0, [r4] -_080C5B74: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - adds r4, 0x2 - cmp r7, 0x3F - bls _080C5B62 - lsls r0, r5, 24 - lsrs r6, r0, 24 - cmp r6, 0x3F - bls _080C5B5E - 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 -_080C5B98: .4byte gUnknown_3005334 - thumb_func_end sub_80C5A6C - - thumb_func_start sub_80C5B9C -sub_80C5B9C: @ 80C5B9C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080C5C2C @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C5C1E - ldr r0, _080C5C30 @ =gUnknown_3005334 - mov r8, r0 -_080C5BB2: - ldr r0, _080C5C34 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C5C38 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r3, r8 - ldr r1, [r3] - adds r1, r0 - ldr r0, _080C5C3C @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - ldrh r1, [r4] - mov r0, sp - strh r1, [r0] - movs r5, 0x1 - adds r4, 0x2 - ldr r0, _080C5C40 @ =gUnknown_3005340 - ldrb r0, [r0] - subs r0, 0x1 - adds r6, r2, 0x1 - cmp r5, r0 - bge _080C5C12 - movs r0, 0x80 - lsls r0, 8 - adds r7, r0, 0 -_080C5BEA: - ldrh r0, [r4] - ands r0, r7 - cmp r0, 0 - bne _080C5C00 - mov r0, sp - adds r1, r4, 0 - bl sub_80C6098 - strh r0, [r4] - mov r1, sp - strh r0, [r1] -_080C5C00: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldr r0, _080C5C40 @ =gUnknown_3005340 - ldrb r0, [r0] - subs r0, 0x1 - cmp r5, r0 - blt _080C5BEA -_080C5C12: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080C5C2C @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C5BB2 -_080C5C1E: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C5C2C: .4byte gUnknown_3005338 -_080C5C30: .4byte gUnknown_3005334 -_080C5C34: .4byte gUnknown_3005344 -_080C5C38: .4byte gUnknown_300534C -_080C5C3C: .4byte gUnknown_3005330 -_080C5C40: .4byte gUnknown_3005340 - thumb_func_end sub_80C5B9C - - thumb_func_start sub_80C5C44 -sub_80C5C44: @ 80C5C44 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - movs r2, 0 - ldr r0, _080C5CE0 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C5CD2 - ldr r0, _080C5CE4 @ =gUnknown_3005334 - mov r8, r0 - ldr r7, _080C5CE8 @ =gUnknown_300534C -_080C5C5C: - ldr r0, _080C5CEC @ =gUnknown_3005344 - ldrb r1, [r0] - ldrb r0, [r7] - muls r0, r1 - lsls r0, 1 - mov r3, r8 - ldr r1, [r3] - adds r1, r0 - ldr r0, _080C5CF0 @ =gUnknown_3005330 - ldrb r0, [r0] - adds r0, r2 - lsls r0, 1 - adds r4, r1, r0 - ldrh r1, [r4] - mov r0, sp - strh r1, [r0] - movs r5, 0x1 - ldrb r0, [r7] - lsls r0, 1 - adds r4, r0 - ldr r0, _080C5CF4 @ =gUnknown_3005338 - ldrb r0, [r0] - subs r0, 0x1 - adds r6, r2, 0x1 - cmp r5, r0 - bge _080C5CC6 - movs r0, 0x80 - lsls r0, 8 - adds r2, r0, 0 -_080C5C96: - ldrh r0, [r4] - ands r0, r2 - cmp r0, 0 - bne _080C5CB0 - mov r0, sp - adds r1, r4, 0 - str r2, [sp, 0x4] - bl sub_80C6098 - strh r0, [r4] - mov r1, sp - strh r0, [r1] - ldr r2, [sp, 0x4] -_080C5CB0: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - ldrb r0, [r7] - lsls r0, 1 - adds r4, r0 - ldr r0, _080C5CF4 @ =gUnknown_3005338 - ldrb r0, [r0] - subs r0, 0x1 - cmp r5, r0 - blt _080C5C96 -_080C5CC6: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080C5CE0 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C5C5C -_080C5CD2: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C5CE0: .4byte gUnknown_3005340 -_080C5CE4: .4byte gUnknown_3005334 -_080C5CE8: .4byte gUnknown_300534C -_080C5CEC: .4byte gUnknown_3005344 -_080C5CF0: .4byte gUnknown_3005330 -_080C5CF4: .4byte gUnknown_3005338 - thumb_func_end sub_80C5C44 - - thumb_func_start sub_80C5CF8 -sub_80C5CF8: @ 80C5CF8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x20 - lsls r0, 16 - lsrs r0, 16 - mov r10, r0 - mov r2, sp - ldr r3, _080C5D64 @ =gUnknown_83F3024 - lsls r1, r0, 1 - add r1, r10 - adds r0, r1, r3 - ldrb r0, [r0] - strb r0, [r2] - adds r0, r3, 0x1 - adds r0, r1, r0 - ldrb r0, [r0] - strb r0, [r2, 0x1] - mov r5, sp - adds r0, r3, 0x2 - adds r1, r0 - ldrb r4, [r1] - lsls r2, r4, 24 - lsrs r1, r2, 27 - movs r0, 0x7 - ands r1, r0 - strh r1, [r5, 0x2] - lsrs r2, 25 - mov r9, r2 - movs r0, 0x3 - ands r2, r0 - mov r9, r2 - movs r5, 0x1 - ands r5, r4 - movs r4, 0x1 - mov r8, r4 - cmp r8, r1 - bcs _080C5DAA - mov r3, sp -_080C5D4A: - cmp r5, 0 - bne _080C5D68 - mov r0, r8 - lsls r2, r0, 2 - mov r4, sp - adds r1, r4, r2 - ldrb r0, [r3] - mov r4, r8 - subs r0, r4 - strb r0, [r1] - ldrb r0, [r3, 0x1] - add r0, r8 - b _080C5D7A - .align 2, 0 -_080C5D64: .4byte gUnknown_83F3024 -_080C5D68: - mov r0, r8 - lsls r2, r0, 2 - mov r4, sp - adds r1, r4, r2 - ldrb r0, [r3] - adds r0, 0x1 - strb r0, [r1] - ldrb r0, [r3, 0x1] - subs r0, 0x1 -_080C5D7A: - strb r0, [r1, 0x1] - add r2, sp - ldrb r0, [r2] - cmp r0, 0x3F - bhi _080C5D8A - ldrb r0, [r2, 0x1] - cmp r0, 0x3F - bls _080C5D92 -_080C5D8A: - mov r0, r8 - subs r0, 0x1 - strh r0, [r3, 0x2] - b _080C5DAA -_080C5D92: - ldrh r0, [r3, 0x2] - mov r1, r8 - subs r0, r1 - strh r0, [r2, 0x2] - mov r0, r8 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldrh r0, [r3, 0x2] - cmp r8, r0 - bcc _080C5D4A -_080C5DAA: - movs r2, 0 - mov r8, r2 - mov r0, sp - ldrh r0, [r0, 0x2] - cmp r8, r0 - bcc _080C5DB8 - b _080C5EBA -_080C5DB8: - movs r3, 0x1F -_080C5DBA: - ldr r1, _080C5E18 @ =gUnknown_3005334 - mov r4, r8 - lsls r0, r4, 2 - mov r2, sp - adds r6, r2, r0 - ldrb r0, [r6, 0x1] - lsls r0, 7 - ldr r1, [r1] - adds r1, r0 - ldrb r0, [r6] - lsls r0, 1 - adds r2, r1, r0 - ldrh r1, [r2] - movs r4, 0x80 - lsls r4, 8 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - bne _080C5EA6 - movs r7, 0x1F - ands r7, r1 - lsls r0, r1, 16 - lsrs r5, r0, 21 - ands r5, r3 - lsrs r4, r0, 26 - ands r4, r3 - mov r0, r9 - cmp r0, 0 - blt _080C5E9C - cmp r0, 0x1 - ble _080C5E1C - cmp r0, 0x3 - bgt _080C5E9C - ldrh r0, [r6, 0x2] - adds r1, r7, r0 - lsls r1, 16 - lsrs r7, r1, 16 - adds r1, r5, r0 - lsls r1, 16 - lsrs r5, r1, 16 - adds r0, r4, r0 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r7, 0x1F - bls _080C5E90 - movs r7, 0x1F - b _080C5E90 - .align 2, 0 -_080C5E18: .4byte gUnknown_3005334 -_080C5E1C: - mov r1, r10 - lsls r0, r1, 1 - add r0, r10 - ldr r1, _080C5E50 @ =gUnknown_83F3024 - adds r1, 0x2 - adds r0, r1 - ldrb r0, [r0] - lsrs r0, 3 - movs r1, 0x7 - ands r0, r1 - movs r1, 0x3 - str r2, [sp, 0x18] - str r3, [sp, 0x1C] - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - ldr r2, [sp, 0x18] - ldr r3, [sp, 0x1C] - cmp r0, 0x1 - beq _080C5E6C - cmp r0, 0x1 - bgt _080C5E54 - cmp r0, 0 - beq _080C5E5A - b _080C5E9C - .align 2, 0 -_080C5E50: .4byte gUnknown_83F3024 -_080C5E54: - cmp r0, 0x2 - beq _080C5E7E - b _080C5E9C -_080C5E5A: - ldrh r0, [r6, 0x2] - cmp r7, r0 - bcc _080C5E68 - subs r0, r7, r0 - lsls r0, 16 - lsrs r7, r0, 16 - b _080C5E9C -_080C5E68: - movs r7, 0 - b _080C5E9C -_080C5E6C: - ldrh r0, [r6, 0x2] - cmp r5, r0 - bcc _080C5E7A - subs r0, r5, r0 - lsls r0, 16 - lsrs r5, r0, 16 - b _080C5E9C -_080C5E7A: - movs r5, 0 - b _080C5E9C -_080C5E7E: - ldrh r0, [r6, 0x2] - cmp r4, r0 - bcc _080C5E8C - subs r0, r4, r0 - lsls r0, 16 - lsrs r4, r0, 16 - b _080C5E9C -_080C5E8C: - movs r4, 0 - b _080C5E9C -_080C5E90: - cmp r5, 0x1F - bls _080C5E96 - movs r5, 0x1F -_080C5E96: - cmp r4, 0x1F - bls _080C5E9C - movs r4, 0x1F -_080C5E9C: - lsls r0, r4, 10 - lsls r1, r5, 5 - orrs r0, r1 - orrs r7, r0 - strh r7, [r2] -_080C5EA6: - mov r0, r8 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - mov r0, sp - ldrh r0, [r0, 0x2] - cmp r8, r0 - bcs _080C5EBA - b _080C5DBA -_080C5EBA: - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80C5CF8 - - thumb_func_start sub_80C5ECC -sub_80C5ECC: @ 80C5ECC - push {lr} - ldrh r1, [r0] - movs r3, 0x1F - movs r0, 0x1F - ands r0, r1 - lsls r1, 16 - lsrs r2, r1, 21 - ands r2, r3 - lsrs r1, 26 - ands r1, r3 - adds r0, r2 - adds r0, r1 - movs r1, 0x3 - bl __divsi3 - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - lsls r0, r1, 10 - lsls r2, r1, 5 - orrs r0, r2 - orrs r0, r1 - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - thumb_func_end sub_80C5ECC - - thumb_func_start sub_80C5F00 -sub_80C5F00: @ 80C5F00 - push {r4,lr} - lsls r1, 24 - lsrs r4, r1, 24 - ldrh r0, [r0] - movs r2, 0x1F - movs r1, 0x1F - ands r1, r0 - lsls r0, 16 - lsrs r3, r0, 21 - ands r3, r2 - lsrs r0, 26 - ands r0, r2 - cmp r1, 0x10 - bhi _080C5F30 - cmp r3, 0x10 - bhi _080C5F30 - cmp r0, 0x10 - bhi _080C5F30 - adds r0, r4, 0 - bl sub_80C5F3C - lsls r0, 16 - lsrs r0, 16 - b _080C5F32 -_080C5F30: - ldr r0, _080C5F38 @ =0x00007fff -_080C5F32: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080C5F38: .4byte 0x00007fff - thumb_func_end sub_80C5F00 - - thumb_func_start sub_80C5F3C -sub_80C5F3C: @ 80C5F3C - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0 - mov r8, r0 - movs r6, 0 - movs r7, 0 - adds r0, r4, 0 - movs r1, 0x6 - bl __udivsi3 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x3 - bl __umodsi3 - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r4, 0 - movs r1, 0x6 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x5 - bhi _080C5FF4 - lsls r0, 2 - ldr r1, _080C5F80 @ =_080C5F84 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C5F80: .4byte _080C5F84 - .align 2, 0 -_080C5F84: - .4byte _080C5F9C - .4byte _080C5FAC - .4byte _080C5FBC - .4byte _080C5FCA - .4byte _080C5FD8 - .4byte _080C5FE6 -_080C5F9C: - movs r0, 0x15 - subs r0, r5 - lsls r0, 16 - lsrs r6, r0, 16 - adds r7, r6, 0 - movs r1, 0 - mov r8, r1 - b _080C5FF4 -_080C5FAC: - movs r7, 0 - movs r0, 0x15 - subs r0, r5 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - mov r6, r8 - b _080C5FF4 -_080C5FBC: - movs r0, 0x15 - subs r0, r5 - lsls r0, 16 - lsrs r7, r0, 16 - movs r6, 0 - mov r8, r7 - b _080C5FF4 -_080C5FCA: - movs r7, 0 - movs r6, 0 - movs r0, 0x17 - subs r0, r5 - lsls r0, 16 - lsrs r0, 16 - b _080C5FF2 -_080C5FD8: - movs r0, 0x17 - subs r0, r5 - lsls r0, 16 - lsrs r7, r0, 16 - movs r6, 0 - mov r8, r6 - b _080C5FF4 -_080C5FE6: - movs r7, 0 - movs r0, 0x17 - subs r0, r5 - lsls r0, 16 - lsrs r6, r0, 16 - movs r0, 0 -_080C5FF2: - mov r8, r0 -_080C5FF4: - lsls r0, r7, 10 - lsls r1, r6, 5 - orrs r0, r1 - mov r1, r8 - orrs r1, r0 - lsls r0, r1, 16 - lsrs r0, 16 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80C5F3C - - thumb_func_start sub_80C600C -sub_80C600C: @ 80C600C - push {lr} - ldrh r0, [r0] - movs r2, 0x1F - movs r1, 0x1F - ands r1, r0 - lsls r0, 16 - lsrs r3, r0, 21 - ands r3, r2 - lsrs r0, 26 - ands r0, r2 - cmp r1, 0x10 - bhi _080C6030 - cmp r3, 0x10 - bhi _080C6030 - cmp r0, 0x10 - bhi _080C6030 - movs r0, 0 - b _080C6032 -_080C6030: - ldr r0, _080C6038 @ =0x00007fff -_080C6032: - pop {r1} - bx r1 - .align 2, 0 -_080C6038: .4byte 0x00007fff - thumb_func_end sub_80C600C - - thumb_func_start sub_80C603C -sub_80C603C: @ 80C603C - push {r4,lr} - adds r4, r0, 0 - ldrh r3, [r4] - cmp r3, 0 - beq _080C6064 - movs r2, 0x80 - lsls r2, 8 - adds r0, r2, 0 - ands r0, r3 - cmp r0, 0 - beq _080C6056 - adds r0, r2, 0 - b _080C6066 -_080C6056: - ldrh r1, [r1] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _080C6064 - ldrh r0, [r4] - b _080C6066 -_080C6064: - movs r0, 0 -_080C6066: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80C603C - - thumb_func_start sub_80C606C -sub_80C606C: @ 80C606C - push {r4,lr} - ldrh r1, [r0] - movs r0, 0x1F - movs r3, 0x1F - ands r3, r1 - lsls r1, 16 - lsrs r2, r1, 21 - lsrs r1, 26 - subs r3, r0, r3 - adds r4, r0, 0 - bics r4, r2 - adds r2, r4, 0 - bics r0, r1 - lsls r0, 10 - lsls r2, 5 - orrs r0, r2 - orrs r0, r3 - lsls r0, 16 - lsrs r0, 16 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80C606C - - thumb_func_start sub_80C6098 -sub_80C6098: @ 80C6098 - push {r4-r7,lr} - sub sp, 0x14 - adds r7, r1, 0 - ldrh r4, [r0] - ldrh r5, [r7] - lsls r6, r4, 16 - lsls r0, r5, 16 - mov r12, r0 - cmp r4, r5 - beq _080C610A - mov r2, sp - movs r3, 0x1F - movs r1, 0x1F - adds r0, r1, 0 - ands r0, r4 - strh r0, [r2] - lsrs r0, r6, 21 - ands r0, r3 - strh r0, [r2, 0x2] - lsrs r0, r6, 26 - ands r0, r3 - strh r0, [r2, 0x4] - mov r0, sp - ands r1, r5 - strh r1, [r0, 0x6] - mov r1, sp - mov r2, r12 - lsrs r0, r2, 21 - ands r0, r3 - strh r0, [r1, 0x8] - lsrs r0, r2, 26 - ands r0, r3 - strh r0, [r1, 0xA] - mov r0, sp - ldrh r0, [r0] - cmp r0, 0x19 - bls _080C60F2 - mov r0, sp - ldrh r0, [r0, 0x2] - cmp r0, 0x19 - bls _080C60F2 - mov r0, sp - ldrh r0, [r0, 0x4] - cmp r0, 0x19 - bhi _080C610A -_080C60F2: - mov r0, sp - ldrh r0, [r0, 0x6] - cmp r0, 0x19 - bls _080C610E - mov r0, sp - ldrh r0, [r0, 0x8] - cmp r0, 0x19 - bls _080C610E - mov r0, sp - ldrh r0, [r0, 0xA] - cmp r0, 0x19 - bls _080C610E -_080C610A: - ldrh r0, [r7] - b _080C61B4 -_080C610E: - movs r4, 0 - add r6, sp, 0xC - mov r7, sp - adds r7, 0x6 - adds r5, r6, 0 -_080C6118: - lsls r2, r4, 1 - mov r1, sp - adds r0, r1, r2 - adds r1, r7, r2 - ldrh r3, [r0] - ldrh r0, [r1] - cmp r3, r0 - bls _080C612E - adds r1, r5, r2 - subs r0, r3, r0 - b _080C6132 -_080C612E: - adds r1, r5, r2 - subs r0, r3 -_080C6132: - strh r0, [r1] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x2 - bls _080C6118 - adds r1, r6, 0 - ldrh r0, [r1, 0x2] - ldrh r3, [r1] - cmp r3, r0 - bcc _080C6158 - ldrh r2, [r1, 0x4] - cmp r3, r2 - bcc _080C6152 - adds r2, r3, 0 - b _080C616C -_080C6152: - cmp r0, r2 - bcs _080C615E - b _080C6166 -_080C6158: - ldrh r2, [r1, 0x4] - cmp r0, r2 - bcc _080C6162 -_080C615E: - ldrh r2, [r1, 0x2] - b _080C616C -_080C6162: - cmp r2, r3 - bcc _080C616A -_080C6166: - ldrh r2, [r1, 0x4] - b _080C616C -_080C616A: - ldrh r2, [r6] -_080C616C: - mov r0, sp - ldrh r1, [r0, 0x6] - lsrs r0, r2, 1 - movs r6, 0x1F - subs r6, r0 - adds r0, r1, 0 - muls r0, r6 - movs r1, 0x1F - bl __divsi3 - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - mov r0, sp - ldrh r0, [r0, 0x8] - muls r0, r6 - movs r1, 0x1F - bl __divsi3 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - mov r0, sp - ldrh r0, [r0, 0xA] - muls r0, r6 - movs r1, 0x1F - bl __divsi3 - lsls r0, 16 - lsrs r0, 6 - lsls r4, 5 - orrs r0, r4 - orrs r5, r0 - lsls r5, 16 - lsrs r5, 16 - adds r0, r5, 0 -_080C61B4: - add sp, 0x14 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80C6098 - - thumb_func_start sub_80C61BC -sub_80C61BC: @ 80C61BC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - adds r3, r0, 0 - mov r10, r1 - str r2, [sp] - ldrh r1, [r3] - mov r0, r10 - ldrh r0, [r0] - cmp r1, r0 - bne _080C61E4 - ldrh r0, [r2] - cmp r0, r1 - bne _080C61E4 - mov r1, r10 - ldrh r0, [r1] - b _080C62CC -_080C61E4: - mov r2, r10 - ldrh r0, [r2] - movs r1, 0x1F - mov r9, r1 - movs r4, 0x1F - adds r5, r4, 0 - ands r5, r0 - lsls r0, 16 - lsrs r2, r0, 21 - mov r1, r9 - ands r1, r2 - mov r8, r1 - lsrs r0, 26 - mov r2, r9 - ands r2, r0 - str r2, [sp, 0x4] - ldrh r2, [r3] - adds r0, r4, 0 - ands r0, r2 - lsls r2, 16 - lsrs r1, r2, 21 - mov r3, r9 - ands r1, r3 - adds r0, r1 - lsrs r2, 26 - ands r2, r3 - adds r0, r2 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - lsrs r7, r0, 16 - mov r1, r8 - adds r0, r5, r1 - ldr r2, [sp, 0x4] - adds r0, r2 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - lsrs r6, r0, 16 - ldr r3, [sp] - ldrh r1, [r3] - ands r4, r1 - lsls r1, 16 - lsrs r0, r1, 21 - mov r2, r9 - ands r0, r2 - adds r4, r0 - lsrs r1, 26 - ands r1, r2 - adds r4, r1 - adds r0, r4, 0 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r7, r6 - bne _080C6266 - cmp r1, r6 - bne _080C6266 - mov r3, r10 - ldrh r0, [r3] - b _080C62CC -_080C6266: - cmp r7, r6 - bls _080C626E - subs r0, r7, r6 - b _080C6270 -_080C626E: - subs r0, r6, r7 -_080C6270: - lsls r0, 16 - lsrs r2, r0, 16 - cmp r1, r6 - bls _080C627C - subs r0, r1, r6 - b _080C627E -_080C627C: - subs r0, r6, r1 -_080C627E: - lsls r0, 16 - lsrs r0, 16 - cmp r2, r0 - bcc _080C6288 - adds r0, r2, 0 -_080C6288: - lsrs r0, 1 - movs r4, 0x1F - subs r4, r0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r5, 0 - muls r0, r4 - movs r1, 0x1F - bl __divsi3 - lsls r0, 16 - lsrs r5, r0, 16 - mov r0, r8 - muls r0, r4 - movs r1, 0x1F - bl __divsi3 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - ldr r1, [sp, 0x4] - adds r0, r1, 0 - muls r0, r4 - movs r1, 0x1F - bl __divsi3 - lsls r0, 16 - lsrs r0, 6 - mov r2, r8 - lsls r1, r2, 5 - orrs r0, r1 - orrs r5, r0 - lsls r0, r5, 16 - lsrs r0, 16 -_080C62CC: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80C61BC - - thumb_func_start sub_80C62DC -sub_80C62DC: @ 80C62DC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - adds r3, r0, 0 - mov r10, r1 - str r2, [sp] - ldrh r1, [r3] - mov r0, r10 - ldrh r0, [r0] - cmp r1, r0 - bne _080C6304 - ldrh r0, [r2] - cmp r0, r1 - bne _080C6304 - mov r1, r10 - ldrh r0, [r1] - b _080C63EA -_080C6304: - mov r2, r10 - ldrh r0, [r2] - movs r1, 0x1F - mov r9, r1 - movs r4, 0x1F - adds r5, r4, 0 - ands r5, r0 - lsls r0, 16 - lsrs r2, r0, 21 - mov r1, r9 - ands r1, r2 - mov r8, r1 - lsrs r0, 26 - mov r2, r9 - ands r2, r0 - str r2, [sp, 0x4] - ldrh r2, [r3] - adds r0, r4, 0 - ands r0, r2 - lsls r2, 16 - lsrs r1, r2, 21 - mov r3, r9 - ands r1, r3 - adds r0, r1 - lsrs r2, 26 - ands r2, r3 - adds r0, r2 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - lsrs r7, r0, 16 - mov r1, r8 - adds r0, r5, r1 - ldr r2, [sp, 0x4] - adds r0, r2 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - lsrs r6, r0, 16 - ldr r3, [sp] - ldrh r1, [r3] - ands r4, r1 - lsls r1, 16 - lsrs r0, r1, 21 - mov r2, r9 - ands r0, r2 - adds r4, r0 - lsrs r1, 26 - ands r1, r2 - adds r4, r1 - adds r0, r4, 0 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r7, r6 - bne _080C6386 - cmp r1, r6 - bne _080C6386 - mov r3, r10 - ldrh r0, [r3] - b _080C63EA -_080C6386: - cmp r7, r6 - bls _080C638E - subs r0, r7, r6 - b _080C6390 -_080C638E: - subs r0, r6, r7 -_080C6390: - lsls r0, 16 - lsrs r2, r0, 16 - cmp r1, r6 - bls _080C639C - subs r0, r1, r6 - b _080C639E -_080C639C: - subs r0, r6, r1 -_080C639E: - lsls r0, 16 - lsrs r0, 16 - cmp r2, r0 - bcc _080C63A8 - adds r0, r2, 0 -_080C63A8: - movs r4, 0x1F - subs r4, r0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r5, 0 - muls r0, r4 - movs r1, 0x1F - bl __divsi3 - lsls r0, 16 - lsrs r5, r0, 16 - mov r0, r8 - muls r0, r4 - movs r1, 0x1F - bl __divsi3 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - ldr r1, [sp, 0x4] - adds r0, r1, 0 - muls r0, r4 - movs r1, 0x1F - bl __divsi3 - lsls r0, 16 - lsrs r0, 6 - mov r2, r8 - lsls r1, r2, 5 - orrs r0, r1 - orrs r5, r0 - lsls r0, r5, 16 - lsrs r0, 16 -_080C63EA: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80C62DC - - thumb_func_start sub_80C63FC -sub_80C63FC: @ 80C63FC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - ldrb r1, [r0, 0x1D] - lsrs r5, r1, 3 - ldrb r1, [r0, 0x1E] - lsrs r1, 3 - str r1, [sp, 0x8] - ldr r1, [r0, 0x4] - str r1, [sp] - ldr r2, [r0, 0x10] - str r2, [sp, 0x4] - ldrh r0, [r0, 0x16] - cmp r0, 0x2 - bne _080C64AC - movs r1, 0 - ldr r0, [sp, 0x8] - cmp r1, r0 - bcc _080C642A - b _080C6538 -_080C642A: - movs r0, 0 - adds r2, r1, 0x1 - mov r10, r2 - cmp r0, r5 - bcs _080C649E - adds r2, r1, 0 - muls r2, r5 - mov r9, r2 - lsls r1, 3 - mov r8, r1 -_080C643E: - movs r4, 0 - lsls r6, r0, 4 - adds r7, r0, 0x1 - add r0, r9 - lsls r0, 6 - ldr r1, [sp, 0x4] - adds r1, r0 - mov r12, r1 -_080C644E: - lsls r0, r4, 3 - mov r2, r12 - adds r3, r2, r0 - mov r1, r8 - adds r0, r1, r4 - lsls r0, 3 - muls r0, r5 - lsls r0, 1 - ldr r2, [sp] - adds r0, r2, r0 - adds r2, r0, r6 - ldrh r0, [r2, 0x2] - lsls r0, 8 - ldrh r1, [r2] - orrs r0, r1 - strh r0, [r3] - ldrh r0, [r2, 0x6] - lsls r0, 8 - ldrh r1, [r2, 0x4] - orrs r0, r1 - strh r0, [r3, 0x2] - ldrh r0, [r2, 0xA] - lsls r0, 8 - ldrh r1, [r2, 0x8] - orrs r0, r1 - strh r0, [r3, 0x4] - ldrh r0, [r2, 0xE] - lsls r0, 8 - ldrh r1, [r2, 0xC] - orrs r0, r1 - strh r0, [r3, 0x6] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x7 - bls _080C644E - lsls r0, r7, 16 - lsrs r0, 16 - cmp r0, r5 - bcc _080C643E -_080C649E: - mov r1, r10 - lsls r0, r1, 16 - lsrs r1, r0, 16 - ldr r2, [sp, 0x8] - cmp r1, r2 - bcc _080C642A - b _080C6538 -_080C64AC: - movs r1, 0 - ldr r0, [sp, 0x8] - cmp r1, r0 - bcs _080C6538 -_080C64B4: - movs r0, 0 - adds r2, r1, 0x1 - mov r10, r2 - cmp r0, r5 - bcs _080C652C - adds r2, r1, 0 - muls r2, r5 - mov r9, r2 - lsls r1, 3 - mov r8, r1 -_080C64C8: - movs r4, 0 - lsls r6, r0, 4 - adds r7, r0, 0x1 - add r0, r9 - lsls r0, 5 - ldr r1, [sp, 0x4] - adds r1, r0 - mov r12, r1 -_080C64D8: - lsls r0, r4, 2 - mov r2, r12 - adds r3, r2, r0 - mov r1, r8 - adds r0, r1, r4 - lsls r0, 3 - muls r0, r5 - lsls r0, 1 - ldr r2, [sp] - adds r0, r2, r0 - adds r2, r0, r6 - ldrh r1, [r2, 0x2] - lsls r1, 4 - ldrh r0, [r2] - orrs r1, r0 - ldrh r0, [r2, 0x4] - lsls r0, 8 - orrs r1, r0 - ldrh r0, [r2, 0x6] - lsls r0, 12 - orrs r1, r0 - strh r1, [r3] - ldrh r1, [r2, 0xA] - lsls r1, 4 - ldrh r0, [r2, 0x8] - orrs r1, r0 - ldrh r0, [r2, 0xC] - lsls r0, 8 - orrs r1, r0 - ldrh r0, [r2, 0xE] - lsls r0, 12 - orrs r1, r0 - strh r1, [r3, 0x2] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x7 - bls _080C64D8 - lsls r0, r7, 16 - lsrs r0, 16 - cmp r0, r5 - bcc _080C64C8 -_080C652C: - mov r1, r10 - lsls r0, r1, 16 - lsrs r1, r0, 16 - ldr r2, [sp, 0x8] - cmp r1, r2 - bcc _080C64B4 -_080C6538: - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80C63FC - - thumb_func_start sub_80C6548 -sub_80C6548: @ 80C6548 - push {lr} - ldr r2, _080C6598 @ =gUnknown_3005354 - ldrb r1, [r0, 0x18] - lsls r1, 4 - strh r1, [r2] - ldr r3, _080C659C @ =gUnknown_3005350 - ldrh r2, [r2] - lsls r2, 1 - ldr r1, [r0, 0x8] - adds r1, r2 - str r1, [r3] - ldr r2, _080C65A0 @ =gUnknown_3005334 - ldr r1, [r0, 0x4] - str r1, [r2] - ldr r2, _080C65A4 @ =gUnknown_3005330 - ldrb r1, [r0, 0x19] - strb r1, [r2] - ldr r2, _080C65A8 @ =gUnknown_3005344 - ldrb r1, [r0, 0x1A] - strb r1, [r2] - ldr r2, _080C65AC @ =gUnknown_3005340 - ldrb r1, [r0, 0x1B] - strb r1, [r2] - ldr r2, _080C65B0 @ =gUnknown_3005338 - ldrb r1, [r0, 0x1C] - strb r1, [r2] - ldr r2, _080C65B4 @ =gUnknown_300534C - ldrb r1, [r0, 0x1D] - strb r1, [r2] - ldr r2, _080C65B8 @ =gUnknown_300533C - ldrb r1, [r0, 0x1E] - strb r1, [r2] - ldrh r0, [r0, 0x14] - cmp r0, 0x5 - bhi _080C660E - lsls r0, 2 - ldr r1, _080C65BC @ =_080C65C0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C6598: .4byte gUnknown_3005354 -_080C659C: .4byte gUnknown_3005350 -_080C65A0: .4byte gUnknown_3005334 -_080C65A4: .4byte gUnknown_3005330 -_080C65A8: .4byte gUnknown_3005344 -_080C65AC: .4byte gUnknown_3005340 -_080C65B0: .4byte gUnknown_3005338 -_080C65B4: .4byte gUnknown_300534C -_080C65B8: .4byte gUnknown_300533C -_080C65BC: .4byte _080C65C0 - .align 2, 0 -_080C65C0: - .4byte _080C65D8 - .4byte _080C65E0 - .4byte _080C65E8 - .4byte _080C65F2 - .4byte _080C65FC - .4byte _080C6606 -_080C65D8: - movs r0, 0 - bl sub_80C6748 - b _080C660E -_080C65E0: - movs r0, 0x1 - bl sub_80C6748 - b _080C660E -_080C65E8: - bl sub_80C6614 - bl sub_80C6AB8 - b _080C660E -_080C65F2: - bl sub_80C6714 - bl sub_80C6A08 - b _080C660E -_080C65FC: - bl sub_80C66D8 - bl sub_80C6958 - b _080C660E -_080C6606: - bl sub_80C66BC - bl sub_80C68A0 -_080C660E: - pop {r0} - bx r0 - thumb_func_end sub_80C6548 - - thumb_func_start sub_80C6614 -sub_80C6614: @ 80C6614 - ldr r2, _080C667C @ =gUnknown_3005350 - ldr r1, [r2] - movs r0, 0 - strh r0, [r1] - ldr r0, [r2] - ldr r2, _080C6680 @ =0x000018c6 - adds r1, r2, 0 - strh r1, [r0, 0x2] - ldr r2, _080C6684 @ =0x000077bd - adds r1, r2, 0 - strh r1, [r0, 0x4] - ldr r2, _080C6688 @ =0x00002d6b - adds r1, r2, 0 - strh r1, [r0, 0x6] - ldr r2, _080C668C @ =0x000018dd - adds r1, r2, 0 - strh r1, [r0, 0x8] - ldr r2, _080C6690 @ =0x00001ba6 - adds r1, r2, 0 - strh r1, [r0, 0xA] - ldr r2, _080C6694 @ =0x000074c6 - adds r1, r2, 0 - strh r1, [r0, 0xC] - ldr r2, _080C6698 @ =0x00001bbd - adds r1, r2, 0 - strh r1, [r0, 0xE] - ldr r2, _080C669C @ =0x000074dd - adds r1, r2, 0 - strh r1, [r0, 0x10] - ldr r2, _080C66A0 @ =0x000077a6 - adds r1, r2, 0 - strh r1, [r0, 0x12] - ldr r2, _080C66A4 @ =0x0000197d - adds r1, r2, 0 - strh r1, [r0, 0x14] - ldr r2, _080C66A8 @ =0x00001bab - adds r1, r2, 0 - strh r1, [r0, 0x16] - ldr r2, _080C66AC @ =0x00007566 - adds r1, r2, 0 - strh r1, [r0, 0x18] - ldr r2, _080C66B0 @ =0x00002cdd - adds r1, r2, 0 - strh r1, [r0, 0x1A] - ldr r2, _080C66B4 @ =0x00002fa6 - adds r1, r2, 0 - strh r1, [r0, 0x1C] - ldr r2, _080C66B8 @ =0x000074cb - adds r1, r2, 0 - strh r1, [r0, 0x1E] - bx lr - .align 2, 0 -_080C667C: .4byte gUnknown_3005350 -_080C6680: .4byte 0x000018c6 -_080C6684: .4byte 0x000077bd -_080C6688: .4byte 0x00002d6b -_080C668C: .4byte 0x000018dd -_080C6690: .4byte 0x00001ba6 -_080C6694: .4byte 0x000074c6 -_080C6698: .4byte 0x00001bbd -_080C669C: .4byte 0x000074dd -_080C66A0: .4byte 0x000077a6 -_080C66A4: .4byte 0x0000197d -_080C66A8: .4byte 0x00001bab -_080C66AC: .4byte 0x00007566 -_080C66B0: .4byte 0x00002cdd -_080C66B4: .4byte 0x00002fa6 -_080C66B8: .4byte 0x000074cb - thumb_func_end sub_80C6614 - - thumb_func_start sub_80C66BC -sub_80C66BC: @ 80C66BC - ldr r2, _080C66D0 @ =gUnknown_3005350 - ldr r0, [r2] - movs r1, 0 - strh r1, [r0] - ldr r2, [r2] - strh r1, [r2, 0x2] - ldr r1, _080C66D4 @ =0x00007fff - adds r0, r1, 0 - strh r0, [r2, 0x4] - bx lr - .align 2, 0 -_080C66D0: .4byte gUnknown_3005350 -_080C66D4: .4byte 0x00007fff - thumb_func_end sub_80C66BC - - thumb_func_start sub_80C66D8 -sub_80C66D8: @ 80C66D8 - push {r4,r5,lr} - ldr r1, _080C6710 @ =gUnknown_3005350 - ldr r0, [r1] - movs r2, 0 - strh r2, [r0] - ldr r0, [r1] - strh r2, [r0, 0x2] - movs r4, 0 - adds r5, r1, 0 -_080C66EA: - ldr r0, [r5] - lsls r2, r4, 1 - adds r2, r0 - adds r0, r4, 0x2 - lsls r3, r0, 1 - lsls r1, r0, 11 - lsls r0, 6 - orrs r1, r0 - orrs r1, r3 - strh r1, [r2, 0x4] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xD - bls _080C66EA - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C6710: .4byte gUnknown_3005350 - thumb_func_end sub_80C66D8 - - thumb_func_start sub_80C6714 -sub_80C6714: @ 80C6714 - push {r4,lr} - ldr r2, _080C6744 @ =gUnknown_3005350 - ldr r1, [r2] - movs r0, 0 - strh r0, [r1] - movs r3, 0 - adds r4, r2, 0 -_080C6722: - ldr r0, [r4] - lsls r2, r3, 1 - adds r2, r0 - lsls r0, r3, 10 - lsls r1, r3, 5 - orrs r0, r1 - orrs r0, r3 - strh r0, [r2, 0x2] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x1F - bls _080C6722 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C6744: .4byte gUnknown_3005350 - thumb_func_end sub_80C6714 - - thumb_func_start sub_80C6748 -sub_80C6748: @ 80C6748 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - movs r1, 0xDF - mov r9, r1 - cmp r0, 0 - bne _080C6760 - movs r2, 0xFF - mov r9, r2 -_080C6760: - movs r6, 0 - ldr r3, _080C67E4 @ =gUnknown_3005350 - mov r12, r3 - mov r0, r9 - lsls r4, r0, 1 - ldr r5, _080C67E8 @ =gUnknown_3005338 - cmp r6, r9 - bcs _080C6784 - movs r2, 0 -_080C6772: - ldr r0, [r3] - lsls r1, r6, 1 - adds r1, r0 - strh r2, [r1] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, r9 - bcc _080C6772 -_080C6784: - mov r1, r12 - ldr r0, [r1] - adds r0, r4, r0 - ldr r2, _080C67EC @ =0x00003def - adds r1, r2, 0 - strh r1, [r0] - movs r3, 0 - ldrb r5, [r5] - cmp r3, r5 - bcs _080C6888 -_080C6798: - ldr r2, _080C67F0 @ =gUnknown_3005334 - ldr r0, _080C67F4 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r3 - ldr r0, _080C67F8 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - ldr r1, [r2] - adds r1, r0 - ldr r0, _080C67FC @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r6, 0 - ldr r0, _080C6800 @ =gUnknown_3005340 - adds r2, r0, 0 - adds r3, 0x1 - mov r10, r3 - ldrb r3, [r2] - cmp r6, r3 - bcs _080C687A - ldr r0, _080C6804 @ =gUnknown_3005354 - mov r8, r0 -_080C67C8: - ldrh r0, [r4] - movs r3, 0x80 - lsls r3, 8 - adds r1, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _080C6808 - mov r1, r8 - ldrh r0, [r1] - strh r0, [r4] - adds r6, 0x1 - adds r7, r4, 0x2 - b _080C686E - .align 2, 0 -_080C67E4: .4byte gUnknown_3005350 -_080C67E8: .4byte gUnknown_3005338 -_080C67EC: .4byte 0x00003def -_080C67F0: .4byte gUnknown_3005334 -_080C67F4: .4byte gUnknown_3005344 -_080C67F8: .4byte gUnknown_300534C -_080C67FC: .4byte gUnknown_3005330 -_080C6800: .4byte gUnknown_3005340 -_080C6804: .4byte gUnknown_3005354 -_080C6808: - adds r0, r4, 0 - bl sub_80C6B68 - lsls r0, 16 - lsrs r5, r0, 16 - movs r3, 0x1 - adds r6, 0x1 - adds r7, r4, 0x2 - cmp r3, r9 - bcs _080C6864 - ldr r0, _080C6834 @ =gUnknown_3005350 - ldr r2, [r0] - ldrh r1, [r2, 0x2] - mov r12, r0 - cmp r1, 0 - bne _080C6838 - strh r5, [r2, 0x2] - mov r2, r8 - ldrh r0, [r2] - adds r0, 0x1 - b _080C6862 - .align 2, 0 -_080C6834: .4byte gUnknown_3005350 -_080C6838: - mov r2, r12 - ldr r1, [r2] - lsls r0, r3, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r0, r5 - beq _080C685C - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, r9 - bcs _080C6864 - lsls r0, r3, 1 - adds r1, r0, r1 - ldrh r0, [r1] - cmp r0, 0 - bne _080C6838 - strh r5, [r1] -_080C685C: - mov r1, r8 - ldrh r0, [r1] - adds r0, r3 -_080C6862: - strh r0, [r4] -_080C6864: - ldr r2, _080C6898 @ =gUnknown_3005340 - cmp r3, r9 - bne _080C686E - mov r3, r9 - strh r3, [r4] -_080C686E: - lsls r0, r6, 24 - lsrs r6, r0, 24 - adds r4, r7, 0 - ldrb r0, [r2] - cmp r6, r0 - bcc _080C67C8 -_080C687A: - mov r1, r10 - lsls r0, r1, 24 - lsrs r3, r0, 24 - ldr r0, _080C689C @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r3, r0 - bcc _080C6798 -_080C6888: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C6898: .4byte gUnknown_3005340 -_080C689C: .4byte gUnknown_3005338 - thumb_func_end sub_80C6748 - - thumb_func_start sub_80C68A0 -sub_80C68A0: @ 80C68A0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r2, 0 - ldr r0, _080C68F4 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C6944 - ldr r0, _080C68F8 @ =gUnknown_3005334 - mov r8, r0 -_080C68B4: - ldr r0, _080C68FC @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C6900 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r3, r8 - ldr r1, [r3] - adds r1, r0 - ldr r0, _080C6904 @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r6, 0 - ldr r0, _080C6908 @ =gUnknown_3005340 - adds r3, r0, 0 - adds r7, r2, 0x1 - ldrb r0, [r3] - cmp r6, r0 - bcs _080C6938 - ldr r5, _080C690C @ =gUnknown_3005354 -_080C68E0: - ldrh r0, [r4] - movs r2, 0x80 - lsls r2, 8 - adds r1, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _080C6910 - ldrh r0, [r5] - strh r0, [r4] - b _080C692A - .align 2, 0 -_080C68F4: .4byte gUnknown_3005338 -_080C68F8: .4byte gUnknown_3005334 -_080C68FC: .4byte gUnknown_3005344 -_080C6900: .4byte gUnknown_300534C -_080C6904: .4byte gUnknown_3005330 -_080C6908: .4byte gUnknown_3005340 -_080C690C: .4byte gUnknown_3005354 -_080C6910: - adds r0, r4, 0 - bl sub_80C600C - lsls r0, 16 - cmp r0, 0 - bne _080C6922 - ldrh r0, [r5] - adds r0, 0x1 - b _080C6926 -_080C6922: - ldrh r0, [r5] - adds r0, 0x2 -_080C6926: - strh r0, [r4] - ldr r3, _080C6950 @ =gUnknown_3005340 -_080C692A: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r4, 0x2 - ldrb r0, [r3] - cmp r6, r0 - bcc _080C68E0 -_080C6938: - lsls r0, r7, 24 - lsrs r2, r0, 24 - ldr r0, _080C6954 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C68B4 -_080C6944: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C6950: .4byte gUnknown_3005340 -_080C6954: .4byte gUnknown_3005338 - thumb_func_end sub_80C68A0 - - thumb_func_start sub_80C6958 -sub_80C6958: @ 80C6958 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080C69AC @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C69F4 - ldr r0, _080C69B0 @ =gUnknown_3005334 - mov r8, r0 -_080C696E: - ldr r0, _080C69B4 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C69B8 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r3, r8 - ldr r1, [r3] - adds r1, r0 - ldr r0, _080C69BC @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - ldr r0, _080C69C0 @ =gUnknown_3005340 - adds r7, r2, 0x1 - ldrb r0, [r0] - cmp r5, r0 - bcs _080C69E8 - ldr r6, _080C69C4 @ =gUnknown_3005354 - movs r0, 0x80 - lsls r0, 8 - adds r2, r0, 0 -_080C699E: - ldrh r0, [r4] - ands r0, r2 - cmp r0, 0 - beq _080C69C8 - ldrh r0, [r6] - strh r0, [r4] - b _080C69D8 - .align 2, 0 -_080C69AC: .4byte gUnknown_3005338 -_080C69B0: .4byte gUnknown_3005334 -_080C69B4: .4byte gUnknown_3005344 -_080C69B8: .4byte gUnknown_300534C -_080C69BC: .4byte gUnknown_3005330 -_080C69C0: .4byte gUnknown_3005340 -_080C69C4: .4byte gUnknown_3005354 -_080C69C8: - adds r0, r4, 0 - str r2, [sp] - bl sub_80C6CAC - ldrh r1, [r6] - adds r0, r1 - strh r0, [r4] - ldr r2, [sp] -_080C69D8: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldr r0, _080C6A00 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r5, r0 - bcc _080C699E -_080C69E8: - lsls r0, r7, 24 - lsrs r2, r0, 24 - ldr r0, _080C6A04 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C696E -_080C69F4: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C6A00: .4byte gUnknown_3005340 -_080C6A04: .4byte gUnknown_3005338 - thumb_func_end sub_80C6958 - - thumb_func_start sub_80C6A08 -sub_80C6A08: @ 80C6A08 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080C6A5C @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C6AA4 - ldr r0, _080C6A60 @ =gUnknown_3005334 - mov r8, r0 -_080C6A1E: - ldr r0, _080C6A64 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C6A68 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r3, r8 - ldr r1, [r3] - adds r1, r0 - ldr r0, _080C6A6C @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - ldr r0, _080C6A70 @ =gUnknown_3005340 - adds r7, r2, 0x1 - ldrb r0, [r0] - cmp r5, r0 - bcs _080C6A98 - ldr r6, _080C6A74 @ =gUnknown_3005354 - movs r0, 0x80 - lsls r0, 8 - adds r2, r0, 0 -_080C6A4E: - ldrh r0, [r4] - ands r0, r2 - cmp r0, 0 - beq _080C6A78 - ldrh r0, [r6] - strh r0, [r4] - b _080C6A88 - .align 2, 0 -_080C6A5C: .4byte gUnknown_3005338 -_080C6A60: .4byte gUnknown_3005334 -_080C6A64: .4byte gUnknown_3005344 -_080C6A68: .4byte gUnknown_300534C -_080C6A6C: .4byte gUnknown_3005330 -_080C6A70: .4byte gUnknown_3005340 -_080C6A74: .4byte gUnknown_3005354 -_080C6A78: - adds r0, r4, 0 - str r2, [sp] - bl sub_80C6CE0 - ldrh r1, [r6] - adds r0, r1 - strh r0, [r4] - ldr r2, [sp] -_080C6A88: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldr r0, _080C6AB0 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r5, r0 - bcc _080C6A4E -_080C6A98: - lsls r0, r7, 24 - lsrs r2, r0, 24 - ldr r0, _080C6AB4 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C6A1E -_080C6AA4: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C6AB0: .4byte gUnknown_3005340 -_080C6AB4: .4byte gUnknown_3005338 - thumb_func_end sub_80C6A08 - - thumb_func_start sub_80C6AB8 -sub_80C6AB8: @ 80C6AB8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080C6B0C @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C6B54 - ldr r0, _080C6B10 @ =gUnknown_3005334 - mov r8, r0 -_080C6ACE: - ldr r0, _080C6B14 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C6B18 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r3, r8 - ldr r1, [r3] - adds r1, r0 - ldr r0, _080C6B1C @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - ldr r0, _080C6B20 @ =gUnknown_3005340 - adds r7, r2, 0x1 - ldrb r0, [r0] - cmp r5, r0 - bcs _080C6B48 - ldr r6, _080C6B24 @ =gUnknown_3005354 - movs r0, 0x80 - lsls r0, 8 - adds r2, r0, 0 -_080C6AFE: - ldrh r0, [r4] - ands r0, r2 - cmp r0, 0 - beq _080C6B28 - ldrh r0, [r6] - strh r0, [r4] - b _080C6B38 - .align 2, 0 -_080C6B0C: .4byte gUnknown_3005338 -_080C6B10: .4byte gUnknown_3005334 -_080C6B14: .4byte gUnknown_3005344 -_080C6B18: .4byte gUnknown_300534C -_080C6B1C: .4byte gUnknown_3005330 -_080C6B20: .4byte gUnknown_3005340 -_080C6B24: .4byte gUnknown_3005354 -_080C6B28: - adds r0, r4, 0 - str r2, [sp] - bl sub_80C6BDC - ldrh r1, [r6] - adds r0, r1 - strh r0, [r4] - ldr r2, [sp] -_080C6B38: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldr r0, _080C6B60 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r5, r0 - bcc _080C6AFE -_080C6B48: - lsls r0, r7, 24 - lsrs r2, r0, 24 - ldr r0, _080C6B64 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C6ACE -_080C6B54: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C6B60: .4byte gUnknown_3005340 -_080C6B64: .4byte gUnknown_3005338 - thumb_func_end sub_80C6AB8 - - thumb_func_start sub_80C6B68 -sub_80C6B68: @ 80C6B68 - push {r4,lr} - ldrh r0, [r0] - movs r1, 0x1F - movs r4, 0x1F - ands r4, r0 - lsls r0, 16 - lsrs r3, r0, 21 - ands r3, r1 - lsrs r2, r0, 26 - ands r2, r1 - movs r1, 0x3 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _080C6B8C - movs r0, 0x1C - ands r0, r4 - adds r4, r0, 0x4 -_080C6B8C: - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _080C6B9A - movs r0, 0x1C - ands r0, r3 - adds r3, r0, 0x4 -_080C6B9A: - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _080C6BA8 - movs r0, 0x1C - ands r0, r2 - adds r2, r0, 0x4 -_080C6BA8: - cmp r4, 0x5 - bhi _080C6BAE - movs r4, 0x6 -_080C6BAE: - cmp r4, 0x1E - bls _080C6BB4 - movs r4, 0x1E -_080C6BB4: - cmp r3, 0x5 - bhi _080C6BBA - movs r3, 0x6 -_080C6BBA: - cmp r3, 0x1E - bls _080C6BC0 - movs r3, 0x1E -_080C6BC0: - cmp r2, 0x5 - bhi _080C6BC6 - movs r2, 0x6 -_080C6BC6: - cmp r2, 0x1E - bls _080C6BCC - movs r2, 0x1E -_080C6BCC: - lsls r0, r2, 10 - lsls r1, r3, 5 - orrs r0, r1 - orrs r4, r0 - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80C6B68 - - thumb_func_start sub_80C6BDC -sub_80C6BDC: @ 80C6BDC - push {lr} - ldrh r0, [r0] - movs r1, 0x1F - movs r3, 0x1F - ands r3, r0 - lsls r0, 16 - lsrs r2, r0, 21 - ands r2, r1 - lsrs r0, 26 - ands r0, r1 - cmp r3, 0xB - bhi _080C6C00 - cmp r2, 0xA - bhi _080C6C00 - cmp r0, 0xA - bhi _080C6C00 - movs r0, 0x1 - b _080C6CA6 -_080C6C00: - cmp r3, 0x13 - bls _080C6C24 - cmp r2, 0x13 - bls _080C6C0C - cmp r0, 0x13 - bhi _080C6C30 -_080C6C0C: - cmp r3, 0x13 - bls _080C6C24 - cmp r2, 0x13 - bls _080C6C1A - cmp r0, 0xE - bhi _080C6C30 - b _080C6C68 -_080C6C1A: - cmp r0, 0x13 - bls _080C6C24 - cmp r2, 0xE - bhi _080C6C30 - b _080C6C44 -_080C6C24: - cmp r2, 0x13 - bls _080C6C34 - cmp r0, 0x13 - bls _080C6C34 - cmp r3, 0xE - bls _080C6C8C -_080C6C30: - movs r0, 0x2 - b _080C6CA6 -_080C6C34: - cmp r3, 0x13 - bls _080C6C58 - cmp r2, 0xB - bls _080C6C4C - cmp r0, 0xB - bls _080C6C48 - cmp r2, r0 - bcs _080C6C68 -_080C6C44: - movs r0, 0x8 - b _080C6CA6 -_080C6C48: - movs r0, 0xA - b _080C6CA6 -_080C6C4C: - cmp r0, 0xB - bls _080C6C54 - movs r0, 0xD - b _080C6CA6 -_080C6C54: - movs r0, 0x4 - b _080C6CA6 -_080C6C58: - cmp r2, 0x13 - bls _080C6C7C - cmp r3, 0xB - bls _080C6C70 - cmp r0, 0xB - bls _080C6C6C - cmp r3, r0 - bcc _080C6C8C -_080C6C68: - movs r0, 0x7 - b _080C6CA6 -_080C6C6C: - movs r0, 0xB - b _080C6CA6 -_080C6C70: - cmp r0, 0xB - bls _080C6C78 - movs r0, 0xE - b _080C6CA6 -_080C6C78: - movs r0, 0x5 - b _080C6CA6 -_080C6C7C: - cmp r0, 0x13 - bls _080C6CA4 - cmp r3, 0xB - bls _080C6C90 - cmp r2, 0xB - bls _080C6C98 - cmp r3, r2 - bcs _080C6C44 -_080C6C8C: - movs r0, 0x9 - b _080C6CA6 -_080C6C90: - cmp r2, 0xB - bls _080C6C98 - movs r0, 0xC - b _080C6CA6 -_080C6C98: - cmp r0, 0xB - bls _080C6CA0 - movs r0, 0xF - b _080C6CA6 -_080C6CA0: - movs r0, 0x6 - b _080C6CA6 -_080C6CA4: - movs r0, 0x3 -_080C6CA6: - pop {r1} - bx r1 - thumb_func_end sub_80C6BDC - - thumb_func_start sub_80C6CAC -sub_80C6CAC: @ 80C6CAC - push {lr} - ldrh r1, [r0] - movs r3, 0x1F - movs r0, 0x1F - ands r0, r1 - lsls r1, 16 - lsrs r2, r1, 21 - ands r2, r3 - lsrs r1, 26 - ands r1, r3 - adds r0, r2 - adds r0, r1 - movs r1, 0x3 - bl __divsi3 - movs r1, 0x1E - ands r0, r1 - lsls r0, 16 - cmp r0, 0 - beq _080C6CD8 - lsrs r0, 17 - b _080C6CDA -_080C6CD8: - movs r0, 0x1 -_080C6CDA: - pop {r1} - bx r1 - thumb_func_end sub_80C6CAC - - thumb_func_start sub_80C6CE0 -sub_80C6CE0: @ 80C6CE0 - push {lr} - ldrh r1, [r0] - movs r3, 0x1F - movs r0, 0x1F - ands r0, r1 - lsls r1, 16 - lsrs r2, r1, 21 - ands r2, r3 - lsrs r1, 26 - ands r1, r3 - adds r0, r2 - adds r0, r1 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - movs r1, 0x80 - lsls r1, 9 - adds r0, r1 - lsrs r0, 16 - pop {r1} - bx r1 - thumb_func_end sub_80C6CE0 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/image_processing_effects.s b/data/image_processing_effects.s index df83b2d54..d5585410c 100644 --- a/data/image_processing_effects.s +++ b/data/image_processing_effects.s @@ -1,7 +1,7 @@ .section .rodata .align 2, 0 -gUnknown_83F3024:: @ 83F3024 +gPointillismPoints:: @ 83F3024 .byte 0x00, 0x1d, 0x1c .byte 0x0e, 0x1e, 0x1b .byte 0x00, 0x01, 0x32 diff --git a/ld_script.txt b/ld_script.txt index 838aebcac..0b12b1187 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -181,7 +181,7 @@ SECTIONS { asm/script_pokemon_util_80BF8FC.o(.text); src/heal_location.o(.text); src/region_map.o(.text); - asm/image_processing_effects.o(.text); + src/image_processing_effects.o(.text); src/battle_ai_script_commands.o(.text); src/fldeff_rocksmash.o(.text); src/fldeff_dig.o(.text); diff --git a/src/image_processing_effects.c b/src/image_processing_effects.c new file mode 100644 index 000000000..c9ca4b16b --- /dev/null +++ b/src/image_processing_effects.c @@ -0,0 +1,1224 @@ +#include "global.h" +#include "image_processing_effects.h" + +// IWRAM common +u8 gCanvasColumnStart; +u16 (*gCanvasPixels)[][32]; +u8 gCanvasRowEnd; +u8 gCanvasHeight; +u8 gCanvasColumnEnd; +u8 gCanvasRowStart; +u8 gCanvasMonPersonality; +u8 gCanvasWidth; +u16 *gCanvasPalette; +u16 gCanvasPaletteStart; + +static void ApplyImageEffect_Pointillism(void); +static void ApplyImageEffect_Blur(void); +static void ApplyImageEffect_BlackOutline(void); +static void ApplyImageEffect_Invert(void); +static void ApplyImageEffect_BlackAndWhite(void); +static void ApplyImageEffect_BlurRight(void); +static void ApplyImageEffect_BlurDown(void); +static void ApplyImageEffect_Shimmer(void); +static void ApplyImageEffect_Grayscale(void); +static void ApplyImageEffect_PersonalityColor(u8); +static void ApplyImageEffect_RedChannelGrayscale(u8); +static void ApplyImageEffect_RedChannelGrayscaleHighlight(u8); +static void AddPointillismPoints(u16); +static u16 ConvertColorToGrayscale(u16*); +static u16 QuantizePixel_Blur(u16*, u16*, u16*); +static u16 QuantizePixel_PersonalityColor(u16*, u8); +static u16 QuantizePixel_BlackAndWhite(u16*); +static u16 QuantizePixel_BlackOutline(u16*, u16*); +static u16 QuantizePixel_Invert(u16*); +static u16 QuantizePixel_BlurHard(u16*, u16*, u16*); +static u16 QuantizePixel_MotionBlur(u16*, u16*); +static u16 GetColorFromPersonality(u8); +static void QuantizePalette_Standard(bool8); +static void SetPresetPalette_PrimaryColors(void); +static void QuantizePalette_PrimaryColors(void); +static void SetPresetPalette_Grayscale(void); +static void QuantizePalette_Grayscale(void); +static void SetPresetPalette_GrayscaleSmall(void); +static void QuantizePalette_GrayscaleSmall(void); +static void SetPresetPalette_BlackAndWhite(void); +static void QuantizePalette_BlackAndWhite(void); +static u16 QuantizePixel_Standard(u16*); +static u16 QuantizePixel_GrayscaleSmall(u16*); +static u16 QuantizePixel_Grayscale(u16*); +static u16 QuantizePixel_PrimaryColors(u16*); + +extern const u8 gPointillismPoints[][3]; + +void ApplyImageProcessingEffects(struct ImageProcessingContext *context) +{ + gCanvasPixels = context->canvasPixels; + gCanvasMonPersonality = context->personality; + gCanvasColumnStart = context->columnStart; + gCanvasRowStart = context->rowStart; + gCanvasColumnEnd = context->columnEnd; + gCanvasRowEnd = context->rowEnd; + gCanvasWidth = context->canvasWidth; + gCanvasHeight = context->canvasHeight; + + switch (context->effect) + { + case IMAGE_EFFECT_POINTILLISM: + ApplyImageEffect_Pointillism(); + break; + case IMAGE_EFFECT_BLUR: + ApplyImageEffect_Blur(); + break; + case IMAGE_EFFECT_OUTLINE_COLORED: + ApplyImageEffect_BlackOutline(); + ApplyImageEffect_PersonalityColor(gCanvasMonPersonality); + break; + case IMAGE_EFFECT_INVERT_BLACK_WHITE: + ApplyImageEffect_BlackOutline(); + ApplyImageEffect_Invert(); + ApplyImageEffect_BlackAndWhite(); + case IMAGE_EFFECT_INVERT: + ApplyImageEffect_Invert(); + break; + case IMAGE_EFFECT_THICK_BLACK_WHITE: + ApplyImageEffect_BlackOutline(); + ApplyImageEffect_BlurRight(); + ApplyImageEffect_BlurRight(); + ApplyImageEffect_BlurDown(); + ApplyImageEffect_BlackAndWhite(); + break; + case IMAGE_EFFECT_SHIMMER: + ApplyImageEffect_Shimmer(); + break; + case IMAGE_EFFECT_OUTLINE: + ApplyImageEffect_BlackOutline(); + break; + case IMAGE_EFFECT_BLUR_RIGHT: + ApplyImageEffect_BlurRight(); + break; + case IMAGE_EFFECT_BLUR_DOWN: + ApplyImageEffect_BlurDown(); + break; + case IMAGE_EFFECT_GRAYSCALE_LIGHT: + ApplyImageEffect_Grayscale(); + ApplyImageEffect_RedChannelGrayscale(3); + break; + case IMAGE_EFFECT_CHARCOAL: + ApplyImageEffect_BlackOutline(); + ApplyImageEffect_BlurRight(); + ApplyImageEffect_BlurDown(); + ApplyImageEffect_BlackAndWhite(); + ApplyImageEffect_Blur(); + ApplyImageEffect_Blur(); + ApplyImageEffect_RedChannelGrayscale(2); + ApplyImageEffect_RedChannelGrayscaleHighlight(4); + break; + } +} + +static void ApplyImageEffect_RedChannelGrayscale(u8 delta) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (!(0x8000 & *pixel)) + { + // Gets the grayscale value, based on the pixel's red channel. + // Also adds a delta to skew lighter or darker. + u8 grayValue = (31 & *pixel); + grayValue += delta; + if (grayValue > 31) + grayValue = 31; + + *pixel = RGB2(grayValue, grayValue, grayValue); + } + } + } +} + +static void ApplyImageEffect_RedChannelGrayscaleHighlight(u8 highlight) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (!(0x8000 & *pixel)) + { + u8 grayValue = (31 & *pixel); + if (grayValue > 31 - highlight) + grayValue = 31 - (highlight >> 1); + + *pixel = RGB2(grayValue, grayValue, grayValue); + } + } + } +} + +static void ApplyImageEffect_Pointillism(void) +{ + u32 i; + for (i = 0; i < 3200; i++) + AddPointillismPoints(i); +} + +static void ApplyImageEffect_Grayscale(void) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (!(0x8000 & *pixel)) + *pixel = ConvertColorToGrayscale(pixel); + } + } +} + +static void ApplyImageEffect_Blur(void) +{ + u8 i, j; + + for (i = 0; i < gCanvasColumnEnd; i++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][gCanvasRowStart * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart + i]; + u16 prevPixel = *pixel; + + j = 1; + pixel += gCanvasWidth; + while (j < gCanvasRowEnd - 1) + { + if (!(0x8000 & *pixel)) + { + *pixel = QuantizePixel_Blur(&prevPixel, pixel, pixel + gCanvasWidth); + prevPixel = *pixel; + } + + j++; + pixel += gCanvasWidth; + } + } +} + +static void ApplyImageEffect_PersonalityColor(u8 personality) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (!(0x8000 & *pixel)) + *pixel = QuantizePixel_PersonalityColor(pixel, personality); + } + } +} + +static void ApplyImageEffect_BlackAndWhite(void) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (!(0x8000 & *pixel)) + *pixel = QuantizePixel_BlackAndWhite(pixel); + } + } +} + +static void ApplyImageEffect_BlackOutline(void) +{ + u8 i, j; + u16 *pixel; + + // Handle top row of pixels first. + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + pixel = &pixelRow[gCanvasColumnStart]; + *pixel = QuantizePixel_BlackOutline(pixel, pixel + 1); + for (i = 1, pixel++; i < gCanvasColumnEnd - 1; i++, pixel++) + { + *pixel = QuantizePixel_BlackOutline(pixel, pixel + 1); + *pixel = QuantizePixel_BlackOutline(pixel, pixel - 1); + } + + *pixel = QuantizePixel_BlackOutline(pixel, pixel - 1); + } + + // Handle each column from left to right. + for (i = 0; i < gCanvasColumnEnd; i++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][gCanvasRowStart * gCanvasWidth]; + pixel = &pixelRow[gCanvasColumnStart + i]; + *pixel = QuantizePixel_BlackOutline(pixel, pixel + gCanvasWidth); + for (j = 1, pixel += gCanvasWidth; j < gCanvasRowEnd - 1; j++, pixel += gCanvasWidth) + { + *pixel = QuantizePixel_BlackOutline(pixel, pixel + gCanvasWidth); + *pixel = QuantizePixel_BlackOutline(pixel, pixel - gCanvasWidth); + } + + *pixel = QuantizePixel_BlackOutline(pixel, pixel - gCanvasWidth); + } +} + +static void ApplyImageEffect_Invert(void) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (!(0x8000 & *pixel)) + *pixel = QuantizePixel_Invert(pixel); + } + } +} + +static void ApplyImageEffect_Shimmer(void) +{ + u8 i, j; + u16 *pixel; + u16 prevPixel; + + // First, invert all of the colors. + pixel = (*gCanvasPixels)[0]; + for (i = 0; i < 64; i++) + { + for (j = 0; j < 64; j++, pixel++) + { + if (!(0x8000 & *pixel)) + *pixel = QuantizePixel_Invert(pixel); + } + } + + // Blur the pixels twice. + for (j = 0; j < 64; j++) + { + pixel = &(*gCanvasPixels)[0][j]; + prevPixel = *pixel; + *pixel = 0x8000; + for (i = 1, pixel += 64; i < 63; i++, pixel += 64) + { + if (!(0x8000 & *pixel)) + { + *pixel = QuantizePixel_BlurHard(&prevPixel, pixel, pixel + 64); + prevPixel = *pixel; + } + } + + *pixel = 0x8000; + pixel = &(*gCanvasPixels)[0][j]; + prevPixel = *pixel; + *pixel = 0x8000; + for (i = 1, pixel += 64; i < 63; i++, pixel += 64) + { + if (!(0x8000 & *pixel)) + { + *pixel = QuantizePixel_BlurHard(&prevPixel, pixel, pixel + 64); + prevPixel = *pixel; + } + } + + *pixel = 0x8000; + } + + // Finally, invert colors back to the original color space. + // The above blur causes the outline areas to darken, which makes + // this inversion give the effect of light outlines. + pixel = (*gCanvasPixels)[0]; + for (i = 0; i < 64; i++) + { + for (j = 0; j < 64; j++, pixel++) + { + if (!(0x8000 & *pixel)) + *pixel = QuantizePixel_Invert(pixel); + } + } +} + +static void ApplyImageEffect_BlurRight(void) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + u16 prevPixel = *pixel; + for (i = 1, pixel++; i < gCanvasColumnEnd - 1; i++, pixel++) + { + if (!(0x8000 & *pixel)) + { + *pixel = QuantizePixel_MotionBlur(&prevPixel, pixel); + prevPixel = *pixel; + } + } + } +} + +static void ApplyImageEffect_BlurDown(void) +{ + u8 i, j; + + for (i = 0; i < gCanvasColumnEnd; i++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][gCanvasRowStart * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart + i]; + u16 prevPixel = *pixel; + for (j = 1, pixel += gCanvasWidth; j < gCanvasRowEnd - 1; j++, pixel += gCanvasWidth) + { + if (!(0x8000 & *pixel)) + { + *pixel = QuantizePixel_MotionBlur(&prevPixel, pixel); + prevPixel = *pixel; + } + } + } +} + +struct PointillismPoint +{ + u8 column; + u8 row; + u16 delta; +}; + +static void AddPointillismPoints(u16 arg0) +{ + u8 i; + bool8 offsetDownLeft; + u8 colorType; + struct PointillismPoint points[6]; + + points[0].column = gPointillismPoints[arg0][0]; + points[0].row = gPointillismPoints[arg0][1]; + points[0].delta = (gPointillismPoints[arg0][2] >> 3) & 7; + + colorType = (gPointillismPoints[arg0][2] >> 1) & 3; + offsetDownLeft = gPointillismPoints[arg0][2] & 1; + for (i = 1; i < points[0].delta; i++) + { + if (!offsetDownLeft) + { + points[i].column = points[0].column - i; + points[i].row = points[0].row + i; + } + else + { + points[i].column = points[0].column + 1; + points[i].row = points[0].row - 1; + } + + if (points[i].column > 63 || points[i].row > 63) + { + points[0].delta = i - 1; + break; + } + + points[i].delta = points[0].delta - i; + } + + for (i = 0; i < points[0].delta; i++) + { + u16 *pixel = &(*gCanvasPixels)[points[i].row * 2][points[i].column]; + + if (!(0x8000 & *pixel)) + { + u16 red = (*pixel) & 0x1F; + u16 green = (*pixel >> 5) & 0x1F; + u16 blue = (*pixel >> 10) & 0x1F; + + switch (colorType) + { + case 0: + case 1: + switch (((gPointillismPoints[arg0][2] >> 3) & 7) % 3) + { + case 0: + if (red >= points[i].delta) + red -= points[i].delta; + else + red = 0; + break; + case 1: + if (green >= points[i].delta) + green -= points[i].delta; + else + green = 0; + break; + case 2: + if (blue >= points[i].delta) + blue -= points[i].delta; + else + blue = 0; + break; + } + break; + case 2: + case 3: + red += points[i].delta; + green += points[i].delta; + blue += points[i].delta; + if (red > 31) + red = 31; + if (green > 31) + green = 31; + if (blue > 31) + blue = 31; + break; + } + + *pixel = RGB2(red, green, blue); + } + } +} + +static u16 ConvertColorToGrayscale(u16 *color) +{ + u16 red = *color & 0x1F; + u16 green = (*color >> 5) & 0x1F; + u16 blue = (*color >> 10) & 0x1F; + + u16 gray = (red + green + blue) / 3; + return RGB2(gray, gray, gray); +} + +// The dark colors are the colored edges of the Cool painting effect. +// Everything else is white. +static u16 QuantizePixel_PersonalityColor(u16 *color, u8 personality) +{ + u16 red = *color & 0x1F; + u16 green = (*color >> 5) & 0x1F; + u16 blue = (*color >> 10) & 0x1F; + + if (red < 17 && green < 17 && blue < 17) + return GetColorFromPersonality(personality); + else + return RGB_WHITE; +} + +// Based on the given value, which comes from the first 8 bits of +// the mon's personality value, return a color. +static u16 GetColorFromPersonality(u8 personality) +{ + u16 red = 0; + u16 green = 0; + u16 blue = 0; + u8 strength = (personality / 6) % 3; + u8 colorType = personality % 6; + + switch (colorType) + { + case 0: + // Teal color + green = 21 - strength; + blue = green; + red = 0; + break; + case 1: + // Yellow color + blue = 0; + red = 21 - strength; + green = red; + break; + case 2: + // Purple color + blue = 21 - strength; + green = 0; + red = blue; + break; + case 3: + // Red color + blue = 0; + green = 0; + red = 23 - strength; + break; + case 4: + // Blue color + blue = 23 - strength; + green = 0; + red = 0; + break; + case 5: + // Green color + blue = 0; + green = 23 - strength; + red = 0; + break; + } + + return RGB2(red, green, blue); +} + +static u16 QuantizePixel_BlackAndWhite(u16 *color) +{ + u16 red = *color & 0x1F; + u16 green = (*color >> 5) & 0x1F; + u16 blue = (*color >> 10) & 0x1F; + + if (red < 17 && green < 17 && blue < 17) + return RGB_BLACK; + else + return RGB_WHITE; +} + +static u16 QuantizePixel_BlackOutline(u16 *pixelA, u16 *pixelB) +{ + if (*pixelA != RGB_BLACK) + { + if (*pixelA & 0x8000) + return 0x8000; + if (*pixelB & 0x8000) + return RGB_BLACK; + + return *pixelA; + } + + return RGB_BLACK; +} + +static u16 QuantizePixel_Invert(u16 *color) +{ + u16 red = *color & 0x1F; + u16 green = (*color >> 5) & 0x1F; + u16 blue = (*color >> 10) & 0x1F; + + red = 31 - red; + green = 31 - green; + blue = 31 - blue; + + return RGB2(red, green, blue); +} + +static u16 QuantizePixel_MotionBlur(u16 *prevPixel, u16 *curPixel) +{ + u16 pixelChannels[2][3]; + u16 diffs[3]; + u8 i; + u16 largestDiff; + u16 red, green, blue; + + if (*prevPixel == *curPixel) + return *curPixel; + + pixelChannels[0][0] = (*prevPixel >> 0) & 0x1F; + pixelChannels[0][1] = (*prevPixel >> 5) & 0x1F; + pixelChannels[0][2] = (*prevPixel >> 10) & 0x1F; + pixelChannels[1][0] = (*curPixel >> 0) & 0x1F; + pixelChannels[1][1] = (*curPixel >> 5) & 0x1F; + pixelChannels[1][2] = (*curPixel >> 10) & 0x1F; + + // Don't blur light colors. + if (pixelChannels[0][0] > 25 && pixelChannels[0][1] > 25 && pixelChannels[0][2] > 25) + return *curPixel; + if (pixelChannels[1][0] > 25 && pixelChannels[1][1] > 25 && pixelChannels[1][2] > 25) + return *curPixel; + + for (i = 0; i < 3; i++) + { + if (pixelChannels[0][i] > pixelChannels[1][i]) + diffs[i] = pixelChannels[0][i] - pixelChannels[1][i]; + else + diffs[i] = pixelChannels[1][i] - pixelChannels[0][i]; + } + + // Find the largest diff of any of the color channels. + if (diffs[0] >= diffs[1]) + { + if (diffs[0] >= diffs[2]) + largestDiff = diffs[0]; + else if (diffs[1] >= diffs[2]) + largestDiff = diffs[1]; + else + largestDiff = diffs[2]; + } + else + { + if (diffs[1] >= diffs[2]) + largestDiff = diffs[1]; + else if (diffs[2] >= diffs[0]) + largestDiff = diffs[2]; + else + largestDiff = diffs[0]; + } + + red = (pixelChannels[1][0] * (31 - largestDiff / 2)) / 31; + green = (pixelChannels[1][1] * (31 - largestDiff / 2)) / 31; + blue = (pixelChannels[1][2] * (31 - largestDiff / 2)) / 31; + return RGB2(red, green, blue); +} + +static u16 QuantizePixel_Blur(u16 *prevPixel, u16 *curPixel, u16 *nextPixel) +{ + u16 red, green, blue; + u16 prevAvg, curAvg, nextAvg; + u16 prevDiff, nextDiff; + u32 diff; + u16 factor; + + if (*prevPixel == *curPixel && *nextPixel == *curPixel) + return *curPixel; + + red = (*curPixel >> 0) & 0x1F; + green = (*curPixel >> 5) & 0x1F; + blue = (*curPixel >> 10) & 0x1F; + + prevAvg = (((*prevPixel >> 0) & 0x1F) + ((*prevPixel >> 5) & 0x1F) + ((*prevPixel >> 10) & 0x1F)) / 3; + curAvg = (((*curPixel >> 0) & 0x1F) + ((*curPixel >> 5) & 0x1F) + ((*curPixel >> 10) & 0x1F)) / 3; + nextAvg = (((*nextPixel >> 0) & 0x1F) + ((*nextPixel >> 5) & 0x1F) + ((*nextPixel >> 10) & 0x1F)) / 3; + + if (prevAvg == curAvg && nextAvg == curAvg) + return *curPixel; + + if (prevAvg > curAvg) + prevDiff = prevAvg - curAvg; + else + prevDiff = curAvg - prevAvg; + + if (nextAvg > curAvg) + nextDiff = nextAvg - curAvg; + else + nextDiff = curAvg - nextAvg; + + if (prevDiff >= nextDiff) + diff = prevDiff; + else + diff = nextDiff; + + factor = 31 - diff / 2; + red = (red * factor) / 31; + green = (green * factor) / 31; + blue = (blue * factor) / 31; + return RGB2(red, green, blue); +} + +static u16 QuantizePixel_BlurHard(u16 *prevPixel, u16 *curPixel, u16 *nextPixel) +{ + u16 red, green, blue; + u16 prevAvg, curAvg, nextAvg; + u16 prevDiff, nextDiff; + u32 diff; + u16 factor; + + if (*prevPixel == *curPixel && *nextPixel == *curPixel) + return *curPixel; + + red = (*curPixel >> 0) & 0x1F; + green = (*curPixel >> 5) & 0x1F; + blue = (*curPixel >> 10) & 0x1F; + + prevAvg = (((*prevPixel >> 0) & 0x1F) + ((*prevPixel >> 5) & 0x1F) + ((*prevPixel >> 10) & 0x1F)) / 3; + curAvg = (((*curPixel >> 0) & 0x1F) + ((*curPixel >> 5) & 0x1F) + ((*curPixel >> 10) & 0x1F)) / 3; + nextAvg = (((*nextPixel >> 0) & 0x1F) + ((*nextPixel >> 5) & 0x1F) + ((*nextPixel >> 10) & 0x1F)) / 3; + + if (prevAvg == curAvg && nextAvg == curAvg) + return *curPixel; + + if (prevAvg > curAvg) + prevDiff = prevAvg - curAvg; + else + prevDiff = curAvg - prevAvg; + + if (nextAvg > curAvg) + nextDiff = nextAvg - curAvg; + else + nextDiff = curAvg - nextAvg; + + if (prevDiff >= nextDiff) + diff = prevDiff; + else + diff = nextDiff; + + factor = 31 - diff; + red = (red * factor) / 31; + green = (green * factor) / 31; + blue = (blue * factor) / 31; + return RGB2(red, green, blue); +} + +void ConvertImageProcessingToGBA(struct ImageProcessingContext *context) +{ + u16 i, j, k; + u16 *src, *dest, *src_, *dest_; + u16 width, height; + + width = context->canvasWidth >> 3; + height = context->canvasHeight >> 3; + src_ = context->canvasPixels; + dest_ = context->dest; + + if (context->var_16 == 2) + { + for (i = 0; i < height; i++) + { + for (j = 0; j < width; j++) + { + for (k = 0; k < 8; k++) + { + dest = dest_ + ((i * width + j) << 5) + (k << 2); + src = src_ + ((((i << 3) + k) << 3) * width) + (j << 3); + + dest[0] = src[0] | (src[1] << 8); + dest[1] = src[2] | (src[3] << 8); + dest[2] = src[4] | (src[5] << 8); + dest[3] = src[6] | (src[7] << 8); + } + } + } + } + else + { + for (i = 0; i < height; i++) + { + for (j = 0; j < width; j++) + { + for (k = 0; k < 8; k++) + { + dest = dest_ + ((i * width + j) << 4) + (k << 1); + src = src_ + ((((i << 3) + k) << 3) * width) + (j << 3); + + dest[0] = src[0] | (src[1] << 4) | (src[2] << 8) | (src[3] << 0xC); + dest[1] = src[4] | (src[5] << 4) | (src[6] << 8) | (src[7] << 0xC); + } + } + } + } +} + +void ApplyImageProcessingQuantization(struct ImageProcessingContext *context) +{ + gCanvasPaletteStart = context->paletteStart * 16; + gCanvasPalette = &context->canvasPalette[gCanvasPaletteStart]; + gCanvasPixels = context->canvasPixels; + gCanvasColumnStart = context->columnStart; + gCanvasRowStart = context->rowStart; + gCanvasColumnEnd = context->columnEnd; + gCanvasRowEnd = context->rowEnd; + gCanvasWidth = context->canvasWidth; + gCanvasHeight = context->canvasHeight; + + switch (context->quantizeEffect) + { + case QUANTIZE_EFFECT_STANDARD: + QuantizePalette_Standard(FALSE); + break; + case QUANTIZE_EFFECT_STANDARD_LIMITED_COLORS: + QuantizePalette_Standard(TRUE); + break; + case QUANTIZE_EFFECT_PRIMARY_COLORS: + SetPresetPalette_PrimaryColors(); + QuantizePalette_PrimaryColors(); + break; + case QUANTIZE_EFFECT_GRAYSCALE: + SetPresetPalette_Grayscale(); + QuantizePalette_Grayscale(); + break; + case QUANTIZE_EFFECT_GRAYSCALE_SMALL: + SetPresetPalette_GrayscaleSmall(); + QuantizePalette_GrayscaleSmall(); + break; + case QUANTIZE_EFFECT_BLACK_WHITE: + SetPresetPalette_BlackAndWhite(); + QuantizePalette_BlackAndWhite(); + break; + } +} + +static void SetPresetPalette_PrimaryColors(void) +{ + gCanvasPalette[0] = RGB2(0, 0, 0); + gCanvasPalette[1] = RGB2(6, 6, 6); + gCanvasPalette[2] = RGB2(29, 29, 29); + gCanvasPalette[3] = RGB2(11, 11, 11); + gCanvasPalette[4] = RGB2(29, 6, 6); + gCanvasPalette[5] = RGB2(6, 29, 6); + gCanvasPalette[6] = RGB2(6, 6, 29); + gCanvasPalette[7] = RGB2(29, 29, 6); + gCanvasPalette[8] = RGB2(29, 6, 29); + gCanvasPalette[9] = RGB2(6, 29, 29); + gCanvasPalette[10] = RGB2(29, 11, 6); + gCanvasPalette[11] = RGB2(11, 29, 6); + gCanvasPalette[12] = RGB2(6, 11, 29); + gCanvasPalette[13] = RGB2(29, 6, 11); + gCanvasPalette[14] = RGB2(6, 29, 11); + gCanvasPalette[15] = RGB2(11, 6, 29); +} + +static void SetPresetPalette_BlackAndWhite(void) +{ + gCanvasPalette[0] = RGB2(0, 0, 0); + gCanvasPalette[1] = RGB2(0, 0, 0); + gCanvasPalette[2] = RGB2(31, 31, 31); +} + +static void SetPresetPalette_GrayscaleSmall(void) +{ + u8 i; + + gCanvasPalette[0] = RGB2(0, 0, 0); + gCanvasPalette[1] = RGB2(0, 0, 0); + for (i = 0; i < 14; i++) + gCanvasPalette[i + 2] = RGB2(2 * (i + 2), 2 * (i + 2), 2 * (i + 2)); +} + +static void SetPresetPalette_Grayscale(void) +{ + u8 i; + + gCanvasPalette[0] = RGB2(0, 0, 0); + for (i = 0; i < 32; i++) + gCanvasPalette[i + 1] = RGB2(i, i, i); +} + +static void QuantizePalette_Standard(bool8 useLimitedPalette) +{ + u8 i, j; + u16 maxIndex; + + maxIndex = 0xDF; + if (!useLimitedPalette) + maxIndex = 0xFF; + + for (i = 0; i < maxIndex; i++) + gCanvasPalette[i] = RGB_BLACK; + + gCanvasPalette[maxIndex] = RGB2(15, 15, 15); + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (*pixel & 0x8000) + { + *pixel = gCanvasPaletteStart; + } + else + { + u16 quantizedColor = QuantizePixel_Standard(pixel); + u8 curIndex = 1; + if (curIndex < maxIndex) + { + if (gCanvasPalette[curIndex] == RGB_BLACK) + { + // The quantized color does not match any existing color in the + // palette, so we add it to the palette. + // This if block seems pointless because the below while loop handles + // this same logic. + gCanvasPalette[curIndex] = quantizedColor; + *pixel = gCanvasPaletteStart + curIndex; + } + else + { + while (curIndex < maxIndex) + { + if (gCanvasPalette[curIndex] == RGB_BLACK) + { + // The quantized color does not match any existing color in the + // palette, so we add it to the palette. + gCanvasPalette[curIndex] = quantizedColor; + *pixel = gCanvasPaletteStart + curIndex; + break; + } + + if (gCanvasPalette[curIndex] == quantizedColor) + { + // The quantized color matches this existing color in the + // palette, so we use this existing color for the pixel. + *pixel = gCanvasPaletteStart + curIndex; + break; + } + + curIndex++; + } + } + } + + if (curIndex == maxIndex) + { + // The entire palette's colors are already in use, which means + // the base image has too many colors to handle. This error is handled + // by marking such pixels as gray color. + curIndex = maxIndex; + *pixel = curIndex; + } + } + } + } +} + +static void QuantizePalette_BlackAndWhite(void) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (*pixel & 0x8000) + { + *pixel = gCanvasPaletteStart; + } + else + { + if (QuantizePixel_BlackAndWhite(pixel) == RGB_BLACK) + { + // Black is the first color in the quantized palette. + *pixel = gCanvasPaletteStart + 1; + } + else + { + // White is the second color in the quantized palette. + *pixel = gCanvasPaletteStart + 2; + } + } + } + } +} + +static void QuantizePalette_GrayscaleSmall(void) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (*pixel & 0x8000) + *pixel = gCanvasPaletteStart; + else + *pixel = QuantizePixel_GrayscaleSmall(pixel) + gCanvasPaletteStart; + } + } +} + +static void QuantizePalette_Grayscale(void) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (*pixel & 0x8000) + *pixel = gCanvasPaletteStart; + else + *pixel = QuantizePixel_Grayscale(pixel) + gCanvasPaletteStart; + } + } +} + +static void QuantizePalette_PrimaryColors(void) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (*pixel & 0x8000) + *pixel = gCanvasPaletteStart; + else + *pixel = QuantizePixel_PrimaryColors(pixel) + gCanvasPaletteStart; + } + } +} + +// Quantizes the pixel's color channels to nearest multiple of 4, and clamps to [6, 30]. +static u16 QuantizePixel_Standard(u16 *pixel) +{ + u16 red = *pixel & 0x1F; + u16 green = (*pixel >> 5) & 0x1F; + u16 blue = (*pixel >> 10) & 0x1F; + + // Quantize color channels to muliples of 4, rounding up. + if (red & 3) + red = (red & 0x1C) + 4; + if (green & 3) + green = (green & 0x1C) + 4; + if (blue & 3) + blue = (blue & 0x1C) + 4; + + // Clamp channels to [6, 30]. + if (red < 6) + red = 6; + if (red > 30) + red = 30; + if (green < 6) + green = 6; + if (green > 30) + green = 30; + if (blue < 6) + blue = 6; + if (blue > 30) + blue = 30; + + return RGB2(red, green, blue); +} + +static u16 QuantizePixel_PrimaryColors(u16* color) +{ + u16 red = *color & 0x1F; + u16 green = (*color >> 5) & 0x1F; + u16 blue = (*color >> 10) & 0x1F; + + if (red < 12 && green < 11 && blue < 11) + return 1; + + if (red > 19 && green > 19 && blue > 19) + return 2; + + if (red > 19) + { + if (green > 19) + { + if (blue > 14) + return 2; + else + return 7; + } + else if (blue > 19) + { + if (green > 14) + return 2; + else + return 8; + } + } + + if (green > 19 && blue > 19) + { + if (red > 14) + return 2; + else + return 9; + } + + if (red > 19) + { + if (green > 11) + { + if (blue > 11) + { + if (green < blue) + return 8; + else + return 7; + } + else + { + return 10; + } + } + else if (blue > 11) + { + return 13; + } + else + { + return 4; + } + } + + if (green > 19) + { + if (red > 11) + { + if (blue > 11) + { + if (red < blue) + return 9; + else + return 7; + } + else + { + return 11; + } + } + else + { + if (blue > 11) + return 14; + else + return 5; + } + } + + if (blue > 19) + { + if (red > 11) + { + if (green > 11) + { + if (red < green) + return 9; + else + return 8; + } + } + else if (green > 11) + { + return 12; + } + + if (blue > 11) + return 15; + else + return 6; + } + + return 3; +} + +static u16 QuantizePixel_GrayscaleSmall(u16 *color) +{ + u16 red = *color & 0x1F; + u16 green = (*color >> 5) & 0x1F; + u16 blue = (*color >> 10) & 0x1F; + u16 average = ((red + green + blue) / 3) & 0x1E; + if (average == 0) + return 1; + else + return average / 2; +} + +static u16 QuantizePixel_Grayscale(u16 *color) +{ + u16 red = *color & 0x1F; + u16 green = (*color >> 5) & 0x1F; + u16 blue = (*color >> 10) & 0x1F; + u16 average = (red + green + blue) / 3; + return average + 1; +} diff --git a/sym_common.txt b/sym_common.txt index 17f0cd306..b41ec5ff2 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -61,37 +61,8 @@ gUnknown_3005078: @ 3005078 @ what is this? .space 0x20 - -gUnknown_3005330: @ 3005330 - .space 0x4 - -gUnknown_3005334: @ 3005334 - .space 0x4 - -gUnknown_3005338: @ 3005338 - .space 0x4 - -gUnknown_300533C: @ 300533C - .space 0x4 - -gUnknown_3005340: @ 3005340 - .space 0x4 - -gUnknown_3005344: @ 3005344 - .space 0x4 - -gUnknown_3005348: @ 3005348 - .space 0x4 - -gUnknown_300534C: @ 300534C - .space 0x4 - -gUnknown_3005350: @ 3005350 - .space 0x4 - -gUnknown_3005354: @ 3005354 - .space 0xC - + .align 2 + .include "image_processing_effects.o" .align 2 .include "field_specials.o" .align 2 -- cgit v1.2.3 From b3bb58267b2f3406c8c6d795ec8466107eef133e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 7 Jan 2020 17:03:36 -0500 Subject: Port image_processing_effects from Emerald --- asm/image_processing_effects.s | 3486 ------------------------------ common_syms/image_processing_effects.txt | 10 + data/image_processing_effects.s | 2 +- include/image_processing_effects.h | 53 + ld_script.txt | 2 +- src/image_processing_effects.c | 1224 +++++++++++ sym_common.txt | 33 +- 7 files changed, 1291 insertions(+), 3519 deletions(-) delete mode 100644 asm/image_processing_effects.s create mode 100644 common_syms/image_processing_effects.txt create mode 100644 include/image_processing_effects.h create mode 100644 src/image_processing_effects.c diff --git a/asm/image_processing_effects.s b/asm/image_processing_effects.s deleted file mode 100644 index 1f63bde6c..000000000 --- a/asm/image_processing_effects.s +++ /dev/null @@ -1,3486 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80C52D0 -sub_80C52D0: @ 80C52D0 - push {lr} - ldr r2, _080C5318 @ =gUnknown_3005334 - ldr r1, [r0, 0x4] - str r1, [r2] - ldr r2, _080C531C @ =gUnknown_3005348 - ldrb r1, [r0, 0x1F] - strb r1, [r2] - ldr r2, _080C5320 @ =gUnknown_3005330 - ldrb r1, [r0, 0x19] - strb r1, [r2] - ldr r2, _080C5324 @ =gUnknown_3005344 - ldrb r1, [r0, 0x1A] - strb r1, [r2] - ldr r2, _080C5328 @ =gUnknown_3005340 - ldrb r1, [r0, 0x1B] - strb r1, [r2] - ldr r2, _080C532C @ =gUnknown_3005338 - ldrb r1, [r0, 0x1C] - strb r1, [r2] - ldr r2, _080C5330 @ =gUnknown_300534C - ldrb r1, [r0, 0x1D] - strb r1, [r2] - ldr r2, _080C5334 @ =gUnknown_300533C - ldrb r1, [r0, 0x1E] - strb r1, [r2] - ldrb r0, [r0] - subs r0, 0x2 - cmp r0, 0x22 - bls _080C530C - b _080C5458 -_080C530C: - lsls r0, 2 - ldr r1, _080C5338 @ =_080C533C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C5318: .4byte gUnknown_3005334 -_080C531C: .4byte gUnknown_3005348 -_080C5320: .4byte gUnknown_3005330 -_080C5324: .4byte gUnknown_3005344 -_080C5328: .4byte gUnknown_3005340 -_080C532C: .4byte gUnknown_3005338 -_080C5330: .4byte gUnknown_300534C -_080C5334: .4byte gUnknown_300533C -_080C5338: .4byte _080C533C - .align 2, 0 -_080C533C: - .4byte _080C53C8 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5428 - .4byte _080C5458 - .4byte _080C53CE - .4byte _080C53D4 - .4byte _080C53E8 - .4byte _080C53FA - .4byte _080C5458 - .4byte _080C5410 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5416 - .4byte _080C53F4 - .4byte _080C541C - .4byte _080C5422 - .4byte _080C5458 - .4byte _080C5458 - .4byte _080C5434 -_080C53C8: - bl sub_80C55D4 - b _080C5458 -_080C53CE: - bl sub_80C568C - b _080C5458 -_080C53D4: - bl sub_80C5884 - ldr r0, _080C53E4 @ =gUnknown_3005348 - ldrb r0, [r0] - bl sub_80C5748 - b _080C5458 - .align 2, 0 -_080C53E4: .4byte gUnknown_3005348 -_080C53E8: - bl sub_80C5884 - bl sub_80C59D4 - bl sub_80C57EC -_080C53F4: - bl sub_80C59D4 - b _080C5458 -_080C53FA: - bl sub_80C5884 - bl sub_80C5B9C - bl sub_80C5B9C - bl sub_80C5C44 - bl sub_80C57EC - b _080C5458 -_080C5410: - bl sub_80C5A6C - b _080C5458 -_080C5416: - bl sub_80C5884 - b _080C5458 -_080C541C: - bl sub_80C5B9C - b _080C5458 -_080C5422: - bl sub_80C5C44 - b _080C5458 -_080C5428: - bl sub_80C55F4 - movs r0, 0x3 - bl sub_80C545C - b _080C5458 -_080C5434: - bl sub_80C5884 - bl sub_80C5B9C - bl sub_80C5C44 - bl sub_80C57EC - bl sub_80C568C - bl sub_80C568C - movs r0, 0x2 - bl sub_80C545C - movs r0, 0x4 - bl sub_80C5514 -_080C5458: - pop {r0} - bx r0 - thumb_func_end sub_80C52D0 - - thumb_func_start sub_80C545C -sub_80C545C: @ 80C545C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r7, r0, 24 - movs r2, 0 - ldr r0, _080C54FC @ =gUnknown_3005338 - mov r8, r0 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C54EE - ldr r1, _080C5500 @ =gUnknown_3005340 - mov r12, r1 - ldr r3, _080C5504 @ =gUnknown_300534C - mov r10, r3 - ldr r0, _080C5508 @ =gUnknown_3005330 - mov r9, r0 -_080C5482: - ldr r1, _080C550C @ =gUnknown_3005344 - ldrb r0, [r1] - adds r0, r2 - mov r3, r10 - ldrb r1, [r3] - muls r0, r1 - lsls r0, 1 - ldr r3, _080C5510 @ =gUnknown_3005334 - ldr r1, [r3] - adds r1, r0 - mov r3, r9 - ldrb r0, [r3] - lsls r0, 1 - adds r3, r1, r0 - movs r4, 0 - adds r5, r2, 0x1 - mov r0, r12 - ldrb r0, [r0] - cmp r4, r0 - bcs _080C54E2 - movs r6, 0x80 - lsls r6, 8 -_080C54AE: - ldrh r1, [r3] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - bne _080C54D2 - movs r0, 0x1F - ands r0, r1 - adds r0, r7 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x1F - bls _080C54C8 - movs r2, 0x1F -_080C54C8: - lsls r0, r2, 10 - lsls r1, r2, 5 - orrs r0, r1 - orrs r0, r2 - strh r0, [r3] -_080C54D2: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - adds r3, 0x2 - mov r1, r12 - ldrb r1, [r1] - cmp r4, r1 - bcc _080C54AE -_080C54E2: - lsls r0, r5, 24 - lsrs r2, r0, 24 - mov r3, r8 - ldrb r3, [r3] - cmp r2, r3 - bcc _080C5482 -_080C54EE: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C54FC: .4byte gUnknown_3005338 -_080C5500: .4byte gUnknown_3005340 -_080C5504: .4byte gUnknown_300534C -_080C5508: .4byte gUnknown_3005330 -_080C550C: .4byte gUnknown_3005344 -_080C5510: .4byte gUnknown_3005334 - thumb_func_end sub_80C545C - - thumb_func_start sub_80C5514 -sub_80C5514: @ 80C5514 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r2, 0 - ldr r0, _080C55BC @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C55AC - ldr r1, _080C55C0 @ =gUnknown_3005340 - mov r10, r1 -_080C5532: - ldr r3, _080C55C4 @ =gUnknown_3005344 - ldrb r0, [r3] - adds r0, r2 - ldr r3, _080C55C8 @ =gUnknown_300534C - ldrb r1, [r3] - muls r0, r1 - lsls r0, 1 - ldr r3, _080C55CC @ =gUnknown_3005334 - ldr r1, [r3] - adds r1, r0 - ldr r3, _080C55D0 @ =gUnknown_3005330 - ldrb r0, [r3] - lsls r0, 1 - adds r3, r1, r0 - movs r5, 0 - adds r7, r2, 0x1 - mov r0, r10 - ldrb r0, [r0] - cmp r5, r0 - bcs _080C55A0 - movs r1, 0x80 - lsls r1, 8 - mov r9, r1 - movs r0, 0x1F - mov r12, r0 - mov r1, r8 - subs r6, r0, r1 -_080C5568: - ldrh r1, [r3] - mov r0, r9 - ands r0, r1 - cmp r0, 0 - bne _080C5590 - movs r4, 0x1F - mov r2, r12 - ands r2, r1 - cmp r2, r6 - ble _080C5586 - mov r1, r8 - lsrs r0, r1, 1 - subs r0, r4, r0 - lsls r0, 24 - lsrs r2, r0, 24 -_080C5586: - lsls r0, r2, 10 - lsls r1, r2, 5 - orrs r0, r1 - orrs r0, r2 - strh r0, [r3] -_080C5590: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r3, 0x2 - mov r0, r10 - ldrb r0, [r0] - cmp r5, r0 - bcc _080C5568 -_080C55A0: - lsls r0, r7, 24 - lsrs r2, r0, 24 - ldr r1, _080C55BC @ =gUnknown_3005338 - ldrb r1, [r1] - cmp r2, r1 - bcc _080C5532 -_080C55AC: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C55BC: .4byte gUnknown_3005338 -_080C55C0: .4byte gUnknown_3005340 -_080C55C4: .4byte gUnknown_3005344 -_080C55C8: .4byte gUnknown_300534C -_080C55CC: .4byte gUnknown_3005334 -_080C55D0: .4byte gUnknown_3005330 - thumb_func_end sub_80C5514 - - thumb_func_start sub_80C55D4 -sub_80C55D4: @ 80C55D4 - push {r4,r5,lr} - movs r4, 0 - ldr r5, _080C55F0 @ =0x00000c7f -_080C55DA: - lsls r0, r4, 16 - lsrs r0, 16 - bl sub_80C5CF8 - adds r4, 0x1 - cmp r4, r5 - bls _080C55DA - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C55F0: .4byte 0x00000c7f - thumb_func_end sub_80C55D4 - - thumb_func_start sub_80C55F4 -sub_80C55F4: @ 80C55F4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080C5674 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C5666 - ldr r0, _080C5678 @ =gUnknown_3005334 - mov r8, r0 - ldr r3, _080C567C @ =gUnknown_3005340 -_080C560C: - ldr r0, _080C5680 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C5684 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r4, r8 - ldr r1, [r4] - adds r1, r0 - ldr r0, _080C5688 @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - adds r6, r2, 0x1 - ldrb r0, [r3] - cmp r5, r0 - bcs _080C565A - movs r0, 0x80 - lsls r0, 8 - adds r7, r0, 0 -_080C5638: - ldrh r0, [r4] - ands r0, r7 - cmp r0, 0 - bne _080C564C - adds r0, r4, 0 - str r3, [sp] - bl sub_80C5ECC - strh r0, [r4] - ldr r3, [sp] -_080C564C: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldrb r0, [r3] - cmp r5, r0 - bcc _080C5638 -_080C565A: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080C5674 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C560C -_080C5666: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C5674: .4byte gUnknown_3005338 -_080C5678: .4byte gUnknown_3005334 -_080C567C: .4byte gUnknown_3005340 -_080C5680: .4byte gUnknown_3005344 -_080C5684: .4byte gUnknown_300534C -_080C5688: .4byte gUnknown_3005330 - thumb_func_end sub_80C55F4 - - thumb_func_start sub_80C568C -sub_80C568C: @ 80C568C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - movs r2, 0 - ldr r0, _080C5730 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C5722 - ldr r0, _080C5734 @ =gUnknown_3005334 - mov r8, r0 - ldr r3, _080C5738 @ =gUnknown_300534C -_080C56A4: - ldr r0, _080C573C @ =gUnknown_3005344 - ldrb r1, [r0] - ldrb r0, [r3] - muls r0, r1 - lsls r0, 1 - mov r4, r8 - ldr r1, [r4] - adds r1, r0 - ldr r0, _080C5740 @ =gUnknown_3005330 - ldrb r0, [r0] - adds r0, r2 - lsls r0, 1 - adds r4, r1, r0 - ldrh r1, [r4] - mov r0, sp - strh r1, [r0] - movs r5, 0x1 - ldrb r0, [r3] - lsls r0, 1 - adds r4, r0 - ldr r0, _080C5744 @ =gUnknown_3005338 - ldrb r0, [r0] - subs r0, 0x1 - adds r7, r2, 0x1 - cmp r5, r0 - bge _080C5716 - ldr r6, _080C5738 @ =gUnknown_300534C -_080C56DA: - ldrh r0, [r4] - movs r2, 0x80 - lsls r2, 8 - adds r1, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _080C5700 - ldrb r2, [r6] - lsls r2, 1 - adds r2, r4, r2 - mov r0, sp - adds r1, r4, 0 - str r3, [sp, 0x4] - bl sub_80C61BC - strh r0, [r4] - mov r1, sp - strh r0, [r1] - ldr r3, [sp, 0x4] -_080C5700: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - ldrb r0, [r6] - lsls r0, 1 - adds r4, r0 - ldr r0, _080C5744 @ =gUnknown_3005338 - ldrb r0, [r0] - subs r0, 0x1 - cmp r5, r0 - blt _080C56DA -_080C5716: - lsls r0, r7, 24 - lsrs r2, r0, 24 - ldr r0, _080C5730 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C56A4 -_080C5722: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C5730: .4byte gUnknown_3005340 -_080C5734: .4byte gUnknown_3005334 -_080C5738: .4byte gUnknown_300534C -_080C573C: .4byte gUnknown_3005344 -_080C5740: .4byte gUnknown_3005330 -_080C5744: .4byte gUnknown_3005338 - thumb_func_end sub_80C568C - - thumb_func_start sub_80C5748 -sub_80C5748: @ 80C5748 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r2, 0 - ldr r0, _080C57D4 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C57C4 - ldr r0, _080C57D8 @ =gUnknown_3005334 - mov r9, r0 - ldr r3, _080C57DC @ =gUnknown_3005340 -_080C5768: - ldr r0, _080C57E0 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C57E4 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r4, r9 - ldr r1, [r4] - adds r1, r0 - ldr r0, _080C57E8 @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - adds r6, r2, 0x1 - ldrb r0, [r3] - cmp r5, r0 - bcs _080C57B8 - movs r0, 0x80 - lsls r0, 8 - adds r7, r0, 0 -_080C5794: - ldrh r0, [r4] - ands r0, r7 - cmp r0, 0 - bne _080C57AA - adds r0, r4, 0 - mov r1, r8 - str r3, [sp] - bl sub_80C5F00 - strh r0, [r4] - ldr r3, [sp] -_080C57AA: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldrb r0, [r3] - cmp r5, r0 - bcc _080C5794 -_080C57B8: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080C57D4 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C5768 -_080C57C4: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C57D4: .4byte gUnknown_3005338 -_080C57D8: .4byte gUnknown_3005334 -_080C57DC: .4byte gUnknown_3005340 -_080C57E0: .4byte gUnknown_3005344 -_080C57E4: .4byte gUnknown_300534C -_080C57E8: .4byte gUnknown_3005330 - thumb_func_end sub_80C5748 - - thumb_func_start sub_80C57EC -sub_80C57EC: @ 80C57EC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080C586C @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C585E - ldr r0, _080C5870 @ =gUnknown_3005334 - mov r8, r0 - ldr r3, _080C5874 @ =gUnknown_3005340 -_080C5804: - ldr r0, _080C5878 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C587C @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r4, r8 - ldr r1, [r4] - adds r1, r0 - ldr r0, _080C5880 @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - adds r6, r2, 0x1 - ldrb r0, [r3] - cmp r5, r0 - bcs _080C5852 - movs r0, 0x80 - lsls r0, 8 - adds r7, r0, 0 -_080C5830: - ldrh r0, [r4] - ands r0, r7 - cmp r0, 0 - bne _080C5844 - adds r0, r4, 0 - str r3, [sp] - bl sub_80C600C - strh r0, [r4] - ldr r3, [sp] -_080C5844: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldrb r0, [r3] - cmp r5, r0 - bcc _080C5830 -_080C5852: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080C586C @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C5804 -_080C585E: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C586C: .4byte gUnknown_3005338 -_080C5870: .4byte gUnknown_3005334 -_080C5874: .4byte gUnknown_3005340 -_080C5878: .4byte gUnknown_3005344 -_080C587C: .4byte gUnknown_300534C -_080C5880: .4byte gUnknown_3005330 - thumb_func_end sub_80C57EC - - thumb_func_start sub_80C5884 -sub_80C5884: @ 80C5884 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - movs r7, 0 - ldr r0, _080C59BC @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r7, r0 - bcs _080C5910 - ldr r0, _080C59C0 @ =gUnknown_3005334 - mov r8, r0 -_080C589A: - ldr r0, _080C59C4 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r7 - ldr r0, _080C59C8 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r2, r8 - ldr r1, [r2] - adds r1, r0 - ldr r0, _080C59CC @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r5, r1, r0 - adds r4, r5, 0x2 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80C603C - strh r0, [r5] - movs r6, 0x1 - adds r5, r4, 0 - ldr r0, _080C59D0 @ =gUnknown_3005340 - ldrb r0, [r0] - subs r0, 0x1 - adds r7, 0x1 - cmp r6, r0 - bge _080C58FA -_080C58D2: - adds r4, r5, 0x2 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80C603C - strh r0, [r5] - subs r1, r5, 0x2 - adds r0, r5, 0 - bl sub_80C603C - strh r0, [r5] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r5, r4, 0 - ldr r0, _080C59D0 @ =gUnknown_3005340 - ldrb r0, [r0] - subs r0, 0x1 - cmp r6, r0 - blt _080C58D2 -_080C58FA: - subs r1, r5, 0x2 - adds r0, r5, 0 - bl sub_80C603C - strh r0, [r5] - lsls r0, r7, 24 - lsrs r7, r0, 24 - ldr r0, _080C59BC @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r7, r0 - bcc _080C589A -_080C5910: - movs r6, 0 - ldr r0, _080C59D0 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r6, r0 - bcs _080C59B0 - ldr r3, _080C59C0 @ =gUnknown_3005334 - mov r9, r3 - ldr r0, _080C59C8 @ =gUnknown_300534C - mov r8, r0 -_080C5922: - ldr r0, _080C59C4 @ =gUnknown_3005344 - ldrb r0, [r0] - mov r2, r8 - ldrb r1, [r2] - muls r0, r1 - lsls r0, 1 - mov r3, r9 - ldr r2, [r3] - adds r2, r0 - ldr r0, _080C59CC @ =gUnknown_3005330 - ldrb r0, [r0] - adds r0, r6 - lsls r0, 1 - adds r5, r2, r0 - lsls r1, 1 - adds r1, r5, r1 - adds r0, r5, 0 - bl sub_80C603C - strh r0, [r5] - movs r7, 0x1 - mov r1, r8 - ldrb r0, [r1] - lsls r0, 1 - adds r5, r0 - ldr r0, _080C59BC @ =gUnknown_3005338 - ldrb r0, [r0] - subs r0, 0x1 - adds r6, 0x1 - cmp r7, r0 - bge _080C5994 - ldr r4, _080C59C8 @ =gUnknown_300534C -_080C5962: - ldrb r1, [r4] - lsls r1, 1 - adds r1, r5, r1 - adds r0, r5, 0 - bl sub_80C603C - strh r0, [r5] - ldrb r1, [r4] - lsls r1, 1 - subs r1, r5, r1 - adds r0, r5, 0 - bl sub_80C603C - strh r0, [r5] - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - ldrb r0, [r4] - lsls r0, 1 - adds r5, r0 - ldr r0, _080C59BC @ =gUnknown_3005338 - ldrb r0, [r0] - subs r0, 0x1 - cmp r7, r0 - blt _080C5962 -_080C5994: - mov r2, r8 - ldrb r1, [r2] - lsls r1, 1 - subs r1, r5, r1 - adds r0, r5, 0 - bl sub_80C603C - strh r0, [r5] - lsls r0, r6, 24 - lsrs r6, r0, 24 - ldr r0, _080C59D0 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r6, r0 - bcc _080C5922 -_080C59B0: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C59BC: .4byte gUnknown_3005338 -_080C59C0: .4byte gUnknown_3005334 -_080C59C4: .4byte gUnknown_3005344 -_080C59C8: .4byte gUnknown_300534C -_080C59CC: .4byte gUnknown_3005330 -_080C59D0: .4byte gUnknown_3005340 - thumb_func_end sub_80C5884 - - thumb_func_start sub_80C59D4 -sub_80C59D4: @ 80C59D4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080C5A54 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C5A46 - ldr r0, _080C5A58 @ =gUnknown_3005334 - mov r8, r0 - ldr r3, _080C5A5C @ =gUnknown_3005340 -_080C59EC: - ldr r0, _080C5A60 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C5A64 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r4, r8 - ldr r1, [r4] - adds r1, r0 - ldr r0, _080C5A68 @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - adds r6, r2, 0x1 - ldrb r0, [r3] - cmp r5, r0 - bcs _080C5A3A - movs r0, 0x80 - lsls r0, 8 - adds r7, r0, 0 -_080C5A18: - ldrh r0, [r4] - ands r0, r7 - cmp r0, 0 - bne _080C5A2C - adds r0, r4, 0 - str r3, [sp] - bl sub_80C606C - strh r0, [r4] - ldr r3, [sp] -_080C5A2C: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldrb r0, [r3] - cmp r5, r0 - bcc _080C5A18 -_080C5A3A: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080C5A54 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C59EC -_080C5A46: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C5A54: .4byte gUnknown_3005338 -_080C5A58: .4byte gUnknown_3005334 -_080C5A5C: .4byte gUnknown_3005340 -_080C5A60: .4byte gUnknown_3005344 -_080C5A64: .4byte gUnknown_300534C -_080C5A68: .4byte gUnknown_3005330 - thumb_func_end sub_80C59D4 - - thumb_func_start sub_80C5A6C -sub_80C5A6C: @ 80C5A6C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - ldr r0, _080C5B98 @ =gUnknown_3005334 - ldr r4, [r0] - movs r6, 0 - movs r0, 0x80 - lsls r0, 8 - adds r5, r0, 0 -_080C5A84: - movs r7, 0 -_080C5A86: - ldrh r0, [r4] - ands r0, r5 - cmp r0, 0 - bne _080C5A96 - adds r0, r4, 0 - bl sub_80C606C - strh r0, [r4] -_080C5A96: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - adds r4, 0x2 - cmp r7, 0x3F - bls _080C5A86 - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x3F - bls _080C5A84 - movs r7, 0 - ldr r1, _080C5B98 @ =gUnknown_3005334 - mov r10, r1 - mov r3, sp - movs r2, 0x80 - lsls r2, 8 - mov r9, r2 -_080C5ABA: - lsls r0, r7, 1 - mov r2, r10 - ldr r1, [r2] - adds r4, r1, r0 - ldrh r1, [r4] - strh r1, [r3] - mov r1, r9 - strh r1, [r4] - movs r6, 0x1 - adds r4, 0x80 - adds r5, r0, 0 -_080C5AD0: - ldrh r0, [r4] - movs r2, 0x80 - lsls r2, 8 - ands r0, r2 - cmp r0, 0 - bne _080C5AF0 - adds r2, r4, 0 - adds r2, 0x80 - mov r0, sp - adds r1, r4, 0 - str r3, [sp, 0x4] - bl sub_80C62DC - strh r0, [r4] - ldr r3, [sp, 0x4] - strh r0, [r3] -_080C5AF0: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r4, 0x80 - cmp r6, 0x3E - bls _080C5AD0 - mov r0, r9 - strh r0, [r4] - mov r1, r10 - ldr r0, [r1] - adds r4, r0, r5 - ldrh r0, [r4] - strh r0, [r3] - mov r2, r9 - strh r2, [r4] - movs r6, 0x1 - adds r4, 0x80 - movs r0, 0x80 - lsls r0, 8 - mov r8, r0 -_080C5B18: - ldrh r0, [r4] - mov r1, r8 - ands r0, r1 - adds r5, r4, 0 - adds r5, 0x80 - cmp r0, 0 - bne _080C5B38 - mov r0, sp - adds r1, r4, 0 - adds r2, r5, 0 - str r3, [sp, 0x4] - bl sub_80C62DC - strh r0, [r4] - ldr r3, [sp, 0x4] - strh r0, [r3] -_080C5B38: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r4, r5, 0 - cmp r6, 0x3E - bls _080C5B18 - mov r2, r9 - strh r2, [r4] - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0x3F - bls _080C5ABA - ldr r0, _080C5B98 @ =gUnknown_3005334 - ldr r4, [r0] - movs r6, 0 - movs r0, 0x80 - lsls r0, 8 - mov r8, r0 -_080C5B5E: - movs r7, 0 - adds r5, r6, 0x1 -_080C5B62: - ldrh r0, [r4] - mov r1, r8 - ands r0, r1 - cmp r0, 0 - bne _080C5B74 - adds r0, r4, 0 - bl sub_80C606C - strh r0, [r4] -_080C5B74: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - adds r4, 0x2 - cmp r7, 0x3F - bls _080C5B62 - lsls r0, r5, 24 - lsrs r6, r0, 24 - cmp r6, 0x3F - bls _080C5B5E - 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 -_080C5B98: .4byte gUnknown_3005334 - thumb_func_end sub_80C5A6C - - thumb_func_start sub_80C5B9C -sub_80C5B9C: @ 80C5B9C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080C5C2C @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C5C1E - ldr r0, _080C5C30 @ =gUnknown_3005334 - mov r8, r0 -_080C5BB2: - ldr r0, _080C5C34 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C5C38 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r3, r8 - ldr r1, [r3] - adds r1, r0 - ldr r0, _080C5C3C @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - ldrh r1, [r4] - mov r0, sp - strh r1, [r0] - movs r5, 0x1 - adds r4, 0x2 - ldr r0, _080C5C40 @ =gUnknown_3005340 - ldrb r0, [r0] - subs r0, 0x1 - adds r6, r2, 0x1 - cmp r5, r0 - bge _080C5C12 - movs r0, 0x80 - lsls r0, 8 - adds r7, r0, 0 -_080C5BEA: - ldrh r0, [r4] - ands r0, r7 - cmp r0, 0 - bne _080C5C00 - mov r0, sp - adds r1, r4, 0 - bl sub_80C6098 - strh r0, [r4] - mov r1, sp - strh r0, [r1] -_080C5C00: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldr r0, _080C5C40 @ =gUnknown_3005340 - ldrb r0, [r0] - subs r0, 0x1 - cmp r5, r0 - blt _080C5BEA -_080C5C12: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080C5C2C @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C5BB2 -_080C5C1E: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C5C2C: .4byte gUnknown_3005338 -_080C5C30: .4byte gUnknown_3005334 -_080C5C34: .4byte gUnknown_3005344 -_080C5C38: .4byte gUnknown_300534C -_080C5C3C: .4byte gUnknown_3005330 -_080C5C40: .4byte gUnknown_3005340 - thumb_func_end sub_80C5B9C - - thumb_func_start sub_80C5C44 -sub_80C5C44: @ 80C5C44 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - movs r2, 0 - ldr r0, _080C5CE0 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C5CD2 - ldr r0, _080C5CE4 @ =gUnknown_3005334 - mov r8, r0 - ldr r7, _080C5CE8 @ =gUnknown_300534C -_080C5C5C: - ldr r0, _080C5CEC @ =gUnknown_3005344 - ldrb r1, [r0] - ldrb r0, [r7] - muls r0, r1 - lsls r0, 1 - mov r3, r8 - ldr r1, [r3] - adds r1, r0 - ldr r0, _080C5CF0 @ =gUnknown_3005330 - ldrb r0, [r0] - adds r0, r2 - lsls r0, 1 - adds r4, r1, r0 - ldrh r1, [r4] - mov r0, sp - strh r1, [r0] - movs r5, 0x1 - ldrb r0, [r7] - lsls r0, 1 - adds r4, r0 - ldr r0, _080C5CF4 @ =gUnknown_3005338 - ldrb r0, [r0] - subs r0, 0x1 - adds r6, r2, 0x1 - cmp r5, r0 - bge _080C5CC6 - movs r0, 0x80 - lsls r0, 8 - adds r2, r0, 0 -_080C5C96: - ldrh r0, [r4] - ands r0, r2 - cmp r0, 0 - bne _080C5CB0 - mov r0, sp - adds r1, r4, 0 - str r2, [sp, 0x4] - bl sub_80C6098 - strh r0, [r4] - mov r1, sp - strh r0, [r1] - ldr r2, [sp, 0x4] -_080C5CB0: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - ldrb r0, [r7] - lsls r0, 1 - adds r4, r0 - ldr r0, _080C5CF4 @ =gUnknown_3005338 - ldrb r0, [r0] - subs r0, 0x1 - cmp r5, r0 - blt _080C5C96 -_080C5CC6: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080C5CE0 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C5C5C -_080C5CD2: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C5CE0: .4byte gUnknown_3005340 -_080C5CE4: .4byte gUnknown_3005334 -_080C5CE8: .4byte gUnknown_300534C -_080C5CEC: .4byte gUnknown_3005344 -_080C5CF0: .4byte gUnknown_3005330 -_080C5CF4: .4byte gUnknown_3005338 - thumb_func_end sub_80C5C44 - - thumb_func_start sub_80C5CF8 -sub_80C5CF8: @ 80C5CF8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x20 - lsls r0, 16 - lsrs r0, 16 - mov r10, r0 - mov r2, sp - ldr r3, _080C5D64 @ =gUnknown_83F3024 - lsls r1, r0, 1 - add r1, r10 - adds r0, r1, r3 - ldrb r0, [r0] - strb r0, [r2] - adds r0, r3, 0x1 - adds r0, r1, r0 - ldrb r0, [r0] - strb r0, [r2, 0x1] - mov r5, sp - adds r0, r3, 0x2 - adds r1, r0 - ldrb r4, [r1] - lsls r2, r4, 24 - lsrs r1, r2, 27 - movs r0, 0x7 - ands r1, r0 - strh r1, [r5, 0x2] - lsrs r2, 25 - mov r9, r2 - movs r0, 0x3 - ands r2, r0 - mov r9, r2 - movs r5, 0x1 - ands r5, r4 - movs r4, 0x1 - mov r8, r4 - cmp r8, r1 - bcs _080C5DAA - mov r3, sp -_080C5D4A: - cmp r5, 0 - bne _080C5D68 - mov r0, r8 - lsls r2, r0, 2 - mov r4, sp - adds r1, r4, r2 - ldrb r0, [r3] - mov r4, r8 - subs r0, r4 - strb r0, [r1] - ldrb r0, [r3, 0x1] - add r0, r8 - b _080C5D7A - .align 2, 0 -_080C5D64: .4byte gUnknown_83F3024 -_080C5D68: - mov r0, r8 - lsls r2, r0, 2 - mov r4, sp - adds r1, r4, r2 - ldrb r0, [r3] - adds r0, 0x1 - strb r0, [r1] - ldrb r0, [r3, 0x1] - subs r0, 0x1 -_080C5D7A: - strb r0, [r1, 0x1] - add r2, sp - ldrb r0, [r2] - cmp r0, 0x3F - bhi _080C5D8A - ldrb r0, [r2, 0x1] - cmp r0, 0x3F - bls _080C5D92 -_080C5D8A: - mov r0, r8 - subs r0, 0x1 - strh r0, [r3, 0x2] - b _080C5DAA -_080C5D92: - ldrh r0, [r3, 0x2] - mov r1, r8 - subs r0, r1 - strh r0, [r2, 0x2] - mov r0, r8 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldrh r0, [r3, 0x2] - cmp r8, r0 - bcc _080C5D4A -_080C5DAA: - movs r2, 0 - mov r8, r2 - mov r0, sp - ldrh r0, [r0, 0x2] - cmp r8, r0 - bcc _080C5DB8 - b _080C5EBA -_080C5DB8: - movs r3, 0x1F -_080C5DBA: - ldr r1, _080C5E18 @ =gUnknown_3005334 - mov r4, r8 - lsls r0, r4, 2 - mov r2, sp - adds r6, r2, r0 - ldrb r0, [r6, 0x1] - lsls r0, 7 - ldr r1, [r1] - adds r1, r0 - ldrb r0, [r6] - lsls r0, 1 - adds r2, r1, r0 - ldrh r1, [r2] - movs r4, 0x80 - lsls r4, 8 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - bne _080C5EA6 - movs r7, 0x1F - ands r7, r1 - lsls r0, r1, 16 - lsrs r5, r0, 21 - ands r5, r3 - lsrs r4, r0, 26 - ands r4, r3 - mov r0, r9 - cmp r0, 0 - blt _080C5E9C - cmp r0, 0x1 - ble _080C5E1C - cmp r0, 0x3 - bgt _080C5E9C - ldrh r0, [r6, 0x2] - adds r1, r7, r0 - lsls r1, 16 - lsrs r7, r1, 16 - adds r1, r5, r0 - lsls r1, 16 - lsrs r5, r1, 16 - adds r0, r4, r0 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r7, 0x1F - bls _080C5E90 - movs r7, 0x1F - b _080C5E90 - .align 2, 0 -_080C5E18: .4byte gUnknown_3005334 -_080C5E1C: - mov r1, r10 - lsls r0, r1, 1 - add r0, r10 - ldr r1, _080C5E50 @ =gUnknown_83F3024 - adds r1, 0x2 - adds r0, r1 - ldrb r0, [r0] - lsrs r0, 3 - movs r1, 0x7 - ands r0, r1 - movs r1, 0x3 - str r2, [sp, 0x18] - str r3, [sp, 0x1C] - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - ldr r2, [sp, 0x18] - ldr r3, [sp, 0x1C] - cmp r0, 0x1 - beq _080C5E6C - cmp r0, 0x1 - bgt _080C5E54 - cmp r0, 0 - beq _080C5E5A - b _080C5E9C - .align 2, 0 -_080C5E50: .4byte gUnknown_83F3024 -_080C5E54: - cmp r0, 0x2 - beq _080C5E7E - b _080C5E9C -_080C5E5A: - ldrh r0, [r6, 0x2] - cmp r7, r0 - bcc _080C5E68 - subs r0, r7, r0 - lsls r0, 16 - lsrs r7, r0, 16 - b _080C5E9C -_080C5E68: - movs r7, 0 - b _080C5E9C -_080C5E6C: - ldrh r0, [r6, 0x2] - cmp r5, r0 - bcc _080C5E7A - subs r0, r5, r0 - lsls r0, 16 - lsrs r5, r0, 16 - b _080C5E9C -_080C5E7A: - movs r5, 0 - b _080C5E9C -_080C5E7E: - ldrh r0, [r6, 0x2] - cmp r4, r0 - bcc _080C5E8C - subs r0, r4, r0 - lsls r0, 16 - lsrs r4, r0, 16 - b _080C5E9C -_080C5E8C: - movs r4, 0 - b _080C5E9C -_080C5E90: - cmp r5, 0x1F - bls _080C5E96 - movs r5, 0x1F -_080C5E96: - cmp r4, 0x1F - bls _080C5E9C - movs r4, 0x1F -_080C5E9C: - lsls r0, r4, 10 - lsls r1, r5, 5 - orrs r0, r1 - orrs r7, r0 - strh r7, [r2] -_080C5EA6: - mov r0, r8 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - mov r0, sp - ldrh r0, [r0, 0x2] - cmp r8, r0 - bcs _080C5EBA - b _080C5DBA -_080C5EBA: - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80C5CF8 - - thumb_func_start sub_80C5ECC -sub_80C5ECC: @ 80C5ECC - push {lr} - ldrh r1, [r0] - movs r3, 0x1F - movs r0, 0x1F - ands r0, r1 - lsls r1, 16 - lsrs r2, r1, 21 - ands r2, r3 - lsrs r1, 26 - ands r1, r3 - adds r0, r2 - adds r0, r1 - movs r1, 0x3 - bl __divsi3 - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - lsls r0, r1, 10 - lsls r2, r1, 5 - orrs r0, r2 - orrs r0, r1 - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - thumb_func_end sub_80C5ECC - - thumb_func_start sub_80C5F00 -sub_80C5F00: @ 80C5F00 - push {r4,lr} - lsls r1, 24 - lsrs r4, r1, 24 - ldrh r0, [r0] - movs r2, 0x1F - movs r1, 0x1F - ands r1, r0 - lsls r0, 16 - lsrs r3, r0, 21 - ands r3, r2 - lsrs r0, 26 - ands r0, r2 - cmp r1, 0x10 - bhi _080C5F30 - cmp r3, 0x10 - bhi _080C5F30 - cmp r0, 0x10 - bhi _080C5F30 - adds r0, r4, 0 - bl sub_80C5F3C - lsls r0, 16 - lsrs r0, 16 - b _080C5F32 -_080C5F30: - ldr r0, _080C5F38 @ =0x00007fff -_080C5F32: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080C5F38: .4byte 0x00007fff - thumb_func_end sub_80C5F00 - - thumb_func_start sub_80C5F3C -sub_80C5F3C: @ 80C5F3C - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0 - mov r8, r0 - movs r6, 0 - movs r7, 0 - adds r0, r4, 0 - movs r1, 0x6 - bl __udivsi3 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x3 - bl __umodsi3 - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r4, 0 - movs r1, 0x6 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x5 - bhi _080C5FF4 - lsls r0, 2 - ldr r1, _080C5F80 @ =_080C5F84 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C5F80: .4byte _080C5F84 - .align 2, 0 -_080C5F84: - .4byte _080C5F9C - .4byte _080C5FAC - .4byte _080C5FBC - .4byte _080C5FCA - .4byte _080C5FD8 - .4byte _080C5FE6 -_080C5F9C: - movs r0, 0x15 - subs r0, r5 - lsls r0, 16 - lsrs r6, r0, 16 - adds r7, r6, 0 - movs r1, 0 - mov r8, r1 - b _080C5FF4 -_080C5FAC: - movs r7, 0 - movs r0, 0x15 - subs r0, r5 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - mov r6, r8 - b _080C5FF4 -_080C5FBC: - movs r0, 0x15 - subs r0, r5 - lsls r0, 16 - lsrs r7, r0, 16 - movs r6, 0 - mov r8, r7 - b _080C5FF4 -_080C5FCA: - movs r7, 0 - movs r6, 0 - movs r0, 0x17 - subs r0, r5 - lsls r0, 16 - lsrs r0, 16 - b _080C5FF2 -_080C5FD8: - movs r0, 0x17 - subs r0, r5 - lsls r0, 16 - lsrs r7, r0, 16 - movs r6, 0 - mov r8, r6 - b _080C5FF4 -_080C5FE6: - movs r7, 0 - movs r0, 0x17 - subs r0, r5 - lsls r0, 16 - lsrs r6, r0, 16 - movs r0, 0 -_080C5FF2: - mov r8, r0 -_080C5FF4: - lsls r0, r7, 10 - lsls r1, r6, 5 - orrs r0, r1 - mov r1, r8 - orrs r1, r0 - lsls r0, r1, 16 - lsrs r0, 16 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80C5F3C - - thumb_func_start sub_80C600C -sub_80C600C: @ 80C600C - push {lr} - ldrh r0, [r0] - movs r2, 0x1F - movs r1, 0x1F - ands r1, r0 - lsls r0, 16 - lsrs r3, r0, 21 - ands r3, r2 - lsrs r0, 26 - ands r0, r2 - cmp r1, 0x10 - bhi _080C6030 - cmp r3, 0x10 - bhi _080C6030 - cmp r0, 0x10 - bhi _080C6030 - movs r0, 0 - b _080C6032 -_080C6030: - ldr r0, _080C6038 @ =0x00007fff -_080C6032: - pop {r1} - bx r1 - .align 2, 0 -_080C6038: .4byte 0x00007fff - thumb_func_end sub_80C600C - - thumb_func_start sub_80C603C -sub_80C603C: @ 80C603C - push {r4,lr} - adds r4, r0, 0 - ldrh r3, [r4] - cmp r3, 0 - beq _080C6064 - movs r2, 0x80 - lsls r2, 8 - adds r0, r2, 0 - ands r0, r3 - cmp r0, 0 - beq _080C6056 - adds r0, r2, 0 - b _080C6066 -_080C6056: - ldrh r1, [r1] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _080C6064 - ldrh r0, [r4] - b _080C6066 -_080C6064: - movs r0, 0 -_080C6066: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80C603C - - thumb_func_start sub_80C606C -sub_80C606C: @ 80C606C - push {r4,lr} - ldrh r1, [r0] - movs r0, 0x1F - movs r3, 0x1F - ands r3, r1 - lsls r1, 16 - lsrs r2, r1, 21 - lsrs r1, 26 - subs r3, r0, r3 - adds r4, r0, 0 - bics r4, r2 - adds r2, r4, 0 - bics r0, r1 - lsls r0, 10 - lsls r2, 5 - orrs r0, r2 - orrs r0, r3 - lsls r0, 16 - lsrs r0, 16 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80C606C - - thumb_func_start sub_80C6098 -sub_80C6098: @ 80C6098 - push {r4-r7,lr} - sub sp, 0x14 - adds r7, r1, 0 - ldrh r4, [r0] - ldrh r5, [r7] - lsls r6, r4, 16 - lsls r0, r5, 16 - mov r12, r0 - cmp r4, r5 - beq _080C610A - mov r2, sp - movs r3, 0x1F - movs r1, 0x1F - adds r0, r1, 0 - ands r0, r4 - strh r0, [r2] - lsrs r0, r6, 21 - ands r0, r3 - strh r0, [r2, 0x2] - lsrs r0, r6, 26 - ands r0, r3 - strh r0, [r2, 0x4] - mov r0, sp - ands r1, r5 - strh r1, [r0, 0x6] - mov r1, sp - mov r2, r12 - lsrs r0, r2, 21 - ands r0, r3 - strh r0, [r1, 0x8] - lsrs r0, r2, 26 - ands r0, r3 - strh r0, [r1, 0xA] - mov r0, sp - ldrh r0, [r0] - cmp r0, 0x19 - bls _080C60F2 - mov r0, sp - ldrh r0, [r0, 0x2] - cmp r0, 0x19 - bls _080C60F2 - mov r0, sp - ldrh r0, [r0, 0x4] - cmp r0, 0x19 - bhi _080C610A -_080C60F2: - mov r0, sp - ldrh r0, [r0, 0x6] - cmp r0, 0x19 - bls _080C610E - mov r0, sp - ldrh r0, [r0, 0x8] - cmp r0, 0x19 - bls _080C610E - mov r0, sp - ldrh r0, [r0, 0xA] - cmp r0, 0x19 - bls _080C610E -_080C610A: - ldrh r0, [r7] - b _080C61B4 -_080C610E: - movs r4, 0 - add r6, sp, 0xC - mov r7, sp - adds r7, 0x6 - adds r5, r6, 0 -_080C6118: - lsls r2, r4, 1 - mov r1, sp - adds r0, r1, r2 - adds r1, r7, r2 - ldrh r3, [r0] - ldrh r0, [r1] - cmp r3, r0 - bls _080C612E - adds r1, r5, r2 - subs r0, r3, r0 - b _080C6132 -_080C612E: - adds r1, r5, r2 - subs r0, r3 -_080C6132: - strh r0, [r1] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x2 - bls _080C6118 - adds r1, r6, 0 - ldrh r0, [r1, 0x2] - ldrh r3, [r1] - cmp r3, r0 - bcc _080C6158 - ldrh r2, [r1, 0x4] - cmp r3, r2 - bcc _080C6152 - adds r2, r3, 0 - b _080C616C -_080C6152: - cmp r0, r2 - bcs _080C615E - b _080C6166 -_080C6158: - ldrh r2, [r1, 0x4] - cmp r0, r2 - bcc _080C6162 -_080C615E: - ldrh r2, [r1, 0x2] - b _080C616C -_080C6162: - cmp r2, r3 - bcc _080C616A -_080C6166: - ldrh r2, [r1, 0x4] - b _080C616C -_080C616A: - ldrh r2, [r6] -_080C616C: - mov r0, sp - ldrh r1, [r0, 0x6] - lsrs r0, r2, 1 - movs r6, 0x1F - subs r6, r0 - adds r0, r1, 0 - muls r0, r6 - movs r1, 0x1F - bl __divsi3 - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - mov r0, sp - ldrh r0, [r0, 0x8] - muls r0, r6 - movs r1, 0x1F - bl __divsi3 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - mov r0, sp - ldrh r0, [r0, 0xA] - muls r0, r6 - movs r1, 0x1F - bl __divsi3 - lsls r0, 16 - lsrs r0, 6 - lsls r4, 5 - orrs r0, r4 - orrs r5, r0 - lsls r5, 16 - lsrs r5, 16 - adds r0, r5, 0 -_080C61B4: - add sp, 0x14 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80C6098 - - thumb_func_start sub_80C61BC -sub_80C61BC: @ 80C61BC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - adds r3, r0, 0 - mov r10, r1 - str r2, [sp] - ldrh r1, [r3] - mov r0, r10 - ldrh r0, [r0] - cmp r1, r0 - bne _080C61E4 - ldrh r0, [r2] - cmp r0, r1 - bne _080C61E4 - mov r1, r10 - ldrh r0, [r1] - b _080C62CC -_080C61E4: - mov r2, r10 - ldrh r0, [r2] - movs r1, 0x1F - mov r9, r1 - movs r4, 0x1F - adds r5, r4, 0 - ands r5, r0 - lsls r0, 16 - lsrs r2, r0, 21 - mov r1, r9 - ands r1, r2 - mov r8, r1 - lsrs r0, 26 - mov r2, r9 - ands r2, r0 - str r2, [sp, 0x4] - ldrh r2, [r3] - adds r0, r4, 0 - ands r0, r2 - lsls r2, 16 - lsrs r1, r2, 21 - mov r3, r9 - ands r1, r3 - adds r0, r1 - lsrs r2, 26 - ands r2, r3 - adds r0, r2 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - lsrs r7, r0, 16 - mov r1, r8 - adds r0, r5, r1 - ldr r2, [sp, 0x4] - adds r0, r2 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - lsrs r6, r0, 16 - ldr r3, [sp] - ldrh r1, [r3] - ands r4, r1 - lsls r1, 16 - lsrs r0, r1, 21 - mov r2, r9 - ands r0, r2 - adds r4, r0 - lsrs r1, 26 - ands r1, r2 - adds r4, r1 - adds r0, r4, 0 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r7, r6 - bne _080C6266 - cmp r1, r6 - bne _080C6266 - mov r3, r10 - ldrh r0, [r3] - b _080C62CC -_080C6266: - cmp r7, r6 - bls _080C626E - subs r0, r7, r6 - b _080C6270 -_080C626E: - subs r0, r6, r7 -_080C6270: - lsls r0, 16 - lsrs r2, r0, 16 - cmp r1, r6 - bls _080C627C - subs r0, r1, r6 - b _080C627E -_080C627C: - subs r0, r6, r1 -_080C627E: - lsls r0, 16 - lsrs r0, 16 - cmp r2, r0 - bcc _080C6288 - adds r0, r2, 0 -_080C6288: - lsrs r0, 1 - movs r4, 0x1F - subs r4, r0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r5, 0 - muls r0, r4 - movs r1, 0x1F - bl __divsi3 - lsls r0, 16 - lsrs r5, r0, 16 - mov r0, r8 - muls r0, r4 - movs r1, 0x1F - bl __divsi3 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - ldr r1, [sp, 0x4] - adds r0, r1, 0 - muls r0, r4 - movs r1, 0x1F - bl __divsi3 - lsls r0, 16 - lsrs r0, 6 - mov r2, r8 - lsls r1, r2, 5 - orrs r0, r1 - orrs r5, r0 - lsls r0, r5, 16 - lsrs r0, 16 -_080C62CC: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80C61BC - - thumb_func_start sub_80C62DC -sub_80C62DC: @ 80C62DC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - adds r3, r0, 0 - mov r10, r1 - str r2, [sp] - ldrh r1, [r3] - mov r0, r10 - ldrh r0, [r0] - cmp r1, r0 - bne _080C6304 - ldrh r0, [r2] - cmp r0, r1 - bne _080C6304 - mov r1, r10 - ldrh r0, [r1] - b _080C63EA -_080C6304: - mov r2, r10 - ldrh r0, [r2] - movs r1, 0x1F - mov r9, r1 - movs r4, 0x1F - adds r5, r4, 0 - ands r5, r0 - lsls r0, 16 - lsrs r2, r0, 21 - mov r1, r9 - ands r1, r2 - mov r8, r1 - lsrs r0, 26 - mov r2, r9 - ands r2, r0 - str r2, [sp, 0x4] - ldrh r2, [r3] - adds r0, r4, 0 - ands r0, r2 - lsls r2, 16 - lsrs r1, r2, 21 - mov r3, r9 - ands r1, r3 - adds r0, r1 - lsrs r2, 26 - ands r2, r3 - adds r0, r2 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - lsrs r7, r0, 16 - mov r1, r8 - adds r0, r5, r1 - ldr r2, [sp, 0x4] - adds r0, r2 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - lsrs r6, r0, 16 - ldr r3, [sp] - ldrh r1, [r3] - ands r4, r1 - lsls r1, 16 - lsrs r0, r1, 21 - mov r2, r9 - ands r0, r2 - adds r4, r0 - lsrs r1, 26 - ands r1, r2 - adds r4, r1 - adds r0, r4, 0 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r7, r6 - bne _080C6386 - cmp r1, r6 - bne _080C6386 - mov r3, r10 - ldrh r0, [r3] - b _080C63EA -_080C6386: - cmp r7, r6 - bls _080C638E - subs r0, r7, r6 - b _080C6390 -_080C638E: - subs r0, r6, r7 -_080C6390: - lsls r0, 16 - lsrs r2, r0, 16 - cmp r1, r6 - bls _080C639C - subs r0, r1, r6 - b _080C639E -_080C639C: - subs r0, r6, r1 -_080C639E: - lsls r0, 16 - lsrs r0, 16 - cmp r2, r0 - bcc _080C63A8 - adds r0, r2, 0 -_080C63A8: - movs r4, 0x1F - subs r4, r0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r5, 0 - muls r0, r4 - movs r1, 0x1F - bl __divsi3 - lsls r0, 16 - lsrs r5, r0, 16 - mov r0, r8 - muls r0, r4 - movs r1, 0x1F - bl __divsi3 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - ldr r1, [sp, 0x4] - adds r0, r1, 0 - muls r0, r4 - movs r1, 0x1F - bl __divsi3 - lsls r0, 16 - lsrs r0, 6 - mov r2, r8 - lsls r1, r2, 5 - orrs r0, r1 - orrs r5, r0 - lsls r0, r5, 16 - lsrs r0, 16 -_080C63EA: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80C62DC - - thumb_func_start sub_80C63FC -sub_80C63FC: @ 80C63FC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - ldrb r1, [r0, 0x1D] - lsrs r5, r1, 3 - ldrb r1, [r0, 0x1E] - lsrs r1, 3 - str r1, [sp, 0x8] - ldr r1, [r0, 0x4] - str r1, [sp] - ldr r2, [r0, 0x10] - str r2, [sp, 0x4] - ldrh r0, [r0, 0x16] - cmp r0, 0x2 - bne _080C64AC - movs r1, 0 - ldr r0, [sp, 0x8] - cmp r1, r0 - bcc _080C642A - b _080C6538 -_080C642A: - movs r0, 0 - adds r2, r1, 0x1 - mov r10, r2 - cmp r0, r5 - bcs _080C649E - adds r2, r1, 0 - muls r2, r5 - mov r9, r2 - lsls r1, 3 - mov r8, r1 -_080C643E: - movs r4, 0 - lsls r6, r0, 4 - adds r7, r0, 0x1 - add r0, r9 - lsls r0, 6 - ldr r1, [sp, 0x4] - adds r1, r0 - mov r12, r1 -_080C644E: - lsls r0, r4, 3 - mov r2, r12 - adds r3, r2, r0 - mov r1, r8 - adds r0, r1, r4 - lsls r0, 3 - muls r0, r5 - lsls r0, 1 - ldr r2, [sp] - adds r0, r2, r0 - adds r2, r0, r6 - ldrh r0, [r2, 0x2] - lsls r0, 8 - ldrh r1, [r2] - orrs r0, r1 - strh r0, [r3] - ldrh r0, [r2, 0x6] - lsls r0, 8 - ldrh r1, [r2, 0x4] - orrs r0, r1 - strh r0, [r3, 0x2] - ldrh r0, [r2, 0xA] - lsls r0, 8 - ldrh r1, [r2, 0x8] - orrs r0, r1 - strh r0, [r3, 0x4] - ldrh r0, [r2, 0xE] - lsls r0, 8 - ldrh r1, [r2, 0xC] - orrs r0, r1 - strh r0, [r3, 0x6] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x7 - bls _080C644E - lsls r0, r7, 16 - lsrs r0, 16 - cmp r0, r5 - bcc _080C643E -_080C649E: - mov r1, r10 - lsls r0, r1, 16 - lsrs r1, r0, 16 - ldr r2, [sp, 0x8] - cmp r1, r2 - bcc _080C642A - b _080C6538 -_080C64AC: - movs r1, 0 - ldr r0, [sp, 0x8] - cmp r1, r0 - bcs _080C6538 -_080C64B4: - movs r0, 0 - adds r2, r1, 0x1 - mov r10, r2 - cmp r0, r5 - bcs _080C652C - adds r2, r1, 0 - muls r2, r5 - mov r9, r2 - lsls r1, 3 - mov r8, r1 -_080C64C8: - movs r4, 0 - lsls r6, r0, 4 - adds r7, r0, 0x1 - add r0, r9 - lsls r0, 5 - ldr r1, [sp, 0x4] - adds r1, r0 - mov r12, r1 -_080C64D8: - lsls r0, r4, 2 - mov r2, r12 - adds r3, r2, r0 - mov r1, r8 - adds r0, r1, r4 - lsls r0, 3 - muls r0, r5 - lsls r0, 1 - ldr r2, [sp] - adds r0, r2, r0 - adds r2, r0, r6 - ldrh r1, [r2, 0x2] - lsls r1, 4 - ldrh r0, [r2] - orrs r1, r0 - ldrh r0, [r2, 0x4] - lsls r0, 8 - orrs r1, r0 - ldrh r0, [r2, 0x6] - lsls r0, 12 - orrs r1, r0 - strh r1, [r3] - ldrh r1, [r2, 0xA] - lsls r1, 4 - ldrh r0, [r2, 0x8] - orrs r1, r0 - ldrh r0, [r2, 0xC] - lsls r0, 8 - orrs r1, r0 - ldrh r0, [r2, 0xE] - lsls r0, 12 - orrs r1, r0 - strh r1, [r3, 0x2] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x7 - bls _080C64D8 - lsls r0, r7, 16 - lsrs r0, 16 - cmp r0, r5 - bcc _080C64C8 -_080C652C: - mov r1, r10 - lsls r0, r1, 16 - lsrs r1, r0, 16 - ldr r2, [sp, 0x8] - cmp r1, r2 - bcc _080C64B4 -_080C6538: - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80C63FC - - thumb_func_start sub_80C6548 -sub_80C6548: @ 80C6548 - push {lr} - ldr r2, _080C6598 @ =gUnknown_3005354 - ldrb r1, [r0, 0x18] - lsls r1, 4 - strh r1, [r2] - ldr r3, _080C659C @ =gUnknown_3005350 - ldrh r2, [r2] - lsls r2, 1 - ldr r1, [r0, 0x8] - adds r1, r2 - str r1, [r3] - ldr r2, _080C65A0 @ =gUnknown_3005334 - ldr r1, [r0, 0x4] - str r1, [r2] - ldr r2, _080C65A4 @ =gUnknown_3005330 - ldrb r1, [r0, 0x19] - strb r1, [r2] - ldr r2, _080C65A8 @ =gUnknown_3005344 - ldrb r1, [r0, 0x1A] - strb r1, [r2] - ldr r2, _080C65AC @ =gUnknown_3005340 - ldrb r1, [r0, 0x1B] - strb r1, [r2] - ldr r2, _080C65B0 @ =gUnknown_3005338 - ldrb r1, [r0, 0x1C] - strb r1, [r2] - ldr r2, _080C65B4 @ =gUnknown_300534C - ldrb r1, [r0, 0x1D] - strb r1, [r2] - ldr r2, _080C65B8 @ =gUnknown_300533C - ldrb r1, [r0, 0x1E] - strb r1, [r2] - ldrh r0, [r0, 0x14] - cmp r0, 0x5 - bhi _080C660E - lsls r0, 2 - ldr r1, _080C65BC @ =_080C65C0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C6598: .4byte gUnknown_3005354 -_080C659C: .4byte gUnknown_3005350 -_080C65A0: .4byte gUnknown_3005334 -_080C65A4: .4byte gUnknown_3005330 -_080C65A8: .4byte gUnknown_3005344 -_080C65AC: .4byte gUnknown_3005340 -_080C65B0: .4byte gUnknown_3005338 -_080C65B4: .4byte gUnknown_300534C -_080C65B8: .4byte gUnknown_300533C -_080C65BC: .4byte _080C65C0 - .align 2, 0 -_080C65C0: - .4byte _080C65D8 - .4byte _080C65E0 - .4byte _080C65E8 - .4byte _080C65F2 - .4byte _080C65FC - .4byte _080C6606 -_080C65D8: - movs r0, 0 - bl sub_80C6748 - b _080C660E -_080C65E0: - movs r0, 0x1 - bl sub_80C6748 - b _080C660E -_080C65E8: - bl sub_80C6614 - bl sub_80C6AB8 - b _080C660E -_080C65F2: - bl sub_80C6714 - bl sub_80C6A08 - b _080C660E -_080C65FC: - bl sub_80C66D8 - bl sub_80C6958 - b _080C660E -_080C6606: - bl sub_80C66BC - bl sub_80C68A0 -_080C660E: - pop {r0} - bx r0 - thumb_func_end sub_80C6548 - - thumb_func_start sub_80C6614 -sub_80C6614: @ 80C6614 - ldr r2, _080C667C @ =gUnknown_3005350 - ldr r1, [r2] - movs r0, 0 - strh r0, [r1] - ldr r0, [r2] - ldr r2, _080C6680 @ =0x000018c6 - adds r1, r2, 0 - strh r1, [r0, 0x2] - ldr r2, _080C6684 @ =0x000077bd - adds r1, r2, 0 - strh r1, [r0, 0x4] - ldr r2, _080C6688 @ =0x00002d6b - adds r1, r2, 0 - strh r1, [r0, 0x6] - ldr r2, _080C668C @ =0x000018dd - adds r1, r2, 0 - strh r1, [r0, 0x8] - ldr r2, _080C6690 @ =0x00001ba6 - adds r1, r2, 0 - strh r1, [r0, 0xA] - ldr r2, _080C6694 @ =0x000074c6 - adds r1, r2, 0 - strh r1, [r0, 0xC] - ldr r2, _080C6698 @ =0x00001bbd - adds r1, r2, 0 - strh r1, [r0, 0xE] - ldr r2, _080C669C @ =0x000074dd - adds r1, r2, 0 - strh r1, [r0, 0x10] - ldr r2, _080C66A0 @ =0x000077a6 - adds r1, r2, 0 - strh r1, [r0, 0x12] - ldr r2, _080C66A4 @ =0x0000197d - adds r1, r2, 0 - strh r1, [r0, 0x14] - ldr r2, _080C66A8 @ =0x00001bab - adds r1, r2, 0 - strh r1, [r0, 0x16] - ldr r2, _080C66AC @ =0x00007566 - adds r1, r2, 0 - strh r1, [r0, 0x18] - ldr r2, _080C66B0 @ =0x00002cdd - adds r1, r2, 0 - strh r1, [r0, 0x1A] - ldr r2, _080C66B4 @ =0x00002fa6 - adds r1, r2, 0 - strh r1, [r0, 0x1C] - ldr r2, _080C66B8 @ =0x000074cb - adds r1, r2, 0 - strh r1, [r0, 0x1E] - bx lr - .align 2, 0 -_080C667C: .4byte gUnknown_3005350 -_080C6680: .4byte 0x000018c6 -_080C6684: .4byte 0x000077bd -_080C6688: .4byte 0x00002d6b -_080C668C: .4byte 0x000018dd -_080C6690: .4byte 0x00001ba6 -_080C6694: .4byte 0x000074c6 -_080C6698: .4byte 0x00001bbd -_080C669C: .4byte 0x000074dd -_080C66A0: .4byte 0x000077a6 -_080C66A4: .4byte 0x0000197d -_080C66A8: .4byte 0x00001bab -_080C66AC: .4byte 0x00007566 -_080C66B0: .4byte 0x00002cdd -_080C66B4: .4byte 0x00002fa6 -_080C66B8: .4byte 0x000074cb - thumb_func_end sub_80C6614 - - thumb_func_start sub_80C66BC -sub_80C66BC: @ 80C66BC - ldr r2, _080C66D0 @ =gUnknown_3005350 - ldr r0, [r2] - movs r1, 0 - strh r1, [r0] - ldr r2, [r2] - strh r1, [r2, 0x2] - ldr r1, _080C66D4 @ =0x00007fff - adds r0, r1, 0 - strh r0, [r2, 0x4] - bx lr - .align 2, 0 -_080C66D0: .4byte gUnknown_3005350 -_080C66D4: .4byte 0x00007fff - thumb_func_end sub_80C66BC - - thumb_func_start sub_80C66D8 -sub_80C66D8: @ 80C66D8 - push {r4,r5,lr} - ldr r1, _080C6710 @ =gUnknown_3005350 - ldr r0, [r1] - movs r2, 0 - strh r2, [r0] - ldr r0, [r1] - strh r2, [r0, 0x2] - movs r4, 0 - adds r5, r1, 0 -_080C66EA: - ldr r0, [r5] - lsls r2, r4, 1 - adds r2, r0 - adds r0, r4, 0x2 - lsls r3, r0, 1 - lsls r1, r0, 11 - lsls r0, 6 - orrs r1, r0 - orrs r1, r3 - strh r1, [r2, 0x4] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xD - bls _080C66EA - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C6710: .4byte gUnknown_3005350 - thumb_func_end sub_80C66D8 - - thumb_func_start sub_80C6714 -sub_80C6714: @ 80C6714 - push {r4,lr} - ldr r2, _080C6744 @ =gUnknown_3005350 - ldr r1, [r2] - movs r0, 0 - strh r0, [r1] - movs r3, 0 - adds r4, r2, 0 -_080C6722: - ldr r0, [r4] - lsls r2, r3, 1 - adds r2, r0 - lsls r0, r3, 10 - lsls r1, r3, 5 - orrs r0, r1 - orrs r0, r3 - strh r0, [r2, 0x2] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x1F - bls _080C6722 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C6744: .4byte gUnknown_3005350 - thumb_func_end sub_80C6714 - - thumb_func_start sub_80C6748 -sub_80C6748: @ 80C6748 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - movs r1, 0xDF - mov r9, r1 - cmp r0, 0 - bne _080C6760 - movs r2, 0xFF - mov r9, r2 -_080C6760: - movs r6, 0 - ldr r3, _080C67E4 @ =gUnknown_3005350 - mov r12, r3 - mov r0, r9 - lsls r4, r0, 1 - ldr r5, _080C67E8 @ =gUnknown_3005338 - cmp r6, r9 - bcs _080C6784 - movs r2, 0 -_080C6772: - ldr r0, [r3] - lsls r1, r6, 1 - adds r1, r0 - strh r2, [r1] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, r9 - bcc _080C6772 -_080C6784: - mov r1, r12 - ldr r0, [r1] - adds r0, r4, r0 - ldr r2, _080C67EC @ =0x00003def - adds r1, r2, 0 - strh r1, [r0] - movs r3, 0 - ldrb r5, [r5] - cmp r3, r5 - bcs _080C6888 -_080C6798: - ldr r2, _080C67F0 @ =gUnknown_3005334 - ldr r0, _080C67F4 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r3 - ldr r0, _080C67F8 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - ldr r1, [r2] - adds r1, r0 - ldr r0, _080C67FC @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r6, 0 - ldr r0, _080C6800 @ =gUnknown_3005340 - adds r2, r0, 0 - adds r3, 0x1 - mov r10, r3 - ldrb r3, [r2] - cmp r6, r3 - bcs _080C687A - ldr r0, _080C6804 @ =gUnknown_3005354 - mov r8, r0 -_080C67C8: - ldrh r0, [r4] - movs r3, 0x80 - lsls r3, 8 - adds r1, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _080C6808 - mov r1, r8 - ldrh r0, [r1] - strh r0, [r4] - adds r6, 0x1 - adds r7, r4, 0x2 - b _080C686E - .align 2, 0 -_080C67E4: .4byte gUnknown_3005350 -_080C67E8: .4byte gUnknown_3005338 -_080C67EC: .4byte 0x00003def -_080C67F0: .4byte gUnknown_3005334 -_080C67F4: .4byte gUnknown_3005344 -_080C67F8: .4byte gUnknown_300534C -_080C67FC: .4byte gUnknown_3005330 -_080C6800: .4byte gUnknown_3005340 -_080C6804: .4byte gUnknown_3005354 -_080C6808: - adds r0, r4, 0 - bl sub_80C6B68 - lsls r0, 16 - lsrs r5, r0, 16 - movs r3, 0x1 - adds r6, 0x1 - adds r7, r4, 0x2 - cmp r3, r9 - bcs _080C6864 - ldr r0, _080C6834 @ =gUnknown_3005350 - ldr r2, [r0] - ldrh r1, [r2, 0x2] - mov r12, r0 - cmp r1, 0 - bne _080C6838 - strh r5, [r2, 0x2] - mov r2, r8 - ldrh r0, [r2] - adds r0, 0x1 - b _080C6862 - .align 2, 0 -_080C6834: .4byte gUnknown_3005350 -_080C6838: - mov r2, r12 - ldr r1, [r2] - lsls r0, r3, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r0, r5 - beq _080C685C - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, r9 - bcs _080C6864 - lsls r0, r3, 1 - adds r1, r0, r1 - ldrh r0, [r1] - cmp r0, 0 - bne _080C6838 - strh r5, [r1] -_080C685C: - mov r1, r8 - ldrh r0, [r1] - adds r0, r3 -_080C6862: - strh r0, [r4] -_080C6864: - ldr r2, _080C6898 @ =gUnknown_3005340 - cmp r3, r9 - bne _080C686E - mov r3, r9 - strh r3, [r4] -_080C686E: - lsls r0, r6, 24 - lsrs r6, r0, 24 - adds r4, r7, 0 - ldrb r0, [r2] - cmp r6, r0 - bcc _080C67C8 -_080C687A: - mov r1, r10 - lsls r0, r1, 24 - lsrs r3, r0, 24 - ldr r0, _080C689C @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r3, r0 - bcc _080C6798 -_080C6888: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C6898: .4byte gUnknown_3005340 -_080C689C: .4byte gUnknown_3005338 - thumb_func_end sub_80C6748 - - thumb_func_start sub_80C68A0 -sub_80C68A0: @ 80C68A0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r2, 0 - ldr r0, _080C68F4 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C6944 - ldr r0, _080C68F8 @ =gUnknown_3005334 - mov r8, r0 -_080C68B4: - ldr r0, _080C68FC @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C6900 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r3, r8 - ldr r1, [r3] - adds r1, r0 - ldr r0, _080C6904 @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r6, 0 - ldr r0, _080C6908 @ =gUnknown_3005340 - adds r3, r0, 0 - adds r7, r2, 0x1 - ldrb r0, [r3] - cmp r6, r0 - bcs _080C6938 - ldr r5, _080C690C @ =gUnknown_3005354 -_080C68E0: - ldrh r0, [r4] - movs r2, 0x80 - lsls r2, 8 - adds r1, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _080C6910 - ldrh r0, [r5] - strh r0, [r4] - b _080C692A - .align 2, 0 -_080C68F4: .4byte gUnknown_3005338 -_080C68F8: .4byte gUnknown_3005334 -_080C68FC: .4byte gUnknown_3005344 -_080C6900: .4byte gUnknown_300534C -_080C6904: .4byte gUnknown_3005330 -_080C6908: .4byte gUnknown_3005340 -_080C690C: .4byte gUnknown_3005354 -_080C6910: - adds r0, r4, 0 - bl sub_80C600C - lsls r0, 16 - cmp r0, 0 - bne _080C6922 - ldrh r0, [r5] - adds r0, 0x1 - b _080C6926 -_080C6922: - ldrh r0, [r5] - adds r0, 0x2 -_080C6926: - strh r0, [r4] - ldr r3, _080C6950 @ =gUnknown_3005340 -_080C692A: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r4, 0x2 - ldrb r0, [r3] - cmp r6, r0 - bcc _080C68E0 -_080C6938: - lsls r0, r7, 24 - lsrs r2, r0, 24 - ldr r0, _080C6954 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C68B4 -_080C6944: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C6950: .4byte gUnknown_3005340 -_080C6954: .4byte gUnknown_3005338 - thumb_func_end sub_80C68A0 - - thumb_func_start sub_80C6958 -sub_80C6958: @ 80C6958 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080C69AC @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C69F4 - ldr r0, _080C69B0 @ =gUnknown_3005334 - mov r8, r0 -_080C696E: - ldr r0, _080C69B4 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C69B8 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r3, r8 - ldr r1, [r3] - adds r1, r0 - ldr r0, _080C69BC @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - ldr r0, _080C69C0 @ =gUnknown_3005340 - adds r7, r2, 0x1 - ldrb r0, [r0] - cmp r5, r0 - bcs _080C69E8 - ldr r6, _080C69C4 @ =gUnknown_3005354 - movs r0, 0x80 - lsls r0, 8 - adds r2, r0, 0 -_080C699E: - ldrh r0, [r4] - ands r0, r2 - cmp r0, 0 - beq _080C69C8 - ldrh r0, [r6] - strh r0, [r4] - b _080C69D8 - .align 2, 0 -_080C69AC: .4byte gUnknown_3005338 -_080C69B0: .4byte gUnknown_3005334 -_080C69B4: .4byte gUnknown_3005344 -_080C69B8: .4byte gUnknown_300534C -_080C69BC: .4byte gUnknown_3005330 -_080C69C0: .4byte gUnknown_3005340 -_080C69C4: .4byte gUnknown_3005354 -_080C69C8: - adds r0, r4, 0 - str r2, [sp] - bl sub_80C6CAC - ldrh r1, [r6] - adds r0, r1 - strh r0, [r4] - ldr r2, [sp] -_080C69D8: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldr r0, _080C6A00 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r5, r0 - bcc _080C699E -_080C69E8: - lsls r0, r7, 24 - lsrs r2, r0, 24 - ldr r0, _080C6A04 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C696E -_080C69F4: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C6A00: .4byte gUnknown_3005340 -_080C6A04: .4byte gUnknown_3005338 - thumb_func_end sub_80C6958 - - thumb_func_start sub_80C6A08 -sub_80C6A08: @ 80C6A08 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080C6A5C @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C6AA4 - ldr r0, _080C6A60 @ =gUnknown_3005334 - mov r8, r0 -_080C6A1E: - ldr r0, _080C6A64 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C6A68 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r3, r8 - ldr r1, [r3] - adds r1, r0 - ldr r0, _080C6A6C @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - ldr r0, _080C6A70 @ =gUnknown_3005340 - adds r7, r2, 0x1 - ldrb r0, [r0] - cmp r5, r0 - bcs _080C6A98 - ldr r6, _080C6A74 @ =gUnknown_3005354 - movs r0, 0x80 - lsls r0, 8 - adds r2, r0, 0 -_080C6A4E: - ldrh r0, [r4] - ands r0, r2 - cmp r0, 0 - beq _080C6A78 - ldrh r0, [r6] - strh r0, [r4] - b _080C6A88 - .align 2, 0 -_080C6A5C: .4byte gUnknown_3005338 -_080C6A60: .4byte gUnknown_3005334 -_080C6A64: .4byte gUnknown_3005344 -_080C6A68: .4byte gUnknown_300534C -_080C6A6C: .4byte gUnknown_3005330 -_080C6A70: .4byte gUnknown_3005340 -_080C6A74: .4byte gUnknown_3005354 -_080C6A78: - adds r0, r4, 0 - str r2, [sp] - bl sub_80C6CE0 - ldrh r1, [r6] - adds r0, r1 - strh r0, [r4] - ldr r2, [sp] -_080C6A88: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldr r0, _080C6AB0 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r5, r0 - bcc _080C6A4E -_080C6A98: - lsls r0, r7, 24 - lsrs r2, r0, 24 - ldr r0, _080C6AB4 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C6A1E -_080C6AA4: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C6AB0: .4byte gUnknown_3005340 -_080C6AB4: .4byte gUnknown_3005338 - thumb_func_end sub_80C6A08 - - thumb_func_start sub_80C6AB8 -sub_80C6AB8: @ 80C6AB8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080C6B0C @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcs _080C6B54 - ldr r0, _080C6B10 @ =gUnknown_3005334 - mov r8, r0 -_080C6ACE: - ldr r0, _080C6B14 @ =gUnknown_3005344 - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080C6B18 @ =gUnknown_300534C - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r3, r8 - ldr r1, [r3] - adds r1, r0 - ldr r0, _080C6B1C @ =gUnknown_3005330 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - ldr r0, _080C6B20 @ =gUnknown_3005340 - adds r7, r2, 0x1 - ldrb r0, [r0] - cmp r5, r0 - bcs _080C6B48 - ldr r6, _080C6B24 @ =gUnknown_3005354 - movs r0, 0x80 - lsls r0, 8 - adds r2, r0, 0 -_080C6AFE: - ldrh r0, [r4] - ands r0, r2 - cmp r0, 0 - beq _080C6B28 - ldrh r0, [r6] - strh r0, [r4] - b _080C6B38 - .align 2, 0 -_080C6B0C: .4byte gUnknown_3005338 -_080C6B10: .4byte gUnknown_3005334 -_080C6B14: .4byte gUnknown_3005344 -_080C6B18: .4byte gUnknown_300534C -_080C6B1C: .4byte gUnknown_3005330 -_080C6B20: .4byte gUnknown_3005340 -_080C6B24: .4byte gUnknown_3005354 -_080C6B28: - adds r0, r4, 0 - str r2, [sp] - bl sub_80C6BDC - ldrh r1, [r6] - adds r0, r1 - strh r0, [r4] - ldr r2, [sp] -_080C6B38: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldr r0, _080C6B60 @ =gUnknown_3005340 - ldrb r0, [r0] - cmp r5, r0 - bcc _080C6AFE -_080C6B48: - lsls r0, r7, 24 - lsrs r2, r0, 24 - ldr r0, _080C6B64 @ =gUnknown_3005338 - ldrb r0, [r0] - cmp r2, r0 - bcc _080C6ACE -_080C6B54: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C6B60: .4byte gUnknown_3005340 -_080C6B64: .4byte gUnknown_3005338 - thumb_func_end sub_80C6AB8 - - thumb_func_start sub_80C6B68 -sub_80C6B68: @ 80C6B68 - push {r4,lr} - ldrh r0, [r0] - movs r1, 0x1F - movs r4, 0x1F - ands r4, r0 - lsls r0, 16 - lsrs r3, r0, 21 - ands r3, r1 - lsrs r2, r0, 26 - ands r2, r1 - movs r1, 0x3 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _080C6B8C - movs r0, 0x1C - ands r0, r4 - adds r4, r0, 0x4 -_080C6B8C: - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _080C6B9A - movs r0, 0x1C - ands r0, r3 - adds r3, r0, 0x4 -_080C6B9A: - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _080C6BA8 - movs r0, 0x1C - ands r0, r2 - adds r2, r0, 0x4 -_080C6BA8: - cmp r4, 0x5 - bhi _080C6BAE - movs r4, 0x6 -_080C6BAE: - cmp r4, 0x1E - bls _080C6BB4 - movs r4, 0x1E -_080C6BB4: - cmp r3, 0x5 - bhi _080C6BBA - movs r3, 0x6 -_080C6BBA: - cmp r3, 0x1E - bls _080C6BC0 - movs r3, 0x1E -_080C6BC0: - cmp r2, 0x5 - bhi _080C6BC6 - movs r2, 0x6 -_080C6BC6: - cmp r2, 0x1E - bls _080C6BCC - movs r2, 0x1E -_080C6BCC: - lsls r0, r2, 10 - lsls r1, r3, 5 - orrs r0, r1 - orrs r4, r0 - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80C6B68 - - thumb_func_start sub_80C6BDC -sub_80C6BDC: @ 80C6BDC - push {lr} - ldrh r0, [r0] - movs r1, 0x1F - movs r3, 0x1F - ands r3, r0 - lsls r0, 16 - lsrs r2, r0, 21 - ands r2, r1 - lsrs r0, 26 - ands r0, r1 - cmp r3, 0xB - bhi _080C6C00 - cmp r2, 0xA - bhi _080C6C00 - cmp r0, 0xA - bhi _080C6C00 - movs r0, 0x1 - b _080C6CA6 -_080C6C00: - cmp r3, 0x13 - bls _080C6C24 - cmp r2, 0x13 - bls _080C6C0C - cmp r0, 0x13 - bhi _080C6C30 -_080C6C0C: - cmp r3, 0x13 - bls _080C6C24 - cmp r2, 0x13 - bls _080C6C1A - cmp r0, 0xE - bhi _080C6C30 - b _080C6C68 -_080C6C1A: - cmp r0, 0x13 - bls _080C6C24 - cmp r2, 0xE - bhi _080C6C30 - b _080C6C44 -_080C6C24: - cmp r2, 0x13 - bls _080C6C34 - cmp r0, 0x13 - bls _080C6C34 - cmp r3, 0xE - bls _080C6C8C -_080C6C30: - movs r0, 0x2 - b _080C6CA6 -_080C6C34: - cmp r3, 0x13 - bls _080C6C58 - cmp r2, 0xB - bls _080C6C4C - cmp r0, 0xB - bls _080C6C48 - cmp r2, r0 - bcs _080C6C68 -_080C6C44: - movs r0, 0x8 - b _080C6CA6 -_080C6C48: - movs r0, 0xA - b _080C6CA6 -_080C6C4C: - cmp r0, 0xB - bls _080C6C54 - movs r0, 0xD - b _080C6CA6 -_080C6C54: - movs r0, 0x4 - b _080C6CA6 -_080C6C58: - cmp r2, 0x13 - bls _080C6C7C - cmp r3, 0xB - bls _080C6C70 - cmp r0, 0xB - bls _080C6C6C - cmp r3, r0 - bcc _080C6C8C -_080C6C68: - movs r0, 0x7 - b _080C6CA6 -_080C6C6C: - movs r0, 0xB - b _080C6CA6 -_080C6C70: - cmp r0, 0xB - bls _080C6C78 - movs r0, 0xE - b _080C6CA6 -_080C6C78: - movs r0, 0x5 - b _080C6CA6 -_080C6C7C: - cmp r0, 0x13 - bls _080C6CA4 - cmp r3, 0xB - bls _080C6C90 - cmp r2, 0xB - bls _080C6C98 - cmp r3, r2 - bcs _080C6C44 -_080C6C8C: - movs r0, 0x9 - b _080C6CA6 -_080C6C90: - cmp r2, 0xB - bls _080C6C98 - movs r0, 0xC - b _080C6CA6 -_080C6C98: - cmp r0, 0xB - bls _080C6CA0 - movs r0, 0xF - b _080C6CA6 -_080C6CA0: - movs r0, 0x6 - b _080C6CA6 -_080C6CA4: - movs r0, 0x3 -_080C6CA6: - pop {r1} - bx r1 - thumb_func_end sub_80C6BDC - - thumb_func_start sub_80C6CAC -sub_80C6CAC: @ 80C6CAC - push {lr} - ldrh r1, [r0] - movs r3, 0x1F - movs r0, 0x1F - ands r0, r1 - lsls r1, 16 - lsrs r2, r1, 21 - ands r2, r3 - lsrs r1, 26 - ands r1, r3 - adds r0, r2 - adds r0, r1 - movs r1, 0x3 - bl __divsi3 - movs r1, 0x1E - ands r0, r1 - lsls r0, 16 - cmp r0, 0 - beq _080C6CD8 - lsrs r0, 17 - b _080C6CDA -_080C6CD8: - movs r0, 0x1 -_080C6CDA: - pop {r1} - bx r1 - thumb_func_end sub_80C6CAC - - thumb_func_start sub_80C6CE0 -sub_80C6CE0: @ 80C6CE0 - push {lr} - ldrh r1, [r0] - movs r3, 0x1F - movs r0, 0x1F - ands r0, r1 - lsls r1, 16 - lsrs r2, r1, 21 - ands r2, r3 - lsrs r1, 26 - ands r1, r3 - adds r0, r2 - adds r0, r1 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - movs r1, 0x80 - lsls r1, 9 - adds r0, r1 - lsrs r0, 16 - pop {r1} - bx r1 - thumb_func_end sub_80C6CE0 - - .align 2, 0 @ Don't pad with nop. diff --git a/common_syms/image_processing_effects.txt b/common_syms/image_processing_effects.txt new file mode 100644 index 000000000..134f7e88b --- /dev/null +++ b/common_syms/image_processing_effects.txt @@ -0,0 +1,10 @@ +gCanvasColumnStart +gCanvasPixels +gCanvasRowEnd +gCanvasHeight +gCanvasColumnEnd +gCanvasRowStart +gCanvasMonPersonality +gCanvasWidth +gCanvasPalette +gCanvasPaletteStart diff --git a/data/image_processing_effects.s b/data/image_processing_effects.s index df83b2d54..d5585410c 100644 --- a/data/image_processing_effects.s +++ b/data/image_processing_effects.s @@ -1,7 +1,7 @@ .section .rodata .align 2, 0 -gUnknown_83F3024:: @ 83F3024 +gPointillismPoints:: @ 83F3024 .byte 0x00, 0x1d, 0x1c .byte 0x0e, 0x1e, 0x1b .byte 0x00, 0x01, 0x32 diff --git a/include/image_processing_effects.h b/include/image_processing_effects.h new file mode 100644 index 000000000..7f726707c --- /dev/null +++ b/include/image_processing_effects.h @@ -0,0 +1,53 @@ +#ifndef GUARD_IMAGE_PROCESSING_EFFECTS_H +#define GUARD_IMAGE_PROCESSING_EFFECTS_H + +enum +{ + IMAGE_EFFECT_POINTILLISM = 2, + IMAGE_EFFECT_GRAYSCALE_LIGHT = 6, + IMAGE_EFFECT_BLUR = 8, + IMAGE_EFFECT_OUTLINE_COLORED = 9, + IMAGE_EFFECT_INVERT_BLACK_WHITE = 10, + IMAGE_EFFECT_THICK_BLACK_WHITE = 11, + IMAGE_EFFECT_SHIMMER = 13, + IMAGE_EFFECT_OUTLINE = 30, + IMAGE_EFFECT_INVERT = 31, + IMAGE_EFFECT_BLUR_RIGHT = 32, + IMAGE_EFFECT_BLUR_DOWN = 33, + IMAGE_EFFECT_CHARCOAL = 36, +}; + +enum +{ + QUANTIZE_EFFECT_STANDARD, + QUANTIZE_EFFECT_STANDARD_LIMITED_COLORS, + QUANTIZE_EFFECT_PRIMARY_COLORS, + QUANTIZE_EFFECT_GRAYSCALE, + QUANTIZE_EFFECT_GRAYSCALE_SMALL, + QUANTIZE_EFFECT_BLACK_WHITE, +}; + +struct ImageProcessingContext +{ + u8 effect; + void *canvasPixels; + u16 *canvasPalette; + u8 fillerC[0x4]; + void *dest; + u16 quantizeEffect; + u16 var_16; + u8 paletteStart; + u8 columnStart; + u8 rowStart; + u8 columnEnd; + u8 rowEnd; + u8 canvasWidth; + u8 canvasHeight; + u8 personality; +}; + +void ApplyImageProcessingEffects(struct ImageProcessingContext *); +void ApplyImageProcessingQuantization(struct ImageProcessingContext *); +void ConvertImageProcessingToGBA(struct ImageProcessingContext *); + +#endif diff --git a/ld_script.txt b/ld_script.txt index 838aebcac..0b12b1187 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -181,7 +181,7 @@ SECTIONS { asm/script_pokemon_util_80BF8FC.o(.text); src/heal_location.o(.text); src/region_map.o(.text); - asm/image_processing_effects.o(.text); + src/image_processing_effects.o(.text); src/battle_ai_script_commands.o(.text); src/fldeff_rocksmash.o(.text); src/fldeff_dig.o(.text); diff --git a/src/image_processing_effects.c b/src/image_processing_effects.c new file mode 100644 index 000000000..c9ca4b16b --- /dev/null +++ b/src/image_processing_effects.c @@ -0,0 +1,1224 @@ +#include "global.h" +#include "image_processing_effects.h" + +// IWRAM common +u8 gCanvasColumnStart; +u16 (*gCanvasPixels)[][32]; +u8 gCanvasRowEnd; +u8 gCanvasHeight; +u8 gCanvasColumnEnd; +u8 gCanvasRowStart; +u8 gCanvasMonPersonality; +u8 gCanvasWidth; +u16 *gCanvasPalette; +u16 gCanvasPaletteStart; + +static void ApplyImageEffect_Pointillism(void); +static void ApplyImageEffect_Blur(void); +static void ApplyImageEffect_BlackOutline(void); +static void ApplyImageEffect_Invert(void); +static void ApplyImageEffect_BlackAndWhite(void); +static void ApplyImageEffect_BlurRight(void); +static void ApplyImageEffect_BlurDown(void); +static void ApplyImageEffect_Shimmer(void); +static void ApplyImageEffect_Grayscale(void); +static void ApplyImageEffect_PersonalityColor(u8); +static void ApplyImageEffect_RedChannelGrayscale(u8); +static void ApplyImageEffect_RedChannelGrayscaleHighlight(u8); +static void AddPointillismPoints(u16); +static u16 ConvertColorToGrayscale(u16*); +static u16 QuantizePixel_Blur(u16*, u16*, u16*); +static u16 QuantizePixel_PersonalityColor(u16*, u8); +static u16 QuantizePixel_BlackAndWhite(u16*); +static u16 QuantizePixel_BlackOutline(u16*, u16*); +static u16 QuantizePixel_Invert(u16*); +static u16 QuantizePixel_BlurHard(u16*, u16*, u16*); +static u16 QuantizePixel_MotionBlur(u16*, u16*); +static u16 GetColorFromPersonality(u8); +static void QuantizePalette_Standard(bool8); +static void SetPresetPalette_PrimaryColors(void); +static void QuantizePalette_PrimaryColors(void); +static void SetPresetPalette_Grayscale(void); +static void QuantizePalette_Grayscale(void); +static void SetPresetPalette_GrayscaleSmall(void); +static void QuantizePalette_GrayscaleSmall(void); +static void SetPresetPalette_BlackAndWhite(void); +static void QuantizePalette_BlackAndWhite(void); +static u16 QuantizePixel_Standard(u16*); +static u16 QuantizePixel_GrayscaleSmall(u16*); +static u16 QuantizePixel_Grayscale(u16*); +static u16 QuantizePixel_PrimaryColors(u16*); + +extern const u8 gPointillismPoints[][3]; + +void ApplyImageProcessingEffects(struct ImageProcessingContext *context) +{ + gCanvasPixels = context->canvasPixels; + gCanvasMonPersonality = context->personality; + gCanvasColumnStart = context->columnStart; + gCanvasRowStart = context->rowStart; + gCanvasColumnEnd = context->columnEnd; + gCanvasRowEnd = context->rowEnd; + gCanvasWidth = context->canvasWidth; + gCanvasHeight = context->canvasHeight; + + switch (context->effect) + { + case IMAGE_EFFECT_POINTILLISM: + ApplyImageEffect_Pointillism(); + break; + case IMAGE_EFFECT_BLUR: + ApplyImageEffect_Blur(); + break; + case IMAGE_EFFECT_OUTLINE_COLORED: + ApplyImageEffect_BlackOutline(); + ApplyImageEffect_PersonalityColor(gCanvasMonPersonality); + break; + case IMAGE_EFFECT_INVERT_BLACK_WHITE: + ApplyImageEffect_BlackOutline(); + ApplyImageEffect_Invert(); + ApplyImageEffect_BlackAndWhite(); + case IMAGE_EFFECT_INVERT: + ApplyImageEffect_Invert(); + break; + case IMAGE_EFFECT_THICK_BLACK_WHITE: + ApplyImageEffect_BlackOutline(); + ApplyImageEffect_BlurRight(); + ApplyImageEffect_BlurRight(); + ApplyImageEffect_BlurDown(); + ApplyImageEffect_BlackAndWhite(); + break; + case IMAGE_EFFECT_SHIMMER: + ApplyImageEffect_Shimmer(); + break; + case IMAGE_EFFECT_OUTLINE: + ApplyImageEffect_BlackOutline(); + break; + case IMAGE_EFFECT_BLUR_RIGHT: + ApplyImageEffect_BlurRight(); + break; + case IMAGE_EFFECT_BLUR_DOWN: + ApplyImageEffect_BlurDown(); + break; + case IMAGE_EFFECT_GRAYSCALE_LIGHT: + ApplyImageEffect_Grayscale(); + ApplyImageEffect_RedChannelGrayscale(3); + break; + case IMAGE_EFFECT_CHARCOAL: + ApplyImageEffect_BlackOutline(); + ApplyImageEffect_BlurRight(); + ApplyImageEffect_BlurDown(); + ApplyImageEffect_BlackAndWhite(); + ApplyImageEffect_Blur(); + ApplyImageEffect_Blur(); + ApplyImageEffect_RedChannelGrayscale(2); + ApplyImageEffect_RedChannelGrayscaleHighlight(4); + break; + } +} + +static void ApplyImageEffect_RedChannelGrayscale(u8 delta) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (!(0x8000 & *pixel)) + { + // Gets the grayscale value, based on the pixel's red channel. + // Also adds a delta to skew lighter or darker. + u8 grayValue = (31 & *pixel); + grayValue += delta; + if (grayValue > 31) + grayValue = 31; + + *pixel = RGB2(grayValue, grayValue, grayValue); + } + } + } +} + +static void ApplyImageEffect_RedChannelGrayscaleHighlight(u8 highlight) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (!(0x8000 & *pixel)) + { + u8 grayValue = (31 & *pixel); + if (grayValue > 31 - highlight) + grayValue = 31 - (highlight >> 1); + + *pixel = RGB2(grayValue, grayValue, grayValue); + } + } + } +} + +static void ApplyImageEffect_Pointillism(void) +{ + u32 i; + for (i = 0; i < 3200; i++) + AddPointillismPoints(i); +} + +static void ApplyImageEffect_Grayscale(void) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (!(0x8000 & *pixel)) + *pixel = ConvertColorToGrayscale(pixel); + } + } +} + +static void ApplyImageEffect_Blur(void) +{ + u8 i, j; + + for (i = 0; i < gCanvasColumnEnd; i++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][gCanvasRowStart * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart + i]; + u16 prevPixel = *pixel; + + j = 1; + pixel += gCanvasWidth; + while (j < gCanvasRowEnd - 1) + { + if (!(0x8000 & *pixel)) + { + *pixel = QuantizePixel_Blur(&prevPixel, pixel, pixel + gCanvasWidth); + prevPixel = *pixel; + } + + j++; + pixel += gCanvasWidth; + } + } +} + +static void ApplyImageEffect_PersonalityColor(u8 personality) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (!(0x8000 & *pixel)) + *pixel = QuantizePixel_PersonalityColor(pixel, personality); + } + } +} + +static void ApplyImageEffect_BlackAndWhite(void) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (!(0x8000 & *pixel)) + *pixel = QuantizePixel_BlackAndWhite(pixel); + } + } +} + +static void ApplyImageEffect_BlackOutline(void) +{ + u8 i, j; + u16 *pixel; + + // Handle top row of pixels first. + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + pixel = &pixelRow[gCanvasColumnStart]; + *pixel = QuantizePixel_BlackOutline(pixel, pixel + 1); + for (i = 1, pixel++; i < gCanvasColumnEnd - 1; i++, pixel++) + { + *pixel = QuantizePixel_BlackOutline(pixel, pixel + 1); + *pixel = QuantizePixel_BlackOutline(pixel, pixel - 1); + } + + *pixel = QuantizePixel_BlackOutline(pixel, pixel - 1); + } + + // Handle each column from left to right. + for (i = 0; i < gCanvasColumnEnd; i++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][gCanvasRowStart * gCanvasWidth]; + pixel = &pixelRow[gCanvasColumnStart + i]; + *pixel = QuantizePixel_BlackOutline(pixel, pixel + gCanvasWidth); + for (j = 1, pixel += gCanvasWidth; j < gCanvasRowEnd - 1; j++, pixel += gCanvasWidth) + { + *pixel = QuantizePixel_BlackOutline(pixel, pixel + gCanvasWidth); + *pixel = QuantizePixel_BlackOutline(pixel, pixel - gCanvasWidth); + } + + *pixel = QuantizePixel_BlackOutline(pixel, pixel - gCanvasWidth); + } +} + +static void ApplyImageEffect_Invert(void) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (!(0x8000 & *pixel)) + *pixel = QuantizePixel_Invert(pixel); + } + } +} + +static void ApplyImageEffect_Shimmer(void) +{ + u8 i, j; + u16 *pixel; + u16 prevPixel; + + // First, invert all of the colors. + pixel = (*gCanvasPixels)[0]; + for (i = 0; i < 64; i++) + { + for (j = 0; j < 64; j++, pixel++) + { + if (!(0x8000 & *pixel)) + *pixel = QuantizePixel_Invert(pixel); + } + } + + // Blur the pixels twice. + for (j = 0; j < 64; j++) + { + pixel = &(*gCanvasPixels)[0][j]; + prevPixel = *pixel; + *pixel = 0x8000; + for (i = 1, pixel += 64; i < 63; i++, pixel += 64) + { + if (!(0x8000 & *pixel)) + { + *pixel = QuantizePixel_BlurHard(&prevPixel, pixel, pixel + 64); + prevPixel = *pixel; + } + } + + *pixel = 0x8000; + pixel = &(*gCanvasPixels)[0][j]; + prevPixel = *pixel; + *pixel = 0x8000; + for (i = 1, pixel += 64; i < 63; i++, pixel += 64) + { + if (!(0x8000 & *pixel)) + { + *pixel = QuantizePixel_BlurHard(&prevPixel, pixel, pixel + 64); + prevPixel = *pixel; + } + } + + *pixel = 0x8000; + } + + // Finally, invert colors back to the original color space. + // The above blur causes the outline areas to darken, which makes + // this inversion give the effect of light outlines. + pixel = (*gCanvasPixels)[0]; + for (i = 0; i < 64; i++) + { + for (j = 0; j < 64; j++, pixel++) + { + if (!(0x8000 & *pixel)) + *pixel = QuantizePixel_Invert(pixel); + } + } +} + +static void ApplyImageEffect_BlurRight(void) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + u16 prevPixel = *pixel; + for (i = 1, pixel++; i < gCanvasColumnEnd - 1; i++, pixel++) + { + if (!(0x8000 & *pixel)) + { + *pixel = QuantizePixel_MotionBlur(&prevPixel, pixel); + prevPixel = *pixel; + } + } + } +} + +static void ApplyImageEffect_BlurDown(void) +{ + u8 i, j; + + for (i = 0; i < gCanvasColumnEnd; i++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][gCanvasRowStart * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart + i]; + u16 prevPixel = *pixel; + for (j = 1, pixel += gCanvasWidth; j < gCanvasRowEnd - 1; j++, pixel += gCanvasWidth) + { + if (!(0x8000 & *pixel)) + { + *pixel = QuantizePixel_MotionBlur(&prevPixel, pixel); + prevPixel = *pixel; + } + } + } +} + +struct PointillismPoint +{ + u8 column; + u8 row; + u16 delta; +}; + +static void AddPointillismPoints(u16 arg0) +{ + u8 i; + bool8 offsetDownLeft; + u8 colorType; + struct PointillismPoint points[6]; + + points[0].column = gPointillismPoints[arg0][0]; + points[0].row = gPointillismPoints[arg0][1]; + points[0].delta = (gPointillismPoints[arg0][2] >> 3) & 7; + + colorType = (gPointillismPoints[arg0][2] >> 1) & 3; + offsetDownLeft = gPointillismPoints[arg0][2] & 1; + for (i = 1; i < points[0].delta; i++) + { + if (!offsetDownLeft) + { + points[i].column = points[0].column - i; + points[i].row = points[0].row + i; + } + else + { + points[i].column = points[0].column + 1; + points[i].row = points[0].row - 1; + } + + if (points[i].column > 63 || points[i].row > 63) + { + points[0].delta = i - 1; + break; + } + + points[i].delta = points[0].delta - i; + } + + for (i = 0; i < points[0].delta; i++) + { + u16 *pixel = &(*gCanvasPixels)[points[i].row * 2][points[i].column]; + + if (!(0x8000 & *pixel)) + { + u16 red = (*pixel) & 0x1F; + u16 green = (*pixel >> 5) & 0x1F; + u16 blue = (*pixel >> 10) & 0x1F; + + switch (colorType) + { + case 0: + case 1: + switch (((gPointillismPoints[arg0][2] >> 3) & 7) % 3) + { + case 0: + if (red >= points[i].delta) + red -= points[i].delta; + else + red = 0; + break; + case 1: + if (green >= points[i].delta) + green -= points[i].delta; + else + green = 0; + break; + case 2: + if (blue >= points[i].delta) + blue -= points[i].delta; + else + blue = 0; + break; + } + break; + case 2: + case 3: + red += points[i].delta; + green += points[i].delta; + blue += points[i].delta; + if (red > 31) + red = 31; + if (green > 31) + green = 31; + if (blue > 31) + blue = 31; + break; + } + + *pixel = RGB2(red, green, blue); + } + } +} + +static u16 ConvertColorToGrayscale(u16 *color) +{ + u16 red = *color & 0x1F; + u16 green = (*color >> 5) & 0x1F; + u16 blue = (*color >> 10) & 0x1F; + + u16 gray = (red + green + blue) / 3; + return RGB2(gray, gray, gray); +} + +// The dark colors are the colored edges of the Cool painting effect. +// Everything else is white. +static u16 QuantizePixel_PersonalityColor(u16 *color, u8 personality) +{ + u16 red = *color & 0x1F; + u16 green = (*color >> 5) & 0x1F; + u16 blue = (*color >> 10) & 0x1F; + + if (red < 17 && green < 17 && blue < 17) + return GetColorFromPersonality(personality); + else + return RGB_WHITE; +} + +// Based on the given value, which comes from the first 8 bits of +// the mon's personality value, return a color. +static u16 GetColorFromPersonality(u8 personality) +{ + u16 red = 0; + u16 green = 0; + u16 blue = 0; + u8 strength = (personality / 6) % 3; + u8 colorType = personality % 6; + + switch (colorType) + { + case 0: + // Teal color + green = 21 - strength; + blue = green; + red = 0; + break; + case 1: + // Yellow color + blue = 0; + red = 21 - strength; + green = red; + break; + case 2: + // Purple color + blue = 21 - strength; + green = 0; + red = blue; + break; + case 3: + // Red color + blue = 0; + green = 0; + red = 23 - strength; + break; + case 4: + // Blue color + blue = 23 - strength; + green = 0; + red = 0; + break; + case 5: + // Green color + blue = 0; + green = 23 - strength; + red = 0; + break; + } + + return RGB2(red, green, blue); +} + +static u16 QuantizePixel_BlackAndWhite(u16 *color) +{ + u16 red = *color & 0x1F; + u16 green = (*color >> 5) & 0x1F; + u16 blue = (*color >> 10) & 0x1F; + + if (red < 17 && green < 17 && blue < 17) + return RGB_BLACK; + else + return RGB_WHITE; +} + +static u16 QuantizePixel_BlackOutline(u16 *pixelA, u16 *pixelB) +{ + if (*pixelA != RGB_BLACK) + { + if (*pixelA & 0x8000) + return 0x8000; + if (*pixelB & 0x8000) + return RGB_BLACK; + + return *pixelA; + } + + return RGB_BLACK; +} + +static u16 QuantizePixel_Invert(u16 *color) +{ + u16 red = *color & 0x1F; + u16 green = (*color >> 5) & 0x1F; + u16 blue = (*color >> 10) & 0x1F; + + red = 31 - red; + green = 31 - green; + blue = 31 - blue; + + return RGB2(red, green, blue); +} + +static u16 QuantizePixel_MotionBlur(u16 *prevPixel, u16 *curPixel) +{ + u16 pixelChannels[2][3]; + u16 diffs[3]; + u8 i; + u16 largestDiff; + u16 red, green, blue; + + if (*prevPixel == *curPixel) + return *curPixel; + + pixelChannels[0][0] = (*prevPixel >> 0) & 0x1F; + pixelChannels[0][1] = (*prevPixel >> 5) & 0x1F; + pixelChannels[0][2] = (*prevPixel >> 10) & 0x1F; + pixelChannels[1][0] = (*curPixel >> 0) & 0x1F; + pixelChannels[1][1] = (*curPixel >> 5) & 0x1F; + pixelChannels[1][2] = (*curPixel >> 10) & 0x1F; + + // Don't blur light colors. + if (pixelChannels[0][0] > 25 && pixelChannels[0][1] > 25 && pixelChannels[0][2] > 25) + return *curPixel; + if (pixelChannels[1][0] > 25 && pixelChannels[1][1] > 25 && pixelChannels[1][2] > 25) + return *curPixel; + + for (i = 0; i < 3; i++) + { + if (pixelChannels[0][i] > pixelChannels[1][i]) + diffs[i] = pixelChannels[0][i] - pixelChannels[1][i]; + else + diffs[i] = pixelChannels[1][i] - pixelChannels[0][i]; + } + + // Find the largest diff of any of the color channels. + if (diffs[0] >= diffs[1]) + { + if (diffs[0] >= diffs[2]) + largestDiff = diffs[0]; + else if (diffs[1] >= diffs[2]) + largestDiff = diffs[1]; + else + largestDiff = diffs[2]; + } + else + { + if (diffs[1] >= diffs[2]) + largestDiff = diffs[1]; + else if (diffs[2] >= diffs[0]) + largestDiff = diffs[2]; + else + largestDiff = diffs[0]; + } + + red = (pixelChannels[1][0] * (31 - largestDiff / 2)) / 31; + green = (pixelChannels[1][1] * (31 - largestDiff / 2)) / 31; + blue = (pixelChannels[1][2] * (31 - largestDiff / 2)) / 31; + return RGB2(red, green, blue); +} + +static u16 QuantizePixel_Blur(u16 *prevPixel, u16 *curPixel, u16 *nextPixel) +{ + u16 red, green, blue; + u16 prevAvg, curAvg, nextAvg; + u16 prevDiff, nextDiff; + u32 diff; + u16 factor; + + if (*prevPixel == *curPixel && *nextPixel == *curPixel) + return *curPixel; + + red = (*curPixel >> 0) & 0x1F; + green = (*curPixel >> 5) & 0x1F; + blue = (*curPixel >> 10) & 0x1F; + + prevAvg = (((*prevPixel >> 0) & 0x1F) + ((*prevPixel >> 5) & 0x1F) + ((*prevPixel >> 10) & 0x1F)) / 3; + curAvg = (((*curPixel >> 0) & 0x1F) + ((*curPixel >> 5) & 0x1F) + ((*curPixel >> 10) & 0x1F)) / 3; + nextAvg = (((*nextPixel >> 0) & 0x1F) + ((*nextPixel >> 5) & 0x1F) + ((*nextPixel >> 10) & 0x1F)) / 3; + + if (prevAvg == curAvg && nextAvg == curAvg) + return *curPixel; + + if (prevAvg > curAvg) + prevDiff = prevAvg - curAvg; + else + prevDiff = curAvg - prevAvg; + + if (nextAvg > curAvg) + nextDiff = nextAvg - curAvg; + else + nextDiff = curAvg - nextAvg; + + if (prevDiff >= nextDiff) + diff = prevDiff; + else + diff = nextDiff; + + factor = 31 - diff / 2; + red = (red * factor) / 31; + green = (green * factor) / 31; + blue = (blue * factor) / 31; + return RGB2(red, green, blue); +} + +static u16 QuantizePixel_BlurHard(u16 *prevPixel, u16 *curPixel, u16 *nextPixel) +{ + u16 red, green, blue; + u16 prevAvg, curAvg, nextAvg; + u16 prevDiff, nextDiff; + u32 diff; + u16 factor; + + if (*prevPixel == *curPixel && *nextPixel == *curPixel) + return *curPixel; + + red = (*curPixel >> 0) & 0x1F; + green = (*curPixel >> 5) & 0x1F; + blue = (*curPixel >> 10) & 0x1F; + + prevAvg = (((*prevPixel >> 0) & 0x1F) + ((*prevPixel >> 5) & 0x1F) + ((*prevPixel >> 10) & 0x1F)) / 3; + curAvg = (((*curPixel >> 0) & 0x1F) + ((*curPixel >> 5) & 0x1F) + ((*curPixel >> 10) & 0x1F)) / 3; + nextAvg = (((*nextPixel >> 0) & 0x1F) + ((*nextPixel >> 5) & 0x1F) + ((*nextPixel >> 10) & 0x1F)) / 3; + + if (prevAvg == curAvg && nextAvg == curAvg) + return *curPixel; + + if (prevAvg > curAvg) + prevDiff = prevAvg - curAvg; + else + prevDiff = curAvg - prevAvg; + + if (nextAvg > curAvg) + nextDiff = nextAvg - curAvg; + else + nextDiff = curAvg - nextAvg; + + if (prevDiff >= nextDiff) + diff = prevDiff; + else + diff = nextDiff; + + factor = 31 - diff; + red = (red * factor) / 31; + green = (green * factor) / 31; + blue = (blue * factor) / 31; + return RGB2(red, green, blue); +} + +void ConvertImageProcessingToGBA(struct ImageProcessingContext *context) +{ + u16 i, j, k; + u16 *src, *dest, *src_, *dest_; + u16 width, height; + + width = context->canvasWidth >> 3; + height = context->canvasHeight >> 3; + src_ = context->canvasPixels; + dest_ = context->dest; + + if (context->var_16 == 2) + { + for (i = 0; i < height; i++) + { + for (j = 0; j < width; j++) + { + for (k = 0; k < 8; k++) + { + dest = dest_ + ((i * width + j) << 5) + (k << 2); + src = src_ + ((((i << 3) + k) << 3) * width) + (j << 3); + + dest[0] = src[0] | (src[1] << 8); + dest[1] = src[2] | (src[3] << 8); + dest[2] = src[4] | (src[5] << 8); + dest[3] = src[6] | (src[7] << 8); + } + } + } + } + else + { + for (i = 0; i < height; i++) + { + for (j = 0; j < width; j++) + { + for (k = 0; k < 8; k++) + { + dest = dest_ + ((i * width + j) << 4) + (k << 1); + src = src_ + ((((i << 3) + k) << 3) * width) + (j << 3); + + dest[0] = src[0] | (src[1] << 4) | (src[2] << 8) | (src[3] << 0xC); + dest[1] = src[4] | (src[5] << 4) | (src[6] << 8) | (src[7] << 0xC); + } + } + } + } +} + +void ApplyImageProcessingQuantization(struct ImageProcessingContext *context) +{ + gCanvasPaletteStart = context->paletteStart * 16; + gCanvasPalette = &context->canvasPalette[gCanvasPaletteStart]; + gCanvasPixels = context->canvasPixels; + gCanvasColumnStart = context->columnStart; + gCanvasRowStart = context->rowStart; + gCanvasColumnEnd = context->columnEnd; + gCanvasRowEnd = context->rowEnd; + gCanvasWidth = context->canvasWidth; + gCanvasHeight = context->canvasHeight; + + switch (context->quantizeEffect) + { + case QUANTIZE_EFFECT_STANDARD: + QuantizePalette_Standard(FALSE); + break; + case QUANTIZE_EFFECT_STANDARD_LIMITED_COLORS: + QuantizePalette_Standard(TRUE); + break; + case QUANTIZE_EFFECT_PRIMARY_COLORS: + SetPresetPalette_PrimaryColors(); + QuantizePalette_PrimaryColors(); + break; + case QUANTIZE_EFFECT_GRAYSCALE: + SetPresetPalette_Grayscale(); + QuantizePalette_Grayscale(); + break; + case QUANTIZE_EFFECT_GRAYSCALE_SMALL: + SetPresetPalette_GrayscaleSmall(); + QuantizePalette_GrayscaleSmall(); + break; + case QUANTIZE_EFFECT_BLACK_WHITE: + SetPresetPalette_BlackAndWhite(); + QuantizePalette_BlackAndWhite(); + break; + } +} + +static void SetPresetPalette_PrimaryColors(void) +{ + gCanvasPalette[0] = RGB2(0, 0, 0); + gCanvasPalette[1] = RGB2(6, 6, 6); + gCanvasPalette[2] = RGB2(29, 29, 29); + gCanvasPalette[3] = RGB2(11, 11, 11); + gCanvasPalette[4] = RGB2(29, 6, 6); + gCanvasPalette[5] = RGB2(6, 29, 6); + gCanvasPalette[6] = RGB2(6, 6, 29); + gCanvasPalette[7] = RGB2(29, 29, 6); + gCanvasPalette[8] = RGB2(29, 6, 29); + gCanvasPalette[9] = RGB2(6, 29, 29); + gCanvasPalette[10] = RGB2(29, 11, 6); + gCanvasPalette[11] = RGB2(11, 29, 6); + gCanvasPalette[12] = RGB2(6, 11, 29); + gCanvasPalette[13] = RGB2(29, 6, 11); + gCanvasPalette[14] = RGB2(6, 29, 11); + gCanvasPalette[15] = RGB2(11, 6, 29); +} + +static void SetPresetPalette_BlackAndWhite(void) +{ + gCanvasPalette[0] = RGB2(0, 0, 0); + gCanvasPalette[1] = RGB2(0, 0, 0); + gCanvasPalette[2] = RGB2(31, 31, 31); +} + +static void SetPresetPalette_GrayscaleSmall(void) +{ + u8 i; + + gCanvasPalette[0] = RGB2(0, 0, 0); + gCanvasPalette[1] = RGB2(0, 0, 0); + for (i = 0; i < 14; i++) + gCanvasPalette[i + 2] = RGB2(2 * (i + 2), 2 * (i + 2), 2 * (i + 2)); +} + +static void SetPresetPalette_Grayscale(void) +{ + u8 i; + + gCanvasPalette[0] = RGB2(0, 0, 0); + for (i = 0; i < 32; i++) + gCanvasPalette[i + 1] = RGB2(i, i, i); +} + +static void QuantizePalette_Standard(bool8 useLimitedPalette) +{ + u8 i, j; + u16 maxIndex; + + maxIndex = 0xDF; + if (!useLimitedPalette) + maxIndex = 0xFF; + + for (i = 0; i < maxIndex; i++) + gCanvasPalette[i] = RGB_BLACK; + + gCanvasPalette[maxIndex] = RGB2(15, 15, 15); + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (*pixel & 0x8000) + { + *pixel = gCanvasPaletteStart; + } + else + { + u16 quantizedColor = QuantizePixel_Standard(pixel); + u8 curIndex = 1; + if (curIndex < maxIndex) + { + if (gCanvasPalette[curIndex] == RGB_BLACK) + { + // The quantized color does not match any existing color in the + // palette, so we add it to the palette. + // This if block seems pointless because the below while loop handles + // this same logic. + gCanvasPalette[curIndex] = quantizedColor; + *pixel = gCanvasPaletteStart + curIndex; + } + else + { + while (curIndex < maxIndex) + { + if (gCanvasPalette[curIndex] == RGB_BLACK) + { + // The quantized color does not match any existing color in the + // palette, so we add it to the palette. + gCanvasPalette[curIndex] = quantizedColor; + *pixel = gCanvasPaletteStart + curIndex; + break; + } + + if (gCanvasPalette[curIndex] == quantizedColor) + { + // The quantized color matches this existing color in the + // palette, so we use this existing color for the pixel. + *pixel = gCanvasPaletteStart + curIndex; + break; + } + + curIndex++; + } + } + } + + if (curIndex == maxIndex) + { + // The entire palette's colors are already in use, which means + // the base image has too many colors to handle. This error is handled + // by marking such pixels as gray color. + curIndex = maxIndex; + *pixel = curIndex; + } + } + } + } +} + +static void QuantizePalette_BlackAndWhite(void) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (*pixel & 0x8000) + { + *pixel = gCanvasPaletteStart; + } + else + { + if (QuantizePixel_BlackAndWhite(pixel) == RGB_BLACK) + { + // Black is the first color in the quantized palette. + *pixel = gCanvasPaletteStart + 1; + } + else + { + // White is the second color in the quantized palette. + *pixel = gCanvasPaletteStart + 2; + } + } + } + } +} + +static void QuantizePalette_GrayscaleSmall(void) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (*pixel & 0x8000) + *pixel = gCanvasPaletteStart; + else + *pixel = QuantizePixel_GrayscaleSmall(pixel) + gCanvasPaletteStart; + } + } +} + +static void QuantizePalette_Grayscale(void) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (*pixel & 0x8000) + *pixel = gCanvasPaletteStart; + else + *pixel = QuantizePixel_Grayscale(pixel) + gCanvasPaletteStart; + } + } +} + +static void QuantizePalette_PrimaryColors(void) +{ + u8 i, j; + + for (j = 0; j < gCanvasRowEnd; j++) + { + u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; + u16 *pixel = &pixelRow[gCanvasColumnStart]; + for (i = 0; i < gCanvasColumnEnd; i++, pixel++) + { + if (*pixel & 0x8000) + *pixel = gCanvasPaletteStart; + else + *pixel = QuantizePixel_PrimaryColors(pixel) + gCanvasPaletteStart; + } + } +} + +// Quantizes the pixel's color channels to nearest multiple of 4, and clamps to [6, 30]. +static u16 QuantizePixel_Standard(u16 *pixel) +{ + u16 red = *pixel & 0x1F; + u16 green = (*pixel >> 5) & 0x1F; + u16 blue = (*pixel >> 10) & 0x1F; + + // Quantize color channels to muliples of 4, rounding up. + if (red & 3) + red = (red & 0x1C) + 4; + if (green & 3) + green = (green & 0x1C) + 4; + if (blue & 3) + blue = (blue & 0x1C) + 4; + + // Clamp channels to [6, 30]. + if (red < 6) + red = 6; + if (red > 30) + red = 30; + if (green < 6) + green = 6; + if (green > 30) + green = 30; + if (blue < 6) + blue = 6; + if (blue > 30) + blue = 30; + + return RGB2(red, green, blue); +} + +static u16 QuantizePixel_PrimaryColors(u16* color) +{ + u16 red = *color & 0x1F; + u16 green = (*color >> 5) & 0x1F; + u16 blue = (*color >> 10) & 0x1F; + + if (red < 12 && green < 11 && blue < 11) + return 1; + + if (red > 19 && green > 19 && blue > 19) + return 2; + + if (red > 19) + { + if (green > 19) + { + if (blue > 14) + return 2; + else + return 7; + } + else if (blue > 19) + { + if (green > 14) + return 2; + else + return 8; + } + } + + if (green > 19 && blue > 19) + { + if (red > 14) + return 2; + else + return 9; + } + + if (red > 19) + { + if (green > 11) + { + if (blue > 11) + { + if (green < blue) + return 8; + else + return 7; + } + else + { + return 10; + } + } + else if (blue > 11) + { + return 13; + } + else + { + return 4; + } + } + + if (green > 19) + { + if (red > 11) + { + if (blue > 11) + { + if (red < blue) + return 9; + else + return 7; + } + else + { + return 11; + } + } + else + { + if (blue > 11) + return 14; + else + return 5; + } + } + + if (blue > 19) + { + if (red > 11) + { + if (green > 11) + { + if (red < green) + return 9; + else + return 8; + } + } + else if (green > 11) + { + return 12; + } + + if (blue > 11) + return 15; + else + return 6; + } + + return 3; +} + +static u16 QuantizePixel_GrayscaleSmall(u16 *color) +{ + u16 red = *color & 0x1F; + u16 green = (*color >> 5) & 0x1F; + u16 blue = (*color >> 10) & 0x1F; + u16 average = ((red + green + blue) / 3) & 0x1E; + if (average == 0) + return 1; + else + return average / 2; +} + +static u16 QuantizePixel_Grayscale(u16 *color) +{ + u16 red = *color & 0x1F; + u16 green = (*color >> 5) & 0x1F; + u16 blue = (*color >> 10) & 0x1F; + u16 average = (red + green + blue) / 3; + return average + 1; +} diff --git a/sym_common.txt b/sym_common.txt index 17f0cd306..b41ec5ff2 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -61,37 +61,8 @@ gUnknown_3005078: @ 3005078 @ what is this? .space 0x20 - -gUnknown_3005330: @ 3005330 - .space 0x4 - -gUnknown_3005334: @ 3005334 - .space 0x4 - -gUnknown_3005338: @ 3005338 - .space 0x4 - -gUnknown_300533C: @ 300533C - .space 0x4 - -gUnknown_3005340: @ 3005340 - .space 0x4 - -gUnknown_3005344: @ 3005344 - .space 0x4 - -gUnknown_3005348: @ 3005348 - .space 0x4 - -gUnknown_300534C: @ 300534C - .space 0x4 - -gUnknown_3005350: @ 3005350 - .space 0x4 - -gUnknown_3005354: @ 3005354 - .space 0xC - + .align 2 + .include "image_processing_effects.o" .align 2 .include "field_specials.o" .align 2 -- cgit v1.2.3 From f257e2006afa37f5b2b96be93abc198363bc1c0a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 7 Jan 2020 20:51:12 -0500 Subject: Port region_map rodata to C --- data/region_map.s | 1224 ----------------------------------------------------- include/strings.h | 19 + ld_script.txt | 1 - src/region_map.c | 1056 ++++++++++++++++++++++++++++++++++++++++++--- 4 files changed, 1006 insertions(+), 1294 deletions(-) delete mode 100644 data/region_map.s diff --git a/data/region_map.s b/data/region_map.s deleted file mode 100644 index 14ea9c5f4..000000000 --- a/data/region_map.s +++ /dev/null @@ -1,1224 +0,0 @@ -#include "constants/maps.h" -#include "constants/species.h" -#include "constants/region_map.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnknown_83EF23C:: @ 83EF23C gbapal - .incbin "graphics/region_map/unk_83EF23C.gbapal" - -gUnknown_83EF25C:: @ 83EF25C gbapal - .incbin "graphics/region_map/unk_83EF25C.gbapal" - -gUnknown_83EF27C:: @ 83EF27C gbapal - .incbin "graphics/region_map/unk_83EF27C.gbapal" - -gUnknown_83EF29C:: @ 83EF29C gbapal - .incbin "graphics/region_map/unk_83EF29C.gbapal" - -gUnknown_83EF2BC:: @ 83EF2BC gbapal - .incbin "graphics/region_map/unk_83EF2BC.gbapal" - -gUnknown_83EF2DC:: @ 83EF2DC gbapal - .incbin "graphics/region_map/unk_83EF2DC.gbapal" - - .2byte 0x7c00, 0x7d80, 0x7fff, 0x7fff - -gUnknown_83EF384:: @ 83EF384 gbapal - .incbin "graphics/region_map/unk_83EF384.gbapal" - -gUnknown_83EF3A4:: @ 83EF3A4 gbapal - .incbin "graphics/region_map/unk_83EF3A4.gbapal" - -gUnknown_83EF3C4:: @ 83EF3C4 pal=gUnknown_83EF384 - .incbin "graphics/region_map/unk_83EF3C4.4bpp.lz" - -gUnknown_83EF450:: @ 83EF450 pal=gUnknown_83EF384 - .incbin "graphics/region_map/unk_83EF450.4bpp.lz" - -gUnknown_83EF4E0:: @ 83EF4E0 pal=gUnknown_83EF25C - .incbin "graphics/region_map/unk_83EF4E0.4bpp.lz" - -gUnknown_83EF524:: @ 83EF524 pal=gUnknown_83EF27C - .incbin "graphics/region_map/unk_83EF524.4bpp.lz" - -gUnknown_83EF59C:: @ 83EF59C pal=gUnknown_83EF29C - .incbin "graphics/region_map/unk_83EF59C.4bpp.lz" - -gUnknown_83EF61C:: @ 83EF61C - .incbin "graphics/region_map/unk_83EF61C.4bpp.lz" - -gUnknown_83F0330:: @ 83F0330 - .incbin "graphics/region_map/unk_83F0330.4bpp.lz" - -gUnknown_83F0580:: @ 83F0580 - .incbin "graphics/region_map/unk_83F0580.bin.lz" - -gUnknown_83F089C:: @ 83F089C - .incbin "graphics/region_map/unk_83F089C.bin.lz" - -gUnknown_83F0AFC:: @ 83F0AFC - .incbin "graphics/region_map/unk_83F0AFC.bin.lz" - -gUnknown_83F0C0C:: @ 83F0C0C - .incbin "graphics/region_map/unk_83F0C0C.bin.lz" - -gUnknown_83F0CF0:: @ 83F0CF0 - .incbin "graphics/region_map/unk_83F0CF0.bin.lz" - -gUnknown_83F0E0C:: @ 83F0E0C - .incbin "graphics/region_map/unk_83F0E0C.bin.lz" - -gUnknown_83F0F1C:: @ 83F0F1C - .incbin "graphics/region_map/unk_83F0F1C.bin.lz" - -gUnknown_83F1084:: @ 83F1084 - .incbin "graphics/region_map/unk_83F1084.bin.lz" - -gUnknown_83F1190:: @ 83F1190 - .incbin "graphics/region_map/unk_83F1190.bin.lz" - -gUnknown_83F12CC:: @ 83F12CC pal=gUnknown_83EF3A4 - .incbin "graphics/region_map/unk_83F12CC.4bpp.lz" - -gUnknown_83F13EC:: @ 83F13EC pal=gUnknown_83EF3A4 - .incbin "graphics/region_map/unk_83F13EC.4bpp.lz" - -gUnknown_83F1550:: @ 83F1550 pal=gUnknown_83EF3A4 - .incbin "graphics/region_map/unk_83F1550.4bpp.lz" - -gUnknown_83F1640:: @ 83F1640 pal=gUnknown_83EF3A4 - .incbin "graphics/region_map/unk_83F1640.4bpp.lz" - -gUnknown_83F1738:: @ 83F1738 pal=gUnknown_83EF3A4 - .incbin "graphics/region_map/unk_83F1738.4bpp.lz" - -gUnknown_83F1804:: @ 83F1804 pal=gUnknown_83EF3A4 - .incbin "graphics/region_map/unk_83F1804.4bpp.lz" - -gUnknown_83F18D8:: @ 83F18D8 pal=gUnknown_83EF2BC - .incbin "graphics/region_map/unk_83F18D8.4bpp.lz" - -gUnknown_83F1908:: @ 83F1908 pal=gUnknown_83EF2BC - .incbin "graphics/region_map/unk_83F1908.4bpp.lz" - -gUnknown_83F1978:: @ 83F1978 - .incbin "graphics/region_map/unk_83F1978.4bpp.lz" - -gUnknown_83F19A0:: @ 83F19A0 - .incbin "graphics/region_map/unk_83F19A0.bin.lz" - -gUnknown_83F1A50:: @ 83F1A50 - .4byte 0x000021e0 - @ { - @ .bg = 0, - @ .charBaseIndex = 0, - @ .mapBaseIndex = 30, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 2, - @ .baseTile = 0x0000 - @ } - .4byte 0x000030f5 - @ { - @ .bg = 1, - @ .charBaseIndex = 1, - @ .mapBaseIndex = 15, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 3, - @ .baseTile = 0x0000 - @ } - .4byte 0x0000117a - @ { - @ .bg = 2, - @ .charBaseIndex = 2, - @ .mapBaseIndex = 23, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 1, - @ .baseTile = 0x0000 - @ } - .4byte 0x000001ff - @ { - @ .bg = 3, - @ .charBaseIndex = 3, - @ .mapBaseIndex = 31, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 0, - @ .baseTile = 0x0000 - @ } - -gUnknown_83F1A60:: @ 83F1A60 - .byte 3, 3, 2, 15, 2, 12 - .2byte 0x0001 - @ { - @ .bg = 3, - @ .tilemapLeft = 3, - @ .tilemapTop = 2, - @ .width = 15, - @ .height = 2, - @ .paletteNum = 12, - @ .baseBlock = 0x0001 - @ } - .byte 3, 3, 4, 15, 2, 12 - .2byte 0x001f - @ { - @ .bg = 3, - @ .tilemapLeft = 3, - @ .tilemapTop = 4, - @ .width = 15, - @ .height = 2, - @ .paletteNum = 12, - @ .baseBlock = 0x001f - @ } - .byte 3, 3, 6, 25, 11, 12 - .2byte 0x003d - @ { - @ .bg = 3, - @ .tilemapLeft = 3, - @ .tilemapTop = 6, - @ .width = 25, - @ .height = 11, - @ .paletteNum = 12, - @ .baseBlock = 0x003d - @ } - .byte 3, 18, 0, 5, 2, 12 - .2byte 0x0150 - @ { - @ .bg = 3, - @ .tilemapLeft = 18, - @ .tilemapTop = 0, - @ .width = 5, - @ .height = 2, - @ .paletteNum = 12, - @ .baseBlock = 0x0150 - @ } - .byte 3, 24, 0, 5, 2, 12 - .2byte 0x015a - @ { - @ .bg = 3, - @ .tilemapLeft = 24, - @ .tilemapTop = 0, - @ .width = 5, - @ .height = 2, - @ .paletteNum = 12, - @ .baseBlock = 0x015a - @ } - .byte 255, 0, 0, 0, 0, 0 - .2byte 0x0000 - @ { - @ .bg = 255, - @ .tilemapLeft = 0, - @ .tilemapTop = 0, - @ .width = 0, - @ .height = 0, - @ .paletteNum = 0, - @ .baseBlock = 0x0000 - @ } - -gUnknown_83F1A90:: @ 83F1A90 - .byte 0, 1, 2 - - .align 2 -gUnknown_83F1A94:: @ 83F1A94 - .byte 0, 7, 2 - - .align 2 -gUnknown_83F1A98:: @ 83F1A98 - .byte 0, 10, 2 - - .align 2 -gUnknown_83F1A9C:: @ 83F1A9C - .4byte gUnknown_83F1A94 - .4byte gUnknown_83F1A98 - -sSeviiMapsecs:: @ 83F1AA4 - .byte MAPSEC_ONE_ISLAND - .byte MAPSEC_TWO_ISLAND - .byte MAPSEC_THREE_ISLAND - .byte MAPSEC_KINDLE_ROAD - .byte MAPSEC_TREASURE_BEACH - .byte MAPSEC_CAPE_BRINK - .byte MAPSEC_BOND_BRIDGE - .byte MAPSEC_THREE_ISLE_PORT - .byte MAPSEC_MT_EMBER - .byte MAPSEC_BERRY_FOREST - .byte MAPSEC_THREE_ISLE_PATH - .byte MAPSEC_EMBER_SPA - .byte MAPSEC_NONE - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .byte MAPSEC_FOUR_ISLAND - .byte MAPSEC_FIVE_ISLAND - .byte MAPSEC_SEVII_ISLE_6 - .byte MAPSEC_SEVII_ISLE_7 - .byte MAPSEC_SEVII_ISLE_8 - .byte MAPSEC_SEVII_ISLE_9 - .byte MAPSEC_RESORT_GORGEOUS - .byte MAPSEC_WATER_LABYRINTH - .byte MAPSEC_FIVE_ISLE_MEADOW - .byte MAPSEC_MEMORIAL_PILLAR - .byte MAPSEC_NAVEL_ROCK - .byte MAPSEC_ICEFALL_CAVE - .byte MAPSEC_ROCKET_WAREHOUSE - .byte MAPSEC_LOST_CAVE - .byte MAPSEC_NONE - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .byte MAPSEC_SEVEN_ISLAND - .byte MAPSEC_SIX_ISLAND - .byte MAPSEC_OUTCAST_ISLAND - .byte MAPSEC_GREEN_PATH - .byte MAPSEC_WATER_PATH - .byte MAPSEC_RUIN_VALLEY - .byte MAPSEC_TRAINER_TOWER - .byte MAPSEC_CANYON_ENTRANCE - .byte MAPSEC_SEVAULT_CANYON - .byte MAPSEC_TANOBY_RUINS - .byte MAPSEC_SEVII_ISLE_22 - .byte MAPSEC_SEVII_ISLE_23 - .byte MAPSEC_SEVII_ISLE_24 - .byte MAPSEC_TRAINER_TOWER_2 - .byte MAPSEC_DOTTED_HOLE - .byte MAPSEC_PATTERN_BUSH - .byte MAPSEC_ALTERING_CAVE - .byte MAPSEC_TANOBY_CHAMBERS - .byte MAPSEC_TANOBY_KEY - .byte MAPSEC_BIRTH_ISLAND - .byte MAPSEC_MONEAN_CHAMBER - .byte MAPSEC_LIPTOO_CHAMBER - .byte MAPSEC_WEEPTH_CHAMBER - .byte MAPSEC_DILFORD_CHAMBER - .byte MAPSEC_SCUFIB_CHAMBER - .byte MAPSEC_RIXY_CHAMBER - .byte MAPSEC_VIAPOIS_CHAMBER - .byte MAPSEC_NONE - .byte 0x00, 0x00 - - .align 2 -gUnknown_83F1B00:: @ 83F1B00 - .byte 1, 1, 1, 0 - .byte 0, 0, 0, 0 - .byte 0, 0, 0, 1 - -gUnknown_83F1B0C:: @ 83F1B0C - .2byte 0x0018, 0x0010, 0x0090, 0x0020 - .2byte 0x0018, 0x0020, 0x0090, 0x0030 - .2byte 0x0000, 0x0000, 0x0000, 0x0000 - -gUnknown_83F1B24:: @ 83F1B24 - .4byte 0x80000000, 0x00000000 - -gAnimCmd_83F1B2C:: - obj_image_anim_frame 0x00, 20 - obj_image_anim_frame 0x10, 20 - obj_image_anim_jump 0 - -gUnknown_83F1B38:: @ 83F1B38 - .4byte gAnimCmd_83F1B2C - -gUnknown_83F1B3C:: @ 83F1B3C - .2byte MAPSEC_VIRIDIAN_FOREST - .align 2 - .4byte gMapSecName_ViridianForest - .4byte gUnknown_8418ECB - .2byte MAPSEC_MT_MOON - .align 2 - .4byte gMapSecName_MtMoon - .4byte gUnknown_8418F3A - .2byte MAPSEC_DIGLETTS_CAVE - .align 2 - .4byte gMapSecName_DiglettsCave - .4byte gUnknown_8418FB8 - .2byte MAPSEC_KANTO_VICTORY_ROAD - .align 2 - .4byte gMapSecName_VictoryRoad - .4byte gUnknown_841901C - .2byte MAPSEC_POKEMON_MANSION - .align 2 - .4byte gMapSecName_PokemonMansion - .4byte gUnknown_841908E - .2byte MAPSEC_KANTO_SAFARI_ZONE - .align 2 - .4byte gMapSecName_SafariZone - .4byte gUnknown_8419103 - .2byte MAPSEC_ROCK_TUNNEL - .align 2 - .4byte gMapSecName_RockTunnel - .4byte gUnknown_841917D - .2byte MAPSEC_SEAFOAM_ISLANDS - .align 2 - .4byte gMapSecName_SeafoamIslands - .4byte gUnknown_8419201 - .2byte MAPSEC_POKEMON_TOWER - .align 2 - .4byte gMapSecName_PokemonTower - .4byte gUnknown_841926D - .2byte MAPSEC_CERULEAN_CAVE - .align 2 - .4byte gMapSecName_CeruleanCave - .4byte gUnknown_84192E2 - .2byte MAPSEC_POWER_PLANT - .align 2 - .4byte gMapSecName_PowerPlant - .4byte gUnknown_841935B - .2byte MAPSEC_MT_EMBER - .align 2 - .4byte gMapSecName_MtEmber - .4byte gUnknown_84193D5 - .2byte MAPSEC_BERRY_FOREST - .align 2 - .4byte gMapSecName_BerryForest - .4byte gUnknown_8419444 - .2byte MAPSEC_ICEFALL_CAVE - .align 2 - .4byte gMapSecName_IcefallCave - .4byte gUnknown_84194C9 - .2byte MAPSEC_LOST_CAVE - .align 2 - .4byte gMapSecName_LostCave - .4byte gUnknown_841953F - .2byte MAPSEC_TANOBY_CHAMBERS - .align 2 - .4byte gMapSecName_TanobyChambers - .4byte gUnknown_84195AC - .2byte MAPSEC_ALTERING_CAVE - .align 2 - .4byte gMapSecName_AlteringCave - .4byte gUnknown_8419629 - .2byte MAPSEC_PATTERN_BUSH - .align 2 - .4byte gMapSecName_PatternBush - .4byte gUnknown_841969D - .2byte MAPSEC_DOTTED_HOLE - .align 2 - .4byte gMapSecName_DottedHole - .4byte gUnknown_841971A - -gUnknown_83F1C20:: @ 83F1C20 - .4byte 0xc0008000, 0x00000000 - -gAnimCmd_83f1c28:: - obj_image_anim_frame 0, 0 - obj_image_anim_jump 0 - -gUnknown_83F1C30:: @ 83F1C30 - .4byte gAnimCmd_83f1c28 - -gUnknown_83F1C34:: @ 83F1C34 - .2byte 0x0018, 0x0010, 0x00d8, 0x00a0 - -gUnknown_83F1C3C:: @ 83F1C3C - .4byte 0x40000000, 0x00000800 - -gAnimCmd_83F1C44:: - obj_image_anim_frame 0, 20 - obj_image_anim_frame 4, 20 - obj_image_anim_jump 0 - -gUnknown_83F1C50:: @ 83F1C50 - .4byte gAnimCmd_83F1C44 - -gUnknown_83F1C54:: @ 83F1C54 - .4byte 0x40000000, 0x00000800 - -gAnimCmd_83F1C5C:: - obj_image_anim_frame 0, 5 - obj_image_anim_end - -gUnknown_83F1C64:: @ 83F1C64 - .4byte gAnimCmd_83F1C5C - -gUnknown_83F1C68:: @ 83F1C68 - .4byte 0x40000000, 0x00000800 - -gUnknown_83F1C70:: @ 83F1C70 - .4byte 0x00000000, 0x00000800 - -gAnimCmd_83F1C78:: - obj_image_anim_frame 0, 30 - obj_image_anim_frame 4, 60 - obj_image_anim_jump 0 - -gAnimCmd_83F1C84:: - obj_image_anim_frame 1, 20 - obj_image_anim_jump 0 - -gAnimCmd_83F1C8C:: - obj_image_anim_frame 0, 20 - obj_image_anim_jump 0 - -gUnknown_83F1C94:: @ 83F1C94 - .4byte gAnimCmd_83F1C78 - -gUnknown_83F1C98:: @ 83F1C98 - .4byte gAnimCmd_83F1C84 - .4byte gAnimCmd_83F1C8C - -gUnknown_83F1CA0:: @ 83F1CA0 - .2byte 0x2000 @ DISPCNT_WIN0_ON - .2byte 0x4000 @ DISPCNT_WIN1_ON - -gUnknown_83F1CA4:: @ 83F1CA4 - .byte OFFSET_REG_WIN0V - .byte OFFSET_REG_WIN0H - .byte OFFSET_REG_WIN1V - .byte OFFSET_REG_WIN1H - -gUnknown_83F1CA8:: @ 83F1CA8 - .byte 15, 1, 2 - - .align 2 -gUnknown_83F1CAC:: @ 83F1CAC - .4byte gMapSecName_PalletTown - .4byte gMapSecName_ViridianCity - .4byte gMapSecName_PewterCity - .4byte gMapSecName_CeruleanCity - .4byte gMapSecName_LavenderTown - .4byte gMapSecName_VermilionCity - .4byte gMapSecName_CeladonCity - .4byte gMapSecName_FuchsiaCity - .4byte gMapSecName_CinnabarIsland - .4byte gMapSecName_IndigoPlateau - .4byte gMapSecName_SaffronCity - .4byte gMapSecName_Route4 - .4byte gMapSecName_Route10 - .4byte gMapSecName_Route1 - .4byte gMapSecName_Route2 - .4byte gMapSecName_Route3 - .4byte gMapSecName_Route4_2 - .4byte gMapSecName_Route5 - .4byte gMapSecName_Route6 - .4byte gMapSecName_Route7 - .4byte gMapSecName_Route8 - .4byte gMapSecName_Route9 - .4byte gMapSecName_Route10_2 - .4byte gMapSecName_Route11 - .4byte gMapSecName_Route12 - .4byte gMapSecName_Route13 - .4byte gMapSecName_Route14 - .4byte gMapSecName_Route15 - .4byte gMapSecName_Route16 - .4byte gMapSecName_Route17 - .4byte gMapSecName_Route18 - .4byte gMapSecName_Route19 - .4byte gMapSecName_Route20 - .4byte gMapSecName_Route21 - .4byte gMapSecName_Route22 - .4byte gMapSecName_Route23 - .4byte gMapSecName_Route24 - .4byte gMapSecName_Route25 - .4byte gMapSecName_ViridianForest - .4byte gMapSecName_MtMoon - .4byte gMapSecName_SSAnne - .4byte gMapSecName_UndergroundPath - .4byte gMapSecName_UndergroundPath_2 - .4byte gMapSecName_DiglettsCave - .4byte gMapSecName_VictoryRoad - .4byte gMapSecName_RocketHideout - .4byte gMapSecName_SilphCo - .4byte gMapSecName_PokemonMansion - .4byte gMapSecName_SafariZone - .4byte gMapSecName_PokemonLeague - .4byte gMapSecName_RockTunnel - .4byte gMapSecName_SeafoamIslands - .4byte gMapSecName_PokemonTower - .4byte gMapSecName_CeruleanCave - .4byte gMapSecName_PowerPlant - .4byte gMapSecName_OneIsland - .4byte gMapSecName_TwoIsland - .4byte gMapSecName_ThreeIsland - .4byte gMapSecName_FourIsland - .4byte gMapSecName_FiveIsland - .4byte gMapSecName_SevenIsland - .4byte gMapSecName_SixIsland - .4byte gMapSecName_KindleRoad - .4byte gMapSecName_TreasureBeach - .4byte gMapSecName_CapeBrink - .4byte gMapSecName_BondBridge - .4byte gMapSecName_ThreeIslePort - .4byte gMapSecName_SeviiIsle6 - .4byte gMapSecName_SeviiIsle7 - .4byte gMapSecName_SeviiIsle8 - .4byte gMapSecName_SeviiIsle9 - .4byte gMapSecName_ResortGorgeous - .4byte gMapSecName_WaterLabyrinth - .4byte gMapSecName_FiveIsleMeadow - .4byte gMapSecName_MemorialPillar - .4byte gMapSecName_OutcastIsland - .4byte gMapSecName_GreenPath - .4byte gMapSecName_WaterPath - .4byte gMapSecName_RuinValley - .4byte gMapSecName_TrainerTower - .4byte gMapSecName_CanyonEntrance - .4byte gMapSecName_SevaultCanyon - .4byte gMapSecName_TanobyRuins - .4byte gMapSecName_SeviiIsle22 - .4byte gMapSecName_SeviiIsle23 - .4byte gMapSecName_SeviiIsle24 - .4byte gMapSecName_NavelRock - .4byte gMapSecName_MtEmber - .4byte gMapSecName_BerryForest - .4byte gMapSecName_IcefallCave - .4byte gMapSecName_RocketWarehouse - .4byte gMapSecName_TrainerTower_2 - .4byte gMapSecName_DottedHole - .4byte gMapSecName_LostCave - .4byte gMapSecName_PatternBush - .4byte gMapSecName_AlteringCave - .4byte gMapSecName_TanobyChambers - .4byte gMapSecName_ThreeIslePath - .4byte gMapSecName_TanobyKey - .4byte gMapSecName_BirthIsland - .4byte gMapSecName_MoneanChamber - .4byte gMapSecName_LiptooChamber - .4byte gMapSecName_WeepthChamber - .4byte gMapSecName_DilfordChamber - .4byte gMapSecName_ScufibChamber - .4byte gMapSecName_RixyChamber - .4byte gMapSecName_ViapoisChamber - .4byte gMapSecName_EmberSpa - .4byte gMapSecName_CeladonDept - -gUnknown_83F1E60:: @ 83F1E60 - .2byte 0x04, 0x0b - .2byte 0x04, 0x08 - .2byte 0x04, 0x04 - .2byte 0x0e, 0x03 - .2byte 0x12, 0x06 - .2byte 0x0e, 0x09 - .2byte 0x0b, 0x06 - .2byte 0x0c, 0x0c - .2byte 0x04, 0x0e - .2byte 0x02, 0x03 - .2byte 0x0e, 0x06 - .2byte 0x08, 0x03 - .2byte 0x12, 0x03 - .2byte 0x04, 0x09 - .2byte 0x04, 0x05 - .2byte 0x05, 0x04 - .2byte 0x08, 0x03 - .2byte 0x0e, 0x04 - .2byte 0x0e, 0x07 - .2byte 0x0c, 0x06 - .2byte 0x0f, 0x06 - .2byte 0x0f, 0x03 - .2byte 0x12, 0x03 - .2byte 0x0f, 0x09 - .2byte 0x12, 0x07 - .2byte 0x10, 0x0b - .2byte 0x0f, 0x0b - .2byte 0x0d, 0x0c - .2byte 0x07, 0x06 - .2byte 0x07, 0x07 - .2byte 0x07, 0x0c - .2byte 0x0c, 0x0d - .2byte 0x05, 0x0e - .2byte 0x04, 0x0c - .2byte 0x02, 0x08 - .2byte 0x02, 0x04 - .2byte 0x0e, 0x01 - .2byte 0x0f, 0x01 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x01, 0x08 - .2byte 0x09, 0x09 - .2byte 0x12, 0x0c - .2byte 0x03, 0x04 - .2byte 0x10, 0x0b - .2byte 0x05, 0x08 - .2byte 0x11, 0x05 - .2byte 0x02, 0x03 - .2byte 0x01, 0x09 - .2byte 0x09, 0x07 - .2byte 0x0d, 0x0c - .2byte 0x12, 0x0d - .2byte 0x04, 0x03 - .2byte 0x05, 0x04 - .2byte 0x01, 0x04 - .2byte 0x04, 0x05 - .2byte 0x10, 0x09 - .2byte 0x0e, 0x0a - .2byte 0x11, 0x0a - .2byte 0x12, 0x0c - .2byte 0x0f, 0x00 - .2byte 0x0f, 0x03 - .2byte 0x12, 0x03 - .2byte 0x10, 0x07 - .2byte 0x05, 0x06 - .2byte 0x05, 0x09 - .2byte 0x06, 0x09 - .2byte 0x03, 0x0c - .2byte 0x09, 0x0c - .2byte 0x03, 0x0e - .2byte 0x02, 0x0c - .2byte 0x0a, 0x08 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x12, 0x0d - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - -gUnknown_83F2178:: @ 83F2178 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x02 - .2byte 0x01, 0x03 - .2byte 0x04, 0x01 - .2byte 0x06, 0x01 - .2byte 0x01, 0x02 - .2byte 0x01, 0x02 - .2byte 0x02, 0x01 - .2byte 0x03, 0x01 - .2byte 0x03, 0x01 - .2byte 0x01, 0x03 - .2byte 0x03, 0x01 - .2byte 0x01, 0x05 - .2byte 0x02, 0x01 - .2byte 0x01, 0x02 - .2byte 0x02, 0x01 - .2byte 0x04, 0x01 - .2byte 0x01, 0x05 - .2byte 0x05, 0x01 - .2byte 0x01, 0x02 - .2byte 0x07, 0x01 - .2byte 0x01, 0x02 - .2byte 0x02, 0x01 - .2byte 0x01, 0x04 - .2byte 0x01, 0x02 - .2byte 0x02, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x06 - .2byte 0x01, 0x02 - .2byte 0x01, 0x02 - .2byte 0x04, 0x01 - .2byte 0x02, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x03, 0x01 - .2byte 0x01, 0x02 - .2byte 0x03, 0x01 - .2byte 0x03, 0x01 - .2byte 0x01, 0x03 - .2byte 0x01, 0x03 - .2byte 0x01, 0x03 - .2byte 0x03, 0x01 - .2byte 0x01, 0x05 - .2byte 0x02, 0x02 - .2byte 0x01, 0x02 - .2byte 0x01, 0x01 - .2byte 0x01, 0x03 - .2byte 0x07, 0x01 - .2byte 0x01, 0x03 - .2byte 0x06, 0x01 - .2byte 0x01, 0x03 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x01, 0x01 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - .2byte 0x00, 0x00 - -gUnknown_83F2490:: @ 83F2490 - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_24, MAPSEC_ROUTE_25, MAPSEC_ROUTE_25, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_24, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_INDIGO_PLATEAU, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_4_FLYDUP, MAPSEC_ROUTE_4, MAPSEC_ROUTE_4, MAPSEC_ROUTE_4, MAPSEC_ROUTE_4, MAPSEC_ROUTE_4, MAPSEC_CERULEAN_CITY, MAPSEC_ROUTE_9, MAPSEC_ROUTE_9, MAPSEC_ROUTE_9, MAPSEC_ROUTE_10_FLYDUP, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_23, MAPSEC_NONE, MAPSEC_PEWTER_CITY, MAPSEC_ROUTE_3, MAPSEC_ROUTE_3, MAPSEC_ROUTE_3, MAPSEC_ROUTE_3, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_5, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_10, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_23, MAPSEC_NONE, MAPSEC_ROUTE_2, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_5, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_10, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_23, MAPSEC_NONE, MAPSEC_ROUTE_2, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_16, MAPSEC_ROUTE_16, MAPSEC_ROUTE_16, MAPSEC_ROUTE_16, MAPSEC_CELADON_CITY, MAPSEC_ROUTE_7, MAPSEC_ROUTE_7, MAPSEC_SAFFRON_CITY, MAPSEC_ROUTE_8, MAPSEC_ROUTE_8, MAPSEC_ROUTE_8, MAPSEC_LAVENDER_TOWN, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_23, MAPSEC_NONE, MAPSEC_ROUTE_2, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_17, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_6, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_12, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_22, MAPSEC_ROUTE_22, MAPSEC_VIRIDIAN_CITY, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_17, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_6, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_12, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_1, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_17, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_VERMILION_CITY, MAPSEC_ROUTE_11, MAPSEC_ROUTE_11, MAPSEC_ROUTE_11, MAPSEC_ROUTE_12, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_1, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_17, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_12, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_PALLET_TOWN, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_17, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_14, MAPSEC_ROUTE_13, MAPSEC_ROUTE_13, MAPSEC_ROUTE_12, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_21, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_18, MAPSEC_ROUTE_18, MAPSEC_ROUTE_18, MAPSEC_ROUTE_18, MAPSEC_ROUTE_18, MAPSEC_FUCHSIA_CITY, MAPSEC_ROUTE_15, MAPSEC_ROUTE_15, MAPSEC_ROUTE_14, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_21, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_19, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_CINNABAR_ISLAND, MAPSEC_ROUTE_20, MAPSEC_ROUTE_20, MAPSEC_ROUTE_20, MAPSEC_ROUTE_20, MAPSEC_ROUTE_20, MAPSEC_ROUTE_20, MAPSEC_ROUTE_20, MAPSEC_ROUTE_19, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_MT_MOON, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_CERULEAN_CAVE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROCK_TUNNEL, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_KANTO_VICTORY_ROAD, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_POWER_PLANT, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_DIGLETTS_CAVE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_VIRIDIAN_FOREST, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_POKEMON_TOWER, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_DIGLETTS_CAVE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_KANTO_SAFARI_ZONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_POKEMON_MANSION, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_SEAFOAM_ISLANDS, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - -gUnknown_83F2724:: @ 83F2724 - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_KINDLE_ROAD, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_KINDLE_ROAD, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_KINDLE_ROAD, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_KINDLE_ROAD, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_KINDLE_ROAD, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_CAPE_BRINK, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_ONE_ISLAND, MAPSEC_KINDLE_ROAD, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_CAPE_BRINK, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_TREASURE_BEACH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_TWO_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_TREASURE_BEACH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_BOND_BRIDGE, MAPSEC_BOND_BRIDGE, MAPSEC_BOND_BRIDGE, MAPSEC_BOND_BRIDGE, MAPSEC_THREE_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_THREE_ISLE_PORT, MAPSEC_THREE_ISLE_PORT, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_MT_EMBER, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_BERRY_FOREST, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - -gUnknown_83F29B8:: @ 83F29B8 - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_FOUR_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NAVEL_ROCK, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_RESORT_GORGEOUS, MAPSEC_RESORT_GORGEOUS, MAPSEC_RESORT_GORGEOUS, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_WATER_LABYRINTH, MAPSEC_WATER_LABYRINTH, MAPSEC_WATER_LABYRINTH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_FIVE_ISLAND, MAPSEC_FIVE_ISLE_MEADOW, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_FIVE_ISLE_MEADOW, MAPSEC_MEMORIAL_PILLAR, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_MEMORIAL_PILLAR, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_MEMORIAL_PILLAR, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ICEFALL_CAVE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_LOST_CAVE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - -gUnknown_83F2C4C:: @ 83F2C4C - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_OUTCAST_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_OUTCAST_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_OUTCAST_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_GREEN_PATH, MAPSEC_GREEN_PATH, MAPSEC_GREEN_PATH, MAPSEC_WATER_PATH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_WATER_PATH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_SIX_ISLAND, MAPSEC_WATER_PATH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_TRAINER_TOWER, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_WATER_PATH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_TRAINER_TOWER, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_RUIN_VALLEY, MAPSEC_RUIN_VALLEY, MAPSEC_WATER_PATH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_SEVEN_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_RUIN_VALLEY, MAPSEC_RUIN_VALLEY, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_CANYON_ENTRANCE, MAPSEC_SEVAULT_CANYON, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_SEVAULT_CANYON, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_SEVAULT_CANYON, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_TANOBY_RUINS, MAPSEC_TANOBY_RUINS, MAPSEC_TANOBY_RUINS, MAPSEC_TANOBY_RUINS, MAPSEC_TANOBY_RUINS, MAPSEC_TANOBY_RUINS, MAPSEC_TANOBY_RUINS, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_BIRTH_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ALTERING_CAVE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_PATTERN_BUSH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_DOTTED_HOLE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_TANOBY_CHAMBERS, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - .byte MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE - -gUnknown_83F2EE0:: @ 83F2EE0 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x01 - .byte MAP_GROUP(VIRIDIAN_CITY), MAP_NUM(VIRIDIAN_CITY), 0x02 - .byte MAP_GROUP(PEWTER_CITY), MAP_NUM(PEWTER_CITY), 0x03 - .byte MAP_GROUP(CERULEAN_CITY), MAP_NUM(CERULEAN_CITY), 0x04 - .byte MAP_GROUP(LAVENDER_TOWN), MAP_NUM(LAVENDER_TOWN), 0x05 - .byte MAP_GROUP(VERMILION_CITY), MAP_NUM(VERMILION_CITY), 0x06 - .byte MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY), 0x07 - .byte MAP_GROUP(FUCHSIA_CITY), MAP_NUM(FUCHSIA_CITY), 0x08 - .byte MAP_GROUP(CINNABAR_ISLAND), MAP_NUM(CINNABAR_ISLAND), 0x09 - .byte MAP_GROUP(INDIGO_PLATEAU_EXTERIOR), MAP_NUM(INDIGO_PLATEAU_EXTERIOR), 0x0a - .byte MAP_GROUP(SAFFRON_CITY), MAP_NUM(SAFFRON_CITY), 0x0b - .byte MAP_GROUP(ROUTE4), MAP_NUM(ROUTE4), 0x0c - .byte MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10), 0x0d - .byte MAP_GROUP(ROUTE1), MAP_NUM(ROUTE1), 0x00 - .byte MAP_GROUP(ROUTE2), MAP_NUM(ROUTE2), 0x00 - .byte MAP_GROUP(ROUTE3), MAP_NUM(ROUTE3), 0x00 - .byte MAP_GROUP(ROUTE4), MAP_NUM(ROUTE4), 0x00 - .byte MAP_GROUP(ROUTE5), MAP_NUM(ROUTE5), 0x00 - .byte MAP_GROUP(ROUTE6), MAP_NUM(ROUTE6), 0x00 - .byte MAP_GROUP(ROUTE7), MAP_NUM(ROUTE7), 0x00 - .byte MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8), 0x00 - .byte MAP_GROUP(ROUTE9), MAP_NUM(ROUTE9), 0x00 - .byte MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10), 0x00 - .byte MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11), 0x00 - .byte MAP_GROUP(ROUTE12), MAP_NUM(ROUTE12), 0x00 - .byte MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13), 0x00 - .byte MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14), 0x00 - .byte MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15), 0x00 - .byte MAP_GROUP(ROUTE16), MAP_NUM(ROUTE16), 0x00 - .byte MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17), 0x00 - .byte MAP_GROUP(ROUTE18), MAP_NUM(ROUTE18), 0x00 - .byte MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19), 0x00 - .byte MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20), 0x00 - .byte MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH), 0x00 - .byte MAP_GROUP(ROUTE22), MAP_NUM(ROUTE22), 0x00 - .byte MAP_GROUP(ROUTE23), MAP_NUM(ROUTE23), 0x00 - .byte MAP_GROUP(ROUTE24), MAP_NUM(ROUTE24), 0x00 - .byte MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(ONE_ISLAND), MAP_NUM(ONE_ISLAND), 0x0e - .byte MAP_GROUP(TWO_ISLAND), MAP_NUM(TWO_ISLAND), 0x0f - .byte MAP_GROUP(THREE_ISLAND), MAP_NUM(THREE_ISLAND), 0x10 - .byte MAP_GROUP(FOUR_ISLAND), MAP_NUM(FOUR_ISLAND), 0x11 - .byte MAP_GROUP(FIVE_ISLAND), MAP_NUM(FIVE_ISLAND), 0x12 - .byte MAP_GROUP(SEVEN_ISLAND), MAP_NUM(SEVEN_ISLAND), 0x13 - .byte MAP_GROUP(SIX_ISLAND), MAP_NUM(SIX_ISLAND), 0x14 - .byte MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD), 0x00 - .byte MAP_GROUP(ONE_ISLAND_TREASURE_BEACH), MAP_NUM(ONE_ISLAND_TREASURE_BEACH), 0x00 - .byte MAP_GROUP(TWO_ISLAND_CAPE_BRINK), MAP_NUM(TWO_ISLAND_CAPE_BRINK), 0x00 - .byte MAP_GROUP(THREE_ISLAND_BOND_BRIDGE), MAP_NUM(THREE_ISLAND_BOND_BRIDGE), 0x00 - .byte MAP_GROUP(THREE_ISLAND_PORT), MAP_NUM(THREE_ISLAND_PORT), 0x00 - .byte MAP_GROUP(UNKNOWN_MAP_03_50), MAP_NUM(UNKNOWN_MAP_03_50), 0x00 - .byte MAP_GROUP(UNKNOWN_MAP_03_51), MAP_NUM(UNKNOWN_MAP_03_51), 0x00 - .byte MAP_GROUP(UNKNOWN_MAP_03_52), MAP_NUM(UNKNOWN_MAP_03_52), 0x00 - .byte MAP_GROUP(UNKNOWN_MAP_03_53), MAP_NUM(UNKNOWN_MAP_03_53), 0x00 - .byte MAP_GROUP(FIVE_ISLAND_RESORT_GORGEOUS), MAP_NUM(FIVE_ISLAND_RESORT_GORGEOUS), 0x00 - .byte MAP_GROUP(FIVE_ISLAND_WATER_LABYRINTH), MAP_NUM(FIVE_ISLAND_WATER_LABYRINTH), 0x00 - .byte MAP_GROUP(FIVE_ISLAND_MEADOW), MAP_NUM(FIVE_ISLAND_MEADOW), 0x00 - .byte MAP_GROUP(FIVE_ISLAND_MEMORIAL_PILLAR), MAP_NUM(FIVE_ISLAND_MEMORIAL_PILLAR), 0x00 - .byte MAP_GROUP(SIX_ISLAND_OUTCAST_ISLAND), MAP_NUM(SIX_ISLAND_OUTCAST_ISLAND), 0x00 - .byte MAP_GROUP(SIX_ISLAND_GREEN_PATH), MAP_NUM(SIX_ISLAND_GREEN_PATH), 0x00 - .byte MAP_GROUP(SIX_ISLAND_WATER_PATH), MAP_NUM(SIX_ISLAND_WATER_PATH), 0x00 - .byte MAP_GROUP(SIX_ISLAND_RUIN_VALLEY), MAP_NUM(SIX_ISLAND_RUIN_VALLEY), 0x00 - .byte MAP_GROUP(SEVEN_ISLAND_TRAINER_TOWER), MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER), 0x00 - .byte MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE), 0x00 - .byte MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON), 0x00 - .byte MAP_GROUP(SEVEN_ISLAND_TANOBY_RUINS), MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(NAVEL_ROCK_EXTERIOR), MAP_NUM(NAVEL_ROCK_EXTERIOR), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(BIRTH_ISLAND_EXTERIOR), MAP_NUM(BIRTH_ISLAND_EXTERIOR), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 - .byte MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x00 diff --git a/include/strings.h b/include/strings.h index cf26e63fd..e8b4f1b38 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1013,5 +1013,24 @@ extern const u8 gUnknown_8418EA7[]; extern const u8 gUnknown_8418EB0[]; extern const u8 gUnknown_8418EBC[]; extern const u8 gUnknown_8418EC3[]; +extern const u8 gUnknown_8418ECB[]; +extern const u8 gUnknown_8418F3A[]; +extern const u8 gUnknown_8418FB8[]; +extern const u8 gUnknown_841901C[]; +extern const u8 gUnknown_841908E[]; +extern const u8 gUnknown_8419103[]; +extern const u8 gUnknown_841917D[]; +extern const u8 gUnknown_8419201[]; +extern const u8 gUnknown_841926D[]; +extern const u8 gUnknown_84192E2[]; +extern const u8 gUnknown_841935B[]; +extern const u8 gUnknown_84193D5[]; +extern const u8 gUnknown_8419444[]; +extern const u8 gUnknown_84194C9[]; +extern const u8 gUnknown_841953F[]; +extern const u8 gUnknown_84195AC[]; +extern const u8 gUnknown_8419629[]; +extern const u8 gUnknown_841969D[]; +extern const u8 gUnknown_841971A[]; #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index 0b12b1187..dbff827d6 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -479,7 +479,6 @@ SECTIONS { src/mail.o(.rodata); src/heal_location.o(.rodata); src/region_map.o(.rodata); - data/region_map.o(.rodata); data/image_processing_effects.o(.rodata); src/battle_ai_script_commands.o(.rodata); data/fldeff_flash.o(.rodata); diff --git a/src/region_map.c b/src/region_map.c index f997791ba..bd2fe9dd6 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -20,6 +20,7 @@ #include "constants/flags.h" #include "constants/songs.h" #include "constants/region_map.h" +#include "constants/spawn_points.h" #include "constants/maps.h" #define FREE_IF_NOT_NULL(ptr) ({ \ @@ -329,73 +330,990 @@ void sub_80C5208(u8 taskId); void sub_80C527C(u16 a0); #include "data/text/map_section_names.h" -extern const u16 gUnknown_83EF23C[]; -extern const u16 gUnknown_83EF25C[]; -extern const u16 gUnknown_83EF27C[]; -extern const u16 gUnknown_83EF29C[]; -extern const u16 gUnknown_83EF2BC[]; -extern const u16 gUnknown_83EF2DC[]; -extern const u16 gUnknown_83EF384[]; -extern const u16 gUnknown_83EF3A4[]; -extern const u32 gUnknown_83EF3C4[]; -extern const u32 gUnknown_83EF450[]; -extern const u32 gUnknown_83EF4E0[]; -extern const u32 gUnknown_83EF524[]; -extern const u32 gUnknown_83EF59C[]; -extern const u32 gUnknown_83EF61C[]; -extern const u32 gUnknown_83F0330[]; -extern const u32 gUnknown_83F0E0C[]; -extern const u32 gUnknown_83F0580[]; -extern const u32 gUnknown_83F089C[]; -extern const u32 gUnknown_83F0AFC[]; -extern const u32 gUnknown_83F0C0C[]; -extern const u32 gUnknown_83F0CF0[]; -extern const u32 gUnknown_83F0F1C[]; -extern const u32 gUnknown_83F1084[]; -extern const u32 gUnknown_83F1190[]; -extern const u32 gUnknown_83F12CC[]; -extern const u32 gUnknown_83F13EC[]; -extern const u32 gUnknown_83F1550[]; -extern const u32 gUnknown_83F1640[]; -extern const u32 gUnknown_83F1738[]; -extern const u32 gUnknown_83F1804[]; -extern const u32 gUnknown_83F18D8[]; -extern const u32 gUnknown_83F1908[]; -extern const u32 gUnknown_83F1978[]; -extern const u32 gUnknown_83F19A0[]; -extern const struct BgTemplate gUnknown_83F1A50[4]; -extern const struct WindowTemplate gUnknown_83F1A60[]; -extern const u8 gUnknown_83F1A90[]; -extern const u8 gUnknown_83F1A94[]; -extern const u8 *const gUnknown_83F1A9C[]; -extern const u8 sSeviiMapsecs[3][30]; -extern const u8 gUnknown_83F1B00[3][4]; -extern const struct UnkStruct_80C4CF0 gUnknown_83F1B0C[3]; -extern const struct OamData gUnknown_83F1B24; -extern const union AnimCmd *const gUnknown_83F1B38[]; -extern const struct UnkStruct_83F1B3C gUnknown_83F1B3C[]; -extern const struct OamData gUnknown_83F1C20; -extern const union AnimCmd *const gUnknown_83F1C30[]; -extern const struct UnkStruct_80C4CF0 gUnknown_83F1C34; -extern const struct OamData gUnknown_83F1C3C; -extern const union AnimCmd *const gUnknown_83F1C50[]; -extern const struct OamData gUnknown_83F1C54; -extern const union AnimCmd *const gUnknown_83F1C64[]; -extern const struct OamData gUnknown_83F1C68; -extern const struct OamData gUnknown_83F1C70; -extern const union AnimCmd *const gUnknown_83F1C94[]; -extern const union AnimCmd *const gUnknown_83F1C98[]; -extern const u16 gUnknown_83F1CA0[]; -extern const u8 gUnknown_83F1CA4[][2]; -extern const u8 gUnknown_83F1CA8[]; -extern const u8 *const gUnknown_83F1CAC[]; -extern const u16 gUnknown_83F1E60[][2]; -extern const u16 gUnknown_83F2178[][2]; -extern const u8 gUnknown_83F2490[][15][22]; -extern const u8 gUnknown_83F2724[][15][22]; -extern const u8 gUnknown_83F29B8[][15][22]; -extern const u8 gUnknown_83F2C4C[][15][22]; -extern const u8 gUnknown_83F2EE0[][3]; + +const u16 gUnknown_83EF23C[] = INCBIN_U16("graphics/region_map/unk_83EF23C.gbapal"); +const u16 gUnknown_83EF25C[] = INCBIN_U16("graphics/region_map/unk_83EF25C.gbapal"); +const u16 gUnknown_83EF27C[] = INCBIN_U16("graphics/region_map/unk_83EF27C.gbapal"); +const u16 gUnknown_83EF29C[] = INCBIN_U16("graphics/region_map/unk_83EF29C.gbapal"); +const u16 gUnknown_83EF2BC[] = INCBIN_U16("graphics/region_map/unk_83EF2BC.gbapal"); +const u16 gUnknown_83EF2DC[] = INCBIN_U16("graphics/region_map/unk_83EF2DC.gbapal"); +const u16 _83EF2FC[] = { + RGB(0, 0, 31), + RGB(0, 12, 31), + RGB_WHITE, + RGB_WHITE +}; +const u16 gUnknown_83EF384[] = INCBIN_U16("graphics/region_map/unk_83EF384.gbapal"); +const u16 gUnknown_83EF3A4[] = INCBIN_U16("graphics/region_map/unk_83EF3A4.gbapal"); +const u32 gUnknown_83EF3C4[] = INCBIN_U32("graphics/region_map/unk_83EF3C4.4bpp.lz"); +const u32 gUnknown_83EF450[] = INCBIN_U32("graphics/region_map/unk_83EF450.4bpp.lz"); +const u32 gUnknown_83EF4E0[] = INCBIN_U32("graphics/region_map/unk_83EF4E0.4bpp.lz"); +const u32 gUnknown_83EF524[] = INCBIN_U32("graphics/region_map/unk_83EF524.4bpp.lz"); +const u32 gUnknown_83EF59C[] = INCBIN_U32("graphics/region_map/unk_83EF59C.4bpp.lz"); +const u32 gUnknown_83EF61C[] = INCBIN_U32("graphics/region_map/unk_83EF61C.4bpp.lz"); +const u32 gUnknown_83F0330[] = INCBIN_U32("graphics/region_map/unk_83F0330.4bpp.lz"); +const u32 gUnknown_83F0580[] = INCBIN_U32("graphics/region_map/unk_83F0580.bin.lz"); +const u32 gUnknown_83F089C[] = INCBIN_U32("graphics/region_map/unk_83F089C.bin.lz"); +const u32 gUnknown_83F0AFC[] = INCBIN_U32("graphics/region_map/unk_83F0AFC.bin.lz"); +const u32 gUnknown_83F0C0C[] = INCBIN_U32("graphics/region_map/unk_83F0C0C.bin.lz"); +const u32 gUnknown_83F0CF0[] = INCBIN_U32("graphics/region_map/unk_83F0CF0.bin.lz"); +const u32 gUnknown_83F0E0C[] = INCBIN_U32("graphics/region_map/unk_83F0E0C.bin.lz"); +const u32 gUnknown_83F0F1C[] = INCBIN_U32("graphics/region_map/unk_83F0F1C.bin.lz"); +const u32 gUnknown_83F1084[] = INCBIN_U32("graphics/region_map/unk_83F1084.bin.lz"); +const u32 gUnknown_83F1190[] = INCBIN_U32("graphics/region_map/unk_83F1190.bin.lz"); +const u32 gUnknown_83F12CC[] = INCBIN_U32("graphics/region_map/unk_83F12CC.4bpp.lz"); +const u32 gUnknown_83F13EC[] = INCBIN_U32("graphics/region_map/unk_83F13EC.4bpp.lz"); +const u32 gUnknown_83F1550[] = INCBIN_U32("graphics/region_map/unk_83F1550.4bpp.lz"); +const u32 gUnknown_83F1640[] = INCBIN_U32("graphics/region_map/unk_83F1640.4bpp.lz"); +const u32 gUnknown_83F1738[] = INCBIN_U32("graphics/region_map/unk_83F1738.4bpp.lz"); +const u32 gUnknown_83F1804[] = INCBIN_U32("graphics/region_map/unk_83F1804.4bpp.lz"); +const u32 gUnknown_83F18D8[] = INCBIN_U32("graphics/region_map/unk_83F18D8.4bpp.lz"); +const u32 gUnknown_83F1908[] = INCBIN_U32("graphics/region_map/unk_83F1908.4bpp.lz"); +const u32 gUnknown_83F1978[] = INCBIN_U32("graphics/region_map/unk_83F1978.4bpp.lz"); +const u32 gUnknown_83F19A0[] = INCBIN_U32("graphics/region_map/unk_83F19A0.bin.lz"); + +const struct BgTemplate gUnknown_83F1A50[] = { + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x000 + }, { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 15, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0x000 + }, { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 23, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0x000 + }, { + .bg = 3, + .charBaseIndex = 3, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0x000 + } +}; + +const struct WindowTemplate gUnknown_83F1A60[] = { + { + .bg = 3, + .tilemapLeft = 3, + .tilemapTop = 2, + .width = 15, + .height = 2, + .paletteNum = 12, + .baseBlock = 0x001 + }, { + .bg = 3, + .tilemapLeft = 3, + .tilemapTop = 4, + .width = 15, + .height = 2, + .paletteNum = 12, + .baseBlock = 0x01f + }, { + .bg = 3, + .tilemapLeft = 3, + .tilemapTop = 6, + .width = 25, + .height = 11, + .paletteNum = 12, + .baseBlock = 0x03d + }, { + .bg = 3, + .tilemapLeft = 18, + .tilemapTop = 0, + .width = 5, + .height = 2, + .paletteNum = 12, + .baseBlock = 0x150 + }, { + .bg = 3, + .tilemapLeft = 24, + .tilemapTop = 0, + .width = 5, + .height = 2, + .paletteNum = 12, + .baseBlock = 0x15a + }, DUMMY_WIN_TEMPLATE +}; + +ALIGNED(4) const u8 gUnknown_83F1A90[] = {0, 1, 2}; +ALIGNED(4) const u8 gUnknown_83F1A94[] = {0, 7, 2}; +ALIGNED(4) const u8 gUnknown_83F1A98[] = {0, 10, 2}; + +const u8 *const gUnknown_83F1A9C[] = { + gUnknown_83F1A94, + gUnknown_83F1A98 +}; + +const u8 sSeviiMapsecs[3][30] = { + { + MAPSEC_ONE_ISLAND, + MAPSEC_TWO_ISLAND, + MAPSEC_THREE_ISLAND, + MAPSEC_KINDLE_ROAD, + MAPSEC_TREASURE_BEACH, + MAPSEC_CAPE_BRINK, + MAPSEC_BOND_BRIDGE, + MAPSEC_THREE_ISLE_PORT, + MAPSEC_MT_EMBER, + MAPSEC_BERRY_FOREST, + MAPSEC_THREE_ISLE_PATH, + MAPSEC_EMBER_SPA, + MAPSEC_NONE + }, { + MAPSEC_FOUR_ISLAND, + MAPSEC_FIVE_ISLAND, + MAPSEC_SEVII_ISLE_6, + MAPSEC_SEVII_ISLE_7, + MAPSEC_SEVII_ISLE_8, + MAPSEC_SEVII_ISLE_9, + MAPSEC_RESORT_GORGEOUS, + MAPSEC_WATER_LABYRINTH, + MAPSEC_FIVE_ISLE_MEADOW, + MAPSEC_MEMORIAL_PILLAR, + MAPSEC_NAVEL_ROCK, + MAPSEC_ICEFALL_CAVE, + MAPSEC_ROCKET_WAREHOUSE, + MAPSEC_LOST_CAVE, + MAPSEC_NONE + }, { + MAPSEC_SEVEN_ISLAND, + MAPSEC_SIX_ISLAND, + MAPSEC_OUTCAST_ISLAND, + MAPSEC_GREEN_PATH, + MAPSEC_WATER_PATH, + MAPSEC_RUIN_VALLEY, + MAPSEC_TRAINER_TOWER, + MAPSEC_CANYON_ENTRANCE, + MAPSEC_SEVAULT_CANYON, + MAPSEC_TANOBY_RUINS, + MAPSEC_SEVII_ISLE_22, + MAPSEC_SEVII_ISLE_23, + MAPSEC_SEVII_ISLE_24, + MAPSEC_TRAINER_TOWER_2, + MAPSEC_DOTTED_HOLE, + MAPSEC_PATTERN_BUSH, + MAPSEC_ALTERING_CAVE, + MAPSEC_TANOBY_CHAMBERS, + MAPSEC_TANOBY_KEY, + MAPSEC_BIRTH_ISLAND, + MAPSEC_MONEAN_CHAMBER, + MAPSEC_LIPTOO_CHAMBER, + MAPSEC_WEEPTH_CHAMBER, + MAPSEC_DILFORD_CHAMBER, + MAPSEC_SCUFIB_CHAMBER, + MAPSEC_RIXY_CHAMBER, + MAPSEC_VIAPOIS_CHAMBER, + MAPSEC_NONE + } +}; + +ALIGNED(4) const u8 gUnknown_83F1B00[3][4] = { + {1, 1, 1, 0}, + {0, 0, 0, 0}, + {0, 0, 0, 1} +}; + +const struct UnkStruct_80C4CF0 gUnknown_83F1B0C[3] = { + {0x18, 0x10, 0x90, 0x20}, + {0x18, 0x20, 0x90, 0x30}, + {0x00, 0x00, 0x00, 0x00} +}; + +const struct OamData gUnknown_83F1B24 = { + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32) +}; + +const union AnimCmd gUnknown_83F1B2C[] = { + ANIMCMD_FRAME(0x00, 20), + ANIMCMD_FRAME(0x10, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd *const gUnknown_83F1B38[] = { + gUnknown_83F1B2C +}; + +const struct UnkStruct_83F1B3C gUnknown_83F1B3C[] = { + { + .field_0 = MAPSEC_VIRIDIAN_FOREST, + .field_4 = gMapSecName_ViridianForest, + .field_8 = gUnknown_8418ECB + }, { + .field_0 = MAPSEC_MT_MOON, + .field_4 = gMapSecName_MtMoon, + .field_8 = gUnknown_8418F3A + }, { + .field_0 = MAPSEC_DIGLETTS_CAVE, + .field_4 = gMapSecName_DiglettsCave, + .field_8 = gUnknown_8418FB8 + }, { + .field_0 = MAPSEC_KANTO_VICTORY_ROAD, + .field_4 = gMapSecName_VictoryRoad, + .field_8 = gUnknown_841901C + }, { + .field_0 = MAPSEC_POKEMON_MANSION, + .field_4 = gMapSecName_PokemonMansion, + .field_8 = gUnknown_841908E + }, { + .field_0 = MAPSEC_KANTO_SAFARI_ZONE, + .field_4 = gMapSecName_SafariZone, + .field_8 = gUnknown_8419103 + }, { + .field_0 = MAPSEC_ROCK_TUNNEL, + .field_4 = gMapSecName_RockTunnel, + .field_8 = gUnknown_841917D + }, { + .field_0 = MAPSEC_SEAFOAM_ISLANDS, + .field_4 = gMapSecName_SeafoamIslands, + .field_8 = gUnknown_8419201 + }, { + .field_0 = MAPSEC_POKEMON_TOWER, + .field_4 = gMapSecName_PokemonTower, + .field_8 = gUnknown_841926D + }, { + .field_0 = MAPSEC_CERULEAN_CAVE, + .field_4 = gMapSecName_CeruleanCave, + .field_8 = gUnknown_84192E2 + }, { + .field_0 = MAPSEC_POWER_PLANT, + .field_4 = gMapSecName_PowerPlant, + .field_8 = gUnknown_841935B + }, { + .field_0 = MAPSEC_MT_EMBER, + .field_4 = gMapSecName_MtEmber, + .field_8 = gUnknown_84193D5 + }, { + .field_0 = MAPSEC_BERRY_FOREST, + .field_4 = gMapSecName_BerryForest, + .field_8 = gUnknown_8419444 + }, { + .field_0 = MAPSEC_ICEFALL_CAVE, + .field_4 = gMapSecName_IcefallCave, + .field_8 = gUnknown_84194C9 + }, { + .field_0 = MAPSEC_LOST_CAVE, + .field_4 = gMapSecName_LostCave, + .field_8 = gUnknown_841953F + }, { + .field_0 = MAPSEC_TANOBY_CHAMBERS, + .field_4 = gMapSecName_TanobyChambers, + .field_8 = gUnknown_84195AC + }, { + .field_0 = MAPSEC_ALTERING_CAVE, + .field_4 = gMapSecName_AlteringCave, + .field_8 = gUnknown_8419629 + }, { + .field_0 = MAPSEC_PATTERN_BUSH, + .field_4 = gMapSecName_PatternBush, + .field_8 = gUnknown_841969D + }, { + .field_0 = MAPSEC_DOTTED_HOLE, + .field_4 = gMapSecName_DottedHole, + .field_8 = gUnknown_841971A + } +}; + +const struct OamData gUnknown_83F1C20 = { + .shape = SPRITE_SHAPE(32x64), + .size = SPRITE_SIZE(32x64) +}; + +const union AnimCmd gAnimCmd_83F1C28[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd *const gUnknown_83F1C30[] = { + gAnimCmd_83F1C28 +}; + +const struct UnkStruct_80C4CF0 gUnknown_83F1C34 = { + 0x18, 0x10, 0xD8, 0xA0 +}; + +const struct OamData gUnknown_83F1C3C = { + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .priority = 2 +}; + +const union AnimCmd gAnimCmd_83F1C44[] = { + ANIMCMD_FRAME(0, 20), + ANIMCMD_FRAME(4, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd *const gUnknown_83F1C50[] = { + gAnimCmd_83F1C44 +}; + +const struct OamData gUnknown_83F1C54 = { + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .priority = 2 +}; + +const union AnimCmd gAnimCmd_83F1C5C[] = { + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gUnknown_83F1C64[] = { + gAnimCmd_83F1C5C +}; + +const struct OamData gUnknown_83F1C68 = { + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .priority = 2 +}; + +const struct OamData gUnknown_83F1C70 = { + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .priority = 2 +}; + +const union AnimCmd gAnimCmd_83F1C78[] = { + ANIMCMD_FRAME(0, 30), + ANIMCMD_FRAME(4, 60), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gAnimCmd_83F1C84[] = { + ANIMCMD_FRAME(1, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gAnimCmd_83F1C8C[] = { + ANIMCMD_FRAME(0, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd *const gUnknown_83F1C94[] = { + gAnimCmd_83F1C78 +}; + +const union AnimCmd *const gUnknown_83F1C98[] = { + gAnimCmd_83F1C84, + gAnimCmd_83F1C8C +}; + +const u16 gUnknown_83F1CA0[] = { + DISPCNT_WIN0_ON, + DISPCNT_WIN1_ON +}; + +const u8 gUnknown_83F1CA4[][2] = { + {REG_OFFSET_WIN0V, REG_OFFSET_WIN0H}, + {REG_OFFSET_WIN1V, REG_OFFSET_WIN1H} +}; + +const u8 gUnknown_83F1CA8[] = {15, 1, 2}; + +const u8 *const gUnknown_83F1CAC[] = { + [MAPSEC_PALLET_TOWN - MAPSECS_KANTO] = gMapSecName_PalletTown, + [MAPSEC_VIRIDIAN_CITY - MAPSECS_KANTO] = gMapSecName_ViridianCity, + [MAPSEC_PEWTER_CITY - MAPSECS_KANTO] = gMapSecName_PewterCity, + [MAPSEC_CERULEAN_CITY - MAPSECS_KANTO] = gMapSecName_CeruleanCity, + [MAPSEC_LAVENDER_TOWN - MAPSECS_KANTO] = gMapSecName_LavenderTown, + [MAPSEC_VERMILION_CITY - MAPSECS_KANTO] = gMapSecName_VermilionCity, + [MAPSEC_CELADON_CITY - MAPSECS_KANTO] = gMapSecName_CeladonCity, + [MAPSEC_FUCHSIA_CITY - MAPSECS_KANTO] = gMapSecName_FuchsiaCity, + [MAPSEC_CINNABAR_ISLAND - MAPSECS_KANTO] = gMapSecName_CinnabarIsland, + [MAPSEC_INDIGO_PLATEAU - MAPSECS_KANTO] = gMapSecName_IndigoPlateau, + [MAPSEC_SAFFRON_CITY - MAPSECS_KANTO] = gMapSecName_SaffronCity, + [MAPSEC_ROUTE_4_FLYDUP - MAPSECS_KANTO] = gMapSecName_Route4, + [MAPSEC_ROUTE_10_FLYDUP - MAPSECS_KANTO] = gMapSecName_Route10, + [MAPSEC_ROUTE_1 - MAPSECS_KANTO] = gMapSecName_Route1, + [MAPSEC_ROUTE_2 - MAPSECS_KANTO] = gMapSecName_Route2, + [MAPSEC_ROUTE_3 - MAPSECS_KANTO] = gMapSecName_Route3, + [MAPSEC_ROUTE_4 - MAPSECS_KANTO] = gMapSecName_Route4_2, + [MAPSEC_ROUTE_5 - MAPSECS_KANTO] = gMapSecName_Route5, + [MAPSEC_ROUTE_6 - MAPSECS_KANTO] = gMapSecName_Route6, + [MAPSEC_ROUTE_7 - MAPSECS_KANTO] = gMapSecName_Route7, + [MAPSEC_ROUTE_8 - MAPSECS_KANTO] = gMapSecName_Route8, + [MAPSEC_ROUTE_9 - MAPSECS_KANTO] = gMapSecName_Route9, + [MAPSEC_ROUTE_10 - MAPSECS_KANTO] = gMapSecName_Route10_2, + [MAPSEC_ROUTE_11 - MAPSECS_KANTO] = gMapSecName_Route11, + [MAPSEC_ROUTE_12 - MAPSECS_KANTO] = gMapSecName_Route12, + [MAPSEC_ROUTE_13 - MAPSECS_KANTO] = gMapSecName_Route13, + [MAPSEC_ROUTE_14 - MAPSECS_KANTO] = gMapSecName_Route14, + [MAPSEC_ROUTE_15 - MAPSECS_KANTO] = gMapSecName_Route15, + [MAPSEC_ROUTE_16 - MAPSECS_KANTO] = gMapSecName_Route16, + [MAPSEC_ROUTE_17 - MAPSECS_KANTO] = gMapSecName_Route17, + [MAPSEC_ROUTE_18 - MAPSECS_KANTO] = gMapSecName_Route18, + [MAPSEC_ROUTE_19 - MAPSECS_KANTO] = gMapSecName_Route19, + [MAPSEC_ROUTE_20 - MAPSECS_KANTO] = gMapSecName_Route20, + [MAPSEC_ROUTE_21 - MAPSECS_KANTO] = gMapSecName_Route21, + [MAPSEC_ROUTE_22 - MAPSECS_KANTO] = gMapSecName_Route22, + [MAPSEC_ROUTE_23 - MAPSECS_KANTO] = gMapSecName_Route23, + [MAPSEC_ROUTE_24 - MAPSECS_KANTO] = gMapSecName_Route24, + [MAPSEC_ROUTE_25 - MAPSECS_KANTO] = gMapSecName_Route25, + [MAPSEC_VIRIDIAN_FOREST - MAPSECS_KANTO] = gMapSecName_ViridianForest, + [MAPSEC_MT_MOON - MAPSECS_KANTO] = gMapSecName_MtMoon, + [MAPSEC_S_S_ANNE - MAPSECS_KANTO] = gMapSecName_SSAnne, + [MAPSEC_UNDERGROUND_PATH - MAPSECS_KANTO] = gMapSecName_UndergroundPath, + [MAPSEC_UNDERGROUND_PATH_2 - MAPSECS_KANTO] = gMapSecName_UndergroundPath_2, + [MAPSEC_DIGLETTS_CAVE - MAPSECS_KANTO] = gMapSecName_DiglettsCave, + [MAPSEC_KANTO_VICTORY_ROAD - MAPSECS_KANTO] = gMapSecName_VictoryRoad, + [MAPSEC_ROCKET_HIDEOUT - MAPSECS_KANTO] = gMapSecName_RocketHideout, + [MAPSEC_SILPH_CO - MAPSECS_KANTO] = gMapSecName_SilphCo, + [MAPSEC_POKEMON_MANSION - MAPSECS_KANTO] = gMapSecName_PokemonMansion, + [MAPSEC_KANTO_SAFARI_ZONE - MAPSECS_KANTO] = gMapSecName_SafariZone, + [MAPSEC_POKEMON_LEAGUE - MAPSECS_KANTO] = gMapSecName_PokemonLeague, + [MAPSEC_ROCK_TUNNEL - MAPSECS_KANTO] = gMapSecName_RockTunnel, + [MAPSEC_SEAFOAM_ISLANDS - MAPSECS_KANTO] = gMapSecName_SeafoamIslands, + [MAPSEC_POKEMON_TOWER - MAPSECS_KANTO] = gMapSecName_PokemonTower, + [MAPSEC_CERULEAN_CAVE - MAPSECS_KANTO] = gMapSecName_CeruleanCave, + [MAPSEC_POWER_PLANT - MAPSECS_KANTO] = gMapSecName_PowerPlant, + [MAPSEC_ONE_ISLAND - MAPSECS_KANTO] = gMapSecName_OneIsland, + [MAPSEC_TWO_ISLAND - MAPSECS_KANTO] = gMapSecName_TwoIsland, + [MAPSEC_THREE_ISLAND - MAPSECS_KANTO] = gMapSecName_ThreeIsland, + [MAPSEC_FOUR_ISLAND - MAPSECS_KANTO] = gMapSecName_FourIsland, + [MAPSEC_FIVE_ISLAND - MAPSECS_KANTO] = gMapSecName_FiveIsland, + [MAPSEC_SEVEN_ISLAND - MAPSECS_KANTO] = gMapSecName_SevenIsland, + [MAPSEC_SIX_ISLAND - MAPSECS_KANTO] = gMapSecName_SixIsland, + [MAPSEC_KINDLE_ROAD - MAPSECS_KANTO] = gMapSecName_KindleRoad, + [MAPSEC_TREASURE_BEACH - MAPSECS_KANTO] = gMapSecName_TreasureBeach, + [MAPSEC_CAPE_BRINK - MAPSECS_KANTO] = gMapSecName_CapeBrink, + [MAPSEC_BOND_BRIDGE - MAPSECS_KANTO] = gMapSecName_BondBridge, + [MAPSEC_THREE_ISLE_PORT - MAPSECS_KANTO] = gMapSecName_ThreeIslePort, + [MAPSEC_SEVII_ISLE_6 - MAPSECS_KANTO] = gMapSecName_SeviiIsle6, + [MAPSEC_SEVII_ISLE_7 - MAPSECS_KANTO] = gMapSecName_SeviiIsle7, + [MAPSEC_SEVII_ISLE_8 - MAPSECS_KANTO] = gMapSecName_SeviiIsle8, + [MAPSEC_SEVII_ISLE_9 - MAPSECS_KANTO] = gMapSecName_SeviiIsle9, + [MAPSEC_RESORT_GORGEOUS - MAPSECS_KANTO] = gMapSecName_ResortGorgeous, + [MAPSEC_WATER_LABYRINTH - MAPSECS_KANTO] = gMapSecName_WaterLabyrinth, + [MAPSEC_FIVE_ISLE_MEADOW - MAPSECS_KANTO] = gMapSecName_FiveIsleMeadow, + [MAPSEC_MEMORIAL_PILLAR - MAPSECS_KANTO] = gMapSecName_MemorialPillar, + [MAPSEC_OUTCAST_ISLAND - MAPSECS_KANTO] = gMapSecName_OutcastIsland, + [MAPSEC_GREEN_PATH - MAPSECS_KANTO] = gMapSecName_GreenPath, + [MAPSEC_WATER_PATH - MAPSECS_KANTO] = gMapSecName_WaterPath, + [MAPSEC_RUIN_VALLEY - MAPSECS_KANTO] = gMapSecName_RuinValley, + [MAPSEC_TRAINER_TOWER - MAPSECS_KANTO] = gMapSecName_TrainerTower, + [MAPSEC_CANYON_ENTRANCE - MAPSECS_KANTO] = gMapSecName_CanyonEntrance, + [MAPSEC_SEVAULT_CANYON - MAPSECS_KANTO] = gMapSecName_SevaultCanyon, + [MAPSEC_TANOBY_RUINS - MAPSECS_KANTO] = gMapSecName_TanobyRuins, + [MAPSEC_SEVII_ISLE_22 - MAPSECS_KANTO] = gMapSecName_SeviiIsle22, + [MAPSEC_SEVII_ISLE_23 - MAPSECS_KANTO] = gMapSecName_SeviiIsle23, + [MAPSEC_SEVII_ISLE_24 - MAPSECS_KANTO] = gMapSecName_SeviiIsle24, + [MAPSEC_NAVEL_ROCK - MAPSECS_KANTO] = gMapSecName_NavelRock, + [MAPSEC_MT_EMBER - MAPSECS_KANTO] = gMapSecName_MtEmber, + [MAPSEC_BERRY_FOREST - MAPSECS_KANTO] = gMapSecName_BerryForest, + [MAPSEC_ICEFALL_CAVE - MAPSECS_KANTO] = gMapSecName_IcefallCave, + [MAPSEC_ROCKET_WAREHOUSE - MAPSECS_KANTO] = gMapSecName_RocketWarehouse, + [MAPSEC_TRAINER_TOWER_2 - MAPSECS_KANTO] = gMapSecName_TrainerTower_2, + [MAPSEC_DOTTED_HOLE - MAPSECS_KANTO] = gMapSecName_DottedHole, + [MAPSEC_LOST_CAVE - MAPSECS_KANTO] = gMapSecName_LostCave, + [MAPSEC_PATTERN_BUSH - MAPSECS_KANTO] = gMapSecName_PatternBush, + [MAPSEC_ALTERING_CAVE - MAPSECS_KANTO] = gMapSecName_AlteringCave, + [MAPSEC_TANOBY_CHAMBERS - MAPSECS_KANTO] = gMapSecName_TanobyChambers, + [MAPSEC_THREE_ISLE_PATH - MAPSECS_KANTO] = gMapSecName_ThreeIslePath, + [MAPSEC_TANOBY_KEY - MAPSECS_KANTO] = gMapSecName_TanobyKey, + [MAPSEC_BIRTH_ISLAND - MAPSECS_KANTO] = gMapSecName_BirthIsland, + [MAPSEC_MONEAN_CHAMBER - MAPSECS_KANTO] = gMapSecName_MoneanChamber, + [MAPSEC_LIPTOO_CHAMBER - MAPSECS_KANTO] = gMapSecName_LiptooChamber, + [MAPSEC_WEEPTH_CHAMBER - MAPSECS_KANTO] = gMapSecName_WeepthChamber, + [MAPSEC_DILFORD_CHAMBER - MAPSECS_KANTO] = gMapSecName_DilfordChamber, + [MAPSEC_SCUFIB_CHAMBER - MAPSECS_KANTO] = gMapSecName_ScufibChamber, + [MAPSEC_RIXY_CHAMBER - MAPSECS_KANTO] = gMapSecName_RixyChamber, + [MAPSEC_VIAPOIS_CHAMBER - MAPSECS_KANTO] = gMapSecName_ViapoisChamber, + [MAPSEC_EMBER_SPA - MAPSECS_KANTO] = gMapSecName_EmberSpa, + [MAPSEC_SPECIAL_AREA - MAPSECS_KANTO] = gMapSecName_CeladonDept +}; + +const u16 gUnknown_83F1E60[0xC6][2] = { + [MAPSEC_PALLET_TOWN - MAPSECS_KANTO] = {0x04, 0x0b}, + [MAPSEC_VIRIDIAN_CITY - MAPSECS_KANTO] = {0x04, 0x08}, + [MAPSEC_PEWTER_CITY - MAPSECS_KANTO] = {0x04, 0x04}, + [MAPSEC_CERULEAN_CITY - MAPSECS_KANTO] = {0x0e, 0x03}, + [MAPSEC_LAVENDER_TOWN - MAPSECS_KANTO] = {0x12, 0x06}, + [MAPSEC_VERMILION_CITY - MAPSECS_KANTO] = {0x0e, 0x09}, + [MAPSEC_CELADON_CITY - MAPSECS_KANTO] = {0x0b, 0x06}, + [MAPSEC_FUCHSIA_CITY - MAPSECS_KANTO] = {0x0c, 0x0c}, + [MAPSEC_CINNABAR_ISLAND - MAPSECS_KANTO] = {0x04, 0x0e}, + [MAPSEC_INDIGO_PLATEAU - MAPSECS_KANTO] = {0x02, 0x03}, + [MAPSEC_SAFFRON_CITY - MAPSECS_KANTO] = {0x0e, 0x06}, + [MAPSEC_ROUTE_4_FLYDUP - MAPSECS_KANTO] = {0x08, 0x03}, + [MAPSEC_ROUTE_10_FLYDUP - MAPSECS_KANTO] = {0x12, 0x03}, + [MAPSEC_ROUTE_1 - MAPSECS_KANTO] = {0x04, 0x09}, + [MAPSEC_ROUTE_2 - MAPSECS_KANTO] = {0x04, 0x05}, + [MAPSEC_ROUTE_3 - MAPSECS_KANTO] = {0x05, 0x04}, + [MAPSEC_ROUTE_4 - MAPSECS_KANTO] = {0x08, 0x03}, + [MAPSEC_ROUTE_5 - MAPSECS_KANTO] = {0x0e, 0x04}, + [MAPSEC_ROUTE_6 - MAPSECS_KANTO] = {0x0e, 0x07}, + [MAPSEC_ROUTE_7 - MAPSECS_KANTO] = {0x0c, 0x06}, + [MAPSEC_ROUTE_8 - MAPSECS_KANTO] = {0x0f, 0x06}, + [MAPSEC_ROUTE_9 - MAPSECS_KANTO] = {0x0f, 0x03}, + [MAPSEC_ROUTE_10 - MAPSECS_KANTO] = {0x12, 0x03}, + [MAPSEC_ROUTE_11 - MAPSECS_KANTO] = {0x0f, 0x09}, + [MAPSEC_ROUTE_12 - MAPSECS_KANTO] = {0x12, 0x07}, + [MAPSEC_ROUTE_13 - MAPSECS_KANTO] = {0x10, 0x0b}, + [MAPSEC_ROUTE_14 - MAPSECS_KANTO] = {0x0f, 0x0b}, + [MAPSEC_ROUTE_15 - MAPSECS_KANTO] = {0x0d, 0x0c}, + [MAPSEC_ROUTE_16 - MAPSECS_KANTO] = {0x07, 0x06}, + [MAPSEC_ROUTE_17 - MAPSECS_KANTO] = {0x07, 0x07}, + [MAPSEC_ROUTE_18 - MAPSECS_KANTO] = {0x07, 0x0c}, + [MAPSEC_ROUTE_19 - MAPSECS_KANTO] = {0x0c, 0x0d}, + [MAPSEC_ROUTE_20 - MAPSECS_KANTO] = {0x05, 0x0e}, + [MAPSEC_ROUTE_21 - MAPSECS_KANTO] = {0x04, 0x0c}, + [MAPSEC_ROUTE_22 - MAPSECS_KANTO] = {0x02, 0x08}, + [MAPSEC_ROUTE_23 - MAPSECS_KANTO] = {0x02, 0x04}, + [MAPSEC_ROUTE_24 - MAPSECS_KANTO] = {0x0e, 0x01}, + [MAPSEC_ROUTE_25 - MAPSECS_KANTO] = {0x0f, 0x01}, + [MAPSEC_ONE_ISLAND - MAPSECS_KANTO] = {0x01, 0x08}, + [MAPSEC_TWO_ISLAND - MAPSECS_KANTO] = {0x09, 0x09}, + [MAPSEC_THREE_ISLAND - MAPSECS_KANTO] = {0x12, 0x0c}, + [MAPSEC_FOUR_ISLAND - MAPSECS_KANTO] = {0x03, 0x04}, + [MAPSEC_FIVE_ISLAND - MAPSECS_KANTO] = {0x10, 0x0b}, + [MAPSEC_SEVEN_ISLAND - MAPSECS_KANTO] = {0x05, 0x08}, + [MAPSEC_SIX_ISLAND - MAPSECS_KANTO] = {0x11, 0x05}, + [MAPSEC_KINDLE_ROAD - MAPSECS_KANTO] = {0x02, 0x03}, + [MAPSEC_TREASURE_BEACH - MAPSECS_KANTO] = {0x01, 0x09}, + [MAPSEC_CAPE_BRINK - MAPSECS_KANTO] = {0x09, 0x07}, + [MAPSEC_BOND_BRIDGE - MAPSECS_KANTO] = {0x0d, 0x0c}, + [MAPSEC_THREE_ISLE_PORT - MAPSECS_KANTO] = {0x12, 0x0d}, + [MAPSEC_SEVII_ISLE_6 - MAPSECS_KANTO] = {0x04, 0x03}, + [MAPSEC_SEVII_ISLE_7 - MAPSECS_KANTO] = {0x05, 0x04}, + [MAPSEC_SEVII_ISLE_8 - MAPSECS_KANTO] = {0x01, 0x04}, + [MAPSEC_SEVII_ISLE_9 - MAPSECS_KANTO] = {0x04, 0x05}, + [MAPSEC_RESORT_GORGEOUS - MAPSECS_KANTO] = {0x10, 0x09}, + [MAPSEC_WATER_LABYRINTH - MAPSECS_KANTO] = {0x0e, 0x0a}, + [MAPSEC_FIVE_ISLE_MEADOW - MAPSECS_KANTO] = {0x11, 0x0a}, + [MAPSEC_MEMORIAL_PILLAR - MAPSECS_KANTO] = {0x12, 0x0c}, + [MAPSEC_OUTCAST_ISLAND - MAPSECS_KANTO] = {0x0f, 0x00}, + [MAPSEC_GREEN_PATH - MAPSECS_KANTO] = {0x0f, 0x03}, + [MAPSEC_WATER_PATH - MAPSECS_KANTO] = {0x12, 0x03}, + [MAPSEC_RUIN_VALLEY - MAPSECS_KANTO] = {0x10, 0x07}, + [MAPSEC_TRAINER_TOWER - MAPSECS_KANTO] = {0x05, 0x06}, + [MAPSEC_CANYON_ENTRANCE - MAPSECS_KANTO] = {0x05, 0x09}, + [MAPSEC_SEVAULT_CANYON - MAPSECS_KANTO] = {0x06, 0x09}, + [MAPSEC_TANOBY_RUINS - MAPSECS_KANTO] = {0x03, 0x0c}, + [MAPSEC_SEVII_ISLE_22 - MAPSECS_KANTO] = {0x09, 0x0c}, + [MAPSEC_SEVII_ISLE_23 - MAPSECS_KANTO] = {0x03, 0x0e}, + [MAPSEC_SEVII_ISLE_24 - MAPSECS_KANTO] = {0x02, 0x0c}, + [MAPSEC_NAVEL_ROCK - MAPSECS_KANTO] = {0x0a, 0x08}, + [MAPSEC_BIRTH_ISLAND - MAPSECS_KANTO] = {0x12, 0x0d}, +}; + +const u16 gUnknown_83F2178[0xC6][2] = { + [MAPSEC_PALLET_TOWN - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_VIRIDIAN_CITY - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_PEWTER_CITY - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_CERULEAN_CITY - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_LAVENDER_TOWN - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_VERMILION_CITY - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_CELADON_CITY - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_FUCHSIA_CITY - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_CINNABAR_ISLAND - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_INDIGO_PLATEAU - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_SAFFRON_CITY - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_ROUTE_4_FLYDUP - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_ROUTE_10_FLYDUP - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_ROUTE_1 - MAPSECS_KANTO] = {0x01, 0x02}, + [MAPSEC_ROUTE_2 - MAPSECS_KANTO] = {0x01, 0x03}, + [MAPSEC_ROUTE_3 - MAPSECS_KANTO] = {0x04, 0x01}, + [MAPSEC_ROUTE_4 - MAPSECS_KANTO] = {0x06, 0x01}, + [MAPSEC_ROUTE_5 - MAPSECS_KANTO] = {0x01, 0x02}, + [MAPSEC_ROUTE_6 - MAPSECS_KANTO] = {0x01, 0x02}, + [MAPSEC_ROUTE_7 - MAPSECS_KANTO] = {0x02, 0x01}, + [MAPSEC_ROUTE_8 - MAPSECS_KANTO] = {0x03, 0x01}, + [MAPSEC_ROUTE_9 - MAPSECS_KANTO] = {0x03, 0x01}, + [MAPSEC_ROUTE_10 - MAPSECS_KANTO] = {0x01, 0x03}, + [MAPSEC_ROUTE_11 - MAPSECS_KANTO] = {0x03, 0x01}, + [MAPSEC_ROUTE_12 - MAPSECS_KANTO] = {0x01, 0x05}, + [MAPSEC_ROUTE_13 - MAPSECS_KANTO] = {0x02, 0x01}, + [MAPSEC_ROUTE_14 - MAPSECS_KANTO] = {0x01, 0x02}, + [MAPSEC_ROUTE_15 - MAPSECS_KANTO] = {0x02, 0x01}, + [MAPSEC_ROUTE_16 - MAPSECS_KANTO] = {0x04, 0x01}, + [MAPSEC_ROUTE_17 - MAPSECS_KANTO] = {0x01, 0x05}, + [MAPSEC_ROUTE_18 - MAPSECS_KANTO] = {0x05, 0x01}, + [MAPSEC_ROUTE_19 - MAPSECS_KANTO] = {0x01, 0x02}, + [MAPSEC_ROUTE_20 - MAPSECS_KANTO] = {0x07, 0x01}, + [MAPSEC_ROUTE_21 - MAPSECS_KANTO] = {0x01, 0x02}, + [MAPSEC_ROUTE_22 - MAPSECS_KANTO] = {0x02, 0x01}, + [MAPSEC_ROUTE_23 - MAPSECS_KANTO] = {0x01, 0x04}, + [MAPSEC_ROUTE_24 - MAPSECS_KANTO] = {0x01, 0x02}, + [MAPSEC_ROUTE_25 - MAPSECS_KANTO] = {0x02, 0x01}, + [MAPSEC_VIRIDIAN_FOREST - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_MT_MOON - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_S_S_ANNE - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_UNDERGROUND_PATH - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_UNDERGROUND_PATH_2 - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_DIGLETTS_CAVE - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_KANTO_VICTORY_ROAD - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_ROCKET_HIDEOUT - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_SILPH_CO - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_POKEMON_MANSION - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_KANTO_SAFARI_ZONE - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_POKEMON_LEAGUE - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_ROCK_TUNNEL - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_SEAFOAM_ISLANDS - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_POKEMON_TOWER - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_CERULEAN_CAVE - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_POWER_PLANT - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_ONE_ISLAND - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_TWO_ISLAND - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_THREE_ISLAND - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_FOUR_ISLAND - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_FIVE_ISLAND - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_SEVEN_ISLAND - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_SIX_ISLAND - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_KINDLE_ROAD - MAPSECS_KANTO] = {0x01, 0x06}, + [MAPSEC_TREASURE_BEACH - MAPSECS_KANTO] = {0x01, 0x02}, + [MAPSEC_CAPE_BRINK - MAPSECS_KANTO] = {0x01, 0x02}, + [MAPSEC_BOND_BRIDGE - MAPSECS_KANTO] = {0x04, 0x01}, + [MAPSEC_THREE_ISLE_PORT - MAPSECS_KANTO] = {0x02, 0x01}, + [MAPSEC_SEVII_ISLE_6 - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_SEVII_ISLE_7 - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_SEVII_ISLE_8 - MAPSECS_KANTO] = {0x03, 0x01}, + [MAPSEC_SEVII_ISLE_9 - MAPSECS_KANTO] = {0x01, 0x02}, + [MAPSEC_RESORT_GORGEOUS - MAPSECS_KANTO] = {0x03, 0x01}, + [MAPSEC_WATER_LABYRINTH - MAPSECS_KANTO] = {0x03, 0x01}, + [MAPSEC_FIVE_ISLE_MEADOW - MAPSECS_KANTO] = {0x01, 0x03}, + [MAPSEC_MEMORIAL_PILLAR - MAPSECS_KANTO] = {0x01, 0x03}, + [MAPSEC_OUTCAST_ISLAND - MAPSECS_KANTO] = {0x01, 0x03}, + [MAPSEC_GREEN_PATH - MAPSECS_KANTO] = {0x03, 0x01}, + [MAPSEC_WATER_PATH - MAPSECS_KANTO] = {0x01, 0x05}, + [MAPSEC_RUIN_VALLEY - MAPSECS_KANTO] = {0x02, 0x02}, + [MAPSEC_TRAINER_TOWER - MAPSECS_KANTO] = {0x01, 0x02}, + [MAPSEC_CANYON_ENTRANCE - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_SEVAULT_CANYON - MAPSECS_KANTO] = {0x01, 0x03}, + [MAPSEC_TANOBY_RUINS - MAPSECS_KANTO] = {0x07, 0x01}, + [MAPSEC_SEVII_ISLE_22 - MAPSECS_KANTO] = {0x01, 0x03}, + [MAPSEC_SEVII_ISLE_23 - MAPSECS_KANTO] = {0x06, 0x01}, + [MAPSEC_SEVII_ISLE_24 - MAPSECS_KANTO] = {0x01, 0x03}, + [MAPSEC_NAVEL_ROCK - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_MT_EMBER - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_BERRY_FOREST - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_ICEFALL_CAVE - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_ROCKET_WAREHOUSE - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_TRAINER_TOWER_2 - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_DOTTED_HOLE - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_LOST_CAVE - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_PATTERN_BUSH - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_ALTERING_CAVE - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_TANOBY_CHAMBERS - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_THREE_ISLE_PATH - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_TANOBY_KEY - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_BIRTH_ISLAND - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_MONEAN_CHAMBER - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_LIPTOO_CHAMBER - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_WEEPTH_CHAMBER - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_DILFORD_CHAMBER - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_SCUFIB_CHAMBER - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_RIXY_CHAMBER - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_VIAPOIS_CHAMBER - MAPSECS_KANTO] = {0x01, 0x01}, + [MAPSEC_EMBER_SPA - MAPSECS_KANTO] = {0x01, 0x01} +}; + +const u8 gUnknown_83F2490[][15][22] = { + { + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, + MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, + MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, + MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_24, MAPSEC_ROUTE_25, + MAPSEC_ROUTE_25, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, + MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_24, MAPSEC_NONE, + MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_INDIGO_PLATEAU, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, + MAPSEC_NONE, MAPSEC_ROUTE_4_FLYDUP, MAPSEC_ROUTE_4, MAPSEC_ROUTE_4, MAPSEC_ROUTE_4, MAPSEC_ROUTE_4, + MAPSEC_ROUTE_4, MAPSEC_CERULEAN_CITY, MAPSEC_ROUTE_9, MAPSEC_ROUTE_9, MAPSEC_ROUTE_9, MAPSEC_ROUTE_10_FLYDUP, + MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_23, MAPSEC_NONE, MAPSEC_PEWTER_CITY, MAPSEC_ROUTE_3, MAPSEC_ROUTE_3, + MAPSEC_ROUTE_3, MAPSEC_ROUTE_3, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, + MAPSEC_ROUTE_5, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_10, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_23, MAPSEC_NONE, MAPSEC_ROUTE_2, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, + MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_5, MAPSEC_NONE, + MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_10, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_23, MAPSEC_NONE, MAPSEC_ROUTE_2, MAPSEC_NONE, MAPSEC_NONE, + MAPSEC_ROUTE_16, MAPSEC_ROUTE_16, MAPSEC_ROUTE_16, MAPSEC_ROUTE_16, MAPSEC_CELADON_CITY, MAPSEC_ROUTE_7, + MAPSEC_ROUTE_7, MAPSEC_SAFFRON_CITY, MAPSEC_ROUTE_8, MAPSEC_ROUTE_8, MAPSEC_ROUTE_8, MAPSEC_LAVENDER_TOWN, + MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_23, MAPSEC_NONE, MAPSEC_ROUTE_2, MAPSEC_NONE, MAPSEC_NONE, + MAPSEC_ROUTE_17, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_6, + MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_12, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_22, MAPSEC_ROUTE_22, MAPSEC_VIRIDIAN_CITY, MAPSEC_NONE, MAPSEC_NONE, + MAPSEC_ROUTE_17, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_6, + MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_12, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_1, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_17, + MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_VERMILION_CITY, + MAPSEC_ROUTE_11, MAPSEC_ROUTE_11, MAPSEC_ROUTE_11, MAPSEC_ROUTE_12, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_1, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_17, + MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, + MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_12, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_PALLET_TOWN, MAPSEC_NONE, MAPSEC_NONE, + MAPSEC_ROUTE_17, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, + MAPSEC_ROUTE_14, MAPSEC_ROUTE_13, MAPSEC_ROUTE_13, MAPSEC_ROUTE_12, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_21, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_18, + MAPSEC_ROUTE_18, MAPSEC_ROUTE_18, MAPSEC_ROUTE_18, MAPSEC_ROUTE_18, MAPSEC_FUCHSIA_CITY, MAPSEC_ROUTE_15, + MAPSEC_ROUTE_15, MAPSEC_ROUTE_14, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, + MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_21, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, + MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_19, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, + MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_CINNABAR_ISLAND, MAPSEC_ROUTE_20, MAPSEC_ROUTE_20, + MAPSEC_ROUTE_20, MAPSEC_ROUTE_20, MAPSEC_ROUTE_20, MAPSEC_ROUTE_20, MAPSEC_ROUTE_20, MAPSEC_ROUTE_19, + MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, + MAPSEC_NONE} + }, { + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_MT_MOON, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_CERULEAN_CAVE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROCK_TUNNEL, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_KANTO_VICTORY_ROAD, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_POWER_PLANT, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_DIGLETTS_CAVE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_VIRIDIAN_FOREST, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_POKEMON_TOWER, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_DIGLETTS_CAVE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_KANTO_SAFARI_ZONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_POKEMON_MANSION, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_SEAFOAM_ISLANDS, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE} + } +}; + +const u8 gUnknown_83F2724[][15][22] = { + { + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_KINDLE_ROAD, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_KINDLE_ROAD, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_KINDLE_ROAD, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_KINDLE_ROAD, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_KINDLE_ROAD, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_CAPE_BRINK, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_ONE_ISLAND, MAPSEC_KINDLE_ROAD, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_CAPE_BRINK, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_TREASURE_BEACH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_TWO_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_TREASURE_BEACH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_BOND_BRIDGE, MAPSEC_BOND_BRIDGE, MAPSEC_BOND_BRIDGE, MAPSEC_BOND_BRIDGE, MAPSEC_THREE_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_THREE_ISLE_PORT, MAPSEC_THREE_ISLE_PORT, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE} + }, { + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_MT_EMBER, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_BERRY_FOREST, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE} + } +}; + +const u8 gUnknown_83F29B8[][15][22] = { + { + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_FOUR_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NAVEL_ROCK, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_RESORT_GORGEOUS, MAPSEC_RESORT_GORGEOUS, MAPSEC_RESORT_GORGEOUS, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_WATER_LABYRINTH, MAPSEC_WATER_LABYRINTH, MAPSEC_WATER_LABYRINTH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_FIVE_ISLAND, MAPSEC_FIVE_ISLE_MEADOW, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_FIVE_ISLE_MEADOW, MAPSEC_MEMORIAL_PILLAR, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_MEMORIAL_PILLAR, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_MEMORIAL_PILLAR, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE} + }, { + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ICEFALL_CAVE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_LOST_CAVE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE} + } +}; + +const u8 gUnknown_83F2C4C[][15][22] = { + { + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_OUTCAST_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_OUTCAST_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_OUTCAST_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_GREEN_PATH, MAPSEC_GREEN_PATH, MAPSEC_GREEN_PATH, MAPSEC_WATER_PATH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_WATER_PATH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_SIX_ISLAND, MAPSEC_WATER_PATH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_TRAINER_TOWER, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_WATER_PATH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_TRAINER_TOWER, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_RUIN_VALLEY, MAPSEC_RUIN_VALLEY, MAPSEC_WATER_PATH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_SEVEN_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_RUIN_VALLEY, MAPSEC_RUIN_VALLEY, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_CANYON_ENTRANCE, MAPSEC_SEVAULT_CANYON, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_SEVAULT_CANYON, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_SEVAULT_CANYON, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_TANOBY_RUINS, MAPSEC_TANOBY_RUINS, MAPSEC_TANOBY_RUINS, MAPSEC_TANOBY_RUINS, MAPSEC_TANOBY_RUINS, MAPSEC_TANOBY_RUINS, MAPSEC_TANOBY_RUINS, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_BIRTH_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE} + }, { + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ALTERING_CAVE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_PATTERN_BUSH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_DOTTED_HOLE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_TANOBY_CHAMBERS, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, + {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE} + } +}; + +const u8 gUnknown_83F2EE0[][3] = { + [MAPSEC_PALLET_TOWN - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), SPAWN_PALLET_TOWN}, + [MAPSEC_VIRIDIAN_CITY - MAPSECS_KANTO] = {MAP_GROUP(VIRIDIAN_CITY), MAP_NUM(VIRIDIAN_CITY), SPAWN_VIRIDIAN_CITY}, + [MAPSEC_PEWTER_CITY - MAPSECS_KANTO] = {MAP_GROUP(PEWTER_CITY), MAP_NUM(PEWTER_CITY), SPAWN_PEWTER_CITY}, + [MAPSEC_CERULEAN_CITY - MAPSECS_KANTO] = {MAP_GROUP(CERULEAN_CITY), MAP_NUM(CERULEAN_CITY), SPAWN_CERULEAN_CITY}, + [MAPSEC_LAVENDER_TOWN - MAPSECS_KANTO] = {MAP_GROUP(LAVENDER_TOWN), MAP_NUM(LAVENDER_TOWN), SPAWN_LAVENDER_TOWN}, + [MAPSEC_VERMILION_CITY - MAPSECS_KANTO] = {MAP_GROUP(VERMILION_CITY), MAP_NUM(VERMILION_CITY), SPAWN_VERMILION_CITY}, + [MAPSEC_CELADON_CITY - MAPSECS_KANTO] = {MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY), SPAWN_CELADON_CITY}, + [MAPSEC_FUCHSIA_CITY - MAPSECS_KANTO] = {MAP_GROUP(FUCHSIA_CITY), MAP_NUM(FUCHSIA_CITY), SPAWN_FUCHSIA_CITY}, + [MAPSEC_CINNABAR_ISLAND - MAPSECS_KANTO] = {MAP_GROUP(CINNABAR_ISLAND), MAP_NUM(CINNABAR_ISLAND), SPAWN_CINNABAR_ISLAND}, + [MAPSEC_INDIGO_PLATEAU - MAPSECS_KANTO] = {MAP_GROUP(INDIGO_PLATEAU_EXTERIOR), MAP_NUM(INDIGO_PLATEAU_EXTERIOR), SPAWN_INDIGO_PLATEAU}, + [MAPSEC_SAFFRON_CITY - MAPSECS_KANTO] = {MAP_GROUP(SAFFRON_CITY), MAP_NUM(SAFFRON_CITY), SPAWN_SAFFRON_CITY}, + [MAPSEC_ROUTE_4_FLYDUP - MAPSECS_KANTO] = {MAP_GROUP(ROUTE4), MAP_NUM(ROUTE4), SPAWN_ROUTE4}, + [MAPSEC_ROUTE_10_FLYDUP - MAPSECS_KANTO] = {MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10), SPAWN_ROUTE10}, + [MAPSEC_ROUTE_1 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE1), MAP_NUM(ROUTE1), 0}, + [MAPSEC_ROUTE_2 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE2), MAP_NUM(ROUTE2), 0}, + [MAPSEC_ROUTE_3 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE3), MAP_NUM(ROUTE3), 0}, + [MAPSEC_ROUTE_4 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE4), MAP_NUM(ROUTE4), 0}, + [MAPSEC_ROUTE_5 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE5), MAP_NUM(ROUTE5), 0}, + [MAPSEC_ROUTE_6 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE6), MAP_NUM(ROUTE6), 0}, + [MAPSEC_ROUTE_7 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE7), MAP_NUM(ROUTE7), 0}, + [MAPSEC_ROUTE_8 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8), 0}, + [MAPSEC_ROUTE_9 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE9), MAP_NUM(ROUTE9), 0}, + [MAPSEC_ROUTE_10 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10), 0}, + [MAPSEC_ROUTE_11 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11), 0}, + [MAPSEC_ROUTE_12 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE12), MAP_NUM(ROUTE12), 0}, + [MAPSEC_ROUTE_13 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13), 0}, + [MAPSEC_ROUTE_14 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14), 0}, + [MAPSEC_ROUTE_15 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15), 0}, + [MAPSEC_ROUTE_16 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE16), MAP_NUM(ROUTE16), 0}, + [MAPSEC_ROUTE_17 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17), 0}, + [MAPSEC_ROUTE_18 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE18), MAP_NUM(ROUTE18), 0}, + [MAPSEC_ROUTE_19 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19), 0}, + [MAPSEC_ROUTE_20 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20), 0}, + [MAPSEC_ROUTE_21 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH), 0}, + [MAPSEC_ROUTE_22 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE22), MAP_NUM(ROUTE22), 0}, + [MAPSEC_ROUTE_23 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE23), MAP_NUM(ROUTE23), 0}, + [MAPSEC_ROUTE_24 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE24), MAP_NUM(ROUTE24), 0}, + [MAPSEC_ROUTE_25 - MAPSECS_KANTO] = {MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25), 0}, + [MAPSEC_VIRIDIAN_FOREST - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_MT_MOON - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_S_S_ANNE - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_UNDERGROUND_PATH - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_UNDERGROUND_PATH_2 - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_DIGLETTS_CAVE - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_KANTO_VICTORY_ROAD - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_ROCKET_HIDEOUT - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_SILPH_CO - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_POKEMON_MANSION - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_KANTO_SAFARI_ZONE - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_POKEMON_LEAGUE - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_ROCK_TUNNEL - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_SEAFOAM_ISLANDS - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_POKEMON_TOWER - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_CERULEAN_CAVE - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_POWER_PLANT - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_ONE_ISLAND - MAPSECS_KANTO] = {MAP_GROUP(ONE_ISLAND), MAP_NUM(ONE_ISLAND), SPAWN_ONE_ISLAND}, + [MAPSEC_TWO_ISLAND - MAPSECS_KANTO] = {MAP_GROUP(TWO_ISLAND), MAP_NUM(TWO_ISLAND), SPAWN_TWO_ISLAND}, + [MAPSEC_THREE_ISLAND - MAPSECS_KANTO] = {MAP_GROUP(THREE_ISLAND), MAP_NUM(THREE_ISLAND), SPAWN_THREE_ISLAND}, + [MAPSEC_FOUR_ISLAND - MAPSECS_KANTO] = {MAP_GROUP(FOUR_ISLAND), MAP_NUM(FOUR_ISLAND), SPAWN_FOUR_ISLAND}, + [MAPSEC_FIVE_ISLAND - MAPSECS_KANTO] = {MAP_GROUP(FIVE_ISLAND), MAP_NUM(FIVE_ISLAND), SPAWN_FIVE_ISLAND}, + [MAPSEC_SEVEN_ISLAND - MAPSECS_KANTO] = {MAP_GROUP(SEVEN_ISLAND), MAP_NUM(SEVEN_ISLAND), SPAWN_SEVEN_ISLAND}, + [MAPSEC_SIX_ISLAND - MAPSECS_KANTO] = {MAP_GROUP(SIX_ISLAND), MAP_NUM(SIX_ISLAND), SPAWN_SIX_ISLAND}, + [MAPSEC_KINDLE_ROAD - MAPSECS_KANTO] = {MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD), 0}, + [MAPSEC_TREASURE_BEACH - MAPSECS_KANTO] = {MAP_GROUP(ONE_ISLAND_TREASURE_BEACH), MAP_NUM(ONE_ISLAND_TREASURE_BEACH), 0}, + [MAPSEC_CAPE_BRINK - MAPSECS_KANTO] = {MAP_GROUP(TWO_ISLAND_CAPE_BRINK), MAP_NUM(TWO_ISLAND_CAPE_BRINK), 0}, + [MAPSEC_BOND_BRIDGE - MAPSECS_KANTO] = {MAP_GROUP(THREE_ISLAND_BOND_BRIDGE), MAP_NUM(THREE_ISLAND_BOND_BRIDGE), 0}, + [MAPSEC_THREE_ISLE_PORT - MAPSECS_KANTO] = {MAP_GROUP(THREE_ISLAND_PORT), MAP_NUM(THREE_ISLAND_PORT), 0}, + [MAPSEC_SEVII_ISLE_6 - MAPSECS_KANTO] = {MAP_GROUP(UNKNOWN_MAP_03_50), MAP_NUM(UNKNOWN_MAP_03_50), 0}, + [MAPSEC_SEVII_ISLE_7 - MAPSECS_KANTO] = {MAP_GROUP(UNKNOWN_MAP_03_51), MAP_NUM(UNKNOWN_MAP_03_51), 0}, + [MAPSEC_SEVII_ISLE_8 - MAPSECS_KANTO] = {MAP_GROUP(UNKNOWN_MAP_03_52), MAP_NUM(UNKNOWN_MAP_03_52), 0}, + [MAPSEC_SEVII_ISLE_9 - MAPSECS_KANTO] = {MAP_GROUP(UNKNOWN_MAP_03_53), MAP_NUM(UNKNOWN_MAP_03_53), 0}, + [MAPSEC_RESORT_GORGEOUS - MAPSECS_KANTO] = {MAP_GROUP(FIVE_ISLAND_RESORT_GORGEOUS), MAP_NUM(FIVE_ISLAND_RESORT_GORGEOUS), 0}, + [MAPSEC_WATER_LABYRINTH - MAPSECS_KANTO] = {MAP_GROUP(FIVE_ISLAND_WATER_LABYRINTH), MAP_NUM(FIVE_ISLAND_WATER_LABYRINTH), 0}, + [MAPSEC_FIVE_ISLE_MEADOW - MAPSECS_KANTO] = {MAP_GROUP(FIVE_ISLAND_MEADOW), MAP_NUM(FIVE_ISLAND_MEADOW), 0}, + [MAPSEC_MEMORIAL_PILLAR - MAPSECS_KANTO] = {MAP_GROUP(FIVE_ISLAND_MEMORIAL_PILLAR), MAP_NUM(FIVE_ISLAND_MEMORIAL_PILLAR), 0}, + [MAPSEC_OUTCAST_ISLAND - MAPSECS_KANTO] = {MAP_GROUP(SIX_ISLAND_OUTCAST_ISLAND), MAP_NUM(SIX_ISLAND_OUTCAST_ISLAND), 0}, + [MAPSEC_GREEN_PATH - MAPSECS_KANTO] = {MAP_GROUP(SIX_ISLAND_GREEN_PATH), MAP_NUM(SIX_ISLAND_GREEN_PATH), 0}, + [MAPSEC_WATER_PATH - MAPSECS_KANTO] = {MAP_GROUP(SIX_ISLAND_WATER_PATH), MAP_NUM(SIX_ISLAND_WATER_PATH), 0}, + [MAPSEC_RUIN_VALLEY - MAPSECS_KANTO] = {MAP_GROUP(SIX_ISLAND_RUIN_VALLEY), MAP_NUM(SIX_ISLAND_RUIN_VALLEY), 0}, + [MAPSEC_TRAINER_TOWER - MAPSECS_KANTO] = {MAP_GROUP(SEVEN_ISLAND_TRAINER_TOWER), MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER), 0}, + [MAPSEC_CANYON_ENTRANCE - MAPSECS_KANTO] = {MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE), 0}, + [MAPSEC_SEVAULT_CANYON - MAPSECS_KANTO] = {MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON), 0}, + [MAPSEC_TANOBY_RUINS - MAPSECS_KANTO] = {MAP_GROUP(SEVEN_ISLAND_TANOBY_RUINS), MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS), 0}, + [MAPSEC_SEVII_ISLE_22 - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_SEVII_ISLE_23 - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_SEVII_ISLE_24 - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_NAVEL_ROCK - MAPSECS_KANTO] = {MAP_GROUP(NAVEL_ROCK_EXTERIOR), MAP_NUM(NAVEL_ROCK_EXTERIOR), 0}, + [MAPSEC_MT_EMBER - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_BERRY_FOREST - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_ICEFALL_CAVE - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_ROCKET_WAREHOUSE - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_TRAINER_TOWER_2 - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_DOTTED_HOLE - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_LOST_CAVE - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_PATTERN_BUSH - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_ALTERING_CAVE - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_TANOBY_CHAMBERS - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_THREE_ISLE_PATH - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_TANOBY_KEY - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_BIRTH_ISLAND - MAPSECS_KANTO] = {MAP_GROUP(BIRTH_ISLAND_EXTERIOR), MAP_NUM(BIRTH_ISLAND_EXTERIOR), 0}, + [MAPSEC_MONEAN_CHAMBER - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_LIPTOO_CHAMBER - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_WEEPTH_CHAMBER - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_DILFORD_CHAMBER - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_SCUFIB_CHAMBER - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_RIXY_CHAMBER - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_VIAPOIS_CHAMBER - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, + [MAPSEC_EMBER_SPA - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0}, +}; static void RegionMap_DarkenPalette(u16 *pal, u16 size, u16 tint) { @@ -1377,7 +2295,7 @@ void sub_80C1880(void) const u8 *sub_80C18E0(u16 a0) { u8 i; - for (i = 0; i < 19; i++) + for (i = 0; i < NELEMS(gUnknown_83F1B3C); i++) { if (gUnknown_83F1B3C[i].field_0 == a0) return gUnknown_83F1B3C[i].field_8; @@ -1388,7 +2306,7 @@ const u8 *sub_80C18E0(u16 a0) const u8 *sub_80C1920(u16 a0) { u8 i; - for (i = 0; i < 19; i++) + for (i = 0; i < NELEMS(gUnknown_83F1B3C); i++) { if (gUnknown_83F1B3C[i].field_0 == a0) return gUnknown_83F1B3C[i].field_4; -- cgit v1.2.3 From 79fb35d4d2b45ac9da6aaa310be597b685e7e845 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 7 Jan 2020 20:56:54 -0500 Subject: Declutter global namespace --- src/region_map.c | 626 +++++++++++++++++++++++++++---------------------------- 1 file changed, 313 insertions(+), 313 deletions(-) diff --git a/src/region_map.c b/src/region_map.c index bd2fe9dd6..7415deb32 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -218,161 +218,161 @@ struct UnkStruct_20399FC u8 field_2; }; -EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL; -EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL; -EWRAM_DATA struct UnkStruct_20399DC * gUnknown_20399DC = NULL; -EWRAM_DATA struct UnkStruct_20399E0 * gUnknown_20399E0 = NULL; -EWRAM_DATA struct UnkStruct_20399E4 * gUnknown_20399E4 = NULL; -EWRAM_DATA struct UnkStruct_20399E8 * gUnknown_20399E8 = NULL; -EWRAM_DATA struct UnkStruct_20399EC * gUnknown_20399EC = NULL; -EWRAM_DATA struct UnkStruct_20399F0 * gUnknown_20399F0[3] = {}; -EWRAM_DATA struct UnkStruct_20399FC * gUnknown_20399FC = NULL; +static EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL; +static EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL; +static EWRAM_DATA struct UnkStruct_20399DC * gUnknown_20399DC = NULL; +static EWRAM_DATA struct UnkStruct_20399E0 * gUnknown_20399E0 = NULL; +static EWRAM_DATA struct UnkStruct_20399E4 * gUnknown_20399E4 = NULL; +static EWRAM_DATA struct UnkStruct_20399E8 * gUnknown_20399E8 = NULL; +static EWRAM_DATA struct UnkStruct_20399EC * gUnknown_20399EC = NULL; +static EWRAM_DATA struct UnkStruct_20399F0 * gUnknown_20399F0[3] = {}; +static EWRAM_DATA struct UnkStruct_20399FC * gUnknown_20399FC = NULL; static void sub_80BFFD0(void); -void sub_80C0100(void); -bool8 sub_80C0238(void); -void sub_80C03E8(void); -void sub_80C04E4(u8 taskId); -void sub_80C07F8(u8 taskId); -void sub_80C0820(u8 taskId); -void sub_80C08B4(void); -void sub_80C08E0(void); -void sub_80C08F4(void); -void sub_80C0904(void); -void sub_80C0A2C(void); -void sub_80C0A6C(void); -void sub_80C0A88(u8 a0); -void sub_80C0AB8(void); -void sub_80C0B18(void); -void sub_80C0B9C(void); -void sub_80C0BB0(void); -void sub_80C0CC8(u8 bg, u16 *map); -bool8 sub_80C0E04(u8 a0); -u8 sub_80C0E20(void); -void sub_80C0E70(u8 a0, u8 taskId, TaskFunc taskFunc); -void sub_80C1098(u8 taskId); -void sub_80C1280(u8 taskId); -bool8 sub_80C12EC(void); -void sub_80C1324(u8 bg, u16 *map); -void sub_80C1390(void); -bool8 sub_80C144C(void); -bool8 sub_80C1478(void); -bool8 sub_80C16D0(void); -void sub_80C1754(u8 a0, u16 a1, u16 a2); -void sub_80C176C(u8 a0, u16 a1, u16 a2); -void sub_80C1880(void); -void sub_80C195C(u8 a0, u8 taskId, TaskFunc taskFunc); -void sub_80C1A94(u8 taskId); -void sub_80C1BE0(u8 taskId); -void sub_80C1E14(u8 taskId); -void sub_80C1E94(void); -void sub_80C1E78(u8 bgId, const u16 * tilemap); -bool8 sub_80C1F80(bool8 a0); -void sub_80C2208(u8 taskId, TaskFunc taskFunc); -void sub_80C24BC(void); -void sub_80C267C(u8 taskId); -void sub_80C25BC(void); -void sub_80C2604(void); -bool8 sub_80C29A4(void); -void sub_80C2B48(void); -void sub_80C2C1C(u8 taskId); -void sub_80C2C7C(u8 taskId); -bool8 sub_80C2E1C(void); -void sub_80C3008(u16 a0, u16 a1); -void sub_80C309C(void); -void sub_80C3154(bool8 a0); -void sub_80C3178(void); -void sub_80C3188(void); -u8 sub_80C31C0(void); -u8 sub_80C3348(void); -u8 sub_80C3400(void); -void sub_80C3418(void); -u16 sub_80C3508(void); -u16 sub_80C3514(void); -u16 sub_80C3520(void); -u16 sub_80C3580(void); -u8 sub_80C35DC(u8 a0); -u8 sub_80C3878(u8 a0); -u8 sub_80C3AC8(u8 a0); -void sub_80C3D40(void); -u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3); -void sub_80C41D8(u16 a0, u16 a1); -void sub_80C4244(void); -void sub_80C4324(bool8 a0); -void sub_80C4348(void); -u16 sub_80C4380(); -u16 sub_80C438C(); -void sub_80C4398(u8 a0, u8 taskId, TaskFunc taskFunc); -void sub_80C440C(u8 taskId); -void sub_80C44E4(u8 taskId); -void sub_80C4750(void); -void sub_80C47F0(void); -void sub_80C48BC(u8 a0, u8 a1, bool8 a2); -void sub_80C4960(u8 a0, u8 a1, bool8 a2); -void sub_80C4A04(void); -bool8 sub_80C4AAC(u8 a0); -bool8 sub_80C4B30(u8 a0); -void sub_80C4BE4(void); -void sub_80C4C2C(u8 a0, u16 a1, u16 a2); -void sub_80C4C48(u16 a0); -void sub_80C4C5C(u16 a0, u16 a1); -void sub_80C4C74(u16 a0, u16 a1); -void sub_80C4C88(u16 a0); -void sub_80C4C9C(u8 a0, u8 a1); -void sub_80C4CF0(u8 a0, const struct UnkStruct_80C4CF0 *a1); -void sub_80C4D30(void); -void sub_80C4E18(const u8 *str); -void sub_80C4E74(const u8 *str); -void sub_80C4ED0(bool8 a0); -void sub_80C4F08(u8 taskId); -void sub_80C51E8(void); -void sub_80C5208(u8 taskId); -void sub_80C527C(u16 a0); +static void sub_80C0100(void); +static bool8 sub_80C0238(void); +static void sub_80C03E8(void); +static void sub_80C04E4(u8 taskId); +static void sub_80C07F8(u8 taskId); +static void sub_80C0820(u8 taskId); +static void sub_80C08B4(void); +static void sub_80C08E0(void); +static void sub_80C08F4(void); +static void sub_80C0904(void); +static void sub_80C0A2C(void); +static void sub_80C0A6C(void); +static void sub_80C0A88(u8 a0); +static void sub_80C0AB8(void); +static void sub_80C0B18(void); +static void sub_80C0B9C(void); +static void sub_80C0BB0(void); +static void sub_80C0CC8(u8 bg, u16 *map); +static bool8 sub_80C0E04(u8 a0); +static u8 sub_80C0E20(void); +static void sub_80C0E70(u8 a0, u8 taskId, TaskFunc taskFunc); +static void sub_80C1098(u8 taskId); +static void sub_80C1280(u8 taskId); +static bool8 sub_80C12EC(void); +static void sub_80C1324(u8 bg, u16 *map); +static void sub_80C1390(void); +static bool8 sub_80C144C(void); +static bool8 sub_80C1478(void); +static bool8 sub_80C16D0(void); +static void sub_80C1754(u8 a0, u16 a1, u16 a2); +static void sub_80C176C(u8 a0, u16 a1, u16 a2); +static void sub_80C1880(void); +static void sub_80C195C(u8 a0, u8 taskId, TaskFunc taskFunc); +static void sub_80C1A94(u8 taskId); +static void sub_80C1BE0(u8 taskId); +static void sub_80C1E14(u8 taskId); +static void sub_80C1E94(void); +static void sub_80C1E78(u8 bgId, const u16 * tilemap); +static bool8 sub_80C1F80(bool8 a0); +static void sub_80C2208(u8 taskId, TaskFunc taskFunc); +static void sub_80C24BC(void); +static void sub_80C267C(u8 taskId); +static void sub_80C25BC(void); +static void sub_80C2604(void); +static bool8 sub_80C29A4(void); +static void sub_80C2B48(void); +static void sub_80C2C1C(u8 taskId); +static void sub_80C2C7C(u8 taskId); +static bool8 sub_80C2E1C(void); +static void sub_80C3008(u16 a0, u16 a1); +static void sub_80C309C(void); +static void sub_80C3154(bool8 a0); +static void sub_80C3178(void); +static void sub_80C3188(void); +static u8 sub_80C31C0(void); +static u8 sub_80C3348(void); +static u8 sub_80C3400(void); +static void sub_80C3418(void); +static u16 sub_80C3508(void); +static u16 sub_80C3514(void); +static u16 sub_80C3520(void); +static u16 sub_80C3580(void); +static u8 sub_80C35DC(u8 a0); +static u8 sub_80C3878(u8 a0); +static u8 sub_80C3AC8(u8 a0); +static void sub_80C3D40(void); +static u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3); +static void sub_80C41D8(u16 a0, u16 a1); +static void sub_80C4244(void); +static void sub_80C4324(bool8 a0); +static void sub_80C4348(void); +static u16 sub_80C4380(); +static u16 sub_80C438C(); +static void sub_80C4398(u8 a0, u8 taskId, TaskFunc taskFunc); +static void sub_80C440C(u8 taskId); +static void sub_80C44E4(u8 taskId); +static void sub_80C4750(void); +static void sub_80C47F0(void); +static void sub_80C48BC(u8 a0, u8 a1, bool8 a2); +static void sub_80C4960(u8 a0, u8 a1, bool8 a2); +static void sub_80C4A04(void); +static bool8 sub_80C4AAC(u8 a0); +static bool8 sub_80C4B30(u8 a0); +static void sub_80C4BE4(void); +static void sub_80C4C2C(u8 a0, u16 a1, u16 a2); +static void sub_80C4C48(u16 a0); +static void sub_80C4C5C(u16 a0, u16 a1); +static void sub_80C4C74(u16 a0, u16 a1); +static void sub_80C4C88(u16 a0); +static void sub_80C4C9C(u8 a0, u8 a1); +static void sub_80C4CF0(u8 a0, const struct UnkStruct_80C4CF0 *a1); +static void sub_80C4D30(void); +static void sub_80C4E18(const u8 *str); +static void sub_80C4E74(const u8 *str); +static void sub_80C4ED0(bool8 a0); +static void sub_80C4F08(u8 taskId); +static void sub_80C51E8(void); +static void sub_80C5208(u8 taskId); +static void sub_80C527C(u16 a0); #include "data/text/map_section_names.h" -const u16 gUnknown_83EF23C[] = INCBIN_U16("graphics/region_map/unk_83EF23C.gbapal"); -const u16 gUnknown_83EF25C[] = INCBIN_U16("graphics/region_map/unk_83EF25C.gbapal"); -const u16 gUnknown_83EF27C[] = INCBIN_U16("graphics/region_map/unk_83EF27C.gbapal"); -const u16 gUnknown_83EF29C[] = INCBIN_U16("graphics/region_map/unk_83EF29C.gbapal"); -const u16 gUnknown_83EF2BC[] = INCBIN_U16("graphics/region_map/unk_83EF2BC.gbapal"); -const u16 gUnknown_83EF2DC[] = INCBIN_U16("graphics/region_map/unk_83EF2DC.gbapal"); -const u16 _83EF2FC[] = { +static const u16 gUnknown_83EF23C[] = INCBIN_U16("graphics/region_map/unk_83EF23C.gbapal"); +static const u16 gUnknown_83EF25C[] = INCBIN_U16("graphics/region_map/unk_83EF25C.gbapal"); +static const u16 gUnknown_83EF27C[] = INCBIN_U16("graphics/region_map/unk_83EF27C.gbapal"); +static const u16 gUnknown_83EF29C[] = INCBIN_U16("graphics/region_map/unk_83EF29C.gbapal"); +static const u16 gUnknown_83EF2BC[] = INCBIN_U16("graphics/region_map/unk_83EF2BC.gbapal"); +static const u16 gUnknown_83EF2DC[] = INCBIN_U16("graphics/region_map/unk_83EF2DC.gbapal"); +static const u16 _83EF2FC[] = { RGB(0, 0, 31), RGB(0, 12, 31), RGB_WHITE, RGB_WHITE }; -const u16 gUnknown_83EF384[] = INCBIN_U16("graphics/region_map/unk_83EF384.gbapal"); -const u16 gUnknown_83EF3A4[] = INCBIN_U16("graphics/region_map/unk_83EF3A4.gbapal"); -const u32 gUnknown_83EF3C4[] = INCBIN_U32("graphics/region_map/unk_83EF3C4.4bpp.lz"); -const u32 gUnknown_83EF450[] = INCBIN_U32("graphics/region_map/unk_83EF450.4bpp.lz"); -const u32 gUnknown_83EF4E0[] = INCBIN_U32("graphics/region_map/unk_83EF4E0.4bpp.lz"); -const u32 gUnknown_83EF524[] = INCBIN_U32("graphics/region_map/unk_83EF524.4bpp.lz"); -const u32 gUnknown_83EF59C[] = INCBIN_U32("graphics/region_map/unk_83EF59C.4bpp.lz"); -const u32 gUnknown_83EF61C[] = INCBIN_U32("graphics/region_map/unk_83EF61C.4bpp.lz"); -const u32 gUnknown_83F0330[] = INCBIN_U32("graphics/region_map/unk_83F0330.4bpp.lz"); -const u32 gUnknown_83F0580[] = INCBIN_U32("graphics/region_map/unk_83F0580.bin.lz"); -const u32 gUnknown_83F089C[] = INCBIN_U32("graphics/region_map/unk_83F089C.bin.lz"); -const u32 gUnknown_83F0AFC[] = INCBIN_U32("graphics/region_map/unk_83F0AFC.bin.lz"); -const u32 gUnknown_83F0C0C[] = INCBIN_U32("graphics/region_map/unk_83F0C0C.bin.lz"); -const u32 gUnknown_83F0CF0[] = INCBIN_U32("graphics/region_map/unk_83F0CF0.bin.lz"); -const u32 gUnknown_83F0E0C[] = INCBIN_U32("graphics/region_map/unk_83F0E0C.bin.lz"); -const u32 gUnknown_83F0F1C[] = INCBIN_U32("graphics/region_map/unk_83F0F1C.bin.lz"); -const u32 gUnknown_83F1084[] = INCBIN_U32("graphics/region_map/unk_83F1084.bin.lz"); -const u32 gUnknown_83F1190[] = INCBIN_U32("graphics/region_map/unk_83F1190.bin.lz"); -const u32 gUnknown_83F12CC[] = INCBIN_U32("graphics/region_map/unk_83F12CC.4bpp.lz"); -const u32 gUnknown_83F13EC[] = INCBIN_U32("graphics/region_map/unk_83F13EC.4bpp.lz"); -const u32 gUnknown_83F1550[] = INCBIN_U32("graphics/region_map/unk_83F1550.4bpp.lz"); -const u32 gUnknown_83F1640[] = INCBIN_U32("graphics/region_map/unk_83F1640.4bpp.lz"); -const u32 gUnknown_83F1738[] = INCBIN_U32("graphics/region_map/unk_83F1738.4bpp.lz"); -const u32 gUnknown_83F1804[] = INCBIN_U32("graphics/region_map/unk_83F1804.4bpp.lz"); -const u32 gUnknown_83F18D8[] = INCBIN_U32("graphics/region_map/unk_83F18D8.4bpp.lz"); -const u32 gUnknown_83F1908[] = INCBIN_U32("graphics/region_map/unk_83F1908.4bpp.lz"); -const u32 gUnknown_83F1978[] = INCBIN_U32("graphics/region_map/unk_83F1978.4bpp.lz"); -const u32 gUnknown_83F19A0[] = INCBIN_U32("graphics/region_map/unk_83F19A0.bin.lz"); - -const struct BgTemplate gUnknown_83F1A50[] = { +static const u16 gUnknown_83EF384[] = INCBIN_U16("graphics/region_map/unk_83EF384.gbapal"); +static const u16 gUnknown_83EF3A4[] = INCBIN_U16("graphics/region_map/unk_83EF3A4.gbapal"); +static const u32 gUnknown_83EF3C4[] = INCBIN_U32("graphics/region_map/unk_83EF3C4.4bpp.lz"); +static const u32 gUnknown_83EF450[] = INCBIN_U32("graphics/region_map/unk_83EF450.4bpp.lz"); +static const u32 gUnknown_83EF4E0[] = INCBIN_U32("graphics/region_map/unk_83EF4E0.4bpp.lz"); +static const u32 gUnknown_83EF524[] = INCBIN_U32("graphics/region_map/unk_83EF524.4bpp.lz"); +static const u32 gUnknown_83EF59C[] = INCBIN_U32("graphics/region_map/unk_83EF59C.4bpp.lz"); +static const u32 gUnknown_83EF61C[] = INCBIN_U32("graphics/region_map/unk_83EF61C.4bpp.lz"); +static const u32 gUnknown_83F0330[] = INCBIN_U32("graphics/region_map/unk_83F0330.4bpp.lz"); +static const u32 gUnknown_83F0580[] = INCBIN_U32("graphics/region_map/unk_83F0580.bin.lz"); +static const u32 gUnknown_83F089C[] = INCBIN_U32("graphics/region_map/unk_83F089C.bin.lz"); +static const u32 gUnknown_83F0AFC[] = INCBIN_U32("graphics/region_map/unk_83F0AFC.bin.lz"); +static const u32 gUnknown_83F0C0C[] = INCBIN_U32("graphics/region_map/unk_83F0C0C.bin.lz"); +static const u32 gUnknown_83F0CF0[] = INCBIN_U32("graphics/region_map/unk_83F0CF0.bin.lz"); +static const u32 gUnknown_83F0E0C[] = INCBIN_U32("graphics/region_map/unk_83F0E0C.bin.lz"); +static const u32 gUnknown_83F0F1C[] = INCBIN_U32("graphics/region_map/unk_83F0F1C.bin.lz"); +static const u32 gUnknown_83F1084[] = INCBIN_U32("graphics/region_map/unk_83F1084.bin.lz"); +static const u32 gUnknown_83F1190[] = INCBIN_U32("graphics/region_map/unk_83F1190.bin.lz"); +static const u32 gUnknown_83F12CC[] = INCBIN_U32("graphics/region_map/unk_83F12CC.4bpp.lz"); +static const u32 gUnknown_83F13EC[] = INCBIN_U32("graphics/region_map/unk_83F13EC.4bpp.lz"); +static const u32 gUnknown_83F1550[] = INCBIN_U32("graphics/region_map/unk_83F1550.4bpp.lz"); +static const u32 gUnknown_83F1640[] = INCBIN_U32("graphics/region_map/unk_83F1640.4bpp.lz"); +static const u32 gUnknown_83F1738[] = INCBIN_U32("graphics/region_map/unk_83F1738.4bpp.lz"); +static const u32 gUnknown_83F1804[] = INCBIN_U32("graphics/region_map/unk_83F1804.4bpp.lz"); +static const u32 gUnknown_83F18D8[] = INCBIN_U32("graphics/region_map/unk_83F18D8.4bpp.lz"); +static const u32 gUnknown_83F1908[] = INCBIN_U32("graphics/region_map/unk_83F1908.4bpp.lz"); +static const u32 gUnknown_83F1978[] = INCBIN_U32("graphics/region_map/unk_83F1978.4bpp.lz"); +static const u32 gUnknown_83F19A0[] = INCBIN_U32("graphics/region_map/unk_83F19A0.bin.lz"); + +static const struct BgTemplate gUnknown_83F1A50[] = { { .bg = 0, .charBaseIndex = 0, @@ -408,7 +408,7 @@ const struct BgTemplate gUnknown_83F1A50[] = { } }; -const struct WindowTemplate gUnknown_83F1A60[] = { +static const struct WindowTemplate gUnknown_83F1A60[] = { { .bg = 3, .tilemapLeft = 3, @@ -456,12 +456,12 @@ ALIGNED(4) const u8 gUnknown_83F1A90[] = {0, 1, 2}; ALIGNED(4) const u8 gUnknown_83F1A94[] = {0, 7, 2}; ALIGNED(4) const u8 gUnknown_83F1A98[] = {0, 10, 2}; -const u8 *const gUnknown_83F1A9C[] = { +static const u8 *const gUnknown_83F1A9C[] = { gUnknown_83F1A94, gUnknown_83F1A98 }; -const u8 sSeviiMapsecs[3][30] = { +static const u8 sSeviiMapsecs[3][30] = { { MAPSEC_ONE_ISLAND, MAPSEC_TWO_ISLAND, @@ -530,28 +530,28 @@ ALIGNED(4) const u8 gUnknown_83F1B00[3][4] = { {0, 0, 0, 1} }; -const struct UnkStruct_80C4CF0 gUnknown_83F1B0C[3] = { +static const struct UnkStruct_80C4CF0 gUnknown_83F1B0C[3] = { {0x18, 0x10, 0x90, 0x20}, {0x18, 0x20, 0x90, 0x30}, {0x00, 0x00, 0x00, 0x00} }; -const struct OamData gUnknown_83F1B24 = { +static const struct OamData gUnknown_83F1B24 = { .shape = SPRITE_SHAPE(32x32), .size = SPRITE_SIZE(32x32) }; -const union AnimCmd gUnknown_83F1B2C[] = { +static const union AnimCmd gUnknown_83F1B2C[] = { ANIMCMD_FRAME(0x00, 20), ANIMCMD_FRAME(0x10, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd *const gUnknown_83F1B38[] = { +static const union AnimCmd *const gUnknown_83F1B38[] = { gUnknown_83F1B2C }; -const struct UnkStruct_83F1B3C gUnknown_83F1B3C[] = { +static const struct UnkStruct_83F1B3C gUnknown_83F1B3C[] = { { .field_0 = MAPSEC_VIRIDIAN_FOREST, .field_4 = gMapSecName_ViridianForest, @@ -631,105 +631,105 @@ const struct UnkStruct_83F1B3C gUnknown_83F1B3C[] = { } }; -const struct OamData gUnknown_83F1C20 = { +static const struct OamData gUnknown_83F1C20 = { .shape = SPRITE_SHAPE(32x64), .size = SPRITE_SIZE(32x64) }; -const union AnimCmd gAnimCmd_83F1C28[] = { +static const union AnimCmd gAnimCmd_83F1C28[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_JUMP(0) }; -const union AnimCmd *const gUnknown_83F1C30[] = { +static const union AnimCmd *const gUnknown_83F1C30[] = { gAnimCmd_83F1C28 }; -const struct UnkStruct_80C4CF0 gUnknown_83F1C34 = { +static const struct UnkStruct_80C4CF0 gUnknown_83F1C34 = { 0x18, 0x10, 0xD8, 0xA0 }; -const struct OamData gUnknown_83F1C3C = { +static const struct OamData gUnknown_83F1C3C = { .shape = SPRITE_SHAPE(16x16), .size = SPRITE_SIZE(16x16), .priority = 2 }; -const union AnimCmd gAnimCmd_83F1C44[] = { +static const union AnimCmd gAnimCmd_83F1C44[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(4, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd *const gUnknown_83F1C50[] = { +static const union AnimCmd *const gUnknown_83F1C50[] = { gAnimCmd_83F1C44 }; -const struct OamData gUnknown_83F1C54 = { +static const struct OamData gUnknown_83F1C54 = { .shape = SPRITE_SHAPE(16x16), .size = SPRITE_SIZE(16x16), .priority = 2 }; -const union AnimCmd gAnimCmd_83F1C5C[] = { +static const union AnimCmd gAnimCmd_83F1C5C[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_END }; -const union AnimCmd *const gUnknown_83F1C64[] = { +static const union AnimCmd *const gUnknown_83F1C64[] = { gAnimCmd_83F1C5C }; -const struct OamData gUnknown_83F1C68 = { +static const struct OamData gUnknown_83F1C68 = { .shape = SPRITE_SHAPE(16x16), .size = SPRITE_SIZE(16x16), .priority = 2 }; -const struct OamData gUnknown_83F1C70 = { +static const struct OamData gUnknown_83F1C70 = { .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), .priority = 2 }; -const union AnimCmd gAnimCmd_83F1C78[] = { +static const union AnimCmd gAnimCmd_83F1C78[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(4, 60), ANIMCMD_JUMP(0) }; -const union AnimCmd gAnimCmd_83F1C84[] = { +static const union AnimCmd gAnimCmd_83F1C84[] = { ANIMCMD_FRAME(1, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd gAnimCmd_83F1C8C[] = { +static const union AnimCmd gAnimCmd_83F1C8C[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd *const gUnknown_83F1C94[] = { +static const union AnimCmd *const gUnknown_83F1C94[] = { gAnimCmd_83F1C78 }; -const union AnimCmd *const gUnknown_83F1C98[] = { +static const union AnimCmd *const gUnknown_83F1C98[] = { gAnimCmd_83F1C84, gAnimCmd_83F1C8C }; -const u16 gUnknown_83F1CA0[] = { +static const u16 gUnknown_83F1CA0[] = { DISPCNT_WIN0_ON, DISPCNT_WIN1_ON }; -const u8 gUnknown_83F1CA4[][2] = { +static const u8 gUnknown_83F1CA4[][2] = { {REG_OFFSET_WIN0V, REG_OFFSET_WIN0H}, {REG_OFFSET_WIN1V, REG_OFFSET_WIN1H} }; -const u8 gUnknown_83F1CA8[] = {15, 1, 2}; +static const u8 gUnknown_83F1CA8[] = {15, 1, 2}; -const u8 *const gUnknown_83F1CAC[] = { +static const u8 *const gUnknown_83F1CAC[] = { [MAPSEC_PALLET_TOWN - MAPSECS_KANTO] = gMapSecName_PalletTown, [MAPSEC_VIRIDIAN_CITY - MAPSECS_KANTO] = gMapSecName_ViridianCity, [MAPSEC_PEWTER_CITY - MAPSECS_KANTO] = gMapSecName_PewterCity, @@ -841,7 +841,7 @@ const u8 *const gUnknown_83F1CAC[] = { [MAPSEC_SPECIAL_AREA - MAPSECS_KANTO] = gMapSecName_CeladonDept }; -const u16 gUnknown_83F1E60[0xC6][2] = { +static const u16 gUnknown_83F1E60[0xC6][2] = { [MAPSEC_PALLET_TOWN - MAPSECS_KANTO] = {0x04, 0x0b}, [MAPSEC_VIRIDIAN_CITY - MAPSECS_KANTO] = {0x04, 0x08}, [MAPSEC_PEWTER_CITY - MAPSECS_KANTO] = {0x04, 0x04}, @@ -915,7 +915,7 @@ const u16 gUnknown_83F1E60[0xC6][2] = { [MAPSEC_BIRTH_ISLAND - MAPSECS_KANTO] = {0x12, 0x0d}, }; -const u16 gUnknown_83F2178[0xC6][2] = { +static const u16 gUnknown_83F2178[0xC6][2] = { [MAPSEC_PALLET_TOWN - MAPSECS_KANTO] = {0x01, 0x01}, [MAPSEC_VIRIDIAN_CITY - MAPSECS_KANTO] = {0x01, 0x01}, [MAPSEC_PEWTER_CITY - MAPSECS_KANTO] = {0x01, 0x01}, @@ -1026,7 +1026,7 @@ const u16 gUnknown_83F2178[0xC6][2] = { [MAPSEC_EMBER_SPA - MAPSECS_KANTO] = {0x01, 0x01} }; -const u8 gUnknown_83F2490[][15][22] = { +static const u8 gUnknown_83F2490[][15][22] = { { {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, @@ -1096,7 +1096,7 @@ const u8 gUnknown_83F2490[][15][22] = { } }; -const u8 gUnknown_83F2724[][15][22] = { +static const u8 gUnknown_83F2724[][15][22] = { { {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, @@ -1132,7 +1132,7 @@ const u8 gUnknown_83F2724[][15][22] = { } }; -const u8 gUnknown_83F29B8[][15][22] = { +static const u8 gUnknown_83F29B8[][15][22] = { { {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, @@ -1168,7 +1168,7 @@ const u8 gUnknown_83F29B8[][15][22] = { } }; -const u8 gUnknown_83F2C4C[][15][22] = { +static const u8 gUnknown_83F2C4C[][15][22] = { { {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_OUTCAST_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_OUTCAST_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, @@ -1204,7 +1204,7 @@ const u8 gUnknown_83F2C4C[][15][22] = { } }; -const u8 gUnknown_83F2EE0[][3] = { +static const u8 gUnknown_83F2EE0[][3] = { [MAPSEC_PALLET_TOWN - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), SPAWN_PALLET_TOWN}, [MAPSEC_VIRIDIAN_CITY - MAPSECS_KANTO] = {MAP_GROUP(VIRIDIAN_CITY), MAP_NUM(VIRIDIAN_CITY), SPAWN_VIRIDIAN_CITY}, [MAPSEC_PEWTER_CITY - MAPSECS_KANTO] = {MAP_GROUP(PEWTER_CITY), MAP_NUM(PEWTER_CITY), SPAWN_PEWTER_CITY}, @@ -1335,7 +1335,7 @@ static void RegionMap_DarkenPalette(u16 *pal, u16 size, u16 tint) } } -void sub_80BFEA0(void) +static void sub_80BFEA0(void) { u16 pal[16]; CpuCopy16(&gUnknown_83EF2DC[0x20], pal, sizeof(pal)); @@ -1344,7 +1344,7 @@ void sub_80BFEA0(void) LoadPalette(&gUnknown_83EF2DC[0x2F], 0x2F, sizeof(u16)); } -void sub_80BFEDC(u8 kind) +static void sub_80BFEDC(u8 kind) { gUnknown_20399D4 = AllocZeroed(sizeof(struct UnkStruct_20399D4)); if (gUnknown_20399D4 == NULL) @@ -1427,7 +1427,7 @@ static void sub_80BFFD0(void) gUnknown_20399D4->field_479C = r7; } -void sub_80C0100(void) +static void sub_80C0100(void) { switch (gUnknown_20399D4->field_47A4) { @@ -1478,7 +1478,7 @@ void sub_80C0100(void) gUnknown_20399D4->field_47A4++; } -bool8 sub_80C0238(void) +static bool8 sub_80C0238(void) { switch (gUnknown_20399D4->field_47A8) { @@ -1531,13 +1531,13 @@ bool8 sub_80C0238(void) return FALSE; } -void sub_80C03E8(void) +static void sub_80C03E8(void) { CreateTask(gUnknown_20399D4->field_47B8, 0); SetMainCallback2(sub_80C08B4); } -bool32 sub_80C0410(void) +static bool32 sub_80C0410(void) { if (sub_80C4164(sub_80C0E20(), 0, sub_80C3514(), sub_80C3508()) == 99) return FALSE; @@ -1545,7 +1545,7 @@ bool32 sub_80C0410(void) return TRUE; } -void sub_80C0450(void) +static void sub_80C0450(void) { if (sub_80C0410()) { @@ -1558,7 +1558,7 @@ void sub_80C0450(void) } } -void sub_80C04E4(u8 taskId) +static void sub_80C04E4(u8 taskId) { switch (gUnknown_20399D4->field_47A0) { @@ -1682,7 +1682,7 @@ void sub_80C04E4(u8 taskId) } } -void sub_80C07D0(TaskFunc taskFunc) +static void sub_80C07D0(TaskFunc taskFunc) { gUnknown_20399D4->field_47B8 = taskFunc; } @@ -1692,12 +1692,12 @@ TaskFunc sub_80C07E4(void) return gUnknown_20399D4->field_47B8; } -void sub_80C07F8(u8 taskId) +static void sub_80C07F8(u8 taskId) { gTasks[taskId].func = gUnknown_20399D4->field_47B8; } -void sub_80C0820(u8 taskId) +static void sub_80C0820(u8 taskId) { if (sub_80C0E04(2) == TRUE) sub_80C25BC(); @@ -1714,12 +1714,12 @@ void sub_80C0820(u8 taskId) FREE_IF_NOT_NULL(gUnknown_20399D4); } -void sub_80C0898(void) +static void sub_80C0898(void) { FREE_IF_NOT_NULL(gUnknown_20399D4); } -void sub_80C08B4(void) +static void sub_80C08B4(void) { RunTasks(); AnimateSprites(); @@ -1727,25 +1727,25 @@ void sub_80C08B4(void) UpdatePaletteFade(); } -void sub_80C08CC(void) +static void sub_80C08CC(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -void sub_80C08E0(void) +static void sub_80C08E0(void) { SetVBlankCallback(NULL); SetHBlankCallback(NULL); } -void sub_80C08F4(void) +static void sub_80C08F4(void) { SetVBlankCallback(sub_80C08CC); } -void sub_80C0904(void) +static void sub_80C0904(void) { DmaFillLarge16(3, 0, (void *)VRAM, VRAM_SIZE, 0x1000); DmaFill32Defvars(3, 0, (void *)OAM, OAM_SIZE); @@ -1768,14 +1768,14 @@ void sub_80C0904(void) sub_80C0AB8(); } -void sub_80C0A2C(void) +static void sub_80C0A2C(void) { SetBgTilemapBuffer(0, gUnknown_20399D4->field_1796[0]); SetBgTilemapBuffer(1, gUnknown_20399D4->field_1796[1]); SetBgTilemapBuffer(2, gUnknown_20399D4->field_1796[2]); } -void sub_80C0A6C(void) +static void sub_80C0A6C(void) { ResetSpriteData(); ResetPaletteFade(); @@ -1784,7 +1784,7 @@ void sub_80C0A6C(void) ScanlineEffect_Stop(); } -void sub_80C0A88(u8 mode) +static void sub_80C0A88(u8 mode) { switch (mode) { @@ -1799,7 +1799,7 @@ void sub_80C0A88(u8 mode) } } -void sub_80C0AB8(void) +static void sub_80C0AB8(void) { sub_80C4BE4(); sub_80C4C2C(0, 0x11, 0xc0); @@ -1813,7 +1813,7 @@ void sub_80C0AB8(void) sub_80C4C9C(1, 0); } -void sub_80C0B18(void) +static void sub_80C0B18(void) { ClearWindowTilemap(0); FillWindowPixelBuffer(0, PIXEL_FILL(0)); @@ -1831,12 +1831,12 @@ void sub_80C0B18(void) } } -void sub_80C0B9C(void) +static void sub_80C0B9C(void) { sub_80C4CF0(1, &gUnknown_83F1B0C[1]); } -void sub_80C0BB0(void) +static void sub_80C0BB0(void) { u16 mapsecId; u16 descOffset; @@ -1862,7 +1862,7 @@ void sub_80C0BB0(void) } } -void sub_80C0CA0(void) +static void sub_80C0CA0(void) { FillWindowPixelBuffer(0, PIXEL_FILL(0)); CopyWindowToVram(0, 3); @@ -1870,7 +1870,7 @@ void sub_80C0CA0(void) CopyWindowToVram(1, 3); } -void sub_80C0CC8(u8 bg, u16 *map) +static void sub_80C0CC8(u8 bg, u16 *map) { s16 i; s16 j; @@ -1902,32 +1902,32 @@ void sub_80C0CC8(u8 bg, u16 *map) FillBgTilemapBufferRect_Palette0(0, 0x003, 21, 16, 3, 3); } -u8 sub_80C0E04(u8 a0) +static u8 sub_80C0E04(u8 a0) { return gUnknown_20399D4->field_4797[a0]; } -u8 sub_80C0E20(void) +static u8 sub_80C0E20(void) { return gUnknown_20399D4->field_479B; } -u8 sub_80C0E34(void) +static u8 sub_80C0E34(void) { return gUnknown_20399D4->field_479C; } -void sub_80C0E48(u8 a0) +static void sub_80C0E48(u8 a0) { gUnknown_20399D4->field_479B = a0; } -void sub_80C0E5C(u8 a0) +static void sub_80C0E5C(u8 a0) { gUnknown_20399D4->field_479C = a0; } -void sub_80C0E70(u8 a0, u8 taskId, TaskFunc taskFunc) +static void sub_80C0E70(u8 a0, u8 taskId, TaskFunc taskFunc) { gUnknown_20399D8 = AllocZeroed(sizeof(struct UnkStruct_20399D8)); if (FlagGet(FLAG_SYS_SEVII_MAP_4567)) @@ -1964,14 +1964,14 @@ void sub_80C0E70(u8 a0, u8 taskId, TaskFunc taskFunc) gTasks[taskId].func = sub_80C1098; } -void sub_80C0FE0(void) +static void sub_80C0FE0(void) { sub_80C4BE4(); sub_80C4C2C(27, 4, 64); sub_80C4C5C(16 - gUnknown_20399D8->field_1CCD, gUnknown_20399D8->field_1CCD); } -bool8 sub_80C1014(void) +static bool8 sub_80C1014(void) { if (gUnknown_20399D8->field_1CCD < 16) { @@ -1985,7 +1985,7 @@ bool8 sub_80C1014(void) } } -bool8 sub_80C1058(void) +static bool8 sub_80C1058(void) { if (gUnknown_20399D8->field_1CCD >= 2) { @@ -1999,7 +1999,7 @@ bool8 sub_80C1058(void) } } -void sub_80C1098(u8 taskId) +static void sub_80C1098(u8 taskId) { switch (gUnknown_20399D8->field_1CC8) { @@ -2086,7 +2086,7 @@ void sub_80C1098(u8 taskId) } } -void sub_80C1280(u8 taskId) +static void sub_80C1280(u8 taskId) { gTasks[taskId].func = gUnknown_20399D8->field_1CD0; HideBg(2); @@ -2098,7 +2098,7 @@ void sub_80C1280(u8 taskId) FREE_IF_NOT_NULL(gUnknown_20399D8); } -bool8 sub_80C12EC(void) +static bool8 sub_80C12EC(void) { if (gUnknown_20399D8->field_1CDC != 0) { @@ -2113,7 +2113,7 @@ bool8 sub_80C12EC(void) } } -void sub_80C1324(u8 bg, u16 *map) +static void sub_80C1324(u8 bg, u16 *map) { s16 i; s16 j; @@ -2130,7 +2130,7 @@ void sub_80C1324(u8 bg, u16 *map) } } -void sub_80C1390(void) +static void sub_80C1390(void) { struct UnkStruct_80C4CF0 data; data.v0 = gUnknown_20399D8->field_1CD4[0] = 0x48; @@ -2145,7 +2145,7 @@ void sub_80C1390(void) sub_80C4CF0(1, &data); } -bool8 sub_80C144C(void) +static bool8 sub_80C144C(void) { if (gUnknown_20399D8->field_1CDC < 6) { @@ -2159,7 +2159,7 @@ bool8 sub_80C144C(void) } } -bool8 sub_80C1478(void) +static bool8 sub_80C1478(void) { bool8 r6 = FALSE; struct UnkStruct_80C4CF0 data; @@ -2213,12 +2213,12 @@ bool8 sub_80C1478(void) return FALSE; } -void sub_80C16B8(struct Sprite * sprite) +static void sub_80C16B8(struct Sprite * sprite) { sprite->pos1.y = gUnknown_20399D8->field_1CD4[1] + 16; } -bool8 sub_80C16D0(void) +static bool8 sub_80C16D0(void) { switch (gUnknown_20399D8->field_1CC9) { @@ -2239,12 +2239,12 @@ bool8 sub_80C16D0(void) return FALSE; } -void sub_80C1754(u8 a0, u16 a1, u16 a2) +static void sub_80C1754(u8 a0, u16 a1, u16 a2) { sub_80C176C(a0, a1, a2); } -void sub_80C176C(u8 a0, u16 a1, u16 a2) +static void sub_80C176C(u8 a0, u16 a1, u16 a2) { u8 spriteId; @@ -2278,7 +2278,7 @@ void sub_80C176C(u8 a0, u16 a1, u16 a2) gSprites[spriteId].invisible = FALSE; } -void sub_80C1880(void) +static void sub_80C1880(void) { u8 i; for (i = 0; i < 2; i++) @@ -2292,7 +2292,7 @@ void sub_80C1880(void) } } -const u8 *sub_80C18E0(u16 a0) +static const u8 *sub_80C18E0(u16 a0) { u8 i; for (i = 0; i < NELEMS(gUnknown_83F1B3C); i++) @@ -2303,7 +2303,7 @@ const u8 *sub_80C18E0(u16 a0) return gUnknown_8418EC3; } -const u8 *sub_80C1920(u16 a0) +static const u8 *sub_80C1920(u16 a0) { u8 i; for (i = 0; i < NELEMS(gUnknown_83F1B3C); i++) @@ -2314,7 +2314,7 @@ const u8 *sub_80C1920(u16 a0) return gUnknown_8418EC3; } -void sub_80C195C(u8 a0, u8 taskId, TaskFunc taskFunc) +static void sub_80C195C(u8 a0, u8 taskId, TaskFunc taskFunc) { u8 r0; gUnknown_20399DC = AllocZeroed(sizeof(struct UnkStruct_20399DC)); @@ -2334,7 +2334,7 @@ void sub_80C195C(u8 a0, u8 taskId, TaskFunc taskFunc) gTasks[taskId].func = sub_80C1A94; } -bool8 sub_80C19FC(void) +static bool8 sub_80C19FC(void) { switch (gUnknown_20399DC->field_3D4A) { @@ -2357,7 +2357,7 @@ bool8 sub_80C19FC(void) return FALSE; } -void sub_80C1A94(u8 taskId) +static void sub_80C1A94(u8 taskId) { switch (gUnknown_20399DC->field_3D48) { @@ -2407,7 +2407,7 @@ void sub_80C1A94(u8 taskId) } } -void sub_80C1BE0(u8 taskId) +static void sub_80C1BE0(u8 taskId) { switch (gUnknown_20399DC->field_3D49) { @@ -2464,7 +2464,7 @@ void sub_80C1BE0(u8 taskId) } } -void sub_80C1E14(u8 taskId) +static void sub_80C1E14(u8 taskId) { gTasks[taskId].func = gUnknown_20399DC->field_3D44; HideBg(2); @@ -2477,12 +2477,12 @@ void sub_80C1E14(u8 taskId) FREE_IF_NOT_NULL(gUnknown_20399DC); } -void sub_80C1E78(u8 bgId, const u16 * tilemap) +static void sub_80C1E78(u8 bgId, const u16 * tilemap) { CopyToBgTilemapBufferRect(2, tilemap, 0, 0, 32, 20); } -void sub_80C1E94(void) +static void sub_80C1E94(void) { u16 r4; u16 r0; @@ -2504,7 +2504,7 @@ void sub_80C1E94(void) gUnknown_20399DC->field_3E24 = (0x88 - gUnknown_20399DC->field_3E1C) / 8; } -bool8 sub_80C1F80(bool8 a0) +static bool8 sub_80C1F80(bool8 a0) { struct UnkStruct_80C4CF0 data; @@ -2551,12 +2551,12 @@ bool8 sub_80C1F80(bool8 a0) return FALSE; } -void nullsub_63(struct Sprite * sprite) +static void nullsub_63(struct Sprite * sprite) { } -void sub_80C210C(u8 a0, u8 a1, u8 a2) +static void sub_80C210C(u8 a0, u8 a1, u8 a2) { u8 spriteId; struct SpriteSheet spriteSheet = { @@ -2587,7 +2587,7 @@ void sub_80C210C(u8 a0, u8 a1, u8 a2) gSprites[spriteId].invisible = TRUE; } -void sub_80C2208(u8 taskId, TaskFunc taskFunc) +static void sub_80C2208(u8 taskId, TaskFunc taskFunc) { u8 i; @@ -2606,7 +2606,7 @@ void sub_80C2208(u8 taskId, TaskFunc taskFunc) gTasks[taskId].func = sub_80C267C; } -void sub_80C22C4(u8 a0, bool8 a1) +static void sub_80C22C4(u8 a0, bool8 a1) { u8 i; if (a0 == 6) @@ -2622,7 +2622,7 @@ void sub_80C22C4(u8 a0, bool8 a1) } } -bool8 sub_80C2344(void) +static bool8 sub_80C2344(void) { switch (gUnknown_20399E0->field_CCD) { @@ -2666,7 +2666,7 @@ bool8 sub_80C2344(void) return FALSE; } -void sub_80C24BC(void) +static void sub_80C24BC(void) { struct UnkStruct_80C4CF0 data; data.v0 = gUnknown_20399E0->field_000[0]->field_404 + 8; @@ -2680,7 +2680,7 @@ void sub_80C24BC(void) sub_80C4C9C(0, 0); } -void sub_80C253C(void) +static void sub_80C253C(void) { struct UnkStruct_80C4CF0 data = gUnknown_83F1C34; sub_80C4BE4(); @@ -2692,12 +2692,12 @@ void sub_80C253C(void) sub_80C4C9C(0, 0); } -void sub_80C2594(u8 taskId) +static void sub_80C2594(u8 taskId) { gTasks[taskId].func = gUnknown_20399E0->field_CC8; } -void sub_80C25BC(void) +static void sub_80C25BC(void) { u8 i; sub_80C2604(); @@ -2708,7 +2708,7 @@ void sub_80C25BC(void) FREE_IF_NOT_NULL(gUnknown_20399E0); } -void sub_80C2604(void) +static void sub_80C2604(void) { u8 i; for (i = 0; i < 6; i++) @@ -2724,7 +2724,7 @@ void sub_80C2604(void) } } -void sub_80C267C(u8 taskId) +static void sub_80C267C(u8 taskId) { switch (gUnknown_20399E0->field_CCC) { @@ -2832,7 +2832,7 @@ void sub_80C267C(u8 taskId) } } -bool8 sub_80C29A4(void) +static bool8 sub_80C29A4(void) { sub_80C2B48(); if (gUnknown_20399E0->field_000[0]->field_400->pos1.x == 0) @@ -2888,7 +2888,7 @@ bool8 sub_80C29A4(void) return FALSE; } -void sub_80C2B48(void) +static void sub_80C2B48(void) { struct UnkStruct_80C4CF0 data; data.v0 = gUnknown_20399E0->field_000[0]->field_400->pos1.x; @@ -2898,7 +2898,7 @@ void sub_80C2B48(void) sub_80C4CF0(0, &data); } -void sub_80C2B9C(void) +static void sub_80C2B9C(void) { struct UnkStruct_80C4CF0 data; data.v0 = gUnknown_20399E0->field_000[0]->field_404 + 16; @@ -2912,12 +2912,12 @@ void sub_80C2B9C(void) sub_80C4C9C(0, 0); } -void sub_80C2C1C(u8 taskId) +static void sub_80C2C1C(u8 taskId) { gTasks[taskId].func = sub_80C2C7C; } -void sub_80C2C38(void) +static void sub_80C2C38(void) { sub_80C210C(0, 4, 4); sub_80C210C(1, 5, 5); @@ -2927,7 +2927,7 @@ void sub_80C2C38(void) sub_80C210C(5, 9, 9); } -void sub_80C2C7C(u8 taskId) +static void sub_80C2C7C(u8 taskId) { switch (gUnknown_20399E0->field_CCF) { @@ -2988,7 +2988,7 @@ void sub_80C2C7C(u8 taskId) } -bool8 sub_80C2E1C(void) +static bool8 sub_80C2E1C(void) { sub_80C2B48(); if (gUnknown_20399E0->field_000[0]->field_400->pos1.x == 104) @@ -3044,7 +3044,7 @@ bool8 sub_80C2E1C(void) return FALSE; } -void sub_80C2FC0(struct Sprite * sprite) +static void sub_80C2FC0(struct Sprite * sprite) { if (gUnknown_20399E4->field_00C != 0) { @@ -3059,7 +3059,7 @@ void sub_80C2FC0(struct Sprite * sprite) } } -void sub_80C3008(u16 a0, u16 a1) +static void sub_80C3008(u16 a0, u16 a1) { gUnknown_20399E4 = AllocZeroed(sizeof(struct UnkStruct_20399E4)); LZ77UnCompWram(gUnknown_83EF4E0, gUnknown_20399E4->field_024); @@ -3074,7 +3074,7 @@ void sub_80C3008(u16 a0, u16 a1) sub_80C309C(); } -void sub_80C309C(void) +static void sub_80C309C(void) { u8 spriteId; struct SpriteSheet spriteSheet = { @@ -3103,17 +3103,17 @@ void sub_80C309C(void) sub_80C3154(TRUE); } -void sub_80C3154(bool8 a0) +static void sub_80C3154(bool8 a0) { gUnknown_20399E4->field_01C->invisible = a0; } -void sub_80C3178(void) +static void sub_80C3178(void) { gUnknown_20399E4->field_00E = 0; } -void sub_80C3188(void) +static void sub_80C3188(void) { if (gUnknown_20399E4->field_01C != NULL) { @@ -3124,7 +3124,7 @@ void sub_80C3188(void) FREE_IF_NOT_NULL(gUnknown_20399E4); } -u8 sub_80C31C0(void) +static u8 sub_80C31C0(void) { u8 ret = 0; gUnknown_20399E4->field_008 = 0; @@ -3206,7 +3206,7 @@ u8 sub_80C31C0(void) return ret; } -u8 sub_80C3348(void) +static u8 sub_80C3348(void) { if (gUnknown_20399E4->field_00C != 0) return 2; @@ -3225,12 +3225,12 @@ u8 sub_80C3348(void) return 3; } -u8 sub_80C3400(void) +static u8 sub_80C3400(void) { return gUnknown_20399E4->field_010(); } -void sub_80C3418(void) +static void sub_80C3418(void) { if (sub_80C0E04(0) == 1) { @@ -3279,17 +3279,17 @@ void sub_80C3418(void) gUnknown_20399E4->field_014 = sub_80C4164(sub_80C0E20(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); } -u16 sub_80C3508(void) +static u16 sub_80C3508(void) { return gUnknown_20399E4->field_000; } -u16 sub_80C3514(void) +static u16 sub_80C3514(void) { return gUnknown_20399E4->field_002; } -u16 sub_80C3520(void) +static u16 sub_80C3520(void) { u8 ret; if (gUnknown_20399E4->field_002 < 0 @@ -3304,7 +3304,7 @@ u16 sub_80C3520(void) return ret; } -u16 sub_80C3580(void) +static u16 sub_80C3580(void) { u8 ret; if (gUnknown_20399E4->field_002 < 0 @@ -3319,7 +3319,7 @@ u16 sub_80C3580(void) return ret; } -u8 sub_80C35DC(u8 mapsec) +static u8 sub_80C35DC(u8 mapsec) { switch (mapsec) { @@ -3372,7 +3372,7 @@ u8 sub_80C35DC(u8 mapsec) } } -u8 sub_80C3878(u8 mapsec) +static u8 sub_80C3878(u8 mapsec) { switch (mapsec) { @@ -3445,7 +3445,7 @@ u8 sub_80C3878(u8 mapsec) } } -u8 sub_80C3AC8(u8 a0) +static u8 sub_80C3AC8(u8 a0) { switch (a0) { @@ -3458,12 +3458,12 @@ u8 sub_80C3AC8(u8 a0) } } -u16 sub_80C3B00(void) +static u16 sub_80C3B00(void) { return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum)->regionMapSectionId; } -void sub_80C3B28(void) +static void sub_80C3B28(void) { u16 width; u32 divisor; @@ -3541,7 +3541,7 @@ void sub_80C3B28(void) gUnknown_20399E4->field_002 = y + gUnknown_83F1E60[gUnknown_20399E4->field_014][1]; } -void sub_80C3D40(void) +static void sub_80C3D40(void) { switch (sub_80C3B00()) { @@ -3721,7 +3721,7 @@ void sub_80C3D40(void) gUnknown_20399E4->field_014 = sub_80C4164(sub_80C0E20(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); } -u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3) +static u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3) { switch (a0) { @@ -3738,7 +3738,7 @@ u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3) } } -void sub_80C41D8(u16 a0, u16 a1) +static void sub_80C41D8(u16 a0, u16 a1) { gUnknown_20399E8 = AllocZeroed(sizeof(struct UnkStruct_20399E8)); if (gSaveBlock2Ptr->playerGender == FEMALE) @@ -3752,7 +3752,7 @@ void sub_80C41D8(u16 a0, u16 a1) sub_80C4244(); } -void sub_80C4244(void) +static void sub_80C4244(void) { u8 spriteId; struct SpriteSheet spriteSheet = { @@ -3784,12 +3784,12 @@ void sub_80C4244(void) sub_80C4324(TRUE); } -void sub_80C4324(bool8 a0) +static void sub_80C4324(bool8 a0) { gUnknown_20399E8->field_04->invisible = a0; } -void sub_80C4348(void) +static void sub_80C4348(void) { if (gUnknown_20399E8->field_04 != NULL) { @@ -3800,17 +3800,17 @@ void sub_80C4348(void) FREE_IF_NOT_NULL(gUnknown_20399E8); } -u16 sub_80C4380(void) +static u16 sub_80C4380(void) { return gUnknown_20399E8->field_00; } -u16 sub_80C438C(void) +static u16 sub_80C438C(void) { return gUnknown_20399E8->field_02; } -void sub_80C4398(u8 a0, u8 taskId, TaskFunc taskFunc) +static void sub_80C4398(u8 a0, u8 taskId, TaskFunc taskFunc) { gUnknown_20399EC = AllocZeroed(sizeof(struct UnkStruct_20399EC)); gUnknown_20399EC->field_468 = taskFunc; @@ -3820,7 +3820,7 @@ void sub_80C4398(u8 a0, u8 taskId, TaskFunc taskFunc) gTasks[taskId].func = sub_80C440C; } -void sub_80C440C(u8 taskId) +static void sub_80C440C(u8 taskId) { switch (gUnknown_20399EC->field_463) { @@ -3852,12 +3852,12 @@ void sub_80C440C(u8 taskId) } } -void sub_80C44E4(u8 taskId) +static void sub_80C44E4(u8 taskId) { gTasks[taskId].func = gUnknown_20399EC->field_468; } -void sub_80C450C(u8 a0, u8 a1, u16 a2, u16 a3, u8 a4, u8 a5) +static void sub_80C450C(u8 a0, u8 a1, u16 a2, u16 a3, u8 a4, u8 a5) { u8 spriteId; struct SpriteSheet spriteSheet = { @@ -3887,7 +3887,7 @@ void sub_80C450C(u8 a0, u8 a1, u16 a2, u16 a3, u8 a4, u8 a5) gUnknown_20399EC->field_2D0[a1].field_4 = a0; } -void sub_80C4614(u8 a0, u8 a1, u16 a2, u16 a3, u8 a4, u8 a5) +static void sub_80C4614(u8 a0, u8 a1, u16 a2, u16 a3, u8 a4, u8 a5) { u8 spriteId; u8 r4; @@ -3922,7 +3922,7 @@ void sub_80C4614(u8 a0, u8 a1, u16 a2, u16 a3, u8 a4, u8 a5) gUnknown_20399EC->field_140[a1].field_4 = a0; } -void sub_80C4750(void) +static void sub_80C4750(void) { u16 i, j, k; u8 r7 = 0; @@ -3945,7 +3945,7 @@ void sub_80C4750(void) } } -void sub_80C47F0(void) +static void sub_80C47F0(void) { u16 i, j, k; u8 r6 = 0; @@ -3972,7 +3972,7 @@ void sub_80C47F0(void) } } -void sub_80C48BC(u8 a0, u8 a1, bool8 a2) +static void sub_80C48BC(u8 a0, u8 a1, bool8 a2) { u8 i; if (a1 == 25) @@ -3990,7 +3990,7 @@ void sub_80C48BC(u8 a0, u8 a1, bool8 a2) } } -void sub_80C4960(u8 a0, u8 a1, bool8 a2) +static void sub_80C4960(u8 a0, u8 a1, bool8 a2) { u8 i; if (a1 == 25) @@ -4008,7 +4008,7 @@ void sub_80C4960(u8 a0, u8 a1, bool8 a2) } } -void sub_80C4A04(void) +static void sub_80C4A04(void) { u8 i; for (i = 0; i < 25; i++) @@ -4032,7 +4032,7 @@ void sub_80C4A04(void) FREE_IF_NOT_NULL(gUnknown_20399EC); } -bool8 sub_80C4AAC(u8 a0) +static bool8 sub_80C4AAC(u8 a0) { if (gUnknown_20399F0[a0] != NULL) return FALSE; @@ -4049,7 +4049,7 @@ bool8 sub_80C4AAC(u8 a0) return TRUE; } -bool8 sub_80C4B30(u8 a0) +static bool8 sub_80C4B30(u8 a0) { if (gUnknown_20399F0[a0] == NULL) return FALSE; @@ -4066,7 +4066,7 @@ bool8 sub_80C4B30(u8 a0) return TRUE; } -void sub_80C4BB8(void) +static void sub_80C4BB8(void) { u8 i; for (i = 0; i < 3; i++) @@ -4075,7 +4075,7 @@ void sub_80C4BB8(void) } } -void sub_80C4BE4(void) +static void sub_80C4BE4(void) { struct UnkStruct_80C4CF0 data = {}; sub_80C4C2C(0, 0, 0); @@ -4087,7 +4087,7 @@ void sub_80C4BE4(void) sub_80C4C9C(1, 1); } -void sub_80C4C2C(u8 a0, u16 a1, u16 a2) +static void sub_80C4C2C(u8 a0, u16 a1, u16 a2) { u16 regval = a0 << 8; regval |= a1; @@ -4095,31 +4095,31 @@ void sub_80C4C2C(u8 a0, u16 a1, u16 a2) SetGpuReg(REG_OFFSET_BLDCNT, regval); } -void sub_80C4C48(u16 a0) +static void sub_80C4C48(u16 a0) { SetGpuReg(REG_OFFSET_BLDY, a0); } -void sub_80C4C5C(u16 a0, u16 a1) +static void sub_80C4C5C(u16 a0, u16 a1) { u16 regval = a0 << 8; regval |= a1; SetGpuReg(REG_OFFSET_BLDALPHA, regval); } -void sub_80C4C74(u16 a0, u16 a1) +static void sub_80C4C74(u16 a0, u16 a1) { u16 regval = a1 << 8; regval |= a0; SetGpuReg(REG_OFFSET_WININ, regval); } -void sub_80C4C88(u16 a0) +static void sub_80C4C88(u16 a0) { SetGpuReg(REG_OFFSET_WINOUT, a0); } -void sub_80C4C9C(u8 a0, u8 a1) +static void sub_80C4C9C(u8 a0, u8 a1) { u16 data[2]; memcpy(data, gUnknown_83F1CA0, 4); @@ -4134,19 +4134,19 @@ void sub_80C4C9C(u8 a0, u8 a1) } } -void sub_80C4CF0(u8 a0, const struct UnkStruct_80C4CF0 *a1) +static void sub_80C4CF0(u8 a0, const struct UnkStruct_80C4CF0 *a1) { SetGpuReg(gUnknown_83F1CA4[a0][0], (a1->v2 << 8) | a1->v6); SetGpuReg(gUnknown_83F1CA4[a0][1], (a1->v0 << 8) | a1->v4); } -void sub_80C4D30(void) +static void sub_80C4D30(void) { sub_80C4BB8(); sub_80C4BE4(); } -bool32 sub_80C4D40(u16 a0) +static bool32 sub_80C4D40(u16 a0) { if (gUnknown_20399D4 != NULL) return FALSE; @@ -4202,7 +4202,7 @@ u8 *sub_80C4E08(u8 *dest, u16 mapsec) return GetMapNameGeneric(dest, mapsec); } -void sub_80C4E18(const u8 *str) +static void sub_80C4E18(const u8 *str) { if (gUnknown_20399D4->field_4797[2] == 1) FillWindowPixelBuffer(3, PIXEL_FILL(0)); @@ -4212,7 +4212,7 @@ void sub_80C4E18(const u8 *str) CopyWindowToVram(3, 2); } -void sub_80C4E74(const u8 *str) +static void sub_80C4E74(const u8 *str) { if (gUnknown_20399D4->field_4797[2] == 1) FillWindowPixelBuffer(4, PIXEL_FILL(0)); @@ -4222,7 +4222,7 @@ void sub_80C4E74(const u8 *str) CopyWindowToVram(4, 3); } -void sub_80C4ED0(bool8 mode) +static void sub_80C4ED0(bool8 mode) { if (!mode) { @@ -4242,7 +4242,7 @@ void MCB2_FlyMap(void) sub_80BFEDC(2); } -void sub_80C4F08(u8 taskId) +static void sub_80C4F08(u8 taskId) { switch (gUnknown_20399FC->field_0) { @@ -4361,14 +4361,14 @@ void sub_80C4F08(u8 taskId) } } -void sub_80C51E8(void) +static void sub_80C51E8(void) { gUnknown_20399FC = AllocZeroed(sizeof(struct UnkStruct_20399FC)); gUnknown_20399FC->field_0 = 0; gUnknown_20399FC->field_1 = 0; } -void sub_80C5208(u8 taskId) +static void sub_80C5208(u8 taskId) { if (sub_80C0E04(2) == TRUE) sub_80C25BC(); @@ -4386,7 +4386,7 @@ void sub_80C5208(u8 taskId) FREE_IF_NOT_NULL(gUnknown_20399FC); } -void sub_80C527C(u16 mapsec) +static void sub_80C527C(u16 mapsec) { u16 idx = mapsec - MAPSECS_KANTO; if (gUnknown_83F2EE0[idx][2]) -- cgit v1.2.3 From 1ae107fba5e6a1d1c69c9dfff10e34dac612fcf0 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 7 Jan 2020 21:01:13 -0500 Subject: Fix name of junk unref pals --- src/region_map.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/region_map.c b/src/region_map.c index 7415deb32..36cf7e83b 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -337,7 +337,7 @@ static const u16 gUnknown_83EF27C[] = INCBIN_U16("graphics/region_map/unk_83EF27 static const u16 gUnknown_83EF29C[] = INCBIN_U16("graphics/region_map/unk_83EF29C.gbapal"); static const u16 gUnknown_83EF2BC[] = INCBIN_U16("graphics/region_map/unk_83EF2BC.gbapal"); static const u16 gUnknown_83EF2DC[] = INCBIN_U16("graphics/region_map/unk_83EF2DC.gbapal"); -static const u16 _83EF2FC[] = { +static const u16 unref_83EF37C[] = { RGB(0, 0, 31), RGB(0, 12, 31), RGB_WHITE, -- cgit v1.2.3 From f8e911bcf57ec6f2b2e7ec1c0c09e467793b94ab Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 8 Jan 2020 16:03:42 -0500 Subject: Partial documentation of region map --- data/strings.s | 75 ++-- include/map_preview_screen.h | 2 +- include/region_map.h | 14 + include/strings.h | 56 +-- src/map_preview_screen.c | 2 +- src/region_map.c | 940 +++++++++++++++++++++---------------------- 6 files changed, 542 insertions(+), 547 deletions(-) diff --git a/data/strings.s b/data/strings.s index d1bbeef49..c6a38c442 100644 --- a/data/strings.s +++ b/data/strings.s @@ -2524,161 +2524,142 @@ gUnknown_8418E77:: @ 8418E77 gUnknown_8418E8A:: @ 8418E8A .string "$" -gUnknown_8418E8B:: @ 8418E8B +gText_RegionMap_Space:: @ 8418E8B .string " $" -gUnknown_8418E8D:: @ 8418E8D +gText_RegionMap_AButtonGuide:: @ 8418E8D .string "{A_BUTTON}GUIDE$" -gUnknown_8418E95:: @ 8418E95 +gText_RegionMap_AButtonCancel:: @ 8418E95 .string "{A_BUTTON}CANCEL$" -gUnknown_8418E9E:: @ 8418E9E +gText_RegionMap_AButtonCancel2:: @ 8418E9E .string "{A_BUTTON}CANCEL$" -gUnknown_8418EA7:: @ 8418EA7 +gText_RegionMap_AButtonSwitch:: @ 8418EA7 .string "{A_BUTTON}SWITCH$" -gUnknown_8418EB0:: @ 8418EB0 +gText_RegionMap_AButtonOK:: @ 8418EB0 .string "{A_BUTTON}OK$" -gUnknown_8418EB5:: @ 8418EB5 +gText_RegionMap_DPadMove:: @ 8418EB5 .string "{DPAD_ANY}MOVE$" -gUnknown_8418EBC:: @ 8418EBC +gText_RegionMap_UpDownPick:: @ 8418EBC .string "{DPAD_UPDOWN}PICK$" -gUnknown_8418EC3:: @ 8418EC3 +gText_RegionMap_NoData:: @ 8418EC3 .string "No data$" -gUnknown_8418ECB:: @ 8418ECB - @ Viridian Forest +gText_RegionMap_AreaDesc_ViridianForest:: .string "A deep and sprawling forest that\n" .string "extends around VIRIDIAN CITY.\n" .string "A natural maze, many people\n" .string "become lost inside.$" -gUnknown_8418F3A:: @ 8418F3A - @ Mt. Moon +gText_RegionMap_AreaDesc_MtMoon:: .string "A mystical mountain that is known\n" .string "for its frequent meteor falls.\n" .string "The shards of stars that fall\n" .string "here are known as MOON STONES.$" -gUnknown_8418FB8:: @ 8418FB8 - @ Diglett's Cave +gText_RegionMap_AreaDesc_DiglettsCave:: .string "A seemingly plain tunnel that was\n" .string "dug by wild DIGLETT.\n" .string "It is famous for connecting\n" .string "ROUTES 2 and 11.$" -gUnknown_841901C:: @ 841901C - @ Victory Road +gText_RegionMap_AreaDesc_VictoryRoad:: .string "A tunnel situated on ROUTE 23.\n" .string "It earned its name because it\n" .string "must be traveled by all TRAINERS\n" .string "aiming for the top.$" -gUnknown_841908E:: @ 841908E - @ Pokémon Mansion +gText_RegionMap_AreaDesc_PokemonMansion:: .string "A decrepit, burned-down mansion\n" .string "on CINNABAR ISLAND.\n" .string "It got its name because a famous\n" .string "POKéMON researcher lived there.$" -gUnknown_8419103:: @ 8419103 - @ Safari Zone +gText_RegionMap_AreaDesc_SafariZone:: .string "An amusement park outside FUCHSIA\n" .string "CITY where many rare POKéMON can\n" .string "be observed in the wild.\n" .string "Catch them in a popular game!$" -gUnknown_841917D:: @ 841917D - @ Rock Tunnel +gText_RegionMap_AreaDesc_RockTunnel:: .string "A naturally formed underground\n" .string "tunnel. Because it has not been\n" .string "developed, it is inky dark inside.\n" .string "A light is needed to get through.$" -gUnknown_8419201:: @ 8419201 - @ Seafoam Islands +gText_RegionMap_AreaDesc_SeafoamIslands:: .string "A pair of islands that is situated\n" .string "on ROUTE 20.\n" .string "The two islands are shaped the\n" .string "same, as if they were twins.$" -gUnknown_841926D:: @ 841926D - @ Pokémon Tower +gText_RegionMap_AreaDesc_PokemonTower:: .string "A tower that houses the graves of\n" .string "countless POKéMON.\n" .string "Many people visit it daily to pay\n" .string "their respects to the fallen.$" -gUnknown_84192E2:: @ 84192E2 - @ Cerulean Cave +gText_RegionMap_AreaDesc_CeruleanCave:: .string "A mysterious cave that is filled\n" .string "with terribly tough POKéMON.\n" .string "It is so dangerous, the POKéMON\n" .string "LEAGUE is in charge of it.$" -gUnknown_841935B:: @ 841935B - @ Power Plant +gText_RegionMap_AreaDesc_PowerPlant:: .string "A power plant that was abandoned\n" .string "years ago, though some of the\n" .string "machines still work. It is infested\n" .string "with electric POKéMON.$" -gUnknown_84193D5:: @ 84193D5 - @ Mt. Ember +gText_RegionMap_AreaDesc_MtEmber:: .string "Supposedly an inactive volcano.\n" .string "However, there are persistent\n" .string "reports that the peak blazes\n" .string "with fire at night.$" -gUnknown_8419444:: @ 8419444 - @ Berry Forest +gText_RegionMap_AreaDesc_BerryForest:: .string "A forest on a small islet off the\n" .string "coast of THREE ISLAND. BERRIES\n" .string "grow wildly in profusion, quickly\n" .string "replenishing those that fall off.$" -gUnknown_84194C9:: @ 84194C9 - @ Icefall Cave +gText_RegionMap_AreaDesc_IcefallCave:: .string "A cave which is covered by water\n" .string "and ice on FOUR ISLAND.\n" .string "It seems like the end of the cave\n" .string "is connected to the ocean.$" -gUnknown_841953F:: @ 841953F - @ Lost Cave +gText_RegionMap_AreaDesc_LostCave:: .string "A bewildering cave off the coast\n" .string "of RESORT GORGEOUS.\n" .string "Some curious thrill seekers have\n" .string "never emerged from it.$" -gUnknown_84195AC:: @ 84195AC - @ Tanoby Ruins +gText_RegionMap_AreaDesc_TanobyRuins:: .string "An ancient ruin that is rumored to\n" .string "be home to a peculiar POKéMON.\n" .string "However, so far, the POKéMON\n" .string "remains an unconfirmed rumor.$" -gUnknown_8419629:: @ 8419629 - @ Altering Cave +gText_RegionMap_AreaDesc_AlteringCave:: .string "This island has been known by this\n" .string "name since the distant past.\n" .string "No one today knows where it got\n" .string "this name, however.$" -gUnknown_841969D:: @ 841969D - @ Pattern Bush +gText_RegionMap_AreaDesc_PatternBush:: .string "A lush and bush-like area. \n" .string "In it are patterns where no grass\n" .string "grows. Some study it in the belief\n" .string "that a secret is concealed.$" -gUnknown_841971A:: @ 841971A - @ Dotted Hole +gText_RegionMap_AreaDesc_DottedHole:: .string "A mysterious, just-discovered\n" .string "ruin from an ancient time.\n" .string "It got its name from the six dots\n" diff --git a/include/map_preview_screen.h b/include/map_preview_screen.h index c4e2fa70c..ea85baf71 100644 --- a/include/map_preview_screen.h +++ b/include/map_preview_screen.h @@ -49,6 +49,6 @@ void sub_80F85BC(u16 a0); u16 sub_80F856C(u8 id); bool8 sub_80F8110(u8 mapsec, bool8 forceFirstTime); bool32 sub_80F83B0(void); -const struct MapPreviewScreen * sub_80F8544(u8 mapsec); +const struct MapPreviewScreen * GetDungeonMapPreviewScreenInfo(u8 mapsec); #endif //GUARD_MAP_PREVIEW_SCREEN_H diff --git a/include/region_map.h b/include/region_map.h index bc5f789bd..dd4fe491b 100644 --- a/include/region_map.h +++ b/include/region_map.h @@ -24,6 +24,20 @@ enum { MAPSECTYPE_CITY_CANTFLY, }; +enum { + MAPPERM_0, + MAPPERM_1, + MAPPERM_2, + MAPPERM_3 +}; + +enum { + REGIONMAP_KANTO, + REGIONMAP_SEVII123, + REGIONMAP_SEVII45, + REGIONMAP_SEVII67 +}; + // Exported RAM declarations // Exported ROM declarations diff --git a/include/strings.h b/include/strings.h index e8b4f1b38..8911a7c93 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1004,33 +1004,33 @@ extern const u8 gText_LinkBattles[]; extern const u8 gText_LinkCableBattles[]; // region_map -extern const u8 gUnknown_8418EB5[]; -extern const u8 gUnknown_8418E8B[]; -extern const u8 gUnknown_8418E8D[]; -extern const u8 gUnknown_8418E95[]; -extern const u8 gUnknown_8418E9E[]; -extern const u8 gUnknown_8418EA7[]; -extern const u8 gUnknown_8418EB0[]; -extern const u8 gUnknown_8418EBC[]; -extern const u8 gUnknown_8418EC3[]; -extern const u8 gUnknown_8418ECB[]; -extern const u8 gUnknown_8418F3A[]; -extern const u8 gUnknown_8418FB8[]; -extern const u8 gUnknown_841901C[]; -extern const u8 gUnknown_841908E[]; -extern const u8 gUnknown_8419103[]; -extern const u8 gUnknown_841917D[]; -extern const u8 gUnknown_8419201[]; -extern const u8 gUnknown_841926D[]; -extern const u8 gUnknown_84192E2[]; -extern const u8 gUnknown_841935B[]; -extern const u8 gUnknown_84193D5[]; -extern const u8 gUnknown_8419444[]; -extern const u8 gUnknown_84194C9[]; -extern const u8 gUnknown_841953F[]; -extern const u8 gUnknown_84195AC[]; -extern const u8 gUnknown_8419629[]; -extern const u8 gUnknown_841969D[]; -extern const u8 gUnknown_841971A[]; +extern const u8 gText_RegionMap_DPadMove[]; +extern const u8 gText_RegionMap_Space[]; +extern const u8 gText_RegionMap_AButtonGuide[]; +extern const u8 gText_RegionMap_AButtonCancel[]; +extern const u8 gText_RegionMap_AButtonCancel2[]; +extern const u8 gText_RegionMap_AButtonSwitch[]; +extern const u8 gText_RegionMap_AButtonOK[]; +extern const u8 gText_RegionMap_UpDownPick[]; +extern const u8 gText_RegionMap_NoData[]; +extern const u8 gText_RegionMap_AreaDesc_ViridianForest[]; +extern const u8 gText_RegionMap_AreaDesc_MtMoon[]; +extern const u8 gText_RegionMap_AreaDesc_DiglettsCave[]; +extern const u8 gText_RegionMap_AreaDesc_VictoryRoad[]; +extern const u8 gText_RegionMap_AreaDesc_PokemonMansion[]; +extern const u8 gText_RegionMap_AreaDesc_SafariZone[]; +extern const u8 gText_RegionMap_AreaDesc_RockTunnel[]; +extern const u8 gText_RegionMap_AreaDesc_SeafoamIslands[]; +extern const u8 gText_RegionMap_AreaDesc_PokemonTower[]; +extern const u8 gText_RegionMap_AreaDesc_CeruleanCave[]; +extern const u8 gText_RegionMap_AreaDesc_PowerPlant[]; +extern const u8 gText_RegionMap_AreaDesc_MtEmber[]; +extern const u8 gText_RegionMap_AreaDesc_BerryForest[]; +extern const u8 gText_RegionMap_AreaDesc_IcefallCave[]; +extern const u8 gText_RegionMap_AreaDesc_LostCave[]; +extern const u8 gText_RegionMap_AreaDesc_TanobyRuins[]; +extern const u8 gText_RegionMap_AreaDesc_AlteringCave[]; +extern const u8 gText_RegionMap_AreaDesc_PatternBush[]; +extern const u8 gText_RegionMap_AreaDesc_DottedHole[]; #endif //GUARD_STRINGS_H diff --git a/src/map_preview_screen.c b/src/map_preview_screen.c index 0747e8ade..c5b41a7c1 100644 --- a/src/map_preview_screen.c +++ b/src/map_preview_screen.c @@ -552,7 +552,7 @@ static void sub_80F83D0(u8 taskId) } } -const struct MapPreviewScreen * sub_80F8544(u8 mapsec) +const struct MapPreviewScreen * GetDungeonMapPreviewScreenInfo(u8 mapsec) { u8 idx; diff --git a/src/region_map.c b/src/region_map.c index 36cf7e83b..7a411b8e8 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -33,11 +33,11 @@ struct UnkStruct_20399D4 { u8 field_0000[19]; u8 field_0013[19]; - u16 field_0026[5][600]; + u16 layouts[5][600]; // Inefficiency: these should be u8 or have half the elements each - u16 field_1796[3][BG_SCREEN_SIZE]; - u8 field_4796; - u8 field_4797[4]; + u16 bgTilemapBuffers[3][BG_SCREEN_SIZE]; + u8 mapType; + bool8 regionMapPermissions[4]; u8 field_479B; u8 field_479C; u8 filler_479D[3]; @@ -52,25 +52,25 @@ struct UnkStruct_20399D4 u16 field_47B0; u8 filler_47B2[6]; TaskFunc field_47B8; - MainCallback field_47BC; + MainCallback savedCallback; }; // size = 0x47C0 -struct UnkStruct_20399D8_14B0 +struct SelectionCursorSubspriteData { - u8 field_000[0x400]; - struct Sprite * field_400; - u16 field_404; - u16 field_406; - s16 field_408; + u8 tiles[0x400]; + struct Sprite * sprite; + u16 tileTag; + u16 paletteTag; + s16 xCoord; }; struct UnkStruct_20399D8 { - u8 field_0000[0x1000]; - u16 field_1000[0x258]; - struct UnkStruct_20399D8_14B0 field_14B0[2]; + u8 bgTiles[0x1000]; + u16 tileMap[0x258]; + struct SelectionCursorSubspriteData selectionCursorSubspriteData[2]; u8 field_1CC8; - u8 field_1CC9; + u8 selectionCursorLoadState; u8 field_1CCA; u8 field_1CCB; u8 field_1CCC; @@ -81,7 +81,7 @@ struct UnkStruct_20399D8 u16 field_1CDC; }; // size = 0x1CE0 -struct UnkStruct_80C4CF0 +struct GpuWindowParams { u16 v0; u16 v2; @@ -91,19 +91,19 @@ struct UnkStruct_80C4CF0 struct UnkStruct_83F1B3C { - u16 field_0; - const u8 *field_4; - const u8 *field_8; + u16 id; + const u8 *name; + const u8 *desc; }; -struct UnkStruct_20399DC +struct DungeonMapPreviewManagerStruct { - u16 field_0000[0x1C20]; - u16 field_3840[0x280]; - const struct MapPreviewScreen * field_3D40; - TaskFunc field_3D44; - u8 field_3D48; - u8 field_3D49; + u16 tiles[0x1C20]; + u16 tilemap[0x280]; + const struct MapPreviewScreen * mapPreviewInfo; + TaskFunc savedTask; + u8 dungeonMapPreviewPrepState; + u8 dungeonMapPreviewDrawState; u8 field_3D4A; u8 field_3D4B; u8 field_3D4C; @@ -220,7 +220,7 @@ struct UnkStruct_20399FC static EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL; static EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL; -static EWRAM_DATA struct UnkStruct_20399DC * gUnknown_20399DC = NULL; +static EWRAM_DATA struct DungeonMapPreviewManagerStruct * sDungeonMapPreviewManager = NULL; static EWRAM_DATA struct UnkStruct_20399E0 * gUnknown_20399E0 = NULL; static EWRAM_DATA struct UnkStruct_20399E4 * gUnknown_20399E4 = NULL; static EWRAM_DATA struct UnkStruct_20399E8 * gUnknown_20399E8 = NULL; @@ -229,26 +229,26 @@ static EWRAM_DATA struct UnkStruct_20399F0 * gUnknown_20399F0[3] = {}; static EWRAM_DATA struct UnkStruct_20399FC * gUnknown_20399FC = NULL; static void sub_80BFFD0(void); -static void sub_80C0100(void); -static bool8 sub_80C0238(void); +static void CB2_OpenRegionMap(void); +static bool8 HandleLoadRegionMapGfx(void); static void sub_80C03E8(void); static void sub_80C04E4(u8 taskId); static void sub_80C07F8(u8 taskId); static void sub_80C0820(u8 taskId); static void sub_80C08B4(void); -static void sub_80C08E0(void); +static void NullVBlankHBlankCallbacks(void); static void sub_80C08F4(void); -static void sub_80C0904(void); -static void sub_80C0A2C(void); -static void sub_80C0A6C(void); -static void sub_80C0A88(u8 a0); +static void ResetGpu(void); +static void SetBgTilemapBuffers(void); +static void ResetOamForRegionMap(void); +static void SetBg0andBg3Visibility(u8 a0); static void sub_80C0AB8(void); static void sub_80C0B18(void); static void sub_80C0B9C(void); static void sub_80C0BB0(void); static void sub_80C0CC8(u8 bg, u16 *map); -static bool8 sub_80C0E04(u8 a0); -static u8 sub_80C0E20(void); +static bool8 GetRegionMapPermission(u8 a0); +static u8 GetWhichRegionMap(void); static void sub_80C0E70(u8 a0, u8 taskId, TaskFunc taskFunc); static void sub_80C1098(u8 taskId); static void sub_80C1280(u8 taskId); @@ -257,16 +257,16 @@ static void sub_80C1324(u8 bg, u16 *map); static void sub_80C1390(void); static bool8 sub_80C144C(void); static bool8 sub_80C1478(void); -static bool8 sub_80C16D0(void); -static void sub_80C1754(u8 a0, u16 a1, u16 a2); -static void sub_80C176C(u8 a0, u16 a1, u16 a2); -static void sub_80C1880(void); -static void sub_80C195C(u8 a0, u8 taskId, TaskFunc taskFunc); -static void sub_80C1A94(u8 taskId); -static void sub_80C1BE0(u8 taskId); -static void sub_80C1E14(u8 taskId); +static bool8 LoadAndCreateSelectionCursorSpriteGfx(void); +static void CreateSelectionCursorSubsprite(u8 whichSprite, u16 tileTag, u16 paletteTag); +static void RealCreateSelectionCursorSubsprite(u8 whichSprite, u16 tileTag, u16 paletteTag); +static void DestroySelectionCursorSprites(void); +static void RegionMapCreateDungeonMapPreview(u8 a0, u8 taskId, TaskFunc taskFunc); +static void Task_PrepDungeonMapPreviewAndFlavorText(u8 taskId); +static void Task_DrawDungeonMapPreviewAndFlavorText(u8 taskId); +static void DestroyMapPreviewAssets(u8 taskId); static void sub_80C1E94(void); -static void sub_80C1E78(u8 bgId, const u16 * tilemap); +static void CopyMapPreviewTilemapToBgTilemapBuffer(u8 bgId, const u16 * tilemap); static bool8 sub_80C1F80(bool8 a0); static void sub_80C2208(u8 taskId, TaskFunc taskFunc); static void sub_80C24BC(void); @@ -287,15 +287,15 @@ static u8 sub_80C31C0(void); static u8 sub_80C3348(void); static u8 sub_80C3400(void); static void sub_80C3418(void); -static u16 sub_80C3508(void); -static u16 sub_80C3514(void); +static u16 GetMapCursorX(void); +static u16 GetMapCursorY(void); static u16 sub_80C3520(void); -static u16 sub_80C3580(void); +static u16 GetMapSecUnderCursor(void); static u8 sub_80C35DC(u8 a0); static u8 sub_80C3878(u8 a0); static u8 sub_80C3AC8(u8 a0); -static void sub_80C3D40(void); -static u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3); +static void GetPlayerPositionOnRegionMap_HandleOverrides(void); +static u8 GetSelectedMapSection(u8 a0, u8 a1, s16 a2, s16 a3); static void sub_80C41D8(u16 a0, u16 a1); static void sub_80C4244(void); static void sub_80C4324(bool8 a0); @@ -319,7 +319,7 @@ static void sub_80C4C5C(u16 a0, u16 a1); static void sub_80C4C74(u16 a0, u16 a1); static void sub_80C4C88(u16 a0); static void sub_80C4C9C(u8 a0, u8 a1); -static void sub_80C4CF0(u8 a0, const struct UnkStruct_80C4CF0 *a1); +static void SetGpuWindowDims(u8 a0, const struct GpuWindowParams *a1); static void sub_80C4D30(void); static void sub_80C4E18(const u8 *str); static void sub_80C4E74(const u8 *str); @@ -343,20 +343,20 @@ static const u16 unref_83EF37C[] = { RGB_WHITE, RGB_WHITE }; -static const u16 gUnknown_83EF384[] = INCBIN_U16("graphics/region_map/unk_83EF384.gbapal"); +static const u16 sSelectionCursorPals[] = INCBIN_U16("graphics/region_map/unk_83EF384.gbapal"); static const u16 gUnknown_83EF3A4[] = INCBIN_U16("graphics/region_map/unk_83EF3A4.gbapal"); -static const u32 gUnknown_83EF3C4[] = INCBIN_U32("graphics/region_map/unk_83EF3C4.4bpp.lz"); -static const u32 gUnknown_83EF450[] = INCBIN_U32("graphics/region_map/unk_83EF450.4bpp.lz"); +static const u32 sSelectionCursorLeftTiles[] = INCBIN_U32("graphics/region_map/unk_83EF3C4.4bpp.lz"); +static const u32 sSelectionCursorRightTiles[] = INCBIN_U32("graphics/region_map/unk_83EF450.4bpp.lz"); static const u32 gUnknown_83EF4E0[] = INCBIN_U32("graphics/region_map/unk_83EF4E0.4bpp.lz"); static const u32 gUnknown_83EF524[] = INCBIN_U32("graphics/region_map/unk_83EF524.4bpp.lz"); static const u32 gUnknown_83EF59C[] = INCBIN_U32("graphics/region_map/unk_83EF59C.4bpp.lz"); static const u32 gUnknown_83EF61C[] = INCBIN_U32("graphics/region_map/unk_83EF61C.4bpp.lz"); static const u32 gUnknown_83F0330[] = INCBIN_U32("graphics/region_map/unk_83F0330.4bpp.lz"); static const u32 gUnknown_83F0580[] = INCBIN_U32("graphics/region_map/unk_83F0580.bin.lz"); -static const u32 gUnknown_83F089C[] = INCBIN_U32("graphics/region_map/unk_83F089C.bin.lz"); -static const u32 gUnknown_83F0AFC[] = INCBIN_U32("graphics/region_map/unk_83F0AFC.bin.lz"); -static const u32 gUnknown_83F0C0C[] = INCBIN_U32("graphics/region_map/unk_83F0C0C.bin.lz"); -static const u32 gUnknown_83F0CF0[] = INCBIN_U32("graphics/region_map/unk_83F0CF0.bin.lz"); +static const u32 sRegionMapLayout_Kanto[] = INCBIN_U32("graphics/region_map/unk_83F089C.bin.lz"); +static const u32 sRegionMapLayout_Sevii123[] = INCBIN_U32("graphics/region_map/unk_83F0AFC.bin.lz"); +static const u32 sRegionMapLayout_Sevii45[] = INCBIN_U32("graphics/region_map/unk_83F0C0C.bin.lz"); +static const u32 sRegionMapLayout_Sevii67[] = INCBIN_U32("graphics/region_map/unk_83F0CF0.bin.lz"); static const u32 gUnknown_83F0E0C[] = INCBIN_U32("graphics/region_map/unk_83F0E0C.bin.lz"); static const u32 gUnknown_83F0F1C[] = INCBIN_U32("graphics/region_map/unk_83F0F1C.bin.lz"); static const u32 gUnknown_83F1084[] = INCBIN_U32("graphics/region_map/unk_83F1084.bin.lz"); @@ -452,12 +452,12 @@ static const struct WindowTemplate gUnknown_83F1A60[] = { }, DUMMY_WIN_TEMPLATE }; -ALIGNED(4) const u8 gUnknown_83F1A90[] = {0, 1, 2}; -ALIGNED(4) const u8 gUnknown_83F1A94[] = {0, 7, 2}; +ALIGNED(4) const u8 sTextColor_White[] = {0, 1, 2}; +ALIGNED(4) const u8 sTextColor_Green[] = {0, 7, 2}; ALIGNED(4) const u8 gUnknown_83F1A98[] = {0, 10, 2}; static const u8 *const gUnknown_83F1A9C[] = { - gUnknown_83F1A94, + sTextColor_Green, gUnknown_83F1A98 }; @@ -524,19 +524,19 @@ static const u8 sSeviiMapsecs[3][30] = { } }; -ALIGNED(4) const u8 gUnknown_83F1B00[3][4] = { - {1, 1, 1, 0}, - {0, 0, 0, 0}, - {0, 0, 0, 1} +ALIGNED(4) const bool8 sRegionMapPermissions[3][4] = { + {TRUE , TRUE , TRUE , FALSE}, + {FALSE, FALSE, FALSE, FALSE}, + {FALSE, FALSE, FALSE, TRUE } }; -static const struct UnkStruct_80C4CF0 gUnknown_83F1B0C[3] = { +static const struct GpuWindowParams sStdWindowDims[3] = { {0x18, 0x10, 0x90, 0x20}, {0x18, 0x20, 0x90, 0x30}, {0x00, 0x00, 0x00, 0x00} }; -static const struct OamData gUnknown_83F1B24 = { +static const struct OamData sSelectionCursorOam = { .shape = SPRITE_SHAPE(32x32), .size = SPRITE_SIZE(32x32) }; @@ -547,87 +547,87 @@ static const union AnimCmd gUnknown_83F1B2C[] = { ANIMCMD_JUMP(0) }; -static const union AnimCmd *const gUnknown_83F1B38[] = { +static const union AnimCmd *const sSelectionCursorAnims[] = { gUnknown_83F1B2C }; -static const struct UnkStruct_83F1B3C gUnknown_83F1B3C[] = { +static const struct UnkStruct_83F1B3C sDungeonHighlights[] = { { - .field_0 = MAPSEC_VIRIDIAN_FOREST, - .field_4 = gMapSecName_ViridianForest, - .field_8 = gUnknown_8418ECB + .id = MAPSEC_VIRIDIAN_FOREST, + .name = gMapSecName_ViridianForest, + .desc = gText_RegionMap_AreaDesc_ViridianForest }, { - .field_0 = MAPSEC_MT_MOON, - .field_4 = gMapSecName_MtMoon, - .field_8 = gUnknown_8418F3A + .id = MAPSEC_MT_MOON, + .name = gMapSecName_MtMoon, + .desc = gText_RegionMap_AreaDesc_MtMoon }, { - .field_0 = MAPSEC_DIGLETTS_CAVE, - .field_4 = gMapSecName_DiglettsCave, - .field_8 = gUnknown_8418FB8 + .id = MAPSEC_DIGLETTS_CAVE, + .name = gMapSecName_DiglettsCave, + .desc = gText_RegionMap_AreaDesc_DiglettsCave }, { - .field_0 = MAPSEC_KANTO_VICTORY_ROAD, - .field_4 = gMapSecName_VictoryRoad, - .field_8 = gUnknown_841901C + .id = MAPSEC_KANTO_VICTORY_ROAD, + .name = gMapSecName_VictoryRoad, + .desc = gText_RegionMap_AreaDesc_VictoryRoad }, { - .field_0 = MAPSEC_POKEMON_MANSION, - .field_4 = gMapSecName_PokemonMansion, - .field_8 = gUnknown_841908E + .id = MAPSEC_POKEMON_MANSION, + .name = gMapSecName_PokemonMansion, + .desc = gText_RegionMap_AreaDesc_PokemonMansion }, { - .field_0 = MAPSEC_KANTO_SAFARI_ZONE, - .field_4 = gMapSecName_SafariZone, - .field_8 = gUnknown_8419103 + .id = MAPSEC_KANTO_SAFARI_ZONE, + .name = gMapSecName_SafariZone, + .desc = gText_RegionMap_AreaDesc_SafariZone }, { - .field_0 = MAPSEC_ROCK_TUNNEL, - .field_4 = gMapSecName_RockTunnel, - .field_8 = gUnknown_841917D + .id = MAPSEC_ROCK_TUNNEL, + .name = gMapSecName_RockTunnel, + .desc = gText_RegionMap_AreaDesc_RockTunnel }, { - .field_0 = MAPSEC_SEAFOAM_ISLANDS, - .field_4 = gMapSecName_SeafoamIslands, - .field_8 = gUnknown_8419201 + .id = MAPSEC_SEAFOAM_ISLANDS, + .name = gMapSecName_SeafoamIslands, + .desc = gText_RegionMap_AreaDesc_SeafoamIslands }, { - .field_0 = MAPSEC_POKEMON_TOWER, - .field_4 = gMapSecName_PokemonTower, - .field_8 = gUnknown_841926D + .id = MAPSEC_POKEMON_TOWER, + .name = gMapSecName_PokemonTower, + .desc = gText_RegionMap_AreaDesc_PokemonTower }, { - .field_0 = MAPSEC_CERULEAN_CAVE, - .field_4 = gMapSecName_CeruleanCave, - .field_8 = gUnknown_84192E2 + .id = MAPSEC_CERULEAN_CAVE, + .name = gMapSecName_CeruleanCave, + .desc = gText_RegionMap_AreaDesc_CeruleanCave }, { - .field_0 = MAPSEC_POWER_PLANT, - .field_4 = gMapSecName_PowerPlant, - .field_8 = gUnknown_841935B + .id = MAPSEC_POWER_PLANT, + .name = gMapSecName_PowerPlant, + .desc = gText_RegionMap_AreaDesc_PowerPlant }, { - .field_0 = MAPSEC_MT_EMBER, - .field_4 = gMapSecName_MtEmber, - .field_8 = gUnknown_84193D5 + .id = MAPSEC_MT_EMBER, + .name = gMapSecName_MtEmber, + .desc = gText_RegionMap_AreaDesc_MtEmber }, { - .field_0 = MAPSEC_BERRY_FOREST, - .field_4 = gMapSecName_BerryForest, - .field_8 = gUnknown_8419444 + .id = MAPSEC_BERRY_FOREST, + .name = gMapSecName_BerryForest, + .desc = gText_RegionMap_AreaDesc_BerryForest }, { - .field_0 = MAPSEC_ICEFALL_CAVE, - .field_4 = gMapSecName_IcefallCave, - .field_8 = gUnknown_84194C9 + .id = MAPSEC_ICEFALL_CAVE, + .name = gMapSecName_IcefallCave, + .desc = gText_RegionMap_AreaDesc_IcefallCave }, { - .field_0 = MAPSEC_LOST_CAVE, - .field_4 = gMapSecName_LostCave, - .field_8 = gUnknown_841953F + .id = MAPSEC_LOST_CAVE, + .name = gMapSecName_LostCave, + .desc = gText_RegionMap_AreaDesc_LostCave }, { - .field_0 = MAPSEC_TANOBY_CHAMBERS, - .field_4 = gMapSecName_TanobyChambers, - .field_8 = gUnknown_84195AC + .id = MAPSEC_TANOBY_CHAMBERS, + .name = gMapSecName_TanobyChambers, + .desc = gText_RegionMap_AreaDesc_TanobyRuins }, { - .field_0 = MAPSEC_ALTERING_CAVE, - .field_4 = gMapSecName_AlteringCave, - .field_8 = gUnknown_8419629 + .id = MAPSEC_ALTERING_CAVE, + .name = gMapSecName_AlteringCave, + .desc = gText_RegionMap_AreaDesc_AlteringCave }, { - .field_0 = MAPSEC_PATTERN_BUSH, - .field_4 = gMapSecName_PatternBush, - .field_8 = gUnknown_841969D + .id = MAPSEC_PATTERN_BUSH, + .name = gMapSecName_PatternBush, + .desc = gText_RegionMap_AreaDesc_PatternBush }, { - .field_0 = MAPSEC_DOTTED_HOLE, - .field_4 = gMapSecName_DottedHole, - .field_8 = gUnknown_841971A + .id = MAPSEC_DOTTED_HOLE, + .name = gMapSecName_DottedHole, + .desc = gText_RegionMap_AreaDesc_DottedHole } }; @@ -645,7 +645,7 @@ static const union AnimCmd *const gUnknown_83F1C30[] = { gAnimCmd_83F1C28 }; -static const struct UnkStruct_80C4CF0 gUnknown_83F1C34 = { +static const struct GpuWindowParams gUnknown_83F1C34 = { 0x18, 0x10, 0xD8, 0xA0 }; @@ -717,19 +717,19 @@ static const union AnimCmd *const gUnknown_83F1C98[] = { gAnimCmd_83F1C8C }; -static const u16 gUnknown_83F1CA0[] = { +static const u16 sWinFlags[] = { DISPCNT_WIN0_ON, DISPCNT_WIN1_ON }; -static const u8 gUnknown_83F1CA4[][2] = { +static const u8 sWinRegs[][2] = { {REG_OFFSET_WIN0V, REG_OFFSET_WIN0H}, {REG_OFFSET_WIN1V, REG_OFFSET_WIN1H} }; static const u8 gUnknown_83F1CA8[] = {15, 1, 2}; -static const u8 *const gUnknown_83F1CAC[] = { +static const u8 *const sMapNames[] = { [MAPSEC_PALLET_TOWN - MAPSECS_KANTO] = gMapSecName_PalletTown, [MAPSEC_VIRIDIAN_CITY - MAPSECS_KANTO] = gMapSecName_ViridianCity, [MAPSEC_PEWTER_CITY - MAPSECS_KANTO] = gMapSecName_PewterCity, @@ -841,7 +841,7 @@ static const u8 *const gUnknown_83F1CAC[] = { [MAPSEC_SPECIAL_AREA - MAPSECS_KANTO] = gMapSecName_CeladonDept }; -static const u16 gUnknown_83F1E60[0xC6][2] = { +static const u16 sMapSectionTopLeftCorners[0xC6][2] = { [MAPSEC_PALLET_TOWN - MAPSECS_KANTO] = {0x04, 0x0b}, [MAPSEC_VIRIDIAN_CITY - MAPSECS_KANTO] = {0x04, 0x08}, [MAPSEC_PEWTER_CITY - MAPSECS_KANTO] = {0x04, 0x04}, @@ -915,7 +915,7 @@ static const u16 gUnknown_83F1E60[0xC6][2] = { [MAPSEC_BIRTH_ISLAND - MAPSECS_KANTO] = {0x12, 0x0d}, }; -static const u16 gUnknown_83F2178[0xC6][2] = { +static const u16 sMapSectionDimensions[0xC6][2] = { [MAPSEC_PALLET_TOWN - MAPSECS_KANTO] = {0x01, 0x01}, [MAPSEC_VIRIDIAN_CITY - MAPSECS_KANTO] = {0x01, 0x01}, [MAPSEC_PEWTER_CITY - MAPSECS_KANTO] = {0x01, 0x01}, @@ -1026,7 +1026,7 @@ static const u16 gUnknown_83F2178[0xC6][2] = { [MAPSEC_EMBER_SPA - MAPSECS_KANTO] = {0x01, 0x01} }; -static const u8 gUnknown_83F2490[][15][22] = { +static const u8 sRegionMapSections_Kanto[][15][22] = { { {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, @@ -1096,7 +1096,7 @@ static const u8 gUnknown_83F2490[][15][22] = { } }; -static const u8 gUnknown_83F2724[][15][22] = { +static const u8 sRegionMapSections_Sevii123[][15][22] = { { {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, @@ -1132,7 +1132,7 @@ static const u8 gUnknown_83F2724[][15][22] = { } }; -static const u8 gUnknown_83F29B8[][15][22] = { +static const u8 sRegionMapSections_Sevii45[][15][22] = { { {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, @@ -1168,7 +1168,7 @@ static const u8 gUnknown_83F29B8[][15][22] = { } }; -static const u8 gUnknown_83F2C4C[][15][22] = { +static const u8 sRegionMapSections_Sevii67[][15][22] = { { {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_OUTCAST_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, {MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_OUTCAST_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}, @@ -1204,7 +1204,7 @@ static const u8 gUnknown_83F2C4C[][15][22] = { } }; -static const u8 gUnknown_83F2EE0[][3] = { +static const u8 sMapsecToSpawn[][3] = { [MAPSEC_PALLET_TOWN - MAPSECS_KANTO] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), SPAWN_PALLET_TOWN}, [MAPSEC_VIRIDIAN_CITY - MAPSECS_KANTO] = {MAP_GROUP(VIRIDIAN_CITY), MAP_NUM(VIRIDIAN_CITY), SPAWN_VIRIDIAN_CITY}, [MAPSEC_PEWTER_CITY - MAPSECS_KANTO] = {MAP_GROUP(PEWTER_CITY), MAP_NUM(PEWTER_CITY), SPAWN_PEWTER_CITY}, @@ -1354,12 +1354,12 @@ static void sub_80BFEDC(u8 kind) else { gUnknown_2031DE0 = TRUE; - gUnknown_20399D4->field_4796 = kind; + gUnknown_20399D4->mapType = kind; gUnknown_20399D4->field_47A0 = 0; gUnknown_20399D4->field_47A4 = 0; gUnknown_20399D4->field_47A8 = 0; sub_80BFFD0(); - SetMainCallback2(sub_80C0100); + SetMainCallback2(CB2_OpenRegionMap); } } @@ -1373,13 +1373,13 @@ void sub_80BFF50(u8 kind, MainCallback cb) else { gUnknown_2031DE0 = TRUE; - gUnknown_20399D4->field_4796 = kind; + gUnknown_20399D4->mapType = kind; gUnknown_20399D4->field_47A0 = 0; gUnknown_20399D4->field_47A4 = 0; gUnknown_20399D4->field_47A8 = 0; - gUnknown_20399D4->field_47BC = cb; + gUnknown_20399D4->savedCallback = cb; sub_80BFFD0(); - SetMainCallback2(sub_80C0100); + SetMainCallback2(CB2_OpenRegionMap); } } @@ -1389,7 +1389,7 @@ static void sub_80BFFD0(void) u8 j; u8 r7; - switch (gUnknown_20399D4->field_4796) + switch (gUnknown_20399D4->mapType) { default: case 0: @@ -1402,10 +1402,10 @@ static void sub_80BFFD0(void) } for (i = 0; i < 4; i++) { - gUnknown_20399D4->field_4797[i] = gUnknown_83F1B00[gUnknown_20399D4->field_4796][i]; + gUnknown_20399D4->regionMapPermissions[i] = sRegionMapPermissions[gUnknown_20399D4->mapType][i]; } if (!FlagGet(FLAG_SYS_SEVII_MAP_123)) - gUnknown_20399D4->field_4797[0] = FALSE; + gUnknown_20399D4->regionMapPermissions[MAPPERM_0] = FALSE; r7 = 0; j = 0; if (gMapHeader.regionMapSectionId >= MAPSECS_SEVII_123) @@ -1427,21 +1427,21 @@ static void sub_80BFFD0(void) gUnknown_20399D4->field_479C = r7; } -static void sub_80C0100(void) +static void CB2_OpenRegionMap(void) { switch (gUnknown_20399D4->field_47A4) { case 0: - sub_80C08E0(); + NullVBlankHBlankCallbacks(); break; case 1: - sub_80C0904(); + ResetGpu(); break; case 2: - sub_80C0A6C(); + ResetOamForRegionMap(); break; case 3: - if (!sub_80C0238()) + if (!HandleLoadRegionMapGfx()) return; break; case 4: @@ -1449,11 +1449,11 @@ static void sub_80C0100(void) CopyBgTilemapBufferToVram(1); break; case 5: - sub_80C0CC8(0, gUnknown_20399D4->field_0026[gUnknown_20399D4->field_479B]); + sub_80C0CC8(0, gUnknown_20399D4->layouts[gUnknown_20399D4->field_479B]); CopyBgTilemapBufferToVram(0); - if (gUnknown_20399D4->field_4796 != 0) + if (gUnknown_20399D4->mapType != 0) { - sub_80C0CC8(1, gUnknown_20399D4->field_0026[4]); + sub_80C0CC8(1, gUnknown_20399D4->layouts[4]); CopyBgTilemapBufferToVram(1); } break; @@ -1466,8 +1466,8 @@ static void sub_80C0100(void) PutWindowTilemap(1); break; case 8: - if (sub_80C0E04(2) == TRUE) - sub_80C0A88(1); + if (GetRegionMapPermission(MAPPERM_2) == TRUE) + SetBg0andBg3Visibility(1); break; default: BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); @@ -1478,7 +1478,7 @@ static void sub_80C0100(void) gUnknown_20399D4->field_47A4++; } -static bool8 sub_80C0238(void) +static bool8 HandleLoadRegionMapGfx(void) { switch (gUnknown_20399D4->field_47A8) { @@ -1488,7 +1488,7 @@ static bool8 sub_80C0238(void) case 1: LoadPalette(gUnknown_83EF2DC, 0x00, 0xA0); sub_80BFEA0(); - if (gUnknown_20399D4->field_4796 != 0) + if (gUnknown_20399D4->mapType != 0) { LoadPalette(&gUnknown_83EF23C[15], 0x00, 0x02); LoadPalette(&gUnknown_83EF23C[15], 0x10, 0x02); @@ -1502,7 +1502,7 @@ static bool8 sub_80C0238(void) break; case 3: DecompressAndCopyTileDataToVram(0, gUnknown_83EF61C, 0, 0, 0); - if (gUnknown_20399D4->field_4796 != 0) + if (gUnknown_20399D4->mapType != 0) { DecompressAndCopyTileDataToVram(1, gUnknown_83F1978, 0, 0, 0); } @@ -1512,19 +1512,19 @@ static bool8 sub_80C0238(void) return FALSE; break; case 5: - LZ77UnCompWram(gUnknown_83F089C, gUnknown_20399D4->field_0026[0]); + LZ77UnCompWram(sRegionMapLayout_Kanto, gUnknown_20399D4->layouts[0]); break; case 6: - LZ77UnCompWram(gUnknown_83F0AFC, gUnknown_20399D4->field_0026[1]); + LZ77UnCompWram(sRegionMapLayout_Sevii123, gUnknown_20399D4->layouts[1]); break; case 7: - LZ77UnCompWram(gUnknown_83F0C0C, gUnknown_20399D4->field_0026[2]); + LZ77UnCompWram(sRegionMapLayout_Sevii45, gUnknown_20399D4->layouts[2]); break; case 8: - LZ77UnCompWram(gUnknown_83F0CF0, gUnknown_20399D4->field_0026[3]); + LZ77UnCompWram(sRegionMapLayout_Sevii67, gUnknown_20399D4->layouts[3]); break; default: - LZ77UnCompWram(gUnknown_83F19A0, gUnknown_20399D4->field_0026[4]); + LZ77UnCompWram(gUnknown_83F19A0, gUnknown_20399D4->layouts[4]); return TRUE; } gUnknown_20399D4->field_47A8++; @@ -1539,7 +1539,7 @@ static void sub_80C03E8(void) static bool32 sub_80C0410(void) { - if (sub_80C4164(sub_80C0E20(), 0, sub_80C3514(), sub_80C3508()) == 99) + if (GetSelectedMapSection(GetWhichRegionMap(), 0, GetMapCursorY(), GetMapCursorX()) == 99) return FALSE; else return TRUE; @@ -1551,9 +1551,9 @@ static void sub_80C0450(void) { if ((sub_80C3AC8(0) != 1 && sub_80C3AC8(0) != 0) || (sub_80C3AC8(1) != 1 && sub_80C3AC8(1) != 0)) PlaySE(SE_Z_SCROLL); - if (sub_80C3508() == 21 && sub_80C3514() == 11 && sub_80C0E04(0) == TRUE) + if (GetMapCursorX() == 21 && GetMapCursorY() == 11 && GetRegionMapPermission(MAPPERM_0) == TRUE) PlaySE(SE_W255); - else if (sub_80C3508() == 21 && sub_80C3514() == 13) + else if (GetMapCursorX() == 21 && GetMapCursorY() == 13) PlaySE(SE_W255); } } @@ -1563,13 +1563,13 @@ static void sub_80C04E4(u8 taskId) switch (gUnknown_20399D4->field_47A0) { case 0: - sub_80C4398(sub_80C0E20(), taskId, gUnknown_20399D4->field_47B8); + sub_80C4398(GetWhichRegionMap(), taskId, gUnknown_20399D4->field_47B8); sub_80C3008(0, 0); sub_80C41D8(1, 1); gUnknown_20399D4->field_47A0++; break; case 1: - if (gUnknown_20399D4->field_4797[2] == 1) + if (gUnknown_20399D4->regionMapPermissions[MAPPERM_2] == TRUE) { sub_80C2208(taskId, gUnknown_20399D4->field_47B8); } @@ -1578,13 +1578,13 @@ static void sub_80C04E4(u8 taskId) ShowBg(0); ShowBg(3); ShowBg(1); - sub_80C4E18(gUnknown_8418EB5); - sub_80C4E74(gUnknown_8418E8B); + sub_80C4E18(gText_RegionMap_DPadMove); + sub_80C4E74(gText_RegionMap_Space); sub_80C4ED0(FALSE); sub_80C4324(FALSE); sub_80C3154(FALSE); - sub_80C48BC(sub_80C0E20(), 25, FALSE); - sub_80C4960(sub_80C0E20(), 25, FALSE); + sub_80C48BC(GetWhichRegionMap(), 25, FALSE); + sub_80C4960(GetWhichRegionMap(), 25, FALSE); } gUnknown_20399D4->field_47A0++; break; @@ -1611,40 +1611,40 @@ static void sub_80C04E4(u8 taskId) sub_80C0BB0(); sub_80C0B9C(); sub_80C0450(); - if (sub_80C3580() != MAPSEC_NONE) + if (GetMapSecUnderCursor() != MAPSEC_NONE) { - if (sub_80C0E04(1) == TRUE) + if (GetRegionMapPermission(MAPPERM_1) == TRUE) { if (sub_80C3AC8(1) == 2) { - sub_80C4E74(gUnknown_8418E8D); + sub_80C4E74(gText_RegionMap_AButtonGuide); } else { - sub_80C4E74(gUnknown_8418E8B); + sub_80C4E74(gText_RegionMap_Space); } } } else { - if (sub_80C3508() == 21 && sub_80C3514() == 11 && sub_80C0E04(0) == TRUE) + if (GetMapCursorX() == 21 && GetMapCursorY() == 11 && GetRegionMapPermission(MAPPERM_0) == TRUE) { - sub_80C4E74(gUnknown_8418EA7); + sub_80C4E74(gText_RegionMap_AButtonSwitch); } - else if (sub_80C3508() == 21 && sub_80C3514() == 13) + else if (GetMapCursorX() == 21 && GetMapCursorY() == 13) { - sub_80C4E74(gUnknown_8418E95); + sub_80C4E74(gText_RegionMap_AButtonCancel); } else { - sub_80C4E74(gUnknown_8418E8B); + sub_80C4E74(gText_RegionMap_Space); } } break; case 4: - if (sub_80C3AC8(1) == 2 && gUnknown_20399D4->field_4797[1] == 1) + if (sub_80C3AC8(1) == 2 && gUnknown_20399D4->regionMapPermissions[MAPPERM_1] == TRUE) { - sub_80C195C(0, taskId, sub_80C07F8); + RegionMapCreateDungeonMapPreview(0, taskId, sub_80C07F8); } break; case 5: @@ -1656,7 +1656,7 @@ static void sub_80C04E4(u8 taskId) } break; case 4: - if (sub_80C0E04(2) == 1) + if (GetRegionMapPermission(MAPPERM_2) == 1) { sub_80C2C1C(taskId); // FIXME: goto required to match @@ -1699,7 +1699,7 @@ static void sub_80C07F8(u8 taskId) static void sub_80C0820(u8 taskId) { - if (sub_80C0E04(2) == TRUE) + if (GetRegionMapPermission(MAPPERM_2) == TRUE) sub_80C25BC(); sub_80C4A04(); sub_80C3188(); @@ -1707,10 +1707,10 @@ static void sub_80C0820(u8 taskId) sub_80C4D30(); DestroyTask(taskId); FreeAllWindowBuffers(); - if (gUnknown_20399D4->field_47BC == NULL) + if (gUnknown_20399D4->savedCallback == NULL) SetMainCallback2(gMain.savedCallback); else - SetMainCallback2(gUnknown_20399D4->field_47BC); + SetMainCallback2(gUnknown_20399D4->savedCallback); FREE_IF_NOT_NULL(gUnknown_20399D4); } @@ -1734,7 +1734,7 @@ static void sub_80C08CC(void) TransferPlttBuffer(); } -static void sub_80C08E0(void) +static void NullVBlankHBlankCallbacks(void) { SetVBlankCallback(NULL); SetHBlankCallback(NULL); @@ -1745,7 +1745,7 @@ static void sub_80C08F4(void) SetVBlankCallback(sub_80C08CC); } -static void sub_80C0904(void) +static void ResetGpu(void) { DmaFillLarge16(3, 0, (void *)VRAM, VRAM_SIZE, 0x1000); DmaFill32Defvars(3, 0, (void *)OAM, OAM_SIZE); @@ -1764,18 +1764,18 @@ static void sub_80C0904(void) InitWindows(gUnknown_83F1A60); DeactivateAllTextPrinters(); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON); - sub_80C0A2C(); + SetBgTilemapBuffers(); sub_80C0AB8(); } -static void sub_80C0A2C(void) +static void SetBgTilemapBuffers(void) { - SetBgTilemapBuffer(0, gUnknown_20399D4->field_1796[0]); - SetBgTilemapBuffer(1, gUnknown_20399D4->field_1796[1]); - SetBgTilemapBuffer(2, gUnknown_20399D4->field_1796[2]); + SetBgTilemapBuffer(0, gUnknown_20399D4->bgTilemapBuffers[0]); + SetBgTilemapBuffer(1, gUnknown_20399D4->bgTilemapBuffers[1]); + SetBgTilemapBuffer(2, gUnknown_20399D4->bgTilemapBuffers[2]); } -static void sub_80C0A6C(void) +static void ResetOamForRegionMap(void) { ResetSpriteData(); ResetPaletteFade(); @@ -1784,7 +1784,7 @@ static void sub_80C0A6C(void) ScanlineEffect_Stop(); } -static void sub_80C0A88(u8 mode) +static void SetBg0andBg3Visibility(u8 mode) { switch (mode) { @@ -1806,10 +1806,10 @@ static void sub_80C0AB8(void) sub_80C4C48(6); sub_80C4C74(0x39, 0x39); sub_80C4C88(0x1b); - sub_80C4CF0(0, &gUnknown_83F1B0C[0]); - sub_80C4CF0(1, &gUnknown_83F1B0C[1]); + SetGpuWindowDims(0, &sStdWindowDims[0]); + SetGpuWindowDims(1, &sStdWindowDims[1]); sub_80C4C9C(0, 0); - if (sub_80C3580() != MAPSEC_NONE) + if (GetMapSecUnderCursor() != MAPSEC_NONE) sub_80C4C9C(1, 0); } @@ -1819,21 +1819,21 @@ static void sub_80C0B18(void) FillWindowPixelBuffer(0, PIXEL_FILL(0)); if (sub_80C3520() == MAPSEC_NONE) { - sub_80C4CF0(0, &gUnknown_83F1B0C[2]); + SetGpuWindowDims(0, &sStdWindowDims[2]); } else { GetMapName(gUnknown_20399D4->field_0000, sub_80C3520(), 0); - AddTextPrinterParameterized3(0, 2, 2, 2, gUnknown_83F1A90, 0, gUnknown_20399D4->field_0000); + AddTextPrinterParameterized3(0, 2, 2, 2, sTextColor_White, 0, gUnknown_20399D4->field_0000); PutWindowTilemap(0); CopyWindowToVram(0, 2); - sub_80C4CF0(0, &gUnknown_83F1B0C[0]); + SetGpuWindowDims(0, &sStdWindowDims[0]); } } static void sub_80C0B9C(void) { - sub_80C4CF0(1, &gUnknown_83F1B0C[1]); + SetGpuWindowDims(1, &sStdWindowDims[1]); } static void sub_80C0BB0(void) @@ -1845,17 +1845,17 @@ static void sub_80C0BB0(void) gUnknown_20399D4->field_47B0 = 32; sub_80C4C9C(1, 1); ClearWindowTilemap(1); - mapsecId = sub_80C3580(); + mapsecId = GetMapSecUnderCursor(); if (mapsecId != MAPSEC_NONE) { descOffset = mapsecId - MAPSECS_KANTO; sub_80C4C9C(1, 0); gUnknown_20399D4->field_47AC = 1; - gUnknown_20399D4->field_47AA = StringLength(gUnknown_83F1CAC[descOffset]); + gUnknown_20399D4->field_47AA = StringLength(sMapNames[descOffset]); gUnknown_20399D4->field_47AE = gUnknown_20399D4->field_47AA * 10 + 50; gUnknown_20399D4->field_47B0 = 48; FillWindowPixelBuffer(1, PIXEL_FILL(0)); - StringCopy(gUnknown_20399D4->field_0013, gUnknown_83F1CAC[descOffset]); + StringCopy(gUnknown_20399D4->field_0013, sMapNames[descOffset]); AddTextPrinterParameterized3(1, 2, 12, 2, gUnknown_83F1A9C[sub_80C3AC8(1) - 2], 0, gUnknown_20399D4->field_0013); PutWindowTilemap(1); CopyWindowToVram(1, 3); @@ -1875,7 +1875,7 @@ static void sub_80C0CC8(u8 bg, u16 *map) s16 i; s16 j; u8 r4; - u16 *buffer = gUnknown_20399D4->field_1796[bg]; + u16 *buffer = gUnknown_20399D4->bgTilemapBuffers[bg]; for (i = 0; i < 20; i++) { for (j = 0; j < 32; j++) @@ -1886,7 +1886,7 @@ static void sub_80C0CC8(u8 bg, u16 *map) buffer[32 * i + j] = map[0]; } } - if (gUnknown_20399D4->field_4797[0] == 1) + if (gUnknown_20399D4->regionMapPermissions[MAPPERM_0] == TRUE) { WriteSequenceToBgTilemapBuffer(0, 0x0F0, 0x18, 0x0E, 3, 1, 0x3, 0x001); WriteSequenceToBgTilemapBuffer(0, 0x100, 0x18, 0x0F, 3, 1, 0x3, 0x001); @@ -1896,18 +1896,18 @@ static void sub_80C0CC8(u8 bg, u16 *map) r4 = gUnknown_20399D8->field_1CCA; else r4 = gUnknown_20399D4->field_479B; - if (r4 == 2 && !FlagGet(FLAG_WORLD_MAP_NAVEL_ROCK_EXTERIOR)) + if (r4 == REGIONMAP_SEVII45 && !FlagGet(FLAG_WORLD_MAP_NAVEL_ROCK_EXTERIOR)) FillBgTilemapBufferRect_Palette0(0, 0x003, 13, 11, 3, 2); - if (r4 == 3 && !FlagGet(FLAG_WORLD_MAP_BIRTH_ISLAND_EXTERIOR)) + if (r4 == REGIONMAP_SEVII67 && !FlagGet(FLAG_WORLD_MAP_BIRTH_ISLAND_EXTERIOR)) FillBgTilemapBufferRect_Palette0(0, 0x003, 21, 16, 3, 3); } -static u8 sub_80C0E04(u8 a0) +static bool8 GetRegionMapPermission(u8 attr) { - return gUnknown_20399D4->field_4797[a0]; + return gUnknown_20399D4->regionMapPermissions[attr]; } -static u8 sub_80C0E20(void) +static u8 GetWhichRegionMap(void) { return gUnknown_20399D4->field_479B; } @@ -1917,7 +1917,7 @@ static u8 sub_80C0E34(void) return gUnknown_20399D4->field_479C; } -static void sub_80C0E48(u8 a0) +static void SetWhichRegionMap(u8 a0) { gUnknown_20399D4->field_479B = a0; } @@ -1936,31 +1936,31 @@ static void sub_80C0E70(u8 a0, u8 taskId, TaskFunc taskFunc) gUnknown_20399D8->field_1CCC = 1; else gUnknown_20399D8->field_1CCC = 0; - gUnknown_20399D8->field_14B0[0].field_408 = 0x58; - gUnknown_20399D8->field_14B0[1].field_408 = 0x98; + gUnknown_20399D8->selectionCursorSubspriteData[0].xCoord = 0x58; + gUnknown_20399D8->selectionCursorSubspriteData[1].xCoord = 0x98; switch (gUnknown_20399D8->field_1CCC) { case 1: - LZ77UnCompWram(gUnknown_83F1084, gUnknown_20399D8->field_1000); + LZ77UnCompWram(gUnknown_83F1084, gUnknown_20399D8->tileMap); gUnknown_20399D8->field_1CCE = 6; break; case 2: // never reached - LZ77UnCompWram(gUnknown_83F1190, gUnknown_20399D8->field_1000); + LZ77UnCompWram(gUnknown_83F1190, gUnknown_20399D8->tileMap); gUnknown_20399D8->field_1CCE = 4; break; case 3: default: gUnknown_20399D8->field_1CCE = 3; - LZ77UnCompWram(gUnknown_83F0F1C, gUnknown_20399D8->field_1000); + LZ77UnCompWram(gUnknown_83F0F1C, gUnknown_20399D8->tileMap); break; } - LZ77UnCompWram(gUnknown_83F0580, gUnknown_20399D8->field_0000); + LZ77UnCompWram(gUnknown_83F0580, gUnknown_20399D8->bgTiles); gUnknown_20399D8->field_1CC8 = 0; gUnknown_20399D8->field_1CCA = a0; gUnknown_20399D8->field_1CD0 = taskFunc; gUnknown_20399D8->field_1CCB = sub_80C0E34(); sub_80C4AAC(0); - sub_80C4E74(gUnknown_8418EB0); + sub_80C4E74(gText_RegionMap_AButtonOK); gTasks[taskId].func = sub_80C1098; } @@ -2004,16 +2004,16 @@ static void sub_80C1098(u8 taskId) switch (gUnknown_20399D8->field_1CC8) { case 0: - sub_80C08E0(); - sub_80C4E18(gUnknown_8418EBC); + NullVBlankHBlankCallbacks(); + sub_80C4E18(gText_RegionMap_UpDownPick); gUnknown_20399D8->field_1CC8++; break; case 1: - LoadBgTiles(2, gUnknown_20399D8->field_0000, 0x1000, 0x000); + LoadBgTiles(2, gUnknown_20399D8->bgTiles, 0x1000, 0x000); gUnknown_20399D8->field_1CC8++; break; case 2: - sub_80C1324(2, gUnknown_20399D8->field_1000); + sub_80C1324(2, gUnknown_20399D8->tileMap); CopyBgTilemapBufferToVram(2); gUnknown_20399D8->field_1CC8++; break; @@ -2044,7 +2044,7 @@ static void sub_80C1098(u8 taskId) } break; case 8: - if (sub_80C16D0() == TRUE) + if (LoadAndCreateSelectionCursorSpriteGfx() == TRUE) { gUnknown_20399D8->field_1CC8++; } @@ -2052,7 +2052,7 @@ static void sub_80C1098(u8 taskId) case 9: if (sub_80C1478() == TRUE) { - sub_80C0E48(gUnknown_20399D8->field_1CCA); + SetWhichRegionMap(gUnknown_20399D8->field_1CCA); if (sub_80C0E34() == gUnknown_20399D8->field_1CCA) { sub_80C4324(FALSE); @@ -2065,7 +2065,7 @@ static void sub_80C1098(u8 taskId) case 10: if (sub_80C12EC() == TRUE) { - sub_80C1880(); + DestroySelectionCursorSprites(); sub_80C0FE0(); gUnknown_20399D8->field_1CC8++; } @@ -2090,11 +2090,11 @@ static void sub_80C1280(u8 taskId) { gTasks[taskId].func = gUnknown_20399D8->field_1CD0; HideBg(2); - sub_80C4E18(gUnknown_8418EB5); - sub_80C4E74(gUnknown_8418EA7); + sub_80C4E18(gText_RegionMap_DPadMove); + sub_80C4E74(gText_RegionMap_AButtonSwitch); sub_80C0AB8(); sub_80C0B9C(); - sub_80C4CF0(0, &gUnknown_83F1B0C[2]); + SetGpuWindowDims(0, &sStdWindowDims[2]); FREE_IF_NOT_NULL(gUnknown_20399D8); } @@ -2117,7 +2117,7 @@ static void sub_80C1324(u8 bg, u16 *map) { s16 i; s16 j; - u16 *buffer = gUnknown_20399D4->field_1796[bg]; + u16 *buffer = gUnknown_20399D4->bgTilemapBuffers[bg]; for (i = 0; i < 20; i++) { for (j = 0; j < 32; j++) @@ -2132,7 +2132,7 @@ static void sub_80C1324(u8 bg, u16 *map) static void sub_80C1390(void) { - struct UnkStruct_80C4CF0 data; + struct GpuWindowParams data; data.v0 = gUnknown_20399D8->field_1CD4[0] = 0x48; data.v2 = gUnknown_20399D8->field_1CD4[1] = 8 * (gUnknown_20399D8->field_1CCE + 4 * gUnknown_20399D8->field_1CCA); data.v4 = gUnknown_20399D8->field_1CD4[2] = 0xA8; @@ -2142,7 +2142,7 @@ static void sub_80C1390(void) sub_80C4C74(0x1f, 0x15); sub_80C4C88(0x3f); sub_80C4C9C(1, 0); - sub_80C4CF0(1, &data); + SetGpuWindowDims(1, &data); } static bool8 sub_80C144C(void) @@ -2162,7 +2162,7 @@ static bool8 sub_80C144C(void) static bool8 sub_80C1478(void) { bool8 r6 = FALSE; - struct UnkStruct_80C4CF0 data; + struct GpuWindowParams data; data.v0 = gUnknown_20399D8->field_1CD4[0] = 0x48; data.v2 = gUnknown_20399D8->field_1CD4[1] = 8 * (gUnknown_20399D8->field_1CCE + 4 * gUnknown_20399D8->field_1CCA); data.v4 = gUnknown_20399D8->field_1CD4[2] = 0xA8; @@ -2188,7 +2188,7 @@ static bool8 sub_80C1478(void) if (JOY_NEW(B_BUTTON)) { gUnknown_20399D8->field_1CCA = gUnknown_20399D8->field_1CCB; - sub_80C0CC8(0, gUnknown_20399D4->field_0026[gUnknown_20399D8->field_1CCA]); + sub_80C0CC8(0, gUnknown_20399D4->layouts[gUnknown_20399D8->field_1CCA]); CopyBgTilemapBufferToVram(0); sub_80C48BC(255, 25, TRUE); sub_80C4960(255, 25, TRUE); @@ -2196,8 +2196,8 @@ static bool8 sub_80C1478(void) } if (r6) { - sub_80C0CC8(0, gUnknown_20399D4->field_0026[gUnknown_20399D8->field_1CCA]); - sub_80C4E74(gUnknown_8418EB0); + sub_80C0CC8(0, gUnknown_20399D4->layouts[gUnknown_20399D8->field_1CCA]); + sub_80C4E74(gText_RegionMap_AButtonOK); CopyBgTilemapBufferToVram(0); CopyBgTilemapBufferToVram(3); sub_80C48BC(255, 25, TRUE); @@ -2209,275 +2209,275 @@ static bool8 sub_80C1478(void) sub_80C4324(TRUE); else sub_80C4324(FALSE); - sub_80C4CF0(1, &data); + SetGpuWindowDims(1, &data); return FALSE; } -static void sub_80C16B8(struct Sprite * sprite) +static void SpriteCB_SelectionCursor(struct Sprite * sprite) { sprite->pos1.y = gUnknown_20399D8->field_1CD4[1] + 16; } -static bool8 sub_80C16D0(void) +static bool8 LoadAndCreateSelectionCursorSpriteGfx(void) { - switch (gUnknown_20399D8->field_1CC9) + switch (gUnknown_20399D8->selectionCursorLoadState) { case 0: - LZ77UnCompWram(gUnknown_83EF3C4, gUnknown_20399D8->field_14B0[0].field_000); + LZ77UnCompWram(sSelectionCursorLeftTiles, gUnknown_20399D8->selectionCursorSubspriteData[0].tiles); break; case 1: - LZ77UnCompWram(gUnknown_83EF450, gUnknown_20399D8->field_14B0[1].field_000); + LZ77UnCompWram(sSelectionCursorRightTiles, gUnknown_20399D8->selectionCursorSubspriteData[1].tiles); break; case 2: - sub_80C1754(0, 2, 2); - sub_80C1754(1, 3, 3); + CreateSelectionCursorSubsprite(0, 2, 2); + CreateSelectionCursorSubsprite(1, 3, 3); break; default: return TRUE; } - gUnknown_20399D8->field_1CC9++; + gUnknown_20399D8->selectionCursorLoadState++; return FALSE; } -static void sub_80C1754(u8 a0, u16 a1, u16 a2) +static void CreateSelectionCursorSubsprite(u8 whichSprite, u16 tileTag, u16 paletteTag) { - sub_80C176C(a0, a1, a2); + RealCreateSelectionCursorSubsprite(whichSprite, tileTag, paletteTag); } -static void sub_80C176C(u8 a0, u16 a1, u16 a2) +static void RealCreateSelectionCursorSubsprite(u8 whichSprite, u16 tileTag, u16 paletteTag) { u8 spriteId; struct SpriteSheet spriteSheet = { - .data = gUnknown_20399D8->field_14B0[a0].field_000, + .data = gUnknown_20399D8->selectionCursorSubspriteData[whichSprite].tiles, .size = 0x400, - .tag = a1 + .tag = tileTag }; struct SpritePalette spritePalette = { - .data = gUnknown_83EF384, - .tag = a2 + .data = sSelectionCursorPals, + .tag = paletteTag }; struct SpriteTemplate template = { - .tileTag = a1, - .paletteTag = a2, - .oam = &gUnknown_83F1B24, - .anims = gUnknown_83F1B38, + .tileTag = tileTag, + .paletteTag = paletteTag, + .oam = &sSelectionCursorOam, + .anims = sSelectionCursorAnims, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80C16B8 + .callback = SpriteCB_SelectionCursor }; - gUnknown_20399D8->field_14B0[a0].field_404 = a1; - gUnknown_20399D8->field_14B0[a0].field_406 = a2; + gUnknown_20399D8->selectionCursorSubspriteData[whichSprite].tileTag = tileTag; + gUnknown_20399D8->selectionCursorSubspriteData[whichSprite].paletteTag = paletteTag; LoadSpriteSheet(&spriteSheet); LoadSpritePalette(&spritePalette); - spriteId = CreateSprite(&template, gUnknown_20399D8->field_14B0[a0].field_408, 8 * (gUnknown_20399D8->field_1CCE + 4 * gUnknown_20399D8->field_1CCA), 0); - gUnknown_20399D8->field_14B0[a0].field_400 = &gSprites[spriteId]; + spriteId = CreateSprite(&template, gUnknown_20399D8->selectionCursorSubspriteData[whichSprite].xCoord, 8 * (gUnknown_20399D8->field_1CCE + 4 * gUnknown_20399D8->field_1CCA), 0); + gUnknown_20399D8->selectionCursorSubspriteData[whichSprite].sprite = &gSprites[spriteId]; gSprites[spriteId].invisible = FALSE; } -static void sub_80C1880(void) +static void DestroySelectionCursorSprites(void) { u8 i; for (i = 0; i < 2; i++) { - if (gUnknown_20399D8->field_14B0[i].field_400 != NULL) + if (gUnknown_20399D8->selectionCursorSubspriteData[i].sprite != NULL) { - DestroySprite(gUnknown_20399D8->field_14B0[i].field_400); - FreeSpriteTilesByTag(gUnknown_20399D8->field_14B0[i].field_404); - FreeSpritePaletteByTag(gUnknown_20399D8->field_14B0[i].field_406); + DestroySprite(gUnknown_20399D8->selectionCursorSubspriteData[i].sprite); + FreeSpriteTilesByTag(gUnknown_20399D8->selectionCursorSubspriteData[i].tileTag); + FreeSpritePaletteByTag(gUnknown_20399D8->selectionCursorSubspriteData[i].paletteTag); } } } -static const u8 *sub_80C18E0(u16 a0) +static const u8 *GetDungeonFlavorText(u16 mapsec) { u8 i; - for (i = 0; i < NELEMS(gUnknown_83F1B3C); i++) + for (i = 0; i < NELEMS(sDungeonHighlights); i++) { - if (gUnknown_83F1B3C[i].field_0 == a0) - return gUnknown_83F1B3C[i].field_8; + if (sDungeonHighlights[i].id == mapsec) + return sDungeonHighlights[i].desc; } - return gUnknown_8418EC3; + return gText_RegionMap_NoData; } -static const u8 *sub_80C1920(u16 a0) +static const u8 *GetDungeonName(u16 mapsec) { u8 i; - for (i = 0; i < NELEMS(gUnknown_83F1B3C); i++) + for (i = 0; i < NELEMS(sDungeonHighlights); i++) { - if (gUnknown_83F1B3C[i].field_0 == a0) - return gUnknown_83F1B3C[i].field_4; + if (sDungeonHighlights[i].id == mapsec) + return sDungeonHighlights[i].name; } - return gUnknown_8418EC3; + return gText_RegionMap_NoData; } -static void sub_80C195C(u8 a0, u8 taskId, TaskFunc taskFunc) +static void RegionMapCreateDungeonMapPreview(u8 a0, u8 taskId, TaskFunc taskFunc) { u8 r0; - gUnknown_20399DC = AllocZeroed(sizeof(struct UnkStruct_20399DC)); - r0 = sub_80C3580(); + sDungeonMapPreviewManager = AllocZeroed(sizeof(struct DungeonMapPreviewManagerStruct)); + r0 = GetMapSecUnderCursor(); if (r0 == MAPSEC_TANOBY_CHAMBERS) r0 = MAPSEC_MONEAN_CHAMBER; - gUnknown_20399DC->field_3D40 = sub_80F8544(r0); - if (gUnknown_20399DC->field_3D40 == NULL) - gUnknown_20399DC->field_3D40 = sub_80F8544(MAPSEC_ROCK_TUNNEL); - gUnknown_20399DC->field_3D48 = 0; - gUnknown_20399DC->field_3D4A = 0; - gUnknown_20399DC->field_3D44 = taskFunc; - gUnknown_20399DC->field_3E14 = 0; + sDungeonMapPreviewManager->mapPreviewInfo = GetDungeonMapPreviewScreenInfo(r0); + if (sDungeonMapPreviewManager->mapPreviewInfo == NULL) + sDungeonMapPreviewManager->mapPreviewInfo = GetDungeonMapPreviewScreenInfo(MAPSEC_ROCK_TUNNEL); + sDungeonMapPreviewManager->dungeonMapPreviewPrepState = 0; + sDungeonMapPreviewManager->field_3D4A = 0; + sDungeonMapPreviewManager->savedTask = taskFunc; + sDungeonMapPreviewManager->field_3E14 = 0; sub_80C4AAC(0); sub_80C4BE4(); sub_80C0CA0(); - gTasks[taskId].func = sub_80C1A94; + gTasks[taskId].func = Task_PrepDungeonMapPreviewAndFlavorText; } -static bool8 sub_80C19FC(void) +static bool8 HandleLoadMapPreviewScreenGfx(void) { - switch (gUnknown_20399DC->field_3D4A) + switch (sDungeonMapPreviewManager->field_3D4A) { case 0: - LZ77UnCompWram(gUnknown_20399DC->field_3D40->tilesptr, gUnknown_20399DC->field_0000); + LZ77UnCompWram(sDungeonMapPreviewManager->mapPreviewInfo->tilesptr, sDungeonMapPreviewManager->tiles); break; case 1: - LZ77UnCompWram(gUnknown_20399DC->field_3D40->tilemapptr, gUnknown_20399DC->field_3840); + LZ77UnCompWram(sDungeonMapPreviewManager->mapPreviewInfo->tilemapptr, sDungeonMapPreviewManager->tilemap); break; case 2: - LoadBgTiles(2, gUnknown_20399DC->field_0000, 0x3840, 0x000); + LoadBgTiles(2, sDungeonMapPreviewManager->tiles, 0x3840, 0x000); break; case 3: - LoadPalette(gUnknown_20399DC->field_3D40->palptr, 0xD0, 0x60); + LoadPalette(sDungeonMapPreviewManager->mapPreviewInfo->palptr, 0xD0, 0x60); break; default: return TRUE; } - gUnknown_20399DC->field_3D4A++; + sDungeonMapPreviewManager->field_3D4A++; return FALSE; } -static void sub_80C1A94(u8 taskId) +static void Task_PrepDungeonMapPreviewAndFlavorText(u8 taskId) { - switch (gUnknown_20399DC->field_3D48) + switch (sDungeonMapPreviewManager->dungeonMapPreviewPrepState) { case 0: - sub_80C08E0(); - gUnknown_20399DC->field_3D48++; + NullVBlankHBlankCallbacks(); + sDungeonMapPreviewManager->dungeonMapPreviewPrepState++; break; case 1: - if (sub_80C19FC() == TRUE) - gUnknown_20399DC->field_3D48++; + if (HandleLoadMapPreviewScreenGfx() == TRUE) + sDungeonMapPreviewManager->dungeonMapPreviewPrepState++; break; case 2: sub_80C1E94(); - sub_80C4E74(gUnknown_8418E9E); - gUnknown_20399DC->field_3D48++; + sub_80C4E74(gText_RegionMap_AButtonCancel2); + sDungeonMapPreviewManager->dungeonMapPreviewPrepState++; break; case 3: - sub_80C1E78(2, gUnknown_20399DC->field_3840); + CopyMapPreviewTilemapToBgTilemapBuffer(2, sDungeonMapPreviewManager->tilemap); CopyBgTilemapBufferToVram(2); - gUnknown_20399DC->field_3D48++; + sDungeonMapPreviewManager->dungeonMapPreviewPrepState++; break; case 4: ShowBg(2); - gUnknown_20399DC->field_3D48++; + sDungeonMapPreviewManager->dungeonMapPreviewPrepState++; break; case 5: sub_80C08F4(); - gUnknown_20399DC->field_3D48++; + sDungeonMapPreviewManager->dungeonMapPreviewPrepState++; break; case 6: if (sub_80C1F80(FALSE) == TRUE) - gUnknown_20399DC->field_3D48++; + sDungeonMapPreviewManager->dungeonMapPreviewPrepState++; break; case 7: - gTasks[taskId].func = sub_80C1BE0; + gTasks[taskId].func = Task_DrawDungeonMapPreviewAndFlavorText; break; case 8: if (sub_80C1F80(TRUE) == TRUE) { - gUnknown_20399DC->field_3D48++; + sDungeonMapPreviewManager->dungeonMapPreviewPrepState++; } break; case 9: - sub_80C1E14(taskId); - gUnknown_20399DC->field_3D48++; + DestroyMapPreviewAssets(taskId); + sDungeonMapPreviewManager->dungeonMapPreviewPrepState++; break; } } -static void sub_80C1BE0(u8 taskId) +static void Task_DrawDungeonMapPreviewAndFlavorText(u8 taskId) { - switch (gUnknown_20399DC->field_3D49) + switch (sDungeonMapPreviewManager->dungeonMapPreviewDrawState) { case 0: - gUnknown_20399DC->field_3E0E = 0x0133; - gUnknown_20399DC->field_3E10 = 0x0100; - gUnknown_20399DC->field_3E12 = 0x00F0; - gUnknown_20399DC->field_3D49++; + sDungeonMapPreviewManager->field_3E0E = 0x0133; + sDungeonMapPreviewManager->field_3E10 = 0x0100; + sDungeonMapPreviewManager->field_3E12 = 0x00F0; + sDungeonMapPreviewManager->dungeonMapPreviewDrawState++; break; case 1: - if (gUnknown_20399DC->field_3D4C++ > 40) + if (sDungeonMapPreviewManager->field_3D4C++ > 40) { - gUnknown_20399DC->field_3D4C = 0; - gUnknown_20399DC->field_3D49++; + sDungeonMapPreviewManager->field_3D4C = 0; + sDungeonMapPreviewManager->dungeonMapPreviewDrawState++; } break; case 2: FillWindowPixelBuffer(2, PIXEL_FILL(0)); CopyWindowToVram(2, 3); PutWindowTilemap(2); - gUnknown_20399DC->field_3D49++; + sDungeonMapPreviewManager->dungeonMapPreviewDrawState++; break; case 3: - if (gUnknown_20399DC->field_3D4C > 25) + if (sDungeonMapPreviewManager->field_3D4C > 25) { - AddTextPrinterParameterized3(2, 2, 4, 0, gUnknown_83F1A94, -1, sub_80C1920(sub_80C3580())); - AddTextPrinterParameterized3(2, 2, 2, 14, gUnknown_83F1A90, -1, sub_80C18E0(sub_80C3580())); + AddTextPrinterParameterized3(2, 2, 4, 0, sTextColor_Green, -1, GetDungeonName(GetMapSecUnderCursor())); + AddTextPrinterParameterized3(2, 2, 2, 14, sTextColor_White, -1, GetDungeonFlavorText(GetMapSecUnderCursor())); CopyWindowToVram(2, 3); - gUnknown_20399DC->field_3D49++; + sDungeonMapPreviewManager->dungeonMapPreviewDrawState++; } - else if (gUnknown_20399DC->field_3D4C > 20) + else if (sDungeonMapPreviewManager->field_3D4C > 20) { - gUnknown_20399DC->field_3E0E -= 6; - gUnknown_20399DC->field_3E10 -= 5; - gUnknown_20399DC->field_3E12 -= 5; - CpuCopy16(gUnknown_20399DC->field_3D40->palptr, gUnknown_20399DC->field_3D4E, 0x60); - TintPalette_CustomTone(gUnknown_20399DC->field_3D4E, 0x30, gUnknown_20399DC->field_3E0E, gUnknown_20399DC->field_3E10, gUnknown_20399DC->field_3E12); - LoadPalette(gUnknown_20399DC->field_3D4E, 0xD0, 0x60); + sDungeonMapPreviewManager->field_3E0E -= 6; + sDungeonMapPreviewManager->field_3E10 -= 5; + sDungeonMapPreviewManager->field_3E12 -= 5; + CpuCopy16(sDungeonMapPreviewManager->mapPreviewInfo->palptr, sDungeonMapPreviewManager->field_3D4E, 0x60); + TintPalette_CustomTone(sDungeonMapPreviewManager->field_3D4E, 0x30, sDungeonMapPreviewManager->field_3E0E, sDungeonMapPreviewManager->field_3E10, sDungeonMapPreviewManager->field_3E12); + LoadPalette(sDungeonMapPreviewManager->field_3D4E, 0xD0, 0x60); } - gUnknown_20399DC->field_3D4C++; + sDungeonMapPreviewManager->field_3D4C++; break; case 4: if (JOY_NEW(B_BUTTON) || JOY_NEW(A_BUTTON)) { FillWindowPixelBuffer(2, PIXEL_FILL(0)); CopyWindowToVram(2, 3); - gUnknown_20399DC->field_3D48++; - gUnknown_20399DC->field_3D49++; + sDungeonMapPreviewManager->dungeonMapPreviewPrepState++; + sDungeonMapPreviewManager->dungeonMapPreviewDrawState++; } break; default: - gTasks[taskId].func = sub_80C1A94; + gTasks[taskId].func = Task_PrepDungeonMapPreviewAndFlavorText; break; } } -static void sub_80C1E14(u8 taskId) +static void DestroyMapPreviewAssets(u8 taskId) { - gTasks[taskId].func = gUnknown_20399DC->field_3D44; + gTasks[taskId].func = sDungeonMapPreviewManager->savedTask; HideBg(2); sub_80C4B30(0); sub_80C0B18(); sub_80C0BB0(); sub_80C0AB8(); sub_80C0B9C(); - sub_80C4E74(gUnknown_8418E8D); - FREE_IF_NOT_NULL(gUnknown_20399DC); + sub_80C4E74(gText_RegionMap_AButtonGuide); + FREE_IF_NOT_NULL(sDungeonMapPreviewManager); } -static void sub_80C1E78(u8 bgId, const u16 * tilemap) +static void CopyMapPreviewTilemapToBgTilemapBuffer(u8 bgId, const u16 * tilemap) { CopyToBgTilemapBufferRect(2, tilemap, 0, 0, 32, 20); } @@ -2488,37 +2488,37 @@ static void sub_80C1E94(void) u16 r0; sub_80C4BE4(); sub_80C4C2C(0, 17, 192); - sub_80C4C48(gUnknown_20399DC->field_3E14); + sub_80C4C48(sDungeonMapPreviewManager->field_3E14); sub_80C4C74(0, 13); sub_80C4C88(59); sub_80C4C9C(1, 0); - r4 = sub_80C3508(); - r0 = sub_80C3514(); - gUnknown_20399DC->field_3E16 = 8 * r4 + 32; - gUnknown_20399DC->field_3E18 = 8 * r0 + 24; - gUnknown_20399DC->field_3E1A = gUnknown_20399DC->field_3E16 + 8; - gUnknown_20399DC->field_3E1C = gUnknown_20399DC->field_3E18 + 8; - gUnknown_20399DC->field_3E1E = (0x10 - gUnknown_20399DC->field_3E16) / 8; - gUnknown_20399DC->field_3E20 = (0x20 - gUnknown_20399DC->field_3E18) / 8; - gUnknown_20399DC->field_3E22 = (0xE0 - gUnknown_20399DC->field_3E1A) / 8; - gUnknown_20399DC->field_3E24 = (0x88 - gUnknown_20399DC->field_3E1C) / 8; + r4 = GetMapCursorX(); + r0 = GetMapCursorY(); + sDungeonMapPreviewManager->field_3E16 = 8 * r4 + 32; + sDungeonMapPreviewManager->field_3E18 = 8 * r0 + 24; + sDungeonMapPreviewManager->field_3E1A = sDungeonMapPreviewManager->field_3E16 + 8; + sDungeonMapPreviewManager->field_3E1C = sDungeonMapPreviewManager->field_3E18 + 8; + sDungeonMapPreviewManager->field_3E1E = (0x10 - sDungeonMapPreviewManager->field_3E16) / 8; + sDungeonMapPreviewManager->field_3E20 = (0x20 - sDungeonMapPreviewManager->field_3E18) / 8; + sDungeonMapPreviewManager->field_3E22 = (0xE0 - sDungeonMapPreviewManager->field_3E1A) / 8; + sDungeonMapPreviewManager->field_3E24 = (0x88 - sDungeonMapPreviewManager->field_3E1C) / 8; } static bool8 sub_80C1F80(bool8 a0) { - struct UnkStruct_80C4CF0 data; + struct GpuWindowParams data; if (!a0) { - if (gUnknown_20399DC->field_3D4B < 8) + if (sDungeonMapPreviewManager->field_3D4B < 8) { - gUnknown_20399DC->field_3E16 += gUnknown_20399DC->field_3E1E; - gUnknown_20399DC->field_3E18 += gUnknown_20399DC->field_3E20; - gUnknown_20399DC->field_3E1A += gUnknown_20399DC->field_3E22; - gUnknown_20399DC->field_3E1C += gUnknown_20399DC->field_3E24; - gUnknown_20399DC->field_3D4B++; - if (gUnknown_20399DC->field_3E14 < 6) - gUnknown_20399DC->field_3E14++; + sDungeonMapPreviewManager->field_3E16 += sDungeonMapPreviewManager->field_3E1E; + sDungeonMapPreviewManager->field_3E18 += sDungeonMapPreviewManager->field_3E20; + sDungeonMapPreviewManager->field_3E1A += sDungeonMapPreviewManager->field_3E22; + sDungeonMapPreviewManager->field_3E1C += sDungeonMapPreviewManager->field_3E24; + sDungeonMapPreviewManager->field_3D4B++; + if (sDungeonMapPreviewManager->field_3E14 < 6) + sDungeonMapPreviewManager->field_3E14++; } else { @@ -2527,27 +2527,27 @@ static bool8 sub_80C1F80(bool8 a0) } else { - if (gUnknown_20399DC->field_3D4B == 0) + if (sDungeonMapPreviewManager->field_3D4B == 0) { return TRUE; } else { - gUnknown_20399DC->field_3E16 -= gUnknown_20399DC->field_3E1E; - gUnknown_20399DC->field_3E18 -= gUnknown_20399DC->field_3E20; - gUnknown_20399DC->field_3E1A -= gUnknown_20399DC->field_3E22; - gUnknown_20399DC->field_3E1C -= gUnknown_20399DC->field_3E24; - gUnknown_20399DC->field_3D4B--; - if (gUnknown_20399DC->field_3E14 > 0) - gUnknown_20399DC->field_3E14--; + sDungeonMapPreviewManager->field_3E16 -= sDungeonMapPreviewManager->field_3E1E; + sDungeonMapPreviewManager->field_3E18 -= sDungeonMapPreviewManager->field_3E20; + sDungeonMapPreviewManager->field_3E1A -= sDungeonMapPreviewManager->field_3E22; + sDungeonMapPreviewManager->field_3E1C -= sDungeonMapPreviewManager->field_3E24; + sDungeonMapPreviewManager->field_3D4B--; + if (sDungeonMapPreviewManager->field_3E14 > 0) + sDungeonMapPreviewManager->field_3E14--; } } - data.v0 = gUnknown_20399DC->field_3E16; - data.v2 = gUnknown_20399DC->field_3E18; - data.v4 = gUnknown_20399DC->field_3E1A; - data.v6 = gUnknown_20399DC->field_3E1C; - sub_80C4CF0(1, &data); - sub_80C4C48(gUnknown_20399DC->field_3E14); + data.v0 = sDungeonMapPreviewManager->field_3E16; + data.v2 = sDungeonMapPreviewManager->field_3E18; + data.v4 = sDungeonMapPreviewManager->field_3E1A; + data.v6 = sDungeonMapPreviewManager->field_3E1C; + SetGpuWindowDims(1, &data); + sub_80C4C48(sDungeonMapPreviewManager->field_3E14); return FALSE; } @@ -2601,7 +2601,7 @@ static void sub_80C2208(u8 taskId, TaskFunc taskFunc) sub_80C4AAC(0); sub_80C4BE4(); sub_80C24BC(); - sub_80C0A88(1); + SetBg0andBg3Visibility(1); gUnknown_20399E0->field_CC8 = taskFunc; gTasks[taskId].func = sub_80C267C; } @@ -2668,7 +2668,7 @@ static bool8 sub_80C2344(void) static void sub_80C24BC(void) { - struct UnkStruct_80C4CF0 data; + struct GpuWindowParams data; data.v0 = gUnknown_20399E0->field_000[0]->field_404 + 8; data.v2 = 0x10; data.v4 = gUnknown_20399E0->field_000[3]->field_404 - 8; @@ -2676,19 +2676,19 @@ static void sub_80C24BC(void) sub_80C4C2C(0, 2, 0); sub_80C4C74(18, 0); sub_80C4C88(16); - sub_80C4CF0(0, &data); + SetGpuWindowDims(0, &data); sub_80C4C9C(0, 0); } static void sub_80C253C(void) { - struct UnkStruct_80C4CF0 data = gUnknown_83F1C34; + struct GpuWindowParams data = gUnknown_83F1C34; sub_80C4BE4(); sub_80C4C2C(2, 41, 128); sub_80C4C48(gUnknown_20399E0->field_CD0); sub_80C4C74(55, 0); sub_80C4C88(18); - sub_80C4CF0(0, &data); + SetGpuWindowDims(0, &data); sub_80C4C9C(0, 0); } @@ -2729,7 +2729,7 @@ static void sub_80C267C(u8 taskId) switch (gUnknown_20399E0->field_CCC) { case 0: - sub_80C08E0(); + NullVBlankHBlankCallbacks(); gUnknown_20399E0->field_CCC++; break; case 1: @@ -2774,17 +2774,17 @@ static void sub_80C267C(u8 taskId) case 8: gUnknown_20399E0->field_CD0 = 15; sub_80C253C(); - sub_80C0A88(0); - sub_80C48BC(sub_80C0E20(), 25, FALSE); - sub_80C4960(sub_80C0E20(), 25, FALSE); + SetBg0andBg3Visibility(0); + sub_80C48BC(GetWhichRegionMap(), 25, FALSE); + sub_80C4960(GetWhichRegionMap(), 25, FALSE); gUnknown_20399E0->field_CCC++; break; case 9: - sub_80C4E18(gUnknown_8418EB5); + sub_80C4E18(gText_RegionMap_DPadMove); if (sub_80C3AC8(1) != 2) - sub_80C4E74(gUnknown_8418E8B); + sub_80C4E74(gText_RegionMap_Space); else - sub_80C4E74(gUnknown_8418E8D); + sub_80C4E74(gText_RegionMap_AButtonGuide); sub_80C4ED0(FALSE); gUnknown_20399E0->field_CCC++; break; @@ -2890,17 +2890,17 @@ static bool8 sub_80C29A4(void) static void sub_80C2B48(void) { - struct UnkStruct_80C4CF0 data; + struct GpuWindowParams data; data.v0 = gUnknown_20399E0->field_000[0]->field_400->pos1.x; data.v2 = 0x10; data.v4 = gUnknown_20399E0->field_000[3]->field_400->pos1.x; data.v6 = 0xA0; - sub_80C4CF0(0, &data); + SetGpuWindowDims(0, &data); } static void sub_80C2B9C(void) { - struct UnkStruct_80C4CF0 data; + struct GpuWindowParams data; data.v0 = gUnknown_20399E0->field_000[0]->field_404 + 16; data.v2 = 0x10; data.v4 = gUnknown_20399E0->field_000[3]->field_404 - 16; @@ -2908,7 +2908,7 @@ static void sub_80C2B9C(void) sub_80C4C2C(0, 2, 0); sub_80C4C74(18, 0); sub_80C4C88(16); - sub_80C4CF0(0, &data); + SetGpuWindowDims(0, &data); sub_80C4C9C(0, 0); } @@ -3065,12 +3065,12 @@ static void sub_80C3008(u16 a0, u16 a1) LZ77UnCompWram(gUnknown_83EF4E0, gUnknown_20399E4->field_024); gUnknown_20399E4->field_020 = a0; gUnknown_20399E4->field_022 = a1; - sub_80C3D40(); + GetPlayerPositionOnRegionMap_HandleOverrides(); gUnknown_20399E4->field_004 = 8 * gUnknown_20399E4->field_000 + 36; gUnknown_20399E4->field_006 = 8 * gUnknown_20399E4->field_002 + 36; gUnknown_20399E4->field_010 = sub_80C31C0; gUnknown_20399E4->field_016 = sub_80C35DC(gUnknown_20399E4->field_014); - gUnknown_20399E4->field_018 = sub_80C3878(sub_80C4164(sub_80C0E20(), 1, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000)); + gUnknown_20399E4->field_018 = sub_80C3878(GetSelectedMapSection(GetWhichRegionMap(), 1, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000)); sub_80C309C(); } @@ -3172,7 +3172,7 @@ static u8 sub_80C31C0(void) } if (gUnknown_20399E4->field_000 == 21 && gUnknown_20399E4->field_002 == 11) { - if (sub_80C0E04(0) == TRUE) + if (GetRegionMapPermission(MAPPERM_0) == TRUE) { PlaySE(SE_W063B); ret = 5; @@ -3184,12 +3184,12 @@ static u8 sub_80C31C0(void) if (JOY_REPT(START_BUTTON)) { sub_80C3418(); - gUnknown_20399E4->field_014 = sub_80C4164(sub_80C0E20(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); + gUnknown_20399E4->field_014 = GetSelectedMapSection(GetWhichRegionMap(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); gUnknown_20399E4->field_016 = sub_80C35DC(gUnknown_20399E4->field_014); - gUnknown_20399E4->field_018 = sub_80C3878(sub_80C4164(sub_80C0E20(), 1, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000)); + gUnknown_20399E4->field_018 = sub_80C3878(GetSelectedMapSection(GetWhichRegionMap(), 1, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000)); return 3; } - else if (JOY_NEW(SELECT_BUTTON) && gUnknown_20399D4->field_47BC == CB2_ReturnToField) + else if (JOY_NEW(SELECT_BUTTON) && gUnknown_20399D4->savedCallback == CB2_ReturnToField) { ret = 6; } @@ -3218,9 +3218,9 @@ static u8 sub_80C3348(void) gUnknown_20399E4->field_002++; if (gUnknown_20399E4->field_00A < 0) gUnknown_20399E4->field_002--; - gUnknown_20399E4->field_014 = sub_80C4164(sub_80C0E20(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); + gUnknown_20399E4->field_014 = GetSelectedMapSection(GetWhichRegionMap(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); gUnknown_20399E4->field_016 = sub_80C35DC(gUnknown_20399E4->field_014); - gUnknown_20399E4->field_018 = sub_80C3878(sub_80C4164(sub_80C0E20(), 1, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000)); + gUnknown_20399E4->field_018 = sub_80C3878(GetSelectedMapSection(GetWhichRegionMap(), 1, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000)); gUnknown_20399E4->field_010 = sub_80C31C0; return 3; } @@ -3232,11 +3232,11 @@ static u8 sub_80C3400(void) static void sub_80C3418(void) { - if (sub_80C0E04(0) == 1) + if (GetRegionMapPermission(MAPPERM_0) == 1) { gUnknown_20399E4->field_00E++; gUnknown_20399E4->field_00E %= 3; - if (gUnknown_20399E4->field_00E == 0 && sub_80C0E20() != sub_80C0E34()) + if (gUnknown_20399E4->field_00E == 0 && GetWhichRegionMap() != sub_80C0E34()) { gUnknown_20399E4->field_00E++; } @@ -3276,15 +3276,15 @@ static void sub_80C3418(void) } gUnknown_20399E4->field_01C->pos1.x = 8 * gUnknown_20399E4->field_000 + 36; gUnknown_20399E4->field_01C->pos1.y = 8 * gUnknown_20399E4->field_002 + 36; - gUnknown_20399E4->field_014 = sub_80C4164(sub_80C0E20(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); + gUnknown_20399E4->field_014 = GetSelectedMapSection(GetWhichRegionMap(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); } -static u16 sub_80C3508(void) +static u16 GetMapCursorX(void) { return gUnknown_20399E4->field_000; } -static u16 sub_80C3514(void) +static u16 GetMapCursorY(void) { return gUnknown_20399E4->field_002; } @@ -3298,13 +3298,13 @@ static u16 sub_80C3520(void) || gUnknown_20399E4->field_000 > 21) return MAPSEC_NONE; - ret = sub_80C4164(sub_80C0E20(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); + ret = GetSelectedMapSection(GetWhichRegionMap(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); if ((ret == MAPSEC_NAVEL_ROCK || ret == MAPSEC_BIRTH_ISLAND) && !FlagGet(FLAG_WORLD_MAP_NAVEL_ROCK_EXTERIOR)) ret = MAPSEC_NONE; return ret; } -static u16 sub_80C3580(void) +static u16 GetMapSecUnderCursor(void) { u8 ret; if (gUnknown_20399E4->field_002 < 0 @@ -3313,7 +3313,7 @@ static u16 sub_80C3580(void) || gUnknown_20399E4->field_000 > 21) return MAPSEC_NONE; - ret = sub_80C4164(sub_80C0E20(), 1, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); + ret = GetSelectedMapSection(GetWhichRegionMap(), 1, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); if (ret == MAPSEC_CERULEAN_CAVE && !FlagGet(FLAG_SYS_CAN_LINK_WITH_RS)) ret = MAPSEC_NONE; return ret; @@ -3360,7 +3360,7 @@ static u8 sub_80C35DC(u8 mapsec) case MAPSEC_SIX_ISLAND: return FlagGet(FLAG_WORLD_MAP_SIX_ISLAND) ? 2 : 3; case MAPSEC_ROUTE_4_FLYDUP: - if (!sub_80C0E04(3)) + if (!GetRegionMapPermission(MAPPERM_3)) return 0; return FlagGet(FLAG_WORLD_MAP_ROUTE4_POKEMON_CENTER_1F) ? 2 : 3; case MAPSEC_ROUTE_10_FLYDUP: @@ -3458,12 +3458,12 @@ static u8 sub_80C3AC8(u8 a0) } } -static u16 sub_80C3B00(void) +static u16 GetPlayerCurrentMapSectionId(void) { return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum)->regionMapSectionId; } -static void sub_80C3B28(void) +static void GetPlayerPositionOnRegionMap(void) { u16 width; u32 divisor; @@ -3525,25 +3525,25 @@ static void sub_80C3B28(void) } gUnknown_20399E4->field_014 -= MAPSECS_KANTO; - divisor = width / gUnknown_83F2178[gUnknown_20399E4->field_014][0]; + divisor = width / sMapSectionDimensions[gUnknown_20399E4->field_014][0]; if (divisor == 0) divisor = 1; x /= divisor; - if (x >= gUnknown_83F2178[gUnknown_20399E4->field_014][0]) - x = gUnknown_83F2178[gUnknown_20399E4->field_014][0] - 1; - divisor = height / gUnknown_83F2178[gUnknown_20399E4->field_014][1]; + if (x >= sMapSectionDimensions[gUnknown_20399E4->field_014][0]) + x = sMapSectionDimensions[gUnknown_20399E4->field_014][0] - 1; + divisor = height / sMapSectionDimensions[gUnknown_20399E4->field_014][1]; if (divisor == 0) divisor = 1; y /= divisor; - if (y >= gUnknown_83F2178[gUnknown_20399E4->field_014][1]) - y = gUnknown_83F2178[gUnknown_20399E4->field_014][1] - 1; - gUnknown_20399E4->field_000 = x + gUnknown_83F1E60[gUnknown_20399E4->field_014][0]; - gUnknown_20399E4->field_002 = y + gUnknown_83F1E60[gUnknown_20399E4->field_014][1]; + if (y >= sMapSectionDimensions[gUnknown_20399E4->field_014][1]) + y = sMapSectionDimensions[gUnknown_20399E4->field_014][1] - 1; + gUnknown_20399E4->field_000 = x + sMapSectionTopLeftCorners[gUnknown_20399E4->field_014][0]; + gUnknown_20399E4->field_002 = y + sMapSectionTopLeftCorners[gUnknown_20399E4->field_014][1]; } -static void sub_80C3D40(void) +static void GetPlayerPositionOnRegionMap_HandleOverrides(void) { - switch (sub_80C3B00()) + switch (GetPlayerCurrentMapSectionId()) { case MAPSEC_KANTO_SAFARI_ZONE: gUnknown_20399E4->field_000 = 12; @@ -3655,7 +3655,7 @@ static void sub_80C3D40(void) } else { - sub_80C3B28(); + GetPlayerPositionOnRegionMap(); } break; case MAPSEC_ROUTE_21: @@ -3678,7 +3678,7 @@ static void sub_80C3D40(void) } else { - sub_80C3B28(); + GetPlayerPositionOnRegionMap(); } break; case MAPSEC_ROUTE_6: @@ -3689,7 +3689,7 @@ static void sub_80C3D40(void) } else { - sub_80C3B28(); + GetPlayerPositionOnRegionMap(); } break; case MAPSEC_ROUTE_7: @@ -3700,7 +3700,7 @@ static void sub_80C3D40(void) } else { - sub_80C3B28(); + GetPlayerPositionOnRegionMap(); } break; case MAPSEC_ROUTE_8: @@ -3711,28 +3711,28 @@ static void sub_80C3D40(void) } else { - sub_80C3B28(); + GetPlayerPositionOnRegionMap(); } break; default: - sub_80C3B28(); + GetPlayerPositionOnRegionMap(); break; } - gUnknown_20399E4->field_014 = sub_80C4164(sub_80C0E20(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); + gUnknown_20399E4->field_014 = GetSelectedMapSection(GetWhichRegionMap(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); } -static u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3) +static u8 GetSelectedMapSection(u8 whichMap, u8 layer, s16 y, s16 x) { - switch (a0) + switch (whichMap) { case 0: - return gUnknown_83F2490[a1][a2][a3]; + return sRegionMapSections_Kanto[layer][y][x]; case 1: - return gUnknown_83F2724[a1][a2][a3]; + return sRegionMapSections_Sevii123[layer][y][x]; case 2: - return gUnknown_83F29B8[a1][a2][a3]; + return sRegionMapSections_Sevii45[layer][y][x]; case 3: - return gUnknown_83F2C4C[a1][a2][a3]; + return sRegionMapSections_Sevii67[layer][y][x]; default: return MAPSEC_NONE; } @@ -3747,8 +3747,8 @@ static void sub_80C41D8(u16 a0, u16 a1) LZ77UnCompWram(gUnknown_83EF524, gUnknown_20399E8->field_0C); gUnknown_20399E8->field_08 = a0; gUnknown_20399E8->field_0A = a1; - gUnknown_20399E8->field_00 = sub_80C3508(); - gUnknown_20399E8->field_02 = sub_80C3514(); + gUnknown_20399E8->field_00 = GetMapCursorX(); + gUnknown_20399E8->field_02 = GetMapCursorY(); sub_80C4244(); } @@ -3825,7 +3825,7 @@ static void sub_80C440C(u8 taskId) switch (gUnknown_20399EC->field_463) { case 0: - sub_80C08E0(); + NullVBlankHBlankCallbacks(); gUnknown_20399EC->field_463++; break; case 1: @@ -3913,7 +3913,7 @@ static void sub_80C4614(u8 a0, u8 a1, u16 a2, u16 a3, u8 a4, u8 a5) LoadSpriteSheet(&spriteSheet); LoadSpritePalette(&spritePalette); - r4 = sub_80C4164(a0, 0, a3, a2); + r4 = GetSelectedMapSection(a0, 0, a3, a2); if ((sub_80C35DC(r4) == 2 || sub_80C35DC(r4) == 3) && r4 != MAPSEC_ROUTE_10_FLYDUP) r7 = 2; spriteId = CreateSprite(&template, 8 * a2 + 36 + r7, 8 * a3 + 36 + r7, 3); @@ -3926,7 +3926,7 @@ static void sub_80C4750(void) { u16 i, j, k; u8 r7 = 0; - if (sub_80C0E04(3)) + if (GetRegionMapPermission(MAPPERM_3)) { for (i = 0; i < 4; i++) { @@ -3934,7 +3934,7 @@ static void sub_80C4750(void) { for (k = 0; k < 22; k++) { - if (sub_80C35DC(sub_80C4164(i, 0, j, k)) == 2) + if (sub_80C35DC(GetSelectedMapSection(i, 0, j, k)) == 2) { sub_80C450C(i, r7, k, j, r7 + 10, 10); r7++; @@ -3956,7 +3956,7 @@ static void sub_80C47F0(void) { for (k = 0; k < 22; k++) { - mapsec = sub_80C4164(i, 1, j, k); + mapsec = GetSelectedMapSection(i, 1, j, k); if (mapsec == MAPSEC_NONE) continue; if (mapsec == MAPSEC_CERULEAN_CAVE && !FlagGet(FLAG_SYS_CAN_LINK_WITH_RS)) @@ -4077,11 +4077,11 @@ static void sub_80C4BB8(void) static void sub_80C4BE4(void) { - struct UnkStruct_80C4CF0 data = {}; + struct GpuWindowParams data = {}; sub_80C4C2C(0, 0, 0); sub_80C4C48(0); - sub_80C4CF0(0, &data); - sub_80C4CF0(1, &data); + SetGpuWindowDims(0, &data); + SetGpuWindowDims(1, &data); sub_80C4C74(0, 0); sub_80C4C9C(0, 1); sub_80C4C9C(1, 1); @@ -4122,7 +4122,7 @@ static void sub_80C4C88(u16 a0) static void sub_80C4C9C(u8 a0, u8 a1) { u16 data[2]; - memcpy(data, gUnknown_83F1CA0, 4); + memcpy(data, sWinFlags, 4); switch (a1) { case 0: @@ -4134,10 +4134,10 @@ static void sub_80C4C9C(u8 a0, u8 a1) } } -static void sub_80C4CF0(u8 a0, const struct UnkStruct_80C4CF0 *a1) +static void SetGpuWindowDims(u8 winIdx, const struct GpuWindowParams *data) { - SetGpuReg(gUnknown_83F1CA4[a0][0], (a1->v2 << 8) | a1->v6); - SetGpuReg(gUnknown_83F1CA4[a0][1], (a1->v0 << 8) | a1->v4); + SetGpuReg(sWinRegs[winIdx][0], (data->v2 << 8) | data->v6); + SetGpuReg(sWinRegs[winIdx][1], (data->v0 << 8) | data->v4); } static void sub_80C4D30(void) @@ -4175,7 +4175,7 @@ u8 *GetMapName(u8 *dst0, u16 mapsec, u16 fill) if (sub_80C4D40(mapsec) == TRUE) dst = StringCopy(dst0, gMapSecName_CeladonDept); else - dst = StringCopy(dst0, gUnknown_83F1CAC[idx]); + dst = StringCopy(dst0, sMapNames[idx]); } else { @@ -4204,7 +4204,7 @@ u8 *sub_80C4E08(u8 *dest, u16 mapsec) static void sub_80C4E18(const u8 *str) { - if (gUnknown_20399D4->field_4797[2] == 1) + if (gUnknown_20399D4->regionMapPermissions[MAPPERM_2] == TRUE) FillWindowPixelBuffer(3, PIXEL_FILL(0)); else FillWindowPixelBuffer(3, PIXEL_FILL(15)); @@ -4214,7 +4214,7 @@ static void sub_80C4E18(const u8 *str) static void sub_80C4E74(const u8 *str) { - if (gUnknown_20399D4->field_4797[2] == 1) + if (gUnknown_20399D4->regionMapPermissions[MAPPERM_2] == TRUE) FillWindowPixelBuffer(4, PIXEL_FILL(0)); else FillWindowPixelBuffer(4, PIXEL_FILL(15)); @@ -4248,7 +4248,7 @@ static void sub_80C4F08(u8 taskId) { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - sub_80C4398(sub_80C0E20(), taskId, sub_80C07E4()); + sub_80C4398(GetWhichRegionMap(), taskId, sub_80C07E4()); sub_80C3008(0, 0); sub_80C41D8(1, 1); sub_80C3154(FALSE); @@ -4256,7 +4256,7 @@ static void sub_80C4F08(u8 taskId) gUnknown_20399FC->field_0++; break; case 1: - if (sub_80C0E04(2) == TRUE) + if (GetRegionMapPermission(MAPPERM_2) == TRUE) { sub_80C2208(taskId, sub_80C07E4()); } @@ -4265,14 +4265,14 @@ static void sub_80C4F08(u8 taskId) ShowBg(0); ShowBg(3); ShowBg(1); - sub_80C4E18(gUnknown_8418EB5); - sub_80C48BC(sub_80C0E20(), 25, FALSE); - sub_80C4960(sub_80C0E20(), 25, FALSE); + sub_80C4E18(gText_RegionMap_DPadMove); + sub_80C48BC(GetWhichRegionMap(), 25, FALSE); + sub_80C4960(GetWhichRegionMap(), 25, FALSE); } gUnknown_20399FC->field_0++; break; case 2: - sub_80C4E74(gUnknown_8418EB0); + sub_80C4E74(gText_RegionMap_AButtonOK); sub_80C4ED0(FALSE); gUnknown_20399FC->field_0++; break; @@ -4304,22 +4304,22 @@ static void sub_80C4F08(u8 taskId) sub_80C0B18(); sub_80C0BB0(); sub_80C0B9C(); - if (sub_80C3508() == 21 && sub_80C3514() == 13) + if (GetMapCursorX() == 21 && GetMapCursorY() == 13) { PlaySE(SE_W255); - sub_80C4E74(gUnknown_8418E95); + sub_80C4E74(gText_RegionMap_AButtonCancel); } else if (sub_80C3AC8(0) == 2 || sub_80C3AC8(0) == 4) { - sub_80C4E74(gUnknown_8418EB0); + sub_80C4E74(gText_RegionMap_AButtonOK); } else { - sub_80C4E74(gUnknown_8418E8B); + sub_80C4E74(gText_RegionMap_Space); } break; case 4: - if ((sub_80C3AC8(0) == 2 || sub_80C3AC8(0) == 4) && sub_80C0E04(3) == TRUE) + if ((sub_80C3AC8(0) == 2 || sub_80C3AC8(0) == 4) && GetRegionMapPermission(MAPPERM_3) == TRUE) { switch (get_map_light_level_by_bank_and_number(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum)) { @@ -4337,12 +4337,12 @@ static void sub_80C4F08(u8 taskId) } break; case 5: - sub_80C0E70(sub_80C0E20(), taskId, sub_80C07F8); + sub_80C0E70(GetWhichRegionMap(), taskId, sub_80C07F8); break; } break; case 5: - if (sub_80C0E04(2) == TRUE) + if (GetRegionMapPermission(MAPPERM_2) == TRUE) sub_80C2C1C(taskId); gUnknown_20399FC->field_0++; break; @@ -4370,7 +4370,7 @@ static void sub_80C51E8(void) static void sub_80C5208(u8 taskId) { - if (sub_80C0E04(2) == TRUE) + if (GetRegionMapPermission(MAPPERM_2) == TRUE) sub_80C25BC(); sub_80C4A04(); sub_80C3188(); @@ -4389,14 +4389,14 @@ static void sub_80C5208(u8 taskId) static void sub_80C527C(u16 mapsec) { u16 idx = mapsec - MAPSECS_KANTO; - if (gUnknown_83F2EE0[idx][2]) + if (sMapsecToSpawn[idx][2]) { - sub_805546C(gUnknown_83F2EE0[idx][2]); - sub_8124C1C(gUnknown_83F2EE0[idx]); + sub_805546C(sMapsecToSpawn[idx][2]); + sub_8124C1C(sMapsecToSpawn[idx]); } else { - warp1_set_2(gUnknown_83F2EE0[idx][0], gUnknown_83F2EE0[idx][1], -1); + warp1_set_2(sMapsecToSpawn[idx][0], sMapsecToSpawn[idx][1], -1); } sub_80842C8(); } -- cgit v1.2.3 From 855b7780d925d9acfaaf2ed939f15d335efa8ba4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 8 Jan 2020 18:29:04 -0500 Subject: Resolve review comments --- data/image_processing_effects.s | 3204 -------------------------------------- ld_script.txt | 2 +- src/image_processing_effects.c | 3217 ++++++++++++++++++++++++++++++++++++++- src/region_map.c | 13 +- 4 files changed, 3215 insertions(+), 3221 deletions(-) delete mode 100644 data/image_processing_effects.s diff --git a/data/image_processing_effects.s b/data/image_processing_effects.s deleted file mode 100644 index d5585410c..000000000 --- a/data/image_processing_effects.s +++ /dev/null @@ -1,3204 +0,0 @@ - .section .rodata - .align 2, 0 - -gPointillismPoints:: @ 83F3024 - .byte 0x00, 0x1d, 0x1c - .byte 0x0e, 0x1e, 0x1b - .byte 0x00, 0x01, 0x32 - .byte 0x2e, 0x1e, 0x37 - .byte 0x0a, 0x22, 0x1f - .byte 0x05, 0x26, 0x2e - .byte 0x12, 0x17, 0x1e - .byte 0x1a, 0x03, 0x11 - .byte 0x05, 0x11, 0x18 - .byte 0x05, 0x27, 0x2f - .byte 0x1a, 0x3f, 0x12 - .byte 0x22, 0x3f, 0x16 - .byte 0x2b, 0x2f, 0x2e - .byte 0x11, 0x02, 0x2d - .byte 0x23, 0x0d, 0x28 - .byte 0x17, 0x0c, 0x19 - .byte 0x2f, 0x0e, 0x13 - .byte 0x30, 0x18, 0x20 - .byte 0x2d, 0x28, 0x22 - .byte 0x01, 0x03, 0x19 - .byte 0x0e, 0x2a, 0x2b - .byte 0x22, 0x15, 0x25 - .byte 0x22, 0x0a, 0x26 - .byte 0x39, 0x06, 0x23 - .byte 0x16, 0x07, 0x2f - .byte 0x22, 0x3a, 0x1b - .byte 0x3b, 0x36, 0x35 - .byte 0x0a, 0x2b, 0x24 - .byte 0x36, 0x09, 0x12 - .byte 0x1c, 0x2f, 0x23 - .byte 0x2e, 0x38, 0x2c - .byte 0x05, 0x2a, 0x20 - .byte 0x07, 0x14, 0x32 - .byte 0x31, 0x08, 0x17 - .byte 0x1a, 0x24, 0x2d - .byte 0x22, 0x0a, 0x16 - .byte 0x1b, 0x26, 0x2b - .byte 0x29, 0x16, 0x11 - .byte 0x35, 0x08, 0x14 - .byte 0x1e, 0x08, 0x14 - .byte 0x05, 0x31, 0x14 - .byte 0x38, 0x31, 0x17 - .byte 0x34, 0x33, 0x12 - .byte 0x11, 0x09, 0x1f - .byte 0x28, 0x3d, 0x32 - .byte 0x35, 0x03, 0x1e - .byte 0x3c, 0x2b, 0x2e - .byte 0x10, 0x01, 0x17 - .byte 0x03, 0x3e, 0x22 - .byte 0x17, 0x18, 0x34 - .byte 0x08, 0x29, 0x19 - .byte 0x03, 0x24, 0x28 - .byte 0x3d, 0x33, 0x2f - .byte 0x31, 0x24, 0x19 - .byte 0x1b, 0x18, 0x26 - .byte 0x07, 0x0d, 0x25 - .byte 0x2d, 0x3f, 0x12 - .byte 0x2f, 0x15, 0x25 - .byte 0x29, 0x0f, 0x12 - .byte 0x07, 0x2c, 0x12 - .byte 0x2c, 0x0b, 0x26 - .byte 0x12, 0x1a, 0x16 - .byte 0x00, 0x0b, 0x2f - .byte 0x16, 0x35, 0x24 - .byte 0x1f, 0x1c, 0x22 - .byte 0x29, 0x33, 0x27 - .byte 0x3b, 0x30, 0x17 - .byte 0x11, 0x06, 0x35 - .byte 0x3e, 0x31, 0x2f - .byte 0x11, 0x3a, 0x25 - .byte 0x2a, 0x02, 0x19 - .byte 0x33, 0x18, 0x35 - .byte 0x2a, 0x20, 0x21 - .byte 0x2e, 0x32, 0x1b - .byte 0x3b, 0x1f, 0x23 - .byte 0x39, 0x29, 0x2a - .byte 0x2e, 0x31, 0x29 - .byte 0x2a, 0x0e, 0x2d - .byte 0x2d, 0x00, 0x1f - .byte 0x38, 0x28, 0x1b - .byte 0x14, 0x3b, 0x2b - .byte 0x2e, 0x04, 0x26 - .byte 0x36, 0x30, 0x11 - .byte 0x3b, 0x21, 0x2d - .byte 0x2b, 0x3f, 0x1b - .byte 0x20, 0x13, 0x31 - .byte 0x33, 0x0c, 0x30 - .byte 0x22, 0x2b, 0x2b - .byte 0x16, 0x02, 0x1e - .byte 0x1c, 0x12, 0x1c - .byte 0x0f, 0x3c, 0x36 - .byte 0x38, 0x10, 0x2d - .byte 0x18, 0x2f, 0x2d - .byte 0x35, 0x3b, 0x11 - .byte 0x37, 0x31, 0x13 - .byte 0x13, 0x3d, 0x2f - .byte 0x1e, 0x2c, 0x33 - .byte 0x2e, 0x37, 0x12 - .byte 0x3c, 0x1f, 0x33 - .byte 0x32, 0x2a, 0x27 - .byte 0x0d, 0x3b, 0x1c - .byte 0x35, 0x2a, 0x27 - .byte 0x09, 0x3d, 0x27 - .byte 0x12, 0x0b, 0x18 - .byte 0x0c, 0x15, 0x1d - .byte 0x20, 0x01, 0x1c - .byte 0x08, 0x3b, 0x1c - .byte 0x12, 0x37, 0x33 - .byte 0x15, 0x03, 0x2c - .byte 0x2a, 0x3b, 0x31 - .byte 0x0f, 0x04, 0x35 - .byte 0x08, 0x17, 0x33 - .byte 0x38, 0x3d, 0x2a - .byte 0x2f, 0x35, 0x16 - .byte 0x10, 0x35, 0x16 - .byte 0x23, 0x13, 0x2c - .byte 0x2f, 0x06, 0x20 - .byte 0x27, 0x3a, 0x24 - .byte 0x00, 0x1c, 0x2a - .byte 0x03, 0x39, 0x1d - .byte 0x28, 0x07, 0x1a - .byte 0x20, 0x0a, 0x37 - .byte 0x07, 0x35, 0x2d - .byte 0x15, 0x2f, 0x2c - .byte 0x10, 0x2c, 0x23 - .byte 0x3f, 0x29, 0x14 - .byte 0x2a, 0x21, 0x36 - .byte 0x34, 0x1a, 0x2c - .byte 0x1c, 0x3d, 0x33 - .byte 0x38, 0x2b, 0x22 - .byte 0x35, 0x28, 0x1f - .byte 0x3d, 0x0f, 0x1c - .byte 0x1e, 0x3e, 0x1b - .byte 0x0c, 0x3e, 0x1f - .byte 0x2b, 0x31, 0x2c - .byte 0x32, 0x39, 0x11 - .byte 0x05, 0x09, 0x11 - .byte 0x04, 0x38, 0x2a - .byte 0x32, 0x00, 0x16 - .byte 0x13, 0x0b, 0x31 - .byte 0x34, 0x2a, 0x13 - .byte 0x2c, 0x22, 0x21 - .byte 0x39, 0x2f, 0x15 - .byte 0x37, 0x28, 0x1e - .byte 0x07, 0x3b, 0x2d - .byte 0x11, 0x03, 0x28 - .byte 0x2d, 0x30, 0x1e - .byte 0x31, 0x11, 0x11 - .byte 0x23, 0x01, 0x1e - .byte 0x3d, 0x31, 0x34 - .byte 0x1c, 0x02, 0x34 - .byte 0x21, 0x0e, 0x25 - .byte 0x3d, 0x07, 0x17 - .byte 0x33, 0x15, 0x10 - .byte 0x29, 0x32, 0x32 - .byte 0x18, 0x1f, 0x30 - .byte 0x2d, 0x3b, 0x30 - .byte 0x27, 0x3e, 0x16 - .byte 0x31, 0x15, 0x12 - .byte 0x30, 0x25, 0x17 - .byte 0x33, 0x06, 0x34 - .byte 0x00, 0x29, 0x18 - .byte 0x3c, 0x03, 0x12 - .byte 0x2c, 0x0c, 0x11 - .byte 0x09, 0x30, 0x30 - .byte 0x10, 0x0e, 0x11 - .byte 0x27, 0x16, 0x1b - .byte 0x0c, 0x3b, 0x2e - .byte 0x2b, 0x33, 0x1e - .byte 0x13, 0x2d, 0x2d - .byte 0x11, 0x24, 0x29 - .byte 0x34, 0x3e, 0x2b - .byte 0x24, 0x1e, 0x21 - .byte 0x27, 0x1a, 0x2d - .byte 0x04, 0x39, 0x16 - .byte 0x3e, 0x33, 0x26 - .byte 0x1b, 0x2e, 0x25 - .byte 0x0c, 0x06, 0x19 - .byte 0x25, 0x19, 0x18 - .byte 0x1d, 0x33, 0x33 - .byte 0x1d, 0x28, 0x2d - .byte 0x1c, 0x10, 0x2a - .byte 0x1f, 0x35, 0x1e - .byte 0x34, 0x02, 0x10 - .byte 0x2b, 0x3a, 0x14 - .byte 0x0d, 0x0b, 0x15 - .byte 0x0c, 0x2c, 0x10 - .byte 0x37, 0x3a, 0x19 - .byte 0x06, 0x13, 0x17 - .byte 0x24, 0x10, 0x25 - .byte 0x24, 0x04, 0x1e - .byte 0x00, 0x35, 0x34 - .byte 0x3a, 0x00, 0x37 - .byte 0x3c, 0x07, 0x1a - .byte 0x2b, 0x28, 0x36 - .byte 0x34, 0x39, 0x2f - .byte 0x28, 0x09, 0x1f - .byte 0x38, 0x31, 0x30 - .byte 0x16, 0x25, 0x31 - .byte 0x18, 0x28, 0x31 - .byte 0x18, 0x0c, 0x22 - .byte 0x06, 0x39, 0x2d - .byte 0x3d, 0x20, 0x24 - .byte 0x2e, 0x27, 0x21 - .byte 0x3e, 0x18, 0x18 - .byte 0x15, 0x3c, 0x24 - .byte 0x06, 0x1b, 0x26 - .byte 0x15, 0x0e, 0x22 - .byte 0x0a, 0x0d, 0x1f - .byte 0x18, 0x16, 0x34 - .byte 0x10, 0x28, 0x21 - .byte 0x20, 0x11, 0x11 - .byte 0x36, 0x32, 0x15 - .byte 0x3b, 0x2e, 0x24 - .byte 0x1f, 0x2d, 0x12 - .byte 0x36, 0x2e, 0x20 - .byte 0x0b, 0x17, 0x33 - .byte 0x26, 0x03, 0x1f - .byte 0x08, 0x19, 0x31 - .byte 0x2a, 0x18, 0x25 - .byte 0x35, 0x2d, 0x2d - .byte 0x30, 0x38, 0x18 - .byte 0x1c, 0x25, 0x14 - .byte 0x1c, 0x22, 0x28 - .byte 0x08, 0x23, 0x21 - .byte 0x26, 0x1e, 0x30 - .byte 0x19, 0x0f, 0x15 - .byte 0x10, 0x2f, 0x22 - .byte 0x12, 0x02, 0x25 - .byte 0x3c, 0x01, 0x1d - .byte 0x0e, 0x14, 0x18 - .byte 0x0d, 0x18, 0x17 - .byte 0x22, 0x0b, 0x31 - .byte 0x13, 0x34, 0x21 - .byte 0x0f, 0x2d, 0x36 - .byte 0x39, 0x1f, 0x25 - .byte 0x18, 0x10, 0x1f - .byte 0x2d, 0x20, 0x20 - .byte 0x19, 0x0b, 0x31 - .byte 0x33, 0x13, 0x14 - .byte 0x2e, 0x11, 0x21 - .byte 0x2d, 0x0a, 0x37 - .byte 0x07, 0x15, 0x1b - .byte 0x32, 0x04, 0x32 - .byte 0x06, 0x18, 0x1b - .byte 0x13, 0x24, 0x12 - .byte 0x36, 0x22, 0x16 - .byte 0x1d, 0x29, 0x1c - .byte 0x35, 0x17, 0x21 - .byte 0x36, 0x17, 0x2b - .byte 0x35, 0x32, 0x19 - .byte 0x2a, 0x0f, 0x2e - .byte 0x10, 0x00, 0x34 - .byte 0x02, 0x0e, 0x28 - .byte 0x31, 0x32, 0x32 - .byte 0x3b, 0x05, 0x20 - .byte 0x36, 0x26, 0x12 - .byte 0x34, 0x06, 0x34 - .byte 0x1e, 0x31, 0x32 - .byte 0x35, 0x05, 0x34 - .byte 0x1e, 0x13, 0x15 - .byte 0x15, 0x14, 0x2c - .byte 0x29, 0x1c, 0x18 - .byte 0x24, 0x24, 0x12 - .byte 0x22, 0x29, 0x18 - .byte 0x34, 0x36, 0x30 - .byte 0x1e, 0x01, 0x23 - .byte 0x0c, 0x3c, 0x24 - .byte 0x0a, 0x3d, 0x16 - .byte 0x27, 0x1e, 0x23 - .byte 0x15, 0x02, 0x12 - .byte 0x11, 0x19, 0x2a - .byte 0x1d, 0x31, 0x15 - .byte 0x03, 0x3b, 0x2a - .byte 0x21, 0x19, 0x2c - .byte 0x0a, 0x23, 0x11 - .byte 0x25, 0x11, 0x1a - .byte 0x1a, 0x0a, 0x34 - .byte 0x3b, 0x0b, 0x33 - .byte 0x21, 0x0b, 0x37 - .byte 0x01, 0x31, 0x28 - .byte 0x35, 0x1d, 0x27 - .byte 0x2c, 0x30, 0x31 - .byte 0x2e, 0x39, 0x2d - .byte 0x30, 0x05, 0x2c - .byte 0x12, 0x2a, 0x2b - .byte 0x39, 0x22, 0x20 - .byte 0x15, 0x34, 0x1c - .byte 0x1c, 0x01, 0x15 - .byte 0x20, 0x16, 0x22 - .byte 0x13, 0x04, 0x18 - .byte 0x1e, 0x13, 0x10 - .byte 0x25, 0x33, 0x15 - .byte 0x39, 0x03, 0x31 - .byte 0x3f, 0x36, 0x18 - .byte 0x14, 0x23, 0x10 - .byte 0x2f, 0x1e, 0x1f - .byte 0x1f, 0x17, 0x2c - .byte 0x02, 0x16, 0x31 - .byte 0x20, 0x18, 0x30 - .byte 0x2e, 0x18, 0x37 - .byte 0x3b, 0x0e, 0x30 - .byte 0x10, 0x39, 0x24 - .byte 0x26, 0x39, 0x1e - .byte 0x30, 0x26, 0x2e - .byte 0x12, 0x01, 0x14 - .byte 0x37, 0x2a, 0x2e - .byte 0x21, 0x06, 0x1d - .byte 0x2a, 0x16, 0x32 - .byte 0x09, 0x38, 0x1c - .byte 0x07, 0x22, 0x17 - .byte 0x3b, 0x2d, 0x15 - .byte 0x07, 0x1e, 0x2e - .byte 0x1b, 0x2e, 0x1d - .byte 0x04, 0x09, 0x30 - .byte 0x30, 0x2d, 0x37 - .byte 0x2d, 0x34, 0x24 - .byte 0x18, 0x24, 0x25 - .byte 0x0e, 0x2d, 0x26 - .byte 0x23, 0x0a, 0x16 - .byte 0x12, 0x2d, 0x11 - .byte 0x21, 0x28, 0x2e - .byte 0x0f, 0x01, 0x21 - .byte 0x01, 0x31, 0x12 - .byte 0x3f, 0x1b, 0x1e - .byte 0x21, 0x25, 0x2b - .byte 0x26, 0x18, 0x13 - .byte 0x15, 0x2d, 0x34 - .byte 0x23, 0x21, 0x36 - .byte 0x0e, 0x2e, 0x1c - .byte 0x14, 0x22, 0x1c - .byte 0x2c, 0x0b, 0x28 - .byte 0x1a, 0x18, 0x21 - .byte 0x21, 0x07, 0x1a - .byte 0x24, 0x26, 0x29 - .byte 0x2b, 0x0a, 0x34 - .byte 0x3e, 0x27, 0x33 - .byte 0x12, 0x34, 0x1b - .byte 0x1f, 0x01, 0x2a - .byte 0x2e, 0x06, 0x23 - .byte 0x2f, 0x1f, 0x14 - .byte 0x18, 0x06, 0x26 - .byte 0x31, 0x1f, 0x2b - .byte 0x22, 0x26, 0x2e - .byte 0x1e, 0x15, 0x16 - .byte 0x20, 0x22, 0x28 - .byte 0x15, 0x37, 0x12 - .byte 0x25, 0x04, 0x2c - .byte 0x1f, 0x04, 0x2e - .byte 0x0c, 0x13, 0x18 - .byte 0x07, 0x0b, 0x36 - .byte 0x1d, 0x1c, 0x2a - .byte 0x30, 0x22, 0x1c - .byte 0x2e, 0x12, 0x2f - .byte 0x2b, 0x21, 0x1e - .byte 0x16, 0x38, 0x30 - .byte 0x04, 0x02, 0x16 - .byte 0x05, 0x14, 0x20 - .byte 0x38, 0x3c, 0x33 - .byte 0x21, 0x1b, 0x2f - .byte 0x14, 0x2a, 0x27 - .byte 0x38, 0x14, 0x1b - .byte 0x2b, 0x1f, 0x2b - .byte 0x29, 0x2b, 0x25 - .byte 0x27, 0x36, 0x21 - .byte 0x11, 0x22, 0x1b - .byte 0x29, 0x03, 0x1b - .byte 0x18, 0x24, 0x28 - .byte 0x21, 0x2d, 0x36 - .byte 0x3c, 0x2c, 0x24 - .byte 0x33, 0x17, 0x1f - .byte 0x2a, 0x3a, 0x21 - .byte 0x0a, 0x23, 0x37 - .byte 0x00, 0x0b, 0x21 - .byte 0x11, 0x38, 0x19 - .byte 0x0f, 0x0e, 0x1c - .byte 0x1f, 0x0f, 0x37 - .byte 0x3c, 0x10, 0x37 - .byte 0x38, 0x31, 0x35 - .byte 0x07, 0x15, 0x28 - .byte 0x1e, 0x2e, 0x19 - .byte 0x26, 0x10, 0x33 - .byte 0x3d, 0x35, 0x2f - .byte 0x3a, 0x04, 0x34 - .byte 0x0d, 0x18, 0x1a - .byte 0x01, 0x2d, 0x15 - .byte 0x3d, 0x1a, 0x17 - .byte 0x17, 0x3f, 0x32 - .byte 0x0b, 0x21, 0x11 - .byte 0x1e, 0x26, 0x2b - .byte 0x0d, 0x19, 0x24 - .byte 0x2e, 0x04, 0x1b - .byte 0x1b, 0x33, 0x20 - .byte 0x15, 0x21, 0x1d - .byte 0x1f, 0x04, 0x21 - .byte 0x0f, 0x12, 0x1f - .byte 0x2d, 0x2a, 0x32 - .byte 0x03, 0x37, 0x1f - .byte 0x35, 0x07, 0x27 - .byte 0x24, 0x1f, 0x31 - .byte 0x2f, 0x30, 0x15 - .byte 0x06, 0x00, 0x24 - .byte 0x0b, 0x22, 0x1a - .byte 0x0c, 0x3b, 0x29 - .byte 0x14, 0x1a, 0x17 - .byte 0x37, 0x20, 0x25 - .byte 0x3f, 0x26, 0x37 - .byte 0x3a, 0x3e, 0x10 - .byte 0x22, 0x04, 0x11 - .byte 0x28, 0x12, 0x1c - .byte 0x03, 0x2e, 0x2e - .byte 0x0e, 0x38, 0x28 - .byte 0x01, 0x29, 0x22 - .byte 0x1e, 0x33, 0x19 - .byte 0x06, 0x21, 0x27 - .byte 0x33, 0x19, 0x1a - .byte 0x02, 0x05, 0x17 - .byte 0x11, 0x11, 0x2c - .byte 0x1f, 0x26, 0x1e - .byte 0x39, 0x1f, 0x28 - .byte 0x2e, 0x2f, 0x12 - .byte 0x22, 0x34, 0x13 - .byte 0x3b, 0x26, 0x2f - .byte 0x34, 0x00, 0x14 - .byte 0x10, 0x31, 0x11 - .byte 0x1d, 0x2d, 0x2a - .byte 0x08, 0x08, 0x37 - .byte 0x15, 0x18, 0x34 - .byte 0x04, 0x2b, 0x24 - .byte 0x2f, 0x1e, 0x27 - .byte 0x22, 0x2a, 0x24 - .byte 0x07, 0x14, 0x25 - .byte 0x01, 0x27, 0x19 - .byte 0x29, 0x0a, 0x29 - .byte 0x3d, 0x1c, 0x2f - .byte 0x0d, 0x1f, 0x1c - .byte 0x24, 0x3d, 0x32 - .byte 0x36, 0x1d, 0x24 - .byte 0x14, 0x21, 0x16 - .byte 0x1a, 0x0d, 0x29 - .byte 0x3f, 0x2b, 0x2a - .byte 0x1a, 0x3e, 0x35 - .byte 0x11, 0x28, 0x18 - .byte 0x32, 0x05, 0x15 - .byte 0x21, 0x2e, 0x34 - .byte 0x2d, 0x14, 0x2a - .byte 0x3c, 0x08, 0x37 - .byte 0x3f, 0x34, 0x1e - .byte 0x27, 0x24, 0x1c - .byte 0x16, 0x16, 0x33 - .byte 0x29, 0x3b, 0x19 - .byte 0x36, 0x2f, 0x1c - .byte 0x03, 0x25, 0x2c - .byte 0x0b, 0x16, 0x36 - .byte 0x1c, 0x1d, 0x1b - .byte 0x2c, 0x27, 0x1b - .byte 0x0b, 0x1f, 0x2b - .byte 0x08, 0x10, 0x27 - .byte 0x3f, 0x25, 0x2f - .byte 0x33, 0x13, 0x1f - .byte 0x04, 0x31, 0x37 - .byte 0x0e, 0x2f, 0x12 - .byte 0x08, 0x23, 0x20 - .byte 0x3a, 0x1a, 0x1e - .byte 0x2f, 0x0b, 0x1f - .byte 0x1e, 0x20, 0x19 - .byte 0x23, 0x3b, 0x14 - .byte 0x25, 0x00, 0x27 - .byte 0x14, 0x04, 0x25 - .byte 0x36, 0x1a, 0x2b - .byte 0x27, 0x21, 0x15 - .byte 0x28, 0x13, 0x2c - .byte 0x0e, 0x3c, 0x35 - .byte 0x0c, 0x2d, 0x2b - .byte 0x37, 0x16, 0x15 - .byte 0x29, 0x15, 0x1d - .byte 0x17, 0x34, 0x36 - .byte 0x09, 0x0a, 0x31 - .byte 0x37, 0x22, 0x28 - .byte 0x17, 0x2b, 0x35 - .byte 0x14, 0x2b, 0x12 - .byte 0x08, 0x13, 0x1f - .byte 0x31, 0x13, 0x28 - .byte 0x06, 0x07, 0x35 - .byte 0x23, 0x3a, 0x29 - .byte 0x0f, 0x24, 0x2e - .byte 0x07, 0x35, 0x26 - .byte 0x0e, 0x12, 0x15 - .byte 0x23, 0x33, 0x2c - .byte 0x0e, 0x21, 0x26 - .byte 0x1c, 0x12, 0x25 - .byte 0x23, 0x1d, 0x2f - .byte 0x04, 0x35, 0x33 - .byte 0x16, 0x01, 0x24 - .byte 0x3d, 0x2c, 0x2e - .byte 0x35, 0x0a, 0x25 - .byte 0x11, 0x13, 0x25 - .byte 0x1b, 0x1b, 0x15 - .byte 0x15, 0x39, 0x10 - .byte 0x0b, 0x35, 0x24 - .byte 0x3a, 0x27, 0x30 - .byte 0x2e, 0x2f, 0x15 - .byte 0x10, 0x1f, 0x35 - .byte 0x1b, 0x28, 0x35 - .byte 0x26, 0x30, 0x37 - .byte 0x34, 0x37, 0x2b - .byte 0x0f, 0x30, 0x29 - .byte 0x2e, 0x3f, 0x2b - .byte 0x38, 0x34, 0x2b - .byte 0x2b, 0x2f, 0x25 - .byte 0x0d, 0x28, 0x2a - .byte 0x33, 0x18, 0x10 - .byte 0x21, 0x12, 0x11 - .byte 0x1f, 0x22, 0x34 - .byte 0x11, 0x25, 0x23 - .byte 0x21, 0x3f, 0x11 - .byte 0x26, 0x27, 0x25 - .byte 0x28, 0x36, 0x12 - .byte 0x15, 0x26, 0x32 - .byte 0x11, 0x18, 0x24 - .byte 0x32, 0x25, 0x37 - .byte 0x27, 0x3a, 0x33 - .byte 0x35, 0x07, 0x1c - .byte 0x1a, 0x0e, 0x2a - .byte 0x1e, 0x2f, 0x1f - .byte 0x00, 0x2e, 0x21 - .byte 0x1b, 0x3c, 0x14 - .byte 0x2f, 0x3a, 0x2f - .byte 0x3e, 0x38, 0x15 - .byte 0x1a, 0x13, 0x2f - .byte 0x29, 0x0d, 0x2f - .byte 0x37, 0x17, 0x18 - .byte 0x30, 0x1c, 0x35 - .byte 0x15, 0x34, 0x14 - .byte 0x28, 0x11, 0x2c - .byte 0x2c, 0x25, 0x2a - .byte 0x20, 0x3f, 0x28 - .byte 0x0c, 0x34, 0x1b - .byte 0x30, 0x2e, 0x25 - .byte 0x37, 0x1c, 0x24 - .byte 0x1f, 0x25, 0x26 - .byte 0x0c, 0x19, 0x34 - .byte 0x18, 0x10, 0x35 - .byte 0x0a, 0x13, 0x11 - .byte 0x25, 0x13, 0x20 - .byte 0x13, 0x19, 0x11 - .byte 0x20, 0x28, 0x1d - .byte 0x3e, 0x30, 0x1b - .byte 0x23, 0x24, 0x21 - .byte 0x0d, 0x23, 0x23 - .byte 0x1d, 0x28, 0x2e - .byte 0x2d, 0x12, 0x1f - .byte 0x0e, 0x2e, 0x2b - .byte 0x0b, 0x31, 0x32 - .byte 0x24, 0x3c, 0x2c - .byte 0x13, 0x3c, 0x12 - .byte 0x28, 0x16, 0x2a - .byte 0x05, 0x0c, 0x32 - .byte 0x39, 0x0b, 0x32 - .byte 0x21, 0x04, 0x14 - .byte 0x10, 0x31, 0x32 - .byte 0x12, 0x1f, 0x23 - .byte 0x39, 0x2e, 0x2e - .byte 0x22, 0x3d, 0x27 - .byte 0x0c, 0x1e, 0x18 - .byte 0x25, 0x00, 0x17 - .byte 0x06, 0x31, 0x14 - .byte 0x13, 0x21, 0x1a - .byte 0x14, 0x20, 0x35 - .byte 0x0a, 0x3b, 0x25 - .byte 0x33, 0x08, 0x28 - .byte 0x3d, 0x02, 0x33 - .byte 0x23, 0x00, 0x13 - .byte 0x22, 0x21, 0x28 - .byte 0x30, 0x14, 0x2e - .byte 0x14, 0x32, 0x36 - .byte 0x39, 0x23, 0x1e - .byte 0x1c, 0x11, 0x30 - .byte 0x37, 0x16, 0x30 - .byte 0x15, 0x31, 0x1f - .byte 0x34, 0x28, 0x2c - .byte 0x35, 0x05, 0x29 - .byte 0x37, 0x33, 0x2a - .byte 0x1c, 0x17, 0x2e - .byte 0x10, 0x06, 0x16 - .byte 0x32, 0x1f, 0x2f - .byte 0x00, 0x29, 0x1e - .byte 0x04, 0x01, 0x16 - .byte 0x3b, 0x23, 0x1e - .byte 0x1b, 0x34, 0x2a - .byte 0x30, 0x11, 0x2b - .byte 0x03, 0x00, 0x1f - .byte 0x1d, 0x37, 0x1a - .byte 0x3a, 0x18, 0x25 - .byte 0x1c, 0x16, 0x2c - .byte 0x04, 0x3f, 0x33 - .byte 0x26, 0x23, 0x2d - .byte 0x15, 0x2c, 0x27 - .byte 0x02, 0x35, 0x27 - .byte 0x07, 0x35, 0x33 - .byte 0x1a, 0x0c, 0x10 - .byte 0x28, 0x26, 0x2c - .byte 0x2f, 0x36, 0x16 - .byte 0x37, 0x0b, 0x27 - .byte 0x1b, 0x3d, 0x18 - .byte 0x27, 0x1f, 0x20 - .byte 0x2b, 0x2a, 0x33 - .byte 0x0b, 0x0f, 0x20 - .byte 0x35, 0x3c, 0x2f - .byte 0x33, 0x21, 0x15 - .byte 0x2d, 0x26, 0x34 - .byte 0x1f, 0x1a, 0x21 - .byte 0x2f, 0x2c, 0x2a - .byte 0x1a, 0x32, 0x1a - .byte 0x3b, 0x3f, 0x21 - .byte 0x13, 0x3f, 0x13 - .byte 0x0f, 0x24, 0x22 - .byte 0x14, 0x1b, 0x10 - .byte 0x21, 0x06, 0x28 - .byte 0x25, 0x34, 0x10 - .byte 0x2e, 0x0e, 0x14 - .byte 0x3c, 0x3e, 0x25 - .byte 0x16, 0x06, 0x30 - .byte 0x0b, 0x04, 0x1f - .byte 0x3e, 0x02, 0x24 - .byte 0x0c, 0x17, 0x25 - .byte 0x2b, 0x3c, 0x2d - .byte 0x15, 0x36, 0x33 - .byte 0x18, 0x23, 0x2a - .byte 0x1d, 0x10, 0x2a - .byte 0x35, 0x17, 0x28 - .byte 0x00, 0x37, 0x24 - .byte 0x0a, 0x3b, 0x15 - .byte 0x1d, 0x0b, 0x1f - .byte 0x3c, 0x31, 0x25 - .byte 0x1d, 0x0f, 0x1d - .byte 0x20, 0x13, 0x34 - .byte 0x11, 0x2b, 0x2e - .byte 0x23, 0x0c, 0x2e - .byte 0x24, 0x02, 0x14 - .byte 0x31, 0x16, 0x19 - .byte 0x0e, 0x23, 0x35 - .byte 0x1a, 0x10, 0x16 - .byte 0x14, 0x04, 0x19 - .byte 0x2d, 0x27, 0x37 - .byte 0x33, 0x02, 0x31 - .byte 0x02, 0x04, 0x16 - .byte 0x0d, 0x22, 0x25 - .byte 0x25, 0x00, 0x16 - .byte 0x2a, 0x3f, 0x26 - .byte 0x20, 0x0c, 0x12 - .byte 0x2f, 0x2e, 0x35 - .byte 0x1b, 0x0d, 0x22 - .byte 0x1e, 0x01, 0x34 - .byte 0x05, 0x22, 0x21 - .byte 0x34, 0x2a, 0x32 - .byte 0x0b, 0x09, 0x1d - .byte 0x3f, 0x32, 0x2f - .byte 0x3d, 0x18, 0x2d - .byte 0x0b, 0x38, 0x36 - .byte 0x39, 0x17, 0x28 - .byte 0x34, 0x04, 0x24 - .byte 0x36, 0x0e, 0x2a - .byte 0x38, 0x01, 0x14 - .byte 0x3c, 0x24, 0x22 - .byte 0x21, 0x03, 0x18 - .byte 0x32, 0x2f, 0x12 - .byte 0x29, 0x24, 0x31 - .byte 0x0a, 0x3b, 0x12 - .byte 0x1a, 0x1c, 0x20 - .byte 0x30, 0x31, 0x1b - .byte 0x1a, 0x21, 0x10 - .byte 0x05, 0x29, 0x10 - .byte 0x26, 0x2d, 0x13 - .byte 0x16, 0x0c, 0x1d - .byte 0x2b, 0x06, 0x1b - .byte 0x06, 0x12, 0x14 - .byte 0x38, 0x0f, 0x35 - .byte 0x23, 0x3a, 0x2c - .byte 0x00, 0x19, 0x33 - .byte 0x29, 0x14, 0x2d - .byte 0x2a, 0x21, 0x29 - .byte 0x14, 0x31, 0x14 - .byte 0x1a, 0x06, 0x1e - .byte 0x18, 0x1b, 0x28 - .byte 0x3b, 0x16, 0x29 - .byte 0x15, 0x1e, 0x12 - .byte 0x34, 0x0a, 0x14 - .byte 0x1b, 0x05, 0x27 - .byte 0x0b, 0x01, 0x26 - .byte 0x2a, 0x22, 0x35 - .byte 0x21, 0x20, 0x18 - .byte 0x20, 0x37, 0x17 - .byte 0x14, 0x1f, 0x11 - .byte 0x1d, 0x11, 0x25 - .byte 0x24, 0x2b, 0x2f - .byte 0x07, 0x3f, 0x1f - .byte 0x2c, 0x25, 0x25 - .byte 0x2a, 0x29, 0x18 - .byte 0x11, 0x24, 0x28 - .byte 0x31, 0x2c, 0x2a - .byte 0x39, 0x0b, 0x26 - .byte 0x28, 0x10, 0x26 - .byte 0x22, 0x06, 0x16 - .byte 0x09, 0x2c, 0x13 - .byte 0x34, 0x19, 0x15 - .byte 0x3a, 0x12, 0x21 - .byte 0x1d, 0x38, 0x23 - .byte 0x12, 0x25, 0x24 - .byte 0x21, 0x30, 0x12 - .byte 0x37, 0x1a, 0x12 - .byte 0x24, 0x3b, 0x25 - .byte 0x32, 0x15, 0x23 - .byte 0x0d, 0x1a, 0x10 - .byte 0x16, 0x2e, 0x26 - .byte 0x1d, 0x14, 0x16 - .byte 0x3e, 0x2e, 0x1f - .byte 0x0a, 0x16, 0x10 - .byte 0x1d, 0x30, 0x2b - .byte 0x04, 0x3a, 0x19 - .byte 0x08, 0x2d, 0x2e - .byte 0x28, 0x1e, 0x33 - .byte 0x0a, 0x12, 0x2e - .byte 0x0d, 0x03, 0x2f - .byte 0x26, 0x3a, 0x1e - .byte 0x35, 0x3b, 0x2a - .byte 0x03, 0x1a, 0x18 - .byte 0x3f, 0x0b, 0x27 - .byte 0x04, 0x05, 0x34 - .byte 0x36, 0x0b, 0x27 - .byte 0x3b, 0x17, 0x11 - .byte 0x0d, 0x27, 0x26 - .byte 0x2c, 0x1f, 0x20 - .byte 0x26, 0x10, 0x20 - .byte 0x25, 0x23, 0x2d - .byte 0x37, 0x09, 0x13 - .byte 0x14, 0x17, 0x2d - .byte 0x2e, 0x3d, 0x23 - .byte 0x1d, 0x1a, 0x1f - .byte 0x21, 0x33, 0x2e - .byte 0x28, 0x17, 0x13 - .byte 0x26, 0x3c, 0x36 - .byte 0x14, 0x1a, 0x33 - .byte 0x32, 0x20, 0x2b - .byte 0x19, 0x3e, 0x20 - .byte 0x0c, 0x02, 0x2d - .byte 0x3c, 0x3c, 0x2a - .byte 0x30, 0x30, 0x28 - .byte 0x25, 0x3f, 0x1e - .byte 0x03, 0x17, 0x1e - .byte 0x35, 0x11, 0x1c - .byte 0x1b, 0x14, 0x2a - .byte 0x28, 0x3a, 0x23 - .byte 0x0e, 0x1f, 0x12 - .byte 0x36, 0x21, 0x20 - .byte 0x07, 0x3b, 0x10 - .byte 0x23, 0x19, 0x34 - .byte 0x0d, 0x2e, 0x18 - .byte 0x3f, 0x20, 0x25 - .byte 0x3e, 0x3b, 0x15 - .byte 0x0b, 0x2e, 0x12 - .byte 0x37, 0x0b, 0x23 - .byte 0x3d, 0x32, 0x1f - .byte 0x16, 0x03, 0x27 - .byte 0x14, 0x0c, 0x21 - .byte 0x18, 0x03, 0x30 - .byte 0x3e, 0x21, 0x13 - .byte 0x0f, 0x00, 0x32 - .byte 0x3f, 0x23, 0x16 - .byte 0x0e, 0x31, 0x1d - .byte 0x18, 0x1c, 0x1d - .byte 0x30, 0x0e, 0x1e - .byte 0x21, 0x20, 0x23 - .byte 0x3f, 0x0c, 0x1e - .byte 0x14, 0x33, 0x22 - .byte 0x22, 0x21, 0x15 - .byte 0x36, 0x05, 0x1e - .byte 0x1d, 0x31, 0x14 - .byte 0x20, 0x11, 0x37 - .byte 0x0d, 0x33, 0x19 - .byte 0x25, 0x05, 0x36 - .byte 0x1e, 0x31, 0x20 - .byte 0x35, 0x3a, 0x2f - .byte 0x32, 0x2f, 0x30 - .byte 0x14, 0x23, 0x2d - .byte 0x35, 0x1e, 0x29 - .byte 0x05, 0x05, 0x1b - .byte 0x09, 0x1f, 0x26 - .byte 0x2f, 0x0b, 0x15 - .byte 0x15, 0x11, 0x13 - .byte 0x29, 0x1b, 0x18 - .byte 0x1c, 0x13, 0x35 - .byte 0x34, 0x31, 0x23 - .byte 0x27, 0x3f, 0x2f - .byte 0x09, 0x30, 0x19 - .byte 0x23, 0x12, 0x34 - .byte 0x02, 0x2a, 0x21 - .byte 0x09, 0x3c, 0x1d - .byte 0x0c, 0x02, 0x10 - .byte 0x22, 0x05, 0x17 - .byte 0x22, 0x08, 0x1b - .byte 0x0a, 0x0f, 0x15 - .byte 0x02, 0x11, 0x13 - .byte 0x01, 0x21, 0x22 - .byte 0x16, 0x39, 0x33 - .byte 0x24, 0x38, 0x34 - .byte 0x0f, 0x1e, 0x2b - .byte 0x2b, 0x15, 0x15 - .byte 0x20, 0x22, 0x2e - .byte 0x3a, 0x3f, 0x31 - .byte 0x1a, 0x27, 0x2b - .byte 0x29, 0x34, 0x14 - .byte 0x16, 0x39, 0x2f - .byte 0x13, 0x3e, 0x16 - .byte 0x36, 0x21, 0x30 - .byte 0x00, 0x24, 0x2b - .byte 0x24, 0x21, 0x30 - .byte 0x15, 0x31, 0x13 - .byte 0x10, 0x37, 0x24 - .byte 0x08, 0x07, 0x23 - .byte 0x21, 0x09, 0x25 - .byte 0x05, 0x3c, 0x32 - .byte 0x19, 0x03, 0x25 - .byte 0x0f, 0x29, 0x2b - .byte 0x16, 0x07, 0x13 - .byte 0x3e, 0x3d, 0x25 - .byte 0x36, 0x0b, 0x28 - .byte 0x2e, 0x2b, 0x16 - .byte 0x0c, 0x31, 0x11 - .byte 0x30, 0x13, 0x2d - .byte 0x26, 0x3e, 0x37 - .byte 0x29, 0x2f, 0x2e - .byte 0x15, 0x3d, 0x17 - .byte 0x1c, 0x2e, 0x21 - .byte 0x33, 0x2f, 0x10 - .byte 0x0d, 0x05, 0x1d - .byte 0x1c, 0x1a, 0x12 - .byte 0x0e, 0x18, 0x37 - .byte 0x1b, 0x11, 0x14 - .byte 0x06, 0x14, 0x21 - .byte 0x31, 0x0e, 0x27 - .byte 0x1a, 0x03, 0x10 - .byte 0x00, 0x34, 0x31 - .byte 0x3f, 0x0b, 0x1d - .byte 0x0f, 0x12, 0x1f - .byte 0x1a, 0x15, 0x10 - .byte 0x0f, 0x00, 0x24 - .byte 0x3e, 0x0a, 0x2a - .byte 0x30, 0x2b, 0x24 - .byte 0x26, 0x31, 0x10 - .byte 0x2d, 0x2f, 0x2f - .byte 0x3f, 0x0c, 0x13 - .byte 0x12, 0x0b, 0x16 - .byte 0x15, 0x07, 0x1f - .byte 0x28, 0x10, 0x32 - .byte 0x0f, 0x17, 0x15 - .byte 0x0b, 0x27, 0x33 - .byte 0x34, 0x1d, 0x10 - .byte 0x1c, 0x3a, 0x12 - .byte 0x2c, 0x27, 0x37 - .byte 0x0a, 0x1a, 0x32 - .byte 0x05, 0x1f, 0x21 - .byte 0x24, 0x0d, 0x1f - .byte 0x1c, 0x17, 0x24 - .byte 0x2f, 0x3b, 0x32 - .byte 0x3b, 0x25, 0x10 - .byte 0x03, 0x2f, 0x21 - .byte 0x0c, 0x10, 0x23 - .byte 0x0e, 0x3a, 0x2c - .byte 0x33, 0x03, 0x2c - .byte 0x12, 0x06, 0x1c - .byte 0x2a, 0x37, 0x30 - .byte 0x3f, 0x01, 0x1e - .byte 0x35, 0x16, 0x37 - .byte 0x2c, 0x32, 0x35 - .byte 0x05, 0x11, 0x22 - .byte 0x29, 0x09, 0x20 - .byte 0x2b, 0x0d, 0x1f - .byte 0x18, 0x0d, 0x20 - .byte 0x23, 0x39, 0x16 - .byte 0x0f, 0x3a, 0x18 - .byte 0x21, 0x35, 0x2b - .byte 0x36, 0x26, 0x2b - .byte 0x23, 0x05, 0x2f - .byte 0x1b, 0x08, 0x17 - .byte 0x3e, 0x09, 0x16 - .byte 0x2d, 0x3a, 0x37 - .byte 0x15, 0x35, 0x35 - .byte 0x29, 0x0a, 0x12 - .byte 0x02, 0x39, 0x1f - .byte 0x14, 0x34, 0x33 - .byte 0x17, 0x1d, 0x18 - .byte 0x16, 0x1d, 0x1a - .byte 0x01, 0x39, 0x22 - .byte 0x1e, 0x27, 0x36 - .byte 0x32, 0x14, 0x26 - .byte 0x0a, 0x39, 0x36 - .byte 0x1f, 0x0d, 0x1e - .byte 0x0b, 0x0a, 0x19 - .byte 0x35, 0x1d, 0x34 - .byte 0x03, 0x12, 0x16 - .byte 0x0c, 0x13, 0x2e - .byte 0x0c, 0x34, 0x1e - .byte 0x10, 0x14, 0x1e - .byte 0x23, 0x32, 0x27 - .byte 0x02, 0x10, 0x29 - .byte 0x35, 0x18, 0x33 - .byte 0x33, 0x1d, 0x1a - .byte 0x3c, 0x15, 0x23 - .byte 0x3e, 0x3f, 0x22 - .byte 0x2a, 0x02, 0x2c - .byte 0x28, 0x0a, 0x2f - .byte 0x1a, 0x06, 0x35 - .byte 0x3c, 0x17, 0x2b - .byte 0x03, 0x12, 0x17 - .byte 0x2f, 0x0a, 0x26 - .byte 0x12, 0x38, 0x11 - .byte 0x36, 0x1b, 0x23 - .byte 0x01, 0x39, 0x35 - .byte 0x19, 0x19, 0x17 - .byte 0x09, 0x28, 0x22 - .byte 0x1e, 0x27, 0x2c - .byte 0x35, 0x33, 0x2c - .byte 0x27, 0x25, 0x31 - .byte 0x06, 0x31, 0x2d - .byte 0x1a, 0x39, 0x28 - .byte 0x2d, 0x04, 0x1e - .byte 0x24, 0x3e, 0x1c - .byte 0x3c, 0x30, 0x1b - .byte 0x3f, 0x3e, 0x37 - .byte 0x22, 0x36, 0x11 - .byte 0x00, 0x01, 0x1c - .byte 0x12, 0x1a, 0x10 - .byte 0x12, 0x1e, 0x2c - .byte 0x1f, 0x12, 0x2a - .byte 0x2f, 0x06, 0x19 - .byte 0x35, 0x1a, 0x18 - .byte 0x3b, 0x09, 0x36 - .byte 0x34, 0x1d, 0x13 - .byte 0x02, 0x07, 0x10 - .byte 0x20, 0x2f, 0x1d - .byte 0x0b, 0x03, 0x33 - .byte 0x1c, 0x16, 0x31 - .byte 0x05, 0x13, 0x1b - .byte 0x29, 0x06, 0x13 - .byte 0x30, 0x2d, 0x36 - .byte 0x2a, 0x2d, 0x2c - .byte 0x19, 0x34, 0x1c - .byte 0x0f, 0x15, 0x12 - .byte 0x36, 0x15, 0x2c - .byte 0x3a, 0x06, 0x1c - .byte 0x12, 0x1d, 0x26 - .byte 0x03, 0x38, 0x1d - .byte 0x01, 0x01, 0x2d - .byte 0x17, 0x2e, 0x10 - .byte 0x14, 0x17, 0x1c - .byte 0x34, 0x0f, 0x28 - .byte 0x09, 0x37, 0x1b - .byte 0x28, 0x1d, 0x26 - .byte 0x29, 0x2d, 0x36 - .byte 0x1e, 0x17, 0x28 - .byte 0x15, 0x0f, 0x1c - .byte 0x20, 0x2d, 0x10 - .byte 0x27, 0x16, 0x2e - .byte 0x14, 0x09, 0x12 - .byte 0x3b, 0x3d, 0x21 - .byte 0x25, 0x1a, 0x2c - .byte 0x00, 0x22, 0x36 - .byte 0x0d, 0x30, 0x10 - .byte 0x17, 0x19, 0x1b - .byte 0x00, 0x3b, 0x21 - .byte 0x2a, 0x28, 0x34 - .byte 0x2d, 0x0f, 0x16 - .byte 0x0a, 0x30, 0x28 - .byte 0x06, 0x00, 0x25 - .byte 0x31, 0x2e, 0x2a - .byte 0x14, 0x33, 0x28 - .byte 0x36, 0x10, 0x2e - .byte 0x05, 0x2e, 0x19 - .byte 0x19, 0x1a, 0x15 - .byte 0x2c, 0x14, 0x17 - .byte 0x37, 0x0f, 0x13 - .byte 0x32, 0x17, 0x1b - .byte 0x39, 0x18, 0x32 - .byte 0x2e, 0x32, 0x1e - .byte 0x24, 0x1d, 0x31 - .byte 0x12, 0x1d, 0x2b - .byte 0x14, 0x0c, 0x27 - .byte 0x36, 0x2e, 0x32 - .byte 0x06, 0x0a, 0x1a - .byte 0x28, 0x28, 0x20 - .byte 0x3a, 0x3a, 0x17 - .byte 0x08, 0x27, 0x36 - .byte 0x18, 0x1a, 0x10 - .byte 0x1e, 0x26, 0x1b - .byte 0x1f, 0x33, 0x1f - .byte 0x21, 0x17, 0x2f - .byte 0x01, 0x08, 0x20 - .byte 0x35, 0x03, 0x19 - .byte 0x3b, 0x02, 0x20 - .byte 0x02, 0x2d, 0x23 - .byte 0x0e, 0x17, 0x32 - .byte 0x31, 0x29, 0x11 - .byte 0x22, 0x17, 0x22 - .byte 0x3a, 0x2c, 0x23 - .byte 0x34, 0x20, 0x18 - .byte 0x00, 0x3a, 0x22 - .byte 0x25, 0x33, 0x21 - .byte 0x33, 0x04, 0x27 - .byte 0x04, 0x18, 0x32 - .byte 0x2c, 0x0c, 0x2f - .byte 0x28, 0x14, 0x2c - .byte 0x3f, 0x30, 0x2b - .byte 0x30, 0x21, 0x1d - .byte 0x01, 0x25, 0x32 - .byte 0x05, 0x23, 0x34 - .byte 0x24, 0x10, 0x30 - .byte 0x3d, 0x14, 0x1b - .byte 0x3f, 0x38, 0x2f - .byte 0x22, 0x1b, 0x32 - .byte 0x25, 0x07, 0x37 - .byte 0x0a, 0x0c, 0x1d - .byte 0x03, 0x1e, 0x1a - .byte 0x0f, 0x3c, 0x12 - .byte 0x11, 0x18, 0x1d - .byte 0x00, 0x35, 0x2f - .byte 0x32, 0x18, 0x14 - .byte 0x23, 0x30, 0x1b - .byte 0x11, 0x3d, 0x12 - .byte 0x1a, 0x16, 0x35 - .byte 0x28, 0x05, 0x24 - .byte 0x17, 0x3d, 0x37 - .byte 0x2e, 0x09, 0x2e - .byte 0x18, 0x1d, 0x17 - .byte 0x20, 0x1f, 0x18 - .byte 0x23, 0x2c, 0x2f - .byte 0x20, 0x3f, 0x16 - .byte 0x3f, 0x29, 0x2e - .byte 0x23, 0x3b, 0x29 - .byte 0x18, 0x39, 0x13 - .byte 0x1e, 0x32, 0x35 - .byte 0x14, 0x1d, 0x2a - .byte 0x35, 0x01, 0x1d - .byte 0x3e, 0x3b, 0x1e - .byte 0x22, 0x1e, 0x16 - .byte 0x18, 0x22, 0x12 - .byte 0x3e, 0x29, 0x33 - .byte 0x2f, 0x14, 0x19 - .byte 0x3b, 0x07, 0x15 - .byte 0x06, 0x3d, 0x29 - .byte 0x35, 0x37, 0x23 - .byte 0x34, 0x1d, 0x2d - .byte 0x18, 0x12, 0x1b - .byte 0x0b, 0x13, 0x24 - .byte 0x13, 0x38, 0x1c - .byte 0x1f, 0x0b, 0x1b - .byte 0x13, 0x21, 0x1c - .byte 0x06, 0x39, 0x32 - .byte 0x37, 0x3d, 0x26 - .byte 0x29, 0x26, 0x15 - .byte 0x3c, 0x33, 0x27 - .byte 0x00, 0x01, 0x2e - .byte 0x15, 0x18, 0x31 - .byte 0x0d, 0x2c, 0x13 - .byte 0x27, 0x3b, 0x20 - .byte 0x2d, 0x01, 0x26 - .byte 0x23, 0x15, 0x30 - .byte 0x24, 0x00, 0x17 - .byte 0x37, 0x3f, 0x33 - .byte 0x25, 0x24, 0x31 - .byte 0x06, 0x3b, 0x37 - .byte 0x03, 0x18, 0x1a - .byte 0x2c, 0x34, 0x14 - .byte 0x1d, 0x36, 0x18 - .byte 0x3a, 0x04, 0x23 - .byte 0x12, 0x26, 0x15 - .byte 0x2b, 0x19, 0x1a - .byte 0x29, 0x2c, 0x36 - .byte 0x01, 0x19, 0x1d - .byte 0x2f, 0x06, 0x2b - .byte 0x0c, 0x12, 0x26 - .byte 0x36, 0x32, 0x1d - .byte 0x0d, 0x12, 0x28 - .byte 0x03, 0x28, 0x13 - .byte 0x29, 0x06, 0x17 - .byte 0x03, 0x38, 0x21 - .byte 0x30, 0x2c, 0x10 - .byte 0x22, 0x00, 0x28 - .byte 0x24, 0x3b, 0x1c - .byte 0x20, 0x3e, 0x13 - .byte 0x02, 0x0c, 0x19 - .byte 0x29, 0x2c, 0x1a - .byte 0x39, 0x30, 0x22 - .byte 0x2a, 0x1f, 0x22 - .byte 0x14, 0x34, 0x2c - .byte 0x14, 0x25, 0x1b - .byte 0x06, 0x3b, 0x15 - .byte 0x06, 0x1c, 0x13 - .byte 0x15, 0x03, 0x18 - .byte 0x1e, 0x2a, 0x1b - .byte 0x17, 0x25, 0x2f - .byte 0x1c, 0x29, 0x2e - .byte 0x02, 0x32, 0x1e - .byte 0x1d, 0x28, 0x35 - .byte 0x36, 0x03, 0x34 - .byte 0x16, 0x3d, 0x2a - .byte 0x12, 0x0d, 0x13 - .byte 0x1d, 0x2d, 0x21 - .byte 0x32, 0x17, 0x2e - .byte 0x1a, 0x15, 0x26 - .byte 0x22, 0x2f, 0x15 - .byte 0x3c, 0x0e, 0x20 - .byte 0x2f, 0x27, 0x13 - .byte 0x04, 0x09, 0x32 - .byte 0x1e, 0x01, 0x34 - .byte 0x06, 0x16, 0x1e - .byte 0x2e, 0x1b, 0x1c - .byte 0x28, 0x13, 0x2a - .byte 0x30, 0x34, 0x12 - .byte 0x12, 0x32, 0x18 - .byte 0x1d, 0x1d, 0x35 - .byte 0x07, 0x1c, 0x16 - .byte 0x2d, 0x3d, 0x35 - .byte 0x1c, 0x1b, 0x24 - .byte 0x21, 0x2d, 0x1e - .byte 0x10, 0x09, 0x14 - .byte 0x3d, 0x11, 0x12 - .byte 0x25, 0x02, 0x26 - .byte 0x23, 0x02, 0x19 - .byte 0x19, 0x05, 0x14 - .byte 0x0b, 0x21, 0x1a - .byte 0x09, 0x02, 0x2c - .byte 0x18, 0x28, 0x2d - .byte 0x1e, 0x10, 0x12 - .byte 0x2e, 0x18, 0x2e - .byte 0x1f, 0x02, 0x2c - .byte 0x14, 0x17, 0x24 - .byte 0x39, 0x08, 0x32 - .byte 0x16, 0x14, 0x22 - .byte 0x16, 0x28, 0x21 - .byte 0x11, 0x10, 0x2c - .byte 0x23, 0x36, 0x2b - .byte 0x39, 0x21, 0x26 - .byte 0x0e, 0x06, 0x2d - .byte 0x3c, 0x3e, 0x26 - .byte 0x2a, 0x1b, 0x1f - .byte 0x00, 0x3c, 0x33 - .byte 0x35, 0x3f, 0x14 - .byte 0x00, 0x0b, 0x10 - .byte 0x34, 0x3c, 0x17 - .byte 0x2d, 0x07, 0x1f - .byte 0x24, 0x39, 0x27 - .byte 0x16, 0x00, 0x1d - .byte 0x33, 0x2b, 0x1e - .byte 0x0f, 0x08, 0x31 - .byte 0x3a, 0x09, 0x13 - .byte 0x0c, 0x21, 0x1c - .byte 0x2a, 0x17, 0x34 - .byte 0x29, 0x27, 0x10 - .byte 0x37, 0x1b, 0x18 - .byte 0x15, 0x08, 0x2f - .byte 0x1f, 0x16, 0x12 - .byte 0x1f, 0x28, 0x34 - .byte 0x1c, 0x20, 0x22 - .byte 0x12, 0x01, 0x12 - .byte 0x21, 0x31, 0x10 - .byte 0x22, 0x26, 0x1e - .byte 0x01, 0x3d, 0x11 - .byte 0x1e, 0x27, 0x25 - .byte 0x3d, 0x30, 0x24 - .byte 0x1d, 0x11, 0x22 - .byte 0x36, 0x30, 0x16 - .byte 0x1f, 0x3e, 0x2a - .byte 0x3c, 0x27, 0x1b - .byte 0x1f, 0x29, 0x10 - .byte 0x1e, 0x05, 0x2a - .byte 0x0a, 0x10, 0x14 - .byte 0x1f, 0x00, 0x2e - .byte 0x0b, 0x3b, 0x18 - .byte 0x0a, 0x39, 0x30 - .byte 0x37, 0x0b, 0x1f - .byte 0x1d, 0x0a, 0x29 - .byte 0x3e, 0x1c, 0x33 - .byte 0x13, 0x2e, 0x28 - .byte 0x27, 0x1b, 0x1e - .byte 0x1d, 0x02, 0x1c - .byte 0x01, 0x25, 0x14 - .byte 0x3a, 0x10, 0x1c - .byte 0x12, 0x05, 0x2a - .byte 0x30, 0x20, 0x26 - .byte 0x2f, 0x2e, 0x2e - .byte 0x03, 0x07, 0x24 - .byte 0x36, 0x04, 0x2b - .byte 0x11, 0x25, 0x2d - .byte 0x28, 0x0e, 0x2e - .byte 0x0f, 0x1d, 0x15 - .byte 0x1c, 0x28, 0x30 - .byte 0x1f, 0x23, 0x26 - .byte 0x36, 0x12, 0x37 - .byte 0x3a, 0x31, 0x10 - .byte 0x2c, 0x2c, 0x2f - .byte 0x1a, 0x0d, 0x15 - .byte 0x3f, 0x3c, 0x32 - .byte 0x35, 0x1c, 0x16 - .byte 0x33, 0x16, 0x28 - .byte 0x1d, 0x3f, 0x21 - .byte 0x2c, 0x3e, 0x2b - .byte 0x24, 0x23, 0x2f - .byte 0x32, 0x15, 0x2a - .byte 0x1b, 0x10, 0x35 - .byte 0x18, 0x37, 0x10 - .byte 0x3b, 0x1e, 0x11 - .byte 0x2b, 0x16, 0x24 - .byte 0x1d, 0x16, 0x26 - .byte 0x3c, 0x2d, 0x11 - .byte 0x15, 0x28, 0x28 - .byte 0x27, 0x27, 0x27 - .byte 0x3b, 0x3a, 0x16 - .byte 0x1a, 0x0c, 0x1a - .byte 0x15, 0x08, 0x25 - .byte 0x0b, 0x10, 0x22 - .byte 0x1a, 0x3e, 0x17 - .byte 0x28, 0x1f, 0x1e - .byte 0x01, 0x1e, 0x1e - .byte 0x1c, 0x2f, 0x10 - .byte 0x25, 0x0b, 0x34 - .byte 0x3e, 0x0c, 0x1a - .byte 0x1b, 0x10, 0x2a - .byte 0x0f, 0x14, 0x17 - .byte 0x0f, 0x3f, 0x17 - .byte 0x03, 0x15, 0x1f - .byte 0x02, 0x36, 0x17 - .byte 0x15, 0x1d, 0x18 - .byte 0x08, 0x36, 0x10 - .byte 0x14, 0x0d, 0x2b - .byte 0x0a, 0x05, 0x1d - .byte 0x26, 0x12, 0x1e - .byte 0x3e, 0x18, 0x19 - .byte 0x36, 0x18, 0x37 - .byte 0x17, 0x39, 0x2e - .byte 0x0d, 0x04, 0x19 - .byte 0x16, 0x22, 0x15 - .byte 0x3e, 0x26, 0x1f - .byte 0x00, 0x06, 0x17 - .byte 0x33, 0x22, 0x1d - .byte 0x2b, 0x39, 0x2b - .byte 0x3e, 0x31, 0x1c - .byte 0x22, 0x3f, 0x13 - .byte 0x30, 0x1c, 0x31 - .byte 0x07, 0x2b, 0x14 - .byte 0x32, 0x35, 0x1e - .byte 0x02, 0x07, 0x20 - .byte 0x0f, 0x3b, 0x11 - .byte 0x20, 0x07, 0x12 - .byte 0x2a, 0x30, 0x1d - .byte 0x28, 0x38, 0x36 - .byte 0x20, 0x01, 0x17 - .byte 0x15, 0x20, 0x21 - .byte 0x3a, 0x1b, 0x1e - .byte 0x38, 0x12, 0x24 - .byte 0x03, 0x3e, 0x1f - .byte 0x29, 0x1d, 0x13 - .byte 0x20, 0x27, 0x19 - .byte 0x12, 0x25, 0x20 - .byte 0x32, 0x33, 0x2b - .byte 0x3f, 0x05, 0x31 - .byte 0x35, 0x3c, 0x2d - .byte 0x2d, 0x02, 0x2e - .byte 0x10, 0x2a, 0x16 - .byte 0x17, 0x08, 0x31 - .byte 0x17, 0x2e, 0x2b - .byte 0x30, 0x1e, 0x15 - .byte 0x31, 0x15, 0x26 - .byte 0x08, 0x10, 0x33 - .byte 0x15, 0x01, 0x27 - .byte 0x12, 0x07, 0x2f - .byte 0x29, 0x27, 0x34 - .byte 0x3f, 0x08, 0x31 - .byte 0x1c, 0x20, 0x1a - .byte 0x33, 0x0c, 0x13 - .byte 0x18, 0x31, 0x24 - .byte 0x37, 0x2d, 0x2e - .byte 0x21, 0x18, 0x24 - .byte 0x3a, 0x27, 0x31 - .byte 0x35, 0x3e, 0x30 - .byte 0x3a, 0x14, 0x33 - .byte 0x0f, 0x1a, 0x2d - .byte 0x30, 0x2e, 0x11 - .byte 0x1a, 0x31, 0x1d - .byte 0x17, 0x3c, 0x18 - .byte 0x33, 0x31, 0x23 - .byte 0x1d, 0x39, 0x2d - .byte 0x10, 0x1d, 0x2f - .byte 0x24, 0x15, 0x1c - .byte 0x25, 0x01, 0x2b - .byte 0x22, 0x16, 0x2e - .byte 0x1b, 0x25, 0x35 - .byte 0x37, 0x10, 0x26 - .byte 0x39, 0x01, 0x36 - .byte 0x17, 0x2b, 0x14 - .byte 0x09, 0x16, 0x17 - .byte 0x20, 0x28, 0x23 - .byte 0x26, 0x3a, 0x26 - .byte 0x27, 0x2a, 0x24 - .byte 0x36, 0x02, 0x2c - .byte 0x29, 0x30, 0x35 - .byte 0x36, 0x01, 0x1f - .byte 0x28, 0x3b, 0x1d - .byte 0x23, 0x1e, 0x2d - .byte 0x11, 0x1e, 0x2c - .byte 0x2f, 0x32, 0x19 - .byte 0x3f, 0x26, 0x31 - .byte 0x38, 0x1e, 0x17 - .byte 0x05, 0x18, 0x2e - .byte 0x00, 0x2e, 0x12 - .byte 0x34, 0x3f, 0x34 - .byte 0x16, 0x10, 0x29 - .byte 0x20, 0x3d, 0x36 - .byte 0x2f, 0x16, 0x25 - .byte 0x12, 0x17, 0x10 - .byte 0x21, 0x37, 0x35 - .byte 0x25, 0x37, 0x2d - .byte 0x01, 0x08, 0x27 - .byte 0x03, 0x1f, 0x29 - .byte 0x0d, 0x2a, 0x16 - .byte 0x3a, 0x3f, 0x33 - .byte 0x2b, 0x19, 0x1d - .byte 0x2a, 0x1f, 0x29 - .byte 0x28, 0x2c, 0x10 - .byte 0x28, 0x30, 0x10 - .byte 0x39, 0x14, 0x1b - .byte 0x00, 0x18, 0x21 - .byte 0x28, 0x0c, 0x37 - .byte 0x11, 0x10, 0x11 - .byte 0x3c, 0x33, 0x32 - .byte 0x33, 0x36, 0x1a - .byte 0x36, 0x00, 0x1c - .byte 0x31, 0x1b, 0x1d - .byte 0x38, 0x1d, 0x10 - .byte 0x3c, 0x39, 0x27 - .byte 0x3a, 0x3f, 0x14 - .byte 0x19, 0x12, 0x14 - .byte 0x0d, 0x1f, 0x18 - .byte 0x00, 0x25, 0x18 - .byte 0x28, 0x1c, 0x32 - .byte 0x27, 0x03, 0x1a - .byte 0x26, 0x2d, 0x2a - .byte 0x29, 0x28, 0x27 - .byte 0x0a, 0x2a, 0x18 - .byte 0x0a, 0x1a, 0x30 - .byte 0x20, 0x1a, 0x2e - .byte 0x06, 0x0b, 0x1d - .byte 0x0f, 0x0c, 0x1c - .byte 0x35, 0x28, 0x1c - .byte 0x3d, 0x16, 0x23 - .byte 0x21, 0x1c, 0x31 - .byte 0x14, 0x1c, 0x2e - .byte 0x22, 0x32, 0x35 - .byte 0x09, 0x29, 0x30 - .byte 0x20, 0x1a, 0x10 - .byte 0x31, 0x3f, 0x2c - .byte 0x0a, 0x3d, 0x37 - .byte 0x0b, 0x2e, 0x2d - .byte 0x1f, 0x22, 0x31 - .byte 0x06, 0x07, 0x29 - .byte 0x22, 0x17, 0x2d - .byte 0x30, 0x11, 0x18 - .byte 0x0c, 0x19, 0x15 - .byte 0x07, 0x0a, 0x34 - .byte 0x18, 0x29, 0x27 - .byte 0x33, 0x0c, 0x30 - .byte 0x03, 0x1a, 0x37 - .byte 0x06, 0x01, 0x2d - .byte 0x0f, 0x3b, 0x2b - .byte 0x11, 0x1f, 0x37 - .byte 0x2b, 0x21, 0x36 - .byte 0x3f, 0x23, 0x17 - .byte 0x17, 0x07, 0x2b - .byte 0x2b, 0x0e, 0x30 - .byte 0x11, 0x39, 0x1d - .byte 0x29, 0x03, 0x33 - .byte 0x30, 0x03, 0x2f - .byte 0x3c, 0x20, 0x26 - .byte 0x03, 0x22, 0x14 - .byte 0x3a, 0x28, 0x35 - .byte 0x01, 0x28, 0x2b - .byte 0x3e, 0x15, 0x18 - .byte 0x30, 0x07, 0x17 - .byte 0x3b, 0x2c, 0x30 - .byte 0x15, 0x07, 0x2c - .byte 0x17, 0x27, 0x1d - .byte 0x3f, 0x1e, 0x33 - .byte 0x0d, 0x17, 0x10 - .byte 0x15, 0x0e, 0x30 - .byte 0x09, 0x05, 0x30 - .byte 0x2d, 0x20, 0x15 - .byte 0x3c, 0x3d, 0x30 - .byte 0x0c, 0x17, 0x1c - .byte 0x1a, 0x0d, 0x25 - .byte 0x2b, 0x2b, 0x2a - .byte 0x02, 0x16, 0x2d - .byte 0x17, 0x31, 0x17 - .byte 0x00, 0x08, 0x13 - .byte 0x37, 0x35, 0x21 - .byte 0x1e, 0x1c, 0x1f - .byte 0x2b, 0x32, 0x1c - .byte 0x10, 0x2a, 0x16 - .byte 0x3a, 0x33, 0x31 - .byte 0x17, 0x2b, 0x2a - .byte 0x0c, 0x3d, 0x11 - .byte 0x28, 0x0a, 0x30 - .byte 0x23, 0x0a, 0x26 - .byte 0x0a, 0x14, 0x24 - .byte 0x0b, 0x0f, 0x30 - .byte 0x1b, 0x1e, 0x29 - .byte 0x02, 0x35, 0x28 - .byte 0x3b, 0x02, 0x14 - .byte 0x00, 0x0f, 0x35 - .byte 0x1c, 0x3c, 0x2e - .byte 0x28, 0x38, 0x19 - .byte 0x1b, 0x11, 0x12 - .byte 0x09, 0x16, 0x10 - .byte 0x2e, 0x0d, 0x20 - .byte 0x3d, 0x04, 0x32 - .byte 0x16, 0x2c, 0x25 - .byte 0x02, 0x3d, 0x18 - .byte 0x0b, 0x13, 0x1c - .byte 0x22, 0x2a, 0x1c - .byte 0x20, 0x27, 0x22 - .byte 0x05, 0x26, 0x22 - .byte 0x12, 0x1d, 0x2c - .byte 0x08, 0x05, 0x2e - .byte 0x3f, 0x1c, 0x17 - .byte 0x24, 0x0d, 0x33 - .byte 0x36, 0x08, 0x24 - .byte 0x10, 0x22, 0x29 - .byte 0x1c, 0x0a, 0x11 - .byte 0x25, 0x0f, 0x10 - .byte 0x24, 0x38, 0x2f - .byte 0x25, 0x32, 0x1e - .byte 0x06, 0x2a, 0x29 - .byte 0x3e, 0x3a, 0x28 - .byte 0x34, 0x17, 0x33 - .byte 0x18, 0x33, 0x17 - .byte 0x07, 0x14, 0x1f - .byte 0x11, 0x17, 0x20 - .byte 0x13, 0x0e, 0x14 - .byte 0x3b, 0x1c, 0x12 - .byte 0x2a, 0x13, 0x37 - .byte 0x2a, 0x35, 0x32 - .byte 0x30, 0x02, 0x25 - .byte 0x00, 0x07, 0x1f - .byte 0x0c, 0x04, 0x2c - .byte 0x37, 0x37, 0x30 - .byte 0x25, 0x12, 0x25 - .byte 0x12, 0x22, 0x21 - .byte 0x22, 0x35, 0x33 - .byte 0x07, 0x20, 0x2d - .byte 0x27, 0x0e, 0x30 - .byte 0x34, 0x19, 0x1a - .byte 0x0a, 0x3c, 0x25 - .byte 0x07, 0x1d, 0x2b - .byte 0x31, 0x3a, 0x12 - .byte 0x1a, 0x3d, 0x37 - .byte 0x16, 0x15, 0x16 - .byte 0x39, 0x13, 0x15 - .byte 0x2d, 0x03, 0x2e - .byte 0x06, 0x39, 0x2c - .byte 0x16, 0x00, 0x13 - .byte 0x35, 0x2a, 0x35 - .byte 0x24, 0x01, 0x18 - .byte 0x24, 0x37, 0x28 - .byte 0x25, 0x1b, 0x34 - .byte 0x25, 0x19, 0x17 - .byte 0x27, 0x2f, 0x1b - .byte 0x27, 0x0d, 0x10 - .byte 0x36, 0x3c, 0x30 - .byte 0x3c, 0x33, 0x23 - .byte 0x3e, 0x27, 0x1e - .byte 0x25, 0x2d, 0x29 - .byte 0x1f, 0x12, 0x21 - .byte 0x37, 0x32, 0x1f - .byte 0x11, 0x21, 0x35 - .byte 0x30, 0x0c, 0x19 - .byte 0x25, 0x3d, 0x26 - .byte 0x17, 0x02, 0x1d - .byte 0x14, 0x2e, 0x11 - .byte 0x38, 0x13, 0x30 - .byte 0x0a, 0x2b, 0x20 - .byte 0x1e, 0x10, 0x15 - .byte 0x37, 0x30, 0x2e - .byte 0x1e, 0x04, 0x2c - .byte 0x14, 0x34, 0x19 - .byte 0x08, 0x14, 0x18 - .byte 0x0e, 0x1c, 0x30 - .byte 0x1a, 0x2e, 0x1b - .byte 0x1f, 0x39, 0x31 - .byte 0x0c, 0x1c, 0x28 - .byte 0x3e, 0x33, 0x23 - .byte 0x0f, 0x13, 0x16 - .byte 0x25, 0x39, 0x2f - .byte 0x14, 0x1b, 0x1a - .byte 0x28, 0x3e, 0x21 - .byte 0x2d, 0x19, 0x11 - .byte 0x0c, 0x34, 0x32 - .byte 0x39, 0x31, 0x19 - .byte 0x1a, 0x08, 0x34 - .byte 0x09, 0x2f, 0x11 - .byte 0x30, 0x04, 0x1c - .byte 0x02, 0x3b, 0x1b - .byte 0x33, 0x21, 0x33 - .byte 0x38, 0x02, 0x1a - .byte 0x31, 0x38, 0x32 - .byte 0x1f, 0x1d, 0x16 - .byte 0x17, 0x10, 0x1b - .byte 0x32, 0x20, 0x17 - .byte 0x00, 0x33, 0x12 - .byte 0x21, 0x0f, 0x27 - .byte 0x14, 0x19, 0x27 - .byte 0x24, 0x2c, 0x37 - .byte 0x25, 0x05, 0x2f - .byte 0x3d, 0x25, 0x11 - .byte 0x12, 0x30, 0x1a - .byte 0x16, 0x03, 0x1a - .byte 0x14, 0x09, 0x13 - .byte 0x02, 0x23, 0x22 - .byte 0x01, 0x3c, 0x10 - .byte 0x3f, 0x2d, 0x23 - .byte 0x31, 0x3f, 0x23 - .byte 0x17, 0x00, 0x33 - .byte 0x3f, 0x0f, 0x2f - .byte 0x26, 0x07, 0x15 - .byte 0x21, 0x2b, 0x2a - .byte 0x38, 0x39, 0x1e - .byte 0x09, 0x25, 0x2b - .byte 0x3b, 0x30, 0x25 - .byte 0x12, 0x2d, 0x13 - .byte 0x32, 0x19, 0x28 - .byte 0x24, 0x1c, 0x2d - .byte 0x35, 0x32, 0x26 - .byte 0x0d, 0x23, 0x1e - .byte 0x1d, 0x07, 0x21 - .byte 0x0b, 0x34, 0x17 - .byte 0x2d, 0x32, 0x32 - .byte 0x3a, 0x3c, 0x35 - .byte 0x1a, 0x10, 0x33 - .byte 0x1a, 0x07, 0x22 - .byte 0x3b, 0x1b, 0x2a - .byte 0x33, 0x1f, 0x26 - .byte 0x0e, 0x35, 0x1a - .byte 0x3b, 0x0a, 0x1c - .byte 0x11, 0x07, 0x11 - .byte 0x0d, 0x3c, 0x2d - .byte 0x1e, 0x37, 0x29 - .byte 0x11, 0x05, 0x12 - .byte 0x15, 0x2f, 0x1c - .byte 0x24, 0x31, 0x16 - .byte 0x2b, 0x21, 0x1b - .byte 0x23, 0x10, 0x31 - .byte 0x02, 0x14, 0x29 - .byte 0x26, 0x20, 0x16 - .byte 0x10, 0x17, 0x10 - .byte 0x0b, 0x0f, 0x33 - .byte 0x01, 0x2e, 0x14 - .byte 0x21, 0x0e, 0x37 - .byte 0x1a, 0x1d, 0x2f - .byte 0x1e, 0x30, 0x24 - .byte 0x04, 0x14, 0x2d - .byte 0x11, 0x00, 0x30 - .byte 0x08, 0x2a, 0x1d - .byte 0x1d, 0x22, 0x21 - .byte 0x24, 0x2c, 0x37 - .byte 0x24, 0x11, 0x12 - .byte 0x04, 0x2e, 0x28 - .byte 0x1d, 0x18, 0x23 - .byte 0x3c, 0x16, 0x16 - .byte 0x10, 0x17, 0x31 - .byte 0x20, 0x21, 0x12 - .byte 0x33, 0x3e, 0x34 - .byte 0x06, 0x13, 0x13 - .byte 0x17, 0x38, 0x2b - .byte 0x14, 0x0d, 0x15 - .byte 0x24, 0x3b, 0x2b - .byte 0x34, 0x3b, 0x1e - .byte 0x18, 0x07, 0x34 - .byte 0x37, 0x1d, 0x1f - .byte 0x0b, 0x29, 0x20 - .byte 0x12, 0x1e, 0x1d - .byte 0x1a, 0x24, 0x24 - .byte 0x3d, 0x28, 0x24 - .byte 0x0b, 0x12, 0x33 - .byte 0x1b, 0x3a, 0x22 - .byte 0x14, 0x13, 0x2a - .byte 0x31, 0x38, 0x15 - .byte 0x37, 0x2b, 0x2e - .byte 0x19, 0x1e, 0x2c - .byte 0x3f, 0x1b, 0x2a - .byte 0x33, 0x1f, 0x33 - .byte 0x3f, 0x15, 0x29 - .byte 0x01, 0x1e, 0x18 - .byte 0x1f, 0x22, 0x19 - .byte 0x33, 0x3c, 0x34 - .byte 0x1e, 0x12, 0x22 - .byte 0x0d, 0x37, 0x2c - .byte 0x0f, 0x08, 0x31 - .byte 0x2e, 0x09, 0x36 - .byte 0x01, 0x05, 0x1e - .byte 0x1c, 0x04, 0x1e - .byte 0x0c, 0x01, 0x1c - .byte 0x29, 0x28, 0x2f - .byte 0x39, 0x2d, 0x14 - .byte 0x09, 0x22, 0x36 - .byte 0x04, 0x37, 0x37 - .byte 0x2d, 0x2f, 0x35 - .byte 0x24, 0x23, 0x1b - .byte 0x08, 0x20, 0x32 - .byte 0x20, 0x1f, 0x34 - .byte 0x02, 0x31, 0x19 - .byte 0x18, 0x13, 0x36 - .byte 0x06, 0x2b, 0x1e - .byte 0x0e, 0x1b, 0x10 - .byte 0x2f, 0x0e, 0x1c - .byte 0x11, 0x38, 0x13 - .byte 0x01, 0x37, 0x19 - .byte 0x14, 0x11, 0x26 - .byte 0x31, 0x3d, 0x33 - .byte 0x1d, 0x1b, 0x34 - .byte 0x25, 0x31, 0x2f - .byte 0x11, 0x0a, 0x2f - .byte 0x39, 0x17, 0x1b - .byte 0x05, 0x0e, 0x13 - .byte 0x29, 0x25, 0x22 - .byte 0x15, 0x0d, 0x20 - .byte 0x2b, 0x27, 0x21 - .byte 0x3e, 0x24, 0x27 - .byte 0x2a, 0x2b, 0x16 - .byte 0x24, 0x3d, 0x15 - .byte 0x15, 0x30, 0x31 - .byte 0x0f, 0x33, 0x24 - .byte 0x06, 0x16, 0x13 - .byte 0x06, 0x31, 0x10 - .byte 0x2e, 0x3f, 0x10 - .byte 0x05, 0x0d, 0x2f - .byte 0x3c, 0x1f, 0x19 - .byte 0x12, 0x13, 0x24 - .byte 0x0f, 0x33, 0x36 - .byte 0x15, 0x3b, 0x33 - .byte 0x03, 0x0f, 0x2a - .byte 0x3b, 0x3c, 0x2c - .byte 0x36, 0x09, 0x29 - .byte 0x11, 0x3b, 0x27 - .byte 0x28, 0x2b, 0x31 - .byte 0x1a, 0x0e, 0x2f - .byte 0x39, 0x2c, 0x31 - .byte 0x0e, 0x3c, 0x35 - .byte 0x2c, 0x24, 0x33 - .byte 0x3d, 0x11, 0x2b - .byte 0x07, 0x3c, 0x37 - .byte 0x14, 0x18, 0x13 - .byte 0x1d, 0x3f, 0x2e - .byte 0x30, 0x12, 0x25 - .byte 0x26, 0x1d, 0x11 - .byte 0x07, 0x11, 0x1e - .byte 0x34, 0x01, 0x11 - .byte 0x0b, 0x39, 0x21 - .byte 0x29, 0x02, 0x29 - .byte 0x15, 0x10, 0x1a - .byte 0x30, 0x1f, 0x35 - .byte 0x3c, 0x2b, 0x2a - .byte 0x30, 0x3b, 0x36 - .byte 0x20, 0x1a, 0x23 - .byte 0x32, 0x24, 0x2b - .byte 0x15, 0x20, 0x1c - .byte 0x25, 0x3d, 0x36 - .byte 0x2d, 0x14, 0x31 - .byte 0x18, 0x23, 0x17 - .byte 0x18, 0x05, 0x13 - .byte 0x34, 0x30, 0x37 - .byte 0x0e, 0x39, 0x23 - .byte 0x1d, 0x1f, 0x17 - .byte 0x01, 0x15, 0x2f - .byte 0x0b, 0x3e, 0x1b - .byte 0x0d, 0x19, 0x2e - .byte 0x31, 0x38, 0x1c - .byte 0x15, 0x34, 0x15 - .byte 0x13, 0x19, 0x29 - .byte 0x19, 0x14, 0x27 - .byte 0x15, 0x18, 0x23 - .byte 0x29, 0x0c, 0x27 - .byte 0x2d, 0x0e, 0x17 - .byte 0x34, 0x18, 0x10 - .byte 0x3b, 0x1e, 0x29 - .byte 0x34, 0x2c, 0x22 - .byte 0x31, 0x08, 0x13 - .byte 0x1d, 0x18, 0x1a - .byte 0x1c, 0x0b, 0x2a - .byte 0x19, 0x1e, 0x1a - .byte 0x23, 0x27, 0x17 - .byte 0x3b, 0x0e, 0x37 - .byte 0x19, 0x2b, 0x16 - .byte 0x2f, 0x08, 0x21 - .byte 0x37, 0x02, 0x20 - .byte 0x0b, 0x32, 0x30 - .byte 0x16, 0x05, 0x30 - .byte 0x13, 0x05, 0x1a - .byte 0x07, 0x39, 0x19 - .byte 0x0c, 0x3b, 0x2a - .byte 0x15, 0x05, 0x30 - .byte 0x30, 0x05, 0x19 - .byte 0x13, 0x00, 0x12 - .byte 0x27, 0x16, 0x2a - .byte 0x0f, 0x28, 0x27 - .byte 0x0c, 0x23, 0x2f - .byte 0x39, 0x28, 0x2a - .byte 0x24, 0x25, 0x1f - .byte 0x18, 0x29, 0x14 - .byte 0x16, 0x05, 0x1a - .byte 0x35, 0x2f, 0x26 - .byte 0x0a, 0x3a, 0x29 - .byte 0x34, 0x2c, 0x36 - .byte 0x2e, 0x3a, 0x15 - .byte 0x1a, 0x0a, 0x2d - .byte 0x16, 0x14, 0x2e - .byte 0x35, 0x28, 0x2a - .byte 0x35, 0x0f, 0x11 - .byte 0x11, 0x32, 0x19 - .byte 0x20, 0x1a, 0x28 - .byte 0x17, 0x1a, 0x28 - .byte 0x16, 0x33, 0x25 - .byte 0x13, 0x2c, 0x29 - .byte 0x09, 0x16, 0x33 - .byte 0x1d, 0x27, 0x26 - .byte 0x15, 0x0c, 0x2f - .byte 0x22, 0x1c, 0x19 - .byte 0x29, 0x33, 0x10 - .byte 0x2d, 0x11, 0x1b - .byte 0x16, 0x19, 0x2e - .byte 0x0d, 0x0c, 0x28 - .byte 0x37, 0x3a, 0x34 - .byte 0x2a, 0x1d, 0x37 - .byte 0x30, 0x0a, 0x36 - .byte 0x24, 0x39, 0x1b - .byte 0x39, 0x0a, 0x32 - .byte 0x11, 0x03, 0x2d - .byte 0x32, 0x1d, 0x30 - .byte 0x38, 0x1e, 0x27 - .byte 0x2e, 0x17, 0x18 - .byte 0x16, 0x17, 0x2a - .byte 0x36, 0x3b, 0x31 - .byte 0x17, 0x04, 0x19 - .byte 0x3a, 0x25, 0x2d - .byte 0x00, 0x36, 0x27 - .byte 0x25, 0x12, 0x33 - .byte 0x06, 0x0a, 0x14 - .byte 0x11, 0x05, 0x2f - .byte 0x03, 0x35, 0x2f - .byte 0x0b, 0x34, 0x29 - .byte 0x00, 0x31, 0x13 - .byte 0x27, 0x0f, 0x1c - .byte 0x1d, 0x06, 0x2d - .byte 0x1c, 0x30, 0x27 - .byte 0x2f, 0x2a, 0x27 - .byte 0x16, 0x20, 0x31 - .byte 0x33, 0x2b, 0x2b - .byte 0x05, 0x30, 0x36 - .byte 0x29, 0x23, 0x35 - .byte 0x10, 0x16, 0x2f - .byte 0x2d, 0x20, 0x29 - .byte 0x37, 0x13, 0x24 - .byte 0x2d, 0x0e, 0x25 - .byte 0x08, 0x0a, 0x18 - .byte 0x0f, 0x03, 0x1b - .byte 0x31, 0x0c, 0x37 - .byte 0x1e, 0x34, 0x31 - .byte 0x1b, 0x0e, 0x25 - .byte 0x1a, 0x07, 0x34 - .byte 0x0d, 0x3c, 0x33 - .byte 0x00, 0x3a, 0x36 - .byte 0x04, 0x27, 0x12 - .byte 0x23, 0x18, 0x24 - .byte 0x0d, 0x0b, 0x18 - .byte 0x31, 0x32, 0x37 - .byte 0x00, 0x0d, 0x21 - .byte 0x32, 0x10, 0x12 - .byte 0x26, 0x0d, 0x19 - .byte 0x29, 0x24, 0x2b - .byte 0x3d, 0x21, 0x1f - .byte 0x1e, 0x1b, 0x28 - .byte 0x0d, 0x12, 0x28 - .byte 0x35, 0x1e, 0x23 - .byte 0x0a, 0x2e, 0x22 - .byte 0x27, 0x27, 0x35 - .byte 0x01, 0x0e, 0x20 - .byte 0x31, 0x39, 0x29 - .byte 0x3b, 0x24, 0x36 - .byte 0x14, 0x10, 0x33 - .byte 0x18, 0x2c, 0x26 - .byte 0x04, 0x2d, 0x15 - .byte 0x1a, 0x11, 0x37 - .byte 0x0f, 0x0b, 0x14 - .byte 0x0e, 0x2c, 0x2c - .byte 0x21, 0x17, 0x2c - .byte 0x16, 0x21, 0x35 - .byte 0x3e, 0x10, 0x10 - .byte 0x0a, 0x05, 0x1e - .byte 0x3b, 0x09, 0x13 - .byte 0x26, 0x18, 0x1e - .byte 0x23, 0x0c, 0x1a - .byte 0x33, 0x37, 0x1f - .byte 0x09, 0x12, 0x35 - .byte 0x3d, 0x0d, 0x15 - .byte 0x36, 0x06, 0x24 - .byte 0x33, 0x30, 0x29 - .byte 0x3b, 0x0f, 0x28 - .byte 0x34, 0x2a, 0x2c - .byte 0x02, 0x12, 0x35 - .byte 0x09, 0x22, 0x31 - .byte 0x3b, 0x31, 0x1c - .byte 0x33, 0x22, 0x27 - .byte 0x3d, 0x34, 0x15 - .byte 0x14, 0x22, 0x28 - .byte 0x28, 0x10, 0x1e - .byte 0x21, 0x31, 0x10 - .byte 0x2d, 0x16, 0x21 - .byte 0x1e, 0x05, 0x33 - .byte 0x0f, 0x30, 0x31 - .byte 0x0e, 0x1a, 0x35 - .byte 0x38, 0x2e, 0x28 - .byte 0x26, 0x37, 0x1e - .byte 0x2b, 0x13, 0x33 - .byte 0x1f, 0x1e, 0x37 - .byte 0x0a, 0x28, 0x24 - .byte 0x32, 0x1c, 0x1a - .byte 0x1f, 0x3f, 0x19 - .byte 0x39, 0x39, 0x29 - .byte 0x2c, 0x1b, 0x14 - .byte 0x15, 0x2a, 0x17 - .byte 0x32, 0x0f, 0x21 - .byte 0x30, 0x21, 0x18 - .byte 0x23, 0x2a, 0x27 - .byte 0x3d, 0x07, 0x10 - .byte 0x0b, 0x3f, 0x2f - .byte 0x31, 0x02, 0x2e - .byte 0x08, 0x39, 0x2f - .byte 0x3f, 0x20, 0x18 - .byte 0x2d, 0x34, 0x11 - .byte 0x2e, 0x34, 0x10 - .byte 0x26, 0x12, 0x23 - .byte 0x25, 0x0a, 0x37 - .byte 0x34, 0x09, 0x25 - .byte 0x0a, 0x3e, 0x16 - .byte 0x1a, 0x17, 0x11 - .byte 0x38, 0x1c, 0x20 - .byte 0x11, 0x21, 0x26 - .byte 0x05, 0x0f, 0x18 - .byte 0x26, 0x2b, 0x32 - .byte 0x0a, 0x0c, 0x16 - .byte 0x03, 0x29, 0x1d - .byte 0x29, 0x3b, 0x23 - .byte 0x16, 0x1b, 0x29 - .byte 0x07, 0x09, 0x17 - .byte 0x17, 0x2c, 0x1c - .byte 0x35, 0x33, 0x30 - .byte 0x17, 0x12, 0x1e - .byte 0x3d, 0x1a, 0x2b - .byte 0x21, 0x1d, 0x10 - .byte 0x0a, 0x08, 0x17 - .byte 0x14, 0x3c, 0x36 - .byte 0x28, 0x36, 0x36 - .byte 0x3b, 0x20, 0x1b - .byte 0x13, 0x22, 0x1d - .byte 0x13, 0x3a, 0x15 - .byte 0x02, 0x23, 0x2c - .byte 0x3e, 0x19, 0x14 - .byte 0x39, 0x3c, 0x1a - .byte 0x10, 0x08, 0x1e - .byte 0x0a, 0x13, 0x29 - .byte 0x3f, 0x38, 0x2c - .byte 0x07, 0x23, 0x1f - .byte 0x19, 0x2a, 0x24 - .byte 0x14, 0x3c, 0x1f - .byte 0x0d, 0x04, 0x37 - .byte 0x1a, 0x2f, 0x28 - .byte 0x2a, 0x1d, 0x1e - .byte 0x11, 0x37, 0x29 - .byte 0x28, 0x27, 0x12 - .byte 0x0d, 0x00, 0x26 - .byte 0x0a, 0x3c, 0x26 - .byte 0x1f, 0x1c, 0x33 - .byte 0x04, 0x3a, 0x2c - .byte 0x24, 0x3d, 0x2b - .byte 0x26, 0x31, 0x2f - .byte 0x13, 0x1c, 0x21 - .byte 0x3e, 0x12, 0x23 - .byte 0x36, 0x0a, 0x1a - .byte 0x2d, 0x1e, 0x19 - .byte 0x05, 0x1f, 0x1b - .byte 0x1e, 0x0a, 0x1f - .byte 0x20, 0x08, 0x24 - .byte 0x2c, 0x0c, 0x33 - .byte 0x1d, 0x1f, 0x11 - .byte 0x0e, 0x12, 0x10 - .byte 0x27, 0x12, 0x19 - .byte 0x2a, 0x13, 0x31 - .byte 0x1c, 0x04, 0x30 - .byte 0x1a, 0x38, 0x1f - .byte 0x2c, 0x35, 0x25 - .byte 0x07, 0x0b, 0x33 - .byte 0x2d, 0x02, 0x1a - .byte 0x2a, 0x35, 0x35 - .byte 0x16, 0x2f, 0x14 - .byte 0x11, 0x31, 0x33 - .byte 0x2c, 0x31, 0x1e - .byte 0x3c, 0x3a, 0x27 - .byte 0x3c, 0x2b, 0x12 - .byte 0x27, 0x1d, 0x12 - .byte 0x36, 0x2c, 0x2b - .byte 0x25, 0x3b, 0x35 - .byte 0x12, 0x3d, 0x27 - .byte 0x13, 0x23, 0x19 - .byte 0x33, 0x2c, 0x26 - .byte 0x09, 0x3c, 0x12 - .byte 0x15, 0x1a, 0x23 - .byte 0x21, 0x07, 0x1a - .byte 0x22, 0x25, 0x20 - .byte 0x19, 0x1b, 0x2c - .byte 0x3a, 0x19, 0x35 - .byte 0x05, 0x26, 0x1d - .byte 0x23, 0x22, 0x25 - .byte 0x0e, 0x1e, 0x11 - .byte 0x13, 0x30, 0x12 - .byte 0x2c, 0x22, 0x25 - .byte 0x0a, 0x1d, 0x18 - .byte 0x23, 0x3e, 0x1d - .byte 0x02, 0x28, 0x25 - .byte 0x21, 0x0e, 0x20 - .byte 0x21, 0x22, 0x37 - .byte 0x18, 0x33, 0x27 - .byte 0x23, 0x23, 0x31 - .byte 0x24, 0x1a, 0x1a - .byte 0x3e, 0x25, 0x24 - .byte 0x24, 0x01, 0x18 - .byte 0x34, 0x10, 0x22 - .byte 0x07, 0x00, 0x37 - .byte 0x06, 0x20, 0x20 - .byte 0x3a, 0x02, 0x2b - .byte 0x07, 0x2c, 0x2c - .byte 0x09, 0x2f, 0x2a - .byte 0x01, 0x32, 0x2c - .byte 0x00, 0x35, 0x13 - .byte 0x2b, 0x3c, 0x1f - .byte 0x36, 0x37, 0x1e - .byte 0x20, 0x35, 0x1d - .byte 0x0c, 0x07, 0x33 - .byte 0x16, 0x08, 0x12 - .byte 0x3f, 0x36, 0x11 - .byte 0x0b, 0x1f, 0x2d - .byte 0x21, 0x20, 0x33 - .byte 0x17, 0x1a, 0x2e - .byte 0x16, 0x01, 0x2f - .byte 0x2f, 0x1c, 0x34 - .byte 0x29, 0x31, 0x2e - .byte 0x3b, 0x38, 0x31 - .byte 0x0d, 0x16, 0x12 - .byte 0x07, 0x29, 0x24 - .byte 0x33, 0x3c, 0x34 - .byte 0x3e, 0x1e, 0x18 - .byte 0x30, 0x02, 0x34 - .byte 0x2a, 0x34, 0x1b - .byte 0x2e, 0x23, 0x18 - .byte 0x34, 0x00, 0x1f - .byte 0x20, 0x0e, 0x28 - .byte 0x15, 0x33, 0x37 - .byte 0x27, 0x35, 0x23 - .byte 0x37, 0x3e, 0x11 - .byte 0x32, 0x2e, 0x36 - .byte 0x3a, 0x02, 0x2b - .byte 0x00, 0x36, 0x1d - .byte 0x13, 0x29, 0x16 - .byte 0x08, 0x2b, 0x37 - .byte 0x08, 0x02, 0x27 - .byte 0x32, 0x2d, 0x34 - .byte 0x30, 0x36, 0x29 - .byte 0x2e, 0x10, 0x12 - .byte 0x3c, 0x2e, 0x2a - .byte 0x04, 0x33, 0x30 - .byte 0x3f, 0x01, 0x22 - .byte 0x37, 0x14, 0x1d - .byte 0x27, 0x00, 0x2f - .byte 0x0c, 0x39, 0x26 - .byte 0x27, 0x04, 0x21 - .byte 0x19, 0x08, 0x1d - .byte 0x01, 0x04, 0x1e - .byte 0x27, 0x1b, 0x2b - .byte 0x31, 0x17, 0x1f - .byte 0x07, 0x01, 0x2d - .byte 0x2e, 0x3b, 0x1f - .byte 0x34, 0x24, 0x31 - .byte 0x32, 0x2b, 0x24 - .byte 0x0e, 0x07, 0x1e - .byte 0x0f, 0x33, 0x10 - .byte 0x16, 0x21, 0x32 - .byte 0x39, 0x02, 0x1a - .byte 0x33, 0x3d, 0x22 - .byte 0x0c, 0x25, 0x1a - .byte 0x29, 0x29, 0x28 - .byte 0x3a, 0x32, 0x26 - .byte 0x0b, 0x13, 0x22 - .byte 0x1f, 0x0f, 0x1c - .byte 0x04, 0x2c, 0x20 - .byte 0x39, 0x1a, 0x1b - .byte 0x1a, 0x2a, 0x1f - .byte 0x24, 0x13, 0x1a - .byte 0x31, 0x3b, 0x33 - .byte 0x39, 0x23, 0x28 - .byte 0x31, 0x07, 0x31 - .byte 0x1f, 0x10, 0x20 - .byte 0x29, 0x17, 0x32 - .byte 0x26, 0x3b, 0x2d - .byte 0x02, 0x3c, 0x1c - .byte 0x0e, 0x00, 0x20 - .byte 0x14, 0x3e, 0x37 - .byte 0x01, 0x0f, 0x2d - .byte 0x06, 0x12, 0x27 - .byte 0x30, 0x13, 0x19 - .byte 0x00, 0x33, 0x2a - .byte 0x0c, 0x07, 0x27 - .byte 0x11, 0x3a, 0x1c - .byte 0x15, 0x0a, 0x13 - .byte 0x1f, 0x0d, 0x2a - .byte 0x37, 0x07, 0x2a - .byte 0x34, 0x35, 0x34 - .byte 0x28, 0x16, 0x27 - .byte 0x06, 0x02, 0x36 - .byte 0x09, 0x23, 0x30 - .byte 0x14, 0x02, 0x28 - .byte 0x39, 0x32, 0x34 - .byte 0x24, 0x35, 0x12 - .byte 0x12, 0x22, 0x26 - .byte 0x09, 0x07, 0x33 - .byte 0x0f, 0x3e, 0x1e - .byte 0x00, 0x3c, 0x33 - .byte 0x10, 0x37, 0x14 - .byte 0x3a, 0x03, 0x25 - .byte 0x2d, 0x1e, 0x24 - .byte 0x36, 0x36, 0x26 - .byte 0x1f, 0x3c, 0x1a - .byte 0x37, 0x33, 0x25 - .byte 0x23, 0x13, 0x1f - .byte 0x33, 0x0d, 0x13 - .byte 0x25, 0x30, 0x1e - .byte 0x17, 0x03, 0x18 - .byte 0x18, 0x18, 0x14 - .byte 0x30, 0x07, 0x22 - .byte 0x3e, 0x33, 0x21 - .byte 0x14, 0x37, 0x16 - .byte 0x16, 0x00, 0x12 - .byte 0x2c, 0x12, 0x2f - .byte 0x25, 0x3f, 0x1e - .byte 0x24, 0x19, 0x16 - .byte 0x16, 0x0f, 0x35 - .byte 0x2d, 0x10, 0x11 - .byte 0x24, 0x2a, 0x28 - .byte 0x19, 0x25, 0x2e - .byte 0x0c, 0x16, 0x1f - .byte 0x38, 0x21, 0x36 - .byte 0x3d, 0x1a, 0x2f - .byte 0x3b, 0x32, 0x12 - .byte 0x36, 0x13, 0x29 - .byte 0x0e, 0x30, 0x31 - .byte 0x19, 0x07, 0x2f - .byte 0x25, 0x23, 0x28 - .byte 0x20, 0x08, 0x29 - .byte 0x2a, 0x00, 0x30 - .byte 0x30, 0x38, 0x23 - .byte 0x1e, 0x0f, 0x1f - .byte 0x3b, 0x1b, 0x30 - .byte 0x3a, 0x37, 0x2f - .byte 0x39, 0x37, 0x35 - .byte 0x39, 0x2d, 0x2f - .byte 0x1f, 0x2e, 0x1e - .byte 0x1a, 0x2b, 0x1e - .byte 0x14, 0x17, 0x20 - .byte 0x2f, 0x03, 0x11 - .byte 0x1d, 0x00, 0x30 - .byte 0x17, 0x2b, 0x1d - .byte 0x35, 0x28, 0x25 - .byte 0x3b, 0x0f, 0x11 - .byte 0x09, 0x04, 0x2e - .byte 0x23, 0x11, 0x1e - .byte 0x13, 0x37, 0x1e - .byte 0x37, 0x37, 0x1e - .byte 0x07, 0x01, 0x32 - .byte 0x14, 0x06, 0x32 - .byte 0x11, 0x0c, 0x2e - .byte 0x36, 0x2e, 0x24 - .byte 0x15, 0x2a, 0x1c - .byte 0x22, 0x15, 0x34 - .byte 0x2c, 0x1e, 0x35 - .byte 0x22, 0x27, 0x33 - .byte 0x19, 0x3f, 0x2d - .byte 0x21, 0x33, 0x15 - .byte 0x26, 0x1a, 0x11 - .byte 0x16, 0x3e, 0x12 - .byte 0x2b, 0x24, 0x15 - .byte 0x3c, 0x0f, 0x2d - .byte 0x31, 0x15, 0x36 - .byte 0x3f, 0x24, 0x1d - .byte 0x25, 0x01, 0x37 - .byte 0x33, 0x16, 0x1a - .byte 0x1f, 0x0e, 0x10 - .byte 0x2f, 0x0b, 0x12 - .byte 0x2a, 0x1a, 0x25 - .byte 0x17, 0x0a, 0x35 - .byte 0x09, 0x28, 0x35 - .byte 0x02, 0x13, 0x36 - .byte 0x34, 0x2f, 0x17 - .byte 0x03, 0x04, 0x31 - .byte 0x3e, 0x26, 0x11 - .byte 0x35, 0x33, 0x31 - .byte 0x22, 0x17, 0x23 - .byte 0x1d, 0x05, 0x2b - .byte 0x2e, 0x27, 0x20 - .byte 0x03, 0x2b, 0x1d - .byte 0x01, 0x19, 0x1e - .byte 0x0e, 0x05, 0x18 - .byte 0x16, 0x25, 0x17 - .byte 0x02, 0x28, 0x18 - .byte 0x19, 0x0b, 0x24 - .byte 0x3e, 0x35, 0x16 - .byte 0x2e, 0x29, 0x25 - .byte 0x3e, 0x38, 0x1e - .byte 0x3a, 0x2f, 0x12 - .byte 0x14, 0x17, 0x2d - .byte 0x11, 0x12, 0x30 - .byte 0x15, 0x31, 0x18 - .byte 0x08, 0x0b, 0x29 - .byte 0x2d, 0x00, 0x33 - .byte 0x2c, 0x06, 0x1a - .byte 0x14, 0x1c, 0x2e - .byte 0x04, 0x08, 0x12 - .byte 0x1b, 0x2b, 0x2d - .byte 0x2a, 0x37, 0x33 - .byte 0x10, 0x27, 0x2c - .byte 0x1d, 0x0e, 0x34 - .byte 0x20, 0x02, 0x12 - .byte 0x1e, 0x1a, 0x2e - .byte 0x07, 0x0b, 0x10 - .byte 0x36, 0x1e, 0x33 - .byte 0x2b, 0x28, 0x1b - .byte 0x31, 0x25, 0x1f - .byte 0x38, 0x3a, 0x2f - .byte 0x39, 0x30, 0x2f - .byte 0x12, 0x09, 0x14 - .byte 0x0e, 0x08, 0x19 - .byte 0x00, 0x0d, 0x2c - .byte 0x1b, 0x0e, 0x34 - .byte 0x11, 0x25, 0x15 - .byte 0x0c, 0x2d, 0x26 - .byte 0x36, 0x2c, 0x16 - .byte 0x31, 0x31, 0x2c - .byte 0x03, 0x1a, 0x16 - .byte 0x1c, 0x32, 0x14 - .byte 0x0a, 0x3e, 0x36 - .byte 0x33, 0x1b, 0x27 - .byte 0x1f, 0x32, 0x18 - .byte 0x33, 0x26, 0x33 - .byte 0x1a, 0x13, 0x1a - .byte 0x0f, 0x34, 0x1c - .byte 0x35, 0x2c, 0x2f - .byte 0x38, 0x03, 0x18 - .byte 0x15, 0x0f, 0x27 - .byte 0x31, 0x29, 0x20 - .byte 0x28, 0x0e, 0x28 - .byte 0x31, 0x2c, 0x2e - .byte 0x15, 0x19, 0x1b - .byte 0x10, 0x03, 0x2f - .byte 0x2e, 0x2a, 0x32 - .byte 0x2a, 0x27, 0x1b - .byte 0x36, 0x04, 0x1e - .byte 0x3b, 0x04, 0x21 - .byte 0x07, 0x2f, 0x19 - .byte 0x27, 0x1d, 0x1d - .byte 0x3c, 0x3d, 0x2e - .byte 0x25, 0x08, 0x32 - .byte 0x3b, 0x34, 0x2a - .byte 0x0c, 0x10, 0x13 - .byte 0x25, 0x35, 0x1a - .byte 0x2f, 0x19, 0x28 - .byte 0x17, 0x00, 0x2b - .byte 0x0a, 0x1c, 0x17 - .byte 0x0a, 0x11, 0x1b - .byte 0x35, 0x13, 0x37 - .byte 0x29, 0x1c, 0x28 - .byte 0x0c, 0x31, 0x35 - .byte 0x3c, 0x10, 0x1a - .byte 0x1b, 0x3a, 0x2d - .byte 0x3a, 0x1c, 0x18 - .byte 0x22, 0x10, 0x2d - .byte 0x1c, 0x3c, 0x12 - .byte 0x17, 0x18, 0x2a - .byte 0x0b, 0x2b, 0x2f - .byte 0x2d, 0x04, 0x2e - .byte 0x3c, 0x13, 0x23 - .byte 0x01, 0x1c, 0x2e - .byte 0x14, 0x16, 0x22 - .byte 0x0c, 0x24, 0x13 - .byte 0x35, 0x37, 0x34 - .byte 0x1b, 0x30, 0x1e - .byte 0x3a, 0x1c, 0x20 - .byte 0x06, 0x06, 0x36 - .byte 0x09, 0x15, 0x1a - .byte 0x1b, 0x1a, 0x27 - .byte 0x0f, 0x33, 0x35 - .byte 0x37, 0x06, 0x23 - .byte 0x3a, 0x12, 0x1d - .byte 0x00, 0x16, 0x29 - .byte 0x0e, 0x1d, 0x35 - .byte 0x3f, 0x38, 0x16 - .byte 0x2a, 0x3c, 0x34 - .byte 0x13, 0x32, 0x10 - .byte 0x17, 0x2c, 0x37 - .byte 0x29, 0x2a, 0x1e - .byte 0x35, 0x2f, 0x2d - .byte 0x3c, 0x2a, 0x11 - .byte 0x28, 0x13, 0x21 - .byte 0x19, 0x1e, 0x34 - .byte 0x0c, 0x06, 0x2d - .byte 0x09, 0x04, 0x1c - .byte 0x1d, 0x2f, 0x26 - .byte 0x39, 0x07, 0x16 - .byte 0x14, 0x04, 0x2d - .byte 0x3a, 0x2f, 0x2e - .byte 0x29, 0x15, 0x35 - .byte 0x24, 0x02, 0x36 - .byte 0x3f, 0x02, 0x1a - .byte 0x0f, 0x18, 0x24 - .byte 0x16, 0x1d, 0x19 - .byte 0x14, 0x16, 0x10 - .byte 0x29, 0x1b, 0x13 - .byte 0x15, 0x0e, 0x19 - .byte 0x3a, 0x2e, 0x2b - .byte 0x08, 0x30, 0x15 - .byte 0x35, 0x16, 0x30 - .byte 0x2e, 0x18, 0x35 - .byte 0x3b, 0x0b, 0x1c - .byte 0x3a, 0x18, 0x13 - .byte 0x29, 0x13, 0x1e - .byte 0x20, 0x13, 0x27 - .byte 0x04, 0x1d, 0x34 - .byte 0x00, 0x38, 0x19 - .byte 0x08, 0x39, 0x32 - .byte 0x20, 0x10, 0x26 - .byte 0x08, 0x02, 0x28 - .byte 0x3f, 0x0f, 0x16 - .byte 0x30, 0x1f, 0x19 - .byte 0x20, 0x2d, 0x10 - .byte 0x38, 0x17, 0x1c - .byte 0x18, 0x31, 0x27 - .byte 0x33, 0x38, 0x30 - .byte 0x16, 0x33, 0x23 - .byte 0x00, 0x01, 0x36 - .byte 0x0d, 0x02, 0x23 - .byte 0x39, 0x04, 0x1f - .byte 0x0e, 0x30, 0x24 - .byte 0x06, 0x01, 0x2c - .byte 0x34, 0x33, 0x35 - .byte 0x16, 0x34, 0x2e - .byte 0x32, 0x16, 0x24 - .byte 0x26, 0x39, 0x34 - .byte 0x1f, 0x3c, 0x1d - .byte 0x28, 0x1d, 0x37 - .byte 0x17, 0x15, 0x2b - .byte 0x27, 0x39, 0x30 - .byte 0x0b, 0x1b, 0x18 - .byte 0x35, 0x20, 0x2d - .byte 0x0b, 0x35, 0x1c - .byte 0x03, 0x0e, 0x21 - .byte 0x06, 0x0c, 0x20 - .byte 0x02, 0x18, 0x34 - .byte 0x1e, 0x36, 0x2d - .byte 0x16, 0x0c, 0x19 - .byte 0x25, 0x09, 0x2c - .byte 0x37, 0x05, 0x2e - .byte 0x2e, 0x2b, 0x2c - .byte 0x24, 0x1a, 0x14 - .byte 0x27, 0x04, 0x10 - .byte 0x32, 0x38, 0x33 - .byte 0x37, 0x15, 0x35 - .byte 0x11, 0x3f, 0x1d - .byte 0x23, 0x23, 0x1f - .byte 0x29, 0x3f, 0x1d - .byte 0x1a, 0x3c, 0x2b - .byte 0x1b, 0x2c, 0x2c - .byte 0x38, 0x3b, 0x36 - .byte 0x04, 0x13, 0x33 - .byte 0x2c, 0x14, 0x12 - .byte 0x1a, 0x09, 0x1b - .byte 0x36, 0x11, 0x24 - .byte 0x3a, 0x3f, 0x11 - .byte 0x01, 0x0e, 0x2b - .byte 0x3b, 0x03, 0x2a - .byte 0x08, 0x0d, 0x2b - .byte 0x2b, 0x13, 0x27 - .byte 0x3a, 0x3c, 0x1c - .byte 0x3a, 0x15, 0x2a - .byte 0x24, 0x00, 0x17 - .byte 0x3e, 0x0a, 0x15 - .byte 0x0c, 0x29, 0x2d - .byte 0x1f, 0x15, 0x30 - .byte 0x35, 0x18, 0x19 - .byte 0x3d, 0x37, 0x37 - .byte 0x12, 0x38, 0x1b - .byte 0x3b, 0x02, 0x20 - .byte 0x08, 0x21, 0x19 - .byte 0x2e, 0x36, 0x1d - .byte 0x15, 0x3d, 0x24 - .byte 0x22, 0x0c, 0x27 - .byte 0x36, 0x3f, 0x33 - .byte 0x33, 0x12, 0x11 - .byte 0x1a, 0x19, 0x1f - .byte 0x2b, 0x24, 0x12 - .byte 0x11, 0x2a, 0x18 - .byte 0x25, 0x32, 0x2a - .byte 0x2c, 0x1a, 0x12 - .byte 0x26, 0x06, 0x10 - .byte 0x11, 0x29, 0x33 - .byte 0x2c, 0x09, 0x14 - .byte 0x2b, 0x12, 0x2b - .byte 0x1d, 0x03, 0x24 - .byte 0x00, 0x12, 0x15 - .byte 0x22, 0x3d, 0x26 - .byte 0x15, 0x37, 0x1a - .byte 0x0f, 0x12, 0x37 - .byte 0x24, 0x01, 0x18 - .byte 0x2a, 0x17, 0x13 - .byte 0x14, 0x3b, 0x29 - .byte 0x2a, 0x19, 0x32 - .byte 0x2d, 0x17, 0x17 - .byte 0x0b, 0x2c, 0x33 - .byte 0x07, 0x2d, 0x34 - .byte 0x07, 0x38, 0x1d - .byte 0x1f, 0x36, 0x22 - .byte 0x11, 0x0a, 0x17 - .byte 0x14, 0x11, 0x13 - .byte 0x2a, 0x17, 0x25 - .byte 0x01, 0x3a, 0x1c - .byte 0x26, 0x27, 0x30 - .byte 0x2d, 0x3b, 0x35 - .byte 0x3a, 0x30, 0x34 - .byte 0x06, 0x3a, 0x1c - .byte 0x2d, 0x05, 0x13 - .byte 0x21, 0x32, 0x12 - .byte 0x3e, 0x1e, 0x2c - .byte 0x3a, 0x3f, 0x2d - .byte 0x20, 0x2a, 0x34 - .byte 0x26, 0x03, 0x1a - .byte 0x19, 0x27, 0x2e - .byte 0x31, 0x04, 0x26 - .byte 0x2a, 0x3f, 0x30 - .byte 0x25, 0x23, 0x2a - .byte 0x08, 0x08, 0x35 - .byte 0x2c, 0x30, 0x1e - .byte 0x08, 0x05, 0x18 - .byte 0x06, 0x09, 0x2d - .byte 0x19, 0x00, 0x27 - .byte 0x0d, 0x10, 0x19 - .byte 0x1c, 0x00, 0x13 - .byte 0x3d, 0x0b, 0x24 - .byte 0x2e, 0x1f, 0x16 - .byte 0x3d, 0x18, 0x34 - .byte 0x12, 0x1e, 0x15 - .byte 0x15, 0x39, 0x25 - .byte 0x33, 0x0f, 0x17 - .byte 0x1a, 0x1c, 0x1b - .byte 0x37, 0x29, 0x1b - .byte 0x3b, 0x38, 0x12 - .byte 0x1d, 0x22, 0x34 - .byte 0x26, 0x0a, 0x31 - .byte 0x16, 0x2d, 0x13 - .byte 0x0d, 0x20, 0x27 - .byte 0x24, 0x1d, 0x16 - .byte 0x2e, 0x2b, 0x18 - .byte 0x16, 0x2a, 0x1b - .byte 0x24, 0x17, 0x36 - .byte 0x02, 0x05, 0x2b - .byte 0x37, 0x1a, 0x17 - .byte 0x11, 0x3d, 0x2c - .byte 0x1e, 0x2f, 0x22 - .byte 0x2c, 0x29, 0x1a - .byte 0x2f, 0x04, 0x25 - .byte 0x36, 0x0c, 0x35 - .byte 0x30, 0x3e, 0x12 - .byte 0x11, 0x30, 0x37 - .byte 0x12, 0x21, 0x2e - .byte 0x21, 0x30, 0x17 - .byte 0x2c, 0x3d, 0x24 - .byte 0x11, 0x23, 0x14 - .byte 0x1a, 0x32, 0x17 - .byte 0x39, 0x27, 0x18 - .byte 0x0f, 0x24, 0x19 - .byte 0x00, 0x3d, 0x37 - .byte 0x2c, 0x3c, 0x1c - .byte 0x0b, 0x39, 0x23 - .byte 0x0e, 0x04, 0x1f - .byte 0x1c, 0x31, 0x14 - .byte 0x00, 0x04, 0x15 - .byte 0x26, 0x2a, 0x2a - .byte 0x20, 0x25, 0x2a - .byte 0x0b, 0x3c, 0x33 - .byte 0x11, 0x0b, 0x2e - .byte 0x37, 0x22, 0x2e - .byte 0x0e, 0x22, 0x26 - .byte 0x18, 0x2d, 0x27 - .byte 0x06, 0x0c, 0x1c - .byte 0x26, 0x18, 0x2f - .byte 0x3a, 0x01, 0x2a - .byte 0x2f, 0x31, 0x34 - .byte 0x1f, 0x34, 0x1a - .byte 0x31, 0x05, 0x10 - .byte 0x2e, 0x17, 0x34 - .byte 0x18, 0x22, 0x23 - .byte 0x23, 0x21, 0x32 - .byte 0x07, 0x08, 0x22 - .byte 0x26, 0x1c, 0x22 - .byte 0x31, 0x12, 0x2f - .byte 0x08, 0x1f, 0x10 - .byte 0x27, 0x15, 0x2a - .byte 0x1f, 0x0b, 0x26 - .byte 0x2f, 0x14, 0x35 - .byte 0x24, 0x1f, 0x26 - .byte 0x3b, 0x23, 0x33 - .byte 0x20, 0x3e, 0x2d - .byte 0x17, 0x0c, 0x15 - .byte 0x13, 0x39, 0x1a - .byte 0x30, 0x14, 0x25 - .byte 0x09, 0x07, 0x17 - .byte 0x38, 0x38, 0x1f - .byte 0x29, 0x24, 0x27 - .byte 0x17, 0x27, 0x28 - .byte 0x1b, 0x12, 0x2a - .byte 0x2b, 0x3d, 0x2d - .byte 0x19, 0x34, 0x1c - .byte 0x01, 0x1d, 0x10 - .byte 0x08, 0x39, 0x11 - .byte 0x0e, 0x36, 0x1b - .byte 0x26, 0x13, 0x10 - .byte 0x16, 0x28, 0x1e - .byte 0x3c, 0x28, 0x17 - .byte 0x3e, 0x39, 0x34 - .byte 0x0a, 0x03, 0x2e - .byte 0x37, 0x1a, 0x13 - .byte 0x2b, 0x33, 0x26 - .byte 0x13, 0x2c, 0x21 - .byte 0x25, 0x14, 0x10 - .byte 0x16, 0x0b, 0x35 - .byte 0x1d, 0x35, 0x33 - .byte 0x21, 0x08, 0x33 - .byte 0x28, 0x21, 0x1a - .byte 0x12, 0x0c, 0x1b - .byte 0x36, 0x2a, 0x19 - .byte 0x2c, 0x2b, 0x23 - .byte 0x01, 0x0f, 0x26 - .byte 0x17, 0x0c, 0x18 - .byte 0x09, 0x0f, 0x11 - .byte 0x2b, 0x24, 0x1c - .byte 0x09, 0x09, 0x15 - .byte 0x36, 0x08, 0x13 - .byte 0x20, 0x39, 0x21 - .byte 0x00, 0x3a, 0x1f - .byte 0x2b, 0x36, 0x31 - .byte 0x02, 0x37, 0x13 - .byte 0x04, 0x34, 0x35 - .byte 0x37, 0x3d, 0x1a - .byte 0x17, 0x3d, 0x13 - .byte 0x2b, 0x36, 0x2f - .byte 0x13, 0x1e, 0x13 - .byte 0x3e, 0x11, 0x33 - .byte 0x27, 0x3a, 0x2d - .byte 0x1e, 0x31, 0x1a - .byte 0x03, 0x03, 0x2d - .byte 0x25, 0x37, 0x1f - .byte 0x11, 0x01, 0x22 - .byte 0x1c, 0x12, 0x17 - .byte 0x30, 0x3a, 0x30 - .byte 0x17, 0x1d, 0x29 - .byte 0x0e, 0x13, 0x27 - .byte 0x1a, 0x2e, 0x24 - .byte 0x2d, 0x00, 0x1c - .byte 0x17, 0x28, 0x1d - .byte 0x09, 0x1f, 0x2e - .byte 0x1a, 0x2d, 0x26 - .byte 0x0a, 0x13, 0x32 - .byte 0x3e, 0x00, 0x27 - .byte 0x0b, 0x3b, 0x30 - .byte 0x08, 0x3a, 0x2d - .byte 0x22, 0x12, 0x1e - .byte 0x34, 0x1d, 0x2b - .byte 0x26, 0x22, 0x35 - .byte 0x17, 0x2c, 0x17 - .byte 0x29, 0x13, 0x2d - .byte 0x2d, 0x10, 0x10 - .byte 0x20, 0x31, 0x23 - .byte 0x1e, 0x33, 0x18 - .byte 0x33, 0x06, 0x2d - .byte 0x26, 0x14, 0x27 - .byte 0x22, 0x1d, 0x2a - .byte 0x2d, 0x06, 0x18 - .byte 0x07, 0x09, 0x2e - .byte 0x21, 0x15, 0x2e - .byte 0x21, 0x38, 0x23 - .byte 0x35, 0x0b, 0x34 - .byte 0x24, 0x0b, 0x22 - .byte 0x1e, 0x01, 0x17 - .byte 0x0b, 0x24, 0x11 - .byte 0x17, 0x07, 0x20 - .byte 0x14, 0x25, 0x32 - .byte 0x1a, 0x0e, 0x2f - .byte 0x35, 0x17, 0x1f - .byte 0x0c, 0x08, 0x21 - .byte 0x30, 0x35, 0x1f - .byte 0x0c, 0x0b, 0x20 - .byte 0x04, 0x10, 0x11 - .byte 0x35, 0x11, 0x1e - .byte 0x33, 0x3d, 0x16 - .byte 0x1e, 0x2b, 0x1d - .byte 0x1a, 0x19, 0x10 - .byte 0x04, 0x06, 0x22 - .byte 0x03, 0x3d, 0x24 - .byte 0x2a, 0x0e, 0x35 - .byte 0x03, 0x3e, 0x17 - .byte 0x0b, 0x18, 0x36 - .byte 0x3d, 0x0d, 0x26 - .byte 0x35, 0x12, 0x20 - .byte 0x1f, 0x0d, 0x16 - .byte 0x23, 0x32, 0x1a - .byte 0x00, 0x3d, 0x26 - .byte 0x30, 0x19, 0x36 - .byte 0x12, 0x0e, 0x23 - .byte 0x01, 0x23, 0x28 - .byte 0x3b, 0x31, 0x11 - .byte 0x2d, 0x1c, 0x36 - .byte 0x2a, 0x05, 0x16 - .byte 0x14, 0x0e, 0x30 - .byte 0x3a, 0x37, 0x19 - .byte 0x1f, 0x30, 0x25 - .byte 0x10, 0x26, 0x2f - .byte 0x22, 0x11, 0x1f - .byte 0x2e, 0x2b, 0x1e - .byte 0x16, 0x16, 0x21 - .byte 0x32, 0x18, 0x35 - .byte 0x23, 0x32, 0x1a - .byte 0x3d, 0x0d, 0x19 - .byte 0x39, 0x09, 0x23 - .byte 0x30, 0x2e, 0x24 - .byte 0x1e, 0x0f, 0x24 - .byte 0x09, 0x21, 0x31 - .byte 0x05, 0x03, 0x11 - .byte 0x05, 0x22, 0x2a - .byte 0x03, 0x07, 0x37 - .byte 0x04, 0x08, 0x13 - .byte 0x05, 0x10, 0x34 - .byte 0x37, 0x14, 0x29 - .byte 0x0a, 0x24, 0x32 - .byte 0x34, 0x1e, 0x1b - .byte 0x12, 0x17, 0x2e - .byte 0x01, 0x02, 0x13 - .byte 0x0a, 0x0c, 0x11 - .byte 0x02, 0x14, 0x13 - .byte 0x0d, 0x25, 0x23 - .byte 0x00, 0x07, 0x1a - .byte 0x1c, 0x28, 0x35 - .byte 0x08, 0x0e, 0x2c - .byte 0x1b, 0x3c, 0x15 - .byte 0x1c, 0x19, 0x1d - .byte 0x32, 0x13, 0x1a - .byte 0x1c, 0x00, 0x37 - .byte 0x22, 0x1b, 0x35 - .byte 0x39, 0x3e, 0x14 - .byte 0x32, 0x06, 0x31 - .byte 0x17, 0x05, 0x2b - .byte 0x01, 0x0f, 0x20 - .byte 0x1e, 0x0f, 0x34 - .byte 0x18, 0x03, 0x1f - .byte 0x2b, 0x00, 0x14 - .byte 0x15, 0x3a, 0x30 - .byte 0x25, 0x30, 0x21 - .byte 0x0b, 0x00, 0x37 - .byte 0x24, 0x37, 0x1d - .byte 0x29, 0x21, 0x16 - .byte 0x24, 0x0f, 0x2c - .byte 0x3e, 0x15, 0x36 - .byte 0x3c, 0x2d, 0x23 - .byte 0x3d, 0x3c, 0x17 - .byte 0x1a, 0x1c, 0x13 - .byte 0x0a, 0x29, 0x22 - .byte 0x25, 0x3f, 0x26 - .byte 0x3b, 0x39, 0x2f - .byte 0x1d, 0x08, 0x16 - .byte 0x0b, 0x19, 0x14 - .byte 0x12, 0x01, 0x2c - .byte 0x35, 0x11, 0x2a - .byte 0x02, 0x00, 0x13 - .byte 0x39, 0x2a, 0x35 - .byte 0x07, 0x1a, 0x11 - .byte 0x24, 0x0e, 0x1e - .byte 0x0e, 0x2c, 0x15 - .byte 0x08, 0x31, 0x1b - .byte 0x21, 0x1d, 0x26 - .byte 0x1d, 0x1c, 0x2a - .byte 0x1d, 0x24, 0x13 - .byte 0x01, 0x00, 0x18 - .byte 0x28, 0x2a, 0x37 - .byte 0x15, 0x0f, 0x13 - .byte 0x10, 0x32, 0x36 - .byte 0x22, 0x13, 0x31 - .byte 0x13, 0x05, 0x1e - .byte 0x17, 0x35, 0x35 - .byte 0x3b, 0x0e, 0x24 - .byte 0x35, 0x3a, 0x1d - .byte 0x1b, 0x36, 0x1b - .byte 0x03, 0x1d, 0x24 - .byte 0x0f, 0x16, 0x30 - .byte 0x2d, 0x09, 0x25 - .byte 0x05, 0x21, 0x13 - .byte 0x0a, 0x27, 0x36 - .byte 0x04, 0x0d, 0x1c - .byte 0x06, 0x3e, 0x21 - .byte 0x2a, 0x27, 0x33 - .byte 0x28, 0x0e, 0x15 - .byte 0x0b, 0x17, 0x1d - .byte 0x1d, 0x32, 0x2d - .byte 0x08, 0x3d, 0x29 - .byte 0x21, 0x32, 0x17 - .byte 0x33, 0x31, 0x22 - .byte 0x0e, 0x03, 0x21 - .byte 0x0d, 0x0b, 0x16 - .byte 0x3e, 0x2a, 0x2e - .byte 0x19, 0x36, 0x2a - .byte 0x0d, 0x00, 0x14 - .byte 0x22, 0x07, 0x36 - .byte 0x0a, 0x09, 0x15 - .byte 0x14, 0x10, 0x22 - .byte 0x07, 0x16, 0x2c - .byte 0x36, 0x13, 0x15 - .byte 0x09, 0x2f, 0x1b - .byte 0x20, 0x3b, 0x2e - .byte 0x3a, 0x3a, 0x16 - .byte 0x0d, 0x15, 0x2a - .byte 0x39, 0x13, 0x2b - .byte 0x0b, 0x01, 0x2a - .byte 0x13, 0x17, 0x1e - .byte 0x08, 0x17, 0x1e - .byte 0x0c, 0x0f, 0x34 - .byte 0x1f, 0x31, 0x12 - .byte 0x07, 0x3a, 0x1d - .byte 0x35, 0x1e, 0x12 - .byte 0x24, 0x2c, 0x15 - .byte 0x0e, 0x21, 0x19 - .byte 0x34, 0x3b, 0x33 - .byte 0x19, 0x0f, 0x28 - .byte 0x10, 0x2f, 0x2e - .byte 0x23, 0x27, 0x31 - .byte 0x39, 0x2e, 0x18 - .byte 0x3c, 0x3f, 0x24 - .byte 0x07, 0x23, 0x30 - .byte 0x28, 0x13, 0x35 - .byte 0x13, 0x0a, 0x10 - .byte 0x35, 0x19, 0x33 - .byte 0x23, 0x28, 0x29 - .byte 0x13, 0x2f, 0x1a - .byte 0x3a, 0x19, 0x14 - .byte 0x37, 0x36, 0x26 - .byte 0x20, 0x3b, 0x15 - .byte 0x37, 0x39, 0x10 - .byte 0x3c, 0x21, 0x34 - .byte 0x1c, 0x38, 0x30 - .byte 0x15, 0x07, 0x26 - .byte 0x27, 0x21, 0x19 - .byte 0x18, 0x11, 0x23 - .byte 0x30, 0x28, 0x37 - .byte 0x32, 0x2d, 0x1f - .byte 0x2c, 0x3f, 0x30 - .byte 0x1d, 0x2f, 0x26 - .byte 0x01, 0x11, 0x1c - .byte 0x3b, 0x0f, 0x12 - .byte 0x2a, 0x17, 0x27 - .byte 0x05, 0x00, 0x1b - .byte 0x25, 0x1c, 0x32 - .byte 0x04, 0x22, 0x2d - .byte 0x10, 0x0f, 0x25 - .byte 0x0d, 0x39, 0x30 - .byte 0x0b, 0x2e, 0x27 - .byte 0x2d, 0x34, 0x15 - .byte 0x3e, 0x30, 0x36 - .byte 0x16, 0x26, 0x2a - .byte 0x05, 0x3f, 0x2b - .byte 0x20, 0x3b, 0x2e - .byte 0x3b, 0x1c, 0x2f - .byte 0x01, 0x18, 0x16 - .byte 0x16, 0x3d, 0x10 - .byte 0x0a, 0x1f, 0x18 - .byte 0x17, 0x0f, 0x22 - .byte 0x06, 0x13, 0x11 - .byte 0x38, 0x21, 0x17 - .byte 0x17, 0x0a, 0x37 - .byte 0x1c, 0x19, 0x30 - .byte 0x16, 0x38, 0x31 - .byte 0x30, 0x10, 0x36 - .byte 0x31, 0x2f, 0x26 - .byte 0x3c, 0x1b, 0x23 - .byte 0x33, 0x2f, 0x19 - .byte 0x16, 0x35, 0x25 - .byte 0x3a, 0x18, 0x1f - .byte 0x37, 0x01, 0x1e - .byte 0x0d, 0x18, 0x12 - .byte 0x1f, 0x1c, 0x1b - .byte 0x07, 0x34, 0x2d - .byte 0x0b, 0x3f, 0x33 - .byte 0x1e, 0x34, 0x1d - .byte 0x2c, 0x13, 0x2c - .byte 0x20, 0x20, 0x13 - .byte 0x20, 0x0f, 0x31 - .byte 0x08, 0x0f, 0x24 - .byte 0x18, 0x3d, 0x1c - .byte 0x36, 0x34, 0x27 - .byte 0x33, 0x2a, 0x25 - .byte 0x2d, 0x30, 0x26 - .byte 0x3d, 0x37, 0x26 - .byte 0x25, 0x11, 0x11 - .byte 0x03, 0x05, 0x18 - .byte 0x10, 0x04, 0x29 - .byte 0x07, 0x2e, 0x36 - .byte 0x2a, 0x29, 0x15 - .byte 0x3a, 0x0e, 0x33 - .byte 0x2a, 0x06, 0x29 - .byte 0x3d, 0x01, 0x29 - .byte 0x27, 0x0e, 0x16 - .byte 0x1d, 0x28, 0x1b - .byte 0x10, 0x33, 0x2b - .byte 0x0c, 0x14, 0x1d - .byte 0x15, 0x3f, 0x25 - .byte 0x37, 0x23, 0x1e - .byte 0x04, 0x2c, 0x1c - .byte 0x15, 0x34, 0x2a - .byte 0x09, 0x2f, 0x15 - .byte 0x02, 0x3f, 0x14 - .byte 0x19, 0x2c, 0x33 - .byte 0x39, 0x32, 0x20 - .byte 0x2a, 0x18, 0x32 - .byte 0x17, 0x23, 0x21 - .byte 0x0b, 0x2d, 0x25 - .byte 0x24, 0x3a, 0x2d - .byte 0x31, 0x3f, 0x34 - .byte 0x18, 0x19, 0x24 - .byte 0x1e, 0x15, 0x1a - .byte 0x17, 0x33, 0x2b - .byte 0x23, 0x09, 0x26 - .byte 0x1b, 0x0d, 0x15 - .byte 0x36, 0x26, 0x28 - .byte 0x3a, 0x1c, 0x14 - .byte 0x0c, 0x3e, 0x10 - .byte 0x18, 0x06, 0x35 - .byte 0x37, 0x26, 0x36 - .byte 0x21, 0x26, 0x17 - .byte 0x3d, 0x1c, 0x2c - .byte 0x16, 0x25, 0x1d - .byte 0x1e, 0x0b, 0x1e - .byte 0x1d, 0x0d, 0x32 - .byte 0x08, 0x1f, 0x1b - .byte 0x12, 0x1c, 0x12 - .byte 0x20, 0x2a, 0x28 - .byte 0x06, 0x3b, 0x35 - .byte 0x39, 0x0e, 0x1e - .byte 0x31, 0x30, 0x28 - .byte 0x02, 0x21, 0x14 - .byte 0x06, 0x1e, 0x29 - .byte 0x16, 0x09, 0x1c - .byte 0x27, 0x32, 0x2d - .byte 0x39, 0x03, 0x27 - .byte 0x29, 0x09, 0x1e - .byte 0x1b, 0x11, 0x1c - .byte 0x28, 0x3a, 0x2c - .byte 0x03, 0x03, 0x18 - .byte 0x23, 0x09, 0x2f - .byte 0x30, 0x17, 0x23 - .byte 0x0f, 0x25, 0x33 - .byte 0x06, 0x24, 0x37 - .byte 0x22, 0x09, 0x33 - .byte 0x2c, 0x09, 0x2a - .byte 0x0c, 0x12, 0x2a - .byte 0x28, 0x20, 0x10 - .byte 0x15, 0x29, 0x33 - .byte 0x0f, 0x1a, 0x13 - .byte 0x13, 0x18, 0x36 - .byte 0x2e, 0x16, 0x13 - .byte 0x3c, 0x1a, 0x15 - .byte 0x3a, 0x11, 0x32 - .byte 0x02, 0x0a, 0x2c - .byte 0x19, 0x39, 0x11 - .byte 0x31, 0x3e, 0x1d - .byte 0x32, 0x14, 0x32 - .byte 0x12, 0x2e, 0x34 - .byte 0x3e, 0x36, 0x23 - .byte 0x37, 0x3e, 0x15 - .byte 0x15, 0x35, 0x34 - .byte 0x01, 0x3a, 0x2c - .byte 0x26, 0x25, 0x22 - .byte 0x01, 0x2b, 0x37 - .byte 0x1c, 0x3d, 0x33 - .byte 0x3e, 0x10, 0x1c - .byte 0x26, 0x33, 0x19 - .byte 0x05, 0x19, 0x17 - .byte 0x12, 0x38, 0x1c - .byte 0x15, 0x3c, 0x32 - .byte 0x3f, 0x0f, 0x37 - .byte 0x02, 0x39, 0x32 - .byte 0x13, 0x00, 0x1d - .byte 0x1d, 0x2c, 0x10 - .byte 0x39, 0x13, 0x31 - .byte 0x0f, 0x37, 0x19 - .byte 0x09, 0x0d, 0x2a - .byte 0x20, 0x2f, 0x32 - .byte 0x3b, 0x34, 0x22 - .byte 0x26, 0x14, 0x10 - .byte 0x24, 0x3d, 0x22 - .byte 0x0b, 0x31, 0x23 - .byte 0x2f, 0x2d, 0x2a - .byte 0x30, 0x04, 0x35 - .byte 0x19, 0x20, 0x2a - .byte 0x16, 0x36, 0x37 - .byte 0x14, 0x28, 0x37 - .byte 0x11, 0x0b, 0x27 - .byte 0x1d, 0x06, 0x29 - .byte 0x35, 0x16, 0x2e - .byte 0x24, 0x2e, 0x29 - .byte 0x36, 0x14, 0x2a - .byte 0x21, 0x0c, 0x1f - .byte 0x3f, 0x39, 0x19 - .byte 0x27, 0x10, 0x2a - .byte 0x1e, 0x12, 0x34 - .byte 0x10, 0x24, 0x34 - .byte 0x1d, 0x13, 0x1d - .byte 0x17, 0x16, 0x37 - .byte 0x27, 0x1b, 0x27 - .byte 0x07, 0x24, 0x21 - .byte 0x37, 0x21, 0x11 - .byte 0x37, 0x28, 0x24 - .byte 0x19, 0x02, 0x1c - .byte 0x14, 0x12, 0x1d - .byte 0x1b, 0x24, 0x2e - .byte 0x2e, 0x3a, 0x15 - .byte 0x37, 0x34, 0x21 - .byte 0x33, 0x2d, 0x29 - .byte 0x2f, 0x1e, 0x34 - .byte 0x29, 0x3c, 0x12 - .byte 0x05, 0x15, 0x20 - .byte 0x05, 0x3e, 0x19 - .byte 0x18, 0x0b, 0x30 - .byte 0x2f, 0x02, 0x27 - .byte 0x14, 0x1c, 0x34 - .byte 0x12, 0x20, 0x30 - .byte 0x2b, 0x22, 0x1b - .byte 0x06, 0x31, 0x28 - .byte 0x15, 0x2d, 0x12 - .byte 0x01, 0x0e, 0x13 - .byte 0x13, 0x0c, 0x28 - .byte 0x07, 0x2a, 0x14 - .byte 0x1d, 0x36, 0x14 - .byte 0x15, 0x2b, 0x26 - .byte 0x03, 0x25, 0x15 - .byte 0x3e, 0x3b, 0x20 - .byte 0x35, 0x0c, 0x25 - .byte 0x2b, 0x16, 0x35 - .byte 0x1e, 0x31, 0x2c - .byte 0x06, 0x03, 0x29 - .byte 0x24, 0x07, 0x1f - .byte 0x32, 0x2f, 0x19 - .byte 0x25, 0x21, 0x31 - .byte 0x22, 0x26, 0x1d - .byte 0x00, 0x1b, 0x18 - .byte 0x2a, 0x24, 0x31 - .byte 0x20, 0x06, 0x2f - .byte 0x1e, 0x32, 0x26 - .byte 0x32, 0x39, 0x12 - .byte 0x20, 0x01, 0x19 - .byte 0x0f, 0x15, 0x15 - .byte 0x27, 0x10, 0x2e - .byte 0x09, 0x25, 0x19 - .byte 0x29, 0x37, 0x30 - .byte 0x13, 0x1c, 0x1d - .byte 0x29, 0x2d, 0x26 - .byte 0x02, 0x1a, 0x16 - .byte 0x1d, 0x2b, 0x1c - .byte 0x18, 0x04, 0x34 - .byte 0x28, 0x2a, 0x21 - .byte 0x15, 0x1b, 0x2e - .byte 0x16, 0x01, 0x10 - .byte 0x05, 0x09, 0x14 - .byte 0x22, 0x03, 0x22 - .byte 0x02, 0x1b, 0x34 - .byte 0x29, 0x2a, 0x23 - .byte 0x26, 0x36, 0x13 - .byte 0x23, 0x3d, 0x1a - .byte 0x1d, 0x10, 0x24 - .byte 0x25, 0x2b, 0x37 - .byte 0x19, 0x24, 0x26 - .byte 0x28, 0x13, 0x16 - .byte 0x17, 0x14, 0x19 - .byte 0x0b, 0x2f, 0x25 - .byte 0x37, 0x34, 0x37 - .byte 0x39, 0x21, 0x1b - .byte 0x0f, 0x3d, 0x2d - .byte 0x0d, 0x10, 0x20 - .byte 0x05, 0x0b, 0x2d - .byte 0x01, 0x12, 0x24 - .byte 0x18, 0x3d, 0x32 - .byte 0x09, 0x21, 0x26 - .byte 0x1a, 0x0e, 0x1f - .byte 0x30, 0x06, 0x1f - .byte 0x0b, 0x3c, 0x29 - .byte 0x07, 0x3e, 0x27 - .byte 0x13, 0x1e, 0x1a - .byte 0x13, 0x07, 0x23 - .byte 0x10, 0x34, 0x1e - .byte 0x32, 0x17, 0x23 - .byte 0x35, 0x16, 0x31 - .byte 0x32, 0x2e, 0x1b - .byte 0x28, 0x0e, 0x22 - .byte 0x14, 0x3a, 0x23 - .byte 0x22, 0x03, 0x29 - .byte 0x2a, 0x10, 0x20 - .byte 0x3e, 0x3c, 0x27 - .byte 0x16, 0x20, 0x12 - .byte 0x3f, 0x24, 0x31 - .byte 0x0d, 0x2e, 0x32 - .byte 0x2f, 0x17, 0x2d - .byte 0x36, 0x3b, 0x17 - .byte 0x24, 0x23, 0x18 - .byte 0x37, 0x1d, 0x13 - .byte 0x17, 0x3a, 0x1a - .byte 0x0a, 0x3d, 0x1e - .byte 0x05, 0x12, 0x16 - .byte 0x33, 0x32, 0x25 - .byte 0x1d, 0x1f, 0x29 - .byte 0x34, 0x2c, 0x26 - .byte 0x20, 0x29, 0x35 - .byte 0x0e, 0x32, 0x17 - .byte 0x01, 0x39, 0x2d - .byte 0x27, 0x24, 0x23 - .byte 0x28, 0x3f, 0x18 - .byte 0x39, 0x38, 0x25 - .byte 0x23, 0x11, 0x11 - .byte 0x19, 0x2c, 0x29 - .byte 0x30, 0x08, 0x28 - .byte 0x25, 0x27, 0x1d - .byte 0x17, 0x25, 0x21 - .byte 0x09, 0x3d, 0x16 - .byte 0x1b, 0x0f, 0x2c - .byte 0x1b, 0x12, 0x22 - .byte 0x28, 0x3e, 0x26 - .byte 0x34, 0x10, 0x1b - .byte 0x02, 0x34, 0x15 - .byte 0x1a, 0x29, 0x19 - .byte 0x29, 0x11, 0x31 - .byte 0x12, 0x27, 0x17 - .byte 0x27, 0x27, 0x2f - .byte 0x34, 0x27, 0x24 - .byte 0x03, 0x19, 0x36 - .byte 0x17, 0x1d, 0x33 - .byte 0x19, 0x25, 0x1a - .byte 0x2b, 0x39, 0x13 - .byte 0x3b, 0x33, 0x1d - .byte 0x27, 0x31, 0x34 - .byte 0x28, 0x33, 0x37 - .byte 0x09, 0x30, 0x1b - .byte 0x03, 0x3a, 0x27 - .byte 0x19, 0x11, 0x1f - .byte 0x0b, 0x1a, 0x34 - .byte 0x3d, 0x2a, 0x15 - .byte 0x04, 0x24, 0x36 - .byte 0x30, 0x23, 0x30 - .byte 0x0f, 0x22, 0x1b - .byte 0x3d, 0x3d, 0x24 - .byte 0x29, 0x1d, 0x12 - .byte 0x16, 0x19, 0x2e - .byte 0x03, 0x12, 0x17 - .byte 0x18, 0x25, 0x33 - .byte 0x2f, 0x23, 0x1a - .byte 0x1a, 0x35, 0x27 - .byte 0x21, 0x26, 0x19 - .byte 0x1b, 0x30, 0x18 - .byte 0x2b, 0x22, 0x2d - .byte 0x2c, 0x1a, 0x34 - .byte 0x3e, 0x12, 0x19 - .byte 0x28, 0x27, 0x15 - .byte 0x1b, 0x11, 0x12 - .byte 0x17, 0x15, 0x10 - .byte 0x34, 0x37, 0x25 - .byte 0x12, 0x3f, 0x15 - .byte 0x31, 0x0d, 0x37 - .byte 0x3e, 0x2a, 0x2d - .byte 0x0f, 0x24, 0x24 - .byte 0x3c, 0x3f, 0x1f - .byte 0x1d, 0x34, 0x17 - .byte 0x1a, 0x23, 0x1f - .byte 0x37, 0x0f, 0x10 - .byte 0x32, 0x34, 0x35 - .byte 0x19, 0x05, 0x22 - .byte 0x33, 0x16, 0x34 - .byte 0x1e, 0x14, 0x1e - .byte 0x08, 0x13, 0x29 - .byte 0x3a, 0x37, 0x30 - .byte 0x1d, 0x36, 0x15 - .byte 0x29, 0x2e, 0x1d - .byte 0x32, 0x2e, 0x23 - .byte 0x35, 0x17, 0x1c - .byte 0x36, 0x1d, 0x13 - .byte 0x23, 0x34, 0x34 - .byte 0x24, 0x1a, 0x37 - .byte 0x2f, 0x26, 0x2e - .byte 0x1e, 0x17, 0x1a - .byte 0x1f, 0x15, 0x1f - .byte 0x2b, 0x1f, 0x19 - .byte 0x0a, 0x33, 0x1a - .byte 0x35, 0x31, 0x24 - .byte 0x2d, 0x17, 0x2c - .byte 0x0c, 0x21, 0x36 - .byte 0x2c, 0x35, 0x35 - .byte 0x1b, 0x03, 0x27 - .byte 0x01, 0x0d, 0x1d - .byte 0x1c, 0x0e, 0x11 - .byte 0x11, 0x2b, 0x10 - .byte 0x25, 0x3b, 0x20 - .byte 0x1f, 0x17, 0x19 - .byte 0x20, 0x08, 0x36 - .byte 0x13, 0x38, 0x19 - .byte 0x1b, 0x2b, 0x24 - .byte 0x0b, 0x1f, 0x29 - .byte 0x27, 0x15, 0x2c - .byte 0x37, 0x39, 0x10 - .byte 0x3a, 0x15, 0x2e - .byte 0x2f, 0x11, 0x36 - .byte 0x24, 0x04, 0x20 - .byte 0x3b, 0x2a, 0x35 - .byte 0x27, 0x35, 0x34 - .byte 0x0d, 0x1b, 0x20 - .byte 0x10, 0x22, 0x37 - .byte 0x1f, 0x38, 0x27 - .byte 0x31, 0x0f, 0x28 - .byte 0x28, 0x25, 0x15 - .byte 0x00, 0x1d, 0x25 - .byte 0x31, 0x28, 0x28 - .byte 0x0b, 0x3a, 0x1d - .byte 0x2d, 0x13, 0x1b - .byte 0x03, 0x37, 0x2e - .byte 0x1d, 0x28, 0x19 - .byte 0x08, 0x2d, 0x22 - .byte 0x27, 0x39, 0x32 - .byte 0x3f, 0x2f, 0x1d - .byte 0x33, 0x34, 0x28 - .byte 0x18, 0x08, 0x31 - .byte 0x23, 0x1f, 0x13 - .byte 0x0d, 0x2c, 0x23 - .byte 0x3a, 0x2d, 0x1a - .byte 0x02, 0x25, 0x13 - .byte 0x20, 0x36, 0x34 - .byte 0x12, 0x2b, 0x2d - .byte 0x35, 0x35, 0x34 - .byte 0x23, 0x20, 0x21 - .byte 0x3a, 0x19, 0x1b - .byte 0x1f, 0x2b, 0x19 - .byte 0x35, 0x0e, 0x19 - .byte 0x26, 0x24, 0x37 - .byte 0x18, 0x08, 0x10 - .byte 0x0c, 0x16, 0x2d - .byte 0x1f, 0x34, 0x21 - .byte 0x05, 0x38, 0x19 - .byte 0x14, 0x21, 0x24 - .byte 0x11, 0x31, 0x14 - .byte 0x3e, 0x38, 0x29 - .byte 0x3f, 0x08, 0x25 - .byte 0x2a, 0x1f, 0x25 - .byte 0x25, 0x06, 0x28 - .byte 0x0b, 0x1e, 0x14 - .byte 0x1a, 0x38, 0x22 - .byte 0x24, 0x18, 0x29 - .byte 0x1a, 0x11, 0x20 - .byte 0x3b, 0x3a, 0x1e - .byte 0x1c, 0x26, 0x1a - .byte 0x05, 0x32, 0x19 - .byte 0x39, 0x2a, 0x31 - .byte 0x09, 0x07, 0x25 - .byte 0x05, 0x3e, 0x16 - .byte 0x34, 0x26, 0x14 - .byte 0x1b, 0x32, 0x26 - .byte 0x05, 0x08, 0x37 - .byte 0x0f, 0x03, 0x20 - .byte 0x2a, 0x39, 0x31 - .byte 0x08, 0x01, 0x1e - .byte 0x1d, 0x23, 0x31 - .byte 0x28, 0x1b, 0x28 - .byte 0x1e, 0x37, 0x14 - .byte 0x13, 0x0e, 0x28 - .byte 0x2a, 0x3b, 0x37 - .byte 0x2f, 0x1c, 0x28 - .byte 0x30, 0x30, 0x1a - .byte 0x36, 0x1f, 0x16 - .byte 0x3e, 0x0d, 0x15 - .byte 0x2e, 0x16, 0x18 - .byte 0x15, 0x37, 0x20 - .byte 0x2a, 0x33, 0x30 - .byte 0x2b, 0x0e, 0x25 - .byte 0x18, 0x20, 0x16 - .byte 0x02, 0x19, 0x25 - .byte 0x0a, 0x2e, 0x30 - .byte 0x16, 0x03, 0x11 - .byte 0x04, 0x27, 0x25 - .byte 0x1b, 0x1c, 0x21 - .byte 0x29, 0x04, 0x27 - .byte 0x3d, 0x20, 0x1e - .byte 0x28, 0x33, 0x31 - .byte 0x1e, 0x39, 0x10 - .byte 0x31, 0x29, 0x1e - .byte 0x06, 0x25, 0x28 - .byte 0x19, 0x3b, 0x12 - .byte 0x0b, 0x1b, 0x1c - .byte 0x3e, 0x37, 0x20 - .byte 0x0a, 0x37, 0x33 - .byte 0x02, 0x2c, 0x25 - .byte 0x15, 0x18, 0x14 - .byte 0x3b, 0x20, 0x1c - .byte 0x22, 0x3b, 0x1c - .byte 0x24, 0x34, 0x35 - .byte 0x0f, 0x2f, 0x31 - .byte 0x3b, 0x17, 0x35 - .byte 0x30, 0x39, 0x37 - .byte 0x0d, 0x15, 0x11 - .byte 0x10, 0x03, 0x1e - .byte 0x1a, 0x39, 0x33 - .byte 0x2f, 0x2e, 0x28 - .byte 0x1c, 0x28, 0x36 - .byte 0x28, 0x18, 0x1f - .byte 0x15, 0x01, 0x30 - .byte 0x3e, 0x32, 0x28 - .byte 0x34, 0x2f, 0x23 - .byte 0x07, 0x0c, 0x36 - .byte 0x28, 0x2c, 0x34 - .byte 0x2a, 0x0c, 0x1f - .byte 0x3f, 0x20, 0x13 - .byte 0x2b, 0x17, 0x27 - .byte 0x28, 0x29, 0x2a - .byte 0x3c, 0x13, 0x36 - .byte 0x26, 0x2d, 0x2a - .byte 0x0a, 0x06, 0x1e - .byte 0x20, 0x04, 0x1a - .byte 0x02, 0x07, 0x35 - .byte 0x0e, 0x18, 0x30 - .byte 0x00, 0x34, 0x34 - .byte 0x2f, 0x14, 0x37 - .byte 0x21, 0x30, 0x1f - .byte 0x15, 0x37, 0x1b - .byte 0x3a, 0x0b, 0x32 - .byte 0x22, 0x22, 0x21 - .byte 0x1b, 0x35, 0x23 - .byte 0x0d, 0x03, 0x1c - .byte 0x23, 0x3b, 0x13 - .byte 0x0e, 0x1d, 0x1f - .byte 0x1d, 0x3f, 0x2e - .byte 0x39, 0x27, 0x2e - .byte 0x0f, 0x38, 0x20 - .byte 0x31, 0x3c, 0x35 - .byte 0x0b, 0x0f, 0x2e - .byte 0x06, 0x06, 0x28 - .byte 0x25, 0x39, 0x23 - .byte 0x0a, 0x32, 0x15 - .byte 0x0f, 0x1d, 0x25 - .byte 0x0c, 0x0d, 0x34 - .byte 0x12, 0x2e, 0x21 - .byte 0x36, 0x18, 0x1f - .byte 0x1f, 0x34, 0x1b - .byte 0x05, 0x3a, 0x36 - .byte 0x2b, 0x01, 0x17 - .byte 0x0e, 0x16, 0x2b - .byte 0x0e, 0x0b, 0x26 - .byte 0x0d, 0x2d, 0x10 - .byte 0x21, 0x11, 0x27 - .byte 0x3d, 0x13, 0x32 - .byte 0x15, 0x25, 0x2a - .byte 0x1b, 0x2d, 0x35 - .byte 0x2c, 0x2b, 0x26 - .byte 0x26, 0x1f, 0x20 - .byte 0x22, 0x2b, 0x12 - .byte 0x3f, 0x3d, 0x27 - .byte 0x30, 0x0a, 0x36 - .byte 0x35, 0x1f, 0x17 - .byte 0x21, 0x08, 0x29 - .byte 0x1d, 0x20, 0x33 - .byte 0x34, 0x11, 0x16 - .byte 0x05, 0x38, 0x2d diff --git a/ld_script.txt b/ld_script.txt index dbff827d6..aeb11a271 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -479,7 +479,7 @@ SECTIONS { src/mail.o(.rodata); src/heal_location.o(.rodata); src/region_map.o(.rodata); - data/image_processing_effects.o(.rodata); + src/image_processing_effects.o(.rodata); src/battle_ai_script_commands.o(.rodata); data/fldeff_flash.o(.rodata); src/field_specials.o(.rodata); diff --git a/src/image_processing_effects.c b/src/image_processing_effects.c index c9ca4b16b..fdd62f7a5 100644 --- a/src/image_processing_effects.c +++ b/src/image_processing_effects.c @@ -49,7 +49,3208 @@ static u16 QuantizePixel_GrayscaleSmall(u16*); static u16 QuantizePixel_Grayscale(u16*); static u16 QuantizePixel_PrimaryColors(u16*); -extern const u8 gPointillismPoints[][3]; +static const u8 sPointillismPoints[][3] = { + {0x00, 0x1d, 0x1c}, + {0x0e, 0x1e, 0x1b}, + {0x00, 0x01, 0x32}, + {0x2e, 0x1e, 0x37}, + {0x0a, 0x22, 0x1f}, + {0x05, 0x26, 0x2e}, + {0x12, 0x17, 0x1e}, + {0x1a, 0x03, 0x11}, + {0x05, 0x11, 0x18}, + {0x05, 0x27, 0x2f}, + {0x1a, 0x3f, 0x12}, + {0x22, 0x3f, 0x16}, + {0x2b, 0x2f, 0x2e}, + {0x11, 0x02, 0x2d}, + {0x23, 0x0d, 0x28}, + {0x17, 0x0c, 0x19}, + {0x2f, 0x0e, 0x13}, + {0x30, 0x18, 0x20}, + {0x2d, 0x28, 0x22}, + {0x01, 0x03, 0x19}, + {0x0e, 0x2a, 0x2b}, + {0x22, 0x15, 0x25}, + {0x22, 0x0a, 0x26}, + {0x39, 0x06, 0x23}, + {0x16, 0x07, 0x2f}, + {0x22, 0x3a, 0x1b}, + {0x3b, 0x36, 0x35}, + {0x0a, 0x2b, 0x24}, + {0x36, 0x09, 0x12}, + {0x1c, 0x2f, 0x23}, + {0x2e, 0x38, 0x2c}, + {0x05, 0x2a, 0x20}, + {0x07, 0x14, 0x32}, + {0x31, 0x08, 0x17}, + {0x1a, 0x24, 0x2d}, + {0x22, 0x0a, 0x16}, + {0x1b, 0x26, 0x2b}, + {0x29, 0x16, 0x11}, + {0x35, 0x08, 0x14}, + {0x1e, 0x08, 0x14}, + {0x05, 0x31, 0x14}, + {0x38, 0x31, 0x17}, + {0x34, 0x33, 0x12}, + {0x11, 0x09, 0x1f}, + {0x28, 0x3d, 0x32}, + {0x35, 0x03, 0x1e}, + {0x3c, 0x2b, 0x2e}, + {0x10, 0x01, 0x17}, + {0x03, 0x3e, 0x22}, + {0x17, 0x18, 0x34}, + {0x08, 0x29, 0x19}, + {0x03, 0x24, 0x28}, + {0x3d, 0x33, 0x2f}, + {0x31, 0x24, 0x19}, + {0x1b, 0x18, 0x26}, + {0x07, 0x0d, 0x25}, + {0x2d, 0x3f, 0x12}, + {0x2f, 0x15, 0x25}, + {0x29, 0x0f, 0x12}, + {0x07, 0x2c, 0x12}, + {0x2c, 0x0b, 0x26}, + {0x12, 0x1a, 0x16}, + {0x00, 0x0b, 0x2f}, + {0x16, 0x35, 0x24}, + {0x1f, 0x1c, 0x22}, + {0x29, 0x33, 0x27}, + {0x3b, 0x30, 0x17}, + {0x11, 0x06, 0x35}, + {0x3e, 0x31, 0x2f}, + {0x11, 0x3a, 0x25}, + {0x2a, 0x02, 0x19}, + {0x33, 0x18, 0x35}, + {0x2a, 0x20, 0x21}, + {0x2e, 0x32, 0x1b}, + {0x3b, 0x1f, 0x23}, + {0x39, 0x29, 0x2a}, + {0x2e, 0x31, 0x29}, + {0x2a, 0x0e, 0x2d}, + {0x2d, 0x00, 0x1f}, + {0x38, 0x28, 0x1b}, + {0x14, 0x3b, 0x2b}, + {0x2e, 0x04, 0x26}, + {0x36, 0x30, 0x11}, + {0x3b, 0x21, 0x2d}, + {0x2b, 0x3f, 0x1b}, + {0x20, 0x13, 0x31}, + {0x33, 0x0c, 0x30}, + {0x22, 0x2b, 0x2b}, + {0x16, 0x02, 0x1e}, + {0x1c, 0x12, 0x1c}, + {0x0f, 0x3c, 0x36}, + {0x38, 0x10, 0x2d}, + {0x18, 0x2f, 0x2d}, + {0x35, 0x3b, 0x11}, + {0x37, 0x31, 0x13}, + {0x13, 0x3d, 0x2f}, + {0x1e, 0x2c, 0x33}, + {0x2e, 0x37, 0x12}, + {0x3c, 0x1f, 0x33}, + {0x32, 0x2a, 0x27}, + {0x0d, 0x3b, 0x1c}, + {0x35, 0x2a, 0x27}, + {0x09, 0x3d, 0x27}, + {0x12, 0x0b, 0x18}, + {0x0c, 0x15, 0x1d}, + {0x20, 0x01, 0x1c}, + {0x08, 0x3b, 0x1c}, + {0x12, 0x37, 0x33}, + {0x15, 0x03, 0x2c}, + {0x2a, 0x3b, 0x31}, + {0x0f, 0x04, 0x35}, + {0x08, 0x17, 0x33}, + {0x38, 0x3d, 0x2a}, + {0x2f, 0x35, 0x16}, + {0x10, 0x35, 0x16}, + {0x23, 0x13, 0x2c}, + {0x2f, 0x06, 0x20}, + {0x27, 0x3a, 0x24}, + {0x00, 0x1c, 0x2a}, + {0x03, 0x39, 0x1d}, + {0x28, 0x07, 0x1a}, + {0x20, 0x0a, 0x37}, + {0x07, 0x35, 0x2d}, + {0x15, 0x2f, 0x2c}, + {0x10, 0x2c, 0x23}, + {0x3f, 0x29, 0x14}, + {0x2a, 0x21, 0x36}, + {0x34, 0x1a, 0x2c}, + {0x1c, 0x3d, 0x33}, + {0x38, 0x2b, 0x22}, + {0x35, 0x28, 0x1f}, + {0x3d, 0x0f, 0x1c}, + {0x1e, 0x3e, 0x1b}, + {0x0c, 0x3e, 0x1f}, + {0x2b, 0x31, 0x2c}, + {0x32, 0x39, 0x11}, + {0x05, 0x09, 0x11}, + {0x04, 0x38, 0x2a}, + {0x32, 0x00, 0x16}, + {0x13, 0x0b, 0x31}, + {0x34, 0x2a, 0x13}, + {0x2c, 0x22, 0x21}, + {0x39, 0x2f, 0x15}, + {0x37, 0x28, 0x1e}, + {0x07, 0x3b, 0x2d}, + {0x11, 0x03, 0x28}, + {0x2d, 0x30, 0x1e}, + {0x31, 0x11, 0x11}, + {0x23, 0x01, 0x1e}, + {0x3d, 0x31, 0x34}, + {0x1c, 0x02, 0x34}, + {0x21, 0x0e, 0x25}, + {0x3d, 0x07, 0x17}, + {0x33, 0x15, 0x10}, + {0x29, 0x32, 0x32}, + {0x18, 0x1f, 0x30}, + {0x2d, 0x3b, 0x30}, + {0x27, 0x3e, 0x16}, + {0x31, 0x15, 0x12}, + {0x30, 0x25, 0x17}, + {0x33, 0x06, 0x34}, + {0x00, 0x29, 0x18}, + {0x3c, 0x03, 0x12}, + {0x2c, 0x0c, 0x11}, + {0x09, 0x30, 0x30}, + {0x10, 0x0e, 0x11}, + {0x27, 0x16, 0x1b}, + {0x0c, 0x3b, 0x2e}, + {0x2b, 0x33, 0x1e}, + {0x13, 0x2d, 0x2d}, + {0x11, 0x24, 0x29}, + {0x34, 0x3e, 0x2b}, + {0x24, 0x1e, 0x21}, + {0x27, 0x1a, 0x2d}, + {0x04, 0x39, 0x16}, + {0x3e, 0x33, 0x26}, + {0x1b, 0x2e, 0x25}, + {0x0c, 0x06, 0x19}, + {0x25, 0x19, 0x18}, + {0x1d, 0x33, 0x33}, + {0x1d, 0x28, 0x2d}, + {0x1c, 0x10, 0x2a}, + {0x1f, 0x35, 0x1e}, + {0x34, 0x02, 0x10}, + {0x2b, 0x3a, 0x14}, + {0x0d, 0x0b, 0x15}, + {0x0c, 0x2c, 0x10}, + {0x37, 0x3a, 0x19}, + {0x06, 0x13, 0x17}, + {0x24, 0x10, 0x25}, + {0x24, 0x04, 0x1e}, + {0x00, 0x35, 0x34}, + {0x3a, 0x00, 0x37}, + {0x3c, 0x07, 0x1a}, + {0x2b, 0x28, 0x36}, + {0x34, 0x39, 0x2f}, + {0x28, 0x09, 0x1f}, + {0x38, 0x31, 0x30}, + {0x16, 0x25, 0x31}, + {0x18, 0x28, 0x31}, + {0x18, 0x0c, 0x22}, + {0x06, 0x39, 0x2d}, + {0x3d, 0x20, 0x24}, + {0x2e, 0x27, 0x21}, + {0x3e, 0x18, 0x18}, + {0x15, 0x3c, 0x24}, + {0x06, 0x1b, 0x26}, + {0x15, 0x0e, 0x22}, + {0x0a, 0x0d, 0x1f}, + {0x18, 0x16, 0x34}, + {0x10, 0x28, 0x21}, + {0x20, 0x11, 0x11}, + {0x36, 0x32, 0x15}, + {0x3b, 0x2e, 0x24}, + {0x1f, 0x2d, 0x12}, + {0x36, 0x2e, 0x20}, + {0x0b, 0x17, 0x33}, + {0x26, 0x03, 0x1f}, + {0x08, 0x19, 0x31}, + {0x2a, 0x18, 0x25}, + {0x35, 0x2d, 0x2d}, + {0x30, 0x38, 0x18}, + {0x1c, 0x25, 0x14}, + {0x1c, 0x22, 0x28}, + {0x08, 0x23, 0x21}, + {0x26, 0x1e, 0x30}, + {0x19, 0x0f, 0x15}, + {0x10, 0x2f, 0x22}, + {0x12, 0x02, 0x25}, + {0x3c, 0x01, 0x1d}, + {0x0e, 0x14, 0x18}, + {0x0d, 0x18, 0x17}, + {0x22, 0x0b, 0x31}, + {0x13, 0x34, 0x21}, + {0x0f, 0x2d, 0x36}, + {0x39, 0x1f, 0x25}, + {0x18, 0x10, 0x1f}, + {0x2d, 0x20, 0x20}, + {0x19, 0x0b, 0x31}, + {0x33, 0x13, 0x14}, + {0x2e, 0x11, 0x21}, + {0x2d, 0x0a, 0x37}, + {0x07, 0x15, 0x1b}, + {0x32, 0x04, 0x32}, + {0x06, 0x18, 0x1b}, + {0x13, 0x24, 0x12}, + {0x36, 0x22, 0x16}, + {0x1d, 0x29, 0x1c}, + {0x35, 0x17, 0x21}, + {0x36, 0x17, 0x2b}, + {0x35, 0x32, 0x19}, + {0x2a, 0x0f, 0x2e}, + {0x10, 0x00, 0x34}, + {0x02, 0x0e, 0x28}, + {0x31, 0x32, 0x32}, + {0x3b, 0x05, 0x20}, + {0x36, 0x26, 0x12}, + {0x34, 0x06, 0x34}, + {0x1e, 0x31, 0x32}, + {0x35, 0x05, 0x34}, + {0x1e, 0x13, 0x15}, + {0x15, 0x14, 0x2c}, + {0x29, 0x1c, 0x18}, + {0x24, 0x24, 0x12}, + {0x22, 0x29, 0x18}, + {0x34, 0x36, 0x30}, + {0x1e, 0x01, 0x23}, + {0x0c, 0x3c, 0x24}, + {0x0a, 0x3d, 0x16}, + {0x27, 0x1e, 0x23}, + {0x15, 0x02, 0x12}, + {0x11, 0x19, 0x2a}, + {0x1d, 0x31, 0x15}, + {0x03, 0x3b, 0x2a}, + {0x21, 0x19, 0x2c}, + {0x0a, 0x23, 0x11}, + {0x25, 0x11, 0x1a}, + {0x1a, 0x0a, 0x34}, + {0x3b, 0x0b, 0x33}, + {0x21, 0x0b, 0x37}, + {0x01, 0x31, 0x28}, + {0x35, 0x1d, 0x27}, + {0x2c, 0x30, 0x31}, + {0x2e, 0x39, 0x2d}, + {0x30, 0x05, 0x2c}, + {0x12, 0x2a, 0x2b}, + {0x39, 0x22, 0x20}, + {0x15, 0x34, 0x1c}, + {0x1c, 0x01, 0x15}, + {0x20, 0x16, 0x22}, + {0x13, 0x04, 0x18}, + {0x1e, 0x13, 0x10}, + {0x25, 0x33, 0x15}, + {0x39, 0x03, 0x31}, + {0x3f, 0x36, 0x18}, + {0x14, 0x23, 0x10}, + {0x2f, 0x1e, 0x1f}, + {0x1f, 0x17, 0x2c}, + {0x02, 0x16, 0x31}, + {0x20, 0x18, 0x30}, + {0x2e, 0x18, 0x37}, + {0x3b, 0x0e, 0x30}, + {0x10, 0x39, 0x24}, + {0x26, 0x39, 0x1e}, + {0x30, 0x26, 0x2e}, + {0x12, 0x01, 0x14}, + {0x37, 0x2a, 0x2e}, + {0x21, 0x06, 0x1d}, + {0x2a, 0x16, 0x32}, + {0x09, 0x38, 0x1c}, + {0x07, 0x22, 0x17}, + {0x3b, 0x2d, 0x15}, + {0x07, 0x1e, 0x2e}, + {0x1b, 0x2e, 0x1d}, + {0x04, 0x09, 0x30}, + {0x30, 0x2d, 0x37}, + {0x2d, 0x34, 0x24}, + {0x18, 0x24, 0x25}, + {0x0e, 0x2d, 0x26}, + {0x23, 0x0a, 0x16}, + {0x12, 0x2d, 0x11}, + {0x21, 0x28, 0x2e}, + {0x0f, 0x01, 0x21}, + {0x01, 0x31, 0x12}, + {0x3f, 0x1b, 0x1e}, + {0x21, 0x25, 0x2b}, + {0x26, 0x18, 0x13}, + {0x15, 0x2d, 0x34}, + {0x23, 0x21, 0x36}, + {0x0e, 0x2e, 0x1c}, + {0x14, 0x22, 0x1c}, + {0x2c, 0x0b, 0x28}, + {0x1a, 0x18, 0x21}, + {0x21, 0x07, 0x1a}, + {0x24, 0x26, 0x29}, + {0x2b, 0x0a, 0x34}, + {0x3e, 0x27, 0x33}, + {0x12, 0x34, 0x1b}, + {0x1f, 0x01, 0x2a}, + {0x2e, 0x06, 0x23}, + {0x2f, 0x1f, 0x14}, + {0x18, 0x06, 0x26}, + {0x31, 0x1f, 0x2b}, + {0x22, 0x26, 0x2e}, + {0x1e, 0x15, 0x16}, + {0x20, 0x22, 0x28}, + {0x15, 0x37, 0x12}, + {0x25, 0x04, 0x2c}, + {0x1f, 0x04, 0x2e}, + {0x0c, 0x13, 0x18}, + {0x07, 0x0b, 0x36}, + {0x1d, 0x1c, 0x2a}, + {0x30, 0x22, 0x1c}, + {0x2e, 0x12, 0x2f}, + {0x2b, 0x21, 0x1e}, + {0x16, 0x38, 0x30}, + {0x04, 0x02, 0x16}, + {0x05, 0x14, 0x20}, + {0x38, 0x3c, 0x33}, + {0x21, 0x1b, 0x2f}, + {0x14, 0x2a, 0x27}, + {0x38, 0x14, 0x1b}, + {0x2b, 0x1f, 0x2b}, + {0x29, 0x2b, 0x25}, + {0x27, 0x36, 0x21}, + {0x11, 0x22, 0x1b}, + {0x29, 0x03, 0x1b}, + {0x18, 0x24, 0x28}, + {0x21, 0x2d, 0x36}, + {0x3c, 0x2c, 0x24}, + {0x33, 0x17, 0x1f}, + {0x2a, 0x3a, 0x21}, + {0x0a, 0x23, 0x37}, + {0x00, 0x0b, 0x21}, + {0x11, 0x38, 0x19}, + {0x0f, 0x0e, 0x1c}, + {0x1f, 0x0f, 0x37}, + {0x3c, 0x10, 0x37}, + {0x38, 0x31, 0x35}, + {0x07, 0x15, 0x28}, + {0x1e, 0x2e, 0x19}, + {0x26, 0x10, 0x33}, + {0x3d, 0x35, 0x2f}, + {0x3a, 0x04, 0x34}, + {0x0d, 0x18, 0x1a}, + {0x01, 0x2d, 0x15}, + {0x3d, 0x1a, 0x17}, + {0x17, 0x3f, 0x32}, + {0x0b, 0x21, 0x11}, + {0x1e, 0x26, 0x2b}, + {0x0d, 0x19, 0x24}, + {0x2e, 0x04, 0x1b}, + {0x1b, 0x33, 0x20}, + {0x15, 0x21, 0x1d}, + {0x1f, 0x04, 0x21}, + {0x0f, 0x12, 0x1f}, + {0x2d, 0x2a, 0x32}, + {0x03, 0x37, 0x1f}, + {0x35, 0x07, 0x27}, + {0x24, 0x1f, 0x31}, + {0x2f, 0x30, 0x15}, + {0x06, 0x00, 0x24}, + {0x0b, 0x22, 0x1a}, + {0x0c, 0x3b, 0x29}, + {0x14, 0x1a, 0x17}, + {0x37, 0x20, 0x25}, + {0x3f, 0x26, 0x37}, + {0x3a, 0x3e, 0x10}, + {0x22, 0x04, 0x11}, + {0x28, 0x12, 0x1c}, + {0x03, 0x2e, 0x2e}, + {0x0e, 0x38, 0x28}, + {0x01, 0x29, 0x22}, + {0x1e, 0x33, 0x19}, + {0x06, 0x21, 0x27}, + {0x33, 0x19, 0x1a}, + {0x02, 0x05, 0x17}, + {0x11, 0x11, 0x2c}, + {0x1f, 0x26, 0x1e}, + {0x39, 0x1f, 0x28}, + {0x2e, 0x2f, 0x12}, + {0x22, 0x34, 0x13}, + {0x3b, 0x26, 0x2f}, + {0x34, 0x00, 0x14}, + {0x10, 0x31, 0x11}, + {0x1d, 0x2d, 0x2a}, + {0x08, 0x08, 0x37}, + {0x15, 0x18, 0x34}, + {0x04, 0x2b, 0x24}, + {0x2f, 0x1e, 0x27}, + {0x22, 0x2a, 0x24}, + {0x07, 0x14, 0x25}, + {0x01, 0x27, 0x19}, + {0x29, 0x0a, 0x29}, + {0x3d, 0x1c, 0x2f}, + {0x0d, 0x1f, 0x1c}, + {0x24, 0x3d, 0x32}, + {0x36, 0x1d, 0x24}, + {0x14, 0x21, 0x16}, + {0x1a, 0x0d, 0x29}, + {0x3f, 0x2b, 0x2a}, + {0x1a, 0x3e, 0x35}, + {0x11, 0x28, 0x18}, + {0x32, 0x05, 0x15}, + {0x21, 0x2e, 0x34}, + {0x2d, 0x14, 0x2a}, + {0x3c, 0x08, 0x37}, + {0x3f, 0x34, 0x1e}, + {0x27, 0x24, 0x1c}, + {0x16, 0x16, 0x33}, + {0x29, 0x3b, 0x19}, + {0x36, 0x2f, 0x1c}, + {0x03, 0x25, 0x2c}, + {0x0b, 0x16, 0x36}, + {0x1c, 0x1d, 0x1b}, + {0x2c, 0x27, 0x1b}, + {0x0b, 0x1f, 0x2b}, + {0x08, 0x10, 0x27}, + {0x3f, 0x25, 0x2f}, + {0x33, 0x13, 0x1f}, + {0x04, 0x31, 0x37}, + {0x0e, 0x2f, 0x12}, + {0x08, 0x23, 0x20}, + {0x3a, 0x1a, 0x1e}, + {0x2f, 0x0b, 0x1f}, + {0x1e, 0x20, 0x19}, + {0x23, 0x3b, 0x14}, + {0x25, 0x00, 0x27}, + {0x14, 0x04, 0x25}, + {0x36, 0x1a, 0x2b}, + {0x27, 0x21, 0x15}, + {0x28, 0x13, 0x2c}, + {0x0e, 0x3c, 0x35}, + {0x0c, 0x2d, 0x2b}, + {0x37, 0x16, 0x15}, + {0x29, 0x15, 0x1d}, + {0x17, 0x34, 0x36}, + {0x09, 0x0a, 0x31}, + {0x37, 0x22, 0x28}, + {0x17, 0x2b, 0x35}, + {0x14, 0x2b, 0x12}, + {0x08, 0x13, 0x1f}, + {0x31, 0x13, 0x28}, + {0x06, 0x07, 0x35}, + {0x23, 0x3a, 0x29}, + {0x0f, 0x24, 0x2e}, + {0x07, 0x35, 0x26}, + {0x0e, 0x12, 0x15}, + {0x23, 0x33, 0x2c}, + {0x0e, 0x21, 0x26}, + {0x1c, 0x12, 0x25}, + {0x23, 0x1d, 0x2f}, + {0x04, 0x35, 0x33}, + {0x16, 0x01, 0x24}, + {0x3d, 0x2c, 0x2e}, + {0x35, 0x0a, 0x25}, + {0x11, 0x13, 0x25}, + {0x1b, 0x1b, 0x15}, + {0x15, 0x39, 0x10}, + {0x0b, 0x35, 0x24}, + {0x3a, 0x27, 0x30}, + {0x2e, 0x2f, 0x15}, + {0x10, 0x1f, 0x35}, + {0x1b, 0x28, 0x35}, + {0x26, 0x30, 0x37}, + {0x34, 0x37, 0x2b}, + {0x0f, 0x30, 0x29}, + {0x2e, 0x3f, 0x2b}, + {0x38, 0x34, 0x2b}, + {0x2b, 0x2f, 0x25}, + {0x0d, 0x28, 0x2a}, + {0x33, 0x18, 0x10}, + {0x21, 0x12, 0x11}, + {0x1f, 0x22, 0x34}, + {0x11, 0x25, 0x23}, + {0x21, 0x3f, 0x11}, + {0x26, 0x27, 0x25}, + {0x28, 0x36, 0x12}, + {0x15, 0x26, 0x32}, + {0x11, 0x18, 0x24}, + {0x32, 0x25, 0x37}, + {0x27, 0x3a, 0x33}, + {0x35, 0x07, 0x1c}, + {0x1a, 0x0e, 0x2a}, + {0x1e, 0x2f, 0x1f}, + {0x00, 0x2e, 0x21}, + {0x1b, 0x3c, 0x14}, + {0x2f, 0x3a, 0x2f}, + {0x3e, 0x38, 0x15}, + {0x1a, 0x13, 0x2f}, + {0x29, 0x0d, 0x2f}, + {0x37, 0x17, 0x18}, + {0x30, 0x1c, 0x35}, + {0x15, 0x34, 0x14}, + {0x28, 0x11, 0x2c}, + {0x2c, 0x25, 0x2a}, + {0x20, 0x3f, 0x28}, + {0x0c, 0x34, 0x1b}, + {0x30, 0x2e, 0x25}, + {0x37, 0x1c, 0x24}, + {0x1f, 0x25, 0x26}, + {0x0c, 0x19, 0x34}, + {0x18, 0x10, 0x35}, + {0x0a, 0x13, 0x11}, + {0x25, 0x13, 0x20}, + {0x13, 0x19, 0x11}, + {0x20, 0x28, 0x1d}, + {0x3e, 0x30, 0x1b}, + {0x23, 0x24, 0x21}, + {0x0d, 0x23, 0x23}, + {0x1d, 0x28, 0x2e}, + {0x2d, 0x12, 0x1f}, + {0x0e, 0x2e, 0x2b}, + {0x0b, 0x31, 0x32}, + {0x24, 0x3c, 0x2c}, + {0x13, 0x3c, 0x12}, + {0x28, 0x16, 0x2a}, + {0x05, 0x0c, 0x32}, + {0x39, 0x0b, 0x32}, + {0x21, 0x04, 0x14}, + {0x10, 0x31, 0x32}, + {0x12, 0x1f, 0x23}, + {0x39, 0x2e, 0x2e}, + {0x22, 0x3d, 0x27}, + {0x0c, 0x1e, 0x18}, + {0x25, 0x00, 0x17}, + {0x06, 0x31, 0x14}, + {0x13, 0x21, 0x1a}, + {0x14, 0x20, 0x35}, + {0x0a, 0x3b, 0x25}, + {0x33, 0x08, 0x28}, + {0x3d, 0x02, 0x33}, + {0x23, 0x00, 0x13}, + {0x22, 0x21, 0x28}, + {0x30, 0x14, 0x2e}, + {0x14, 0x32, 0x36}, + {0x39, 0x23, 0x1e}, + {0x1c, 0x11, 0x30}, + {0x37, 0x16, 0x30}, + {0x15, 0x31, 0x1f}, + {0x34, 0x28, 0x2c}, + {0x35, 0x05, 0x29}, + {0x37, 0x33, 0x2a}, + {0x1c, 0x17, 0x2e}, + {0x10, 0x06, 0x16}, + {0x32, 0x1f, 0x2f}, + {0x00, 0x29, 0x1e}, + {0x04, 0x01, 0x16}, + {0x3b, 0x23, 0x1e}, + {0x1b, 0x34, 0x2a}, + {0x30, 0x11, 0x2b}, + {0x03, 0x00, 0x1f}, + {0x1d, 0x37, 0x1a}, + {0x3a, 0x18, 0x25}, + {0x1c, 0x16, 0x2c}, + {0x04, 0x3f, 0x33}, + {0x26, 0x23, 0x2d}, + {0x15, 0x2c, 0x27}, + {0x02, 0x35, 0x27}, + {0x07, 0x35, 0x33}, + {0x1a, 0x0c, 0x10}, + {0x28, 0x26, 0x2c}, + {0x2f, 0x36, 0x16}, + {0x37, 0x0b, 0x27}, + {0x1b, 0x3d, 0x18}, + {0x27, 0x1f, 0x20}, + {0x2b, 0x2a, 0x33}, + {0x0b, 0x0f, 0x20}, + {0x35, 0x3c, 0x2f}, + {0x33, 0x21, 0x15}, + {0x2d, 0x26, 0x34}, + {0x1f, 0x1a, 0x21}, + {0x2f, 0x2c, 0x2a}, + {0x1a, 0x32, 0x1a}, + {0x3b, 0x3f, 0x21}, + {0x13, 0x3f, 0x13}, + {0x0f, 0x24, 0x22}, + {0x14, 0x1b, 0x10}, + {0x21, 0x06, 0x28}, + {0x25, 0x34, 0x10}, + {0x2e, 0x0e, 0x14}, + {0x3c, 0x3e, 0x25}, + {0x16, 0x06, 0x30}, + {0x0b, 0x04, 0x1f}, + {0x3e, 0x02, 0x24}, + {0x0c, 0x17, 0x25}, + {0x2b, 0x3c, 0x2d}, + {0x15, 0x36, 0x33}, + {0x18, 0x23, 0x2a}, + {0x1d, 0x10, 0x2a}, + {0x35, 0x17, 0x28}, + {0x00, 0x37, 0x24}, + {0x0a, 0x3b, 0x15}, + {0x1d, 0x0b, 0x1f}, + {0x3c, 0x31, 0x25}, + {0x1d, 0x0f, 0x1d}, + {0x20, 0x13, 0x34}, + {0x11, 0x2b, 0x2e}, + {0x23, 0x0c, 0x2e}, + {0x24, 0x02, 0x14}, + {0x31, 0x16, 0x19}, + {0x0e, 0x23, 0x35}, + {0x1a, 0x10, 0x16}, + {0x14, 0x04, 0x19}, + {0x2d, 0x27, 0x37}, + {0x33, 0x02, 0x31}, + {0x02, 0x04, 0x16}, + {0x0d, 0x22, 0x25}, + {0x25, 0x00, 0x16}, + {0x2a, 0x3f, 0x26}, + {0x20, 0x0c, 0x12}, + {0x2f, 0x2e, 0x35}, + {0x1b, 0x0d, 0x22}, + {0x1e, 0x01, 0x34}, + {0x05, 0x22, 0x21}, + {0x34, 0x2a, 0x32}, + {0x0b, 0x09, 0x1d}, + {0x3f, 0x32, 0x2f}, + {0x3d, 0x18, 0x2d}, + {0x0b, 0x38, 0x36}, + {0x39, 0x17, 0x28}, + {0x34, 0x04, 0x24}, + {0x36, 0x0e, 0x2a}, + {0x38, 0x01, 0x14}, + {0x3c, 0x24, 0x22}, + {0x21, 0x03, 0x18}, + {0x32, 0x2f, 0x12}, + {0x29, 0x24, 0x31}, + {0x0a, 0x3b, 0x12}, + {0x1a, 0x1c, 0x20}, + {0x30, 0x31, 0x1b}, + {0x1a, 0x21, 0x10}, + {0x05, 0x29, 0x10}, + {0x26, 0x2d, 0x13}, + {0x16, 0x0c, 0x1d}, + {0x2b, 0x06, 0x1b}, + {0x06, 0x12, 0x14}, + {0x38, 0x0f, 0x35}, + {0x23, 0x3a, 0x2c}, + {0x00, 0x19, 0x33}, + {0x29, 0x14, 0x2d}, + {0x2a, 0x21, 0x29}, + {0x14, 0x31, 0x14}, + {0x1a, 0x06, 0x1e}, + {0x18, 0x1b, 0x28}, + {0x3b, 0x16, 0x29}, + {0x15, 0x1e, 0x12}, + {0x34, 0x0a, 0x14}, + {0x1b, 0x05, 0x27}, + {0x0b, 0x01, 0x26}, + {0x2a, 0x22, 0x35}, + {0x21, 0x20, 0x18}, + {0x20, 0x37, 0x17}, + {0x14, 0x1f, 0x11}, + {0x1d, 0x11, 0x25}, + {0x24, 0x2b, 0x2f}, + {0x07, 0x3f, 0x1f}, + {0x2c, 0x25, 0x25}, + {0x2a, 0x29, 0x18}, + {0x11, 0x24, 0x28}, + {0x31, 0x2c, 0x2a}, + {0x39, 0x0b, 0x26}, + {0x28, 0x10, 0x26}, + {0x22, 0x06, 0x16}, + {0x09, 0x2c, 0x13}, + {0x34, 0x19, 0x15}, + {0x3a, 0x12, 0x21}, + {0x1d, 0x38, 0x23}, + {0x12, 0x25, 0x24}, + {0x21, 0x30, 0x12}, + {0x37, 0x1a, 0x12}, + {0x24, 0x3b, 0x25}, + {0x32, 0x15, 0x23}, + {0x0d, 0x1a, 0x10}, + {0x16, 0x2e, 0x26}, + {0x1d, 0x14, 0x16}, + {0x3e, 0x2e, 0x1f}, + {0x0a, 0x16, 0x10}, + {0x1d, 0x30, 0x2b}, + {0x04, 0x3a, 0x19}, + {0x08, 0x2d, 0x2e}, + {0x28, 0x1e, 0x33}, + {0x0a, 0x12, 0x2e}, + {0x0d, 0x03, 0x2f}, + {0x26, 0x3a, 0x1e}, + {0x35, 0x3b, 0x2a}, + {0x03, 0x1a, 0x18}, + {0x3f, 0x0b, 0x27}, + {0x04, 0x05, 0x34}, + {0x36, 0x0b, 0x27}, + {0x3b, 0x17, 0x11}, + {0x0d, 0x27, 0x26}, + {0x2c, 0x1f, 0x20}, + {0x26, 0x10, 0x20}, + {0x25, 0x23, 0x2d}, + {0x37, 0x09, 0x13}, + {0x14, 0x17, 0x2d}, + {0x2e, 0x3d, 0x23}, + {0x1d, 0x1a, 0x1f}, + {0x21, 0x33, 0x2e}, + {0x28, 0x17, 0x13}, + {0x26, 0x3c, 0x36}, + {0x14, 0x1a, 0x33}, + {0x32, 0x20, 0x2b}, + {0x19, 0x3e, 0x20}, + {0x0c, 0x02, 0x2d}, + {0x3c, 0x3c, 0x2a}, + {0x30, 0x30, 0x28}, + {0x25, 0x3f, 0x1e}, + {0x03, 0x17, 0x1e}, + {0x35, 0x11, 0x1c}, + {0x1b, 0x14, 0x2a}, + {0x28, 0x3a, 0x23}, + {0x0e, 0x1f, 0x12}, + {0x36, 0x21, 0x20}, + {0x07, 0x3b, 0x10}, + {0x23, 0x19, 0x34}, + {0x0d, 0x2e, 0x18}, + {0x3f, 0x20, 0x25}, + {0x3e, 0x3b, 0x15}, + {0x0b, 0x2e, 0x12}, + {0x37, 0x0b, 0x23}, + {0x3d, 0x32, 0x1f}, + {0x16, 0x03, 0x27}, + {0x14, 0x0c, 0x21}, + {0x18, 0x03, 0x30}, + {0x3e, 0x21, 0x13}, + {0x0f, 0x00, 0x32}, + {0x3f, 0x23, 0x16}, + {0x0e, 0x31, 0x1d}, + {0x18, 0x1c, 0x1d}, + {0x30, 0x0e, 0x1e}, + {0x21, 0x20, 0x23}, + {0x3f, 0x0c, 0x1e}, + {0x14, 0x33, 0x22}, + {0x22, 0x21, 0x15}, + {0x36, 0x05, 0x1e}, + {0x1d, 0x31, 0x14}, + {0x20, 0x11, 0x37}, + {0x0d, 0x33, 0x19}, + {0x25, 0x05, 0x36}, + {0x1e, 0x31, 0x20}, + {0x35, 0x3a, 0x2f}, + {0x32, 0x2f, 0x30}, + {0x14, 0x23, 0x2d}, + {0x35, 0x1e, 0x29}, + {0x05, 0x05, 0x1b}, + {0x09, 0x1f, 0x26}, + {0x2f, 0x0b, 0x15}, + {0x15, 0x11, 0x13}, + {0x29, 0x1b, 0x18}, + {0x1c, 0x13, 0x35}, + {0x34, 0x31, 0x23}, + {0x27, 0x3f, 0x2f}, + {0x09, 0x30, 0x19}, + {0x23, 0x12, 0x34}, + {0x02, 0x2a, 0x21}, + {0x09, 0x3c, 0x1d}, + {0x0c, 0x02, 0x10}, + {0x22, 0x05, 0x17}, + {0x22, 0x08, 0x1b}, + {0x0a, 0x0f, 0x15}, + {0x02, 0x11, 0x13}, + {0x01, 0x21, 0x22}, + {0x16, 0x39, 0x33}, + {0x24, 0x38, 0x34}, + {0x0f, 0x1e, 0x2b}, + {0x2b, 0x15, 0x15}, + {0x20, 0x22, 0x2e}, + {0x3a, 0x3f, 0x31}, + {0x1a, 0x27, 0x2b}, + {0x29, 0x34, 0x14}, + {0x16, 0x39, 0x2f}, + {0x13, 0x3e, 0x16}, + {0x36, 0x21, 0x30}, + {0x00, 0x24, 0x2b}, + {0x24, 0x21, 0x30}, + {0x15, 0x31, 0x13}, + {0x10, 0x37, 0x24}, + {0x08, 0x07, 0x23}, + {0x21, 0x09, 0x25}, + {0x05, 0x3c, 0x32}, + {0x19, 0x03, 0x25}, + {0x0f, 0x29, 0x2b}, + {0x16, 0x07, 0x13}, + {0x3e, 0x3d, 0x25}, + {0x36, 0x0b, 0x28}, + {0x2e, 0x2b, 0x16}, + {0x0c, 0x31, 0x11}, + {0x30, 0x13, 0x2d}, + {0x26, 0x3e, 0x37}, + {0x29, 0x2f, 0x2e}, + {0x15, 0x3d, 0x17}, + {0x1c, 0x2e, 0x21}, + {0x33, 0x2f, 0x10}, + {0x0d, 0x05, 0x1d}, + {0x1c, 0x1a, 0x12}, + {0x0e, 0x18, 0x37}, + {0x1b, 0x11, 0x14}, + {0x06, 0x14, 0x21}, + {0x31, 0x0e, 0x27}, + {0x1a, 0x03, 0x10}, + {0x00, 0x34, 0x31}, + {0x3f, 0x0b, 0x1d}, + {0x0f, 0x12, 0x1f}, + {0x1a, 0x15, 0x10}, + {0x0f, 0x00, 0x24}, + {0x3e, 0x0a, 0x2a}, + {0x30, 0x2b, 0x24}, + {0x26, 0x31, 0x10}, + {0x2d, 0x2f, 0x2f}, + {0x3f, 0x0c, 0x13}, + {0x12, 0x0b, 0x16}, + {0x15, 0x07, 0x1f}, + {0x28, 0x10, 0x32}, + {0x0f, 0x17, 0x15}, + {0x0b, 0x27, 0x33}, + {0x34, 0x1d, 0x10}, + {0x1c, 0x3a, 0x12}, + {0x2c, 0x27, 0x37}, + {0x0a, 0x1a, 0x32}, + {0x05, 0x1f, 0x21}, + {0x24, 0x0d, 0x1f}, + {0x1c, 0x17, 0x24}, + {0x2f, 0x3b, 0x32}, + {0x3b, 0x25, 0x10}, + {0x03, 0x2f, 0x21}, + {0x0c, 0x10, 0x23}, + {0x0e, 0x3a, 0x2c}, + {0x33, 0x03, 0x2c}, + {0x12, 0x06, 0x1c}, + {0x2a, 0x37, 0x30}, + {0x3f, 0x01, 0x1e}, + {0x35, 0x16, 0x37}, + {0x2c, 0x32, 0x35}, + {0x05, 0x11, 0x22}, + {0x29, 0x09, 0x20}, + {0x2b, 0x0d, 0x1f}, + {0x18, 0x0d, 0x20}, + {0x23, 0x39, 0x16}, + {0x0f, 0x3a, 0x18}, + {0x21, 0x35, 0x2b}, + {0x36, 0x26, 0x2b}, + {0x23, 0x05, 0x2f}, + {0x1b, 0x08, 0x17}, + {0x3e, 0x09, 0x16}, + {0x2d, 0x3a, 0x37}, + {0x15, 0x35, 0x35}, + {0x29, 0x0a, 0x12}, + {0x02, 0x39, 0x1f}, + {0x14, 0x34, 0x33}, + {0x17, 0x1d, 0x18}, + {0x16, 0x1d, 0x1a}, + {0x01, 0x39, 0x22}, + {0x1e, 0x27, 0x36}, + {0x32, 0x14, 0x26}, + {0x0a, 0x39, 0x36}, + {0x1f, 0x0d, 0x1e}, + {0x0b, 0x0a, 0x19}, + {0x35, 0x1d, 0x34}, + {0x03, 0x12, 0x16}, + {0x0c, 0x13, 0x2e}, + {0x0c, 0x34, 0x1e}, + {0x10, 0x14, 0x1e}, + {0x23, 0x32, 0x27}, + {0x02, 0x10, 0x29}, + {0x35, 0x18, 0x33}, + {0x33, 0x1d, 0x1a}, + {0x3c, 0x15, 0x23}, + {0x3e, 0x3f, 0x22}, + {0x2a, 0x02, 0x2c}, + {0x28, 0x0a, 0x2f}, + {0x1a, 0x06, 0x35}, + {0x3c, 0x17, 0x2b}, + {0x03, 0x12, 0x17}, + {0x2f, 0x0a, 0x26}, + {0x12, 0x38, 0x11}, + {0x36, 0x1b, 0x23}, + {0x01, 0x39, 0x35}, + {0x19, 0x19, 0x17}, + {0x09, 0x28, 0x22}, + {0x1e, 0x27, 0x2c}, + {0x35, 0x33, 0x2c}, + {0x27, 0x25, 0x31}, + {0x06, 0x31, 0x2d}, + {0x1a, 0x39, 0x28}, + {0x2d, 0x04, 0x1e}, + {0x24, 0x3e, 0x1c}, + {0x3c, 0x30, 0x1b}, + {0x3f, 0x3e, 0x37}, + {0x22, 0x36, 0x11}, + {0x00, 0x01, 0x1c}, + {0x12, 0x1a, 0x10}, + {0x12, 0x1e, 0x2c}, + {0x1f, 0x12, 0x2a}, + {0x2f, 0x06, 0x19}, + {0x35, 0x1a, 0x18}, + {0x3b, 0x09, 0x36}, + {0x34, 0x1d, 0x13}, + {0x02, 0x07, 0x10}, + {0x20, 0x2f, 0x1d}, + {0x0b, 0x03, 0x33}, + {0x1c, 0x16, 0x31}, + {0x05, 0x13, 0x1b}, + {0x29, 0x06, 0x13}, + {0x30, 0x2d, 0x36}, + {0x2a, 0x2d, 0x2c}, + {0x19, 0x34, 0x1c}, + {0x0f, 0x15, 0x12}, + {0x36, 0x15, 0x2c}, + {0x3a, 0x06, 0x1c}, + {0x12, 0x1d, 0x26}, + {0x03, 0x38, 0x1d}, + {0x01, 0x01, 0x2d}, + {0x17, 0x2e, 0x10}, + {0x14, 0x17, 0x1c}, + {0x34, 0x0f, 0x28}, + {0x09, 0x37, 0x1b}, + {0x28, 0x1d, 0x26}, + {0x29, 0x2d, 0x36}, + {0x1e, 0x17, 0x28}, + {0x15, 0x0f, 0x1c}, + {0x20, 0x2d, 0x10}, + {0x27, 0x16, 0x2e}, + {0x14, 0x09, 0x12}, + {0x3b, 0x3d, 0x21}, + {0x25, 0x1a, 0x2c}, + {0x00, 0x22, 0x36}, + {0x0d, 0x30, 0x10}, + {0x17, 0x19, 0x1b}, + {0x00, 0x3b, 0x21}, + {0x2a, 0x28, 0x34}, + {0x2d, 0x0f, 0x16}, + {0x0a, 0x30, 0x28}, + {0x06, 0x00, 0x25}, + {0x31, 0x2e, 0x2a}, + {0x14, 0x33, 0x28}, + {0x36, 0x10, 0x2e}, + {0x05, 0x2e, 0x19}, + {0x19, 0x1a, 0x15}, + {0x2c, 0x14, 0x17}, + {0x37, 0x0f, 0x13}, + {0x32, 0x17, 0x1b}, + {0x39, 0x18, 0x32}, + {0x2e, 0x32, 0x1e}, + {0x24, 0x1d, 0x31}, + {0x12, 0x1d, 0x2b}, + {0x14, 0x0c, 0x27}, + {0x36, 0x2e, 0x32}, + {0x06, 0x0a, 0x1a}, + {0x28, 0x28, 0x20}, + {0x3a, 0x3a, 0x17}, + {0x08, 0x27, 0x36}, + {0x18, 0x1a, 0x10}, + {0x1e, 0x26, 0x1b}, + {0x1f, 0x33, 0x1f}, + {0x21, 0x17, 0x2f}, + {0x01, 0x08, 0x20}, + {0x35, 0x03, 0x19}, + {0x3b, 0x02, 0x20}, + {0x02, 0x2d, 0x23}, + {0x0e, 0x17, 0x32}, + {0x31, 0x29, 0x11}, + {0x22, 0x17, 0x22}, + {0x3a, 0x2c, 0x23}, + {0x34, 0x20, 0x18}, + {0x00, 0x3a, 0x22}, + {0x25, 0x33, 0x21}, + {0x33, 0x04, 0x27}, + {0x04, 0x18, 0x32}, + {0x2c, 0x0c, 0x2f}, + {0x28, 0x14, 0x2c}, + {0x3f, 0x30, 0x2b}, + {0x30, 0x21, 0x1d}, + {0x01, 0x25, 0x32}, + {0x05, 0x23, 0x34}, + {0x24, 0x10, 0x30}, + {0x3d, 0x14, 0x1b}, + {0x3f, 0x38, 0x2f}, + {0x22, 0x1b, 0x32}, + {0x25, 0x07, 0x37}, + {0x0a, 0x0c, 0x1d}, + {0x03, 0x1e, 0x1a}, + {0x0f, 0x3c, 0x12}, + {0x11, 0x18, 0x1d}, + {0x00, 0x35, 0x2f}, + {0x32, 0x18, 0x14}, + {0x23, 0x30, 0x1b}, + {0x11, 0x3d, 0x12}, + {0x1a, 0x16, 0x35}, + {0x28, 0x05, 0x24}, + {0x17, 0x3d, 0x37}, + {0x2e, 0x09, 0x2e}, + {0x18, 0x1d, 0x17}, + {0x20, 0x1f, 0x18}, + {0x23, 0x2c, 0x2f}, + {0x20, 0x3f, 0x16}, + {0x3f, 0x29, 0x2e}, + {0x23, 0x3b, 0x29}, + {0x18, 0x39, 0x13}, + {0x1e, 0x32, 0x35}, + {0x14, 0x1d, 0x2a}, + {0x35, 0x01, 0x1d}, + {0x3e, 0x3b, 0x1e}, + {0x22, 0x1e, 0x16}, + {0x18, 0x22, 0x12}, + {0x3e, 0x29, 0x33}, + {0x2f, 0x14, 0x19}, + {0x3b, 0x07, 0x15}, + {0x06, 0x3d, 0x29}, + {0x35, 0x37, 0x23}, + {0x34, 0x1d, 0x2d}, + {0x18, 0x12, 0x1b}, + {0x0b, 0x13, 0x24}, + {0x13, 0x38, 0x1c}, + {0x1f, 0x0b, 0x1b}, + {0x13, 0x21, 0x1c}, + {0x06, 0x39, 0x32}, + {0x37, 0x3d, 0x26}, + {0x29, 0x26, 0x15}, + {0x3c, 0x33, 0x27}, + {0x00, 0x01, 0x2e}, + {0x15, 0x18, 0x31}, + {0x0d, 0x2c, 0x13}, + {0x27, 0x3b, 0x20}, + {0x2d, 0x01, 0x26}, + {0x23, 0x15, 0x30}, + {0x24, 0x00, 0x17}, + {0x37, 0x3f, 0x33}, + {0x25, 0x24, 0x31}, + {0x06, 0x3b, 0x37}, + {0x03, 0x18, 0x1a}, + {0x2c, 0x34, 0x14}, + {0x1d, 0x36, 0x18}, + {0x3a, 0x04, 0x23}, + {0x12, 0x26, 0x15}, + {0x2b, 0x19, 0x1a}, + {0x29, 0x2c, 0x36}, + {0x01, 0x19, 0x1d}, + {0x2f, 0x06, 0x2b}, + {0x0c, 0x12, 0x26}, + {0x36, 0x32, 0x1d}, + {0x0d, 0x12, 0x28}, + {0x03, 0x28, 0x13}, + {0x29, 0x06, 0x17}, + {0x03, 0x38, 0x21}, + {0x30, 0x2c, 0x10}, + {0x22, 0x00, 0x28}, + {0x24, 0x3b, 0x1c}, + {0x20, 0x3e, 0x13}, + {0x02, 0x0c, 0x19}, + {0x29, 0x2c, 0x1a}, + {0x39, 0x30, 0x22}, + {0x2a, 0x1f, 0x22}, + {0x14, 0x34, 0x2c}, + {0x14, 0x25, 0x1b}, + {0x06, 0x3b, 0x15}, + {0x06, 0x1c, 0x13}, + {0x15, 0x03, 0x18}, + {0x1e, 0x2a, 0x1b}, + {0x17, 0x25, 0x2f}, + {0x1c, 0x29, 0x2e}, + {0x02, 0x32, 0x1e}, + {0x1d, 0x28, 0x35}, + {0x36, 0x03, 0x34}, + {0x16, 0x3d, 0x2a}, + {0x12, 0x0d, 0x13}, + {0x1d, 0x2d, 0x21}, + {0x32, 0x17, 0x2e}, + {0x1a, 0x15, 0x26}, + {0x22, 0x2f, 0x15}, + {0x3c, 0x0e, 0x20}, + {0x2f, 0x27, 0x13}, + {0x04, 0x09, 0x32}, + {0x1e, 0x01, 0x34}, + {0x06, 0x16, 0x1e}, + {0x2e, 0x1b, 0x1c}, + {0x28, 0x13, 0x2a}, + {0x30, 0x34, 0x12}, + {0x12, 0x32, 0x18}, + {0x1d, 0x1d, 0x35}, + {0x07, 0x1c, 0x16}, + {0x2d, 0x3d, 0x35}, + {0x1c, 0x1b, 0x24}, + {0x21, 0x2d, 0x1e}, + {0x10, 0x09, 0x14}, + {0x3d, 0x11, 0x12}, + {0x25, 0x02, 0x26}, + {0x23, 0x02, 0x19}, + {0x19, 0x05, 0x14}, + {0x0b, 0x21, 0x1a}, + {0x09, 0x02, 0x2c}, + {0x18, 0x28, 0x2d}, + {0x1e, 0x10, 0x12}, + {0x2e, 0x18, 0x2e}, + {0x1f, 0x02, 0x2c}, + {0x14, 0x17, 0x24}, + {0x39, 0x08, 0x32}, + {0x16, 0x14, 0x22}, + {0x16, 0x28, 0x21}, + {0x11, 0x10, 0x2c}, + {0x23, 0x36, 0x2b}, + {0x39, 0x21, 0x26}, + {0x0e, 0x06, 0x2d}, + {0x3c, 0x3e, 0x26}, + {0x2a, 0x1b, 0x1f}, + {0x00, 0x3c, 0x33}, + {0x35, 0x3f, 0x14}, + {0x00, 0x0b, 0x10}, + {0x34, 0x3c, 0x17}, + {0x2d, 0x07, 0x1f}, + {0x24, 0x39, 0x27}, + {0x16, 0x00, 0x1d}, + {0x33, 0x2b, 0x1e}, + {0x0f, 0x08, 0x31}, + {0x3a, 0x09, 0x13}, + {0x0c, 0x21, 0x1c}, + {0x2a, 0x17, 0x34}, + {0x29, 0x27, 0x10}, + {0x37, 0x1b, 0x18}, + {0x15, 0x08, 0x2f}, + {0x1f, 0x16, 0x12}, + {0x1f, 0x28, 0x34}, + {0x1c, 0x20, 0x22}, + {0x12, 0x01, 0x12}, + {0x21, 0x31, 0x10}, + {0x22, 0x26, 0x1e}, + {0x01, 0x3d, 0x11}, + {0x1e, 0x27, 0x25}, + {0x3d, 0x30, 0x24}, + {0x1d, 0x11, 0x22}, + {0x36, 0x30, 0x16}, + {0x1f, 0x3e, 0x2a}, + {0x3c, 0x27, 0x1b}, + {0x1f, 0x29, 0x10}, + {0x1e, 0x05, 0x2a}, + {0x0a, 0x10, 0x14}, + {0x1f, 0x00, 0x2e}, + {0x0b, 0x3b, 0x18}, + {0x0a, 0x39, 0x30}, + {0x37, 0x0b, 0x1f}, + {0x1d, 0x0a, 0x29}, + {0x3e, 0x1c, 0x33}, + {0x13, 0x2e, 0x28}, + {0x27, 0x1b, 0x1e}, + {0x1d, 0x02, 0x1c}, + {0x01, 0x25, 0x14}, + {0x3a, 0x10, 0x1c}, + {0x12, 0x05, 0x2a}, + {0x30, 0x20, 0x26}, + {0x2f, 0x2e, 0x2e}, + {0x03, 0x07, 0x24}, + {0x36, 0x04, 0x2b}, + {0x11, 0x25, 0x2d}, + {0x28, 0x0e, 0x2e}, + {0x0f, 0x1d, 0x15}, + {0x1c, 0x28, 0x30}, + {0x1f, 0x23, 0x26}, + {0x36, 0x12, 0x37}, + {0x3a, 0x31, 0x10}, + {0x2c, 0x2c, 0x2f}, + {0x1a, 0x0d, 0x15}, + {0x3f, 0x3c, 0x32}, + {0x35, 0x1c, 0x16}, + {0x33, 0x16, 0x28}, + {0x1d, 0x3f, 0x21}, + {0x2c, 0x3e, 0x2b}, + {0x24, 0x23, 0x2f}, + {0x32, 0x15, 0x2a}, + {0x1b, 0x10, 0x35}, + {0x18, 0x37, 0x10}, + {0x3b, 0x1e, 0x11}, + {0x2b, 0x16, 0x24}, + {0x1d, 0x16, 0x26}, + {0x3c, 0x2d, 0x11}, + {0x15, 0x28, 0x28}, + {0x27, 0x27, 0x27}, + {0x3b, 0x3a, 0x16}, + {0x1a, 0x0c, 0x1a}, + {0x15, 0x08, 0x25}, + {0x0b, 0x10, 0x22}, + {0x1a, 0x3e, 0x17}, + {0x28, 0x1f, 0x1e}, + {0x01, 0x1e, 0x1e}, + {0x1c, 0x2f, 0x10}, + {0x25, 0x0b, 0x34}, + {0x3e, 0x0c, 0x1a}, + {0x1b, 0x10, 0x2a}, + {0x0f, 0x14, 0x17}, + {0x0f, 0x3f, 0x17}, + {0x03, 0x15, 0x1f}, + {0x02, 0x36, 0x17}, + {0x15, 0x1d, 0x18}, + {0x08, 0x36, 0x10}, + {0x14, 0x0d, 0x2b}, + {0x0a, 0x05, 0x1d}, + {0x26, 0x12, 0x1e}, + {0x3e, 0x18, 0x19}, + {0x36, 0x18, 0x37}, + {0x17, 0x39, 0x2e}, + {0x0d, 0x04, 0x19}, + {0x16, 0x22, 0x15}, + {0x3e, 0x26, 0x1f}, + {0x00, 0x06, 0x17}, + {0x33, 0x22, 0x1d}, + {0x2b, 0x39, 0x2b}, + {0x3e, 0x31, 0x1c}, + {0x22, 0x3f, 0x13}, + {0x30, 0x1c, 0x31}, + {0x07, 0x2b, 0x14}, + {0x32, 0x35, 0x1e}, + {0x02, 0x07, 0x20}, + {0x0f, 0x3b, 0x11}, + {0x20, 0x07, 0x12}, + {0x2a, 0x30, 0x1d}, + {0x28, 0x38, 0x36}, + {0x20, 0x01, 0x17}, + {0x15, 0x20, 0x21}, + {0x3a, 0x1b, 0x1e}, + {0x38, 0x12, 0x24}, + {0x03, 0x3e, 0x1f}, + {0x29, 0x1d, 0x13}, + {0x20, 0x27, 0x19}, + {0x12, 0x25, 0x20}, + {0x32, 0x33, 0x2b}, + {0x3f, 0x05, 0x31}, + {0x35, 0x3c, 0x2d}, + {0x2d, 0x02, 0x2e}, + {0x10, 0x2a, 0x16}, + {0x17, 0x08, 0x31}, + {0x17, 0x2e, 0x2b}, + {0x30, 0x1e, 0x15}, + {0x31, 0x15, 0x26}, + {0x08, 0x10, 0x33}, + {0x15, 0x01, 0x27}, + {0x12, 0x07, 0x2f}, + {0x29, 0x27, 0x34}, + {0x3f, 0x08, 0x31}, + {0x1c, 0x20, 0x1a}, + {0x33, 0x0c, 0x13}, + {0x18, 0x31, 0x24}, + {0x37, 0x2d, 0x2e}, + {0x21, 0x18, 0x24}, + {0x3a, 0x27, 0x31}, + {0x35, 0x3e, 0x30}, + {0x3a, 0x14, 0x33}, + {0x0f, 0x1a, 0x2d}, + {0x30, 0x2e, 0x11}, + {0x1a, 0x31, 0x1d}, + {0x17, 0x3c, 0x18}, + {0x33, 0x31, 0x23}, + {0x1d, 0x39, 0x2d}, + {0x10, 0x1d, 0x2f}, + {0x24, 0x15, 0x1c}, + {0x25, 0x01, 0x2b}, + {0x22, 0x16, 0x2e}, + {0x1b, 0x25, 0x35}, + {0x37, 0x10, 0x26}, + {0x39, 0x01, 0x36}, + {0x17, 0x2b, 0x14}, + {0x09, 0x16, 0x17}, + {0x20, 0x28, 0x23}, + {0x26, 0x3a, 0x26}, + {0x27, 0x2a, 0x24}, + {0x36, 0x02, 0x2c}, + {0x29, 0x30, 0x35}, + {0x36, 0x01, 0x1f}, + {0x28, 0x3b, 0x1d}, + {0x23, 0x1e, 0x2d}, + {0x11, 0x1e, 0x2c}, + {0x2f, 0x32, 0x19}, + {0x3f, 0x26, 0x31}, + {0x38, 0x1e, 0x17}, + {0x05, 0x18, 0x2e}, + {0x00, 0x2e, 0x12}, + {0x34, 0x3f, 0x34}, + {0x16, 0x10, 0x29}, + {0x20, 0x3d, 0x36}, + {0x2f, 0x16, 0x25}, + {0x12, 0x17, 0x10}, + {0x21, 0x37, 0x35}, + {0x25, 0x37, 0x2d}, + {0x01, 0x08, 0x27}, + {0x03, 0x1f, 0x29}, + {0x0d, 0x2a, 0x16}, + {0x3a, 0x3f, 0x33}, + {0x2b, 0x19, 0x1d}, + {0x2a, 0x1f, 0x29}, + {0x28, 0x2c, 0x10}, + {0x28, 0x30, 0x10}, + {0x39, 0x14, 0x1b}, + {0x00, 0x18, 0x21}, + {0x28, 0x0c, 0x37}, + {0x11, 0x10, 0x11}, + {0x3c, 0x33, 0x32}, + {0x33, 0x36, 0x1a}, + {0x36, 0x00, 0x1c}, + {0x31, 0x1b, 0x1d}, + {0x38, 0x1d, 0x10}, + {0x3c, 0x39, 0x27}, + {0x3a, 0x3f, 0x14}, + {0x19, 0x12, 0x14}, + {0x0d, 0x1f, 0x18}, + {0x00, 0x25, 0x18}, + {0x28, 0x1c, 0x32}, + {0x27, 0x03, 0x1a}, + {0x26, 0x2d, 0x2a}, + {0x29, 0x28, 0x27}, + {0x0a, 0x2a, 0x18}, + {0x0a, 0x1a, 0x30}, + {0x20, 0x1a, 0x2e}, + {0x06, 0x0b, 0x1d}, + {0x0f, 0x0c, 0x1c}, + {0x35, 0x28, 0x1c}, + {0x3d, 0x16, 0x23}, + {0x21, 0x1c, 0x31}, + {0x14, 0x1c, 0x2e}, + {0x22, 0x32, 0x35}, + {0x09, 0x29, 0x30}, + {0x20, 0x1a, 0x10}, + {0x31, 0x3f, 0x2c}, + {0x0a, 0x3d, 0x37}, + {0x0b, 0x2e, 0x2d}, + {0x1f, 0x22, 0x31}, + {0x06, 0x07, 0x29}, + {0x22, 0x17, 0x2d}, + {0x30, 0x11, 0x18}, + {0x0c, 0x19, 0x15}, + {0x07, 0x0a, 0x34}, + {0x18, 0x29, 0x27}, + {0x33, 0x0c, 0x30}, + {0x03, 0x1a, 0x37}, + {0x06, 0x01, 0x2d}, + {0x0f, 0x3b, 0x2b}, + {0x11, 0x1f, 0x37}, + {0x2b, 0x21, 0x36}, + {0x3f, 0x23, 0x17}, + {0x17, 0x07, 0x2b}, + {0x2b, 0x0e, 0x30}, + {0x11, 0x39, 0x1d}, + {0x29, 0x03, 0x33}, + {0x30, 0x03, 0x2f}, + {0x3c, 0x20, 0x26}, + {0x03, 0x22, 0x14}, + {0x3a, 0x28, 0x35}, + {0x01, 0x28, 0x2b}, + {0x3e, 0x15, 0x18}, + {0x30, 0x07, 0x17}, + {0x3b, 0x2c, 0x30}, + {0x15, 0x07, 0x2c}, + {0x17, 0x27, 0x1d}, + {0x3f, 0x1e, 0x33}, + {0x0d, 0x17, 0x10}, + {0x15, 0x0e, 0x30}, + {0x09, 0x05, 0x30}, + {0x2d, 0x20, 0x15}, + {0x3c, 0x3d, 0x30}, + {0x0c, 0x17, 0x1c}, + {0x1a, 0x0d, 0x25}, + {0x2b, 0x2b, 0x2a}, + {0x02, 0x16, 0x2d}, + {0x17, 0x31, 0x17}, + {0x00, 0x08, 0x13}, + {0x37, 0x35, 0x21}, + {0x1e, 0x1c, 0x1f}, + {0x2b, 0x32, 0x1c}, + {0x10, 0x2a, 0x16}, + {0x3a, 0x33, 0x31}, + {0x17, 0x2b, 0x2a}, + {0x0c, 0x3d, 0x11}, + {0x28, 0x0a, 0x30}, + {0x23, 0x0a, 0x26}, + {0x0a, 0x14, 0x24}, + {0x0b, 0x0f, 0x30}, + {0x1b, 0x1e, 0x29}, + {0x02, 0x35, 0x28}, + {0x3b, 0x02, 0x14}, + {0x00, 0x0f, 0x35}, + {0x1c, 0x3c, 0x2e}, + {0x28, 0x38, 0x19}, + {0x1b, 0x11, 0x12}, + {0x09, 0x16, 0x10}, + {0x2e, 0x0d, 0x20}, + {0x3d, 0x04, 0x32}, + {0x16, 0x2c, 0x25}, + {0x02, 0x3d, 0x18}, + {0x0b, 0x13, 0x1c}, + {0x22, 0x2a, 0x1c}, + {0x20, 0x27, 0x22}, + {0x05, 0x26, 0x22}, + {0x12, 0x1d, 0x2c}, + {0x08, 0x05, 0x2e}, + {0x3f, 0x1c, 0x17}, + {0x24, 0x0d, 0x33}, + {0x36, 0x08, 0x24}, + {0x10, 0x22, 0x29}, + {0x1c, 0x0a, 0x11}, + {0x25, 0x0f, 0x10}, + {0x24, 0x38, 0x2f}, + {0x25, 0x32, 0x1e}, + {0x06, 0x2a, 0x29}, + {0x3e, 0x3a, 0x28}, + {0x34, 0x17, 0x33}, + {0x18, 0x33, 0x17}, + {0x07, 0x14, 0x1f}, + {0x11, 0x17, 0x20}, + {0x13, 0x0e, 0x14}, + {0x3b, 0x1c, 0x12}, + {0x2a, 0x13, 0x37}, + {0x2a, 0x35, 0x32}, + {0x30, 0x02, 0x25}, + {0x00, 0x07, 0x1f}, + {0x0c, 0x04, 0x2c}, + {0x37, 0x37, 0x30}, + {0x25, 0x12, 0x25}, + {0x12, 0x22, 0x21}, + {0x22, 0x35, 0x33}, + {0x07, 0x20, 0x2d}, + {0x27, 0x0e, 0x30}, + {0x34, 0x19, 0x1a}, + {0x0a, 0x3c, 0x25}, + {0x07, 0x1d, 0x2b}, + {0x31, 0x3a, 0x12}, + {0x1a, 0x3d, 0x37}, + {0x16, 0x15, 0x16}, + {0x39, 0x13, 0x15}, + {0x2d, 0x03, 0x2e}, + {0x06, 0x39, 0x2c}, + {0x16, 0x00, 0x13}, + {0x35, 0x2a, 0x35}, + {0x24, 0x01, 0x18}, + {0x24, 0x37, 0x28}, + {0x25, 0x1b, 0x34}, + {0x25, 0x19, 0x17}, + {0x27, 0x2f, 0x1b}, + {0x27, 0x0d, 0x10}, + {0x36, 0x3c, 0x30}, + {0x3c, 0x33, 0x23}, + {0x3e, 0x27, 0x1e}, + {0x25, 0x2d, 0x29}, + {0x1f, 0x12, 0x21}, + {0x37, 0x32, 0x1f}, + {0x11, 0x21, 0x35}, + {0x30, 0x0c, 0x19}, + {0x25, 0x3d, 0x26}, + {0x17, 0x02, 0x1d}, + {0x14, 0x2e, 0x11}, + {0x38, 0x13, 0x30}, + {0x0a, 0x2b, 0x20}, + {0x1e, 0x10, 0x15}, + {0x37, 0x30, 0x2e}, + {0x1e, 0x04, 0x2c}, + {0x14, 0x34, 0x19}, + {0x08, 0x14, 0x18}, + {0x0e, 0x1c, 0x30}, + {0x1a, 0x2e, 0x1b}, + {0x1f, 0x39, 0x31}, + {0x0c, 0x1c, 0x28}, + {0x3e, 0x33, 0x23}, + {0x0f, 0x13, 0x16}, + {0x25, 0x39, 0x2f}, + {0x14, 0x1b, 0x1a}, + {0x28, 0x3e, 0x21}, + {0x2d, 0x19, 0x11}, + {0x0c, 0x34, 0x32}, + {0x39, 0x31, 0x19}, + {0x1a, 0x08, 0x34}, + {0x09, 0x2f, 0x11}, + {0x30, 0x04, 0x1c}, + {0x02, 0x3b, 0x1b}, + {0x33, 0x21, 0x33}, + {0x38, 0x02, 0x1a}, + {0x31, 0x38, 0x32}, + {0x1f, 0x1d, 0x16}, + {0x17, 0x10, 0x1b}, + {0x32, 0x20, 0x17}, + {0x00, 0x33, 0x12}, + {0x21, 0x0f, 0x27}, + {0x14, 0x19, 0x27}, + {0x24, 0x2c, 0x37}, + {0x25, 0x05, 0x2f}, + {0x3d, 0x25, 0x11}, + {0x12, 0x30, 0x1a}, + {0x16, 0x03, 0x1a}, + {0x14, 0x09, 0x13}, + {0x02, 0x23, 0x22}, + {0x01, 0x3c, 0x10}, + {0x3f, 0x2d, 0x23}, + {0x31, 0x3f, 0x23}, + {0x17, 0x00, 0x33}, + {0x3f, 0x0f, 0x2f}, + {0x26, 0x07, 0x15}, + {0x21, 0x2b, 0x2a}, + {0x38, 0x39, 0x1e}, + {0x09, 0x25, 0x2b}, + {0x3b, 0x30, 0x25}, + {0x12, 0x2d, 0x13}, + {0x32, 0x19, 0x28}, + {0x24, 0x1c, 0x2d}, + {0x35, 0x32, 0x26}, + {0x0d, 0x23, 0x1e}, + {0x1d, 0x07, 0x21}, + {0x0b, 0x34, 0x17}, + {0x2d, 0x32, 0x32}, + {0x3a, 0x3c, 0x35}, + {0x1a, 0x10, 0x33}, + {0x1a, 0x07, 0x22}, + {0x3b, 0x1b, 0x2a}, + {0x33, 0x1f, 0x26}, + {0x0e, 0x35, 0x1a}, + {0x3b, 0x0a, 0x1c}, + {0x11, 0x07, 0x11}, + {0x0d, 0x3c, 0x2d}, + {0x1e, 0x37, 0x29}, + {0x11, 0x05, 0x12}, + {0x15, 0x2f, 0x1c}, + {0x24, 0x31, 0x16}, + {0x2b, 0x21, 0x1b}, + {0x23, 0x10, 0x31}, + {0x02, 0x14, 0x29}, + {0x26, 0x20, 0x16}, + {0x10, 0x17, 0x10}, + {0x0b, 0x0f, 0x33}, + {0x01, 0x2e, 0x14}, + {0x21, 0x0e, 0x37}, + {0x1a, 0x1d, 0x2f}, + {0x1e, 0x30, 0x24}, + {0x04, 0x14, 0x2d}, + {0x11, 0x00, 0x30}, + {0x08, 0x2a, 0x1d}, + {0x1d, 0x22, 0x21}, + {0x24, 0x2c, 0x37}, + {0x24, 0x11, 0x12}, + {0x04, 0x2e, 0x28}, + {0x1d, 0x18, 0x23}, + {0x3c, 0x16, 0x16}, + {0x10, 0x17, 0x31}, + {0x20, 0x21, 0x12}, + {0x33, 0x3e, 0x34}, + {0x06, 0x13, 0x13}, + {0x17, 0x38, 0x2b}, + {0x14, 0x0d, 0x15}, + {0x24, 0x3b, 0x2b}, + {0x34, 0x3b, 0x1e}, + {0x18, 0x07, 0x34}, + {0x37, 0x1d, 0x1f}, + {0x0b, 0x29, 0x20}, + {0x12, 0x1e, 0x1d}, + {0x1a, 0x24, 0x24}, + {0x3d, 0x28, 0x24}, + {0x0b, 0x12, 0x33}, + {0x1b, 0x3a, 0x22}, + {0x14, 0x13, 0x2a}, + {0x31, 0x38, 0x15}, + {0x37, 0x2b, 0x2e}, + {0x19, 0x1e, 0x2c}, + {0x3f, 0x1b, 0x2a}, + {0x33, 0x1f, 0x33}, + {0x3f, 0x15, 0x29}, + {0x01, 0x1e, 0x18}, + {0x1f, 0x22, 0x19}, + {0x33, 0x3c, 0x34}, + {0x1e, 0x12, 0x22}, + {0x0d, 0x37, 0x2c}, + {0x0f, 0x08, 0x31}, + {0x2e, 0x09, 0x36}, + {0x01, 0x05, 0x1e}, + {0x1c, 0x04, 0x1e}, + {0x0c, 0x01, 0x1c}, + {0x29, 0x28, 0x2f}, + {0x39, 0x2d, 0x14}, + {0x09, 0x22, 0x36}, + {0x04, 0x37, 0x37}, + {0x2d, 0x2f, 0x35}, + {0x24, 0x23, 0x1b}, + {0x08, 0x20, 0x32}, + {0x20, 0x1f, 0x34}, + {0x02, 0x31, 0x19}, + {0x18, 0x13, 0x36}, + {0x06, 0x2b, 0x1e}, + {0x0e, 0x1b, 0x10}, + {0x2f, 0x0e, 0x1c}, + {0x11, 0x38, 0x13}, + {0x01, 0x37, 0x19}, + {0x14, 0x11, 0x26}, + {0x31, 0x3d, 0x33}, + {0x1d, 0x1b, 0x34}, + {0x25, 0x31, 0x2f}, + {0x11, 0x0a, 0x2f}, + {0x39, 0x17, 0x1b}, + {0x05, 0x0e, 0x13}, + {0x29, 0x25, 0x22}, + {0x15, 0x0d, 0x20}, + {0x2b, 0x27, 0x21}, + {0x3e, 0x24, 0x27}, + {0x2a, 0x2b, 0x16}, + {0x24, 0x3d, 0x15}, + {0x15, 0x30, 0x31}, + {0x0f, 0x33, 0x24}, + {0x06, 0x16, 0x13}, + {0x06, 0x31, 0x10}, + {0x2e, 0x3f, 0x10}, + {0x05, 0x0d, 0x2f}, + {0x3c, 0x1f, 0x19}, + {0x12, 0x13, 0x24}, + {0x0f, 0x33, 0x36}, + {0x15, 0x3b, 0x33}, + {0x03, 0x0f, 0x2a}, + {0x3b, 0x3c, 0x2c}, + {0x36, 0x09, 0x29}, + {0x11, 0x3b, 0x27}, + {0x28, 0x2b, 0x31}, + {0x1a, 0x0e, 0x2f}, + {0x39, 0x2c, 0x31}, + {0x0e, 0x3c, 0x35}, + {0x2c, 0x24, 0x33}, + {0x3d, 0x11, 0x2b}, + {0x07, 0x3c, 0x37}, + {0x14, 0x18, 0x13}, + {0x1d, 0x3f, 0x2e}, + {0x30, 0x12, 0x25}, + {0x26, 0x1d, 0x11}, + {0x07, 0x11, 0x1e}, + {0x34, 0x01, 0x11}, + {0x0b, 0x39, 0x21}, + {0x29, 0x02, 0x29}, + {0x15, 0x10, 0x1a}, + {0x30, 0x1f, 0x35}, + {0x3c, 0x2b, 0x2a}, + {0x30, 0x3b, 0x36}, + {0x20, 0x1a, 0x23}, + {0x32, 0x24, 0x2b}, + {0x15, 0x20, 0x1c}, + {0x25, 0x3d, 0x36}, + {0x2d, 0x14, 0x31}, + {0x18, 0x23, 0x17}, + {0x18, 0x05, 0x13}, + {0x34, 0x30, 0x37}, + {0x0e, 0x39, 0x23}, + {0x1d, 0x1f, 0x17}, + {0x01, 0x15, 0x2f}, + {0x0b, 0x3e, 0x1b}, + {0x0d, 0x19, 0x2e}, + {0x31, 0x38, 0x1c}, + {0x15, 0x34, 0x15}, + {0x13, 0x19, 0x29}, + {0x19, 0x14, 0x27}, + {0x15, 0x18, 0x23}, + {0x29, 0x0c, 0x27}, + {0x2d, 0x0e, 0x17}, + {0x34, 0x18, 0x10}, + {0x3b, 0x1e, 0x29}, + {0x34, 0x2c, 0x22}, + {0x31, 0x08, 0x13}, + {0x1d, 0x18, 0x1a}, + {0x1c, 0x0b, 0x2a}, + {0x19, 0x1e, 0x1a}, + {0x23, 0x27, 0x17}, + {0x3b, 0x0e, 0x37}, + {0x19, 0x2b, 0x16}, + {0x2f, 0x08, 0x21}, + {0x37, 0x02, 0x20}, + {0x0b, 0x32, 0x30}, + {0x16, 0x05, 0x30}, + {0x13, 0x05, 0x1a}, + {0x07, 0x39, 0x19}, + {0x0c, 0x3b, 0x2a}, + {0x15, 0x05, 0x30}, + {0x30, 0x05, 0x19}, + {0x13, 0x00, 0x12}, + {0x27, 0x16, 0x2a}, + {0x0f, 0x28, 0x27}, + {0x0c, 0x23, 0x2f}, + {0x39, 0x28, 0x2a}, + {0x24, 0x25, 0x1f}, + {0x18, 0x29, 0x14}, + {0x16, 0x05, 0x1a}, + {0x35, 0x2f, 0x26}, + {0x0a, 0x3a, 0x29}, + {0x34, 0x2c, 0x36}, + {0x2e, 0x3a, 0x15}, + {0x1a, 0x0a, 0x2d}, + {0x16, 0x14, 0x2e}, + {0x35, 0x28, 0x2a}, + {0x35, 0x0f, 0x11}, + {0x11, 0x32, 0x19}, + {0x20, 0x1a, 0x28}, + {0x17, 0x1a, 0x28}, + {0x16, 0x33, 0x25}, + {0x13, 0x2c, 0x29}, + {0x09, 0x16, 0x33}, + {0x1d, 0x27, 0x26}, + {0x15, 0x0c, 0x2f}, + {0x22, 0x1c, 0x19}, + {0x29, 0x33, 0x10}, + {0x2d, 0x11, 0x1b}, + {0x16, 0x19, 0x2e}, + {0x0d, 0x0c, 0x28}, + {0x37, 0x3a, 0x34}, + {0x2a, 0x1d, 0x37}, + {0x30, 0x0a, 0x36}, + {0x24, 0x39, 0x1b}, + {0x39, 0x0a, 0x32}, + {0x11, 0x03, 0x2d}, + {0x32, 0x1d, 0x30}, + {0x38, 0x1e, 0x27}, + {0x2e, 0x17, 0x18}, + {0x16, 0x17, 0x2a}, + {0x36, 0x3b, 0x31}, + {0x17, 0x04, 0x19}, + {0x3a, 0x25, 0x2d}, + {0x00, 0x36, 0x27}, + {0x25, 0x12, 0x33}, + {0x06, 0x0a, 0x14}, + {0x11, 0x05, 0x2f}, + {0x03, 0x35, 0x2f}, + {0x0b, 0x34, 0x29}, + {0x00, 0x31, 0x13}, + {0x27, 0x0f, 0x1c}, + {0x1d, 0x06, 0x2d}, + {0x1c, 0x30, 0x27}, + {0x2f, 0x2a, 0x27}, + {0x16, 0x20, 0x31}, + {0x33, 0x2b, 0x2b}, + {0x05, 0x30, 0x36}, + {0x29, 0x23, 0x35}, + {0x10, 0x16, 0x2f}, + {0x2d, 0x20, 0x29}, + {0x37, 0x13, 0x24}, + {0x2d, 0x0e, 0x25}, + {0x08, 0x0a, 0x18}, + {0x0f, 0x03, 0x1b}, + {0x31, 0x0c, 0x37}, + {0x1e, 0x34, 0x31}, + {0x1b, 0x0e, 0x25}, + {0x1a, 0x07, 0x34}, + {0x0d, 0x3c, 0x33}, + {0x00, 0x3a, 0x36}, + {0x04, 0x27, 0x12}, + {0x23, 0x18, 0x24}, + {0x0d, 0x0b, 0x18}, + {0x31, 0x32, 0x37}, + {0x00, 0x0d, 0x21}, + {0x32, 0x10, 0x12}, + {0x26, 0x0d, 0x19}, + {0x29, 0x24, 0x2b}, + {0x3d, 0x21, 0x1f}, + {0x1e, 0x1b, 0x28}, + {0x0d, 0x12, 0x28}, + {0x35, 0x1e, 0x23}, + {0x0a, 0x2e, 0x22}, + {0x27, 0x27, 0x35}, + {0x01, 0x0e, 0x20}, + {0x31, 0x39, 0x29}, + {0x3b, 0x24, 0x36}, + {0x14, 0x10, 0x33}, + {0x18, 0x2c, 0x26}, + {0x04, 0x2d, 0x15}, + {0x1a, 0x11, 0x37}, + {0x0f, 0x0b, 0x14}, + {0x0e, 0x2c, 0x2c}, + {0x21, 0x17, 0x2c}, + {0x16, 0x21, 0x35}, + {0x3e, 0x10, 0x10}, + {0x0a, 0x05, 0x1e}, + {0x3b, 0x09, 0x13}, + {0x26, 0x18, 0x1e}, + {0x23, 0x0c, 0x1a}, + {0x33, 0x37, 0x1f}, + {0x09, 0x12, 0x35}, + {0x3d, 0x0d, 0x15}, + {0x36, 0x06, 0x24}, + {0x33, 0x30, 0x29}, + {0x3b, 0x0f, 0x28}, + {0x34, 0x2a, 0x2c}, + {0x02, 0x12, 0x35}, + {0x09, 0x22, 0x31}, + {0x3b, 0x31, 0x1c}, + {0x33, 0x22, 0x27}, + {0x3d, 0x34, 0x15}, + {0x14, 0x22, 0x28}, + {0x28, 0x10, 0x1e}, + {0x21, 0x31, 0x10}, + {0x2d, 0x16, 0x21}, + {0x1e, 0x05, 0x33}, + {0x0f, 0x30, 0x31}, + {0x0e, 0x1a, 0x35}, + {0x38, 0x2e, 0x28}, + {0x26, 0x37, 0x1e}, + {0x2b, 0x13, 0x33}, + {0x1f, 0x1e, 0x37}, + {0x0a, 0x28, 0x24}, + {0x32, 0x1c, 0x1a}, + {0x1f, 0x3f, 0x19}, + {0x39, 0x39, 0x29}, + {0x2c, 0x1b, 0x14}, + {0x15, 0x2a, 0x17}, + {0x32, 0x0f, 0x21}, + {0x30, 0x21, 0x18}, + {0x23, 0x2a, 0x27}, + {0x3d, 0x07, 0x10}, + {0x0b, 0x3f, 0x2f}, + {0x31, 0x02, 0x2e}, + {0x08, 0x39, 0x2f}, + {0x3f, 0x20, 0x18}, + {0x2d, 0x34, 0x11}, + {0x2e, 0x34, 0x10}, + {0x26, 0x12, 0x23}, + {0x25, 0x0a, 0x37}, + {0x34, 0x09, 0x25}, + {0x0a, 0x3e, 0x16}, + {0x1a, 0x17, 0x11}, + {0x38, 0x1c, 0x20}, + {0x11, 0x21, 0x26}, + {0x05, 0x0f, 0x18}, + {0x26, 0x2b, 0x32}, + {0x0a, 0x0c, 0x16}, + {0x03, 0x29, 0x1d}, + {0x29, 0x3b, 0x23}, + {0x16, 0x1b, 0x29}, + {0x07, 0x09, 0x17}, + {0x17, 0x2c, 0x1c}, + {0x35, 0x33, 0x30}, + {0x17, 0x12, 0x1e}, + {0x3d, 0x1a, 0x2b}, + {0x21, 0x1d, 0x10}, + {0x0a, 0x08, 0x17}, + {0x14, 0x3c, 0x36}, + {0x28, 0x36, 0x36}, + {0x3b, 0x20, 0x1b}, + {0x13, 0x22, 0x1d}, + {0x13, 0x3a, 0x15}, + {0x02, 0x23, 0x2c}, + {0x3e, 0x19, 0x14}, + {0x39, 0x3c, 0x1a}, + {0x10, 0x08, 0x1e}, + {0x0a, 0x13, 0x29}, + {0x3f, 0x38, 0x2c}, + {0x07, 0x23, 0x1f}, + {0x19, 0x2a, 0x24}, + {0x14, 0x3c, 0x1f}, + {0x0d, 0x04, 0x37}, + {0x1a, 0x2f, 0x28}, + {0x2a, 0x1d, 0x1e}, + {0x11, 0x37, 0x29}, + {0x28, 0x27, 0x12}, + {0x0d, 0x00, 0x26}, + {0x0a, 0x3c, 0x26}, + {0x1f, 0x1c, 0x33}, + {0x04, 0x3a, 0x2c}, + {0x24, 0x3d, 0x2b}, + {0x26, 0x31, 0x2f}, + {0x13, 0x1c, 0x21}, + {0x3e, 0x12, 0x23}, + {0x36, 0x0a, 0x1a}, + {0x2d, 0x1e, 0x19}, + {0x05, 0x1f, 0x1b}, + {0x1e, 0x0a, 0x1f}, + {0x20, 0x08, 0x24}, + {0x2c, 0x0c, 0x33}, + {0x1d, 0x1f, 0x11}, + {0x0e, 0x12, 0x10}, + {0x27, 0x12, 0x19}, + {0x2a, 0x13, 0x31}, + {0x1c, 0x04, 0x30}, + {0x1a, 0x38, 0x1f}, + {0x2c, 0x35, 0x25}, + {0x07, 0x0b, 0x33}, + {0x2d, 0x02, 0x1a}, + {0x2a, 0x35, 0x35}, + {0x16, 0x2f, 0x14}, + {0x11, 0x31, 0x33}, + {0x2c, 0x31, 0x1e}, + {0x3c, 0x3a, 0x27}, + {0x3c, 0x2b, 0x12}, + {0x27, 0x1d, 0x12}, + {0x36, 0x2c, 0x2b}, + {0x25, 0x3b, 0x35}, + {0x12, 0x3d, 0x27}, + {0x13, 0x23, 0x19}, + {0x33, 0x2c, 0x26}, + {0x09, 0x3c, 0x12}, + {0x15, 0x1a, 0x23}, + {0x21, 0x07, 0x1a}, + {0x22, 0x25, 0x20}, + {0x19, 0x1b, 0x2c}, + {0x3a, 0x19, 0x35}, + {0x05, 0x26, 0x1d}, + {0x23, 0x22, 0x25}, + {0x0e, 0x1e, 0x11}, + {0x13, 0x30, 0x12}, + {0x2c, 0x22, 0x25}, + {0x0a, 0x1d, 0x18}, + {0x23, 0x3e, 0x1d}, + {0x02, 0x28, 0x25}, + {0x21, 0x0e, 0x20}, + {0x21, 0x22, 0x37}, + {0x18, 0x33, 0x27}, + {0x23, 0x23, 0x31}, + {0x24, 0x1a, 0x1a}, + {0x3e, 0x25, 0x24}, + {0x24, 0x01, 0x18}, + {0x34, 0x10, 0x22}, + {0x07, 0x00, 0x37}, + {0x06, 0x20, 0x20}, + {0x3a, 0x02, 0x2b}, + {0x07, 0x2c, 0x2c}, + {0x09, 0x2f, 0x2a}, + {0x01, 0x32, 0x2c}, + {0x00, 0x35, 0x13}, + {0x2b, 0x3c, 0x1f}, + {0x36, 0x37, 0x1e}, + {0x20, 0x35, 0x1d}, + {0x0c, 0x07, 0x33}, + {0x16, 0x08, 0x12}, + {0x3f, 0x36, 0x11}, + {0x0b, 0x1f, 0x2d}, + {0x21, 0x20, 0x33}, + {0x17, 0x1a, 0x2e}, + {0x16, 0x01, 0x2f}, + {0x2f, 0x1c, 0x34}, + {0x29, 0x31, 0x2e}, + {0x3b, 0x38, 0x31}, + {0x0d, 0x16, 0x12}, + {0x07, 0x29, 0x24}, + {0x33, 0x3c, 0x34}, + {0x3e, 0x1e, 0x18}, + {0x30, 0x02, 0x34}, + {0x2a, 0x34, 0x1b}, + {0x2e, 0x23, 0x18}, + {0x34, 0x00, 0x1f}, + {0x20, 0x0e, 0x28}, + {0x15, 0x33, 0x37}, + {0x27, 0x35, 0x23}, + {0x37, 0x3e, 0x11}, + {0x32, 0x2e, 0x36}, + {0x3a, 0x02, 0x2b}, + {0x00, 0x36, 0x1d}, + {0x13, 0x29, 0x16}, + {0x08, 0x2b, 0x37}, + {0x08, 0x02, 0x27}, + {0x32, 0x2d, 0x34}, + {0x30, 0x36, 0x29}, + {0x2e, 0x10, 0x12}, + {0x3c, 0x2e, 0x2a}, + {0x04, 0x33, 0x30}, + {0x3f, 0x01, 0x22}, + {0x37, 0x14, 0x1d}, + {0x27, 0x00, 0x2f}, + {0x0c, 0x39, 0x26}, + {0x27, 0x04, 0x21}, + {0x19, 0x08, 0x1d}, + {0x01, 0x04, 0x1e}, + {0x27, 0x1b, 0x2b}, + {0x31, 0x17, 0x1f}, + {0x07, 0x01, 0x2d}, + {0x2e, 0x3b, 0x1f}, + {0x34, 0x24, 0x31}, + {0x32, 0x2b, 0x24}, + {0x0e, 0x07, 0x1e}, + {0x0f, 0x33, 0x10}, + {0x16, 0x21, 0x32}, + {0x39, 0x02, 0x1a}, + {0x33, 0x3d, 0x22}, + {0x0c, 0x25, 0x1a}, + {0x29, 0x29, 0x28}, + {0x3a, 0x32, 0x26}, + {0x0b, 0x13, 0x22}, + {0x1f, 0x0f, 0x1c}, + {0x04, 0x2c, 0x20}, + {0x39, 0x1a, 0x1b}, + {0x1a, 0x2a, 0x1f}, + {0x24, 0x13, 0x1a}, + {0x31, 0x3b, 0x33}, + {0x39, 0x23, 0x28}, + {0x31, 0x07, 0x31}, + {0x1f, 0x10, 0x20}, + {0x29, 0x17, 0x32}, + {0x26, 0x3b, 0x2d}, + {0x02, 0x3c, 0x1c}, + {0x0e, 0x00, 0x20}, + {0x14, 0x3e, 0x37}, + {0x01, 0x0f, 0x2d}, + {0x06, 0x12, 0x27}, + {0x30, 0x13, 0x19}, + {0x00, 0x33, 0x2a}, + {0x0c, 0x07, 0x27}, + {0x11, 0x3a, 0x1c}, + {0x15, 0x0a, 0x13}, + {0x1f, 0x0d, 0x2a}, + {0x37, 0x07, 0x2a}, + {0x34, 0x35, 0x34}, + {0x28, 0x16, 0x27}, + {0x06, 0x02, 0x36}, + {0x09, 0x23, 0x30}, + {0x14, 0x02, 0x28}, + {0x39, 0x32, 0x34}, + {0x24, 0x35, 0x12}, + {0x12, 0x22, 0x26}, + {0x09, 0x07, 0x33}, + {0x0f, 0x3e, 0x1e}, + {0x00, 0x3c, 0x33}, + {0x10, 0x37, 0x14}, + {0x3a, 0x03, 0x25}, + {0x2d, 0x1e, 0x24}, + {0x36, 0x36, 0x26}, + {0x1f, 0x3c, 0x1a}, + {0x37, 0x33, 0x25}, + {0x23, 0x13, 0x1f}, + {0x33, 0x0d, 0x13}, + {0x25, 0x30, 0x1e}, + {0x17, 0x03, 0x18}, + {0x18, 0x18, 0x14}, + {0x30, 0x07, 0x22}, + {0x3e, 0x33, 0x21}, + {0x14, 0x37, 0x16}, + {0x16, 0x00, 0x12}, + {0x2c, 0x12, 0x2f}, + {0x25, 0x3f, 0x1e}, + {0x24, 0x19, 0x16}, + {0x16, 0x0f, 0x35}, + {0x2d, 0x10, 0x11}, + {0x24, 0x2a, 0x28}, + {0x19, 0x25, 0x2e}, + {0x0c, 0x16, 0x1f}, + {0x38, 0x21, 0x36}, + {0x3d, 0x1a, 0x2f}, + {0x3b, 0x32, 0x12}, + {0x36, 0x13, 0x29}, + {0x0e, 0x30, 0x31}, + {0x19, 0x07, 0x2f}, + {0x25, 0x23, 0x28}, + {0x20, 0x08, 0x29}, + {0x2a, 0x00, 0x30}, + {0x30, 0x38, 0x23}, + {0x1e, 0x0f, 0x1f}, + {0x3b, 0x1b, 0x30}, + {0x3a, 0x37, 0x2f}, + {0x39, 0x37, 0x35}, + {0x39, 0x2d, 0x2f}, + {0x1f, 0x2e, 0x1e}, + {0x1a, 0x2b, 0x1e}, + {0x14, 0x17, 0x20}, + {0x2f, 0x03, 0x11}, + {0x1d, 0x00, 0x30}, + {0x17, 0x2b, 0x1d}, + {0x35, 0x28, 0x25}, + {0x3b, 0x0f, 0x11}, + {0x09, 0x04, 0x2e}, + {0x23, 0x11, 0x1e}, + {0x13, 0x37, 0x1e}, + {0x37, 0x37, 0x1e}, + {0x07, 0x01, 0x32}, + {0x14, 0x06, 0x32}, + {0x11, 0x0c, 0x2e}, + {0x36, 0x2e, 0x24}, + {0x15, 0x2a, 0x1c}, + {0x22, 0x15, 0x34}, + {0x2c, 0x1e, 0x35}, + {0x22, 0x27, 0x33}, + {0x19, 0x3f, 0x2d}, + {0x21, 0x33, 0x15}, + {0x26, 0x1a, 0x11}, + {0x16, 0x3e, 0x12}, + {0x2b, 0x24, 0x15}, + {0x3c, 0x0f, 0x2d}, + {0x31, 0x15, 0x36}, + {0x3f, 0x24, 0x1d}, + {0x25, 0x01, 0x37}, + {0x33, 0x16, 0x1a}, + {0x1f, 0x0e, 0x10}, + {0x2f, 0x0b, 0x12}, + {0x2a, 0x1a, 0x25}, + {0x17, 0x0a, 0x35}, + {0x09, 0x28, 0x35}, + {0x02, 0x13, 0x36}, + {0x34, 0x2f, 0x17}, + {0x03, 0x04, 0x31}, + {0x3e, 0x26, 0x11}, + {0x35, 0x33, 0x31}, + {0x22, 0x17, 0x23}, + {0x1d, 0x05, 0x2b}, + {0x2e, 0x27, 0x20}, + {0x03, 0x2b, 0x1d}, + {0x01, 0x19, 0x1e}, + {0x0e, 0x05, 0x18}, + {0x16, 0x25, 0x17}, + {0x02, 0x28, 0x18}, + {0x19, 0x0b, 0x24}, + {0x3e, 0x35, 0x16}, + {0x2e, 0x29, 0x25}, + {0x3e, 0x38, 0x1e}, + {0x3a, 0x2f, 0x12}, + {0x14, 0x17, 0x2d}, + {0x11, 0x12, 0x30}, + {0x15, 0x31, 0x18}, + {0x08, 0x0b, 0x29}, + {0x2d, 0x00, 0x33}, + {0x2c, 0x06, 0x1a}, + {0x14, 0x1c, 0x2e}, + {0x04, 0x08, 0x12}, + {0x1b, 0x2b, 0x2d}, + {0x2a, 0x37, 0x33}, + {0x10, 0x27, 0x2c}, + {0x1d, 0x0e, 0x34}, + {0x20, 0x02, 0x12}, + {0x1e, 0x1a, 0x2e}, + {0x07, 0x0b, 0x10}, + {0x36, 0x1e, 0x33}, + {0x2b, 0x28, 0x1b}, + {0x31, 0x25, 0x1f}, + {0x38, 0x3a, 0x2f}, + {0x39, 0x30, 0x2f}, + {0x12, 0x09, 0x14}, + {0x0e, 0x08, 0x19}, + {0x00, 0x0d, 0x2c}, + {0x1b, 0x0e, 0x34}, + {0x11, 0x25, 0x15}, + {0x0c, 0x2d, 0x26}, + {0x36, 0x2c, 0x16}, + {0x31, 0x31, 0x2c}, + {0x03, 0x1a, 0x16}, + {0x1c, 0x32, 0x14}, + {0x0a, 0x3e, 0x36}, + {0x33, 0x1b, 0x27}, + {0x1f, 0x32, 0x18}, + {0x33, 0x26, 0x33}, + {0x1a, 0x13, 0x1a}, + {0x0f, 0x34, 0x1c}, + {0x35, 0x2c, 0x2f}, + {0x38, 0x03, 0x18}, + {0x15, 0x0f, 0x27}, + {0x31, 0x29, 0x20}, + {0x28, 0x0e, 0x28}, + {0x31, 0x2c, 0x2e}, + {0x15, 0x19, 0x1b}, + {0x10, 0x03, 0x2f}, + {0x2e, 0x2a, 0x32}, + {0x2a, 0x27, 0x1b}, + {0x36, 0x04, 0x1e}, + {0x3b, 0x04, 0x21}, + {0x07, 0x2f, 0x19}, + {0x27, 0x1d, 0x1d}, + {0x3c, 0x3d, 0x2e}, + {0x25, 0x08, 0x32}, + {0x3b, 0x34, 0x2a}, + {0x0c, 0x10, 0x13}, + {0x25, 0x35, 0x1a}, + {0x2f, 0x19, 0x28}, + {0x17, 0x00, 0x2b}, + {0x0a, 0x1c, 0x17}, + {0x0a, 0x11, 0x1b}, + {0x35, 0x13, 0x37}, + {0x29, 0x1c, 0x28}, + {0x0c, 0x31, 0x35}, + {0x3c, 0x10, 0x1a}, + {0x1b, 0x3a, 0x2d}, + {0x3a, 0x1c, 0x18}, + {0x22, 0x10, 0x2d}, + {0x1c, 0x3c, 0x12}, + {0x17, 0x18, 0x2a}, + {0x0b, 0x2b, 0x2f}, + {0x2d, 0x04, 0x2e}, + {0x3c, 0x13, 0x23}, + {0x01, 0x1c, 0x2e}, + {0x14, 0x16, 0x22}, + {0x0c, 0x24, 0x13}, + {0x35, 0x37, 0x34}, + {0x1b, 0x30, 0x1e}, + {0x3a, 0x1c, 0x20}, + {0x06, 0x06, 0x36}, + {0x09, 0x15, 0x1a}, + {0x1b, 0x1a, 0x27}, + {0x0f, 0x33, 0x35}, + {0x37, 0x06, 0x23}, + {0x3a, 0x12, 0x1d}, + {0x00, 0x16, 0x29}, + {0x0e, 0x1d, 0x35}, + {0x3f, 0x38, 0x16}, + {0x2a, 0x3c, 0x34}, + {0x13, 0x32, 0x10}, + {0x17, 0x2c, 0x37}, + {0x29, 0x2a, 0x1e}, + {0x35, 0x2f, 0x2d}, + {0x3c, 0x2a, 0x11}, + {0x28, 0x13, 0x21}, + {0x19, 0x1e, 0x34}, + {0x0c, 0x06, 0x2d}, + {0x09, 0x04, 0x1c}, + {0x1d, 0x2f, 0x26}, + {0x39, 0x07, 0x16}, + {0x14, 0x04, 0x2d}, + {0x3a, 0x2f, 0x2e}, + {0x29, 0x15, 0x35}, + {0x24, 0x02, 0x36}, + {0x3f, 0x02, 0x1a}, + {0x0f, 0x18, 0x24}, + {0x16, 0x1d, 0x19}, + {0x14, 0x16, 0x10}, + {0x29, 0x1b, 0x13}, + {0x15, 0x0e, 0x19}, + {0x3a, 0x2e, 0x2b}, + {0x08, 0x30, 0x15}, + {0x35, 0x16, 0x30}, + {0x2e, 0x18, 0x35}, + {0x3b, 0x0b, 0x1c}, + {0x3a, 0x18, 0x13}, + {0x29, 0x13, 0x1e}, + {0x20, 0x13, 0x27}, + {0x04, 0x1d, 0x34}, + {0x00, 0x38, 0x19}, + {0x08, 0x39, 0x32}, + {0x20, 0x10, 0x26}, + {0x08, 0x02, 0x28}, + {0x3f, 0x0f, 0x16}, + {0x30, 0x1f, 0x19}, + {0x20, 0x2d, 0x10}, + {0x38, 0x17, 0x1c}, + {0x18, 0x31, 0x27}, + {0x33, 0x38, 0x30}, + {0x16, 0x33, 0x23}, + {0x00, 0x01, 0x36}, + {0x0d, 0x02, 0x23}, + {0x39, 0x04, 0x1f}, + {0x0e, 0x30, 0x24}, + {0x06, 0x01, 0x2c}, + {0x34, 0x33, 0x35}, + {0x16, 0x34, 0x2e}, + {0x32, 0x16, 0x24}, + {0x26, 0x39, 0x34}, + {0x1f, 0x3c, 0x1d}, + {0x28, 0x1d, 0x37}, + {0x17, 0x15, 0x2b}, + {0x27, 0x39, 0x30}, + {0x0b, 0x1b, 0x18}, + {0x35, 0x20, 0x2d}, + {0x0b, 0x35, 0x1c}, + {0x03, 0x0e, 0x21}, + {0x06, 0x0c, 0x20}, + {0x02, 0x18, 0x34}, + {0x1e, 0x36, 0x2d}, + {0x16, 0x0c, 0x19}, + {0x25, 0x09, 0x2c}, + {0x37, 0x05, 0x2e}, + {0x2e, 0x2b, 0x2c}, + {0x24, 0x1a, 0x14}, + {0x27, 0x04, 0x10}, + {0x32, 0x38, 0x33}, + {0x37, 0x15, 0x35}, + {0x11, 0x3f, 0x1d}, + {0x23, 0x23, 0x1f}, + {0x29, 0x3f, 0x1d}, + {0x1a, 0x3c, 0x2b}, + {0x1b, 0x2c, 0x2c}, + {0x38, 0x3b, 0x36}, + {0x04, 0x13, 0x33}, + {0x2c, 0x14, 0x12}, + {0x1a, 0x09, 0x1b}, + {0x36, 0x11, 0x24}, + {0x3a, 0x3f, 0x11}, + {0x01, 0x0e, 0x2b}, + {0x3b, 0x03, 0x2a}, + {0x08, 0x0d, 0x2b}, + {0x2b, 0x13, 0x27}, + {0x3a, 0x3c, 0x1c}, + {0x3a, 0x15, 0x2a}, + {0x24, 0x00, 0x17}, + {0x3e, 0x0a, 0x15}, + {0x0c, 0x29, 0x2d}, + {0x1f, 0x15, 0x30}, + {0x35, 0x18, 0x19}, + {0x3d, 0x37, 0x37}, + {0x12, 0x38, 0x1b}, + {0x3b, 0x02, 0x20}, + {0x08, 0x21, 0x19}, + {0x2e, 0x36, 0x1d}, + {0x15, 0x3d, 0x24}, + {0x22, 0x0c, 0x27}, + {0x36, 0x3f, 0x33}, + {0x33, 0x12, 0x11}, + {0x1a, 0x19, 0x1f}, + {0x2b, 0x24, 0x12}, + {0x11, 0x2a, 0x18}, + {0x25, 0x32, 0x2a}, + {0x2c, 0x1a, 0x12}, + {0x26, 0x06, 0x10}, + {0x11, 0x29, 0x33}, + {0x2c, 0x09, 0x14}, + {0x2b, 0x12, 0x2b}, + {0x1d, 0x03, 0x24}, + {0x00, 0x12, 0x15}, + {0x22, 0x3d, 0x26}, + {0x15, 0x37, 0x1a}, + {0x0f, 0x12, 0x37}, + {0x24, 0x01, 0x18}, + {0x2a, 0x17, 0x13}, + {0x14, 0x3b, 0x29}, + {0x2a, 0x19, 0x32}, + {0x2d, 0x17, 0x17}, + {0x0b, 0x2c, 0x33}, + {0x07, 0x2d, 0x34}, + {0x07, 0x38, 0x1d}, + {0x1f, 0x36, 0x22}, + {0x11, 0x0a, 0x17}, + {0x14, 0x11, 0x13}, + {0x2a, 0x17, 0x25}, + {0x01, 0x3a, 0x1c}, + {0x26, 0x27, 0x30}, + {0x2d, 0x3b, 0x35}, + {0x3a, 0x30, 0x34}, + {0x06, 0x3a, 0x1c}, + {0x2d, 0x05, 0x13}, + {0x21, 0x32, 0x12}, + {0x3e, 0x1e, 0x2c}, + {0x3a, 0x3f, 0x2d}, + {0x20, 0x2a, 0x34}, + {0x26, 0x03, 0x1a}, + {0x19, 0x27, 0x2e}, + {0x31, 0x04, 0x26}, + {0x2a, 0x3f, 0x30}, + {0x25, 0x23, 0x2a}, + {0x08, 0x08, 0x35}, + {0x2c, 0x30, 0x1e}, + {0x08, 0x05, 0x18}, + {0x06, 0x09, 0x2d}, + {0x19, 0x00, 0x27}, + {0x0d, 0x10, 0x19}, + {0x1c, 0x00, 0x13}, + {0x3d, 0x0b, 0x24}, + {0x2e, 0x1f, 0x16}, + {0x3d, 0x18, 0x34}, + {0x12, 0x1e, 0x15}, + {0x15, 0x39, 0x25}, + {0x33, 0x0f, 0x17}, + {0x1a, 0x1c, 0x1b}, + {0x37, 0x29, 0x1b}, + {0x3b, 0x38, 0x12}, + {0x1d, 0x22, 0x34}, + {0x26, 0x0a, 0x31}, + {0x16, 0x2d, 0x13}, + {0x0d, 0x20, 0x27}, + {0x24, 0x1d, 0x16}, + {0x2e, 0x2b, 0x18}, + {0x16, 0x2a, 0x1b}, + {0x24, 0x17, 0x36}, + {0x02, 0x05, 0x2b}, + {0x37, 0x1a, 0x17}, + {0x11, 0x3d, 0x2c}, + {0x1e, 0x2f, 0x22}, + {0x2c, 0x29, 0x1a}, + {0x2f, 0x04, 0x25}, + {0x36, 0x0c, 0x35}, + {0x30, 0x3e, 0x12}, + {0x11, 0x30, 0x37}, + {0x12, 0x21, 0x2e}, + {0x21, 0x30, 0x17}, + {0x2c, 0x3d, 0x24}, + {0x11, 0x23, 0x14}, + {0x1a, 0x32, 0x17}, + {0x39, 0x27, 0x18}, + {0x0f, 0x24, 0x19}, + {0x00, 0x3d, 0x37}, + {0x2c, 0x3c, 0x1c}, + {0x0b, 0x39, 0x23}, + {0x0e, 0x04, 0x1f}, + {0x1c, 0x31, 0x14}, + {0x00, 0x04, 0x15}, + {0x26, 0x2a, 0x2a}, + {0x20, 0x25, 0x2a}, + {0x0b, 0x3c, 0x33}, + {0x11, 0x0b, 0x2e}, + {0x37, 0x22, 0x2e}, + {0x0e, 0x22, 0x26}, + {0x18, 0x2d, 0x27}, + {0x06, 0x0c, 0x1c}, + {0x26, 0x18, 0x2f}, + {0x3a, 0x01, 0x2a}, + {0x2f, 0x31, 0x34}, + {0x1f, 0x34, 0x1a}, + {0x31, 0x05, 0x10}, + {0x2e, 0x17, 0x34}, + {0x18, 0x22, 0x23}, + {0x23, 0x21, 0x32}, + {0x07, 0x08, 0x22}, + {0x26, 0x1c, 0x22}, + {0x31, 0x12, 0x2f}, + {0x08, 0x1f, 0x10}, + {0x27, 0x15, 0x2a}, + {0x1f, 0x0b, 0x26}, + {0x2f, 0x14, 0x35}, + {0x24, 0x1f, 0x26}, + {0x3b, 0x23, 0x33}, + {0x20, 0x3e, 0x2d}, + {0x17, 0x0c, 0x15}, + {0x13, 0x39, 0x1a}, + {0x30, 0x14, 0x25}, + {0x09, 0x07, 0x17}, + {0x38, 0x38, 0x1f}, + {0x29, 0x24, 0x27}, + {0x17, 0x27, 0x28}, + {0x1b, 0x12, 0x2a}, + {0x2b, 0x3d, 0x2d}, + {0x19, 0x34, 0x1c}, + {0x01, 0x1d, 0x10}, + {0x08, 0x39, 0x11}, + {0x0e, 0x36, 0x1b}, + {0x26, 0x13, 0x10}, + {0x16, 0x28, 0x1e}, + {0x3c, 0x28, 0x17}, + {0x3e, 0x39, 0x34}, + {0x0a, 0x03, 0x2e}, + {0x37, 0x1a, 0x13}, + {0x2b, 0x33, 0x26}, + {0x13, 0x2c, 0x21}, + {0x25, 0x14, 0x10}, + {0x16, 0x0b, 0x35}, + {0x1d, 0x35, 0x33}, + {0x21, 0x08, 0x33}, + {0x28, 0x21, 0x1a}, + {0x12, 0x0c, 0x1b}, + {0x36, 0x2a, 0x19}, + {0x2c, 0x2b, 0x23}, + {0x01, 0x0f, 0x26}, + {0x17, 0x0c, 0x18}, + {0x09, 0x0f, 0x11}, + {0x2b, 0x24, 0x1c}, + {0x09, 0x09, 0x15}, + {0x36, 0x08, 0x13}, + {0x20, 0x39, 0x21}, + {0x00, 0x3a, 0x1f}, + {0x2b, 0x36, 0x31}, + {0x02, 0x37, 0x13}, + {0x04, 0x34, 0x35}, + {0x37, 0x3d, 0x1a}, + {0x17, 0x3d, 0x13}, + {0x2b, 0x36, 0x2f}, + {0x13, 0x1e, 0x13}, + {0x3e, 0x11, 0x33}, + {0x27, 0x3a, 0x2d}, + {0x1e, 0x31, 0x1a}, + {0x03, 0x03, 0x2d}, + {0x25, 0x37, 0x1f}, + {0x11, 0x01, 0x22}, + {0x1c, 0x12, 0x17}, + {0x30, 0x3a, 0x30}, + {0x17, 0x1d, 0x29}, + {0x0e, 0x13, 0x27}, + {0x1a, 0x2e, 0x24}, + {0x2d, 0x00, 0x1c}, + {0x17, 0x28, 0x1d}, + {0x09, 0x1f, 0x2e}, + {0x1a, 0x2d, 0x26}, + {0x0a, 0x13, 0x32}, + {0x3e, 0x00, 0x27}, + {0x0b, 0x3b, 0x30}, + {0x08, 0x3a, 0x2d}, + {0x22, 0x12, 0x1e}, + {0x34, 0x1d, 0x2b}, + {0x26, 0x22, 0x35}, + {0x17, 0x2c, 0x17}, + {0x29, 0x13, 0x2d}, + {0x2d, 0x10, 0x10}, + {0x20, 0x31, 0x23}, + {0x1e, 0x33, 0x18}, + {0x33, 0x06, 0x2d}, + {0x26, 0x14, 0x27}, + {0x22, 0x1d, 0x2a}, + {0x2d, 0x06, 0x18}, + {0x07, 0x09, 0x2e}, + {0x21, 0x15, 0x2e}, + {0x21, 0x38, 0x23}, + {0x35, 0x0b, 0x34}, + {0x24, 0x0b, 0x22}, + {0x1e, 0x01, 0x17}, + {0x0b, 0x24, 0x11}, + {0x17, 0x07, 0x20}, + {0x14, 0x25, 0x32}, + {0x1a, 0x0e, 0x2f}, + {0x35, 0x17, 0x1f}, + {0x0c, 0x08, 0x21}, + {0x30, 0x35, 0x1f}, + {0x0c, 0x0b, 0x20}, + {0x04, 0x10, 0x11}, + {0x35, 0x11, 0x1e}, + {0x33, 0x3d, 0x16}, + {0x1e, 0x2b, 0x1d}, + {0x1a, 0x19, 0x10}, + {0x04, 0x06, 0x22}, + {0x03, 0x3d, 0x24}, + {0x2a, 0x0e, 0x35}, + {0x03, 0x3e, 0x17}, + {0x0b, 0x18, 0x36}, + {0x3d, 0x0d, 0x26}, + {0x35, 0x12, 0x20}, + {0x1f, 0x0d, 0x16}, + {0x23, 0x32, 0x1a}, + {0x00, 0x3d, 0x26}, + {0x30, 0x19, 0x36}, + {0x12, 0x0e, 0x23}, + {0x01, 0x23, 0x28}, + {0x3b, 0x31, 0x11}, + {0x2d, 0x1c, 0x36}, + {0x2a, 0x05, 0x16}, + {0x14, 0x0e, 0x30}, + {0x3a, 0x37, 0x19}, + {0x1f, 0x30, 0x25}, + {0x10, 0x26, 0x2f}, + {0x22, 0x11, 0x1f}, + {0x2e, 0x2b, 0x1e}, + {0x16, 0x16, 0x21}, + {0x32, 0x18, 0x35}, + {0x23, 0x32, 0x1a}, + {0x3d, 0x0d, 0x19}, + {0x39, 0x09, 0x23}, + {0x30, 0x2e, 0x24}, + {0x1e, 0x0f, 0x24}, + {0x09, 0x21, 0x31}, + {0x05, 0x03, 0x11}, + {0x05, 0x22, 0x2a}, + {0x03, 0x07, 0x37}, + {0x04, 0x08, 0x13}, + {0x05, 0x10, 0x34}, + {0x37, 0x14, 0x29}, + {0x0a, 0x24, 0x32}, + {0x34, 0x1e, 0x1b}, + {0x12, 0x17, 0x2e}, + {0x01, 0x02, 0x13}, + {0x0a, 0x0c, 0x11}, + {0x02, 0x14, 0x13}, + {0x0d, 0x25, 0x23}, + {0x00, 0x07, 0x1a}, + {0x1c, 0x28, 0x35}, + {0x08, 0x0e, 0x2c}, + {0x1b, 0x3c, 0x15}, + {0x1c, 0x19, 0x1d}, + {0x32, 0x13, 0x1a}, + {0x1c, 0x00, 0x37}, + {0x22, 0x1b, 0x35}, + {0x39, 0x3e, 0x14}, + {0x32, 0x06, 0x31}, + {0x17, 0x05, 0x2b}, + {0x01, 0x0f, 0x20}, + {0x1e, 0x0f, 0x34}, + {0x18, 0x03, 0x1f}, + {0x2b, 0x00, 0x14}, + {0x15, 0x3a, 0x30}, + {0x25, 0x30, 0x21}, + {0x0b, 0x00, 0x37}, + {0x24, 0x37, 0x1d}, + {0x29, 0x21, 0x16}, + {0x24, 0x0f, 0x2c}, + {0x3e, 0x15, 0x36}, + {0x3c, 0x2d, 0x23}, + {0x3d, 0x3c, 0x17}, + {0x1a, 0x1c, 0x13}, + {0x0a, 0x29, 0x22}, + {0x25, 0x3f, 0x26}, + {0x3b, 0x39, 0x2f}, + {0x1d, 0x08, 0x16}, + {0x0b, 0x19, 0x14}, + {0x12, 0x01, 0x2c}, + {0x35, 0x11, 0x2a}, + {0x02, 0x00, 0x13}, + {0x39, 0x2a, 0x35}, + {0x07, 0x1a, 0x11}, + {0x24, 0x0e, 0x1e}, + {0x0e, 0x2c, 0x15}, + {0x08, 0x31, 0x1b}, + {0x21, 0x1d, 0x26}, + {0x1d, 0x1c, 0x2a}, + {0x1d, 0x24, 0x13}, + {0x01, 0x00, 0x18}, + {0x28, 0x2a, 0x37}, + {0x15, 0x0f, 0x13}, + {0x10, 0x32, 0x36}, + {0x22, 0x13, 0x31}, + {0x13, 0x05, 0x1e}, + {0x17, 0x35, 0x35}, + {0x3b, 0x0e, 0x24}, + {0x35, 0x3a, 0x1d}, + {0x1b, 0x36, 0x1b}, + {0x03, 0x1d, 0x24}, + {0x0f, 0x16, 0x30}, + {0x2d, 0x09, 0x25}, + {0x05, 0x21, 0x13}, + {0x0a, 0x27, 0x36}, + {0x04, 0x0d, 0x1c}, + {0x06, 0x3e, 0x21}, + {0x2a, 0x27, 0x33}, + {0x28, 0x0e, 0x15}, + {0x0b, 0x17, 0x1d}, + {0x1d, 0x32, 0x2d}, + {0x08, 0x3d, 0x29}, + {0x21, 0x32, 0x17}, + {0x33, 0x31, 0x22}, + {0x0e, 0x03, 0x21}, + {0x0d, 0x0b, 0x16}, + {0x3e, 0x2a, 0x2e}, + {0x19, 0x36, 0x2a}, + {0x0d, 0x00, 0x14}, + {0x22, 0x07, 0x36}, + {0x0a, 0x09, 0x15}, + {0x14, 0x10, 0x22}, + {0x07, 0x16, 0x2c}, + {0x36, 0x13, 0x15}, + {0x09, 0x2f, 0x1b}, + {0x20, 0x3b, 0x2e}, + {0x3a, 0x3a, 0x16}, + {0x0d, 0x15, 0x2a}, + {0x39, 0x13, 0x2b}, + {0x0b, 0x01, 0x2a}, + {0x13, 0x17, 0x1e}, + {0x08, 0x17, 0x1e}, + {0x0c, 0x0f, 0x34}, + {0x1f, 0x31, 0x12}, + {0x07, 0x3a, 0x1d}, + {0x35, 0x1e, 0x12}, + {0x24, 0x2c, 0x15}, + {0x0e, 0x21, 0x19}, + {0x34, 0x3b, 0x33}, + {0x19, 0x0f, 0x28}, + {0x10, 0x2f, 0x2e}, + {0x23, 0x27, 0x31}, + {0x39, 0x2e, 0x18}, + {0x3c, 0x3f, 0x24}, + {0x07, 0x23, 0x30}, + {0x28, 0x13, 0x35}, + {0x13, 0x0a, 0x10}, + {0x35, 0x19, 0x33}, + {0x23, 0x28, 0x29}, + {0x13, 0x2f, 0x1a}, + {0x3a, 0x19, 0x14}, + {0x37, 0x36, 0x26}, + {0x20, 0x3b, 0x15}, + {0x37, 0x39, 0x10}, + {0x3c, 0x21, 0x34}, + {0x1c, 0x38, 0x30}, + {0x15, 0x07, 0x26}, + {0x27, 0x21, 0x19}, + {0x18, 0x11, 0x23}, + {0x30, 0x28, 0x37}, + {0x32, 0x2d, 0x1f}, + {0x2c, 0x3f, 0x30}, + {0x1d, 0x2f, 0x26}, + {0x01, 0x11, 0x1c}, + {0x3b, 0x0f, 0x12}, + {0x2a, 0x17, 0x27}, + {0x05, 0x00, 0x1b}, + {0x25, 0x1c, 0x32}, + {0x04, 0x22, 0x2d}, + {0x10, 0x0f, 0x25}, + {0x0d, 0x39, 0x30}, + {0x0b, 0x2e, 0x27}, + {0x2d, 0x34, 0x15}, + {0x3e, 0x30, 0x36}, + {0x16, 0x26, 0x2a}, + {0x05, 0x3f, 0x2b}, + {0x20, 0x3b, 0x2e}, + {0x3b, 0x1c, 0x2f}, + {0x01, 0x18, 0x16}, + {0x16, 0x3d, 0x10}, + {0x0a, 0x1f, 0x18}, + {0x17, 0x0f, 0x22}, + {0x06, 0x13, 0x11}, + {0x38, 0x21, 0x17}, + {0x17, 0x0a, 0x37}, + {0x1c, 0x19, 0x30}, + {0x16, 0x38, 0x31}, + {0x30, 0x10, 0x36}, + {0x31, 0x2f, 0x26}, + {0x3c, 0x1b, 0x23}, + {0x33, 0x2f, 0x19}, + {0x16, 0x35, 0x25}, + {0x3a, 0x18, 0x1f}, + {0x37, 0x01, 0x1e}, + {0x0d, 0x18, 0x12}, + {0x1f, 0x1c, 0x1b}, + {0x07, 0x34, 0x2d}, + {0x0b, 0x3f, 0x33}, + {0x1e, 0x34, 0x1d}, + {0x2c, 0x13, 0x2c}, + {0x20, 0x20, 0x13}, + {0x20, 0x0f, 0x31}, + {0x08, 0x0f, 0x24}, + {0x18, 0x3d, 0x1c}, + {0x36, 0x34, 0x27}, + {0x33, 0x2a, 0x25}, + {0x2d, 0x30, 0x26}, + {0x3d, 0x37, 0x26}, + {0x25, 0x11, 0x11}, + {0x03, 0x05, 0x18}, + {0x10, 0x04, 0x29}, + {0x07, 0x2e, 0x36}, + {0x2a, 0x29, 0x15}, + {0x3a, 0x0e, 0x33}, + {0x2a, 0x06, 0x29}, + {0x3d, 0x01, 0x29}, + {0x27, 0x0e, 0x16}, + {0x1d, 0x28, 0x1b}, + {0x10, 0x33, 0x2b}, + {0x0c, 0x14, 0x1d}, + {0x15, 0x3f, 0x25}, + {0x37, 0x23, 0x1e}, + {0x04, 0x2c, 0x1c}, + {0x15, 0x34, 0x2a}, + {0x09, 0x2f, 0x15}, + {0x02, 0x3f, 0x14}, + {0x19, 0x2c, 0x33}, + {0x39, 0x32, 0x20}, + {0x2a, 0x18, 0x32}, + {0x17, 0x23, 0x21}, + {0x0b, 0x2d, 0x25}, + {0x24, 0x3a, 0x2d}, + {0x31, 0x3f, 0x34}, + {0x18, 0x19, 0x24}, + {0x1e, 0x15, 0x1a}, + {0x17, 0x33, 0x2b}, + {0x23, 0x09, 0x26}, + {0x1b, 0x0d, 0x15}, + {0x36, 0x26, 0x28}, + {0x3a, 0x1c, 0x14}, + {0x0c, 0x3e, 0x10}, + {0x18, 0x06, 0x35}, + {0x37, 0x26, 0x36}, + {0x21, 0x26, 0x17}, + {0x3d, 0x1c, 0x2c}, + {0x16, 0x25, 0x1d}, + {0x1e, 0x0b, 0x1e}, + {0x1d, 0x0d, 0x32}, + {0x08, 0x1f, 0x1b}, + {0x12, 0x1c, 0x12}, + {0x20, 0x2a, 0x28}, + {0x06, 0x3b, 0x35}, + {0x39, 0x0e, 0x1e}, + {0x31, 0x30, 0x28}, + {0x02, 0x21, 0x14}, + {0x06, 0x1e, 0x29}, + {0x16, 0x09, 0x1c}, + {0x27, 0x32, 0x2d}, + {0x39, 0x03, 0x27}, + {0x29, 0x09, 0x1e}, + {0x1b, 0x11, 0x1c}, + {0x28, 0x3a, 0x2c}, + {0x03, 0x03, 0x18}, + {0x23, 0x09, 0x2f}, + {0x30, 0x17, 0x23}, + {0x0f, 0x25, 0x33}, + {0x06, 0x24, 0x37}, + {0x22, 0x09, 0x33}, + {0x2c, 0x09, 0x2a}, + {0x0c, 0x12, 0x2a}, + {0x28, 0x20, 0x10}, + {0x15, 0x29, 0x33}, + {0x0f, 0x1a, 0x13}, + {0x13, 0x18, 0x36}, + {0x2e, 0x16, 0x13}, + {0x3c, 0x1a, 0x15}, + {0x3a, 0x11, 0x32}, + {0x02, 0x0a, 0x2c}, + {0x19, 0x39, 0x11}, + {0x31, 0x3e, 0x1d}, + {0x32, 0x14, 0x32}, + {0x12, 0x2e, 0x34}, + {0x3e, 0x36, 0x23}, + {0x37, 0x3e, 0x15}, + {0x15, 0x35, 0x34}, + {0x01, 0x3a, 0x2c}, + {0x26, 0x25, 0x22}, + {0x01, 0x2b, 0x37}, + {0x1c, 0x3d, 0x33}, + {0x3e, 0x10, 0x1c}, + {0x26, 0x33, 0x19}, + {0x05, 0x19, 0x17}, + {0x12, 0x38, 0x1c}, + {0x15, 0x3c, 0x32}, + {0x3f, 0x0f, 0x37}, + {0x02, 0x39, 0x32}, + {0x13, 0x00, 0x1d}, + {0x1d, 0x2c, 0x10}, + {0x39, 0x13, 0x31}, + {0x0f, 0x37, 0x19}, + {0x09, 0x0d, 0x2a}, + {0x20, 0x2f, 0x32}, + {0x3b, 0x34, 0x22}, + {0x26, 0x14, 0x10}, + {0x24, 0x3d, 0x22}, + {0x0b, 0x31, 0x23}, + {0x2f, 0x2d, 0x2a}, + {0x30, 0x04, 0x35}, + {0x19, 0x20, 0x2a}, + {0x16, 0x36, 0x37}, + {0x14, 0x28, 0x37}, + {0x11, 0x0b, 0x27}, + {0x1d, 0x06, 0x29}, + {0x35, 0x16, 0x2e}, + {0x24, 0x2e, 0x29}, + {0x36, 0x14, 0x2a}, + {0x21, 0x0c, 0x1f}, + {0x3f, 0x39, 0x19}, + {0x27, 0x10, 0x2a}, + {0x1e, 0x12, 0x34}, + {0x10, 0x24, 0x34}, + {0x1d, 0x13, 0x1d}, + {0x17, 0x16, 0x37}, + {0x27, 0x1b, 0x27}, + {0x07, 0x24, 0x21}, + {0x37, 0x21, 0x11}, + {0x37, 0x28, 0x24}, + {0x19, 0x02, 0x1c}, + {0x14, 0x12, 0x1d}, + {0x1b, 0x24, 0x2e}, + {0x2e, 0x3a, 0x15}, + {0x37, 0x34, 0x21}, + {0x33, 0x2d, 0x29}, + {0x2f, 0x1e, 0x34}, + {0x29, 0x3c, 0x12}, + {0x05, 0x15, 0x20}, + {0x05, 0x3e, 0x19}, + {0x18, 0x0b, 0x30}, + {0x2f, 0x02, 0x27}, + {0x14, 0x1c, 0x34}, + {0x12, 0x20, 0x30}, + {0x2b, 0x22, 0x1b}, + {0x06, 0x31, 0x28}, + {0x15, 0x2d, 0x12}, + {0x01, 0x0e, 0x13}, + {0x13, 0x0c, 0x28}, + {0x07, 0x2a, 0x14}, + {0x1d, 0x36, 0x14}, + {0x15, 0x2b, 0x26}, + {0x03, 0x25, 0x15}, + {0x3e, 0x3b, 0x20}, + {0x35, 0x0c, 0x25}, + {0x2b, 0x16, 0x35}, + {0x1e, 0x31, 0x2c}, + {0x06, 0x03, 0x29}, + {0x24, 0x07, 0x1f}, + {0x32, 0x2f, 0x19}, + {0x25, 0x21, 0x31}, + {0x22, 0x26, 0x1d}, + {0x00, 0x1b, 0x18}, + {0x2a, 0x24, 0x31}, + {0x20, 0x06, 0x2f}, + {0x1e, 0x32, 0x26}, + {0x32, 0x39, 0x12}, + {0x20, 0x01, 0x19}, + {0x0f, 0x15, 0x15}, + {0x27, 0x10, 0x2e}, + {0x09, 0x25, 0x19}, + {0x29, 0x37, 0x30}, + {0x13, 0x1c, 0x1d}, + {0x29, 0x2d, 0x26}, + {0x02, 0x1a, 0x16}, + {0x1d, 0x2b, 0x1c}, + {0x18, 0x04, 0x34}, + {0x28, 0x2a, 0x21}, + {0x15, 0x1b, 0x2e}, + {0x16, 0x01, 0x10}, + {0x05, 0x09, 0x14}, + {0x22, 0x03, 0x22}, + {0x02, 0x1b, 0x34}, + {0x29, 0x2a, 0x23}, + {0x26, 0x36, 0x13}, + {0x23, 0x3d, 0x1a}, + {0x1d, 0x10, 0x24}, + {0x25, 0x2b, 0x37}, + {0x19, 0x24, 0x26}, + {0x28, 0x13, 0x16}, + {0x17, 0x14, 0x19}, + {0x0b, 0x2f, 0x25}, + {0x37, 0x34, 0x37}, + {0x39, 0x21, 0x1b}, + {0x0f, 0x3d, 0x2d}, + {0x0d, 0x10, 0x20}, + {0x05, 0x0b, 0x2d}, + {0x01, 0x12, 0x24}, + {0x18, 0x3d, 0x32}, + {0x09, 0x21, 0x26}, + {0x1a, 0x0e, 0x1f}, + {0x30, 0x06, 0x1f}, + {0x0b, 0x3c, 0x29}, + {0x07, 0x3e, 0x27}, + {0x13, 0x1e, 0x1a}, + {0x13, 0x07, 0x23}, + {0x10, 0x34, 0x1e}, + {0x32, 0x17, 0x23}, + {0x35, 0x16, 0x31}, + {0x32, 0x2e, 0x1b}, + {0x28, 0x0e, 0x22}, + {0x14, 0x3a, 0x23}, + {0x22, 0x03, 0x29}, + {0x2a, 0x10, 0x20}, + {0x3e, 0x3c, 0x27}, + {0x16, 0x20, 0x12}, + {0x3f, 0x24, 0x31}, + {0x0d, 0x2e, 0x32}, + {0x2f, 0x17, 0x2d}, + {0x36, 0x3b, 0x17}, + {0x24, 0x23, 0x18}, + {0x37, 0x1d, 0x13}, + {0x17, 0x3a, 0x1a}, + {0x0a, 0x3d, 0x1e}, + {0x05, 0x12, 0x16}, + {0x33, 0x32, 0x25}, + {0x1d, 0x1f, 0x29}, + {0x34, 0x2c, 0x26}, + {0x20, 0x29, 0x35}, + {0x0e, 0x32, 0x17}, + {0x01, 0x39, 0x2d}, + {0x27, 0x24, 0x23}, + {0x28, 0x3f, 0x18}, + {0x39, 0x38, 0x25}, + {0x23, 0x11, 0x11}, + {0x19, 0x2c, 0x29}, + {0x30, 0x08, 0x28}, + {0x25, 0x27, 0x1d}, + {0x17, 0x25, 0x21}, + {0x09, 0x3d, 0x16}, + {0x1b, 0x0f, 0x2c}, + {0x1b, 0x12, 0x22}, + {0x28, 0x3e, 0x26}, + {0x34, 0x10, 0x1b}, + {0x02, 0x34, 0x15}, + {0x1a, 0x29, 0x19}, + {0x29, 0x11, 0x31}, + {0x12, 0x27, 0x17}, + {0x27, 0x27, 0x2f}, + {0x34, 0x27, 0x24}, + {0x03, 0x19, 0x36}, + {0x17, 0x1d, 0x33}, + {0x19, 0x25, 0x1a}, + {0x2b, 0x39, 0x13}, + {0x3b, 0x33, 0x1d}, + {0x27, 0x31, 0x34}, + {0x28, 0x33, 0x37}, + {0x09, 0x30, 0x1b}, + {0x03, 0x3a, 0x27}, + {0x19, 0x11, 0x1f}, + {0x0b, 0x1a, 0x34}, + {0x3d, 0x2a, 0x15}, + {0x04, 0x24, 0x36}, + {0x30, 0x23, 0x30}, + {0x0f, 0x22, 0x1b}, + {0x3d, 0x3d, 0x24}, + {0x29, 0x1d, 0x12}, + {0x16, 0x19, 0x2e}, + {0x03, 0x12, 0x17}, + {0x18, 0x25, 0x33}, + {0x2f, 0x23, 0x1a}, + {0x1a, 0x35, 0x27}, + {0x21, 0x26, 0x19}, + {0x1b, 0x30, 0x18}, + {0x2b, 0x22, 0x2d}, + {0x2c, 0x1a, 0x34}, + {0x3e, 0x12, 0x19}, + {0x28, 0x27, 0x15}, + {0x1b, 0x11, 0x12}, + {0x17, 0x15, 0x10}, + {0x34, 0x37, 0x25}, + {0x12, 0x3f, 0x15}, + {0x31, 0x0d, 0x37}, + {0x3e, 0x2a, 0x2d}, + {0x0f, 0x24, 0x24}, + {0x3c, 0x3f, 0x1f}, + {0x1d, 0x34, 0x17}, + {0x1a, 0x23, 0x1f}, + {0x37, 0x0f, 0x10}, + {0x32, 0x34, 0x35}, + {0x19, 0x05, 0x22}, + {0x33, 0x16, 0x34}, + {0x1e, 0x14, 0x1e}, + {0x08, 0x13, 0x29}, + {0x3a, 0x37, 0x30}, + {0x1d, 0x36, 0x15}, + {0x29, 0x2e, 0x1d}, + {0x32, 0x2e, 0x23}, + {0x35, 0x17, 0x1c}, + {0x36, 0x1d, 0x13}, + {0x23, 0x34, 0x34}, + {0x24, 0x1a, 0x37}, + {0x2f, 0x26, 0x2e}, + {0x1e, 0x17, 0x1a}, + {0x1f, 0x15, 0x1f}, + {0x2b, 0x1f, 0x19}, + {0x0a, 0x33, 0x1a}, + {0x35, 0x31, 0x24}, + {0x2d, 0x17, 0x2c}, + {0x0c, 0x21, 0x36}, + {0x2c, 0x35, 0x35}, + {0x1b, 0x03, 0x27}, + {0x01, 0x0d, 0x1d}, + {0x1c, 0x0e, 0x11}, + {0x11, 0x2b, 0x10}, + {0x25, 0x3b, 0x20}, + {0x1f, 0x17, 0x19}, + {0x20, 0x08, 0x36}, + {0x13, 0x38, 0x19}, + {0x1b, 0x2b, 0x24}, + {0x0b, 0x1f, 0x29}, + {0x27, 0x15, 0x2c}, + {0x37, 0x39, 0x10}, + {0x3a, 0x15, 0x2e}, + {0x2f, 0x11, 0x36}, + {0x24, 0x04, 0x20}, + {0x3b, 0x2a, 0x35}, + {0x27, 0x35, 0x34}, + {0x0d, 0x1b, 0x20}, + {0x10, 0x22, 0x37}, + {0x1f, 0x38, 0x27}, + {0x31, 0x0f, 0x28}, + {0x28, 0x25, 0x15}, + {0x00, 0x1d, 0x25}, + {0x31, 0x28, 0x28}, + {0x0b, 0x3a, 0x1d}, + {0x2d, 0x13, 0x1b}, + {0x03, 0x37, 0x2e}, + {0x1d, 0x28, 0x19}, + {0x08, 0x2d, 0x22}, + {0x27, 0x39, 0x32}, + {0x3f, 0x2f, 0x1d}, + {0x33, 0x34, 0x28}, + {0x18, 0x08, 0x31}, + {0x23, 0x1f, 0x13}, + {0x0d, 0x2c, 0x23}, + {0x3a, 0x2d, 0x1a}, + {0x02, 0x25, 0x13}, + {0x20, 0x36, 0x34}, + {0x12, 0x2b, 0x2d}, + {0x35, 0x35, 0x34}, + {0x23, 0x20, 0x21}, + {0x3a, 0x19, 0x1b}, + {0x1f, 0x2b, 0x19}, + {0x35, 0x0e, 0x19}, + {0x26, 0x24, 0x37}, + {0x18, 0x08, 0x10}, + {0x0c, 0x16, 0x2d}, + {0x1f, 0x34, 0x21}, + {0x05, 0x38, 0x19}, + {0x14, 0x21, 0x24}, + {0x11, 0x31, 0x14}, + {0x3e, 0x38, 0x29}, + {0x3f, 0x08, 0x25}, + {0x2a, 0x1f, 0x25}, + {0x25, 0x06, 0x28}, + {0x0b, 0x1e, 0x14}, + {0x1a, 0x38, 0x22}, + {0x24, 0x18, 0x29}, + {0x1a, 0x11, 0x20}, + {0x3b, 0x3a, 0x1e}, + {0x1c, 0x26, 0x1a}, + {0x05, 0x32, 0x19}, + {0x39, 0x2a, 0x31}, + {0x09, 0x07, 0x25}, + {0x05, 0x3e, 0x16}, + {0x34, 0x26, 0x14}, + {0x1b, 0x32, 0x26}, + {0x05, 0x08, 0x37}, + {0x0f, 0x03, 0x20}, + {0x2a, 0x39, 0x31}, + {0x08, 0x01, 0x1e}, + {0x1d, 0x23, 0x31}, + {0x28, 0x1b, 0x28}, + {0x1e, 0x37, 0x14}, + {0x13, 0x0e, 0x28}, + {0x2a, 0x3b, 0x37}, + {0x2f, 0x1c, 0x28}, + {0x30, 0x30, 0x1a}, + {0x36, 0x1f, 0x16}, + {0x3e, 0x0d, 0x15}, + {0x2e, 0x16, 0x18}, + {0x15, 0x37, 0x20}, + {0x2a, 0x33, 0x30}, + {0x2b, 0x0e, 0x25}, + {0x18, 0x20, 0x16}, + {0x02, 0x19, 0x25}, + {0x0a, 0x2e, 0x30}, + {0x16, 0x03, 0x11}, + {0x04, 0x27, 0x25}, + {0x1b, 0x1c, 0x21}, + {0x29, 0x04, 0x27}, + {0x3d, 0x20, 0x1e}, + {0x28, 0x33, 0x31}, + {0x1e, 0x39, 0x10}, + {0x31, 0x29, 0x1e}, + {0x06, 0x25, 0x28}, + {0x19, 0x3b, 0x12}, + {0x0b, 0x1b, 0x1c}, + {0x3e, 0x37, 0x20}, + {0x0a, 0x37, 0x33}, + {0x02, 0x2c, 0x25}, + {0x15, 0x18, 0x14}, + {0x3b, 0x20, 0x1c}, + {0x22, 0x3b, 0x1c}, + {0x24, 0x34, 0x35}, + {0x0f, 0x2f, 0x31}, + {0x3b, 0x17, 0x35}, + {0x30, 0x39, 0x37}, + {0x0d, 0x15, 0x11}, + {0x10, 0x03, 0x1e}, + {0x1a, 0x39, 0x33}, + {0x2f, 0x2e, 0x28}, + {0x1c, 0x28, 0x36}, + {0x28, 0x18, 0x1f}, + {0x15, 0x01, 0x30}, + {0x3e, 0x32, 0x28}, + {0x34, 0x2f, 0x23}, + {0x07, 0x0c, 0x36}, + {0x28, 0x2c, 0x34}, + {0x2a, 0x0c, 0x1f}, + {0x3f, 0x20, 0x13}, + {0x2b, 0x17, 0x27}, + {0x28, 0x29, 0x2a}, + {0x3c, 0x13, 0x36}, + {0x26, 0x2d, 0x2a}, + {0x0a, 0x06, 0x1e}, + {0x20, 0x04, 0x1a}, + {0x02, 0x07, 0x35}, + {0x0e, 0x18, 0x30}, + {0x00, 0x34, 0x34}, + {0x2f, 0x14, 0x37}, + {0x21, 0x30, 0x1f}, + {0x15, 0x37, 0x1b}, + {0x3a, 0x0b, 0x32}, + {0x22, 0x22, 0x21}, + {0x1b, 0x35, 0x23}, + {0x0d, 0x03, 0x1c}, + {0x23, 0x3b, 0x13}, + {0x0e, 0x1d, 0x1f}, + {0x1d, 0x3f, 0x2e}, + {0x39, 0x27, 0x2e}, + {0x0f, 0x38, 0x20}, + {0x31, 0x3c, 0x35}, + {0x0b, 0x0f, 0x2e}, + {0x06, 0x06, 0x28}, + {0x25, 0x39, 0x23}, + {0x0a, 0x32, 0x15}, + {0x0f, 0x1d, 0x25}, + {0x0c, 0x0d, 0x34}, + {0x12, 0x2e, 0x21}, + {0x36, 0x18, 0x1f}, + {0x1f, 0x34, 0x1b}, + {0x05, 0x3a, 0x36}, + {0x2b, 0x01, 0x17}, + {0x0e, 0x16, 0x2b}, + {0x0e, 0x0b, 0x26}, + {0x0d, 0x2d, 0x10}, + {0x21, 0x11, 0x27}, + {0x3d, 0x13, 0x32}, + {0x15, 0x25, 0x2a}, + {0x1b, 0x2d, 0x35}, + {0x2c, 0x2b, 0x26}, + {0x26, 0x1f, 0x20}, + {0x22, 0x2b, 0x12}, + {0x3f, 0x3d, 0x27}, + {0x30, 0x0a, 0x36}, + {0x35, 0x1f, 0x17}, + {0x21, 0x08, 0x29}, + {0x1d, 0x20, 0x33}, + {0x34, 0x11, 0x16}, + {0x05, 0x38, 0x2d} +}; void ApplyImageProcessingEffects(struct ImageProcessingContext *context) { @@ -167,7 +3368,7 @@ static void ApplyImageEffect_RedChannelGrayscaleHighlight(u8 highlight) static void ApplyImageEffect_Pointillism(void) { u32 i; - for (i = 0; i < 3200; i++) + for (i = 0; i < NELEMS(sPointillismPoints); i++) AddPointillismPoints(i); } @@ -413,12 +3614,12 @@ static void AddPointillismPoints(u16 arg0) u8 colorType; struct PointillismPoint points[6]; - points[0].column = gPointillismPoints[arg0][0]; - points[0].row = gPointillismPoints[arg0][1]; - points[0].delta = (gPointillismPoints[arg0][2] >> 3) & 7; + points[0].column = sPointillismPoints[arg0][0]; + points[0].row = sPointillismPoints[arg0][1]; + points[0].delta = (sPointillismPoints[arg0][2] >> 3) & 7; - colorType = (gPointillismPoints[arg0][2] >> 1) & 3; - offsetDownLeft = gPointillismPoints[arg0][2] & 1; + colorType = (sPointillismPoints[arg0][2] >> 1) & 3; + offsetDownLeft = sPointillismPoints[arg0][2] & 1; for (i = 1; i < points[0].delta; i++) { if (!offsetDownLeft) @@ -455,7 +3656,7 @@ static void AddPointillismPoints(u16 arg0) { case 0: case 1: - switch (((gPointillismPoints[arg0][2] >> 3) & 7) % 3) + switch (((sPointillismPoints[arg0][2] >> 3) & 7) % 3) { case 0: if (red >= points[i].delta) diff --git a/src/region_map.c b/src/region_map.c index 7a411b8e8..271ce548f 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -40,12 +40,9 @@ struct UnkStruct_20399D4 bool8 regionMapPermissions[4]; u8 field_479B; u8 field_479C; - u8 filler_479D[3]; - u8 field_47A0; - u8 filler_47A1[3]; - u8 field_47A4; - u8 filler_47A5[3]; - u8 field_47A8; + u8 ALIGNED(4) field_47A0; + u8 ALIGNED(4) field_47A4; + u8 ALIGNED(4) field_47A8; u16 field_47AA; u16 field_47AC; u16 field_47AE; @@ -300,8 +297,8 @@ static void sub_80C41D8(u16 a0, u16 a1); static void sub_80C4244(void); static void sub_80C4324(bool8 a0); static void sub_80C4348(void); -static u16 sub_80C4380(); -static u16 sub_80C438C(); +static u16 sub_80C4380(void); +static u16 sub_80C438C(void); static void sub_80C4398(u8 a0, u8 taskId, TaskFunc taskFunc); static void sub_80C440C(u8 taskId); static void sub_80C44E4(u8 taskId); -- cgit v1.2.3 From 4e87e3567f91b0b2ebf792a7a2f9030a63578dfd Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 8 Jan 2020 18:29:48 -0500 Subject: Remove comment on sub_8124C1C --- src/party_menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/party_menu.c b/src/party_menu.c index 399794b2d..6e0b411bf 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4201,7 +4201,7 @@ static void sub_8124BB0(struct Pokemon *mon, u8 fieldMove) Free(ptr); } -void sub_8124C1C(const u8 *healLocCtrlData) // TODO: confirm the type of data chunk at 0x83F2EE0 +void sub_8124C1C(const u8 *healLocCtrlData) { const struct MapHeader *mapHeader; struct FieldMoveWarpParams *ptr2; -- cgit v1.2.3 From a436d79177fc54927d14cc2114802dee74176a6b Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 24 Dec 2019 04:25:49 +0800 Subject: partially sync with knizz's documentation --- asm/librfu.s | 792 +++++++++++++++++++++++++++---------------------------- asm/link_rfu.s | 134 +++++----- asm/link_rfu_2.s | 128 ++++----- asm/link_rfu_3.s | 4 +- include/librfu.h | 214 +++++++++------ src/trade.c | 10 +- sym_common.txt | 10 +- 7 files changed, 675 insertions(+), 617 deletions(-) diff --git a/asm/librfu.s b/asm/librfu.s index 03bf3eeb8..2e17aef23 100644 --- a/asm/librfu.s +++ b/asm/librfu.s @@ -5,8 +5,8 @@ .text - thumb_func_start sub_81E05B0 -sub_81E05B0: @ 81E05B0 + thumb_func_start rfu_initializeAPI +rfu_initializeAPI: @ 81E05B0 push {r4-r7,lr} adds r4, r0, 0 mov r12, r2 @@ -48,21 +48,21 @@ _081E05EA: .align 2, 0 _081E05F4: .4byte 0x00000504 _081E05F8: - ldr r0, _081E06CC @ =gUnknown_3007460 + ldr r0, _081E06CC @ =gRfuLinkStatus str r4, [r0] - ldr r1, _081E06D0 @ =gUnknown_3007464 + ldr r1, _081E06D0 @ =gRfuStatic adds r0, r4, 0 adds r0, 0xB4 str r0, [r1] - ldr r1, _081E06D4 @ =gUnknown_3007468 + ldr r1, _081E06D4 @ =gRfuFixed adds r0, 0x28 str r0, [r1] - ldr r2, _081E06D8 @ =gUnknown_3007450 + ldr r2, _081E06D8 @ =gRfuSlotStatusNI movs r1, 0xDE lsls r1, 1 adds r0, r4, r1 str r0, [r2] - ldr r1, _081E06DC @ =gUnknown_3007440 + ldr r1, _081E06DC @ =gRfuSlotStatusUNI movs r3, 0xDF lsls r3, 2 adds r0, r4, r3 @@ -89,10 +89,10 @@ _081E0624: lsrs r5, r0, 16 cmp r5, 0x3 bls _081E0624 - ldr r0, _081E06D4 @ =gUnknown_3007468 + ldr r0, _081E06D4 @ =gRfuFixed ldr r1, [r0] adds r1, 0xDC - ldr r4, _081E06DC @ =gUnknown_3007440 + ldr r4, _081E06DC @ =gRfuSlotStatusUNI ldr r0, [r4, 0xC] adds r0, 0x1C str r0, [r1] @@ -101,7 +101,7 @@ _081E0624: bl STWI_init_all bl rfu_STC_clearAPIVariables movs r5, 0 - ldr r3, _081E06D8 @ =gUnknown_3007450 + ldr r3, _081E06D8 @ =gRfuSlotStatusNI movs r2, 0 _081E0668: lsls r1, r5, 2 @@ -118,11 +118,11 @@ _081E0668: lsrs r5, r0, 16 cmp r5, 0x3 bls _081E0668 - ldr r1, _081E06E0 @ =sub_81E1B24 + ldr r1, _081E06E0 @ =rfu_STC_fastCopy movs r5, 0x2 negs r5, r5 ands r5, r1 - ldr r2, _081E06D4 @ =gUnknown_3007468 + ldr r2, _081E06D4 @ =gRfuFixed ldr r0, [r2] adds r4, r0, 0 adds r4, 0x8 @@ -158,15 +158,15 @@ _081E06C6: pop {r1} bx r1 .align 2, 0 -_081E06CC: .4byte gUnknown_3007460 -_081E06D0: .4byte gUnknown_3007464 -_081E06D4: .4byte gUnknown_3007468 -_081E06D8: .4byte gUnknown_3007450 -_081E06DC: .4byte gUnknown_3007440 -_081E06E0: .4byte sub_81E1B24 +_081E06CC: .4byte gRfuLinkStatus +_081E06D0: .4byte gRfuStatic +_081E06D4: .4byte gRfuFixed +_081E06D8: .4byte gRfuSlotStatusNI +_081E06DC: .4byte gRfuSlotStatusUNI +_081E06E0: .4byte rfu_STC_fastCopy _081E06E4: .4byte rfu_REQ_changeMasterSlave _081E06E8: .4byte 0x0000ffff - thumb_func_end sub_81E05B0 + thumb_func_end rfu_initializeAPI thumb_func_start rfu_STC_clearAPIVariables rfu_STC_clearAPIVariables: @ 81E06EC @@ -177,7 +177,7 @@ rfu_STC_clearAPIVariables: @ 81E06EC adds r7, r0, 0 movs r6, 0 strh r6, [r1] - ldr r5, _081E0764 @ =gUnknown_3007464 + ldr r5, _081E0764 @ =gRfuStatic ldr r1, [r5] ldrb r4, [r1] mov r0, sp @@ -192,7 +192,7 @@ rfu_STC_clearAPIVariables: @ 81E06EC mov r0, sp adds r0, 0x2 strh r1, [r0] - ldr r4, _081E076C @ =gUnknown_3007460 + ldr r4, _081E076C @ =gRfuLinkStatus ldr r1, [r4] ldr r2, _081E0770 @ =0x0100005a bl CpuSet @@ -228,9 +228,9 @@ _081E0740: bx r0 .align 2, 0 _081E0760: .4byte 0x04000208 -_081E0764: .4byte gUnknown_3007464 +_081E0764: .4byte gRfuStatic _081E0768: .4byte 0x01000014 -_081E076C: .4byte gUnknown_3007460 +_081E076C: .4byte gRfuLinkStatus _081E0770: .4byte 0x0100005a thumb_func_end rfu_STC_clearAPIVariables @@ -252,7 +252,7 @@ rfu_UNI_PARENT_getDRAC_ACK: @ 81E0788 adds r4, r0, 0 movs r0, 0 strb r0, [r4] - ldr r5, _081E07A0 @ =gUnknown_3007460 + ldr r5, _081E07A0 @ =gRfuLinkStatus ldr r0, [r5] ldrb r0, [r0] cmp r0, 0x1 @@ -261,7 +261,7 @@ rfu_UNI_PARENT_getDRAC_ACK: @ 81E0788 lsls r0, 2 b _081E07CA .align 2, 0 -_081E07A0: .4byte gUnknown_3007460 +_081E07A0: .4byte gRfuLinkStatus _081E07A4: bl rfu_getSTWIRecvBuffer adds r1, r0, 0 @@ -306,13 +306,13 @@ rfu_setTimerInterrupt: @ 81E07D0 thumb_func_start rfu_getSTWIRecvBuffer rfu_getSTWIRecvBuffer: @ 81E07E4 - ldr r0, _081E07F0 @ =gUnknown_3007468 + ldr r0, _081E07F0 @ =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r0, [r0] bx lr .align 2, 0 -_081E07F0: .4byte gUnknown_3007468 +_081E07F0: .4byte gRfuFixed thumb_func_end rfu_getSTWIRecvBuffer thumb_func_start rfu_setMSCCallback @@ -327,7 +327,7 @@ rfu_setMSCCallback: @ 81E07F4 rfu_setREQCallback: @ 81E0800 push {lr} adds r1, r0, 0 - ldr r0, _081E0818 @ =gUnknown_3007468 + ldr r0, _081E0818 @ =gRfuFixed ldr r0, [r0] str r1, [r0] negs r0, r1 @@ -337,7 +337,7 @@ rfu_setREQCallback: @ 81E0800 pop {r0} bx r0 .align 2, 0 -_081E0818: .4byte gUnknown_3007468 +_081E0818: .4byte gRfuFixed thumb_func_end rfu_setREQCallback thumb_func_start rfu_enableREQCallback @@ -346,16 +346,16 @@ rfu_enableREQCallback: @ 81E081C lsls r0, 24 cmp r0, 0 beq _081E0834 - ldr r0, _081E0830 @ =gUnknown_3007464 + ldr r0, _081E0830 @ =gRfuStatic ldr r2, [r0] ldrb r1, [r2] movs r0, 0x8 orrs r0, r1 b _081E083E .align 2, 0 -_081E0830: .4byte gUnknown_3007464 +_081E0830: .4byte gRfuStatic _081E0834: - ldr r0, _081E0844 @ =gUnknown_3007464 + ldr r0, _081E0844 @ =gRfuStatic ldr r2, [r0] ldrb r1, [r2] movs r0, 0xF7 @@ -365,7 +365,7 @@ _081E083E: pop {r0} bx r0 .align 2, 0 -_081E0844: .4byte gUnknown_3007464 +_081E0844: .4byte gRfuStatic thumb_func_end rfu_enableREQCallback thumb_func_start rfu_STC_REQ_callback @@ -377,7 +377,7 @@ rfu_STC_REQ_callback: @ 81E0848 lsrs r4, r1, 16 ldr r0, _081E087C @ =rfu_CB_defaultCallback bl STWI_set_Callback_M - ldr r0, _081E0880 @ =gUnknown_3007464 + ldr r0, _081E0880 @ =gRfuStatic ldr r0, [r0] strh r4, [r0, 0x1C] ldrb r1, [r0] @@ -385,7 +385,7 @@ rfu_STC_REQ_callback: @ 81E0848 ands r0, r1 cmp r0, 0 beq _081E0876 - ldr r0, _081E0884 @ =gUnknown_3007468 + ldr r0, _081E0884 @ =gRfuFixed ldr r0, [r0] ldr r2, [r0] adds r0, r5, 0 @@ -397,8 +397,8 @@ _081E0876: bx r0 .align 2, 0 _081E087C: .4byte rfu_CB_defaultCallback -_081E0880: .4byte gUnknown_3007464 -_081E0884: .4byte gUnknown_3007468 +_081E0880: .4byte gRfuStatic +_081E0884: .4byte gRfuFixed thumb_func_end rfu_STC_REQ_callback thumb_func_start rfu_CB_defaultCallback @@ -410,21 +410,21 @@ rfu_CB_defaultCallback: @ 81E0888 lsrs r3, r1, 16 cmp r0, 0xFF bne _081E08E4 - ldr r0, _081E08EC @ =gUnknown_3007464 + ldr r0, _081E08EC @ =gRfuStatic ldr r0, [r0] ldrb r1, [r0] movs r0, 0x8 ands r0, r1 cmp r0, 0 beq _081E08B2 - ldr r0, _081E08F0 @ =gUnknown_3007468 + ldr r0, _081E08F0 @ =gRfuFixed ldr r0, [r0] ldr r2, [r0] movs r0, 0xFF adds r1, r3, 0 bl _call_via_r2 _081E08B2: - ldr r0, _081E08F4 @ =gUnknown_3007460 + ldr r0, _081E08F4 @ =gRfuLinkStatus ldr r0, [r0] ldrb r1, [r0, 0x2] ldrb r0, [r0, 0x3] @@ -446,7 +446,7 @@ _081E08D2: lsrs r4, r0, 24 cmp r4, 0x3 bls _081E08C0 - ldr r0, _081E08F4 @ =gUnknown_3007460 + ldr r0, _081E08F4 @ =gRfuLinkStatus ldr r1, [r0] movs r0, 0xFF strb r0, [r1] @@ -455,22 +455,22 @@ _081E08E4: pop {r0} bx r0 .align 2, 0 -_081E08EC: .4byte gUnknown_3007464 -_081E08F0: .4byte gUnknown_3007468 -_081E08F4: .4byte gUnknown_3007460 +_081E08EC: .4byte gRfuStatic +_081E08F0: .4byte gRfuFixed +_081E08F4: .4byte gRfuLinkStatus thumb_func_end rfu_CB_defaultCallback thumb_func_start rfu_waitREQComplete rfu_waitREQComplete: @ 81E08F8 push {lr} bl STWI_poll_CommandEnd - ldr r0, _081E0908 @ =gUnknown_3007464 + ldr r0, _081E0908 @ =gRfuStatic ldr r0, [r0] ldrh r0, [r0, 0x1C] pop {r1} bx r1 .align 2, 0 -_081E0908: .4byte gUnknown_3007464 +_081E0908: .4byte gRfuStatic thumb_func_end rfu_waitREQComplete thumb_func_start rfu_REQ_RFUStatus @@ -489,7 +489,7 @@ _081E091C: .4byte rfu_STC_REQ_callback rfu_getRFUStatus: @ 81E0920 push {r4,r5,lr} adds r4, r0, 0 - ldr r5, _081E0938 @ =gUnknown_3007468 + ldr r5, _081E0938 @ =gRfuFixed ldr r0, [r5] adds r0, 0xDC ldr r0, [r0] @@ -499,7 +499,7 @@ rfu_getRFUStatus: @ 81E0920 movs r0, 0x10 b _081E0956 .align 2, 0 -_081E0938: .4byte gUnknown_3007468 +_081E0938: .4byte gRfuFixed _081E093C: bl STWI_poll_CommandEnd lsls r0, 16 @@ -521,8 +521,8 @@ _081E0956: bx r1 thumb_func_end rfu_getRFUStatus - thumb_func_start sub_81E095C -sub_81E095C: @ 81E095C + thumb_func_start rfu_MBOOT_CHILD_inheritanceLinkStatus +rfu_MBOOT_CHILD_inheritanceLinkStatus: @ 81E095C push {lr} ldr r2, _081E0964 @ =_Str_RFU_MBOOT ldr r3, _081E0968 @ =0x30000F0 @@ -561,11 +561,11 @@ _081E0984: bne _081E09CC movs r0, 0xC0 lsls r0, 18 - ldr r1, _081E09C4 @ =gUnknown_3007460 + ldr r1, _081E09C4 @ =gRfuLinkStatus ldr r1, [r1] movs r2, 0x5A bl CpuSet - ldr r0, _081E09C8 @ =gUnknown_3007464 + ldr r0, _081E09C8 @ =gRfuStatic ldr r2, [r0] ldrb r1, [r2] movs r0, 0x80 @@ -575,14 +575,14 @@ _081E0984: b _081E09CE .align 2, 0 _081E09C0: .4byte 0x30000FA -_081E09C4: .4byte gUnknown_3007460 -_081E09C8: .4byte gUnknown_3007464 +_081E09C4: .4byte gRfuLinkStatus +_081E09C8: .4byte gRfuStatic _081E09CC: movs r0, 0x1 _081E09CE: pop {r1} bx r1 - thumb_func_end sub_81E095C + thumb_func_end rfu_MBOOT_CHILD_inheritanceLinkStatus thumb_func_start rfu_REQ_stopMode rfu_REQ_stopMode: @ 81E09D4 @@ -777,14 +777,14 @@ rfu_REQ_configSystem: @ 81E0B1C bl STWI_send_SystemConfigREQ cmp r6, 0 bne _081E0B5C - ldr r0, _081E0B58 @ =gUnknown_3007464 + ldr r0, _081E0B58 @ =gRfuStatic ldr r1, [r0] movs r0, 0x1 strh r0, [r1, 0x1A] b _081E0B76 .align 2, 0 _081E0B54: .4byte rfu_STC_REQ_callback -_081E0B58: .4byte gUnknown_3007464 +_081E0B58: .4byte gRfuStatic _081E0B5C: ldr r5, _081E0B7C @ =0x04000208 ldrh r4, [r5] @@ -794,7 +794,7 @@ _081E0B5C: lsls r0, 2 adds r1, r6, 0 bl Div - ldr r1, _081E0B80 @ =gUnknown_3007464 + ldr r1, _081E0B80 @ =gRfuStatic ldr r1, [r1] strh r0, [r1, 0x1A] strh r4, [r5] @@ -804,7 +804,7 @@ _081E0B76: bx r0 .align 2, 0 _081E0B7C: .4byte 0x04000208 -_081E0B80: .4byte gUnknown_3007464 +_081E0B80: .4byte gRfuStatic thumb_func_end rfu_REQ_configSystem thumb_func_start rfu_REQ_configGameData @@ -896,7 +896,7 @@ rfu_CB_configGameData: @ 81E0C10 ldr r0, _081E0C54 @ =gRfuState ldr r0, [r0] ldr r1, [r0, 0x24] - ldr r0, _081E0C58 @ =gUnknown_3007460 + ldr r0, _081E0C58 @ =gRfuLinkStatus ldr r6, [r0] ldrb r2, [r1, 0x4] adds r5, r6, 0 @@ -921,7 +921,7 @@ rfu_CB_configGameData: @ 81E0C10 b _081E0C62 .align 2, 0 _081E0C54: .4byte gRfuState -_081E0C58: .4byte gUnknown_3007460 +_081E0C58: .4byte gRfuLinkStatus _081E0C5C: adds r1, r6, 0 adds r1, 0x97 @@ -929,7 +929,7 @@ _081E0C5C: _081E0C62: strb r0, [r1] movs r2, 0 - ldr r3, _081E0CA8 @ =gUnknown_3007460 + ldr r3, _081E0CA8 @ =gRfuLinkStatus _081E0C68: ldr r0, [r3] adds r0, 0x9A @@ -944,7 +944,7 @@ _081E0C68: bls _081E0C68 adds r4, 0x1 movs r2, 0 - ldr r3, _081E0CA8 @ =gUnknown_3007460 + ldr r3, _081E0CA8 @ =gRfuLinkStatus _081E0C84: ldr r0, [r3] adds r0, 0xA9 @@ -965,11 +965,11 @@ _081E0C9A: pop {r0} bx r0 .align 2, 0 -_081E0CA8: .4byte gUnknown_3007460 +_081E0CA8: .4byte gRfuLinkStatus thumb_func_end rfu_CB_configGameData - thumb_func_start sub_81E0CAC -sub_81E0CAC: @ 81E0CAC + thumb_func_start rfu_REQ_startSearchChild +rfu_REQ_startSearchChild: @ 81E0CAC push {lr} ldr r0, _081E0CDC @ =rfu_CB_defaultCallback bl STWI_set_Callback_M @@ -979,7 +979,7 @@ sub_81E0CAC: @ 81E0CAC lsrs r1, r0, 16 cmp r1, 0 bne _081E0CE4 - ldr r0, _081E0CE0 @ =gUnknown_3007468 + ldr r0, _081E0CE0 @ =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r0, [r0] @@ -991,7 +991,7 @@ sub_81E0CAC: @ 81E0CAC b _081E0CEA .align 2, 0 _081E0CDC: .4byte rfu_CB_defaultCallback -_081E0CE0: .4byte gUnknown_3007468 +_081E0CE0: .4byte gRfuFixed _081E0CE4: movs r0, 0x19 bl rfu_STC_REQ_callback @@ -1003,7 +1003,7 @@ _081E0CEA: bx r0 .align 2, 0 _081E0CF8: .4byte rfu_CB_startSearchChild - thumb_func_end sub_81E0CAC + thumb_func_end rfu_REQ_startSearchChild thumb_func_start rfu_CB_startSearchChild rfu_CB_startSearchChild: @ 81E0CFC @@ -1015,7 +1015,7 @@ rfu_CB_startSearchChild: @ 81E0CFC adds r2, r1, 0 cmp r2, 0 bne _081E0D14 - ldr r0, _081E0D20 @ =gUnknown_3007464 + ldr r0, _081E0D20 @ =gRfuStatic ldr r1, [r0] movs r0, 0x1 strb r0, [r1, 0x9] @@ -1026,7 +1026,7 @@ _081E0D14: pop {r0} bx r0 .align 2, 0 -_081E0D20: .4byte gUnknown_3007464 +_081E0D20: .4byte gRfuStatic thumb_func_end rfu_CB_startSearchChild thumb_func_start rfu_STC_clearLinkStatus @@ -1042,7 +1042,7 @@ rfu_STC_clearLinkStatus: @ 81E0D24 mov r0, sp movs r5, 0 strh r5, [r0] - ldr r4, _081E0D80 @ =gUnknown_3007460 + ldr r4, _081E0D80 @ =gRfuLinkStatus ldr r1, [r4] adds r1, 0x14 ldr r2, _081E0D84 @ =0x01000040 @@ -1051,7 +1051,7 @@ rfu_STC_clearLinkStatus: @ 81E0D24 strb r5, [r0, 0x8] _081E0D4C: movs r1, 0 - ldr r2, _081E0D80 @ =gUnknown_3007460 + ldr r2, _081E0D80 @ =gRfuLinkStatus adds r4, r2, 0 movs r3, 0 _081E0D54: @@ -1078,7 +1078,7 @@ _081E0D54: pop {r0} bx r0 .align 2, 0 -_081E0D80: .4byte gUnknown_3007460 +_081E0D80: .4byte gRfuLinkStatus _081E0D84: .4byte 0x01000040 thumb_func_end rfu_STC_clearLinkStatus @@ -1115,11 +1115,11 @@ rfu_CB_pollAndEndSearchChild: @ 81E0DB0 lsrs r6, r1, 16 cmp r6, 0 bne _081E0DC2 - bl sub_81E0E38 + bl rfu_STC_readChildList _081E0DC2: cmp r4, 0x1A bne _081E0E04 - ldr r5, _081E0DF8 @ =gUnknown_3007460 + ldr r5, _081E0DF8 @ =gRfuLinkStatus ldr r0, [r5] adds r0, 0x94 ldrh r0, [r0] @@ -1133,7 +1133,7 @@ _081E0DC2: cmp r0, 0 bne _081E0E20 ldr r1, [r5] - ldr r0, _081E0E00 @ =gUnknown_3007468 + ldr r0, _081E0E00 @ =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r0, [r0] @@ -1142,13 +1142,13 @@ _081E0DC2: strh r0, [r1] b _081E0E20 .align 2, 0 -_081E0DF8: .4byte gUnknown_3007460 +_081E0DF8: .4byte gRfuLinkStatus _081E0DFC: .4byte rfu_CB_defaultCallback -_081E0E00: .4byte gUnknown_3007468 +_081E0E00: .4byte gRfuFixed _081E0E04: cmp r4, 0x1B bne _081E0E20 - ldr r0, _081E0E30 @ =gUnknown_3007460 + ldr r0, _081E0E30 @ =gRfuLinkStatus ldr r1, [r0] ldrb r0, [r1] cmp r0, 0xFF @@ -1157,7 +1157,7 @@ _081E0E04: movs r0, 0 strh r0, [r1] _081E0E18: - ldr r0, _081E0E34 @ =gUnknown_3007464 + ldr r0, _081E0E34 @ =gRfuStatic ldr r1, [r0] movs r0, 0 strb r0, [r1, 0x9] @@ -1169,19 +1169,19 @@ _081E0E20: pop {r0} bx r0 .align 2, 0 -_081E0E30: .4byte gUnknown_3007460 -_081E0E34: .4byte gUnknown_3007464 +_081E0E30: .4byte gRfuLinkStatus +_081E0E34: .4byte gRfuStatic thumb_func_end rfu_CB_pollAndEndSearchChild - thumb_func_start sub_81E0E38 -sub_81E0E38: @ 81E0E38 + thumb_func_start rfu_STC_readChildList +rfu_STC_readChildList: @ 81E0E38 push {r4-r7,lr} mov r7, r10 mov r6, r9 mov r5, r8 push {r5-r7} sub sp, 0x4 - ldr r1, _081E0F64 @ =gUnknown_3007468 + ldr r1, _081E0F64 @ =gRfuFixed ldr r0, [r1] adds r0, 0xDC ldr r0, [r0] @@ -1215,7 +1215,7 @@ _081E0E76: cmp r2, 0x3 bls _081E0E76 _081E0E8A: - ldr r0, _081E0F64 @ =gUnknown_3007468 + ldr r0, _081E0F64 @ =gRfuFixed ldr r1, [r0] adds r1, 0xDC ldr r1, [r1] @@ -1229,9 +1229,9 @@ _081E0E96: mov r1, r8 cmp r1, 0 beq _081E0F52 - ldr r2, _081E0F6C @ =gUnknown_3007464 + ldr r2, _081E0F6C @ =gRfuStatic mov r9, r2 - ldr r7, _081E0F70 @ =gUnknown_3007460 + ldr r7, _081E0F70 @ =gRfuLinkStatus mov r10, r9 _081E0EAC: ldrb r2, [r4, 0x2] @@ -1329,11 +1329,11 @@ _081E0F52: pop {r0} bx r0 .align 2, 0 -_081E0F64: .4byte gUnknown_3007468 +_081E0F64: .4byte gRfuFixed _081E0F68: .4byte rfu_CB_defaultCallback -_081E0F6C: .4byte gUnknown_3007464 -_081E0F70: .4byte gUnknown_3007460 - thumb_func_end sub_81E0E38 +_081E0F6C: .4byte gRfuStatic +_081E0F70: .4byte gRfuLinkStatus + thumb_func_end rfu_STC_readChildList thumb_func_start rfu_REQ_startSearchParent rfu_REQ_startSearchParent: @ 81E0F74 @@ -1371,17 +1371,17 @@ _081E0F9E: thumb_func_start rfu_REQ_pollSearchParent rfu_REQ_pollSearchParent: @ 81E0FAC push {lr} - ldr r0, _081E0FBC @ =sub_81E0FC0 + ldr r0, _081E0FBC @ =rfu_CB_pollSearchParent bl STWI_set_Callback_M bl STWI_send_SP_PollingREQ pop {r0} bx r0 .align 2, 0 -_081E0FBC: .4byte sub_81E0FC0 +_081E0FBC: .4byte rfu_CB_pollSearchParent thumb_func_end rfu_REQ_pollSearchParent - thumb_func_start sub_81E0FC0 -sub_81E0FC0: @ 81E0FC0 + thumb_func_start rfu_CB_pollSearchParent +rfu_CB_pollSearchParent: @ 81E0FC0 push {r4,r5,lr} lsls r0, 24 lsrs r5, r0, 24 @@ -1398,7 +1398,7 @@ _081E0FD4: pop {r4,r5} pop {r0} bx r0 - thumb_func_end sub_81E0FC0 + thumb_func_end rfu_CB_pollSearchParent thumb_func_start rfu_REQ_endSearchParent rfu_REQ_endSearchParent: @ 81E0FE4 @@ -1421,12 +1421,12 @@ rfu_STC_readParentCandidateList: @ 81E0FF8 mov r0, sp movs r4, 0 strh r4, [r0] - ldr r5, _081E10A0 @ =gUnknown_3007460 + ldr r5, _081E10A0 @ =gRfuLinkStatus ldr r1, [r5] adds r1, 0x14 ldr r2, _081E10A4 @ =0x01000040 bl CpuSet - ldr r0, _081E10A8 @ =gUnknown_3007468 + ldr r0, _081E10A8 @ =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r2, [r0] @@ -1500,9 +1500,9 @@ _081E1048: strb r0, [r4, 0x3] b _081E10B2 .align 2, 0 -_081E10A0: .4byte gUnknown_3007460 +_081E10A0: .4byte gRfuLinkStatus _081E10A4: .4byte 0x01000040 -_081E10A8: .4byte gUnknown_3007468 +_081E10A8: .4byte gRfuFixed _081E10AC: .4byte 0x00007fff _081E10B0: strb r3, [r4, 0x3] @@ -1563,7 +1563,7 @@ rfu_REQ_startConnectParent: @ 81E1108 lsrs r4, r0, 16 movs r3, 0 movs r2, 0 - ldr r1, _081E1154 @ =gUnknown_3007460 + ldr r1, _081E1154 @ =gRfuLinkStatus ldr r0, [r1] ldrh r0, [r0, 0x14] cmp r0, r4 @@ -1589,7 +1589,7 @@ _081E1134: _081E113C: cmp r3, 0 bne _081E1160 - ldr r0, _081E1158 @ =gUnknown_3007464 + ldr r0, _081E1158 @ =gRfuStatic ldr r0, [r0] strh r4, [r0, 0x1E] ldr r0, _081E115C @ =rfu_STC_REQ_callback @@ -1598,8 +1598,8 @@ _081E113C: bl STWI_send_CP_StartREQ b _081E1168 .align 2, 0 -_081E1154: .4byte gUnknown_3007460 -_081E1158: .4byte gUnknown_3007464 +_081E1154: .4byte gRfuLinkStatus +_081E1158: .4byte gRfuStatic _081E115C: .4byte rfu_STC_REQ_callback _081E1160: movs r0, 0x1F @@ -1639,7 +1639,7 @@ rfu_CB_pollConnectParent: @ 81E1184 str r1, [sp, 0x28] cmp r1, 0 bne _081E1286 - ldr r0, _081E1240 @ =gUnknown_3007468 + ldr r0, _081E1240 @ =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r0, [r0] @@ -1653,7 +1653,7 @@ rfu_CB_pollConnectParent: @ 81E1184 lsls r0, 17 lsls r0, r1 lsrs r2, r0, 24 - ldr r4, _081E1244 @ =gUnknown_3007460 + ldr r4, _081E1244 @ =gRfuLinkStatus ldr r3, [r4] ldrb r1, [r3, 0x2] adds r0, r2, 0 @@ -1677,7 +1677,7 @@ rfu_CB_pollConnectParent: @ 81E1184 strb r0, [r1, 0x1] ldr r0, [r4] strb r2, [r0] - ldr r3, _081E1248 @ =gUnknown_3007464 + ldr r3, _081E1248 @ =gRfuStatic ldr r2, [r3] ldrb r1, [r2] movs r0, 0x80 @@ -1719,9 +1719,9 @@ _081E1202: strb r1, [r0, 0x8] b _081E1264 .align 2, 0 -_081E1240: .4byte gUnknown_3007468 -_081E1244: .4byte gUnknown_3007460 -_081E1248: .4byte gUnknown_3007464 +_081E1240: .4byte gRfuFixed +_081E1244: .4byte gRfuLinkStatus +_081E1248: .4byte gRfuStatic _081E124C: .4byte 0x01000040 _081E1250: adds r0, r4, 0 @@ -1738,7 +1738,7 @@ _081E125A: _081E1264: cmp r5, 0x3 bhi _081E1286 - ldr r4, _081E12A0 @ =gUnknown_3007460 + ldr r4, _081E12A0 @ =gRfuLinkStatus mov r0, r10 lsls r5, r0, 5 adds r0, r5, 0 @@ -1765,7 +1765,7 @@ _081E1286: pop {r0} bx r0 .align 2, 0 -_081E12A0: .4byte gUnknown_3007460 +_081E12A0: .4byte gRfuLinkStatus thumb_func_end rfu_CB_pollConnectParent thumb_func_start rfu_getConnectParentStatus @@ -1774,7 +1774,7 @@ rfu_getConnectParentStatus: @ 81E12A4 adds r3, r0, 0 movs r0, 0xFF strb r0, [r3] - ldr r0, _081E12C4 @ =gUnknown_3007468 + ldr r0, _081E12C4 @ =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r2, [r0] @@ -1787,7 +1787,7 @@ rfu_getConnectParentStatus: @ 81E12A4 movs r0, 0x10 b _081E12D4 .align 2, 0 -_081E12C4: .4byte gUnknown_3007468 +_081E12C4: .4byte gRfuFixed _081E12C8: adds r2, 0x6 ldrb r0, [r2] @@ -1806,14 +1806,14 @@ rfu_REQ_endConnectParent: @ 81E12D8 ldr r0, _081E1304 @ =rfu_CB_pollConnectParent bl STWI_set_Callback_M bl STWI_send_CP_EndREQ - ldr r0, _081E1308 @ =gUnknown_3007468 + ldr r0, _081E1308 @ =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r1, [r0] ldrb r0, [r1, 0x6] cmp r0, 0x3 bhi _081E1300 - ldr r0, _081E130C @ =gUnknown_3007464 + ldr r0, _081E130C @ =gRfuStatic ldr r0, [r0] adds r0, 0xA ldrb r1, [r1, 0x6] @@ -1825,20 +1825,20 @@ _081E1300: bx r0 .align 2, 0 _081E1304: .4byte rfu_CB_pollConnectParent -_081E1308: .4byte gUnknown_3007468 -_081E130C: .4byte gUnknown_3007464 +_081E1308: .4byte gRfuFixed +_081E130C: .4byte gRfuStatic thumb_func_end rfu_REQ_endConnectParent thumb_func_start rfu_syncVBlank rfu_syncVBlank: @ 81E1310 push {r4,r5,lr} bl rfu_NI_checkCommFailCounter - ldr r0, _081E1358 @ =gUnknown_3007460 + ldr r0, _081E1358 @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0] cmp r0, 0xFF beq _081E13E8 - ldr r4, _081E135C @ =gUnknown_3007464 + ldr r4, _081E135C @ =gRfuStatic ldr r1, [r4] ldrb r0, [r1, 0x6] cmp r0, 0 @@ -1866,8 +1866,8 @@ _081E132E: strh r0, [r1, 0x20] b _081E136A .align 2, 0 -_081E1358: .4byte gUnknown_3007460 -_081E135C: .4byte gUnknown_3007464 +_081E1358: .4byte gRfuLinkStatus +_081E135C: .4byte gRfuStatic _081E1360: cmp r3, 0 beq _081E1380 @@ -1878,16 +1878,16 @@ _081E136A: cmp r3, 0 beq _081E1380 _081E136E: - ldr r3, _081E137C @ =gUnknown_3007464 + ldr r3, _081E137C @ =gRfuStatic ldr r2, [r3] ldrb r1, [r2] movs r0, 0xFD ands r0, r1 b _081E138A .align 2, 0 -_081E137C: .4byte gUnknown_3007464 +_081E137C: .4byte gRfuStatic _081E1380: - ldr r3, _081E13DC @ =gUnknown_3007464 + ldr r3, _081E13DC @ =gRfuStatic ldr r2, [r3] ldrb r1, [r2] movs r0, 0x2 @@ -1906,7 +1906,7 @@ _081E138A: movs r0, 0xFB ands r0, r1 strb r0, [r3] - ldr r0, _081E13E0 @ =gUnknown_3007460 + ldr r0, _081E13E0 @ =gRfuLinkStatus ldr r0, [r0] ldrb r1, [r0, 0x2] ldrb r0, [r0, 0x3] @@ -1928,15 +1928,15 @@ _081E13C4: lsrs r4, r0, 24 cmp r4, 0x3 bls _081E13B2 - ldr r0, _081E13E0 @ =gUnknown_3007460 + ldr r0, _081E13E0 @ =gRfuLinkStatus ldr r1, [r0] movs r0, 0xFF strb r0, [r1] movs r0, 0x1 b _081E13EA .align 2, 0 -_081E13DC: .4byte gUnknown_3007464 -_081E13E0: .4byte gUnknown_3007460 +_081E13DC: .4byte gRfuStatic +_081E13E0: .4byte gRfuLinkStatus _081E13E4: subs r0, 0x1 strh r0, [r3, 0x20] @@ -1948,8 +1948,8 @@ _081E13EA: bx r1 thumb_func_end rfu_syncVBlank - thumb_func_start sub_81E13F0 -sub_81E13F0: @ 81E13F0 + thumb_func_start rfu_REQBN_watchLink +rfu_REQBN_watchLink: @ 81E13F0 push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -1975,7 +1975,7 @@ sub_81E13F0: @ 81E13F0 ldrb r0, [r2, 0xC] ldr r2, [sp, 0x4] strb r0, [r2] - ldr r4, _081E1490 @ =gUnknown_3007460 + ldr r4, _081E1490 @ =gRfuLinkStatus ldr r0, [r4] ldrb r0, [r0] cmp r0, 0xFF @@ -1989,7 +1989,7 @@ _081E142E: bne _081E143A b _081E178E _081E143A: - ldr r3, _081E1498 @ =gUnknown_3007464 + ldr r3, _081E1498 @ =gRfuStatic ldr r2, [r3] ldrb r1, [r2] movs r0, 0x4 @@ -2014,7 +2014,7 @@ _081E1460: lsrs r0, 24 cmp r0, 0x29 bne _081E14A0 - ldr r0, _081E149C @ =gUnknown_3007468 + ldr r0, _081E149C @ =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r1, [r0] @@ -2036,16 +2036,16 @@ _081E148A: str r2, [sp, 0x8] b _081E14F8 .align 2, 0 -_081E1490: .4byte gUnknown_3007460 +_081E1490: .4byte gRfuLinkStatus _081E1494: .4byte gRfuState -_081E1498: .4byte gUnknown_3007464 -_081E149C: .4byte gUnknown_3007468 +_081E1498: .4byte gRfuStatic +_081E149C: .4byte gRfuFixed _081E14A0: movs r0, 0x9B lsls r0, 1 cmp r5, r0 bne _081E14F0 - ldr r0, _081E154C @ =gUnknown_3007468 + ldr r0, _081E154C @ =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r0, [r0] @@ -2068,7 +2068,7 @@ _081E14C6: ands r0, r1 cmp r0, 0 beq _081E14E6 - ldr r0, _081E1550 @ =gUnknown_3007460 + ldr r0, _081E1550 @ =gRfuLinkStatus ldr r0, [r0] adds r0, 0xA adds r0, r5 @@ -2088,7 +2088,7 @@ _081E14F0: bne _081E14F8 b _081E178E _081E14F8: - ldr r4, _081E154C @ =gUnknown_3007468 + ldr r4, _081E154C @ =gRfuFixed ldr r0, [r4] adds r0, 0xDC ldr r0, [r0] @@ -2110,7 +2110,7 @@ _081E14F8: ldr r0, [r0] adds r2, r0, 0x4 movs r5, 0 - ldr r3, _081E1550 @ =gUnknown_3007460 + ldr r3, _081E1550 @ =gRfuLinkStatus _081E152C: ldr r0, [r3] adds r0, 0xA @@ -2128,8 +2128,8 @@ _081E152C: movs r5, 0 b _081E1564 .align 2, 0 -_081E154C: .4byte gUnknown_3007468 -_081E1550: .4byte gUnknown_3007460 +_081E154C: .4byte gRfuFixed +_081E1550: .4byte gRfuLinkStatus _081E1554: .4byte rfu_CB_defaultCallback _081E1558: movs r0, 0x11 @@ -2152,7 +2152,7 @@ _081E1578: ldr r2, [sp, 0x8] cmp r2, 0x1 bne _081E164E - ldr r4, _081E15B8 @ =gUnknown_3007460 + ldr r4, _081E15B8 @ =gRfuLinkStatus ldr r1, [r4] ldrb r0, [r1, 0x2] ands r0, r6 @@ -2167,7 +2167,7 @@ _081E1578: ldrb r0, [r1] cmp r0, 0x1 bne _081E15C0 - ldr r2, _081E15BC @ =gUnknown_3007464 + ldr r2, _081E15BC @ =gRfuStatic ldr r1, [r2] adds r1, 0xA adds r1, r5 @@ -2182,15 +2182,15 @@ _081E1578: bls _081E164E b _081E1626 .align 2, 0 -_081E15B8: .4byte gUnknown_3007460 -_081E15BC: .4byte gUnknown_3007464 +_081E15B8: .4byte gRfuLinkStatus +_081E15BC: .4byte gRfuStatic _081E15C0: bl STWI_send_SystemStatusREQ bl STWI_poll_CommandEnd lsls r0, 16 cmp r0, 0 bne _081E164E - ldr r0, _081E15F0 @ =gUnknown_3007468 + ldr r0, _081E15F0 @ =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r0, [r0] @@ -2207,9 +2207,9 @@ _081E15C0: ldr r0, [sp] b _081E164C .align 2, 0 -_081E15F0: .4byte gUnknown_3007468 +_081E15F0: .4byte gRfuFixed _081E15F4: - ldr r2, _081E163C @ =gUnknown_3007464 + ldr r2, _081E163C @ =gRfuStatic ldr r1, [r2] adds r1, 0xA adds r1, r5 @@ -2245,9 +2245,9 @@ _081E1626: strb r0, [r2] b _081E164E .align 2, 0 -_081E163C: .4byte gUnknown_3007464 +_081E163C: .4byte gRfuStatic _081E1640: - ldr r0, _081E16B0 @ =gUnknown_3007464 + ldr r0, _081E16B0 @ =gRfuStatic ldr r0, [r0] adds r0, 0xA adds r0, r5 @@ -2256,7 +2256,7 @@ _081E1640: _081E164C: strb r1, [r0] _081E164E: - ldr r2, _081E16B4 @ =gUnknown_3007460 + ldr r2, _081E16B4 @ =gRfuLinkStatus mov r12, r2 ldr r1, [r2] ldrb r7, [r1] @@ -2298,15 +2298,15 @@ _081E164E: ldrb r0, [r1, 0x1] adds r0, 0x1 strb r0, [r1, 0x1] - ldr r0, _081E16B0 @ =gUnknown_3007464 + ldr r0, _081E16B0 @ =gRfuStatic ldr r0, [r0] adds r0, 0xA adds r0, r5 strb r3, [r0] b _081E1742 .align 2, 0 -_081E16B0: .4byte gUnknown_3007464 -_081E16B4: .4byte gUnknown_3007460 +_081E16B0: .4byte gRfuStatic +_081E16B4: .4byte gRfuLinkStatus _081E16B8: movs r0, 0 strb r0, [r4] @@ -2319,7 +2319,7 @@ _081E16BE: bne _081E1742 bl STWI_send_SlotStatusREQ bl STWI_poll_CommandEnd - ldr r0, _081E1708 @ =gUnknown_3007468 + ldr r0, _081E1708 @ =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r2, [r0] @@ -2334,7 +2334,7 @@ _081E16BE: ldrb r0, [r2, 0x2] cmp r0, r5 bne _081E1710 - ldr r0, _081E170C @ =gUnknown_3007464 + ldr r0, _081E170C @ =gRfuStatic ldr r0, [r0] lsls r1, r5, 1 adds r0, 0x12 @@ -2348,8 +2348,8 @@ _081E16BE: lsls r0, 24 b _081E173E .align 2, 0 -_081E1708: .4byte gUnknown_3007468 -_081E170C: .4byte gUnknown_3007464 +_081E1708: .4byte gRfuFixed +_081E170C: .4byte gRfuStatic _081E1710: adds r2, 0x4 subs r0, r3, 0x1 @@ -2361,7 +2361,7 @@ _081E1710: ldrb r0, [r2, 0x2] cmp r0, r5 bne _081E1710 - ldr r0, _081E17A0 @ =gUnknown_3007464 + ldr r0, _081E17A0 @ =gRfuStatic ldr r0, [r0] lsls r1, r5, 1 adds r0, 0x12 @@ -2378,7 +2378,7 @@ _081E173E: lsrs r0, 24 mov r9, r0 _081E1742: - ldr r0, _081E17A4 @ =gUnknown_3007460 + ldr r0, _081E17A4 @ =gRfuLinkStatus ldr r0, [r0] ldrb r1, [r0, 0x2] mov r2, r8 @@ -2405,7 +2405,7 @@ _081E1768: bl STWI_send_DisconnectREQ bl STWI_poll_CommandEnd _081E1778: - ldr r1, _081E17A8 @ =gUnknown_3007468 + ldr r1, _081E17A8 @ =gRfuFixed ldr r0, [r1] adds r0, 0xDC ldr r0, [r0] @@ -2428,10 +2428,10 @@ _081E1790: pop {r1} bx r1 .align 2, 0 -_081E17A0: .4byte gUnknown_3007464 -_081E17A4: .4byte gUnknown_3007460 -_081E17A8: .4byte gUnknown_3007468 - thumb_func_end sub_81E13F0 +_081E17A0: .4byte gRfuStatic +_081E17A4: .4byte gRfuLinkStatus +_081E17A8: .4byte gRfuFixed + thumb_func_end rfu_REQBN_watchLink thumb_func_start rfu_STC_removeLinkData rfu_STC_removeLinkData: @ 81E17AC @@ -2448,7 +2448,7 @@ rfu_STC_removeLinkData: @ 81E17AC lsls r0, 17 lsls r0, r7 lsrs r5, r0, 24 - ldr r1, _081E1850 @ =gUnknown_3007460 + ldr r1, _081E1850 @ =gRfuLinkStatus ldr r4, [r1] ldrb r0, [r4, 0x2] ands r0, r5 @@ -2520,7 +2520,7 @@ _081E1844: pop {r0} bx r0 .align 2, 0 -_081E1850: .4byte gUnknown_3007460 +_081E1850: .4byte gRfuLinkStatus _081E1854: .4byte 0x00ff00ff _081E1858: .4byte 0x01000010 thumb_func_end rfu_STC_removeLinkData @@ -2530,7 +2530,7 @@ rfu_REQ_disconnect: @ 81E185C push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - ldr r2, _081E18A0 @ =gUnknown_3007460 + ldr r2, _081E18A0 @ =gRfuLinkStatus ldr r1, [r2] ldrb r0, [r1, 0x2] ldrb r1, [r1, 0x3] @@ -2538,7 +2538,7 @@ rfu_REQ_disconnect: @ 81E185C ands r0, r4 cmp r0, 0 beq _081E18E0 - ldr r0, _081E18A4 @ =gUnknown_3007464 + ldr r0, _081E18A4 @ =gRfuStatic ldr r1, [r0] strb r4, [r1, 0x5] ldr r2, [r2] @@ -2561,8 +2561,8 @@ rfu_REQ_disconnect: @ 81E185C bl rfu_CB_disconnect b _081E18E0 .align 2, 0 -_081E18A0: .4byte gUnknown_3007460 -_081E18A4: .4byte gUnknown_3007464 +_081E18A0: .4byte gRfuLinkStatus +_081E18A4: .4byte gRfuStatic _081E18A8: ldr r0, [r3] ldrb r0, [r0, 0x9] @@ -2603,7 +2603,7 @@ rfu_CB_disconnect: @ 81E18EC lsrs r5, r1, 16 cmp r5, 0x3 bne _081E1928 - ldr r0, _081E19BC @ =gUnknown_3007460 + ldr r0, _081E19BC @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0] cmp r0, 0 @@ -2615,7 +2615,7 @@ rfu_CB_disconnect: @ 81E18EC lsls r0, 16 cmp r0, 0 bne _081E1928 - ldr r0, _081E19C4 @ =gUnknown_3007468 + ldr r0, _081E19C4 @ =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r0, [r0] @@ -2624,9 +2624,9 @@ rfu_CB_disconnect: @ 81E18EC bne _081E1928 movs r5, 0 _081E1928: - ldr r3, _081E19C8 @ =gUnknown_3007464 + ldr r3, _081E19C8 @ =gRfuStatic ldr r2, [r3] - ldr r0, _081E19BC @ =gUnknown_3007460 + ldr r0, _081E19BC @ =gRfuLinkStatus ldr r1, [r0] ldrb r0, [r1, 0x2] ldrb r1, [r1, 0x3] @@ -2634,7 +2634,7 @@ _081E1928: ldrb r1, [r2, 0x5] ands r0, r1 strb r0, [r2, 0x5] - ldr r0, _081E19C4 @ =gUnknown_3007468 + ldr r0, _081E19C4 @ =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r1, [r0] @@ -2649,7 +2649,7 @@ _081E1950: lsls r0, 17 lsls r0, r4 lsrs r0, 24 - ldr r1, _081E19C8 @ =gUnknown_3007464 + ldr r1, _081E19C8 @ =gRfuStatic ldr r1, [r1] ldrb r1, [r1, 0x5] ands r0, r1 @@ -2665,7 +2665,7 @@ _081E196C: cmp r4, 0x3 bls _081E1950 _081E1976: - ldr r0, _081E19BC @ =gUnknown_3007460 + ldr r0, _081E19BC @ =gRfuLinkStatus ldr r2, [r0] ldrb r1, [r2, 0x2] ldrb r0, [r2, 0x3] @@ -2678,7 +2678,7 @@ _081E1988: adds r0, r6, 0 adds r1, r5, 0 bl rfu_STC_REQ_callback - ldr r0, _081E19C8 @ =gUnknown_3007464 + ldr r0, _081E19C8 @ =gRfuStatic ldr r0, [r0] ldrb r0, [r0, 0x9] cmp r0, 0 @@ -2698,10 +2698,10 @@ _081E19B6: pop {r0} bx r0 .align 2, 0 -_081E19BC: .4byte gUnknown_3007460 +_081E19BC: .4byte gRfuLinkStatus _081E19C0: .4byte rfu_CB_defaultCallback -_081E19C4: .4byte gUnknown_3007468 -_081E19C8: .4byte gUnknown_3007464 +_081E19C4: .4byte gRfuFixed +_081E19C8: .4byte gRfuStatic thumb_func_end rfu_CB_disconnect thumb_func_start rfu_REQ_CHILD_startConnectRecovery @@ -2709,7 +2709,7 @@ rfu_REQ_CHILD_startConnectRecovery: @ 81E19CC push {r4,r5,lr} lsls r0, 24 lsrs r5, r0, 24 - ldr r0, _081E1A1C @ =gUnknown_3007464 + ldr r0, _081E1A1C @ =gRfuStatic ldr r0, [r0] strb r5, [r0, 0x5] movs r4, 0 @@ -2733,7 +2733,7 @@ _081E19E6: _081E19FA: adds r0, r2, 0 bl STWI_set_Callback_M - ldr r0, _081E1A24 @ =gUnknown_3007460 + ldr r0, _081E1A24 @ =gRfuLinkStatus ldr r1, [r0] lsls r0, r4, 5 adds r0, r1, r0 @@ -2746,9 +2746,9 @@ _081E19FA: pop {r0} bx r0 .align 2, 0 -_081E1A1C: .4byte gUnknown_3007464 +_081E1A1C: .4byte gRfuStatic _081E1A20: .4byte rfu_STC_REQ_callback -_081E1A24: .4byte gUnknown_3007460 +_081E1A24: .4byte gRfuLinkStatus thumb_func_end rfu_REQ_CHILD_startConnectRecovery thumb_func_start rfu_REQ_CHILD_pollConnectRecovery @@ -2775,20 +2775,20 @@ rfu_CB_CHILD_pollConnectRecovery: @ 81E1A3C lsrs r7, r1, 16 cmp r7, 0 bne _081E1AC0 - ldr r0, _081E1AD4 @ =gUnknown_3007468 + ldr r0, _081E1AD4 @ =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r0, [r0] ldrb r0, [r0, 0x4] cmp r0, 0 bne _081E1AC0 - ldr r0, _081E1AD8 @ =gUnknown_3007464 + ldr r0, _081E1AD8 @ =gRfuStatic ldr r1, [r0] ldrb r1, [r1, 0x5] adds r6, r0, 0 cmp r1, 0 beq _081E1AC0 - ldr r1, _081E1ADC @ =gUnknown_3007460 + ldr r1, _081E1ADC @ =gRfuLinkStatus ldr r0, [r1] strb r7, [r0] movs r4, 0 @@ -2843,9 +2843,9 @@ _081E1AC0: pop {r0} bx r0 .align 2, 0 -_081E1AD4: .4byte gUnknown_3007468 -_081E1AD8: .4byte gUnknown_3007464 -_081E1ADC: .4byte gUnknown_3007460 +_081E1AD4: .4byte gRfuFixed +_081E1AD8: .4byte gRfuStatic +_081E1ADC: .4byte gRfuLinkStatus thumb_func_end rfu_CB_CHILD_pollConnectRecovery thumb_func_start rfu_CHILD_getConnectRecoveryStatus @@ -2854,7 +2854,7 @@ rfu_CHILD_getConnectRecoveryStatus: @ 81E1AE0 adds r2, r0, 0 movs r0, 0xFF strb r0, [r2] - ldr r0, _081E1B00 @ =gUnknown_3007468 + ldr r0, _081E1B00 @ =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r1, [r0] @@ -2867,7 +2867,7 @@ rfu_CHILD_getConnectRecoveryStatus: @ 81E1AE0 movs r0, 0x10 b _081E1B0A .align 2, 0 -_081E1B00: .4byte gUnknown_3007468 +_081E1B00: .4byte gRfuFixed _081E1B04: ldrb r0, [r1, 0x4] strb r0, [r2] @@ -2889,8 +2889,8 @@ rfu_REQ_CHILD_endConnectRecovery: @ 81E1B10 _081E1B20: .4byte rfu_CB_CHILD_pollConnectRecovery thumb_func_end rfu_REQ_CHILD_endConnectRecovery - thumb_func_start sub_81E1B24 -sub_81E1B24: @ 81E1B24 + thumb_func_start rfu_STC_fastCopy +rfu_STC_fastCopy: @ 81E1B24 push {r4-r6,lr} adds r5, r0, 0 adds r6, r1, 0 @@ -2916,7 +2916,7 @@ _081E1B48: pop {r4-r6} pop {r0} bx r0 - thumb_func_end sub_81E1B24 + thumb_func_end rfu_STC_fastCopy thumb_func_start rfu_REQ_changeMasterSlave rfu_REQ_changeMasterSlave: @ 81E1B54 @@ -2994,7 +2994,7 @@ rfu_clearAllSlot: @ 81E1BB8 _081E1BD4: mov r0, sp strh r7, [r0] - ldr r0, _081E1C40 @ =gUnknown_3007450 + ldr r0, _081E1C40 @ =gRfuSlotStatusNI lsls r4, r5, 2 adds r0, r4, r0 ldr r1, [r0] @@ -3002,13 +3002,13 @@ _081E1BD4: ldr r2, _081E1C44 @ =0x01000034 bl CpuSet strh r7, [r6] - ldr r0, _081E1C48 @ =gUnknown_3007440 + ldr r0, _081E1C48 @ =gRfuSlotStatusUNI adds r4, r0 ldr r1, [r4] adds r0, r6, 0 ldr r2, _081E1C4C @ =0x0100000a bl CpuSet - ldr r3, _081E1C50 @ =gUnknown_3007460 + ldr r3, _081E1C50 @ =gRfuLinkStatus ldr r0, [r3] adds r0, 0x10 adds r0, r5 @@ -3029,7 +3029,7 @@ _081E1BD4: strb r1, [r0, 0x5] ldr r0, [r3] strb r1, [r0, 0x6] - ldr r0, _081E1C54 @ =gUnknown_3007464 + ldr r0, _081E1C54 @ =gRfuStatic ldr r0, [r0] strb r1, [r0, 0x2] ldr r0, _081E1C3C @ =0x04000208 @@ -3043,12 +3043,12 @@ _081E1BD4: bx r0 .align 2, 0 _081E1C3C: .4byte 0x04000208 -_081E1C40: .4byte gUnknown_3007450 +_081E1C40: .4byte gRfuSlotStatusNI _081E1C44: .4byte 0x01000034 -_081E1C48: .4byte gUnknown_3007440 +_081E1C48: .4byte gRfuSlotStatusUNI _081E1C4C: .4byte 0x0100000a -_081E1C50: .4byte gUnknown_3007460 -_081E1C54: .4byte gUnknown_3007464 +_081E1C50: .4byte gRfuLinkStatus +_081E1C54: .4byte gRfuStatic thumb_func_end rfu_clearAllSlot thumb_func_start rfu_STC_releaseFrame @@ -3060,14 +3060,14 @@ rfu_STC_releaseFrame: @ 81E1C58 adds r5, r2, 0 lsls r1, 24 lsrs r3, r1, 24 - ldr r0, _081E1C90 @ =gUnknown_3007464 + ldr r0, _081E1C90 @ =gRfuStatic ldr r0, [r0] ldrb r1, [r0] movs r0, 0x80 ands r0, r1 cmp r0, 0 bne _081E1C98 - ldr r6, _081E1C94 @ =gUnknown_3007460 + ldr r6, _081E1C94 @ =gRfuLinkStatus cmp r3, 0 bne _081E1C84 ldr r1, [r6] @@ -3082,10 +3082,10 @@ _081E1C84: strb r0, [r1, 0xF] b _081E1CB8 .align 2, 0 -_081E1C90: .4byte gUnknown_3007464 -_081E1C94: .4byte gUnknown_3007460 +_081E1C90: .4byte gRfuStatic +_081E1C94: .4byte gRfuLinkStatus _081E1C98: - ldr r6, _081E1CC0 @ =gUnknown_3007460 + ldr r6, _081E1CC0 @ =gRfuLinkStatus cmp r3, 0 bne _081E1CAC ldr r1, [r6] @@ -3107,7 +3107,7 @@ _081E1CB8: pop {r0} bx r0 .align 2, 0 -_081E1CC0: .4byte gUnknown_3007460 +_081E1CC0: .4byte gRfuLinkStatus thumb_func_end rfu_STC_releaseFrame thumb_func_start rfu_clearSlot @@ -3149,7 +3149,7 @@ _081E1CF4: cmp r0, 0 beq _081E1DBC movs r3, 0 - ldr r1, _081E1D3C @ =gUnknown_3007450 + ldr r1, _081E1D3C @ =gRfuSlotStatusNI lsls r0, r7, 2 adds r0, r1 mov r9, r0 @@ -3164,7 +3164,7 @@ _081E1D12: beq _081E1D64 mov r2, r9 ldr r4, [r2] - ldr r0, _081E1D40 @ =gUnknown_3007460 + ldr r0, _081E1D40 @ =gRfuLinkStatus ldr r2, [r0] adds r0, r4, 0 adds r0, 0x2C @@ -3175,8 +3175,8 @@ _081E1D12: b _081E1D64 .align 2, 0 _081E1D38: .4byte 0x04000208 -_081E1D3C: .4byte gUnknown_3007450 -_081E1D40: .4byte gUnknown_3007460 +_081E1D3C: .4byte gRfuSlotStatusNI +_081E1D40: .4byte gRfuLinkStatus _081E1D44: movs r0, 0x8 mov r1, r8 @@ -3187,7 +3187,7 @@ _081E1D44: ldr r0, [r2] adds r4, r0, 0 adds r4, 0x34 - ldr r0, _081E1DF8 @ =gUnknown_3007460 + ldr r0, _081E1DF8 @ =gRfuLinkStatus ldr r2, [r0] movs r1, 0x1 lsls r1, r7 @@ -3247,7 +3247,7 @@ _081E1DBC: ands r0, r4 cmp r0, 0 beq _081E1E32 - ldr r1, _081E1E00 @ =gUnknown_3007440 + ldr r1, _081E1E00 @ =gRfuSlotStatusUNI lsls r0, r7, 2 adds r0, r1 ldr r3, [r0] @@ -3257,14 +3257,14 @@ _081E1DBC: ands r0, r1 cmp r0, 0 beq _081E1E24 - ldr r0, _081E1E04 @ =gUnknown_3007464 + ldr r0, _081E1E04 @ =gRfuStatic ldr r0, [r0] ldrb r1, [r0] movs r0, 0x80 ands r0, r1 cmp r0, 0 bne _081E1E08 - ldr r2, _081E1DF8 @ =gUnknown_3007460 + ldr r2, _081E1DF8 @ =gRfuLinkStatus ldr r1, [r2] ldrb r0, [r1, 0xF] adds r0, 0x3 @@ -3273,12 +3273,12 @@ _081E1DBC: strb r0, [r1, 0xF] b _081E1E1A .align 2, 0 -_081E1DF8: .4byte gUnknown_3007460 +_081E1DF8: .4byte gRfuLinkStatus _081E1DFC: .4byte 0x0100001a -_081E1E00: .4byte gUnknown_3007440 -_081E1E04: .4byte gUnknown_3007464 +_081E1E00: .4byte gRfuSlotStatusUNI +_081E1E04: .4byte gRfuStatic _081E1E08: - ldr r2, _081E1E6C @ =gUnknown_3007460 + ldr r2, _081E1E6C @ =gRfuLinkStatus ldr r1, [r2] adds r1, 0x10 adds r1, r7 @@ -3309,7 +3309,7 @@ _081E1E32: mov r1, sp movs r0, 0 strh r0, [r1] - ldr r1, _081E1E74 @ =gUnknown_3007440 + ldr r1, _081E1E74 @ =gRfuSlotStatusUNI lsls r0, r7, 2 adds r0, r1 ldr r1, [r0] @@ -3332,9 +3332,9 @@ _081E1E5C: pop {r1} bx r1 .align 2, 0 -_081E1E6C: .4byte gUnknown_3007460 +_081E1E6C: .4byte gRfuLinkStatus _081E1E70: .4byte 0x01000006 -_081E1E74: .4byte gUnknown_3007440 +_081E1E74: .4byte gRfuSlotStatusUNI _081E1E78: .4byte 0x01000004 _081E1E7C: .4byte 0x04000208 thumb_func_end rfu_clearSlot @@ -3360,7 +3360,7 @@ _081E1E9C: ands r0, r3 cmp r0, 0 beq _081E1EB8 - ldr r0, _081E1EB4 @ =gUnknown_3007450 + ldr r0, _081E1EB4 @ =gRfuSlotStatusNI lsls r1, 2 adds r1, r0 ldr r0, [r1] @@ -3368,7 +3368,7 @@ _081E1E9C: str r6, [r0, 0x6C] b _081E1ED2 .align 2, 0 -_081E1EB4: .4byte gUnknown_3007450 +_081E1EB4: .4byte gRfuSlotStatusNI _081E1EB8: movs r0, 0x10 ands r2, r0 @@ -3378,7 +3378,7 @@ _081E1EB8: lsls r0, 3 b _081E1ED4 _081E1EC6: - ldr r0, _081E1EDC @ =gUnknown_3007440 + ldr r0, _081E1EDC @ =gRfuSlotStatusUNI lsls r1, r4, 2 adds r1, r0 ldr r0, [r1] @@ -3391,7 +3391,7 @@ _081E1ED4: pop {r1} bx r1 .align 2, 0 -_081E1EDC: .4byte gUnknown_3007440 +_081E1EDC: .4byte gRfuSlotStatusUNI thumb_func_end rfu_setRecvBuffer thumb_func_start rfu_NI_setSendData @@ -3428,7 +3428,7 @@ rfu_UNI_setSendData: @ 81E1F0C lsrs r1, r0, 24 lsls r2, 24 lsrs r2, 24 - ldr r0, _081E1F28 @ =gUnknown_3007460 + ldr r0, _081E1F28 @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0] cmp r0, 0x1 @@ -3436,7 +3436,7 @@ rfu_UNI_setSendData: @ 81E1F0C adds r0, r2, 0x3 b _081E1F2E .align 2, 0 -_081E1F28: .4byte gUnknown_3007460 +_081E1F28: .4byte gRfuLinkStatus _081E1F2C: adds r0, r2, 0x2 _081E1F2E: @@ -3466,7 +3466,7 @@ rfu_NI_CHILD_setSendGameName: @ 81E1F48 lsls r1, 17 lsls r1, r0 lsrs r1, 24 - ldr r0, _081E1F78 @ =gUnknown_3007460 + ldr r0, _081E1F78 @ =gRfuLinkStatus ldr r3, [r0] adds r3, 0x98 movs r0, 0x1A @@ -3479,7 +3479,7 @@ rfu_NI_CHILD_setSendGameName: @ 81E1F48 pop {r1} bx r1 .align 2, 0 -_081E1F78: .4byte gUnknown_3007460 +_081E1F78: .4byte gRfuLinkStatus thumb_func_end rfu_NI_CHILD_setSendGameName thumb_func_start rfu_STC_setSendData_org @@ -3498,7 +3498,7 @@ rfu_STC_setSendData_org: @ 81E1F7C lsls r2, 24 lsrs r2, 24 mov r8, r2 - ldr r0, _081E1FA8 @ =gUnknown_3007460 + ldr r0, _081E1FA8 @ =gRfuLinkStatus ldr r2, [r0] ldrb r1, [r2] mov r10, r0 @@ -3507,7 +3507,7 @@ rfu_STC_setSendData_org: @ 81E1F7C ldr r0, _081E1FAC @ =0x00000301 b _081E2166 .align 2, 0 -_081E1FA8: .4byte gUnknown_3007460 +_081E1FA8: .4byte gRfuLinkStatus _081E1FAC: .4byte 0x00000301 _081E1FB0: movs r0, 0xF @@ -3614,7 +3614,7 @@ _081E204E: cmp r6, 0x40 bne _081E2124 _081E2068: - ldr r1, _081E20A0 @ =gUnknown_3007450 + ldr r1, _081E20A0 @ =gRfuSlotStatusNI lsls r0, r2, 2 adds r0, r1 ldr r0, [r0] @@ -3641,7 +3641,7 @@ _081E2068: b _081E20A8 .align 2, 0 _081E209C: .4byte 0x04000208 -_081E20A0: .4byte gUnknown_3007450 +_081E20A0: .4byte gRfuSlotStatusNI _081E20A4: movs r0, 0x1 strb r0, [r1] @@ -3674,7 +3674,7 @@ _081E20C8: bls _081E20C8 movs r2, 0 movs r5, 0x1 - ldr r4, _081E211C @ =gUnknown_3007450 + ldr r4, _081E211C @ =gRfuSlotStatusNI movs r1, 0 _081E20E2: adds r0, r3, 0 @@ -3708,14 +3708,14 @@ _081E20F4: strh r0, [r2] b _081E215C .align 2, 0 -_081E211C: .4byte gUnknown_3007450 +_081E211C: .4byte gRfuSlotStatusNI _081E2120: .4byte 0x00008021 _081E2124: movs r0, 0x10 ands r0, r6 cmp r0, 0 beq _081E215C - ldr r1, _081E2178 @ =gUnknown_3007440 + ldr r1, _081E2178 @ =gRfuSlotStatusUNI lsls r0, r2, 2 adds r0, r1 ldr r1, [r0] @@ -3755,7 +3755,7 @@ _081E2166: pop {r1} bx r1 .align 2, 0 -_081E2178: .4byte gUnknown_3007440 +_081E2178: .4byte gRfuSlotStatusUNI _081E217C: .4byte 0x00008024 _081E2180: .4byte 0x04000208 thumb_func_end rfu_STC_setSendData_org @@ -3783,7 +3783,7 @@ rfu_changeSendTarget: @ 81E2184 _081E21A8: cmp r0, 0x20 bne _081E2248 - ldr r0, _081E2238 @ =gUnknown_3007450 + ldr r0, _081E2238 @ =gRfuSlotStatusNI mov r12, r0 lsls r0, r7, 2 add r0, r12 @@ -3834,7 +3834,7 @@ _081E2202: lsrs r2, r0, 24 cmp r2, 0x3 bls _081E21EE - ldr r0, _081E2244 @ =gUnknown_3007460 + ldr r0, _081E2244 @ =gRfuLinkStatus ldr r1, [r0] ldrb r0, [r1, 0x4] ldr r2, [sp] @@ -3856,14 +3856,14 @@ _081E222E: strh r1, [r0] b _081E22DA .align 2, 0 -_081E2238: .4byte gUnknown_3007450 +_081E2238: .4byte gRfuSlotStatusNI _081E223C: .4byte 0x00008020 _081E2240: .4byte 0x04000208 -_081E2244: .4byte gUnknown_3007460 +_081E2244: .4byte gRfuLinkStatus _081E2248: cmp r3, 0x10 bne _081E22D4 - ldr r3, _081E2264 @ =gUnknown_3007440 + ldr r3, _081E2264 @ =gRfuSlotStatusUNI lsls r1, r7, 2 adds r0, r1, r3 ldr r0, [r0] @@ -3876,7 +3876,7 @@ _081E225E: ldr r0, _081E226C @ =0x00000403 b _081E22DC .align 2, 0 -_081E2264: .4byte gUnknown_3007440 +_081E2264: .4byte gRfuSlotStatusUNI _081E2268: .4byte 0x00008024 _081E226C: .4byte 0x00000403 _081E2270: @@ -3911,7 +3911,7 @@ _081E22A0: ldrh r0, [r3] mov r8, r0 strh r2, [r3] - ldr r4, _081E22D0 @ =gUnknown_3007460 + ldr r4, _081E22D0 @ =gRfuLinkStatus ldr r2, [r4] adds r5, r1, r5 ldr r0, [r5] @@ -3931,7 +3931,7 @@ _081E22A0: b _081E22DA .align 2, 0 _081E22CC: .4byte 0x04000208 -_081E22D0: .4byte gUnknown_3007460 +_081E22D0: .4byte gRfuLinkStatus _081E22D4: movs r0, 0xC0 lsls r0, 3 @@ -3960,7 +3960,7 @@ rfu_NI_stopReceivingData: @ 81E22EC lsls r0, 3 b _081E2356 _081E22FC: - ldr r1, _081E2328 @ =gUnknown_3007450 + ldr r1, _081E2328 @ =gRfuSlotStatusNI lsls r0, r3, 2 adds r0, r1 ldr r2, [r0] @@ -3983,14 +3983,14 @@ _081E22FC: movs r0, 0x48 b _081E2336 .align 2, 0 -_081E2328: .4byte gUnknown_3007450 +_081E2328: .4byte gRfuSlotStatusNI _081E232C: .4byte 0x04000208 _081E2330: .4byte 0x00008043 _081E2334: movs r0, 0x47 _081E2336: strh r0, [r2, 0x34] - ldr r0, _081E235C @ =gUnknown_3007460 + ldr r0, _081E235C @ =gRfuLinkStatus ldr r2, [r0] movs r1, 0x1 lsls r1, r3 @@ -4010,7 +4010,7 @@ _081E2356: pop {r1} bx r1 .align 2, 0 -_081E235C: .4byte gUnknown_3007460 +_081E235C: .4byte gRfuLinkStatus _081E2360: .4byte 0x04000208 thumb_func_end rfu_NI_stopReceivingData @@ -4029,7 +4029,7 @@ rfu_UNI_changeAndReadySendData: @ 81E2364 lsls r0, 3 b _081E23F0 _081E237C: - ldr r1, _081E2390 @ =gUnknown_3007440 + ldr r1, _081E2390 @ =gRfuSlotStatusUNI lsls r0, 2 adds r0, r1 ldr r4, [r0] @@ -4040,11 +4040,11 @@ _081E237C: ldr r0, _081E2398 @ =0x00000403 b _081E23F0 .align 2, 0 -_081E2390: .4byte gUnknown_3007440 +_081E2390: .4byte gRfuSlotStatusUNI _081E2394: .4byte 0x00008024 _081E2398: .4byte 0x00000403 _081E239C: - ldr r0, _081E23B0 @ =gUnknown_3007460 + ldr r0, _081E23B0 @ =gRfuLinkStatus ldr r1, [r0] ldrb r0, [r1] cmp r0, 0x1 @@ -4055,7 +4055,7 @@ _081E239C: ldrb r1, [r1, 0xF] b _081E23C2 .align 2, 0 -_081E23B0: .4byte gUnknown_3007460 +_081E23B0: .4byte gRfuLinkStatus _081E23B4: adds r0, r3, 0 adds r0, 0x10 @@ -4101,7 +4101,7 @@ rfu_UNI_readySendData: @ 81E23F8 lsrs r0, 24 cmp r0, 0x3 bhi _081E2416 - ldr r1, _081E241C @ =gUnknown_3007440 + ldr r1, _081E241C @ =gRfuSlotStatusUNI lsls r0, 2 adds r0, r1 ldr r2, [r0] @@ -4115,7 +4115,7 @@ _081E2416: pop {r0} bx r0 .align 2, 0 -_081E241C: .4byte gUnknown_3007440 +_081E241C: .4byte gRfuSlotStatusUNI _081E2420: .4byte 0x00008024 thumb_func_end rfu_UNI_readySendData @@ -4126,7 +4126,7 @@ rfu_UNI_clearRecvNewDataFlag: @ 81E2424 lsrs r0, 24 cmp r0, 0x3 bhi _081E243A - ldr r1, _081E2440 @ =gUnknown_3007440 + ldr r1, _081E2440 @ =gRfuSlotStatusUNI lsls r0, 2 adds r0, r1 ldr r1, [r0] @@ -4136,7 +4136,7 @@ _081E243A: pop {r0} bx r0 .align 2, 0 -_081E2440: .4byte gUnknown_3007440 +_081E2440: .4byte gRfuSlotStatusUNI thumb_func_end rfu_UNI_clearRecvNewDataFlag thumb_func_start rfu_REQ_sendData @@ -4144,7 +4144,7 @@ rfu_REQ_sendData: @ 81E2444 push {r4,r5,lr} lsls r0, 24 lsrs r5, r0, 24 - ldr r0, _081E2490 @ =gUnknown_3007460 + ldr r0, _081E2490 @ =gRfuLinkStatus ldr r2, [r0] ldrb r1, [r2] adds r4, r0, 0 @@ -4162,7 +4162,7 @@ _081E2458: orrs r3, r0 cmp r3, 0 bne _081E24E8 - ldr r0, _081E2494 @ =gUnknown_3007464 + ldr r0, _081E2494 @ =gRfuStatic ldr r2, [r0] ldrb r1, [r2, 0x3] adds r4, r0, 0 @@ -4181,8 +4181,8 @@ _081E2480: strb r0, [r1, 0x8] b _081E249E .align 2, 0 -_081E2490: .4byte gUnknown_3007460 -_081E2494: .4byte gUnknown_3007464 +_081E2490: .4byte gRfuLinkStatus +_081E2494: .4byte gRfuStatic _081E2498: ldrb r0, [r1, 0x7] adds r0, 0x1 @@ -4198,13 +4198,13 @@ _081E249E: cmp r0, 0 bne _081E2542 _081E24B0: - ldr r4, _081E24D4 @ =gUnknown_3007468 + ldr r4, _081E24D4 @ =gRfuFixed ldr r1, [r4] movs r0, 0x1 str r0, [r1, 0x68] movs r0, 0xFF str r0, [r1, 0x78] - ldr r0, _081E24D8 @ =sub_81E2630 + ldr r0, _081E24D8 @ =rfu_CB_sendData3 bl STWI_set_Callback_M cmp r5, 0 bne _081E24DC @@ -4214,8 +4214,8 @@ _081E24B0: bl STWI_send_DataTxREQ b _081E257E .align 2, 0 -_081E24D4: .4byte gUnknown_3007468 -_081E24D8: .4byte sub_81E2630 +_081E24D4: .4byte gRfuFixed +_081E24D8: .4byte rfu_CB_sendData3 _081E24DC: ldr r0, [r4] adds r0, 0x68 @@ -4237,10 +4237,10 @@ _081E24F4: bl STWI_set_Callback_M cmp r5, 0 beq _081E252C - ldr r0, _081E2524 @ =gUnknown_3007468 + ldr r0, _081E2524 @ =gRfuFixed ldr r0, [r0] adds r0, 0x68 - ldr r1, _081E2528 @ =gUnknown_3007464 + ldr r1, _081E2528 @ =gRfuStatic ldr r1, [r1] ldr r1, [r1, 0x24] adds r1, 0x4 @@ -4250,13 +4250,13 @@ _081E24F4: b _081E257E .align 2, 0 _081E2520: .4byte rfu_CB_sendData -_081E2524: .4byte gUnknown_3007468 -_081E2528: .4byte gUnknown_3007464 +_081E2524: .4byte gRfuFixed +_081E2528: .4byte gRfuStatic _081E252C: - ldr r0, _081E2564 @ =gUnknown_3007468 + ldr r0, _081E2564 @ =gRfuFixed ldr r0, [r0] adds r0, 0x68 - ldr r1, _081E2568 @ =gUnknown_3007464 + ldr r1, _081E2568 @ =gRfuStatic ldr r1, [r1] ldr r1, [r1, 0x24] adds r1, 0x4 @@ -4266,7 +4266,7 @@ _081E252C: _081E2542: cmp r5, 0 beq _081E257E - ldr r0, _081E256C @ =gUnknown_3007460 + ldr r0, _081E256C @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0] cmp r0, 0x1 @@ -4280,9 +4280,9 @@ _081E2542: bl _call_via_r1 b _081E257E .align 2, 0 -_081E2564: .4byte gUnknown_3007468 -_081E2568: .4byte gUnknown_3007464 -_081E256C: .4byte gUnknown_3007460 +_081E2564: .4byte gRfuFixed +_081E2568: .4byte gRfuStatic +_081E256C: .4byte gRfuLinkStatus _081E2570: .4byte gRfuState _081E2574: ldr r0, _081E2584 @ =rfu_CB_sendData2 @@ -4309,7 +4309,7 @@ rfu_CB_sendData: @ 81E2588 ldr r0, _081E2610 @ =0x00008020 mov r8, r0 _081E259C: - ldr r0, _081E2614 @ =gUnknown_3007440 + ldr r0, _081E2614 @ =gRfuSlotStatusUNI lsls r2, r6, 2 adds r0, r2, r0 ldr r1, [r0] @@ -4319,7 +4319,7 @@ _081E259C: movs r0, 0 strb r0, [r1, 0x2] _081E25AE: - ldr r0, _081E2618 @ =gUnknown_3007450 + ldr r0, _081E2618 @ =gRfuSlotStatusNI adds r0, r2, r0 ldr r4, [r0] ldrh r0, [r4] @@ -4329,7 +4329,7 @@ _081E25AE: movs r1, 0 adds r2, r4, 0 bl rfu_STC_releaseFrame - ldr r5, _081E261C @ =gUnknown_3007460 + ldr r5, _081E261C @ =gRfuLinkStatus ldr r2, [r5] ldrb r1, [r4, 0x1A] ldrb r0, [r2, 0x4] @@ -4355,7 +4355,7 @@ _081E25E8: cmp r6, 0x3 bls _081E259C _081E25F2: - ldr r0, _081E261C @ =gUnknown_3007460 + ldr r0, _081E261C @ =gRfuLinkStatus ldr r1, [r0] ldrb r0, [r1, 0xE] movs r0, 0 @@ -4370,9 +4370,9 @@ _081E25F2: bx r0 .align 2, 0 _081E2610: .4byte 0x00008020 -_081E2614: .4byte gUnknown_3007440 -_081E2618: .4byte gUnknown_3007450 -_081E261C: .4byte gUnknown_3007460 +_081E2614: .4byte gRfuSlotStatusUNI +_081E2618: .4byte gRfuSlotStatusNI +_081E261C: .4byte gRfuLinkStatus thumb_func_end rfu_CB_sendData thumb_func_start rfu_CB_sendData2 @@ -4386,8 +4386,8 @@ rfu_CB_sendData2: @ 81E2620 bx r0 thumb_func_end rfu_CB_sendData2 - thumb_func_start sub_81E2630 -sub_81E2630: @ 81E2630 + thumb_func_start rfu_CB_sendData3 +rfu_CB_sendData3: @ 81E2630 push {lr} lsls r0, 24 lsrs r0, 24 @@ -4407,7 +4407,7 @@ _081E2646: _081E2652: pop {r0} bx r0 - thumb_func_end sub_81E2630 + thumb_func_end rfu_CB_sendData3 thumb_func_start rfu_constructSendLLFrame rfu_constructSendLLFrame: @ 81E2658 @@ -4417,7 +4417,7 @@ rfu_constructSendLLFrame: @ 81E2658 mov r5, r8 push {r5-r7} sub sp, 0x4 - ldr r0, _081E2704 @ =gUnknown_3007460 + ldr r0, _081E2704 @ =gRfuLinkStatus ldr r2, [r0] ldrb r0, [r2] cmp r0, 0xFF @@ -4435,7 +4435,7 @@ _081E2670: movs r0, 0 strb r0, [r2, 0xE] mov r8, r0 - ldr r0, _081E2708 @ =gUnknown_3007468 + ldr r0, _081E2708 @ =gRfuFixed ldr r0, [r0] adds r0, 0x6C str r0, [sp] @@ -4447,7 +4447,7 @@ _081E2670: mov r10, r1 _081E269A: movs r5, 0 - ldr r0, _081E2710 @ =gUnknown_3007450 + ldr r0, _081E2710 @ =gRfuSlotStatusNI lsls r7, r6, 2 adds r4, r7, r0 ldr r2, [r4] @@ -4476,7 +4476,7 @@ _081E26BA: lsrs r0, 16 adds r5, r0 _081E26D6: - ldr r0, _081E2714 @ =gUnknown_3007440 + ldr r0, _081E2714 @ =gRfuSlotStatusUNI adds r0, r7, r0 ldr r0, [r0] ldrh r0, [r0] @@ -4491,7 +4491,7 @@ _081E26D6: _081E26F0: cmp r5, 0 beq _081E2724 - ldr r0, _081E2704 @ =gUnknown_3007460 + ldr r0, _081E2704 @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0] cmp r0, 0x1 @@ -4499,11 +4499,11 @@ _081E26F0: add r8, r5 b _081E2724 .align 2, 0 -_081E2704: .4byte gUnknown_3007460 -_081E2708: .4byte gUnknown_3007468 +_081E2704: .4byte gRfuLinkStatus +_081E2708: .4byte gRfuFixed _081E270C: .4byte 0x00008024 -_081E2710: .4byte gUnknown_3007450 -_081E2714: .4byte gUnknown_3007440 +_081E2710: .4byte gRfuSlotStatusNI +_081E2714: .4byte gRfuSlotStatusUNI _081E2718: adds r0, r7, r6 adds r0, 0x8 @@ -4517,15 +4517,15 @@ _081E2724: lsrs r6, r0, 24 cmp r6, 0x3 bls _081E269A - ldr r6, _081E2784 @ =gUnknown_3007464 + ldr r6, _081E2784 @ =gRfuStatic mov r0, r8 cmp r0, 0 beq _081E276E ldr r2, [sp] movs r0, 0x3 ands r0, r2 - ldr r5, _081E2788 @ =gUnknown_3007460 - ldr r1, _081E278C @ =gUnknown_3007468 + ldr r5, _081E2788 @ =gRfuLinkStatus + ldr r1, _081E278C @ =gRfuFixed cmp r0, 0 beq _081E2756 movs r4, 0 @@ -4565,9 +4565,9 @@ _081E2774: pop {r0} bx r0 .align 2, 0 -_081E2784: .4byte gUnknown_3007464 -_081E2788: .4byte gUnknown_3007460 -_081E278C: .4byte gUnknown_3007468 +_081E2784: .4byte gRfuStatic +_081E2788: .4byte gRfuLinkStatus +_081E278C: .4byte gRfuFixed thumb_func_end rfu_constructSendLLFrame thumb_func_start rfu_STC_NI_constructLLSF @@ -4583,7 +4583,7 @@ rfu_STC_NI_constructLLSF: @ 81E2790 lsls r0, 24 lsrs r0, 24 mov r10, r0 - ldr r2, _081E280C @ =gUnknown_3007460 + ldr r2, _081E280C @ =gRfuLinkStatus ldr r0, [r2] ldrb r0, [r0] lsls r0, 4 @@ -4637,7 +4637,7 @@ _081E27FA: movs r5, 0 b _081E285C .align 2, 0 -_081E280C: .4byte gUnknown_3007460 +_081E280C: .4byte gRfuLinkStatus _081E2810: .4byte _Str_RfuHeader _081E2814: .4byte 0x00008022 _081E2818: @@ -4709,7 +4709,7 @@ _081E2860: orrs r3, r0 orrs r3, r5 str r3, [sp] - ldr r2, _081E291C @ =gUnknown_3007460 + ldr r2, _081E291C @ =gRfuLinkStatus ldr r0, [r2] ldrb r0, [r0] cmp r0, 0x1 @@ -4750,7 +4750,7 @@ _081E28D2: adds r0, r1 ldr r0, [r0] str r0, [sp, 0x4] - ldr r0, _081E2920 @ =gUnknown_3007468 + ldr r0, _081E2920 @ =gRfuFixed ldr r1, [r0] add r0, sp, 0x4 ldr r3, [r1, 0x4] @@ -4772,7 +4772,7 @@ _081E28F2: movs r0, 0 strb r0, [r6] _081E290C: - ldr r0, _081E291C @ =gUnknown_3007460 + ldr r0, _081E291C @ =gRfuLinkStatus ldr r2, [r0] ldrb r1, [r2] cmp r1, 0x1 @@ -4781,8 +4781,8 @@ _081E290C: strb r1, [r2, 0xE] b _081E2936 .align 2, 0 -_081E291C: .4byte gUnknown_3007460 -_081E2920: .4byte gUnknown_3007468 +_081E291C: .4byte gRfuLinkStatus +_081E2920: .4byte gRfuFixed _081E2924: .4byte 0x00008022 _081E2928: movs r0, 0x1 @@ -4818,7 +4818,7 @@ rfu_STC_UNI_constructLLSF: @ 81E2950 lsls r0, 24 lsrs r0, 24 mov r8, r0 - ldr r1, _081E2978 @ =gUnknown_3007440 + ldr r1, _081E2978 @ =gRfuSlotStatusUNI lsls r0, 2 adds r0, r1 ldr r4, [r0] @@ -4832,9 +4832,9 @@ _081E2974: movs r0, 0 b _081E2A18 .align 2, 0 -_081E2978: .4byte gUnknown_3007440 +_081E2978: .4byte gRfuSlotStatusUNI _081E297C: - ldr r0, _081E29F4 @ =gUnknown_3007460 + ldr r0, _081E29F4 @ =gRfuLinkStatus ldr r2, [r0] ldrb r0, [r2] lsls r0, 4 @@ -4858,7 +4858,7 @@ _081E297C: _081E29A6: mov r2, sp movs r3, 0 - ldr r1, _081E29FC @ =gUnknown_3007468 + ldr r1, _081E29FC @ =gRfuFixed mov r12, r1 add r7, sp, 0x4 ldrb r0, [r5] @@ -4887,7 +4887,7 @@ _081E29CE: adds r0, r7, 0 adds r1, r6, 0 bl _call_via_r3 - ldr r0, _081E29F4 @ =gUnknown_3007460 + ldr r0, _081E29F4 @ =gRfuLinkStatus ldr r2, [r0] ldrb r0, [r2] cmp r0, 0x1 @@ -4896,9 +4896,9 @@ _081E29CE: movs r0, 0x10 b _081E2A0C .align 2, 0 -_081E29F4: .4byte gUnknown_3007460 +_081E29F4: .4byte gRfuLinkStatus _081E29F8: .4byte _Str_RfuHeader -_081E29FC: .4byte gUnknown_3007468 +_081E29FC: .4byte gRfuFixed _081E2A00: movs r0, 0x10 mov r1, r8 @@ -4925,12 +4925,12 @@ _081E2A18: thumb_func_start rfu_REQ_recvData rfu_REQ_recvData: @ 81E2A24 push {r4,lr} - ldr r0, _081E2A58 @ =gUnknown_3007460 + ldr r0, _081E2A58 @ =gRfuLinkStatus ldr r4, [r0] ldrb r0, [r4] cmp r0, 0xFF beq _081E2A50 - ldr r2, _081E2A5C @ =gUnknown_3007464 + ldr r2, _081E2A5C @ =gRfuStatic ldr r3, [r2] ldrb r0, [r4, 0x4] ldrb r1, [r4, 0x5] @@ -4949,8 +4949,8 @@ _081E2A50: pop {r0} bx r0 .align 2, 0 -_081E2A58: .4byte gUnknown_3007460 -_081E2A5C: .4byte gUnknown_3007464 +_081E2A58: .4byte gRfuLinkStatus +_081E2A5C: .4byte gRfuStatic _081E2A60: .4byte rfu_CB_recvData thumb_func_end rfu_REQ_recvData @@ -4968,17 +4968,17 @@ rfu_CB_recvData: @ 81E2A64 lsrs r7, r1, 16 cmp r7, 0 bne _081E2B28 - ldr r0, _081E2AA0 @ =gUnknown_3007468 + ldr r0, _081E2AA0 @ =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r0, [r0] ldrb r0, [r0, 0x1] cmp r0, 0 beq _081E2B28 - ldr r0, _081E2AA4 @ =gUnknown_3007464 + ldr r0, _081E2AA4 @ =gRfuStatic ldr r0, [r0] strb r7, [r0, 0x1] - ldr r0, _081E2AA8 @ =gUnknown_3007460 + ldr r0, _081E2AA8 @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0] cmp r0, 0x1 @@ -4986,25 +4986,25 @@ rfu_CB_recvData: @ 81E2A64 bl rfu_STC_PARENT_analyzeRecvPacket b _081E2AB0 .align 2, 0 -_081E2AA0: .4byte gUnknown_3007468 -_081E2AA4: .4byte gUnknown_3007464 -_081E2AA8: .4byte gUnknown_3007460 +_081E2AA0: .4byte gRfuFixed +_081E2AA4: .4byte gRfuStatic +_081E2AA8: .4byte gRfuLinkStatus _081E2AAC: bl rfu_STC_CHILD_analyzeRecvPacket _081E2AB0: movs r6, 0 ldr r0, _081E2B40 @ =0x00008043 mov r8, r0 - ldr r3, _081E2B44 @ =gUnknown_3007460 + ldr r3, _081E2B44 @ =gRfuLinkStatus _081E2AB8: - ldr r0, _081E2B48 @ =gUnknown_3007450 + ldr r0, _081E2B48 @ =gRfuSlotStatusNI lsls r1, r6, 2 adds r1, r0 ldr r4, [r1] ldrh r0, [r4, 0x34] cmp r0, r8 bne _081E2B0A - ldr r0, _081E2B4C @ =gUnknown_3007464 + ldr r0, _081E2B4C @ =gRfuStatic ldr r0, [r0] ldrb r0, [r0, 0x1] asrs r0, r6 @@ -5044,7 +5044,7 @@ _081E2B0A: lsrs r6, r0, 24 cmp r6, 0x3 bls _081E2AB8 - ldr r0, _081E2B4C @ =gUnknown_3007464 + ldr r0, _081E2B4C @ =gRfuStatic ldr r1, [r0] ldrb r0, [r1, 0x4] cmp r0, 0 @@ -5067,16 +5067,16 @@ _081E2B28: bx r0 .align 2, 0 _081E2B40: .4byte 0x00008043 -_081E2B44: .4byte gUnknown_3007460 -_081E2B48: .4byte gUnknown_3007450 -_081E2B4C: .4byte gUnknown_3007464 +_081E2B44: .4byte gRfuLinkStatus +_081E2B48: .4byte gRfuSlotStatusNI +_081E2B4C: .4byte gRfuStatic thumb_func_end rfu_CB_recvData thumb_func_start rfu_STC_PARENT_analyzeRecvPacket rfu_STC_PARENT_analyzeRecvPacket: @ 81E2B50 push {r4-r7,lr} sub sp, 0x4 - ldr r1, _081E2BE0 @ =gUnknown_3007468 + ldr r1, _081E2BE0 @ =gRfuFixed ldr r0, [r1] adds r0, 0xDC ldr r0, [r0] @@ -5085,7 +5085,7 @@ rfu_STC_PARENT_analyzeRecvPacket: @ 81E2B50 movs r5, 0 mov r12, r1 movs r7, 0x1F - ldr r4, _081E2BE4 @ =gUnknown_3007464 + ldr r4, _081E2BE4 @ =gRfuStatic movs r6, 0x1 _081E2B6A: mov r0, sp @@ -5151,14 +5151,14 @@ _081E2BD0: pop {r0} bx r0 .align 2, 0 -_081E2BE0: .4byte gUnknown_3007468 -_081E2BE4: .4byte gUnknown_3007464 +_081E2BE0: .4byte gRfuFixed +_081E2BE4: .4byte gRfuStatic thumb_func_end rfu_STC_PARENT_analyzeRecvPacket thumb_func_start rfu_STC_CHILD_analyzeRecvPacket rfu_STC_CHILD_analyzeRecvPacket: @ 81E2BE8 push {r4-r6,lr} - ldr r0, _081E2C38 @ =gUnknown_3007468 + ldr r0, _081E2C38 @ =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r1, [r0] @@ -5169,7 +5169,7 @@ rfu_STC_CHILD_analyzeRecvPacket: @ 81E2BE8 adds r5, 0x8 cmp r4, 0 bne _081E2C08 - ldr r0, _081E2C3C @ =gUnknown_3007464 + ldr r0, _081E2C3C @ =gRfuStatic ldr r1, [r0] movs r0, 0xF strb r0, [r1, 0x1] @@ -5199,8 +5199,8 @@ _081E2C30: pop {r0} bx r0 .align 2, 0 -_081E2C38: .4byte gUnknown_3007468 -_081E2C3C: .4byte gUnknown_3007464 +_081E2C38: .4byte gRfuFixed +_081E2C3C: .4byte gRfuStatic thumb_func_end rfu_STC_CHILD_analyzeRecvPacket thumb_func_start rfu_STC_analyzeLLSF @@ -5217,7 +5217,7 @@ rfu_STC_analyzeLLSF: @ 81E2C40 mov r12, r0 lsls r2, 16 lsrs r3, r2, 16 - ldr r2, _081E2C74 @ =gUnknown_3007460 + ldr r2, _081E2C74 @ =gRfuLinkStatus ldr r0, [r2] ldrb r0, [r0] mvns r0, r0 @@ -5232,7 +5232,7 @@ rfu_STC_analyzeLLSF: @ 81E2C40 adds r0, r3, 0 b _081E2E6E .align 2, 0 -_081E2C74: .4byte gUnknown_3007460 +_081E2C74: .4byte gRfuLinkStatus _081E2C78: .4byte _Str_RfuHeader _081E2C7C: movs r5, 0 @@ -5341,7 +5341,7 @@ _081E2CA4: beq _081E2D4A b _081E2E6C _081E2D4A: - ldr r2, _081E2D90 @ =gUnknown_3007460 + ldr r2, _081E2D90 @ =gRfuLinkStatus ldr r3, [r2] ldrb r2, [r3] cmp r2, 0x1 @@ -5371,7 +5371,7 @@ _081E2D80: .4byte 0xffff00ff _081E2D84: .4byte 0xff00ffff _081E2D88: .4byte 0x00ffffff _081E2D8C: .4byte 0x0000ffff -_081E2D90: .4byte gUnknown_3007460 +_081E2D90: .4byte gRfuLinkStatus _081E2D94: mov r5, r9 ldrb r0, [r5, 0x3] @@ -5384,7 +5384,7 @@ _081E2D94: b _081E2E6C _081E2DA8: movs r4, 0 - ldr r1, _081E2DC0 @ =gUnknown_3007450 + ldr r1, _081E2DC0 @ =gRfuSlotStatusNI ldr r0, [r1] ldrb r0, [r0, 0x1A] mov r5, r12 @@ -5395,7 +5395,7 @@ _081E2DA8: ldrb r0, [r3, 0x4] b _081E2DEA .align 2, 0 -_081E2DC0: .4byte gUnknown_3007450 +_081E2DC0: .4byte gRfuSlotStatusNI _081E2DC4: adds r0, r4, 0x1 lsls r0, 24 @@ -5412,7 +5412,7 @@ _081E2DC4: ands r0, r2 cmp r0, 0 beq _081E2DC4 - ldr r3, _081E2E04 @ =gUnknown_3007460 + ldr r3, _081E2E04 @ =gRfuLinkStatus ldr r0, [r3] ldrb r0, [r0, 0x4] mov r5, r12 @@ -5430,7 +5430,7 @@ _081E2DEA: bl rfu_STC_NI_receive_Sender b _081E2E6C .align 2, 0 -_081E2E04: .4byte gUnknown_3007460 +_081E2E04: .4byte gRfuLinkStatus _081E2E08: ldrb r1, [r3, 0x2] mov r2, r9 @@ -5465,7 +5465,7 @@ _081E2E36: bl rfu_STC_NI_receive_Receiver b _081E2E62 _081E2E48: - ldr r0, _081E2E80 @ =gUnknown_3007460 + ldr r0, _081E2E80 @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0, 0x4] asrs r0, r4 @@ -5495,7 +5495,7 @@ _081E2E6E: pop {r1} bx r1 .align 2, 0 -_081E2E80: .4byte gUnknown_3007460 +_081E2E80: .4byte gRfuLinkStatus thumb_func_end rfu_STC_analyzeLLSF thumb_func_start rfu_STC_UNI_receive @@ -5506,7 +5506,7 @@ rfu_STC_UNI_receive: @ 81E2E84 str r2, [sp] lsls r0, 24 lsrs r7, r0, 24 - ldr r2, _081E2EB8 @ =gUnknown_3007440 + ldr r2, _081E2EB8 @ =gRfuSlotStatusUNI lsls r1, r7, 2 adds r1, r2 ldr r3, [r1] @@ -5527,7 +5527,7 @@ rfu_STC_UNI_receive: @ 81E2E84 strh r0, [r5, 0x2] b _081E2F0E .align 2, 0 -_081E2EB8: .4byte gUnknown_3007440 +_081E2EB8: .4byte gRfuSlotStatusUNI _081E2EBC: .4byte 0x00000701 _081E2EC0: ldrb r0, [r5, 0x7] @@ -5560,7 +5560,7 @@ _081E2EE4: ldr r0, [r0] ldr r0, [r0, 0x14] str r0, [sp, 0x4] - ldr r0, _081E2F30 @ =gUnknown_3007468 + ldr r0, _081E2F30 @ =gRfuFixed ldr r0, [r0] add r1, sp, 0x4 ldr r3, [r0, 0x4] @@ -5573,7 +5573,7 @@ _081E2F0E: ldrh r0, [r5, 0x2] cmp r0, 0 beq _081E2F22 - ldr r0, _081E2F34 @ =gUnknown_3007464 + ldr r0, _081E2F34 @ =gRfuStatic ldr r2, [r0] movs r0, 0x10 lsls r0, r7 @@ -5587,8 +5587,8 @@ _081E2F22: bx r0 .align 2, 0 _081E2F2C: .4byte 0x00008042 -_081E2F30: .4byte gUnknown_3007468 -_081E2F34: .4byte gUnknown_3007464 +_081E2F30: .4byte gRfuFixed +_081E2F34: .4byte gRfuStatic thumb_func_end rfu_STC_UNI_receive thumb_func_start rfu_STC_NI_receive_Sender @@ -5604,7 +5604,7 @@ rfu_STC_NI_receive_Sender: @ 81E2F38 lsls r1, 24 lsrs r1, 24 mov r10, r1 - ldr r1, _081E3004 @ =gUnknown_3007450 + ldr r1, _081E3004 @ =gRfuSlotStatusNI lsrs r0, 22 adds r0, r1 ldr r0, [r0] @@ -5700,7 +5700,7 @@ _081E2FB2: str r0, [r1] b _081E302E .align 2, 0 -_081E3004: .4byte gUnknown_3007450 +_081E3004: .4byte gRfuSlotStatusNI _081E3008: .4byte 0x00008022 _081E300C: .4byte 0x00008021 _081E3010: .4byte 0x00008023 @@ -5811,7 +5811,7 @@ _081E30D8: ldrh r2, [r4] movs r0, 0 strh r0, [r4] - ldr r0, _081E311C @ =gUnknown_3007464 + ldr r0, _081E311C @ =gRfuStatic ldr r3, [r0] movs r0, 0x10 mov r7, r10 @@ -5821,7 +5821,7 @@ _081E30D8: movs r1, 0 strb r0, [r3, 0x2] lsls r0, r7, 2 - ldr r3, _081E3120 @ =gUnknown_3007450 + ldr r3, _081E3120 @ =gRfuSlotStatusNI adds r0, r3 ldr r0, [r0] strh r1, [r0, 0x2] @@ -5839,8 +5839,8 @@ _081E30FE: _081E3110: .4byte 0x80230000 _081E3114: .4byte 0x00008020 _081E3118: .4byte 0x04000208 -_081E311C: .4byte gUnknown_3007464 -_081E3120: .4byte gUnknown_3007450 +_081E311C: .4byte gRfuStatic +_081E3120: .4byte gRfuSlotStatusNI thumb_func_end rfu_STC_NI_receive_Sender thumb_func_start rfu_STC_NI_receive_Receiver @@ -5857,7 +5857,7 @@ rfu_STC_NI_receive_Receiver: @ 81E3124 lsrs r0, 24 mov r8, r0 movs r7, 0 - ldr r1, _081E3184 @ =gUnknown_3007450 + ldr r1, _081E3184 @ =gRfuSlotStatusNI lsls r0, 2 adds r0, r1 ldr r4, [r0] @@ -5874,7 +5874,7 @@ rfu_STC_NI_receive_Receiver: @ 81E3124 ldrb r0, [r6, 0x2] cmp r0, 0x3 bne _081E3194 - ldr r0, _081E3188 @ =gUnknown_3007464 + ldr r0, _081E3188 @ =gRfuStatic ldr r2, [r0] movs r0, 0x1 mov r1, r8 @@ -5894,8 +5894,8 @@ rfu_STC_NI_receive_Receiver: @ 81E3124 strh r0, [r4, 0x34] b _081E31DA .align 2, 0 -_081E3184: .4byte gUnknown_3007450 -_081E3188: .4byte gUnknown_3007464 +_081E3184: .4byte gRfuSlotStatusNI +_081E3188: .4byte gRfuStatic _081E318C: .4byte 0x00008042 _081E3190: .4byte 0x00008043 _081E3194: @@ -5947,7 +5947,7 @@ _081E31DE: ands r0, r1 cmp r2, r0 bne _081E3234 - ldr r0, _081E3290 @ =gUnknown_3007468 + ldr r0, _081E3290 @ =gRfuFixed ldr r0, [r0] lsls r1, r3, 2 adds r1, 0x4 @@ -6005,7 +6005,7 @@ _081E325C: ldrh r2, [r3] movs r0, 0 strh r0, [r3] - ldr r0, _081E329C @ =gUnknown_3007464 + ldr r0, _081E329C @ =gRfuStatic ldr r4, [r0] movs r0, 0x1 mov r1, r8 @@ -6027,10 +6027,10 @@ _081E327A: bx r0 .align 2, 0 _081E328C: .4byte 0x00008041 -_081E3290: .4byte gUnknown_3007468 +_081E3290: .4byte gRfuFixed _081E3294: .4byte 0x00008042 _081E3298: .4byte 0x04000208 -_081E329C: .4byte gUnknown_3007464 +_081E329C: .4byte gRfuStatic thumb_func_end rfu_STC_NI_receive_Receiver thumb_func_start rfu_STC_NI_initSlot_asRecvControllData @@ -6039,7 +6039,7 @@ rfu_STC_NI_initSlot_asRecvControllData: @ 81E32A0 adds r2, r1, 0 lsls r0, 24 lsrs r4, r0, 24 - ldr r0, _081E32BC @ =gUnknown_3007460 + ldr r0, _081E32BC @ =gRfuLinkStatus ldr r3, [r0] ldrb r1, [r3] mov r12, r0 @@ -6050,7 +6050,7 @@ rfu_STC_NI_initSlot_asRecvControllData: @ 81E32A0 adds r1, 0xF b _081E32C8 .align 2, 0 -_081E32BC: .4byte gUnknown_3007460 +_081E32BC: .4byte gRfuLinkStatus _081E32C0: movs r5, 0x2 adds r0, r4, 0 @@ -6073,7 +6073,7 @@ _081E32C8: strh r0, [r2] ldr r0, _081E32F8 @ =0x00000702 strh r0, [r2, 0x18] - ldr r0, _081E32FC @ =gUnknown_3007464 + ldr r0, _081E32FC @ =gRfuStatic ldr r2, [r0] ldrb r1, [r2, 0x4] adds r0, r6, 0 @@ -6082,7 +6082,7 @@ _081E32C8: b _081E3326 .align 2, 0 _081E32F8: .4byte 0x00000702 -_081E32FC: .4byte gUnknown_3007464 +_081E32FC: .4byte gRfuStatic _081E3300: strh r3, [r2, 0x18] ldrb r0, [r1] @@ -6122,7 +6122,7 @@ rfu_STC_NI_initSlot_asRecvDataEntity: @ 81E3330 ldrb r0, [r0] cmp r0, 0x1 bne _081E3354 - ldr r0, _081E3350 @ =gUnknown_3007460 + ldr r0, _081E3350 @ =gRfuLinkStatus lsls r1, r5, 5 adds r1, 0x14 ldr r0, [r0] @@ -6130,9 +6130,9 @@ rfu_STC_NI_initSlot_asRecvDataEntity: @ 81E3330 adds r0, 0x4 b _081E33AA .align 2, 0 -_081E3350: .4byte gUnknown_3007460 +_081E3350: .4byte gRfuLinkStatus _081E3354: - ldr r1, _081E3398 @ =gUnknown_3007450 + ldr r1, _081E3398 @ =gRfuSlotStatusNI lsls r0, r5, 2 adds r0, r1 ldr r2, [r0] @@ -6144,13 +6144,13 @@ _081E3354: lsls r1, 17 lsls r1, r5 lsrs r1, 24 - ldr r0, _081E339C @ =gUnknown_3007464 + ldr r0, _081E339C @ =gRfuStatic ldr r3, [r0] ldrb r2, [r3, 0x4] adds r0, r1, 0 orrs r0, r2 strb r0, [r3, 0x4] - ldr r0, _081E33A0 @ =gUnknown_3007460 + ldr r0, _081E33A0 @ =gRfuLinkStatus ldr r2, [r0] ldrb r0, [r2, 0x5] bics r0, r1 @@ -6165,9 +6165,9 @@ _081E3354: bl rfu_STC_releaseFrame b _081E33DC .align 2, 0 -_081E3398: .4byte gUnknown_3007450 -_081E339C: .4byte gUnknown_3007464 -_081E33A0: .4byte gUnknown_3007460 +_081E3398: .4byte gRfuSlotStatusNI +_081E339C: .4byte gRfuStatic +_081E33A0: .4byte gRfuLinkStatus _081E33A4: .4byte 0x00000701 _081E33A8: ldr r0, [r2, 0x68] @@ -6209,7 +6209,7 @@ _081E33E4: .4byte 0x00008042 thumb_func_start rfu_NI_checkCommFailCounter rfu_NI_checkCommFailCounter: @ 81E33E8 push {r4-r7,lr} - ldr r2, _081E3474 @ =gUnknown_3007460 + ldr r2, _081E3474 @ =gRfuLinkStatus ldr r0, [r2] ldrb r1, [r0, 0x4] ldrb r0, [r0, 0x5] @@ -6221,14 +6221,14 @@ rfu_NI_checkCommFailCounter: @ 81E33E8 mov r12, r0 movs r0, 0 strh r0, [r1] - ldr r1, _081E347C @ =gUnknown_3007464 + ldr r1, _081E347C @ =gRfuStatic ldr r0, [r1] ldrb r0, [r0, 0x2] lsrs r7, r0, 4 movs r3, 0 adds r6, r1, 0 adds r5, r2, 0 - ldr r4, _081E3480 @ =gUnknown_3007450 + ldr r4, _081E3480 @ =gRfuSlotStatusNI _081E3412: movs r0, 0x80 lsls r0, 17 @@ -6283,10 +6283,10 @@ _081E346E: pop {r0} bx r0 .align 2, 0 -_081E3474: .4byte gUnknown_3007460 +_081E3474: .4byte gRfuLinkStatus _081E3478: .4byte 0x04000208 -_081E347C: .4byte gUnknown_3007464 -_081E3480: .4byte gUnknown_3007450 +_081E347C: .4byte gRfuStatic +_081E3480: .4byte gRfuSlotStatusNI thumb_func_end rfu_NI_checkCommFailCounter thumb_func_start rfu_REQ_noise diff --git a/asm/link_rfu.s b/asm/link_rfu.s index 7c1485466..49fe3aef5 100644 --- a/asm/link_rfu.s +++ b/asm/link_rfu.s @@ -50,7 +50,7 @@ rfu_REQ_sendData_wrapper: @ 80FD3F0 push {lr} lsls r0, 24 lsrs r2, r0, 24 - ldr r0, _080FD410 @ =gUnknown_3007460 + ldr r0, _080FD410 @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0] cmp r0, 0 @@ -63,7 +63,7 @@ rfu_REQ_sendData_wrapper: @ 80FD3F0 movs r2, 0x1 b _080FD420 .align 2, 0 -_080FD410: .4byte gUnknown_3007460 +_080FD410: .4byte gRfuLinkStatus _080FD414: .4byte gUnknown_3005E10 _080FD418: ldr r0, _080FD42C @ =gUnknown_3005E10 @@ -383,7 +383,7 @@ _080FD648: _080FD664: .4byte gUnknown_3005E10 _080FD668: movs r2, 0 - ldr r0, _080FD6B4 @ =gUnknown_3007460 + ldr r0, _080FD6B4 @ =gRfuLinkStatus ldr r1, [r0] ldrb r3, [r1, 0x8] ldr r5, _080FD6B8 @ =gUnknown_3005E10 @@ -422,7 +422,7 @@ _080FD6A2: movs r0, 0x3 b _080FD6E8 .align 2, 0 -_080FD6B4: .4byte gUnknown_3007460 +_080FD6B4: .4byte gRfuLinkStatus _080FD6B8: .4byte gUnknown_3005E10 _080FD6BC: ldrb r0, [r5, 0x4] @@ -476,7 +476,7 @@ sub_80FD6F4: @ 80FD6F4 bics r0, r1 strb r0, [r3] movs r4, 0 - ldr r7, _080FD75C @ =gUnknown_3007460 + ldr r7, _080FD75C @ =gRfuLinkStatus movs r5, 0x1 adds r3, 0x4 movs r2, 0 @@ -514,7 +514,7 @@ _080FD750: bx r0 .align 2, 0 _080FD758: .4byte gUnknown_3005E10 -_080FD75C: .4byte gUnknown_3007460 +_080FD75C: .4byte gRfuLinkStatus thumb_func_end sub_80FD6F4 thumb_func_start sub_80FD760 @@ -601,7 +601,7 @@ _080FD80A: strb r0, [r5, 0x4] ldrb r0, [r5, 0x12] strb r0, [r5, 0x5] - ldr r4, _080FD82C @ =gUnknown_3007460 + ldr r4, _080FD82C @ =gRfuLinkStatus ldr r0, [r4] ldrb r0, [r0, 0x3] bl sub_80FE818 @@ -613,7 +613,7 @@ _080FD80A: bl sub_80FE7F0 b _080FD84A .align 2, 0 -_080FD82C: .4byte gUnknown_3007460 +_080FD82C: .4byte gRfuLinkStatus _080FD830: movs r0, 0x12 strb r0, [r5, 0x4] @@ -653,7 +653,7 @@ sub_80FD850: @ 80FD850 mov r1, sp adds r2, r5, 0 adds r3, r4, 0 - bl sub_81E13F0 + bl rfu_REQBN_watchLink mov r0, sp ldrb r0, [r0] adds r7, r4, 0 @@ -743,7 +743,7 @@ _080FD90A: _080FD91E: bl sub_80FEAF4 _080FD922: - ldr r0, _080FDA0C @ =gUnknown_3007460 + ldr r0, _080FDA0C @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0] cmp r0, 0x1 @@ -866,7 +866,7 @@ _080FD9FC: pop {r1} bx r1 .align 2, 0 -_080FDA0C: .4byte gUnknown_3007460 +_080FDA0C: .4byte gRfuLinkStatus _080FDA10: .4byte gUnknown_3005E10 thumb_func_end sub_80FD850 @@ -1025,7 +1025,7 @@ _080FDB5C: .align 2, 0 _080FDB70: .4byte gUnknown_3005E10 _080FDB74: - bl sub_81E0CAC + bl rfu_REQ_startSearchChild b _080FDBDA _080FDB7A: bl rfu_REQ_pollSearchChild @@ -1056,13 +1056,13 @@ _080FDBAE: bl rfu_REQ_endConnectParent b _080FDBDA _080FDBB4: - ldr r0, _080FDBC0 @ =gUnknown_3007460 + ldr r0, _080FDBC0 @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0, 0x3] bl rfu_REQ_CHILD_startConnectRecovery b _080FDBDA .align 2, 0 -_080FDBC0: .4byte gUnknown_3007460 +_080FDBC0: .4byte gRfuLinkStatus _080FDBC4: bl rfu_REQ_CHILD_pollConnectRecovery b _080FDBDA @@ -1089,7 +1089,7 @@ _080FDBE4: bhi _080FDBF4 b _080FDA5A _080FDBF4: - ldr r0, _080FDC24 @ =gUnknown_3007460 + ldr r0, _080FDC24 @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0] cmp r0, 0x1 @@ -1110,7 +1110,7 @@ _080FDC1A: bx r0 .align 2, 0 _080FDC20: .4byte gUnknown_3005E10 -_080FDC24: .4byte gUnknown_3007460 +_080FDC24: .4byte gRfuLinkStatus thumb_func_end sub_80FDA30 thumb_func_start sub_80FDC28 @@ -1387,7 +1387,7 @@ _080FDE64: ldrh r0, [r4, 0x1A] cmp r0, 0x1 beq _080FDE8A - ldr r0, _080FDEB0 @ =gUnknown_3007460 + ldr r0, _080FDEB0 @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0, 0x8] cmp r0, 0x4 @@ -1419,7 +1419,7 @@ _080FDEA0: b _080FE16E .align 2, 0 _080FDEAC: .4byte gUnknown_3005E10 -_080FDEB0: .4byte gUnknown_3007460 +_080FDEB0: .4byte gRfuLinkStatus _080FDEB4: cmp r6, 0 beq _080FDEBA @@ -1563,7 +1563,7 @@ _080FDFB4: beq _080FDFBA b _080FE16E _080FDFBA: - ldr r2, _080FDFFC @ =gUnknown_3007460 + ldr r2, _080FDFFC @ =gRfuLinkStatus ldr r3, [r2] ldrb r0, [r3, 0x3] movs r1, 0 @@ -1600,7 +1600,7 @@ _080FDFEC: beq _080FDFDC b _080FE16E .align 2, 0 -_080FDFFC: .4byte gUnknown_3007460 +_080FDFFC: .4byte gRfuLinkStatus _080FE000: cmp r6, 0 bne _080FE01E @@ -1670,7 +1670,7 @@ _080FE078: ldr r4, _080FE0B4 @ =gUnknown_3005E10 strb r6, [r4, 0x5] strb r6, [r4, 0x4] - ldr r0, _080FE0B8 @ =gUnknown_3007460 + ldr r0, _080FE0B8 @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0, 0x3] bl sub_80FE818 @@ -1697,7 +1697,7 @@ _080FE08C: b _080FE16E .align 2, 0 _080FE0B4: .4byte gUnknown_3005E10 -_080FE0B8: .4byte gUnknown_3007460 +_080FE0B8: .4byte gRfuLinkStatus _080FE0BC: cmp r6, 0 bne _080FE16E @@ -1758,7 +1758,7 @@ _080FE0E8: strb r7, [r5, 0x5] strb r7, [r5, 0x4] bl sub_80FEAF4 - ldr r0, _080FE158 @ =gUnknown_3007460 + ldr r0, _080FE158 @ =gRfuLinkStatus ldr r0, [r0] ldrb r1, [r0, 0x2] ldrb r0, [r0, 0x3] @@ -1772,7 +1772,7 @@ _080FE0E8: bl sub_80FE7F0 b _080FE16E .align 2, 0 -_080FE158: .4byte gUnknown_3007460 +_080FE158: .4byte gRfuLinkStatus _080FE15C: cmp r6, 0 bne _080FE16E @@ -1811,7 +1811,7 @@ _080FE194: ldrb r0, [r0] cmp r0, 0 bne _080FE1CA - ldr r4, _080FE1E0 @ =gUnknown_3007460 + ldr r4, _080FE1E0 @ =gRfuLinkStatus ldr r0, [r4] ldrb r0, [r0] cmp r0, 0 @@ -1839,7 +1839,7 @@ _080FE1D2: _080FE1DC: b _080FE322 .align 2, 0 -_080FE1E0: .4byte gUnknown_3007460 +_080FE1E0: .4byte gRfuLinkStatus _080FE1E4: mov r0, r8 cmp r0, 0x30 @@ -1906,7 +1906,7 @@ _080FE24E: strb r0, [r3] movs r3, 0 adds r7, r1, 0 - ldr r2, _080FE2AC @ =gUnknown_3007460 + ldr r2, _080FE2AC @ =gRfuLinkStatus mov r1, sp movs r5, 0x1 adds r4, r7, 0 @@ -1947,7 +1947,7 @@ _080FE27A: b _080FE2C2 .align 2, 0 _080FE2A8: .4byte gUnknown_3005E10 -_080FE2AC: .4byte gUnknown_3007460 +_080FE2AC: .4byte gRfuLinkStatus _080FE2B0: ldrb r0, [r7, 0x4] subs r0, 0x6 @@ -1980,7 +1980,7 @@ _080FE2D6: b _080FE322 _080FE2E6: bl sub_80FE6F0 - ldr r0, _080FE300 @ =gUnknown_3007460 + ldr r0, _080FE300 @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0] cmp r0, 0xFF @@ -1990,7 +1990,7 @@ _080FE2E6: bl sub_80FE7F0 b _080FE322 .align 2, 0 -_080FE300: .4byte gUnknown_3007460 +_080FE300: .4byte gRfuLinkStatus _080FE304: cmp r6, 0 bne _080FE326 @@ -2018,7 +2018,7 @@ _080FE326: ldrb r0, [r7, 0x7] cmp r0, 0x4 bne _080FE358 - ldr r2, _080FE354 @ =gUnknown_3007460 + ldr r2, _080FE354 @ =gRfuLinkStatus ldr r1, [r2] movs r0, 0x1 strb r0, [r1] @@ -2030,7 +2030,7 @@ _080FE326: b _080FE388 .align 2, 0 _080FE350: .4byte gUnknown_3005E10 -_080FE354: .4byte gUnknown_3007460 +_080FE354: .4byte gRfuLinkStatus _080FE358: movs r1, 0 mov r3, r8 @@ -2075,7 +2075,7 @@ sub_80FE394: @ 80FE394 strb r0, [r4, 0xE] movs r0, 0x1 strb r0, [r4, 0xF] - ldr r0, _080FE3CC @ =gUnknown_3007460 + ldr r0, _080FE3CC @ =gRfuLinkStatus ldr r0, [r0] ldrb r5, [r0] cmp r5, 0 @@ -2091,7 +2091,7 @@ sub_80FE394: @ 80FE394 b _080FE40C .align 2, 0 _080FE3C8: .4byte gUnknown_3005E10 -_080FE3CC: .4byte gUnknown_3007460 +_080FE3CC: .4byte gRfuLinkStatus _080FE3D0: mov r0, sp bl rfu_UNI_PARENT_getDRAC_ACK @@ -2148,7 +2148,7 @@ sub_80FE418: @ 80FE418 bls _080FE436 b _080FE62A _080FE436: - ldr r0, _080FE4A0 @ =gUnknown_3007460 + ldr r0, _080FE4A0 @ =gRfuLinkStatus ldr r2, [r0] ldrb r1, [r2, 0x2] ldrb r0, [r3, 0xC] @@ -2201,7 +2201,7 @@ _080FE46C: b _080FE574 .align 2, 0 _080FE49C: .4byte gUnknown_3005E10 -_080FE4A0: .4byte gUnknown_3007460 +_080FE4A0: .4byte gRfuLinkStatus _080FE4A4: ldrb r1, [r7] adds r0, r4, 0 @@ -2224,7 +2224,7 @@ _080FE4BE: mov r10, r2 cmp r0, 0 beq _080FE574 - ldr r0, _080FE518 @ =gUnknown_3007450 + ldr r0, _080FE518 @ =gRfuSlotStatusNI lsls r1, r6, 2 adds r1, r0 ldr r1, [r1] @@ -2242,7 +2242,7 @@ _080FE4BE: ldr r0, _080FE51C @ =0x0000ffff cmp r2, r0 beq _080FE508 - ldr r0, _080FE520 @ =gUnknown_3007460 + ldr r0, _080FE520 @ =gRfuLinkStatus ldr r0, [r0] lsls r1, r6, 5 adds r0, r1 @@ -2264,9 +2264,9 @@ _080FE508: orrs r5, r0 b _080FE53C .align 2, 0 -_080FE518: .4byte gUnknown_3007450 +_080FE518: .4byte gRfuSlotStatusNI _080FE51C: .4byte 0x0000ffff -_080FE520: .4byte gUnknown_3007460 +_080FE520: .4byte gRfuLinkStatus _080FE524: lsls r1, r6, 1 adds r0, r3, 0 @@ -2331,7 +2331,7 @@ _080FE592: cmp r0, 0 beq _080FE5CE movs r5, 0x1 - ldr r0, _080FE600 @ =gUnknown_3007460 + ldr r0, _080FE600 @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0, 0x6] cmp r0, 0 @@ -2378,7 +2378,7 @@ _080FE5CE: .align 2, 0 _080FE5F8: .4byte 0x0000ffff _080FE5FC: .4byte gUnknown_3005E10 -_080FE600: .4byte gUnknown_3007460 +_080FE600: .4byte gRfuLinkStatus _080FE604: cmp r0, 0x2 bne _080FE610 @@ -2435,7 +2435,7 @@ sub_80FE63C: @ 80FE63C lsls r0, 16 cmp r0, 0 beq _080FE676 - ldr r1, _080FE6E8 @ =gUnknown_3007450 + ldr r1, _080FE6E8 @ =gRfuSlotStatusNI ldrb r0, [r4, 0x10] lsls r0, 2 adds r0, r1 @@ -2481,7 +2481,7 @@ _080FE6B6: bne _080FE6DA strb r4, [r5, 0x5] strb r4, [r5, 0x4] - ldr r0, _080FE6EC @ =gUnknown_3007460 + ldr r0, _080FE6EC @ =gRfuLinkStatus ldr r0, [r0] ldrb r1, [r0, 0x2] ldrb r0, [r0, 0x3] @@ -2498,8 +2498,8 @@ _080FE6DA: .align 2, 0 _080FE6E0: .4byte 0x04000208 _080FE6E4: .4byte gUnknown_3005E10 -_080FE6E8: .4byte gUnknown_3007450 -_080FE6EC: .4byte gUnknown_3007460 +_080FE6E8: .4byte gRfuSlotStatusNI +_080FE6EC: .4byte gRfuLinkStatus thumb_func_end sub_80FE63C thumb_func_start sub_80FE6F0 @@ -2509,7 +2509,7 @@ sub_80FE6F0: @ 80FE6F0 ldrb r0, [r5, 0x4] cmp r0, 0xF bne _080FE73C - ldr r1, _080FE748 @ =gUnknown_3007450 + ldr r1, _080FE748 @ =gRfuSlotStatusNI ldrb r2, [r5, 0x10] lsls r0, r2, 2 adds r0, r1 @@ -2546,7 +2546,7 @@ _080FE73C: bx r0 .align 2, 0 _080FE744: .4byte gUnknown_3005E10 -_080FE748: .4byte gUnknown_3007450 +_080FE748: .4byte gRfuSlotStatusNI thumb_func_end sub_80FE6F0 thumb_func_start sub_80FE74C @@ -2585,7 +2585,7 @@ sub_80FE778: @ 80FE778 push {r5-r7} movs r6, 0 movs r5, 0 - ldr r1, _080FE7E4 @ =gUnknown_3007460 + ldr r1, _080FE7E4 @ =gRfuLinkStatus ldr r0, [r1] ldrb r0, [r0, 0x8] cmp r6, r0 @@ -2638,7 +2638,7 @@ _080FE7D4: pop {r1} bx r1 .align 2, 0 -_080FE7E4: .4byte gUnknown_3007460 +_080FE7E4: .4byte gRfuLinkStatus _080FE7E8: .4byte gUnknown_3005E10 _080FE7EC: .4byte 0x0000ffff thumb_func_end sub_80FE778 @@ -2690,14 +2690,14 @@ sub_80FE83C: @ 80FE83C push {r4-r7,lr} lsls r0, 24 lsrs r5, r0, 24 - ldr r0, _080FE908 @ =gUnknown_3007460 + ldr r0, _080FE908 @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0, 0x4] cmp r0, 0 beq _080FE884 movs r4, 0 _080FE84E: - ldr r1, _080FE90C @ =gUnknown_3007450 + ldr r1, _080FE90C @ =gRfuSlotStatusNI lsls r0, r4, 2 adds r0, r1 ldr r2, [r0] @@ -2725,14 +2725,14 @@ _080FE87A: cmp r4, 0x3 bls _080FE84E _080FE884: - ldr r0, _080FE908 @ =gUnknown_3007460 + ldr r0, _080FE908 @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0, 0x5] cmp r0, 0 beq _080FE8C2 movs r4, 0 _080FE890: - ldr r1, _080FE90C @ =gUnknown_3007450 + ldr r1, _080FE90C @ =gRfuSlotStatusNI lsls r0, r4, 2 adds r0, r1 ldr r2, [r0] @@ -2758,7 +2758,7 @@ _080FE8B8: cmp r4, 0x3 bls _080FE890 _080FE8C2: - ldr r0, _080FE908 @ =gUnknown_3007460 + ldr r0, _080FE908 @ =gRfuLinkStatus ldr r3, [r0] ldrb r2, [r3, 0x6] cmp r2, 0 @@ -2768,7 +2768,7 @@ _080FE8C2: ands r0, r2 strb r0, [r3, 0x6] movs r4, 0 - ldr r7, _080FE910 @ =gUnknown_3007440 + ldr r7, _080FE910 @ =gRfuSlotStatusUNI ldr r6, _080FE914 @ =0x00008024 _080FE8DA: lsls r0, r4, 2 @@ -2796,9 +2796,9 @@ _080FE900: pop {r0} bx r0 .align 2, 0 -_080FE908: .4byte gUnknown_3007460 -_080FE90C: .4byte gUnknown_3007450 -_080FE910: .4byte gUnknown_3007440 +_080FE908: .4byte gRfuLinkStatus +_080FE90C: .4byte gRfuSlotStatusNI +_080FE910: .4byte gRfuSlotStatusUNI _080FE914: .4byte 0x00008024 thumb_func_end sub_80FE83C @@ -2814,14 +2814,14 @@ sub_80FE918: @ 80FE918 ldrh r0, [r0, 0x18] cmp r0, 0 beq _080FE9F4 - ldr r0, _080FEA08 @ =gUnknown_3007460 + ldr r0, _080FEA08 @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0, 0x4] cmp r0, 0 beq _080FE9B8 movs r6, 0 _080FE938: - ldr r3, _080FEA0C @ =gUnknown_3007450 + ldr r3, _080FEA0C @ =gRfuSlotStatusNI lsls r2, r6, 2 adds r0, r2, r3 ldr r0, [r0] @@ -2889,14 +2889,14 @@ _080FE9AE: cmp r6, 0x3 bls _080FE938 _080FE9B8: - ldr r0, _080FEA08 @ =gUnknown_3007460 + ldr r0, _080FEA08 @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0, 0x5] cmp r0, 0 beq _080FE9F4 movs r6, 0 _080FE9C4: - ldr r1, _080FEA0C @ =gUnknown_3007450 + ldr r1, _080FEA0C @ =gRfuSlotStatusNI lsls r0, r6, 2 adds r0, r1 ldr r2, [r0] @@ -2931,8 +2931,8 @@ _080FE9F4: bx r0 .align 2, 0 _080FEA04: .4byte gUnknown_3005E10 -_080FEA08: .4byte gUnknown_3007460 -_080FEA0C: .4byte gUnknown_3007450 +_080FEA08: .4byte gRfuLinkStatus +_080FEA0C: .4byte gRfuSlotStatusNI thumb_func_end sub_80FE918 thumb_func_start sub_80FEA10 @@ -3002,7 +3002,7 @@ sub_80FEA78: @ 80FEA78 push {lr} lsls r0, 16 lsrs r2, r0, 16 - ldr r0, _080FEA94 @ =gUnknown_3007460 + ldr r0, _080FEA94 @ =gRfuLinkStatus ldr r0, [r0] ldrb r1, [r0, 0x4] ldrb r0, [r0, 0x5] @@ -3014,7 +3014,7 @@ sub_80FEA78: @ 80FEA78 movs r0, 0 b _080FEAAC .align 2, 0 -_080FEA94: .4byte gUnknown_3007460 +_080FEA94: .4byte gRfuLinkStatus _080FEA98: .4byte gUnknown_3005E10 _080FEA9C: ldr r1, _080FEAB0 @ =gUnknown_3005E10 diff --git a/asm/link_rfu_2.s b/asm/link_rfu_2.s index f37313210..2e3f89291 100644 --- a/asm/link_rfu_2.s +++ b/asm/link_rfu_2.s @@ -137,7 +137,7 @@ sub_80F86F4: @ 80F86F4 ldr r4, _080F8730 @ =gIntrTable + 0x4 adds r2, r4, 0 movs r3, 0x1 - bl sub_81E05B0 + bl rfu_initializeAPI lsls r0, 16 lsrs r1, r0, 16 cmp r1, 0 @@ -871,7 +871,7 @@ _080F8D2A: bge _080F8D2A bl rfu_REQ_recvData bl rfu_waitREQComplete - ldr r1, _080F8D94 @ =gUnknown_3007440 + ldr r1, _080F8D94 @ =gRfuSlotStatusUNI ldr r3, _080F8D90 @ =gUnknown_3005450 ldr r0, _080F8D98 @ =0x000008f6 adds r4, r3, r0 @@ -911,7 +911,7 @@ _080F8D84: bx r0 .align 2, 0 _080F8D90: .4byte gUnknown_3005450 -_080F8D94: .4byte gUnknown_3007440 +_080F8D94: .4byte gRfuSlotStatusUNI _080F8D98: .4byte 0x000008f6 _080F8D9C: .4byte 0x00000988 _080F8DA0: .4byte 0x000008f7 @@ -1074,7 +1074,7 @@ sub_80F8ECC: @ 80F8ECC ldrh r0, [r4, 0x4] cmp r0, 0x7 bne _080F8F08 - ldr r0, _080F8F00 @ =gUnknown_3007460 + ldr r0, _080F8F00 @ =gRfuLinkStatus ldr r1, [r0] ldr r2, _080F8F04 @ =0x000008f5 adds r0, r4, r2 @@ -1093,7 +1093,7 @@ sub_80F8ECC: @ 80F8ECC b _080F8F0A .align 2, 0 _080F8EFC: .4byte gUnknown_3005450 -_080F8F00: .4byte gUnknown_3007460 +_080F8F00: .4byte gRfuLinkStatus _080F8F04: .4byte 0x000008f5 _080F8F08: movs r0, 0 @@ -1363,7 +1363,7 @@ _080F90D8: .4byte 0x000008f2 thumb_func_start IsRfuRecvQueueEmpty IsRfuRecvQueueEmpty: @ 80F90DC push {r4,lr} - ldr r0, _080F90EC @ =gUnknown_3007460 + ldr r0, _080F90EC @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0, 0x6] cmp r0, 0 @@ -1372,7 +1372,7 @@ _080F90E8: movs r0, 0 b _080F9110 .align 2, 0 -_080F90EC: .4byte gUnknown_3007460 +_080F90EC: .4byte gRfuLinkStatus _080F90F0: movs r3, 0 ldr r4, _080F9118 @ =gRecvCmds @@ -1422,7 +1422,7 @@ _080F913C: strb r0, [r1] ldr r0, _080F919C @ =0x0000099a adds r1, r6, r0 - ldr r0, _080F91A0 @ =gUnknown_3007460 + ldr r0, _080F91A0 @ =gRfuLinkStatus ldr r0, [r0] ldrb r1, [r1] ldrb r0, [r0, 0x2] @@ -1460,7 +1460,7 @@ _080F913C: .align 2, 0 _080F9198: .4byte 0x00000993 _080F919C: .4byte 0x0000099a -_080F91A0: .4byte gUnknown_3007460 +_080F91A0: .4byte gRfuLinkStatus _080F91A4: .4byte 0x00000994 _080F91A8: .4byte 0x0000099b _080F91AC: .4byte 0x0000099c @@ -1815,7 +1815,7 @@ _080F947E: adds r0, r6, r1 ldrb r0, [r0] adds r1, r0, 0 - ldr r0, _080F94A0 @ =gUnknown_3007460 + ldr r0, _080F94A0 @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0, 0x6] cmp r0, 0 @@ -1826,7 +1826,7 @@ _080F947E: .align 2, 0 _080F9498: .4byte 0x00000994 _080F949C: .4byte gUnknown_3005450 -_080F94A0: .4byte gUnknown_3007460 +_080F94A0: .4byte gRfuLinkStatus _080F94A4: movs r0, 0 b _080F94AA @@ -1950,7 +1950,7 @@ _080F9538: ldrb r0, [r0] cmp r0, 0 beq _080F95E4 - ldr r0, _080F964C @ =gUnknown_3007460 + ldr r0, _080F964C @ =gRfuLinkStatus ldr r0, [r0] ldrb r1, [r0, 0x2] ldrb r0, [r0, 0x3] @@ -2042,7 +2042,7 @@ _080F963C: .4byte gRecvCmds _080F9640: .4byte gUnknown_3005E10 _080F9644: .4byte gUnknown_3005450 _080F9648: .4byte 0x0000099c -_080F964C: .4byte gUnknown_3007460 +_080F964C: .4byte gRfuLinkStatus _080F9650: .4byte gReceivedRemoteLinkPlayers _080F9654: .4byte 0x00000988 _080F9658: .4byte gSendCmd @@ -2435,7 +2435,7 @@ _080F9902: beq _080F9914 b _080F9C40 _080F9914: - ldr r0, _080F9944 @ =gUnknown_3007460 + ldr r0, _080F9944 @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0] mov r6, r8 @@ -2458,7 +2458,7 @@ _080F9924: .align 2, 0 _080F993C: .4byte gUnknown_3005450 _080F9940: .4byte gReceivedRemoteLinkPlayers -_080F9944: .4byte gUnknown_3007460 +_080F9944: .4byte gRfuLinkStatus _080F9948: .4byte gRecvCmds + 2 _080F994C: .4byte gRecvCmds + 4 _080F9950: .4byte gUnknown_3005DD6 @@ -2688,7 +2688,7 @@ _080F9B00: ldr r0, _080F9B54 @ =gRecvCmds + 2 adds r4, r5, r0 ldrh r1, [r4] - ldr r0, _080F9B58 @ =gUnknown_3007460 + ldr r0, _080F9B58 @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0, 0x2] ands r1, r0 @@ -2715,7 +2715,7 @@ _080F9B38: _080F9B4C: .4byte gUnknown_3005450 _080F9B50: .4byte gReceivedRemoteLinkPlayers _080F9B54: .4byte gRecvCmds + 2 -_080F9B58: .4byte gUnknown_3007460 +_080F9B58: .4byte gRfuLinkStatus _080F9B5C: .4byte gRecvCmds + 4 _080F9B60: .4byte 0x0000099c _080F9B64: .4byte gRecvCmds @@ -3502,7 +3502,7 @@ _080FA13C: .4byte gUnknown_3005450 thumb_func_start sub_80FA140 sub_80FA140: @ 80FA140 push {lr} - ldr r0, _080FA15C @ =gUnknown_3007460 + ldr r0, _080FA15C @ =gRfuLinkStatus ldr r0, [r0] ldrb r1, [r0, 0x2] ldrb r0, [r0, 0x3] @@ -3513,7 +3513,7 @@ sub_80FA140: @ 80FA140 pop {r0} bx r0 .align 2, 0 -_080FA15C: .4byte gUnknown_3007460 +_080FA15C: .4byte gRfuLinkStatus thumb_func_end sub_80FA140 thumb_func_start sub_80FA160 @@ -3552,7 +3552,7 @@ sub_80FA190: @ 80FA190 adds r1, r2, r0 movs r0, 0x1 strb r0, [r1] - ldr r0, _080FA1BC @ =gUnknown_3007460 + ldr r0, _080FA1BC @ =gRfuLinkStatus ldr r1, [r0] ldrb r0, [r1, 0x2] ldrb r1, [r1, 0x3] @@ -3565,7 +3565,7 @@ sub_80FA190: @ 80FA190 .align 2, 0 _080FA1B4: .4byte gUnknown_3005450 _080FA1B8: .4byte 0x0000099c -_080FA1BC: .4byte gUnknown_3007460 +_080FA1BC: .4byte gRfuLinkStatus _080FA1C0: .4byte 0x0000099b thumb_func_end sub_80FA190 @@ -4065,7 +4065,7 @@ _080FA53A: lsrs r0, 24 cmp r0, 0x1 bls _080FA5C2 - ldr r1, _080FA5A0 @ =gUnknown_3007450 + ldr r1, _080FA5A0 @ =gRfuSlotStatusNI lsls r0, r5, 2 adds r0, r1 ldr r0, [r0] @@ -4103,7 +4103,7 @@ _080FA55E: _080FA594: .4byte gUnknown_3005450 _080FA598: .4byte 0x000008f6 _080FA59C: .4byte 0x00000989 -_080FA5A0: .4byte gUnknown_3007450 +_080FA5A0: .4byte gRfuSlotStatusNI _080FA5A4: .4byte 0x0000098d _080FA5A8: mov r2, r8 @@ -4300,7 +4300,7 @@ sub_80FA6FC: @ 80FA6FC movs r0, 0x2 b _080FA732 _080FA718: - ldr r1, _080FA72C @ =gUnknown_3007450 + ldr r1, _080FA72C @ =gRfuSlotStatusNI lsls r0, 2 adds r0, r1 ldr r0, [r0] @@ -4310,7 +4310,7 @@ _080FA718: movs r0, 0 b _080FA732 .align 2, 0 -_080FA72C: .4byte gUnknown_3007450 +_080FA72C: .4byte gRfuSlotStatusNI _080FA730: movs r0, 0x1 _080FA732: @@ -4327,7 +4327,7 @@ sub_80FA738: @ 80FA738 ldr r1, _080FA780 @ =0x0000098d adds r5, r0, r1 _080FA746: - ldr r1, _080FA784 @ =gUnknown_3007450 + ldr r1, _080FA784 @ =gRfuSlotStatusNI lsls r0, r4, 2 adds r0, r1 ldr r0, [r0] @@ -4358,7 +4358,7 @@ _080FA770: .align 2, 0 _080FA77C: .4byte gUnknown_3005450 _080FA780: .4byte 0x0000098d -_080FA784: .4byte gUnknown_3007450 +_080FA784: .4byte gRfuSlotStatusNI thumb_func_end sub_80FA738 thumb_func_start sub_80FA788 @@ -4371,7 +4371,7 @@ sub_80FA788: @ 80FA788 ldrb r0, [r0] cmp r0, 0x8 bne _080FA7C2 - ldr r2, _080FA808 @ =gUnknown_3007450 + ldr r2, _080FA808 @ =gRfuSlotStatusNI ldr r0, _080FA80C @ =0x000008f6 adds r1, r0 ldrb r0, [r1] @@ -4393,7 +4393,7 @@ _080FA7BA: movs r0, 0x4 bl rfu_clearSlot _080FA7C2: - ldr r2, _080FA808 @ =gUnknown_3007450 + ldr r2, _080FA808 @ =gRfuSlotStatusNI ldr r5, _080FA800 @ =gUnknown_3005450 ldr r0, _080FA80C @ =0x000008f6 adds r1, r5, r0 @@ -4425,7 +4425,7 @@ _080FA7E6: .align 2, 0 _080FA800: .4byte gUnknown_3005450 _080FA804: .4byte 0x0000093d -_080FA808: .4byte gUnknown_3007450 +_080FA808: .4byte gRfuSlotStatusNI _080FA80C: .4byte 0x000008f6 _080FA810: .4byte 0x0000093e _080FA814: @@ -5772,7 +5772,7 @@ _080FB21E: ands r0, r1 cmp r0, 0 beq _080FB286 - ldr r0, _080FB274 @ =gUnknown_3007460 + ldr r0, _080FB274 @ =gRfuLinkStatus lsls r1, r5, 5 adds r1, 0x14 ldr r0, [r0] @@ -5803,7 +5803,7 @@ _080FB21E: _080FB268: .4byte gUnknown_3005E10 _080FB26C: .4byte gUnknown_3005450 _080FB270: .4byte 0x0000098d -_080FB274: .4byte gUnknown_3007460 +_080FB274: .4byte gRfuLinkStatus _080FB278: .4byte 0x00000989 _080FB27C: mov r0, r8 @@ -6216,7 +6216,7 @@ sub_80FB5A0: @ 80FB5A0 movs r3, 0 movs r2, 0 movs r4, 0x1 - ldr r6, _080FB5E8 @ =gUnknown_3007460 + ldr r6, _080FB5E8 @ =gRfuLinkStatus movs r7, 0x7F _080FB5AE: adds r0, r5, 0 @@ -6249,7 +6249,7 @@ _080FB5D4: pop {r1} bx r1 .align 2, 0 -_080FB5E8: .4byte gUnknown_3007460 +_080FB5E8: .4byte gRfuLinkStatus thumb_func_end sub_80FB5A0 thumb_func_start sub_80FB5EC @@ -6601,7 +6601,7 @@ _080FB894: adds r1, 0xF0 movs r0, 0x3 strb r0, [r1] - ldr r0, _080FB8B8 @ =gUnknown_3007460 + ldr r0, _080FB8B8 @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0] cmp r0, 0 @@ -6615,7 +6615,7 @@ _080FB8AA: b _080FB9C0 .align 2, 0 _080FB8B4: .4byte gUnknown_3005450 -_080FB8B8: .4byte gUnknown_3007460 +_080FB8B8: .4byte gRfuLinkStatus _080FB8BC: .4byte 0x000008f4 _080FB8C0: ldr r0, _080FB900 @ =gUnknown_3005450 @@ -6674,7 +6674,7 @@ _080FB916: movs r0, 0 bl sub_80FD760 _080FB934: - ldr r0, _080FB96C @ =gUnknown_3007460 + ldr r0, _080FB96C @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0] cmp r0, 0xFF @@ -6700,7 +6700,7 @@ _080FB95A: .align 2, 0 _080FB964: .4byte 0x0000099c _080FB968: .4byte gReceivedRemoteLinkPlayers -_080FB96C: .4byte gUnknown_3007460 +_080FB96C: .4byte gRfuLinkStatus _080FB970: .4byte gUnknown_3005E10 _080FB974: .4byte sub_80F8B34 _080FB978: .4byte gUnknown_3005450 @@ -7108,7 +7108,7 @@ sub_80FBC70: @ 80FBC70 movs r0, 0xFF mov r9, r0 movs r7, 0 - ldr r1, _080FBCF4 @ =gUnknown_3007460 + ldr r1, _080FBCF4 @ =gRfuLinkStatus mov r8, r1 _080FBC8E: lsls r4, r7, 5 @@ -7162,7 +7162,7 @@ _080FBCE2: pop {r1} bx r1 .align 2, 0 -_080FBCF4: .4byte gUnknown_3007460 +_080FBCF4: .4byte gRfuLinkStatus thumb_func_end sub_80FBC70 thumb_func_start sub_80FBCF8 @@ -7391,7 +7391,7 @@ sub_80FBE80: @ 80FBE80 lsrs r2, r0, 24 cmp r2, 0xFF beq _080FBF18 - ldr r0, _080FBEDC @ =gUnknown_3007460 + ldr r0, _080FBEDC @ =gRfuLinkStatus ldr r0, [r0] lsls r1, r2, 5 adds r0, r1 @@ -7408,7 +7408,7 @@ sub_80FBE80: @ 80FBE80 b _080FBF10 .align 2, 0 _080FBED8: .4byte gTasks+0x8 -_080FBEDC: .4byte gUnknown_3007460 +_080FBEDC: .4byte gRfuLinkStatus _080FBEE0: .4byte gUnknown_3005450 _080FBEE4: .4byte 0x000008f5 _080FBEE8: @@ -7638,7 +7638,7 @@ _080FC070: beq _080FC108 movs r1, 0xA ldrsh r0, [r4, r1] - ldr r7, _080FC0F4 @ =gUnknown_3007460 + ldr r7, _080FC0F4 @ =gRfuLinkStatus lsls r4, r2, 5 adds r2, r4, 0 adds r2, 0x14 @@ -7670,7 +7670,7 @@ _080FC0E4: .4byte gTasks _080FC0E8: .4byte 0x00000985 _080FC0EC: .4byte gUnknown_3005E10 _080FC0F0: .4byte 0x00000119 -_080FC0F4: .4byte gUnknown_3007460 +_080FC0F4: .4byte gRfuLinkStatus _080FC0F8: movs r1, 0xE0 lsls r1, 7 @@ -7845,7 +7845,7 @@ sub_80FC228: @ 80FC228 movs r2, 0x13 movs r3, 0x2 bl nullsub_88 - ldr r4, _080FC2F8 @ =gUnknown_3007460 + ldr r4, _080FC2F8 @ =gRfuLinkStatus ldr r0, [r4] ldrb r0, [r0, 0x2] movs r1, 0x14 @@ -7934,7 +7934,7 @@ _080FC2CE: bl nullsub_87 b _080FC436 .align 2, 0 -_080FC2F8: .4byte gUnknown_3007460 +_080FC2F8: .4byte gRfuLinkStatus _080FC2FC: .4byte gUnknown_3005450 _080FC300: .4byte gUnknown_843EE64 _080FC304: @@ -7969,7 +7969,7 @@ _080FC318: adds r6, 0x1 cmp r6, 0x3 ble _080FC318 - ldr r5, _080FC394 @ =gUnknown_3007460 + ldr r5, _080FC394 @ =gRfuLinkStatus ldr r1, [r5] ldr r4, _080FC398 @ =gUnknown_3005450 ldr r0, _080FC39C @ =0x000008f6 @@ -8004,12 +8004,12 @@ _080FC318: .align 2, 0 _080FC38C: .4byte gUnknown_843EE47 _080FC390: .4byte gUnknown_843EE57 -_080FC394: .4byte gUnknown_3007460 +_080FC394: .4byte gRfuLinkStatus _080FC398: .4byte gUnknown_3005450 _080FC39C: .4byte 0x000008f6 _080FC3A0: movs r6, 0 - ldr r1, _080FC440 @ =gUnknown_3007460 + ldr r1, _080FC440 @ =gRfuLinkStatus ldr r0, [r1] ldrb r0, [r0, 0x8] cmp r6, r0 @@ -8088,7 +8088,7 @@ _080FC436: pop {r0} bx r0 .align 2, 0 -_080FC440: .4byte gUnknown_3007460 +_080FC440: .4byte gRfuLinkStatus _080FC444: .4byte gUnknown_843EE47 _080FC448: .4byte gUnknown_843EE57 thumb_func_end sub_80FC228 @@ -9032,7 +9032,7 @@ sub_80FCADC: @ 80FCADC lsls r0, 24 lsrs r5, r0, 24 movs r6, 0 - ldr r0, _080FCB04 @ =gUnknown_3007460 + ldr r0, _080FCB04 @ =gRfuLinkStatus ldr r4, [r0] ldrb r2, [r4, 0x2] ldrb r1, [r4] @@ -9048,7 +9048,7 @@ sub_80FCADC: @ 80FCADC ldrb r0, [r4, 0xA] b _080FCB4C .align 2, 0 -_080FCB04: .4byte gUnknown_3007460 +_080FCB04: .4byte gRfuLinkStatus _080FCB08: adds r0, r6, 0x1 lsls r0, 24 @@ -9234,7 +9234,7 @@ sub_80FCC3C: @ 80FCC3C bne _080FCC98 movs r0, 0x1 mov r9, r0 - ldr r6, _080FCC94 @ =gUnknown_3007460 + ldr r6, _080FCC94 @ =gRfuLinkStatus ldr r0, [r6] lsls r4, r5, 5 adds r0, r4 @@ -9261,11 +9261,11 @@ _080FCC78: b _080FCCE4 .align 2, 0 _080FCC90: .4byte gUnknown_3005E10 -_080FCC94: .4byte gUnknown_3007460 +_080FCC94: .4byte gRfuLinkStatus _080FCC98: movs r0, 0 mov r9, r0 - ldr r6, _080FCCCC @ =gUnknown_3007460 + ldr r6, _080FCCCC @ =gRfuLinkStatus ldr r0, [r6] lsls r4, r5, 5 adds r0, r4 @@ -9288,7 +9288,7 @@ _080FCCB0: bl memcpy b _080FCCE4 .align 2, 0 -_080FCCCC: .4byte gUnknown_3007460 +_080FCCCC: .4byte gRfuLinkStatus _080FCCD0: adds r0, r7, 0 movs r1, 0 @@ -9315,7 +9315,7 @@ sub_80FCCF4: @ 80FCCF4 adds r5, r1, 0 lsls r2, 24 movs r7, 0 - ldr r6, _080FCD2C @ =gUnknown_3007460 + ldr r6, _080FCD2C @ =gRfuLinkStatus ldr r0, [r6] lsrs r4, r2, 19 adds r2, r0, r4 @@ -9337,7 +9337,7 @@ sub_80FCCF4: @ 80FCCF4 movs r7, 0x1 b _080FCD48 .align 2, 0 -_080FCD2C: .4byte gUnknown_3007460 +_080FCD2C: .4byte gRfuLinkStatus _080FCD30: .4byte 0x00007f7d _080FCD34: adds r0, r3, 0 @@ -9388,7 +9388,7 @@ CreateWirelessStatusIndicatorSprite: @ 80FCD74 movs r3, 0xE7 movs r2, 0x8 _080FCD8A: - ldr r0, _080FCDCC @ =gUnknown_3007460 + ldr r0, _080FCDCC @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0] cmp r0, 0x1 @@ -9420,7 +9420,7 @@ _080FCD8A: strb r5, [r0] b _080FCE2A .align 2, 0 -_080FCDCC: .4byte gUnknown_3007460 +_080FCDCC: .4byte gRfuLinkStatus _080FCDD0: .4byte gUnknown_843F284 _080FCDD4: .4byte gSprites _080FCDD8: .4byte 0x00001234 @@ -9551,7 +9551,7 @@ _080FCEE0: .4byte gUnknown_203ACE4 thumb_func_start sub_80FCEE4 sub_80FCEE4: @ 80FCEE4 push {r4,lr} - ldr r1, _080FCF04 @ =gUnknown_3007460 + ldr r1, _080FCF04 @ =gRfuLinkStatus ldr r0, [r1] ldrb r2, [r0, 0x2] movs r3, 0 @@ -9567,7 +9567,7 @@ _080FCEF0: ldrb r0, [r0] b _080FCF16 .align 2, 0 -_080FCF04: .4byte gUnknown_3007460 +_080FCF04: .4byte gRfuLinkStatus _080FCF08: lsrs r2, 1 adds r0, r3, 0x1 @@ -9626,7 +9626,7 @@ _080FCF5C: adds r6, r2, 0 movs r5, 0xFF movs r4, 0 - ldr r0, _080FCF84 @ =gUnknown_3007460 + ldr r0, _080FCF84 @ =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0] cmp r0, 0x1 @@ -9641,7 +9641,7 @@ _080FCF5C: _080FCF78: .4byte gUnknown_203ACE4 _080FCF7C: .4byte gSprites _080FCF80: .4byte 0x00001234 -_080FCF84: .4byte gUnknown_3007460 +_080FCF84: .4byte gRfuLinkStatus _080FCF88: adds r0, r4, 0x1 lsls r0, 24 diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s index 3b76df047..1f47f7214 100644 --- a/asm/link_rfu_3.s +++ b/asm/link_rfu_3.s @@ -10493,7 +10493,7 @@ _0811AFF8: _0811AFFA: cmp r4, 0x3 bgt _0811B030 - ldr r0, _0811B044 @ =gUnknown_3007460 + ldr r0, _0811B044 @ =gRfuLinkStatus ldr r0, [r0] lsls r1, r4, 5 adds r0, r1 @@ -10526,7 +10526,7 @@ _0811B030: bl StringCopy b _0811B080 .align 2, 0 -_0811B044: .4byte gUnknown_3007460 +_0811B044: .4byte gRfuLinkStatus _0811B048: .4byte gSpeciesNames _0811B04C: .4byte gUnknown_8457DB8 _0811B050: diff --git a/include/librfu.h b/include/librfu.h index 69f0bb695..5eb9fd7a0 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -76,9 +76,9 @@ struct UnkLinkRfuStruct_02022B14Substruct u16 unk_00_4:1; u16 unk_00_5:1; u16 unk_00_6:1; - u16 unk_00_7:1; - u16 unk_01_0:1; - u16 unk_01_1:1; + u16 isChampion:1; + u16 hasNationalDex:1; + u16 gameClear:1; u16 unk_01_2:4; u16 unk_01_6:2; u8 playerTrainerId[2]; @@ -93,36 +93,35 @@ struct __attribute__((packed, aligned(2))) UnkLinkRfuStruct_02022B14 u8 unk_0a_0:7; u8 unk_0a_7:1; u8 playerGender:1; - u8 unk_0b_1:7; + u8 level:7; u8 unk_0c; }; struct RfuStruct { - vs32 unk_0; - u8 txParams; - u8 unk_5; - u8 activeCommand; - u8 unk_7; - u8 unk_8; - u8 unk_9; + vs32 state; + u8 reqLength; + u8 reqNext; + u8 reqActiveCommand; + u8 ackLength; + u8 ackNext; + u8 ackActiveCommand; u8 timerSelect; u8 unk_b; - int timerState; + s32 timerState; vu8 timerActive; u8 unk_11; - vu16 unk_12; + vu16 error; vu8 msMode; - u8 unk_15; + u8 recoveryCount; u8 unk_16; u8 unk_17; void (*callbackM)(); void (*callbackS)(); - u32 callbackID; - union RfuPacket * txPacket; - union RfuPacket * rxPacket; + u32 callbackId; + union RfuPacket *txPacket; + union RfuPacket *rxPacket; vu8 unk_2c; - u8 padding[3]; }; struct RfuIntrStruct @@ -133,90 +132,149 @@ struct RfuIntrStruct u8 block2[0x30]; }; -struct RfuUnk1 +struct RfuSlotStatusUNI { - u16 unk_0; - u8 unk_2; - u8 unk_3; - u8 fill_4[14]; - u8 unk_12; - u32 unk_14; - u32 unk_18; - struct RfuIntrStruct unk_1c; + u16 sendState; + u8 dataReadyFlag; + u8 bmSlot; + u16 payloadSize; + void *src; // TODO: is it correct? + u16 recvState; + u16 errorCode; + u16 dataSize; + u8 newDataFlag; + u8 dataBlockFlag; + void *recvBuffer; + u32 recvBuffSize; }; -struct RfuUnk2 +struct NIComm { - u16 unk_0; - u16 unk_2; - u8 fill_4[0x16]; - u8 unk_1a; - u8 fill_1b[0x19]; - u16 unk_34; - u16 unk_36; - u8 fill_38[0x16]; - u8 unk_4e; - u8 fill_4f[0x12]; - u8 unk_61; - u8 fill_62[6]; - void *unk_68; - void *unk_6c; - u8 unk_70[0x70]; + u16 state; + u16 failCounter; + u32 nowP[4]; // ??? + u32 remainSize; + u16 errorCode; + u8 bmSlot; + u8 unk_1b; + u8 recvAckFlag[4]; + u8 ack; + u8 phase; + u8 n[4]; // ??? + void *src; + u8 bmSlotOrg; + u8 dataType; + u16 payloadSize; + u32 dataSize; }; -struct RfuUnk3 +struct RfuSlotStatusNI { - u32 unk_0; - u32 unk_4; - u8 unk_8[0xD4]; - u32 unk_dc; + struct NIComm send; + struct NIComm recv; + void *recvBuffer; + void *recvBufferSize; }; -struct RfuUnk5Sub +struct RfuFixed { - u16 unk_00; - u8 unk_02; - u16 unk_04; - struct UnkLinkRfuStruct_02022B14 unk_06; - u8 fill_13[1]; - u8 playerName[PLAYER_NAME_LENGTH + 1]; + void *reqCallback; + void *fastCopyPtr; + u16 fastCopyBuffer[24]; + u32 fastCopyBuffer2[12]; + u32 LLFBuffer[29]; + u8 *STWIBuffer; }; -struct RfuUnk5 +struct RfuStatic { - u8 unk_00; - u8 unk_01; - u8 unk_02; - u8 unk_03; - u8 unk_04; - u8 unk_05; - u8 unk_06; - u8 unk_07; - u8 unk_08; - u8 filler_09[1]; - u8 unk_0a[4]; - u8 filler_0e[6]; - struct RfuUnk5Sub unk_14[4]; + u8 flags; + u8 NIEndRecvFlag; + u8 RecvRenewalFlag; + u8 commExistFlag; + u8 recvErrorFlag; + u8 recoveryBmSlot; + u8 nowWatchInterval; + u8 nullFrameCount; + u8 emberCount; + u8 SCStartFlag; + u8 linkEmergencyFlag[4]; + u8 lsFixedCount[4]; + u16 cidBak[4]; + u16 unk_1a; + u16 reqResult; + u16 tryPid; + u32 watchdogTimer; + u32 totalPacketSize; }; -extern struct RfuStruct * gRfuState; +struct RfuTgtData +{ + u16 id; + u8 slot; + u8 multibootFlag; + u16 serialNum; + u8 gname[15]; + u8 uname[9]; +}; -extern struct RfuUnk5 * gUnknown_3007460; -extern u32 *gUnknown_3007464; -extern struct RfuUnk3 * gUnknown_3007468; -extern struct RfuUnk2 * gUnknown_3007450[4]; -extern struct RfuUnk1 * gUnknown_3007440[4]; -extern struct { +struct RfuLinkStatus +{ + u8 connMode; + u8 connCount; + u8 connSlotFlag; + u8 linkLossSlotFlag; + u8 sendSlotNIFlag; + u8 recvSlotNIFlag; + u8 sendSlotUNIFlag; + u8 getNameFlag; + u8 findParentCount; + u8 watchInterval; + u8 stength[4]; + u8 LLFReadyFlag; + u8 remainLLFrameSizeParent; + u8 remainLLFrameSizeChild[4]; + struct RfuTgtData partner[4]; + struct RfuTgtData my; +}; + +struct Unk_3007470 +{ u8 unk0; u8 unk1; u16 unk2; u16 unk4; u8 fill6[4]; u16 unkA; -} gUnknown_3007470; +}; + +struct STWIStruct +{ + // TODO: resolve the struct + u8 unk_0[232]; + u8 function[2400]; + struct RfuStruct STWIStatus; +}; + +struct Unk_3001190 +{ + struct RfuLinkStatus linkStatus; + struct RfuStatic static_; + struct RfuFixed fixed; + struct RfuSlotStatusNI NI[4]; + struct RfuSlotStatusUNI UNI[4]; + struct STWIStruct STWI; +}; -extern void rfu_STC_clearAPIVariables(void); +extern struct RfuStruct *gRfuState; +extern struct RfuLinkStatus *gRfuLinkStatus; +extern struct RfuStatic *gRfuStatic; +extern struct RfuFixed *gRfuFixed; +extern struct RfuSlotStatusNI *gRfuSlotStatusNI[4]; +extern struct RfuSlotStatusUNI *gRfuSlotStatusUNI[4]; +extern struct Unk_3007470 gUnknown_3007470; +void rfu_STC_clearAPIVariables(void); void STWI_init_all(struct RfuIntrStruct * interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam); void rfu_REQ_stopMode(void); void rfu_waitREQComplete(void); diff --git a/src/trade.c b/src/trade.c index 2f48928ec..10ed51d69 100644 --- a/src/trade.c +++ b/src/trade.c @@ -2765,10 +2765,10 @@ static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isObedientBitSet) int GetUnionRoomTradeMessageId(struct UnkLinkRfuStruct_02022B14Substruct a0, struct UnkLinkRfuStruct_02022B14Substruct a1, u16 species1, u16 species2, u8 type, u16 species3, u8 isObedientBitSet) { - u8 r9 = a0.unk_01_0; - u8 r4 = a0.unk_00_7; - u8 r10 = a1.unk_01_0; - u8 r0 = a1.unk_00_7; + u8 r9 = a0.hasNationalDex; + u8 r4 = a0.isChampion; + u8 r10 = a1.hasNationalDex; + u8 r0 = a1.isChampion; u8 r1 = a1.unk_01_2; u8 r2; @@ -2845,7 +2845,7 @@ int GetUnionRoomTradeMessageId(struct UnkLinkRfuStruct_02022B14Substruct a0, str int CanRegisterMonForTradingBoard(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 species, u16 a2, u8 a3) { - u8 canTradeEggAndNational = a0.unk_01_0; + u8 canTradeEggAndNational = a0.hasNationalDex; if (IsDeoxysOrMewUntradable(a2, a3)) { diff --git a/sym_common.txt b/sym_common.txt index b41ec5ff2..e72f9a03c 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -163,19 +163,19 @@ gUnknown_3005E94: @ 3005E94 gRfuState: @ 3007438 .space 0x8 -gUnknown_3007440: @ 3007440 +gRfuSlotStatusUNI: @ 3007440 .space 0x10 -gUnknown_3007450: @ 3007450 +gRfuSlotStatusNI: @ 3007450 .space 0x10 -gUnknown_3007460: @ 3007460 +gRfuLinkStatus: @ 3007460 .space 0x4 -gUnknown_3007464: @ 3007464 +gRfuStatic: @ 3007464 .space 0x4 -gUnknown_3007468: @ 3007468 +gRfuFixed: @ 3007468 .space 0x8 gUnknown_3007470: @ 3007470 -- cgit v1.2.3 From 8f1a8972c19f5cd2522c9e7982bd330ac05305e9 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Fri, 27 Dec 2019 05:17:41 +0800 Subject: librfu_stwi Co-authored-by: Max Thomas --- asm/librfu_stwi.s | 1560 -------------------------------------------------- include/gba/io_reg.h | 6 + include/gba/macro.h | 12 +- include/librfu.h | 67 ++- ld_script.txt | 2 +- src/librfu_stwi.c | 645 +++++++++++++++++++++ 6 files changed, 715 insertions(+), 1577 deletions(-) delete mode 100644 asm/librfu_stwi.s create mode 100644 src/librfu_stwi.c diff --git a/asm/librfu_stwi.s b/asm/librfu_stwi.s deleted file mode 100644 index 5434d037f..000000000 --- a/asm/librfu_stwi.s +++ /dev/null @@ -1,1560 +0,0 @@ - .include "constants/gba_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start STWI_init_all -STWI_init_all: @ 81DF114 - push {r4,lr} - adds r3, r0, 0 - lsls r2, 24 - lsrs r2, 24 - cmp r2, 0x1 - bne _081DF150 - adds r2, r3, 0 - adds r2, 0xE8 - str r2, [r1] - ldr r1, _081DF13C @ =0x040000d4 - ldr r0, _081DF140 @ =IntrSIO32 - str r0, [r1] - str r2, [r1, 0x4] - ldr r0, _081DF144 @ =0x800004b0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - ldr r1, _081DF148 @ =gRfuState - ldr r2, _081DF14C @ =0x00000a48 - adds r0, r3, r2 - b _081DF15A - .align 2, 0 -_081DF13C: .4byte 0x040000d4 -_081DF140: .4byte IntrSIO32 -_081DF144: .4byte 0x800004b0 -_081DF148: .4byte gRfuState -_081DF14C: .4byte 0x00000a48 -_081DF150: - ldr r0, _081DF1D4 @ =IntrSIO32 - str r0, [r1] - ldr r1, _081DF1D8 @ =gRfuState - adds r0, r3, 0 - adds r0, 0xE8 -_081DF15A: - str r0, [r1] - adds r2, r1, 0 - ldr r1, [r2] - str r3, [r1, 0x28] - adds r0, r3, 0 - adds r0, 0x74 - str r0, [r1, 0x24] - ldrb r0, [r1, 0x14] - movs r4, 0 - movs r0, 0x1 - strb r0, [r1, 0x14] - ldr r0, [r2] - str r4, [r0] - strb r4, [r0, 0x4] - ldr r0, [r2] - strb r4, [r0, 0x5] - ldr r0, [r2] - strb r4, [r0, 0x7] - ldr r0, [r2] - strb r4, [r0, 0x8] - ldr r0, [r2] - strb r4, [r0, 0x9] - ldr r0, [r2] - str r4, [r0, 0xC] - ldrb r1, [r0, 0x10] - strb r4, [r0, 0x10] - ldr r0, [r2] - ldrh r1, [r0, 0x12] - movs r1, 0 - strh r4, [r0, 0x12] - strb r1, [r0, 0x15] - ldr r0, [r2] - adds r0, 0x2C - ldrb r2, [r0] - strb r1, [r0] - ldr r1, _081DF1DC @ =0x04000134 - movs r2, 0x80 - lsls r2, 1 - adds r0, r2, 0 - strh r0, [r1] - subs r1, 0xC - ldr r2, _081DF1E0 @ =0x00005003 - adds r0, r2, 0 - strh r0, [r1] - bl STWI_init_Callback_M - bl STWI_init_Callback_S - ldr r3, _081DF1E4 @ =0x04000208 - ldrh r2, [r3] - strh r4, [r3] - ldr r4, _081DF1E8 @ =0x04000200 - ldrh r0, [r4] - movs r1, 0x80 - orrs r0, r1 - strh r0, [r4] - strh r2, [r3] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081DF1D4: .4byte IntrSIO32 -_081DF1D8: .4byte gRfuState -_081DF1DC: .4byte 0x04000134 -_081DF1E0: .4byte 0x00005003 -_081DF1E4: .4byte 0x04000208 -_081DF1E8: .4byte 0x04000200 - thumb_func_end STWI_init_all - - thumb_func_start STWI_init_timer -STWI_init_timer: @ 81DF1EC - push {r4,r5,lr} - ldr r2, _081DF218 @ =STWI_intr_timer - str r2, [r0] - ldr r5, _081DF21C @ =gRfuState - ldr r0, [r5] - movs r4, 0 - strb r1, [r0, 0xA] - ldr r3, _081DF220 @ =0x04000208 - ldrh r2, [r3] - strh r4, [r3] - ldr r4, _081DF224 @ =0x04000200 - ldr r1, [r5] - movs r0, 0x8 - ldrb r1, [r1, 0xA] - lsls r0, r1 - ldrh r1, [r4] - orrs r0, r1 - strh r0, [r4] - strh r2, [r3] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081DF218: .4byte STWI_intr_timer -_081DF21C: .4byte gRfuState -_081DF220: .4byte 0x04000208 -_081DF224: .4byte 0x04000200 - thumb_func_end STWI_init_timer - - thumb_func_start AgbRFU_SoftReset -AgbRFU_SoftReset: @ 81DF228 - push {r4,r5,lr} - ldr r5, _081DF2C0 @ =0x04000134 - movs r1, 0x80 - lsls r1, 8 - adds r0, r1, 0 - strh r0, [r5] - ldr r2, _081DF2C4 @ =0x000080a0 - adds r0, r2, 0 - strh r0, [r5] - ldr r1, _081DF2C8 @ =gRfuState - ldr r0, [r1] - ldrb r0, [r0, 0xA] - lsls r0, 2 - ldr r3, _081DF2CC @ =0x04000100 - adds r2, r0, r3 - ldr r4, _081DF2D0 @ =0x04000102 - adds r3, r0, r4 - movs r0, 0 - strh r0, [r3] - strh r0, [r2] - movs r0, 0x83 - strh r0, [r3] - ldrh r0, [r2] - adds r4, r1, 0 - cmp r0, 0x11 - bhi _081DF268 - ldr r0, _081DF2D4 @ =0x000080a2 - adds r1, r0, 0 -_081DF260: - strh r1, [r5] - ldrh r0, [r2] - cmp r0, 0x11 - bls _081DF260 -_081DF268: - movs r0, 0x3 - strh r0, [r3] - ldr r1, _081DF2C0 @ =0x04000134 - ldr r2, _081DF2C4 @ =0x000080a0 - adds r0, r2, 0 - strh r0, [r1] - subs r1, 0xC - ldr r3, _081DF2D8 @ =0x00005003 - adds r0, r3, 0 - strh r0, [r1] - ldr r0, [r4] - movs r2, 0 - str r2, [r0] - strb r2, [r0, 0x4] - ldr r0, [r4] - strb r2, [r0, 0x5] - ldr r0, [r4] - strb r2, [r0, 0x6] - ldr r0, [r4] - strb r2, [r0, 0x7] - ldr r0, [r4] - strb r2, [r0, 0x8] - ldr r0, [r4] - strb r2, [r0, 0x9] - ldr r0, [r4] - str r2, [r0, 0xC] - ldrb r1, [r0, 0x10] - strb r2, [r0, 0x10] - ldr r1, [r4] - ldrh r0, [r1, 0x12] - movs r3, 0 - strh r2, [r1, 0x12] - ldrb r0, [r1, 0x14] - movs r0, 0x1 - strb r0, [r1, 0x14] - ldr r0, [r4] - strb r3, [r0, 0x15] - ldr r0, [r4] - adds r0, 0x2C - ldrb r1, [r0] - strb r3, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081DF2C0: .4byte 0x04000134 -_081DF2C4: .4byte 0x000080a0 -_081DF2C8: .4byte gRfuState -_081DF2CC: .4byte 0x04000100 -_081DF2D0: .4byte 0x04000102 -_081DF2D4: .4byte 0x000080a2 -_081DF2D8: .4byte 0x00005003 - thumb_func_end AgbRFU_SoftReset - - thumb_func_start STWI_set_MS_mode -STWI_set_MS_mode: @ 81DF2DC - lsls r0, 24 - lsrs r0, 24 - ldr r1, _081DF2EC @ =gRfuState - ldr r1, [r1] - ldrb r2, [r1, 0x14] - strb r0, [r1, 0x14] - bx lr - .align 2, 0 -_081DF2EC: .4byte gRfuState - thumb_func_end STWI_set_MS_mode - - thumb_func_start STWI_read_status -STWI_read_status: @ 81DF2F0 - push {lr} - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - cmp r0, 0x1 - beq _081DF31C - cmp r0, 0x1 - bgt _081DF306 - cmp r0, 0 - beq _081DF310 - b _081DF344 -_081DF306: - cmp r1, 0x2 - beq _081DF328 - cmp r1, 0x3 - beq _081DF338 - b _081DF344 -_081DF310: - ldr r0, _081DF318 @ =gRfuState - ldr r0, [r0] - ldrh r0, [r0, 0x12] - b _081DF346 - .align 2, 0 -_081DF318: .4byte gRfuState -_081DF31C: - ldr r0, _081DF324 @ =gRfuState - ldr r0, [r0] - ldrb r0, [r0, 0x14] - b _081DF346 - .align 2, 0 -_081DF324: .4byte gRfuState -_081DF328: - ldr r0, _081DF334 @ =gRfuState - ldr r0, [r0] - ldr r0, [r0] - lsls r0, 16 - lsrs r0, 16 - b _081DF346 - .align 2, 0 -_081DF334: .4byte gRfuState -_081DF338: - ldr r0, _081DF340 @ =gRfuState - ldr r0, [r0] - ldrb r0, [r0, 0x6] - b _081DF346 - .align 2, 0 -_081DF340: .4byte gRfuState -_081DF344: - ldr r0, _081DF34C @ =0x0000ffff -_081DF346: - pop {r1} - bx r1 - .align 2, 0 -_081DF34C: .4byte 0x0000ffff - thumb_func_end STWI_read_status - - thumb_func_start STWI_init_Callback_M -STWI_init_Callback_M: @ 81DF350 - push {lr} - movs r0, 0 - bl STWI_set_Callback_M - pop {r0} - bx r0 - thumb_func_end STWI_init_Callback_M - - thumb_func_start STWI_init_Callback_S -STWI_init_Callback_S: @ 81DF35C - push {lr} - movs r0, 0 - bl STWI_set_Callback_S - pop {r0} - bx r0 - thumb_func_end STWI_init_Callback_S - - thumb_func_start STWI_set_Callback_M -STWI_set_Callback_M: @ 81DF368 - ldr r1, _081DF370 @ =gRfuState - ldr r1, [r1] - str r0, [r1, 0x18] - bx lr - .align 2, 0 -_081DF370: .4byte gRfuState - thumb_func_end STWI_set_Callback_M - - thumb_func_start STWI_set_Callback_S -STWI_set_Callback_S: @ 81DF374 - ldr r1, _081DF37C @ =gRfuState - ldr r1, [r1] - str r0, [r1, 0x1C] - bx lr - .align 2, 0 -_081DF37C: .4byte gRfuState - thumb_func_end STWI_set_Callback_S - - thumb_func_start STWI_set_Callback_ID -STWI_set_Callback_ID: @ 81DF380 - ldr r1, _081DF388 @ =gRfuState - ldr r1, [r1] - str r0, [r1, 0x20] - bx lr - .align 2, 0 -_081DF388: .4byte gRfuState - thumb_func_end STWI_set_Callback_ID - - thumb_func_start STWI_poll_CommandEnd -STWI_poll_CommandEnd: @ 81DF38C - push {lr} - ldr r0, _081DF3B0 @ =gRfuState - ldr r1, [r0] - adds r2, r1, 0 - adds r2, 0x2C - ldrb r1, [r2] - adds r3, r0, 0 - cmp r1, 0x1 - bne _081DF3A6 - adds r1, r2, 0 -_081DF3A0: - ldrb r0, [r1] - cmp r0, 0x1 - beq _081DF3A0 -_081DF3A6: - ldr r0, [r3] - ldrh r0, [r0, 0x12] - pop {r1} - bx r1 - .align 2, 0 -_081DF3B0: .4byte gRfuState - thumb_func_end STWI_poll_CommandEnd - - thumb_func_start STWI_send_ResetREQ -STWI_send_ResetREQ: @ 81DF3B4 - push {lr} - movs r0, 0x10 - bl STWI_init - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _081DF3CE - ldr r0, _081DF3D4 @ =gRfuState - ldr r0, [r0] - strb r1, [r0, 0x4] - bl STWI_start_Command -_081DF3CE: - pop {r0} - bx r0 - .align 2, 0 -_081DF3D4: .4byte gRfuState - thumb_func_end STWI_send_ResetREQ - - thumb_func_start STWI_send_LinkStatusREQ -STWI_send_LinkStatusREQ: @ 81DF3D8 - push {lr} - movs r0, 0x11 - bl STWI_init - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _081DF3F2 - ldr r0, _081DF3F8 @ =gRfuState - ldr r0, [r0] - strb r1, [r0, 0x4] - bl STWI_start_Command -_081DF3F2: - pop {r0} - bx r0 - .align 2, 0 -_081DF3F8: .4byte gRfuState - thumb_func_end STWI_send_LinkStatusREQ - - thumb_func_start STWI_send_VersionStatusREQ -STWI_send_VersionStatusREQ: @ 81DF3FC - push {lr} - movs r0, 0x12 - bl STWI_init - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _081DF416 - ldr r0, _081DF41C @ =gRfuState - ldr r0, [r0] - strb r1, [r0, 0x4] - bl STWI_start_Command -_081DF416: - pop {r0} - bx r0 - .align 2, 0 -_081DF41C: .4byte gRfuState - thumb_func_end STWI_send_VersionStatusREQ - - thumb_func_start STWI_send_SystemStatusREQ -STWI_send_SystemStatusREQ: @ 81DF420 - push {lr} - movs r0, 0x13 - bl STWI_init - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _081DF43A - ldr r0, _081DF440 @ =gRfuState - ldr r0, [r0] - strb r1, [r0, 0x4] - bl STWI_start_Command -_081DF43A: - pop {r0} - bx r0 - .align 2, 0 -_081DF440: .4byte gRfuState - thumb_func_end STWI_send_SystemStatusREQ - - thumb_func_start STWI_send_SlotStatusREQ -STWI_send_SlotStatusREQ: @ 81DF444 - push {lr} - movs r0, 0x14 - bl STWI_init - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _081DF45E - ldr r0, _081DF464 @ =gRfuState - ldr r0, [r0] - strb r1, [r0, 0x4] - bl STWI_start_Command -_081DF45E: - pop {r0} - bx r0 - .align 2, 0 -_081DF464: .4byte gRfuState - thumb_func_end STWI_send_SlotStatusREQ - - thumb_func_start STWI_send_ConfigStatusREQ -STWI_send_ConfigStatusREQ: @ 81DF468 - push {lr} - movs r0, 0x15 - bl STWI_init - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _081DF482 - ldr r0, _081DF488 @ =gRfuState - ldr r0, [r0] - strb r1, [r0, 0x4] - bl STWI_start_Command -_081DF482: - pop {r0} - bx r0 - .align 2, 0 -_081DF488: .4byte gRfuState - thumb_func_end STWI_send_ConfigStatusREQ - - thumb_func_start STWI_send_GameConfigREQ -STWI_send_GameConfigREQ: @ 81DF48C - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - movs r0, 0x16 - bl STWI_init - lsls r0, 16 - cmp r0, 0 - bne _081DF4D8 - ldr r2, _081DF4E0 @ =gRfuState - ldr r1, [r2] - movs r0, 0x6 - strb r0, [r1, 0x4] - ldr r0, [r2] - ldr r1, [r0, 0x24] - adds r1, 0x4 - ldrh r0, [r4] - strh r0, [r1] - adds r1, 0x2 - adds r4, 0x2 - movs r2, 0xD -_081DF4B6: - ldrb r0, [r4] - strb r0, [r1] - adds r1, 0x1 - adds r4, 0x1 - subs r2, 0x1 - cmp r2, 0 - bge _081DF4B6 - movs r2, 0x7 -_081DF4C6: - ldrb r0, [r5] - strb r0, [r1] - adds r1, 0x1 - adds r5, 0x1 - subs r2, 0x1 - cmp r2, 0 - bge _081DF4C6 - bl STWI_start_Command -_081DF4D8: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081DF4E0: .4byte gRfuState - thumb_func_end STWI_send_GameConfigREQ - - thumb_func_start STWI_send_SystemConfigREQ -STWI_send_SystemConfigREQ: @ 81DF4E4 - push {r4-r6,lr} - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 24 - lsrs r5, r1, 24 - lsls r2, 24 - lsrs r4, r2, 24 - movs r0, 0x17 - bl STWI_init - lsls r0, 16 - cmp r0, 0 - bne _081DF51A - ldr r2, _081DF520 @ =gRfuState - ldr r1, [r2] - movs r0, 0x1 - strb r0, [r1, 0x4] - ldr r0, [r2] - ldr r0, [r0, 0x24] - adds r0, 0x4 - strb r4, [r0] - adds r0, 0x1 - strb r5, [r0] - adds r0, 0x1 - strh r6, [r0] - bl STWI_start_Command -_081DF51A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081DF520: .4byte gRfuState - thumb_func_end STWI_send_SystemConfigREQ - - thumb_func_start STWI_send_SC_StartREQ -STWI_send_SC_StartREQ: @ 81DF524 - push {lr} - movs r0, 0x19 - bl STWI_init - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _081DF53E - ldr r0, _081DF544 @ =gRfuState - ldr r0, [r0] - strb r1, [r0, 0x4] - bl STWI_start_Command -_081DF53E: - pop {r0} - bx r0 - .align 2, 0 -_081DF544: .4byte gRfuState - thumb_func_end STWI_send_SC_StartREQ - - thumb_func_start STWI_send_SC_PollingREQ -STWI_send_SC_PollingREQ: @ 81DF548 - push {lr} - movs r0, 0x1A - bl STWI_init - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _081DF562 - ldr r0, _081DF568 @ =gRfuState - ldr r0, [r0] - strb r1, [r0, 0x4] - bl STWI_start_Command -_081DF562: - pop {r0} - bx r0 - .align 2, 0 -_081DF568: .4byte gRfuState - thumb_func_end STWI_send_SC_PollingREQ - - thumb_func_start STWI_send_SC_EndREQ -STWI_send_SC_EndREQ: @ 81DF56C - push {lr} - movs r0, 0x1B - bl STWI_init - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _081DF586 - ldr r0, _081DF58C @ =gRfuState - ldr r0, [r0] - strb r1, [r0, 0x4] - bl STWI_start_Command -_081DF586: - pop {r0} - bx r0 - .align 2, 0 -_081DF58C: .4byte gRfuState - thumb_func_end STWI_send_SC_EndREQ - - thumb_func_start STWI_send_SP_StartREQ -STWI_send_SP_StartREQ: @ 81DF590 - push {lr} - movs r0, 0x1C - bl STWI_init - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _081DF5AA - ldr r0, _081DF5B0 @ =gRfuState - ldr r0, [r0] - strb r1, [r0, 0x4] - bl STWI_start_Command -_081DF5AA: - pop {r0} - bx r0 - .align 2, 0 -_081DF5B0: .4byte gRfuState - thumb_func_end STWI_send_SP_StartREQ - - thumb_func_start STWI_send_SP_PollingREQ -STWI_send_SP_PollingREQ: @ 81DF5B4 - push {lr} - movs r0, 0x1D - bl STWI_init - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _081DF5CE - ldr r0, _081DF5D4 @ =gRfuState - ldr r0, [r0] - strb r1, [r0, 0x4] - bl STWI_start_Command -_081DF5CE: - pop {r0} - bx r0 - .align 2, 0 -_081DF5D4: .4byte gRfuState - thumb_func_end STWI_send_SP_PollingREQ - - thumb_func_start STWI_send_SP_EndREQ -STWI_send_SP_EndREQ: @ 81DF5D8 - push {lr} - movs r0, 0x1E - bl STWI_init - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _081DF5F2 - ldr r0, _081DF5F8 @ =gRfuState - ldr r0, [r0] - strb r1, [r0, 0x4] - bl STWI_start_Command -_081DF5F2: - pop {r0} - bx r0 - .align 2, 0 -_081DF5F8: .4byte gRfuState - thumb_func_end STWI_send_SP_EndREQ - - thumb_func_start STWI_send_CP_StartREQ -STWI_send_CP_StartREQ: @ 81DF5FC - push {r4,lr} - lsls r0, 16 - lsrs r4, r0, 16 - movs r0, 0x1F - bl STWI_init - lsls r0, 16 - cmp r0, 0 - bne _081DF620 - ldr r2, _081DF628 @ =gRfuState - ldr r1, [r2] - movs r0, 0x1 - strb r0, [r1, 0x4] - ldr r0, [r2] - ldr r0, [r0, 0x24] - str r4, [r0, 0x4] - bl STWI_start_Command -_081DF620: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081DF628: .4byte gRfuState - thumb_func_end STWI_send_CP_StartREQ - - thumb_func_start STWI_send_CP_PollingREQ -STWI_send_CP_PollingREQ: @ 81DF62C - push {lr} - movs r0, 0x20 - bl STWI_init - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _081DF646 - ldr r0, _081DF64C @ =gRfuState - ldr r0, [r0] - strb r1, [r0, 0x4] - bl STWI_start_Command -_081DF646: - pop {r0} - bx r0 - .align 2, 0 -_081DF64C: .4byte gRfuState - thumb_func_end STWI_send_CP_PollingREQ - - thumb_func_start STWI_send_CP_EndREQ -STWI_send_CP_EndREQ: @ 81DF650 - push {lr} - movs r0, 0x21 - bl STWI_init - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _081DF66A - ldr r0, _081DF670 @ =gRfuState - ldr r0, [r0] - strb r1, [r0, 0x4] - bl STWI_start_Command -_081DF66A: - pop {r0} - bx r0 - .align 2, 0 -_081DF670: .4byte gRfuState - thumb_func_end STWI_send_CP_EndREQ - - thumb_func_start STWI_send_DataTxREQ -STWI_send_DataTxREQ: @ 81DF674 - push {r4-r6,lr} - adds r6, r0, 0 - lsls r4, r1, 24 - lsrs r5, r4, 24 - movs r0, 0x24 - bl STWI_init - lsls r0, 16 - cmp r0, 0 - bne _081DF6B2 - lsrs r2, r4, 26 - movs r0, 0x3 - ands r0, r5 - cmp r0, 0 - beq _081DF694 - adds r2, 0x1 -_081DF694: - ldr r1, _081DF6B8 @ =gRfuState - ldr r0, [r1] - strb r2, [r0, 0x4] - ldr r0, [r1] - ldr r1, [r0, 0x24] - adds r1, 0x4 - ldrb r2, [r0, 0x4] - movs r0, 0x80 - lsls r0, 19 - orrs r2, r0 - adds r0, r6, 0 - bl CpuSet - bl STWI_start_Command -_081DF6B2: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081DF6B8: .4byte gRfuState - thumb_func_end STWI_send_DataTxREQ - - thumb_func_start STWI_send_DataTxAndChangeREQ -STWI_send_DataTxAndChangeREQ: @ 81DF6BC - push {r4-r6,lr} - adds r6, r0, 0 - lsls r4, r1, 24 - lsrs r5, r4, 24 - movs r0, 0x25 - bl STWI_init - lsls r0, 16 - cmp r0, 0 - bne _081DF6FA - lsrs r2, r4, 26 - movs r0, 0x3 - ands r0, r5 - cmp r0, 0 - beq _081DF6DC - adds r2, 0x1 -_081DF6DC: - ldr r1, _081DF700 @ =gRfuState - ldr r0, [r1] - strb r2, [r0, 0x4] - ldr r0, [r1] - ldr r1, [r0, 0x24] - adds r1, 0x4 - ldrb r2, [r0, 0x4] - movs r0, 0x80 - lsls r0, 19 - orrs r2, r0 - adds r0, r6, 0 - bl CpuSet - bl STWI_start_Command -_081DF6FA: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081DF700: .4byte gRfuState - thumb_func_end STWI_send_DataTxAndChangeREQ - - thumb_func_start STWI_send_DataRxREQ -STWI_send_DataRxREQ: @ 81DF704 - push {lr} - movs r0, 0x26 - bl STWI_init - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _081DF71E - ldr r0, _081DF724 @ =gRfuState - ldr r0, [r0] - strb r1, [r0, 0x4] - bl STWI_start_Command -_081DF71E: - pop {r0} - bx r0 - .align 2, 0 -_081DF724: .4byte gRfuState - thumb_func_end STWI_send_DataRxREQ - - thumb_func_start STWI_send_MS_ChangeREQ -STWI_send_MS_ChangeREQ: @ 81DF728 - push {lr} - movs r0, 0x27 - bl STWI_init - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _081DF742 - ldr r0, _081DF748 @ =gRfuState - ldr r0, [r0] - strb r1, [r0, 0x4] - bl STWI_start_Command -_081DF742: - pop {r0} - bx r0 - .align 2, 0 -_081DF748: .4byte gRfuState - thumb_func_end STWI_send_MS_ChangeREQ - - thumb_func_start STWI_send_DataReadyAndChangeREQ -STWI_send_DataReadyAndChangeREQ: @ 81DF74C - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - movs r0, 0x28 - bl STWI_init - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0 - bne _081DF792 - cmp r4, 0 - bne _081DF774 - ldr r0, _081DF770 @ =gRfuState - ldr r0, [r0] - strb r3, [r0, 0x4] - b _081DF78E - .align 2, 0 -_081DF770: .4byte gRfuState -_081DF774: - ldr r2, _081DF798 @ =gRfuState - ldr r1, [r2] - movs r0, 0x1 - strb r0, [r1, 0x4] - ldr r0, [r2] - ldr r0, [r0, 0x24] - adds r0, 0x4 - strb r5, [r0] - adds r0, 0x1 - strb r3, [r0] - adds r0, 0x1 - strb r3, [r0] - strb r3, [r0, 0x1] -_081DF78E: - bl STWI_start_Command -_081DF792: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081DF798: .4byte gRfuState - thumb_func_end STWI_send_DataReadyAndChangeREQ - - thumb_func_start STWI_send_DisconnectedAndChangeREQ -STWI_send_DisconnectedAndChangeREQ: @ 81DF79C - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - movs r0, 0x29 - bl STWI_init - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0 - bne _081DF7D2 - ldr r2, _081DF7D8 @ =gRfuState - ldr r1, [r2] - movs r0, 0x1 - strb r0, [r1, 0x4] - ldr r0, [r2] - ldr r0, [r0, 0x24] - adds r0, 0x4 - strb r4, [r0] - adds r0, 0x1 - strb r5, [r0] - adds r0, 0x1 - strb r3, [r0] - strb r3, [r0, 0x1] - bl STWI_start_Command -_081DF7D2: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081DF7D8: .4byte gRfuState - thumb_func_end STWI_send_DisconnectedAndChangeREQ - - thumb_func_start STWI_send_ResumeRetransmitAndChangeREQ -STWI_send_ResumeRetransmitAndChangeREQ: @ 81DF7DC - push {lr} - movs r0, 0x37 - bl STWI_init - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _081DF7F6 - ldr r0, _081DF7FC @ =gRfuState - ldr r0, [r0] - strb r1, [r0, 0x4] - bl STWI_start_Command -_081DF7F6: - pop {r0} - bx r0 - .align 2, 0 -_081DF7FC: .4byte gRfuState - thumb_func_end STWI_send_ResumeRetransmitAndChangeREQ - - thumb_func_start STWI_send_DisconnectREQ -STWI_send_DisconnectREQ: @ 81DF800 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - movs r0, 0x30 - bl STWI_init - lsls r0, 16 - cmp r0, 0 - bne _081DF824 - ldr r2, _081DF82C @ =gRfuState - ldr r1, [r2] - movs r0, 0x1 - strb r0, [r1, 0x4] - ldr r0, [r2] - ldr r0, [r0, 0x24] - str r4, [r0, 0x4] - bl STWI_start_Command -_081DF824: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081DF82C: .4byte gRfuState - thumb_func_end STWI_send_DisconnectREQ - - thumb_func_start STWI_send_TestModeREQ -STWI_send_TestModeREQ: @ 81DF830 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - movs r0, 0x31 - bl STWI_init - lsls r0, 16 - cmp r0, 0 - bne _081DF85C - ldr r2, _081DF864 @ =gRfuState - ldr r1, [r2] - movs r0, 0x1 - strb r0, [r1, 0x4] - ldr r0, [r2] - ldr r1, [r0, 0x24] - lsls r0, r4, 8 - orrs r0, r5 - str r0, [r1, 0x4] - bl STWI_start_Command -_081DF85C: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081DF864: .4byte gRfuState - thumb_func_end STWI_send_TestModeREQ - - thumb_func_start STWI_send_CPR_StartREQ -STWI_send_CPR_StartREQ: @ 81DF868 - push {r4-r6,lr} - lsls r0, 16 - lsrs r5, r0, 16 - lsls r1, 16 - lsrs r4, r1, 16 - lsls r2, 24 - lsrs r6, r2, 24 - movs r0, 0x32 - bl STWI_init - lsls r0, 16 - cmp r0, 0 - bne _081DF89A - ldr r2, _081DF8A0 @ =gRfuState - ldr r1, [r2] - movs r0, 0x2 - strb r0, [r1, 0x4] - lsls r0, r5, 16 - orrs r0, r4 - ldr r1, [r2] - ldr r1, [r1, 0x24] - str r0, [r1, 0x4] - str r6, [r1, 0x8] - bl STWI_start_Command -_081DF89A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081DF8A0: .4byte gRfuState - thumb_func_end STWI_send_CPR_StartREQ - - thumb_func_start STWI_send_CPR_PollingREQ -STWI_send_CPR_PollingREQ: @ 81DF8A4 - push {lr} - movs r0, 0x33 - bl STWI_init - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _081DF8BE - ldr r0, _081DF8C4 @ =gRfuState - ldr r0, [r0] - strb r1, [r0, 0x4] - bl STWI_start_Command -_081DF8BE: - pop {r0} - bx r0 - .align 2, 0 -_081DF8C4: .4byte gRfuState - thumb_func_end STWI_send_CPR_PollingREQ - - thumb_func_start STWI_send_CPR_EndREQ -STWI_send_CPR_EndREQ: @ 81DF8C8 - push {lr} - movs r0, 0x34 - bl STWI_init - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _081DF8E2 - ldr r0, _081DF8E8 @ =gRfuState - ldr r0, [r0] - strb r1, [r0, 0x4] - bl STWI_start_Command -_081DF8E2: - pop {r0} - bx r0 - .align 2, 0 -_081DF8E8: .4byte gRfuState - thumb_func_end STWI_send_CPR_EndREQ - - thumb_func_start STWI_send_StopModeREQ -STWI_send_StopModeREQ: @ 81DF8EC - push {lr} - movs r0, 0x3D - bl STWI_init - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _081DF906 - ldr r0, _081DF90C @ =gRfuState - ldr r0, [r0] - strb r1, [r0, 0x4] - bl STWI_start_Command -_081DF906: - pop {r0} - bx r0 - .align 2, 0 -_081DF90C: .4byte gRfuState - thumb_func_end STWI_send_StopModeREQ - - thumb_func_start STWI_intr_timer -STWI_intr_timer: @ 81DF910 - push {r4,lr} - ldr r4, _081DF928 @ =gRfuState - ldr r1, [r4] - ldr r0, [r1, 0xC] - cmp r0, 0x2 - beq _081DF936 - cmp r0, 0x2 - bhi _081DF92C - cmp r0, 0x1 - beq _081DF944 - b _081DF96C - .align 2, 0 -_081DF928: .4byte gRfuState -_081DF92C: - cmp r0, 0x3 - beq _081DF94E - cmp r0, 0x4 - beq _081DF944 - b _081DF96C -_081DF936: - ldrb r0, [r1, 0x10] - movs r0, 0x1 - strb r0, [r1, 0x10] - movs r0, 0x32 - bl STWI_set_timer - b _081DF96C -_081DF944: - bl STWI_stop_timer - bl STWI_restart_Command - b _081DF96C -_081DF94E: - ldrb r0, [r1, 0x10] - movs r0, 0x1 - strb r0, [r1, 0x10] - bl STWI_stop_timer - bl STWI_reset_ClockCounter - ldr r0, [r4] - ldr r2, [r0, 0x18] - cmp r2, 0 - beq _081DF96C - movs r0, 0xFF - movs r1, 0 - bl _call_via_r2 -_081DF96C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end STWI_intr_timer - - thumb_func_start STWI_set_timer -STWI_set_timer: @ 81DF974 - push {r4-r7,lr} - lsls r0, 24 - lsrs r3, r0, 24 - adds r5, r3, 0 - ldr r2, _081DF9A4 @ =gRfuState - ldr r0, [r2] - ldrb r0, [r0, 0xA] - lsls r0, 2 - ldr r1, _081DF9A8 @ =0x04000100 - adds r4, r0, r1 - adds r1, 0x2 - adds r7, r0, r1 - ldr r1, _081DF9AC @ =0x04000208 - movs r0, 0 - strh r0, [r1] - adds r6, r2, 0 - cmp r3, 0x50 - beq _081DF9CC - cmp r3, 0x50 - bgt _081DF9B0 - cmp r3, 0x32 - beq _081DF9BA - b _081DF9F8 - .align 2, 0 -_081DF9A4: .4byte gRfuState -_081DF9A8: .4byte 0x04000100 -_081DF9AC: .4byte 0x04000208 -_081DF9B0: - cmp r5, 0x64 - beq _081DF9DC - cmp r5, 0x82 - beq _081DF9EC - b _081DF9F8 -_081DF9BA: - ldr r1, _081DF9C8 @ =0x0000fccb - adds r0, r1, 0 - strh r0, [r4] - ldr r1, [r6] - movs r0, 0x1 - b _081DF9F6 - .align 2, 0 -_081DF9C8: .4byte 0x0000fccb -_081DF9CC: - ldr r1, _081DF9D8 @ =0x0000fae0 - adds r0, r1, 0 - strh r0, [r4] - ldr r1, [r6] - movs r0, 0x2 - b _081DF9F6 - .align 2, 0 -_081DF9D8: .4byte 0x0000fae0 -_081DF9DC: - ldr r1, _081DF9E8 @ =0x0000f996 - adds r0, r1, 0 - strh r0, [r4] - ldr r1, [r6] - movs r0, 0x3 - b _081DF9F6 - .align 2, 0 -_081DF9E8: .4byte 0x0000f996 -_081DF9EC: - ldr r1, _081DFA14 @ =0x0000f7ad - adds r0, r1, 0 - strh r0, [r4] - ldr r1, [r6] - movs r0, 0x4 -_081DF9F6: - str r0, [r1, 0xC] -_081DF9F8: - movs r0, 0xC3 - strh r0, [r7] - ldr r2, _081DFA18 @ =0x04000202 - ldr r1, [r6] - movs r0, 0x8 - ldrb r1, [r1, 0xA] - lsls r0, r1 - strh r0, [r2] - ldr r1, _081DFA1C @ =0x04000208 - movs r0, 0x1 - strh r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081DFA14: .4byte 0x0000f7ad -_081DFA18: .4byte 0x04000202 -_081DFA1C: .4byte 0x04000208 - thumb_func_end STWI_set_timer - - thumb_func_start STWI_stop_timer -STWI_stop_timer: @ 81DFA20 - ldr r2, _081DFA40 @ =gRfuState - ldr r0, [r2] - movs r1, 0 - str r1, [r0, 0xC] - ldrb r0, [r0, 0xA] - lsls r0, 2 - ldr r3, _081DFA44 @ =0x04000100 - adds r0, r3 - strh r1, [r0] - ldr r0, [r2] - ldrb r0, [r0, 0xA] - lsls r0, 2 - ldr r2, _081DFA48 @ =0x04000102 - adds r0, r2 - strh r1, [r0] - bx lr - .align 2, 0 -_081DFA40: .4byte gRfuState -_081DFA44: .4byte 0x04000100 -_081DFA48: .4byte 0x04000102 - thumb_func_end STWI_stop_timer - - thumb_func_start STWI_init -STWI_init: @ 81DFA4C - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r6, r5, 0 - ldr r0, _081DFA78 @ =0x04000208 - ldrh r0, [r0] - cmp r0, 0 - bne _081DFA80 - ldr r0, _081DFA7C @ =gRfuState - ldr r1, [r0] - ldrh r0, [r1, 0x12] - movs r0, 0x6 - strh r0, [r1, 0x12] - ldr r2, [r1, 0x18] - cmp r2, 0 - beq _081DFACA - ldrh r1, [r1, 0x12] - adds r0, r5, 0 - bl _call_via_r2 - b _081DFACA - .align 2, 0 -_081DFA78: .4byte 0x04000208 -_081DFA7C: .4byte gRfuState -_081DFA80: - ldr r4, _081DFAAC @ =gRfuState - ldr r2, [r4] - adds r3, r2, 0 - adds r3, 0x2C - ldrb r0, [r3] - cmp r0, 0x1 - bne _081DFAB0 - ldrh r0, [r2, 0x12] - movs r1, 0 - movs r0, 0x2 - strh r0, [r2, 0x12] - ldrb r0, [r3] - strb r1, [r3] - ldr r0, [r4] - ldr r2, [r0, 0x18] - cmp r2, 0 - beq _081DFACA - ldrh r1, [r0, 0x12] - adds r0, r5, 0 - bl _call_via_r2 - b _081DFACA - .align 2, 0 -_081DFAAC: .4byte gRfuState -_081DFAB0: - ldrb r0, [r2, 0x14] - cmp r0, 0 - bne _081DFACE - ldrh r0, [r2, 0x12] - movs r0, 0x4 - strh r0, [r2, 0x12] - ldr r3, [r2, 0x18] - cmp r3, 0 - beq _081DFACA - ldrh r1, [r2, 0x12] - adds r0, r5, 0 - bl _call_via_r3 -_081DFACA: - movs r0, 0x1 - b _081DFB16 -_081DFACE: - ldrb r0, [r3] - movs r1, 0 - movs r0, 0x1 - strb r0, [r3] - ldr r0, [r4] - strb r6, [r0, 0x6] - ldr r0, [r4] - str r1, [r0] - strb r1, [r0, 0x4] - ldr r0, [r4] - strb r1, [r0, 0x5] - ldr r0, [r4] - strb r1, [r0, 0x7] - ldr r0, [r4] - strb r1, [r0, 0x8] - ldr r0, [r4] - strb r1, [r0, 0x9] - ldr r0, [r4] - str r1, [r0, 0xC] - ldrb r2, [r0, 0x10] - strb r1, [r0, 0x10] - ldr r0, [r4] - ldrh r2, [r0, 0x12] - movs r2, 0 - strh r1, [r0, 0x12] - strb r2, [r0, 0x15] - ldr r1, _081DFB1C @ =0x04000134 - movs r2, 0x80 - lsls r2, 1 - adds r0, r2, 0 - strh r0, [r1] - subs r1, 0xC - ldr r2, _081DFB20 @ =0x00005003 - adds r0, r2, 0 - strh r0, [r1] - movs r0, 0 -_081DFB16: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_081DFB1C: .4byte 0x04000134 -_081DFB20: .4byte 0x00005003 - thumb_func_end STWI_init - - thumb_func_start STWI_start_Command -STWI_start_Command: @ 81DFB24 - push {r4,r5,lr} - ldr r5, _081DFB7C @ =gRfuState - ldr r0, [r5] - ldr r3, [r0, 0x24] - ldrb r1, [r0, 0x4] - lsls r1, 8 - ldrb r0, [r0, 0x6] - ldr r2, _081DFB80 @ =0x99660000 - orrs r0, r2 - orrs r1, r0 - str r1, [r3] - ldr r2, _081DFB84 @ =0x04000120 - ldr r1, [r5] - ldr r0, [r1, 0x24] - ldr r0, [r0] - str r0, [r2] - movs r2, 0 - str r2, [r1] - movs r0, 0x1 - strb r0, [r1, 0x5] - ldr r4, _081DFB88 @ =0x04000208 - ldrh r3, [r4] - strh r2, [r4] - ldr r2, _081DFB8C @ =0x04000200 - ldr r1, [r5] - movs r0, 0x8 - ldrb r1, [r1, 0xA] - lsls r0, r1 - ldrh r1, [r2] - orrs r0, r1 - strh r0, [r2] - ldrh r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strh r0, [r2] - strh r3, [r4] - ldr r1, _081DFB90 @ =0x04000128 - ldr r2, _081DFB94 @ =0x00005083 - adds r0, r2, 0 - strh r0, [r1] - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_081DFB7C: .4byte gRfuState -_081DFB80: .4byte 0x99660000 -_081DFB84: .4byte 0x04000120 -_081DFB88: .4byte 0x04000208 -_081DFB8C: .4byte 0x04000200 -_081DFB90: .4byte 0x04000128 -_081DFB94: .4byte 0x00005083 - thumb_func_end STWI_start_Command - - thumb_func_start STWI_restart_Command -STWI_restart_Command: @ 81DFB98 - push {r4,lr} - ldr r4, _081DFBB0 @ =gRfuState - ldr r2, [r4] - ldrb r0, [r2, 0x15] - adds r3, r4, 0 - cmp r0, 0x1 - bhi _081DFBB4 - adds r0, 0x1 - strb r0, [r2, 0x15] - bl STWI_start_Command - b _081DFC0E - .align 2, 0 -_081DFBB0: .4byte gRfuState -_081DFBB4: - ldrb r0, [r2, 0x6] - cmp r0, 0x27 - beq _081DFBC6 - cmp r0, 0x25 - beq _081DFBC6 - cmp r0, 0x35 - beq _081DFBC6 - cmp r0, 0x37 - bne _081DFBE8 -_081DFBC6: - ldr r0, [r3] - ldrh r1, [r0, 0x12] - movs r2, 0 - movs r1, 0x1 - strh r1, [r0, 0x12] - adds r0, 0x2C - ldrb r1, [r0] - strb r2, [r0] - ldr r1, [r3] - ldr r2, [r1, 0x18] - cmp r2, 0 - beq _081DFC0E - ldrb r0, [r1, 0x6] - ldrh r1, [r1, 0x12] - bl _call_via_r2 - b _081DFC0E -_081DFBE8: - ldrh r0, [r2, 0x12] - movs r1, 0 - movs r0, 0x1 - strh r0, [r2, 0x12] - adds r0, r2, 0 - adds r0, 0x2C - ldrb r2, [r0] - strb r1, [r0] - ldr r1, [r4] - ldr r2, [r1, 0x18] - cmp r2, 0 - beq _081DFC08 - ldrb r0, [r1, 0x6] - ldrh r1, [r1, 0x12] - bl _call_via_r2 -_081DFC08: - ldr r1, [r4] - movs r0, 0x4 - str r0, [r1] -_081DFC0E: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end STWI_restart_Command - - thumb_func_start STWI_reset_ClockCounter -STWI_reset_ClockCounter: @ 81DFC18 - ldr r3, _081DFC44 @ =gRfuState - ldr r1, [r3] - movs r0, 0x5 - str r0, [r1] - movs r2, 0 - strb r2, [r1, 0x4] - ldr r0, [r3] - strb r2, [r0, 0x5] - ldr r1, _081DFC48 @ =0x04000120 - movs r0, 0x80 - lsls r0, 24 - str r0, [r1] - adds r1, 0x8 - strh r2, [r1] - ldr r2, _081DFC4C @ =0x00005003 - adds r0, r2, 0 - strh r0, [r1] - adds r2, 0x7F - adds r0, r2, 0 - strh r0, [r1] - movs r0, 0 - bx lr - .align 2, 0 -_081DFC44: .4byte gRfuState -_081DFC48: .4byte 0x04000120 -_081DFC4C: .4byte 0x00005003 - thumb_func_end STWI_reset_ClockCounter diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h index 6d54bc5fb..8eacc8aa7 100644 --- a/include/gba/io_reg.h +++ b/include/gba/io_reg.h @@ -137,6 +137,8 @@ #define REG_OFFSET_DMA3CNT_H 0xde #define REG_OFFSET_TMCNT 0x100 +#define REG_OFFSET_TMCNT_L 0x100 +#define REG_OFFSET_TMCNT_H 0x102 #define REG_OFFSET_TM0CNT 0x100 #define REG_OFFSET_TM0CNT_L 0x100 #define REG_OFFSET_TM0CNT_H 0x102 @@ -298,6 +300,8 @@ #define REG_ADDR_DMA3CNT_H (REG_BASE + REG_OFFSET_DMA3CNT_H) #define REG_ADDR_TMCNT (REG_BASE + REG_OFFSET_TMCNT) +#define REG_ADDR_TMCNT_L (REG_BASE + REG_OFFSET_TMCNT_L) +#define REG_ADDR_TMCNT_H (REG_BASE + REG_OFFSET_TMCNT_H) #define REG_ADDR_TM0CNT (REG_BASE + REG_OFFSET_TM0CNT) #define REG_ADDR_TM0CNT_L (REG_BASE + REG_OFFSET_TM0CNT_L) #define REG_ADDR_TM0CNT_H (REG_BASE + REG_OFFSET_TM0CNT_H) @@ -458,6 +462,8 @@ #define REG_DMA3CNT_H (*(vu16 *)REG_ADDR_DMA3CNT_H) #define REG_TMCNT(n) (*(vu16 *)(REG_ADDR_TMCNT + ((n) * 4))) +#define REG_TMCNT_L(n) (*(vu16 *)(REG_ADDR_TMCNT_L + ((n) * 4))) +#define REG_TMCNT_H(n) (*(vu16 *)(REG_ADDR_TMCNT_H + ((n) * 4))) #define REG_TM0CNT (*(vu32 *)REG_ADDR_TM0CNT) #define REG_TM0CNT_L (*(vu16 *)REG_ADDR_TM0CNT_L) #define REG_TM0CNT_H (*(vu16 *)REG_ADDR_TM0CNT_H) diff --git a/include/gba/macro.h b/include/gba/macro.h index e416c3577..a3e870210 100644 --- a/include/gba/macro.h +++ b/include/gba/macro.h @@ -105,7 +105,7 @@ } \ } -#define DmaClearLarge(dmaNum, dest, size, block, bit) \ +#define DmaClearLarge(dmaNum, dest, size, block, bit) \ { \ u32 _size = size; \ while (1) \ @@ -170,4 +170,14 @@ #define DmaFill16Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 16) #define DmaFill32Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 32) +#define IntrEnable(flags) \ +{ \ + u16 imeTemp; \ + \ + imeTemp = REG_IME; \ + REG_IME = 0; \ + REG_IE |= flags; \ + REG_IME = imeTemp; \ +} + #endif // GUARD_GBA_MACRO_H diff --git a/include/librfu.h b/include/librfu.h index 5eb9fd7a0..709074f9c 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -108,7 +108,7 @@ struct RfuStruct u8 ackActiveCommand; u8 timerSelect; u8 unk_b; - s32 timerState; + u32 timerState; // this field is s32 in emerald vu8 timerActive; u8 unk_11; vu16 error; @@ -126,10 +126,10 @@ struct RfuStruct struct RfuIntrStruct { - u8 rxPacketAlloc[0x74]; - u8 txPacketAlloc[0x74]; - u8 block1[0x960]; - u8 block2[0x30]; + union RfuPacket rxPacketAlloc; + union RfuPacket txPacketAlloc; + u8 block1[0x960]; // size of librfu_intr.s binary + struct RfuStruct block2; }; struct RfuSlotStatusUNI @@ -248,14 +248,6 @@ struct Unk_3007470 u16 unkA; }; -struct STWIStruct -{ - // TODO: resolve the struct - u8 unk_0[232]; - u8 function[2400]; - struct RfuStruct STWIStatus; -}; - struct Unk_3001190 { struct RfuLinkStatus linkStatus; @@ -263,7 +255,7 @@ struct Unk_3001190 struct RfuFixed fixed; struct RfuSlotStatusNI NI[4]; struct RfuSlotStatusUNI UNI[4]; - struct STWIStruct STWI; + struct RfuIntrStruct intr; }; extern struct RfuStruct *gRfuState; @@ -275,7 +267,6 @@ extern struct RfuSlotStatusUNI *gRfuSlotStatusUNI[4]; extern struct Unk_3007470 gUnknown_3007470; void rfu_STC_clearAPIVariables(void); -void STWI_init_all(struct RfuIntrStruct * interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam); void rfu_REQ_stopMode(void); void rfu_waitREQComplete(void); u32 rfu_REQBN_softReset_and_checkID(void); @@ -323,4 +314,50 @@ void rfu_UNI_clearRecvNewDataFlag(u8 a0); void rfu_REQ_PARENT_resumeRetransmitAndChange(void); void rfu_NI_setSendData(u8, u8, const void *, u32); +// librfu_intr +void IntrSIO32(void); + +// librfu_stwi +void STWI_init_all(struct RfuIntrStruct * interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam); +void STWI_set_MS_mode(u8 mode); +void STWI_init_Callback_M(void); +void STWI_init_Callback_S(void); +void STWI_set_Callback_M(void (*callbackM)()); +void STWI_set_Callback_S(void (*callbackS)()); +void STWI_init_timer(IntrFunc *interrupt, s32 timerSelect); +void AgbRFU_SoftReset(void); +void STWI_set_Callback_ID(u32 id); +u16 STWI_read_status(u8 index); +u16 STWI_poll_CommandEnd(void); +void STWI_send_DataRxREQ(void); +void STWI_send_MS_ChangeREQ(void); +void STWI_send_StopModeREQ(void); +void STWI_send_SystemStatusREQ(void); +void STWI_send_GameConfigREQ(u8 *unk1, u8 *data); +void STWI_send_ResetREQ(void); +void STWI_send_LinkStatusREQ(void); +void STWI_send_VersionStatusREQ(void); +void STWI_send_SlotStatusREQ(void); +void STWI_send_ConfigStatusREQ(void); +void STWI_send_ResumeRetransmitAndChangeREQ(void); +void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3); +void STWI_send_SC_StartREQ(void); +void STWI_send_SC_PollingREQ(void); +void STWI_send_SC_EndREQ(void); +void STWI_send_SP_StartREQ(void); +void STWI_send_SP_PollingREQ(void); +void STWI_send_SP_EndREQ(void); +void STWI_send_CP_StartREQ(u16 unk1); +void STWI_send_CP_PollingREQ(void); +void STWI_send_CP_EndREQ(void); +void STWI_send_DataTxREQ(const void *in, u8 size); +void STWI_send_DataTxAndChangeREQ(const void *in, u8 size); +void STWI_send_DataReadyAndChangeREQ(u8 unk); +void STWI_send_DisconnectedAndChangeREQ(u8 unk0, u8 unk1); +void STWI_send_DisconnectREQ(u8 unk); +void STWI_send_TestModeREQ(u8 unk0, u8 unk1); +void STWI_send_CPR_StartREQ(u16 unk0, u16 unk1, u8 unk2); +void STWI_send_CPR_PollingREQ(void); +void STWI_send_CPR_EndREQ(void); + #endif // GUARD_LIBRFU_H diff --git a/ld_script.txt b/ld_script.txt index aeb11a271..c57b7b4a0 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -317,7 +317,7 @@ SECTIONS { src/agb_flash_1m.o(.text); src/agb_flash_mx.o(.text); src/agb_flash_le.o(.text); - asm/librfu_stwi.o(.text); + src/librfu_stwi.o(.text); asm/librfu_intr.o(.text); asm/librfu.o(.text); src/isagbprn.o(.text); diff --git a/src/librfu_stwi.c b/src/librfu_stwi.c new file mode 100644 index 000000000..fe8a4ef76 --- /dev/null +++ b/src/librfu_stwi.c @@ -0,0 +1,645 @@ +#include "global.h" +#include "librfu.h" + +static void STWI_intr_timer(void); +static u16 STWI_init(u8 request); +static s32 STWI_start_Command(void); +static void STWI_set_timer(u8 unk); +static void STWI_stop_timer(void); +static s32 STWI_restart_Command(void); +static s32 STWI_reset_ClockCounter(void); + +void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam) +{ + // If we're copying our interrupt into RAM, DMA it to block1 and use + // block2 for our RfuStruct, otherwise block1 holds the RfuStruct. + // interrupt usually is a pointer to gIntrTable[1] + if (copyInterruptToRam == TRUE) + { + *interrupt = (IntrFunc)interruptStruct->block1; + DmaCopy16(3, &IntrSIO32, interruptStruct->block1, sizeof(interruptStruct->block1)); + gRfuState = &interruptStruct->block2; + } + else + { + *interrupt = IntrSIO32; + gRfuState = (struct RfuStruct *)interruptStruct->block1; + } + gRfuState->rxPacket = &interruptStruct->rxPacketAlloc; + gRfuState->txPacket = &interruptStruct->txPacketAlloc; + gRfuState->msMode = 1; + gRfuState->state = 0; + gRfuState->reqLength = 0; + gRfuState->reqNext = 0; + gRfuState->ackLength = 0; + gRfuState->ackNext = 0; + gRfuState->ackActiveCommand = 0; + gRfuState->timerState = 0; + gRfuState->timerActive = 0; + gRfuState->error = 0; + gRfuState->recoveryCount = 0; + gRfuState->unk_2c = 0; + REG_RCNT = 0x100; // TODO: mystery bit? + REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; + STWI_init_Callback_M(); + STWI_init_Callback_S(); + IntrEnable(INTR_FLAG_SERIAL); +} + +void STWI_init_timer(IntrFunc *interrupt, s32 timerSelect) +{ + *interrupt = STWI_intr_timer; + gRfuState->timerSelect = timerSelect; + IntrEnable(INTR_FLAG_TIMER0 << gRfuState->timerSelect); +} + +void AgbRFU_SoftReset(void) +{ + vu16 *timerL; + vu16 *timerH; + + REG_RCNT = 0x8000; + REG_RCNT = 0x80A0; // all these bits are undocumented + timerL = ®_TMCNT_L(gRfuState->timerSelect); + timerH = ®_TMCNT_H(gRfuState->timerSelect); + *timerH = 0; + *timerL = 0; + *timerH = 0x83; + while (*timerL <= 0x11) + REG_RCNT = 0x80A2; + *timerH = 3; + REG_RCNT = 0x80A0; + REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; + gRfuState->state = 0; + gRfuState->reqLength = 0; + gRfuState->reqNext = 0; + gRfuState->reqActiveCommand = 0; + gRfuState->ackLength = 0; + gRfuState->ackNext = 0; + gRfuState->ackActiveCommand = 0; + gRfuState->timerState = 0; + gRfuState->timerActive = 0; + gRfuState->error = 0; + gRfuState->msMode = 1; + gRfuState->recoveryCount = 0; + gRfuState->unk_2c = 0; +} + +void STWI_set_MS_mode(u8 mode) +{ + gRfuState->msMode = mode; +} + +u16 STWI_read_status(u8 index) +{ + switch (index) + { + case 0: + return gRfuState->error; + case 1: + return gRfuState->msMode; + case 2: + return gRfuState->state; + case 3: + return gRfuState->reqActiveCommand; + default: + return 0xFFFF; + } +} + +void STWI_init_Callback_M(void) +{ + STWI_set_Callback_M(NULL); +} + +void STWI_init_Callback_S(void) +{ + STWI_set_Callback_S(NULL); +} + +void STWI_set_Callback_M(void (*callbackM)()) +{ + gRfuState->callbackM = callbackM; +} + +void STWI_set_Callback_S(void (*callbackS)()) +{ + gRfuState->callbackS = callbackS; +} + +void STWI_set_Callback_ID(u32 id) +{ + gRfuState->callbackId = id; +} + +u16 STWI_poll_CommandEnd(void) +{ + while (gRfuState->unk_2c == TRUE) + ; + return gRfuState->error; +} + +void STWI_send_ResetREQ(void) +{ + if (!STWI_init(RFU_RESET)) + { + gRfuState->reqLength = 0; + STWI_start_Command(); + } +} + +void STWI_send_LinkStatusREQ(void) +{ + if (!STWI_init(RFU_LINK_STATUS)) + { + gRfuState->reqLength = 0; + STWI_start_Command(); + } +} + +void STWI_send_VersionStatusREQ(void) +{ + if (!STWI_init(RFU_VERSION_STATUS)) + { + gRfuState->reqLength = 0; + STWI_start_Command(); + } +} + +void STWI_send_SystemStatusREQ(void) +{ + if (!STWI_init(RFU_SYSTEM_STATUS)) + { + gRfuState->reqLength = 0; + STWI_start_Command(); + } +} + +void STWI_send_SlotStatusREQ(void) +{ + if (!STWI_init(RFU_SLOT_STATUS)) + { + gRfuState->reqLength = 0; + STWI_start_Command(); + } +} + +void STWI_send_ConfigStatusREQ(void) +{ + if (!STWI_init(RFU_CONFIG_STATUS)) + { + gRfuState->reqLength = 0; + STWI_start_Command(); + } +} + +void STWI_send_GameConfigREQ(u8 *unk1, u8 *data) +{ + u8 *packetBytes; + s32 i; + + if (!STWI_init(RFU_GAME_CONFIG)) + { + gRfuState->reqLength = 6; + // TODO: what is unk1 + packetBytes = gRfuState->txPacket->rfuPacket8.data; + packetBytes += sizeof(u32); + *(u16 *)packetBytes = *(u16 *)unk1; + packetBytes += sizeof(u16); + unk1 += sizeof(u16); + for (i = 0; i < 14; ++i) + { + *packetBytes = *unk1; + ++packetBytes; + ++unk1; + } + for (i = 0; i < 8; ++i) + { + *packetBytes = *data; + ++packetBytes; + ++data; + } + STWI_start_Command(); + } +} + +void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3) +{ + if (!STWI_init(RFU_SYSTEM_CONFIG)) + { + u8 *packetBytes; + + gRfuState->reqLength = 1; + packetBytes = gRfuState->txPacket->rfuPacket8.data; + packetBytes += sizeof(u32); + *packetBytes++ = unk3; + *packetBytes++ = unk2; + *(u16*)packetBytes = unk1; + STWI_start_Command(); + } +} + +void STWI_send_SC_StartREQ(void) +{ + if (!STWI_init(RFU_SC_START)) + { + gRfuState->reqLength = 0; + STWI_start_Command(); + } +} + +void STWI_send_SC_PollingREQ(void) +{ + if (!STWI_init(RFU_SC_POLLING)) + { + gRfuState->reqLength = 0; + STWI_start_Command(); + } +} + +void STWI_send_SC_EndREQ(void) +{ + if (!STWI_init(RFU_SC_END)) + { + gRfuState->reqLength = 0; + STWI_start_Command(); + } +} + +void STWI_send_SP_StartREQ(void) +{ + if (!STWI_init(RFU_SP_START)) + { + gRfuState->reqLength = 0; + STWI_start_Command(); + } +} + +void STWI_send_SP_PollingREQ(void) +{ + if (!STWI_init(RFU_SP_POLLING)) + { + gRfuState->reqLength = 0; + STWI_start_Command(); + } +} + +void STWI_send_SP_EndREQ(void) +{ + if (!STWI_init(RFU_SP_END)) + { + gRfuState->reqLength = 0; + STWI_start_Command(); + } +} + +void STWI_send_CP_StartREQ(u16 unk1) +{ + if (!STWI_init(RFU_CP_START)) + { + gRfuState->reqLength = 1; + gRfuState->txPacket->rfuPacket32.data[0] = unk1; + STWI_start_Command(); + } +} + +void STWI_send_CP_PollingREQ(void) +{ + if (!STWI_init(RFU_CP_POLLING)) + { + gRfuState->reqLength = 0; + STWI_start_Command(); + } +} + +void STWI_send_CP_EndREQ(void) +{ + if (!STWI_init(RFU_CP_END)) + { + gRfuState->reqLength = 0; + STWI_start_Command(); + } +} + +void STWI_send_DataTxREQ(const void *in, u8 size) +{ + if (!STWI_init(RFU_DATA_TX)) + { + u8 reqLength = (size / sizeof(u32)); + if (size & (sizeof(u32) - 1)) + reqLength += 1; + gRfuState->reqLength = reqLength; + CpuCopy32(in, gRfuState->txPacket->rfuPacket32.data, gRfuState->reqLength * sizeof(u32)); + STWI_start_Command(); + } +} + +void STWI_send_DataTxAndChangeREQ(const void *in, u8 size) +{ + if (!STWI_init(RFU_DATA_TX_AND_CHANGE)) + { + u8 reqLength = (size / sizeof(u32)); + if (size & (sizeof(u32) - 1)) + reqLength += 1; + gRfuState->reqLength = reqLength; + CpuCopy32(in, gRfuState->txPacket->rfuPacket32.data, gRfuState->reqLength * sizeof(u32)); + STWI_start_Command(); + } +} + +void STWI_send_DataRxREQ(void) +{ + if (!STWI_init(RFU_DATA_RX)) + { + gRfuState->reqLength = 0; + STWI_start_Command(); + } +} + +void STWI_send_MS_ChangeREQ(void) +{ + if (!STWI_init(RFU_MS_CHANGE)) + { + gRfuState->reqLength = 0; + STWI_start_Command(); + } +} + +void STWI_send_DataReadyAndChangeREQ(u8 unk) +{ + if (!STWI_init(RFU_DATA_READY_AND_CHANGE)) + { + if (!unk) + { + gRfuState->reqLength = 0; + } + else + { + u8 *packetBytes; + + gRfuState->reqLength = 1; + packetBytes = gRfuState->txPacket->rfuPacket8.data; + packetBytes += sizeof(u32); + *packetBytes++ = unk; + *packetBytes++ = 0; + *packetBytes++ = 0; + *packetBytes = 0; + } + STWI_start_Command(); + } +} + +void STWI_send_DisconnectedAndChangeREQ(u8 unk0, u8 unk1) +{ + if (!STWI_init(RFU_DISCONNECTED_AND_CHANGE)) + { + u8 *packetBytes; + + gRfuState->reqLength = 1; + packetBytes = gRfuState->txPacket->rfuPacket8.data; + packetBytes += sizeof(u32); + *packetBytes++ = unk0; + *packetBytes++ = unk1; + *packetBytes++ = 0; + *packetBytes = 0; + STWI_start_Command(); + } +} + +void STWI_send_ResumeRetransmitAndChangeREQ(void) +{ + if (!STWI_init(RFU_RESUME_RETRANSMIT_AND_CHANGE)) + { + gRfuState->reqLength = 0; + STWI_start_Command(); + } +} + +void STWI_send_DisconnectREQ(u8 unk) +{ + if (!STWI_init(RFU_DISCONNECT)) + { + gRfuState->reqLength = 1; + gRfuState->txPacket->rfuPacket32.data[0] = unk; + STWI_start_Command(); + } +} + +void STWI_send_TestModeREQ(u8 unk0, u8 unk1) +{ + if (!STWI_init(RFU_TEST_MODE)) + { + gRfuState->reqLength = 1; + gRfuState->txPacket->rfuPacket32.data[0] = unk0 | (unk1 << 8); + STWI_start_Command(); + } +} + +void STWI_send_CPR_StartREQ(u16 unk0, u16 unk1, u8 unk2) +{ + u32 *packetData; + u32 arg1; + + if (!STWI_init(RFU_CPR_START)) + { + gRfuState->reqLength = 2; + arg1 = unk1 | (unk0 << 16); + packetData = gRfuState->txPacket->rfuPacket32.data; + packetData[0] = arg1; + packetData[1] = unk2; + STWI_start_Command(); + } +} + +void STWI_send_CPR_PollingREQ(void) +{ + if (!STWI_init(RFU_CPR_POLLING)) + { + gRfuState->reqLength = 0; + STWI_start_Command(); + } +} + +void STWI_send_CPR_EndREQ(void) +{ + if (!STWI_init(RFU_CPR_END)) + { + gRfuState->reqLength = 0; + STWI_start_Command(); + } +} + +void STWI_send_StopModeREQ(void) +{ + if (!STWI_init(RFU_STOP_MODE)) + { + gRfuState->reqLength = 0; + STWI_start_Command(); + } +} + +static void STWI_intr_timer(void) +{ + switch (gRfuState->timerState) + { + // TODO: Make an enum for these + case 2: + gRfuState->timerActive = 1; + STWI_set_timer(50); + break; + case 1: + case 4: + STWI_stop_timer(); + STWI_restart_Command(); + break; + case 3: + gRfuState->timerActive = 1; + STWI_stop_timer(); + STWI_reset_ClockCounter(); + if (gRfuState->callbackM) + gRfuState->callbackM(255, 0); + break; + } +} + +static void STWI_set_timer(u8 unk) +{ + vu16 *timerL; + vu16 *timerH; + + timerL = ®_TMCNT_L(gRfuState->timerSelect); + timerH = ®_TMCNT_H(gRfuState->timerSelect); + REG_IME = 0; + switch (unk) + { + case 50: + *timerL = 0xFCCB; + gRfuState->timerState = 1; + break; + case 80: + *timerL = 0xFAE0; + gRfuState->timerState = 2; + break; + case 100: + *timerL = 0xF996; + gRfuState->timerState = 3; + break; + case 130: + *timerL = 0xF7AD; + gRfuState->timerState = 4; + break; + } + *timerH = TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_1024CLK; + REG_IF = INTR_FLAG_TIMER0 << gRfuState->timerSelect; + REG_IME = 1; +} + +static void STWI_stop_timer(void) +{ + gRfuState->timerState = 0; + REG_TMCNT_L(gRfuState->timerSelect) = 0; + REG_TMCNT_H(gRfuState->timerSelect) = 0; +} + +static u16 STWI_init(u8 request) +{ + if (!REG_IME) + { + gRfuState->error = 6; + if (gRfuState->callbackM) + gRfuState->callbackM(request, gRfuState->error); + return TRUE; + } + else if (gRfuState->unk_2c == TRUE) + { + gRfuState->error = 2; + gRfuState->unk_2c = FALSE; + if (gRfuState->callbackM) + gRfuState->callbackM(request, gRfuState->error); + return TRUE; + } + else if(!gRfuState->msMode) + { + gRfuState->error = 4; + if (gRfuState->callbackM) + gRfuState->callbackM(request, gRfuState->error, gRfuState); + return TRUE; + } + else + { + gRfuState->unk_2c = TRUE; + gRfuState->reqActiveCommand = request; + gRfuState->state = 0; + gRfuState->reqLength = 0; + gRfuState->reqNext = 0; + gRfuState->ackLength = 0; + gRfuState->ackNext = 0; + gRfuState->ackActiveCommand = 0; + gRfuState->timerState = 0; + gRfuState->timerActive = 0; + gRfuState->error = 0; + gRfuState->recoveryCount = 0; + REG_RCNT = 0x100; + REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; + return FALSE; + } +} + +static s32 STWI_start_Command(void) +{ + u16 imeTemp; + + // equivalent to gRfuState->txPacket->rfuPacket32.command, + // but the cast here is required to avoid register issue + *(u32 *)gRfuState->txPacket->rfuPacket8.data = 0x99660000 | (gRfuState->reqLength << 8) | gRfuState->reqActiveCommand; + REG_SIODATA32 = gRfuState->txPacket->rfuPacket32.command; + gRfuState->state = 0; + gRfuState->reqNext = 1; + imeTemp = REG_IME; + REG_IME = 0; + REG_IE |= (INTR_FLAG_TIMER0 << gRfuState->timerSelect); + REG_IE |= INTR_FLAG_SERIAL; + REG_IME = imeTemp; + REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_MULTI_BUSY | SIO_115200_BPS; + return 0; +} + +static s32 STWI_restart_Command(void) +{ + if (gRfuState->recoveryCount <= 1) + { + ++gRfuState->recoveryCount; + STWI_start_Command(); + } + else + { + if (gRfuState->reqActiveCommand == RFU_MS_CHANGE || gRfuState->reqActiveCommand == RFU_DATA_TX_AND_CHANGE || gRfuState->reqActiveCommand == RFU_UNK35 || gRfuState->reqActiveCommand == RFU_RESUME_RETRANSMIT_AND_CHANGE) + { + gRfuState->error = 1; + gRfuState->unk_2c = 0; + if (gRfuState->callbackM) + gRfuState->callbackM(gRfuState->reqActiveCommand, gRfuState->error); + } + else + { + gRfuState->error = 1; + gRfuState->unk_2c = 0; + if (gRfuState->callbackM) + gRfuState->callbackM(gRfuState->reqActiveCommand, gRfuState->error); + gRfuState->state = 4; // TODO: what's 4 + } + } + return 0; +} + +static s32 STWI_reset_ClockCounter(void) +{ + gRfuState->state = 5; // TODO: what is 5 + gRfuState->reqLength = 0; + gRfuState->reqNext = 0; + REG_SIODATA32 = (1 << 31); + REG_SIOCNT = 0; + REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; + REG_SIOCNT = (SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS) + 0x7F; + return 0; +} -- cgit v1.2.3 From 973cb394b23002acde7d7ea19abc754019dd106c Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sun, 29 Dec 2019 06:24:26 +0800 Subject: librfu through 0x81E13F0 --- asm/librfu.s | 1943 -------------------------------------------- common_syms/librfu_rfu.txt | 7 + data/librfu_rodata.s | 1 - include/constants/trade.h | 4 +- include/gba/io_reg.h | 2 +- include/gba/syscall.h | 2 + include/librfu.h | 37 +- ld_script.txt | 1 + src/agb_flash.c | 2 +- src/librfu_rfu.c | 736 +++++++++++++++++ src/librfu_stwi.c | 21 +- sym_common.txt | 23 +- 12 files changed, 782 insertions(+), 1997 deletions(-) create mode 100644 common_syms/librfu_rfu.txt create mode 100644 src/librfu_rfu.c diff --git a/asm/librfu.s b/asm/librfu.s index 2e17aef23..d3b48f07e 100644 --- a/asm/librfu.s +++ b/asm/librfu.s @@ -5,1949 +5,6 @@ .text - thumb_func_start rfu_initializeAPI -rfu_initializeAPI: @ 81E05B0 - push {r4-r7,lr} - adds r4, r0, 0 - mov r12, r2 - lsls r1, 16 - lsrs r2, r1, 16 - lsls r3, 24 - lsrs r7, r3, 24 - movs r0, 0xF0 - lsls r0, 20 - ands r0, r4 - movs r1, 0x80 - lsls r1, 18 - cmp r0, r1 - bne _081E05D0 - cmp r7, 0 - bne _081E05D8 -_081E05D0: - movs r0, 0x3 - ands r0, r4 - cmp r0, 0 - beq _081E05DC -_081E05D8: - movs r0, 0x2 - b _081E06C6 -_081E05DC: - cmp r7, 0 - beq _081E05E8 - ldr r3, _081E05E4 @ =0x00000e64 - b _081E05EA - .align 2, 0 -_081E05E4: .4byte 0x00000e64 -_081E05E8: - ldr r3, _081E05F4 @ =0x00000504 -_081E05EA: - cmp r2, r3 - bcs _081E05F8 - movs r0, 0x1 - b _081E06C6 - .align 2, 0 -_081E05F4: .4byte 0x00000504 -_081E05F8: - ldr r0, _081E06CC @ =gRfuLinkStatus - str r4, [r0] - ldr r1, _081E06D0 @ =gRfuStatic - adds r0, r4, 0 - adds r0, 0xB4 - str r0, [r1] - ldr r1, _081E06D4 @ =gRfuFixed - adds r0, 0x28 - str r0, [r1] - ldr r2, _081E06D8 @ =gRfuSlotStatusNI - movs r1, 0xDE - lsls r1, 1 - adds r0, r4, r1 - str r0, [r2] - ldr r1, _081E06DC @ =gRfuSlotStatusUNI - movs r3, 0xDF - lsls r3, 2 - adds r0, r4, r3 - str r0, [r1] - movs r5, 0x1 - adds r6, r2, 0 - adds r4, r1, 0 -_081E0624: - lsls r2, r5, 2 - adds r3, r2, r6 - subs r1, r5, 0x1 - lsls r1, 2 - adds r0, r1, r6 - ldr r0, [r0] - adds r0, 0x70 - str r0, [r3] - adds r2, r4 - adds r1, r4 - ldr r0, [r1] - adds r0, 0x1C - str r0, [r2] - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x3 - bls _081E0624 - ldr r0, _081E06D4 @ =gRfuFixed - ldr r1, [r0] - adds r1, 0xDC - ldr r4, _081E06DC @ =gRfuSlotStatusUNI - ldr r0, [r4, 0xC] - adds r0, 0x1C - str r0, [r1] - mov r1, r12 - adds r2, r7, 0 - bl STWI_init_all - bl rfu_STC_clearAPIVariables - movs r5, 0 - ldr r3, _081E06D8 @ =gRfuSlotStatusNI - movs r2, 0 -_081E0668: - lsls r1, r5, 2 - adds r0, r1, r3 - ldr r0, [r0] - str r2, [r0, 0x68] - str r2, [r0, 0x6C] - adds r1, r4 - ldr r0, [r1] - str r2, [r0, 0x14] - str r2, [r0, 0x18] - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x3 - bls _081E0668 - ldr r1, _081E06E0 @ =rfu_STC_fastCopy - movs r5, 0x2 - negs r5, r5 - ands r5, r1 - ldr r2, _081E06D4 @ =gRfuFixed - ldr r0, [r2] - adds r4, r0, 0 - adds r4, 0x8 - ldr r0, _081E06E4 @ =rfu_REQ_changeMasterSlave - subs r0, r1 - lsls r0, 15 - lsrs r3, r0, 16 - subs r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - ldr r0, _081E06E8 @ =0x0000ffff - cmp r3, r0 - beq _081E06BC - adds r6, r0, 0 -_081E06AA: - ldrh r0, [r5] - strh r0, [r4] - adds r5, 0x2 - adds r4, 0x2 - subs r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, r6 - bne _081E06AA -_081E06BC: - ldr r1, [r2] - adds r0, r1, 0 - adds r0, 0x9 - str r0, [r1, 0x4] - movs r0, 0 -_081E06C6: - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_081E06CC: .4byte gRfuLinkStatus -_081E06D0: .4byte gRfuStatic -_081E06D4: .4byte gRfuFixed -_081E06D8: .4byte gRfuSlotStatusNI -_081E06DC: .4byte gRfuSlotStatusUNI -_081E06E0: .4byte rfu_STC_fastCopy -_081E06E4: .4byte rfu_REQ_changeMasterSlave -_081E06E8: .4byte 0x0000ffff - thumb_func_end rfu_initializeAPI - - thumb_func_start rfu_STC_clearAPIVariables -rfu_STC_clearAPIVariables: @ 81E06EC - push {r4-r7,lr} - sub sp, 0x4 - ldr r1, _081E0760 @ =0x04000208 - ldrh r0, [r1] - adds r7, r0, 0 - movs r6, 0 - strh r6, [r1] - ldr r5, _081E0764 @ =gRfuStatic - ldr r1, [r5] - ldrb r4, [r1] - mov r0, sp - strh r6, [r0] - ldr r2, _081E0768 @ =0x01000014 - bl CpuSet - ldr r2, [r5] - movs r0, 0x8 - ands r4, r0 - movs r1, 0 - strb r4, [r2] - mov r0, sp - adds r0, 0x2 - strh r1, [r0] - ldr r4, _081E076C @ =gRfuLinkStatus - ldr r1, [r4] - ldr r2, _081E0770 @ =0x0100005a - bl CpuSet - ldr r1, [r4] - movs r0, 0x4 - strb r0, [r1, 0x9] - ldr r0, [r5] - strb r6, [r0, 0x6] - ldr r1, [r4] - movs r0, 0xFF - strb r0, [r1] - bl rfu_clearAllSlot - ldr r0, [r5] - strb r6, [r0, 0x9] - movs r2, 0 - movs r3, 0 -_081E0740: - ldr r0, [r5] - lsls r1, r2, 1 - adds r0, 0x12 - adds r0, r1 - strh r3, [r0] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3 - bls _081E0740 - ldr r0, _081E0760 @ =0x04000208 - strh r7, [r0] - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081E0760: .4byte 0x04000208 -_081E0764: .4byte gRfuStatic -_081E0768: .4byte 0x01000014 -_081E076C: .4byte gRfuLinkStatus -_081E0770: .4byte 0x0100005a - thumb_func_end rfu_STC_clearAPIVariables - - thumb_func_start rfu_REQ_PARENT_resumeRetransmitAndChange -rfu_REQ_PARENT_resumeRetransmitAndChange: @ 81E0774 - push {lr} - ldr r0, _081E0784 @ =rfu_STC_REQ_callback - bl STWI_set_Callback_M - bl STWI_send_ResumeRetransmitAndChangeREQ - pop {r0} - bx r0 - .align 2, 0 -_081E0784: .4byte rfu_STC_REQ_callback - thumb_func_end rfu_REQ_PARENT_resumeRetransmitAndChange - - thumb_func_start rfu_UNI_PARENT_getDRAC_ACK -rfu_UNI_PARENT_getDRAC_ACK: @ 81E0788 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0 - strb r0, [r4] - ldr r5, _081E07A0 @ =gRfuLinkStatus - ldr r0, [r5] - ldrb r0, [r0] - cmp r0, 0x1 - beq _081E07A4 - movs r0, 0xC0 - lsls r0, 2 - b _081E07CA - .align 2, 0 -_081E07A0: .4byte gRfuLinkStatus -_081E07A4: - bl rfu_getSTWIRecvBuffer - adds r1, r0, 0 - ldrb r0, [r1] - cmp r0, 0x28 - beq _081E07B4 - cmp r0, 0x36 - bne _081E07C8 -_081E07B4: - ldrb r0, [r1, 0x1] - cmp r0, 0 - bne _081E07C0 - ldr r0, [r5] - ldrb r0, [r0, 0x2] - b _081E07C2 -_081E07C0: - ldrb r0, [r1, 0x4] -_081E07C2: - strb r0, [r4] - movs r0, 0 - b _081E07CA -_081E07C8: - movs r0, 0x10 -_081E07CA: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end rfu_UNI_PARENT_getDRAC_ACK - - thumb_func_start rfu_setTimerInterrupt -rfu_setTimerInterrupt: @ 81E07D0 - push {lr} - adds r2, r0, 0 - adds r0, r1, 0 - lsls r2, 24 - lsrs r2, 24 - adds r1, r2, 0 - bl STWI_init_timer - pop {r0} - bx r0 - thumb_func_end rfu_setTimerInterrupt - - thumb_func_start rfu_getSTWIRecvBuffer -rfu_getSTWIRecvBuffer: @ 81E07E4 - ldr r0, _081E07F0 @ =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r0, [r0] - bx lr - .align 2, 0 -_081E07F0: .4byte gRfuFixed - thumb_func_end rfu_getSTWIRecvBuffer - - thumb_func_start rfu_setMSCCallback -rfu_setMSCCallback: @ 81E07F4 - push {lr} - bl STWI_set_Callback_S - pop {r0} - bx r0 - thumb_func_end rfu_setMSCCallback - - thumb_func_start rfu_setREQCallback -rfu_setREQCallback: @ 81E0800 - push {lr} - adds r1, r0, 0 - ldr r0, _081E0818 @ =gRfuFixed - ldr r0, [r0] - str r1, [r0] - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - bl rfu_enableREQCallback - pop {r0} - bx r0 - .align 2, 0 -_081E0818: .4byte gRfuFixed - thumb_func_end rfu_setREQCallback - - thumb_func_start rfu_enableREQCallback -rfu_enableREQCallback: @ 81E081C - push {lr} - lsls r0, 24 - cmp r0, 0 - beq _081E0834 - ldr r0, _081E0830 @ =gRfuStatic - ldr r2, [r0] - ldrb r1, [r2] - movs r0, 0x8 - orrs r0, r1 - b _081E083E - .align 2, 0 -_081E0830: .4byte gRfuStatic -_081E0834: - ldr r0, _081E0844 @ =gRfuStatic - ldr r2, [r0] - ldrb r1, [r2] - movs r0, 0xF7 - ands r0, r1 -_081E083E: - strb r0, [r2] - pop {r0} - bx r0 - .align 2, 0 -_081E0844: .4byte gRfuStatic - thumb_func_end rfu_enableREQCallback - - thumb_func_start rfu_STC_REQ_callback -rfu_STC_REQ_callback: @ 81E0848 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 16 - lsrs r4, r1, 16 - ldr r0, _081E087C @ =rfu_CB_defaultCallback - bl STWI_set_Callback_M - ldr r0, _081E0880 @ =gRfuStatic - ldr r0, [r0] - strh r4, [r0, 0x1C] - ldrb r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _081E0876 - ldr r0, _081E0884 @ =gRfuFixed - ldr r0, [r0] - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl _call_via_r2 -_081E0876: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081E087C: .4byte rfu_CB_defaultCallback -_081E0880: .4byte gRfuStatic -_081E0884: .4byte gRfuFixed - thumb_func_end rfu_STC_REQ_callback - - thumb_func_start rfu_CB_defaultCallback -rfu_CB_defaultCallback: @ 81E0888 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 16 - lsrs r3, r1, 16 - cmp r0, 0xFF - bne _081E08E4 - ldr r0, _081E08EC @ =gRfuStatic - ldr r0, [r0] - ldrb r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _081E08B2 - ldr r0, _081E08F0 @ =gRfuFixed - ldr r0, [r0] - ldr r2, [r0] - movs r0, 0xFF - adds r1, r3, 0 - bl _call_via_r2 -_081E08B2: - ldr r0, _081E08F4 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r1, [r0, 0x2] - ldrb r0, [r0, 0x3] - adds r5, r0, 0 - orrs r5, r1 - movs r4, 0 -_081E08C0: - adds r0, r5, 0 - asrs r0, r4 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _081E08D2 - adds r0, r4, 0 - bl rfu_STC_removeLinkData -_081E08D2: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _081E08C0 - ldr r0, _081E08F4 @ =gRfuLinkStatus - ldr r1, [r0] - movs r0, 0xFF - strb r0, [r1] -_081E08E4: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081E08EC: .4byte gRfuStatic -_081E08F0: .4byte gRfuFixed -_081E08F4: .4byte gRfuLinkStatus - thumb_func_end rfu_CB_defaultCallback - - thumb_func_start rfu_waitREQComplete -rfu_waitREQComplete: @ 81E08F8 - push {lr} - bl STWI_poll_CommandEnd - ldr r0, _081E0908 @ =gRfuStatic - ldr r0, [r0] - ldrh r0, [r0, 0x1C] - pop {r1} - bx r1 - .align 2, 0 -_081E0908: .4byte gRfuStatic - thumb_func_end rfu_waitREQComplete - - thumb_func_start rfu_REQ_RFUStatus -rfu_REQ_RFUStatus: @ 81E090C - push {lr} - ldr r0, _081E091C @ =rfu_STC_REQ_callback - bl STWI_set_Callback_M - bl STWI_send_SystemStatusREQ - pop {r0} - bx r0 - .align 2, 0 -_081E091C: .4byte rfu_STC_REQ_callback - thumb_func_end rfu_REQ_RFUStatus - - thumb_func_start rfu_getRFUStatus -rfu_getRFUStatus: @ 81E0920 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _081E0938 @ =gRfuFixed - ldr r0, [r5] - adds r0, 0xDC - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0x93 - beq _081E093C - movs r0, 0x10 - b _081E0956 - .align 2, 0 -_081E0938: .4byte gRfuFixed -_081E093C: - bl STWI_poll_CommandEnd - lsls r0, 16 - cmp r0, 0 - bne _081E0950 - ldr r0, [r5] - adds r0, 0xDC - ldr r0, [r0] - ldrb r0, [r0, 0x7] - b _081E0952 -_081E0950: - movs r0, 0xFF -_081E0952: - strb r0, [r4] - movs r0, 0 -_081E0956: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end rfu_getRFUStatus - - thumb_func_start rfu_MBOOT_CHILD_inheritanceLinkStatus -rfu_MBOOT_CHILD_inheritanceLinkStatus: @ 81E095C - push {lr} - ldr r2, _081E0964 @ =_Str_RFU_MBOOT - ldr r3, _081E0968 @ =0x30000F0 - b _081E0976 - .align 2, 0 -_081E0964: .4byte _Str_RFU_MBOOT -_081E0968: .4byte 0x30000F0 -_081E096C: - ldrb r0, [r3] - adds r3, 0x1 - adds r2, 0x1 - cmp r1, r0 - bne _081E09CC -_081E0976: - ldrb r1, [r2] - cmp r1, 0 - bne _081E096C - movs r2, 0xC0 - lsls r2, 18 - movs r3, 0 - movs r1, 0 -_081E0984: - ldrh r0, [r2] - adds r0, r3, r0 - lsls r0, 16 - lsrs r3, r0, 16 - adds r2, 0x2 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x59 - bls _081E0984 - ldr r0, _081E09C0 @ =0x30000FA - ldrh r0, [r0] - cmp r3, r0 - bne _081E09CC - movs r0, 0xC0 - lsls r0, 18 - ldr r1, _081E09C4 @ =gRfuLinkStatus - ldr r1, [r1] - movs r2, 0x5A - bl CpuSet - ldr r0, _081E09C8 @ =gRfuStatic - ldr r2, [r0] - ldrb r1, [r2] - movs r0, 0x80 - orrs r0, r1 - strb r0, [r2] - movs r0, 0 - b _081E09CE - .align 2, 0 -_081E09C0: .4byte 0x30000FA -_081E09C4: .4byte gRfuLinkStatus -_081E09C8: .4byte gRfuStatic -_081E09CC: - movs r0, 0x1 -_081E09CE: - pop {r1} - bx r1 - thumb_func_end rfu_MBOOT_CHILD_inheritanceLinkStatus - - thumb_func_start rfu_REQ_stopMode -rfu_REQ_stopMode: @ 81E09D4 - push {lr} - ldr r0, _081E09F4 @ =0x04000208 - ldrh r0, [r0] - cmp r0, 0 - bne _081E09FC - movs r0, 0x3D - movs r1, 0x6 - bl rfu_STC_REQ_callback - ldr r0, _081E09F8 @ =gRfuState - ldr r1, [r0] - ldrh r0, [r1, 0x12] - movs r0, 0x6 - strh r0, [r1, 0x12] - b _081E0A72 - .align 2, 0 -_081E09F4: .4byte 0x04000208 -_081E09F8: .4byte gRfuState -_081E09FC: - bl AgbRFU_SoftReset - bl rfu_STC_clearAPIVariables - movs r0, 0x8 - bl sub_81E349C - ldr r1, _081E0A4C @ =0x00008001 - cmp r0, r1 - bne _081E0A60 - ldr r0, _081E0A50 @ =gRfuState - ldr r0, [r0] - ldrb r0, [r0, 0xA] - lsls r0, 2 - ldr r2, _081E0A54 @ =0x04000100 - adds r1, r0, r2 - movs r0, 0 - str r0, [r1] - movs r0, 0x83 - lsls r0, 16 - str r0, [r1] - ldr r0, [r1] - lsls r0, 16 - ldr r2, _081E0A58 @ =0x0105ffff - ldr r3, _081E0A5C @ =rfu_CB_stopMode - cmp r0, r2 - bhi _081E0A3A -_081E0A32: - ldr r0, [r1] - lsls r0, 16 - cmp r0, r2 - bls _081E0A32 -_081E0A3A: - movs r0, 0 - str r0, [r1] - adds r0, r3, 0 - bl STWI_set_Callback_M - bl STWI_send_StopModeREQ - b _081E0A72 - .align 2, 0 -_081E0A4C: .4byte 0x00008001 -_081E0A50: .4byte gRfuState -_081E0A54: .4byte 0x04000100 -_081E0A58: .4byte 0x0105ffff -_081E0A5C: .4byte rfu_CB_stopMode -_081E0A60: - ldr r1, _081E0A78 @ =0x04000128 - movs r2, 0x80 - lsls r2, 6 - adds r0, r2, 0 - strh r0, [r1] - movs r0, 0x3D - movs r1, 0 - bl rfu_STC_REQ_callback -_081E0A72: - pop {r0} - bx r0 - .align 2, 0 -_081E0A78: .4byte 0x04000128 - thumb_func_end rfu_REQ_stopMode - - thumb_func_start rfu_CB_stopMode -rfu_CB_stopMode: @ 81E0A7C - push {r4,lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r1, 16 - lsrs r1, 16 - adds r2, r1, 0 - cmp r2, 0 - bne _081E0A96 - ldr r1, _081E0AA4 @ =0x04000128 - movs r4, 0x80 - lsls r4, 6 - adds r0, r4, 0 - strh r0, [r1] -_081E0A96: - adds r0, r3, 0 - adds r1, r2, 0 - bl rfu_STC_REQ_callback - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081E0AA4: .4byte 0x04000128 - thumb_func_end rfu_CB_stopMode - - thumb_func_start rfu_REQBN_softReset_and_checkID -rfu_REQBN_softReset_and_checkID: @ 81E0AA8 - push {lr} - ldr r0, _081E0AB8 @ =0x04000208 - ldrh r0, [r0] - cmp r0, 0 - bne _081E0ABC - movs r0, 0x1 - negs r0, r0 - b _081E0ADC - .align 2, 0 -_081E0AB8: .4byte 0x04000208 -_081E0ABC: - bl AgbRFU_SoftReset - bl rfu_STC_clearAPIVariables - movs r0, 0x1E - bl sub_81E349C - adds r2, r0, 0 - cmp r2, 0 - bne _081E0ADA - ldr r1, _081E0AE0 @ =0x04000128 - movs r3, 0x80 - lsls r3, 6 - adds r0, r3, 0 - strh r0, [r1] -_081E0ADA: - adds r0, r2, 0 -_081E0ADC: - pop {r1} - bx r1 - .align 2, 0 -_081E0AE0: .4byte 0x04000128 - thumb_func_end rfu_REQBN_softReset_and_checkID - - thumb_func_start rfu_REQ_reset -rfu_REQ_reset: @ 81E0AE4 - push {lr} - ldr r0, _081E0AF4 @ =rfu_CB_reset - bl STWI_set_Callback_M - bl STWI_send_ResetREQ - pop {r0} - bx r0 - .align 2, 0 -_081E0AF4: .4byte rfu_CB_reset - thumb_func_end rfu_REQ_reset - - thumb_func_start rfu_CB_reset -rfu_CB_reset: @ 81E0AF8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 16 - lsrs r1, 16 - adds r4, r1, 0 - cmp r4, 0 - bne _081E0B0C - bl rfu_STC_clearAPIVariables -_081E0B0C: - adds r0, r5, 0 - adds r1, r4, 0 - bl rfu_STC_REQ_callback - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end rfu_CB_reset - - thumb_func_start rfu_REQ_configSystem -rfu_REQ_configSystem: @ 81E0B1C - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 24 - lsrs r5, 24 - lsls r2, 24 - lsrs r6, r2, 24 - ldr r0, _081E0B54 @ =rfu_STC_REQ_callback - bl STWI_set_Callback_M - movs r0, 0x3 - ands r4, r0 - movs r0, 0x3C - orrs r4, r0 - adds r0, r4, 0 - adds r1, r5, 0 - adds r2, r6, 0 - bl STWI_send_SystemConfigREQ - cmp r6, 0 - bne _081E0B5C - ldr r0, _081E0B58 @ =gRfuStatic - ldr r1, [r0] - movs r0, 0x1 - strh r0, [r1, 0x1A] - b _081E0B76 - .align 2, 0 -_081E0B54: .4byte rfu_STC_REQ_callback -_081E0B58: .4byte gRfuStatic -_081E0B5C: - ldr r5, _081E0B7C @ =0x04000208 - ldrh r4, [r5] - movs r0, 0 - strh r0, [r5] - movs r0, 0x96 - lsls r0, 2 - adds r1, r6, 0 - bl Div - ldr r1, _081E0B80 @ =gRfuStatic - ldr r1, [r1] - strh r0, [r1, 0x1A] - strh r4, [r5] -_081E0B76: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081E0B7C: .4byte 0x04000208 -_081E0B80: .4byte gRfuStatic - thumb_func_end rfu_REQ_configSystem - - thumb_func_start rfu_REQ_configGameData -rfu_REQ_configGameData: @ 81E0B84 - push {r4-r7,lr} - sub sp, 0x10 - adds r4, r2, 0 - adds r7, r3, 0 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r2, r1, 16 - adds r5, r4, 0 - mov r0, sp - strb r1, [r0] - lsrs r2, 24 - strb r2, [r0, 0x1] - cmp r6, 0 - beq _081E0BAA - movs r1, 0x80 - orrs r2, r1 - movs r1, 0 - orrs r2, r1 - strb r2, [r0, 0x1] -_081E0BAA: - movs r2, 0x2 - ldr r0, _081E0C0C @ =rfu_CB_configGameData - mov r12, r0 -_081E0BB0: - mov r3, sp - adds r1, r3, r2 - ldrb r0, [r4] - strb r0, [r1] - adds r4, 0x1 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xE - bls _081E0BB0 - movs r3, 0 - adds r1, r7, 0 - movs r2, 0 -_081E0BCA: - ldrb r0, [r1] - adds r0, r3, r0 - lsls r0, 24 - adds r1, 0x1 - lsrs r0, 24 - ldrb r3, [r5] - adds r0, r3 - lsls r0, 24 - lsrs r3, r0, 24 - adds r5, 0x1 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x7 - bls _081E0BCA - mov r1, sp - mvns r0, r3 - strb r0, [r1, 0xF] - cmp r6, 0 - beq _081E0BF6 - movs r0, 0 - strb r0, [r1, 0xE] -_081E0BF6: - mov r0, r12 - bl STWI_set_Callback_M - mov r0, sp - adds r1, r7, 0 - bl STWI_send_GameConfigREQ - add sp, 0x10 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081E0C0C: .4byte rfu_CB_configGameData - thumb_func_end rfu_REQ_configGameData - - thumb_func_start rfu_CB_configGameData -rfu_CB_configGameData: @ 81E0C10 - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - mov r12, r0 - lsls r1, 16 - lsrs r7, r1, 16 - cmp r7, 0 - bne _081E0C9A - ldr r0, _081E0C54 @ =gRfuState - ldr r0, [r0] - ldr r1, [r0, 0x24] - ldr r0, _081E0C58 @ =gRfuLinkStatus - ldr r6, [r0] - ldrb r2, [r1, 0x4] - adds r5, r6, 0 - adds r5, 0x98 - strh r2, [r5] - ldrb r0, [r1, 0x5] - lsls r3, r0, 8 - orrs r3, r2 - strh r3, [r5] - adds r4, r1, 0x6 - movs r1, 0x80 - lsls r1, 8 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _081E0C5C - eors r3, r1 - strh r3, [r5] - adds r1, r6, 0 - adds r1, 0x97 - movs r0, 0x1 - b _081E0C62 - .align 2, 0 -_081E0C54: .4byte gRfuState -_081E0C58: .4byte gRfuLinkStatus -_081E0C5C: - adds r1, r6, 0 - adds r1, 0x97 - movs r0, 0 -_081E0C62: - strb r0, [r1] - movs r2, 0 - ldr r3, _081E0CA8 @ =gRfuLinkStatus -_081E0C68: - ldr r0, [r3] - adds r0, 0x9A - adds r0, r2 - ldrb r1, [r4] - strb r1, [r0] - adds r4, 0x1 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xC - bls _081E0C68 - adds r4, 0x1 - movs r2, 0 - ldr r3, _081E0CA8 @ =gRfuLinkStatus -_081E0C84: - ldr r0, [r3] - adds r0, 0xA9 - adds r0, r2 - ldrb r1, [r4] - strb r1, [r0] - adds r4, 0x1 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x7 - bls _081E0C84 -_081E0C9A: - mov r0, r12 - adds r1, r7, 0 - bl rfu_STC_REQ_callback - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081E0CA8: .4byte gRfuLinkStatus - thumb_func_end rfu_CB_configGameData - - thumb_func_start rfu_REQ_startSearchChild -rfu_REQ_startSearchChild: @ 81E0CAC - push {lr} - ldr r0, _081E0CDC @ =rfu_CB_defaultCallback - bl STWI_set_Callback_M - bl STWI_send_SystemStatusREQ - bl STWI_poll_CommandEnd - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _081E0CE4 - ldr r0, _081E0CE0 @ =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r0, [r0] - ldrb r0, [r0, 0x7] - cmp r0, 0 - bne _081E0CEA - movs r0, 0x1 - bl rfu_STC_clearLinkStatus - b _081E0CEA - .align 2, 0 -_081E0CDC: .4byte rfu_CB_defaultCallback -_081E0CE0: .4byte gRfuFixed -_081E0CE4: - movs r0, 0x19 - bl rfu_STC_REQ_callback -_081E0CEA: - ldr r0, _081E0CF8 @ =rfu_CB_startSearchChild - bl STWI_set_Callback_M - bl STWI_send_SC_StartREQ - pop {r0} - bx r0 - .align 2, 0 -_081E0CF8: .4byte rfu_CB_startSearchChild - thumb_func_end rfu_REQ_startSearchChild - - thumb_func_start rfu_CB_startSearchChild -rfu_CB_startSearchChild: @ 81E0CFC - push {lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r1, 16 - lsrs r1, 16 - adds r2, r1, 0 - cmp r2, 0 - bne _081E0D14 - ldr r0, _081E0D20 @ =gRfuStatic - ldr r1, [r0] - movs r0, 0x1 - strb r0, [r1, 0x9] -_081E0D14: - adds r0, r3, 0 - adds r1, r2, 0 - bl rfu_STC_REQ_callback - pop {r0} - bx r0 - .align 2, 0 -_081E0D20: .4byte gRfuStatic - thumb_func_end rfu_CB_startSearchChild - - thumb_func_start rfu_STC_clearLinkStatus -rfu_STC_clearLinkStatus: @ 81E0D24 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl rfu_clearAllSlot - cmp r4, 0 - beq _081E0D4C - mov r0, sp - movs r5, 0 - strh r5, [r0] - ldr r4, _081E0D80 @ =gRfuLinkStatus - ldr r1, [r4] - adds r1, 0x14 - ldr r2, _081E0D84 @ =0x01000040 - bl CpuSet - ldr r0, [r4] - strb r5, [r0, 0x8] -_081E0D4C: - movs r1, 0 - ldr r2, _081E0D80 @ =gRfuLinkStatus - adds r4, r2, 0 - movs r3, 0 -_081E0D54: - ldr r0, [r4] - adds r0, 0xA - adds r0, r1 - strb r3, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x3 - bls _081E0D54 - ldr r0, [r2] - movs r1, 0 - strb r1, [r0, 0x1] - ldr r0, [r2] - strb r1, [r0, 0x2] - ldr r0, [r2] - strb r1, [r0, 0x3] - ldr r0, [r2] - strb r1, [r0, 0x7] - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081E0D80: .4byte gRfuLinkStatus -_081E0D84: .4byte 0x01000040 - thumb_func_end rfu_STC_clearLinkStatus - - thumb_func_start rfu_REQ_pollSearchChild -rfu_REQ_pollSearchChild: @ 81E0D88 - push {lr} - ldr r0, _081E0D98 @ =rfu_CB_pollAndEndSearchChild - bl STWI_set_Callback_M - bl STWI_send_SC_PollingREQ - pop {r0} - bx r0 - .align 2, 0 -_081E0D98: .4byte rfu_CB_pollAndEndSearchChild - thumb_func_end rfu_REQ_pollSearchChild - - thumb_func_start rfu_REQ_endSearchChild -rfu_REQ_endSearchChild: @ 81E0D9C - push {lr} - ldr r0, _081E0DAC @ =rfu_CB_pollAndEndSearchChild - bl STWI_set_Callback_M - bl STWI_send_SC_EndREQ - pop {r0} - bx r0 - .align 2, 0 -_081E0DAC: .4byte rfu_CB_pollAndEndSearchChild - thumb_func_end rfu_REQ_endSearchChild - - thumb_func_start rfu_CB_pollAndEndSearchChild -rfu_CB_pollAndEndSearchChild: @ 81E0DB0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 16 - lsrs r6, r1, 16 - cmp r6, 0 - bne _081E0DC2 - bl rfu_STC_readChildList -_081E0DC2: - cmp r4, 0x1A - bne _081E0E04 - ldr r5, _081E0DF8 @ =gRfuLinkStatus - ldr r0, [r5] - adds r0, 0x94 - ldrh r0, [r0] - cmp r0, 0 - bne _081E0E20 - ldr r0, _081E0DFC @ =rfu_CB_defaultCallback - bl STWI_set_Callback_M - bl STWI_send_SystemStatusREQ - bl STWI_poll_CommandEnd - lsls r0, 16 - cmp r0, 0 - bne _081E0E20 - ldr r1, [r5] - ldr r0, _081E0E00 @ =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r0, [r0] - ldrh r0, [r0, 0x4] - adds r1, 0x94 - strh r0, [r1] - b _081E0E20 - .align 2, 0 -_081E0DF8: .4byte gRfuLinkStatus -_081E0DFC: .4byte rfu_CB_defaultCallback -_081E0E00: .4byte gRfuFixed -_081E0E04: - cmp r4, 0x1B - bne _081E0E20 - ldr r0, _081E0E30 @ =gRfuLinkStatus - ldr r1, [r0] - ldrb r0, [r1] - cmp r0, 0xFF - bne _081E0E18 - adds r1, 0x94 - movs r0, 0 - strh r0, [r1] -_081E0E18: - ldr r0, _081E0E34 @ =gRfuStatic - ldr r1, [r0] - movs r0, 0 - strb r0, [r1, 0x9] -_081E0E20: - adds r0, r4, 0 - adds r1, r6, 0 - bl rfu_STC_REQ_callback - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081E0E30: .4byte gRfuLinkStatus -_081E0E34: .4byte gRfuStatic - thumb_func_end rfu_CB_pollAndEndSearchChild - - thumb_func_start rfu_STC_readChildList -rfu_STC_readChildList: @ 81E0E38 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - ldr r1, _081E0F64 @ =gRfuFixed - ldr r0, [r1] - adds r0, 0xDC - ldr r0, [r0] - ldrb r2, [r0, 0x1] - mov r8, r2 - adds r4, r1, 0 - cmp r2, 0 - beq _081E0E96 - ldr r5, [r0, 0x4] - ldr r0, _081E0F68 @ =rfu_CB_defaultCallback - bl STWI_set_Callback_M - bl STWI_send_LinkStatusREQ - bl STWI_poll_CommandEnd - lsls r0, 16 - cmp r0, 0 - bne _081E0E8A - ldr r0, [r4] - adds r0, 0xDC - ldr r0, [r0] - adds r4, r0, 0x4 - movs r2, 0 -_081E0E76: - mov r0, sp - adds r1, r0, r2 - ldrb r0, [r4] - strb r0, [r1] - adds r4, 0x1 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3 - bls _081E0E76 -_081E0E8A: - ldr r0, _081E0F64 @ =gRfuFixed - ldr r1, [r0] - adds r1, 0xDC - ldr r1, [r1] - str r5, [r1, 0x4] - adds r4, r0, 0 -_081E0E96: - ldr r0, [r4] - adds r0, 0xDC - ldr r0, [r0] - adds r4, r0, 0x4 - mov r1, r8 - cmp r1, 0 - beq _081E0F52 - ldr r2, _081E0F6C @ =gRfuStatic - mov r9, r2 - ldr r7, _081E0F70 @ =gRfuLinkStatus - mov r10, r9 -_081E0EAC: - ldrb r2, [r4, 0x2] - adds r5, r2, 0 - cmp r2, 0x3 - bhi _081E0F42 - ldr r1, [r7] - ldrb r0, [r1, 0x2] - asrs r0, r2 - movs r6, 0x1 - ands r0, r6 - cmp r0, 0 - bne _081E0F42 - ldrb r3, [r1, 0x3] - asrs r3, r2 - ands r3, r6 - cmp r3, 0 - bne _081E0F42 - mov r1, sp - adds r0, r1, r2 - ldrb r0, [r0] - mov r12, r10 - cmp r0, 0 - beq _081E0EE6 - mov r0, r9 - ldr r1, [r0] - adds r1, 0xE - adds r1, r2 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_081E0EE6: - mov r1, r9 - ldr r0, [r1] - adds r0, 0xE - adds r1, r0, r5 - ldrb r0, [r1] - cmp r0, 0x3 - bls _081E0F42 - strb r3, [r1] - ldr r0, [r7] - adds r0, 0xA - adds r0, r5 - movs r1, 0xFF - strb r1, [r0] - ldr r2, [r7] - adds r0, r6, 0 - lsls r0, r5 - ldrb r1, [r2, 0x2] - orrs r0, r1 - strb r0, [r2, 0x2] - ldr r1, [r7] - ldrb r0, [r1, 0x1] - adds r0, 0x1 - strb r0, [r1, 0x1] - ldr r1, [r7] - lsls r3, r5, 5 - adds r1, r3 - ldrh r0, [r4] - strh r0, [r1, 0x14] - strb r5, [r1, 0x16] - ldr r0, [r7] - strb r6, [r0] - mov r0, r12 - ldr r2, [r0] - ldrb r1, [r2] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2] - mov r2, r12 - ldr r1, [r2] - lsls r0, r5, 1 - adds r1, 0x12 - adds r1, r0 - ldr r0, [r7] - adds r0, r3 - ldrh r0, [r0, 0x14] - strh r0, [r1] -_081E0F42: - mov r0, r8 - subs r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - adds r4, 0x4 - cmp r0, 0 - bne _081E0EAC -_081E0F52: - 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 -_081E0F64: .4byte gRfuFixed -_081E0F68: .4byte rfu_CB_defaultCallback -_081E0F6C: .4byte gRfuStatic -_081E0F70: .4byte gRfuLinkStatus - thumb_func_end rfu_STC_readChildList - - thumb_func_start rfu_REQ_startSearchParent -rfu_REQ_startSearchParent: @ 81E0F74 - push {lr} - ldr r0, _081E0F84 @ =rfu_CB_startSearchParent - bl STWI_set_Callback_M - bl STWI_send_SP_StartREQ - pop {r0} - bx r0 - .align 2, 0 -_081E0F84: .4byte rfu_CB_startSearchParent - thumb_func_end rfu_REQ_startSearchParent - - thumb_func_start rfu_CB_startSearchParent -rfu_CB_startSearchParent: @ 81E0F88 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 16 - lsrs r1, 16 - adds r4, r1, 0 - cmp r4, 0 - bne _081E0F9E - movs r0, 0 - bl rfu_STC_clearLinkStatus -_081E0F9E: - adds r0, r5, 0 - adds r1, r4, 0 - bl rfu_STC_REQ_callback - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end rfu_CB_startSearchParent - - thumb_func_start rfu_REQ_pollSearchParent -rfu_REQ_pollSearchParent: @ 81E0FAC - push {lr} - ldr r0, _081E0FBC @ =rfu_CB_pollSearchParent - bl STWI_set_Callback_M - bl STWI_send_SP_PollingREQ - pop {r0} - bx r0 - .align 2, 0 -_081E0FBC: .4byte rfu_CB_pollSearchParent - thumb_func_end rfu_REQ_pollSearchParent - - thumb_func_start rfu_CB_pollSearchParent -rfu_CB_pollSearchParent: @ 81E0FC0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 16 - lsrs r1, 16 - adds r4, r1, 0 - cmp r4, 0 - bne _081E0FD4 - bl rfu_STC_readParentCandidateList -_081E0FD4: - adds r0, r5, 0 - adds r1, r4, 0 - bl rfu_STC_REQ_callback - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end rfu_CB_pollSearchParent - - thumb_func_start rfu_REQ_endSearchParent -rfu_REQ_endSearchParent: @ 81E0FE4 - push {lr} - ldr r0, _081E0FF4 @ =rfu_STC_REQ_callback - bl STWI_set_Callback_M - bl STWI_send_SP_EndREQ - pop {r0} - bx r0 - .align 2, 0 -_081E0FF4: .4byte rfu_STC_REQ_callback - thumb_func_end rfu_REQ_endSearchParent - - thumb_func_start rfu_STC_readParentCandidateList -rfu_STC_readParentCandidateList: @ 81E0FF8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - mov r0, sp - movs r4, 0 - strh r4, [r0] - ldr r5, _081E10A0 @ =gRfuLinkStatus - ldr r1, [r5] - adds r1, 0x14 - ldr r2, _081E10A4 @ =0x01000040 - bl CpuSet - ldr r0, _081E10A8 @ =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r2, [r0] - ldrb r7, [r2, 0x1] - adds r2, 0x4 - ldr r0, [r5] - strb r4, [r0, 0x8] - movs r6, 0 - cmp r7, 0 - beq _081E10FC - mov r12, r5 - ldr r0, _081E10AC @ =0x00007fff - mov r8, r0 -_081E102E: - subs r0, r7, 0x7 - lsls r0, 24 - lsrs r7, r0, 24 - adds r1, r2, 0x6 - adds r2, 0x13 - ldrb r0, [r2] - mvns r0, r0 - lsls r0, 24 - lsrs r5, r0, 24 - adds r2, 0x1 - movs r4, 0 - movs r3, 0 - adds r6, 0x1 -_081E1048: - ldrb r0, [r2] - adds r0, r4, r0 - lsls r0, 24 - adds r2, 0x1 - lsrs r0, 24 - ldrb r4, [r1] - adds r0, r4 - lsls r0, 24 - lsrs r4, r0, 24 - adds r1, 0x1 - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x7 - bls _081E1048 - cmp r4, r5 - bne _081E10F0 - subs r2, 0x1C - mov r0, r12 - ldr r1, [r0] - ldrb r0, [r1, 0x8] - lsls r0, 5 - adds r0, 0x14 - adds r4, r1, r0 - ldrh r0, [r2] - movs r3, 0 - strh r0, [r4] - adds r2, 0x2 - ldrb r0, [r2] - strb r0, [r4, 0x2] - adds r2, 0x2 - ldrh r1, [r2] - mov r0, r8 - ands r0, r1 - strh r0, [r4, 0x4] - ldrh r1, [r2] - movs r0, 0x80 - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _081E10B0 - movs r0, 0x1 - strb r0, [r4, 0x3] - b _081E10B2 - .align 2, 0 -_081E10A0: .4byte gRfuLinkStatus -_081E10A4: .4byte 0x01000040 -_081E10A8: .4byte gRfuFixed -_081E10AC: .4byte 0x00007fff -_081E10B0: - strb r3, [r4, 0x3] -_081E10B2: - adds r2, 0x2 - movs r3, 0 - adds r5, r4, 0 - adds r5, 0x15 - adds r4, 0x6 -_081E10BC: - adds r1, r4, r3 - ldrb r0, [r2] - strb r0, [r1] - adds r2, 0x1 - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0xC - bls _081E10BC - adds r2, 0x1 - movs r3, 0 - adds r4, r5, 0 -_081E10D4: - adds r1, r4, r3 - ldrb r0, [r2] - strb r0, [r1] - adds r2, 0x1 - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x7 - bls _081E10D4 - mov r4, r12 - ldr r1, [r4] - ldrb r0, [r1, 0x8] - adds r0, 0x1 - strb r0, [r1, 0x8] -_081E10F0: - lsls r0, r6, 24 - lsrs r6, r0, 24 - cmp r6, 0x3 - bhi _081E10FC - cmp r7, 0 - bne _081E102E -_081E10FC: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end rfu_STC_readParentCandidateList - - thumb_func_start rfu_REQ_startConnectParent -rfu_REQ_startConnectParent: @ 81E1108 - push {r4,r5,lr} - lsls r0, 16 - lsrs r4, r0, 16 - movs r3, 0 - movs r2, 0 - ldr r1, _081E1154 @ =gRfuLinkStatus - ldr r0, [r1] - ldrh r0, [r0, 0x14] - cmp r0, r4 - beq _081E1134 - adds r5, r1, 0 -_081E111E: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3 - bhi _081E1134 - ldr r0, [r5] - lsls r1, r2, 5 - adds r0, r1 - ldrh r0, [r0, 0x14] - cmp r0, r4 - bne _081E111E -_081E1134: - cmp r2, 0x4 - bne _081E113C - movs r3, 0x80 - lsls r3, 1 -_081E113C: - cmp r3, 0 - bne _081E1160 - ldr r0, _081E1158 @ =gRfuStatic - ldr r0, [r0] - strh r4, [r0, 0x1E] - ldr r0, _081E115C @ =rfu_STC_REQ_callback - bl STWI_set_Callback_M - adds r0, r4, 0 - bl STWI_send_CP_StartREQ - b _081E1168 - .align 2, 0 -_081E1154: .4byte gRfuLinkStatus -_081E1158: .4byte gRfuStatic -_081E115C: .4byte rfu_STC_REQ_callback -_081E1160: - movs r0, 0x1F - adds r1, r3, 0 - bl rfu_STC_REQ_callback -_081E1168: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end rfu_REQ_startConnectParent - - thumb_func_start rfu_REQ_pollConnectParent -rfu_REQ_pollConnectParent: @ 81E1170 - push {lr} - ldr r0, _081E1180 @ =rfu_CB_pollConnectParent - bl STWI_set_Callback_M - bl STWI_send_CP_PollingREQ - pop {r0} - bx r0 - .align 2, 0 -_081E1180: .4byte rfu_CB_pollConnectParent - thumb_func_end rfu_REQ_pollConnectParent - - thumb_func_start rfu_CB_pollConnectParent -rfu_CB_pollConnectParent: @ 81E1184 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x2C - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x24] - lsls r1, 16 - lsrs r1, 16 - str r1, [sp, 0x28] - cmp r1, 0 - bne _081E1286 - ldr r0, _081E1240 @ =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r0, [r0] - ldrh r5, [r0, 0x4] - ldrb r1, [r0, 0x6] - mov r10, r1 - ldrb r0, [r0, 0x7] - cmp r0, 0 - bne _081E1286 - movs r0, 0x80 - lsls r0, 17 - lsls r0, r1 - lsrs r2, r0, 24 - ldr r4, _081E1244 @ =gRfuLinkStatus - ldr r3, [r4] - ldrb r1, [r3, 0x2] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _081E1286 - adds r0, r2, 0 - orrs r0, r1 - strb r0, [r3, 0x2] - ldr r1, [r4] - ldrb r0, [r1, 0x3] - bics r0, r2 - strb r0, [r1, 0x3] - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x94 - movs r2, 0 - strh r5, [r0] - ldrb r0, [r1, 0x1] - adds r0, 0x1 - strb r0, [r1, 0x1] - ldr r0, [r4] - strb r2, [r0] - ldr r3, _081E1248 @ =gRfuStatic - ldr r2, [r3] - ldrb r1, [r2] - movs r0, 0x80 - orrs r0, r1 - strb r0, [r2] - movs r5, 0 - adds r7, r4, 0 - add r6, sp, 0x20 - movs r0, 0 - mov r8, r0 -_081E1202: - ldr r2, [r7] - lsls r4, r5, 5 - adds r0, r2, r4 - ldr r1, [r3] - ldrh r0, [r0, 0x14] - ldrh r1, [r1, 0x1E] - cmp r0, r1 - bne _081E125A - ldrb r0, [r2, 0x8] - cmp r0, 0 - beq _081E1250 - mov r9, sp - adds r0, r4, 0 - adds r0, 0x14 - adds r0, r2, r0 - mov r1, sp - movs r2, 0x10 - bl CpuSet - mov r1, r8 - strh r1, [r6] - ldr r1, [r7] - adds r1, 0x14 - adds r0, r6, 0 - ldr r2, _081E124C @ =0x01000040 - bl CpuSet - ldr r0, [r7] - mov r1, r8 - strb r1, [r0, 0x8] - b _081E1264 - .align 2, 0 -_081E1240: .4byte gRfuFixed -_081E1244: .4byte gRfuLinkStatus -_081E1248: .4byte gRfuStatic -_081E124C: .4byte 0x01000040 -_081E1250: - adds r0, r4, 0 - adds r0, 0x14 - adds r2, r0 - mov r9, r2 - b _081E1264 -_081E125A: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _081E1202 -_081E1264: - cmp r5, 0x3 - bhi _081E1286 - ldr r4, _081E12A0 @ =gRfuLinkStatus - mov r0, r10 - lsls r5, r0, 5 - adds r0, r5, 0 - adds r0, 0x14 - ldr r1, [r4] - adds r1, r0 - mov r0, r9 - movs r2, 0x10 - bl CpuSet - ldr r0, [r4] - adds r0, r5 - mov r1, r10 - strb r1, [r0, 0x16] -_081E1286: - ldr r0, [sp, 0x24] - ldr r1, [sp, 0x28] - bl rfu_STC_REQ_callback - add sp, 0x2C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081E12A0: .4byte gRfuLinkStatus - thumb_func_end rfu_CB_pollConnectParent - - thumb_func_start rfu_getConnectParentStatus -rfu_getConnectParentStatus: @ 81E12A4 - push {lr} - adds r3, r0, 0 - movs r0, 0xFF - strb r0, [r3] - ldr r0, _081E12C4 @ =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r2, [r0] - ldrb r0, [r2] - adds r0, 0x60 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _081E12C8 - movs r0, 0x10 - b _081E12D4 - .align 2, 0 -_081E12C4: .4byte gRfuFixed -_081E12C8: - adds r2, 0x6 - ldrb r0, [r2] - strb r0, [r1] - ldrb r0, [r2, 0x1] - strb r0, [r3] - movs r0, 0 -_081E12D4: - pop {r1} - bx r1 - thumb_func_end rfu_getConnectParentStatus - - thumb_func_start rfu_REQ_endConnectParent -rfu_REQ_endConnectParent: @ 81E12D8 - push {lr} - ldr r0, _081E1304 @ =rfu_CB_pollConnectParent - bl STWI_set_Callback_M - bl STWI_send_CP_EndREQ - ldr r0, _081E1308 @ =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r1, [r0] - ldrb r0, [r1, 0x6] - cmp r0, 0x3 - bhi _081E1300 - ldr r0, _081E130C @ =gRfuStatic - ldr r0, [r0] - adds r0, 0xA - ldrb r1, [r1, 0x6] - adds r0, r1 - movs r1, 0 - strb r1, [r0] -_081E1300: - pop {r0} - bx r0 - .align 2, 0 -_081E1304: .4byte rfu_CB_pollConnectParent -_081E1308: .4byte gRfuFixed -_081E130C: .4byte gRfuStatic - thumb_func_end rfu_REQ_endConnectParent - - thumb_func_start rfu_syncVBlank -rfu_syncVBlank: @ 81E1310 - push {r4,r5,lr} - bl rfu_NI_checkCommFailCounter - ldr r0, _081E1358 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0xFF - beq _081E13E8 - ldr r4, _081E135C @ =gRfuStatic - ldr r1, [r4] - ldrb r0, [r1, 0x6] - cmp r0, 0 - beq _081E132E - subs r0, 0x1 - strb r0, [r1, 0x6] -_081E132E: - bl rfu_getMasterSlave - lsls r0, 24 - lsrs r3, r0, 24 - ldr r2, [r4] - ldrb r1, [r2] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _081E1360 - cmp r3, 0 - bne _081E136E - movs r0, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r1, [r4] - movs r0, 0xB4 - lsls r0, 1 - strh r0, [r1, 0x20] - b _081E136A - .align 2, 0 -_081E1358: .4byte gRfuLinkStatus -_081E135C: .4byte gRfuStatic -_081E1360: - cmp r3, 0 - beq _081E1380 - movs r0, 0xFB - ands r0, r1 - strb r0, [r2] -_081E136A: - cmp r3, 0 - beq _081E1380 -_081E136E: - ldr r3, _081E137C @ =gRfuStatic - ldr r2, [r3] - ldrb r1, [r2] - movs r0, 0xFD - ands r0, r1 - b _081E138A - .align 2, 0 -_081E137C: .4byte gRfuStatic -_081E1380: - ldr r3, _081E13DC @ =gRfuStatic - ldr r2, [r3] - ldrb r1, [r2] - movs r0, 0x2 - orrs r0, r1 -_081E138A: - strb r0, [r2] - ldr r3, [r3] - ldrb r1, [r3] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _081E13E8 - ldrh r0, [r3, 0x20] - cmp r0, 0 - bne _081E13E4 - movs r0, 0xFB - ands r0, r1 - strb r0, [r3] - ldr r0, _081E13E0 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r1, [r0, 0x2] - ldrb r0, [r0, 0x3] - adds r5, r0, 0 - orrs r5, r1 - movs r4, 0 -_081E13B2: - adds r0, r5, 0 - asrs r0, r4 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _081E13C4 - adds r0, r4, 0 - bl rfu_STC_removeLinkData -_081E13C4: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _081E13B2 - ldr r0, _081E13E0 @ =gRfuLinkStatus - ldr r1, [r0] - movs r0, 0xFF - strb r0, [r1] - movs r0, 0x1 - b _081E13EA - .align 2, 0 -_081E13DC: .4byte gRfuStatic -_081E13E0: .4byte gRfuLinkStatus -_081E13E4: - subs r0, 0x1 - strh r0, [r3, 0x20] -_081E13E8: - movs r0, 0 -_081E13EA: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end rfu_syncVBlank - thumb_func_start rfu_REQBN_watchLink rfu_REQBN_watchLink: @ 81E13F0 push {r4-r7,lr} diff --git a/common_syms/librfu_rfu.txt b/common_syms/librfu_rfu.txt new file mode 100644 index 000000000..142895733 --- /dev/null +++ b/common_syms/librfu_rfu.txt @@ -0,0 +1,7 @@ +gRfuState +gRfuSlotStatusUNI +gRfuSlotStatusNI +gRfuLinkStatus +gRfuStatic +gRfuFixed +gUnknown_3007470 diff --git a/data/librfu_rodata.s b/data/librfu_rodata.s index c6ca84f4b..d5e847aa3 100644 --- a/data/librfu_rodata.s +++ b/data/librfu_rodata.s @@ -25,4 +25,3 @@ _Str_RFU_MBOOT:: .align 2 _Str_Sio32ID:: .asciz "NINTENDOSio32ID_030820" - diff --git a/include/constants/trade.h b/include/constants/trade.h index b1371caab..b22cd26d2 100644 --- a/include/constants/trade.h +++ b/include/constants/trade.h @@ -1,4 +1,4 @@ - #ifndef GUARD_CONSTANTS_TRADE_H +#ifndef GUARD_CONSTANTS_TRADE_H #define GUARD_CONSTANTS_TRADE_H // TODO: document trade.c and trade_scene.c with corresponding macros @@ -115,4 +115,4 @@ #define CANT_REGISTER_MON 1 #define CANT_REGISTER_EGG 2 -#endif //GUARD_CONSTANTS_TRADE_H +#endif // GUARD_CONSTANTS_TRADE_H diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h index 8eacc8aa7..548e27163 100644 --- a/include/gba/io_reg.h +++ b/include/gba/io_reg.h @@ -461,7 +461,7 @@ #define REG_DMA3CNT_L (*(vu16 *)REG_ADDR_DMA3CNT_L) #define REG_DMA3CNT_H (*(vu16 *)REG_ADDR_DMA3CNT_H) -#define REG_TMCNT(n) (*(vu16 *)(REG_ADDR_TMCNT + ((n) * 4))) +#define REG_TMCNT(n) (*(vu32 *)(REG_ADDR_TMCNT + ((n) * 4))) #define REG_TMCNT_L(n) (*(vu16 *)(REG_ADDR_TMCNT_L + ((n) * 4))) #define REG_TMCNT_H(n) (*(vu16 *)(REG_ADDR_TMCNT_H + ((n) * 4))) #define REG_TM0CNT (*(vu32 *)REG_ADDR_TM0CNT) diff --git a/include/gba/syscall.h b/include/gba/syscall.h index deddec5ba..22fdf09fa 100644 --- a/include/gba/syscall.h +++ b/include/gba/syscall.h @@ -45,4 +45,6 @@ void RLUnCompVram(const void *src, void *dest); int MultiBoot(struct MultiBootParam *mp); +s32 Div(s32 num, s32 denom); + #endif // GUARD_GBA_SYSCALL_H diff --git a/include/librfu.h b/include/librfu.h index 709074f9c..9482b94c4 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -117,7 +117,7 @@ struct RfuStruct u8 unk_16; u8 unk_17; void (*callbackM)(); - void (*callbackS)(); + void (*callbackS)(u16); u32 callbackId; union RfuPacket *txPacket; union RfuPacket *rxPacket; @@ -145,7 +145,7 @@ struct RfuSlotStatusUNI u8 newDataFlag; u8 dataBlockFlag; void *recvBuffer; - u32 recvBuffSize; + u32 recvBufferSize; }; struct NIComm @@ -178,12 +178,12 @@ struct RfuSlotStatusNI struct RfuFixed { - void *reqCallback; + void (*reqCallback)(u16, u16); void *fastCopyPtr; u16 fastCopyBuffer[24]; u32 fastCopyBuffer2[12]; u32 LLFBuffer[29]; - u8 *STWIBuffer; + struct RfuIntrStruct *STWIBuffer; }; struct RfuStatic @@ -204,7 +204,7 @@ struct RfuStatic u16 unk_1a; u16 reqResult; u16 tryPid; - u32 watchdogTimer; + u16 watchdogTimer; u32 totalPacketSize; }; @@ -230,7 +230,7 @@ struct RfuLinkStatus u8 getNameFlag; u8 findParentCount; u8 watchInterval; - u8 stength[4]; + u8 strength[4]; u8 LLFReadyFlag; u8 remainLLFrameSizeParent; u8 remainLLFrameSizeChild[4]; @@ -266,19 +266,20 @@ extern struct RfuSlotStatusNI *gRfuSlotStatusNI[4]; extern struct RfuSlotStatusUNI *gRfuSlotStatusUNI[4]; extern struct Unk_3007470 gUnknown_3007470; +// librfu_rfu void rfu_STC_clearAPIVariables(void); void rfu_REQ_stopMode(void); -void rfu_waitREQComplete(void); -u32 rfu_REQBN_softReset_and_checkID(void); +u16 rfu_waitREQComplete(void); +s32 rfu_REQBN_softReset_and_checkID(void); void rfu_REQ_sendData(u8); void rfu_setMSCCallback(void (*func)(u16)); void rfu_setREQCallback(void (*func)(u16, u16)); bool8 rfu_getMasterSlave(void); void rfu_REQBN_watchLink(u16 a0, u8 *a1, u8 *a2, u8 *a3); -bool16 rfu_syncVBlank(void); +u16 rfu_syncVBlank(void); void rfu_REQ_reset(void); void rfu_REQ_configSystem(u16, u8, u8); -void rfu_REQ_configGameData(u8, u16, struct UnkLinkRfuStruct_02022B14 *, u8 *); +void rfu_REQ_configGameData(u8 r6, u16 r2, const u8 *r4, const u8 *r7); void rfu_REQ_startSearchChild(void); void rfu_REQ_pollSearchChild(void); void rfu_REQ_endSearchChild(void); @@ -293,18 +294,18 @@ void rfu_REQ_CHILD_pollConnectRecovery(void); void rfu_REQ_CHILD_endConnectRecovery(void); void rfu_REQ_changeMasterSlave(void); void rfu_REQ_RFUStatus(void); -void rfu_getRFUStatus(u8 *status); -u8 *rfu_getSTWIRecvBuffer(void); +u32 rfu_getRFUStatus(u8 *status); +struct RfuIntrStruct *rfu_getSTWIRecvBuffer(void); u8 rfu_NI_CHILD_setSendGameName(u8 a0, u8 a1); void rfu_clearSlot(u8 a0, u8 a1); void rfu_clearAllSlot(void); bool16 rfu_CHILD_getConnectRecoveryStatus(u8 *status); -bool16 rfu_getConnectParentStatus(u8 *status, u8 *a1); +u16 rfu_getConnectParentStatus(u8 *status, u8 *a1); bool16 rfu_UNI_PARENT_getDRAC_ACK(u8 *a0); void rfu_REQ_disconnect(u8 who); void rfu_changeSendTarget(u8 a0, u8 who, u8 a2); void rfu_NI_stopReceivingData(u8 who); -u16 rfu_initializeAPI(u32 *unk0, u16 unk1, IntrFunc *interrupt, bool8 copyInterruptToRam); +u16 rfu_initializeAPI(struct Unk_3001190 *unk0, u16 unk1, IntrFunc *interrupt, bool8 copyInterruptToRam); void rfu_setTimerInterrupt(u8 which, IntrFunc *intr); void rfu_setRecvBuffer(u8 a0, u8 a1, void *a2, size_t a3); bool16 rfu_UNI_setSendData(u8 flag, void *ptr, u8 size); @@ -318,12 +319,12 @@ void rfu_NI_setSendData(u8, u8, const void *, u32); void IntrSIO32(void); // librfu_stwi -void STWI_init_all(struct RfuIntrStruct * interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam); +void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam); void STWI_set_MS_mode(u8 mode); void STWI_init_Callback_M(void); void STWI_init_Callback_S(void); -void STWI_set_Callback_M(void (*callbackM)()); -void STWI_set_Callback_S(void (*callbackS)()); +void STWI_set_Callback_M(void *callbackM); +void STWI_set_Callback_S(void (*callbackS)(u16)); void STWI_init_timer(IntrFunc *interrupt, s32 timerSelect); void AgbRFU_SoftReset(void); void STWI_set_Callback_ID(u32 id); @@ -333,7 +334,7 @@ void STWI_send_DataRxREQ(void); void STWI_send_MS_ChangeREQ(void); void STWI_send_StopModeREQ(void); void STWI_send_SystemStatusREQ(void); -void STWI_send_GameConfigREQ(u8 *unk1, u8 *data); +void STWI_send_GameConfigREQ(const u8 *unk1, const u8 *data); void STWI_send_ResetREQ(void); void STWI_send_LinkStatusREQ(void); void STWI_send_VersionStatusREQ(void); diff --git a/ld_script.txt b/ld_script.txt index c57b7b4a0..89bf60c16 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -319,6 +319,7 @@ SECTIONS { src/agb_flash_le.o(.text); src/librfu_stwi.o(.text); asm/librfu_intr.o(.text); + src/librfu_rfu.o(.text); asm/librfu.o(.text); src/isagbprn.o(.text); asm/libagbsyscall.o(.text); diff --git a/src/agb_flash.c b/src/agb_flash.c index 5b171abcb..7eb4ae737 100644 --- a/src/agb_flash.c +++ b/src/agb_flash.c @@ -74,7 +74,7 @@ u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void)) return 1; sTimerNum = timerNum; - sTimerReg = ®_TMCNT(sTimerNum); + sTimerReg = ®_TMCNT_L(sTimerNum); *intrFunc = FlashTimerIntr; return 0; } diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c new file mode 100644 index 000000000..96f4e9519 --- /dev/null +++ b/src/librfu_rfu.c @@ -0,0 +1,736 @@ +#include "global.h" +#include "librfu.h" + +void rfu_CB_defaultCallback(u8, u16); +void rfu_CB_reset(u8, u16); +void rfu_CB_configGameData(u8, u16); +void rfu_CB_stopMode(u8, u16); +void rfu_CB_startSearchChild(u8, u16); +void rfu_CB_pollAndEndSearchChild(u8, u16); +void rfu_CB_startSearchParent(u8, u16); +void rfu_CB_pollSearchParent(u8, u16); +void rfu_CB_pollConnectParent(u8, u16); +void rfu_CB_pollConnectParent(u8, u16); +s32 sub_81E349C(u8); +void rfu_enableREQCallback(bool8); +void rfu_STC_readChildList(void); +void rfu_STC_readParentCandidateList(void); +void rfu_STC_REQ_callback(u8, u16); +void rfu_STC_removeLinkData(u8, u8); +void rfu_STC_fastCopy(u8 **a1, u8 **a2, s32 a3); +void rfu_STC_clearLinkStatus(u8); +void rfu_NI_checkCommFailCounter(void); + +extern const char _Str_RFU_MBOOT[]; + +struct RfuStruct *gRfuState; +ALIGNED(8) struct RfuSlotStatusUNI *gRfuSlotStatusUNI[4]; +struct RfuSlotStatusNI *gRfuSlotStatusNI[4]; +struct RfuLinkStatus *gRfuLinkStatus; +struct RfuStatic *gRfuStatic; +struct RfuFixed *gRfuFixed; +ALIGNED(8) struct Unk_3007470 gUnknown_3007470; + +u16 rfu_initializeAPI(struct Unk_3001190 *unk0, u16 unk1, IntrFunc *interrupt, bool8 copyInterruptToRam) +{ + u16 i; + u16 *dst; + const u16 *src; + u16 r3; + + // is in EWRAM? + if (((u32)unk0 & 0xF000000) == 0x2000000 && copyInterruptToRam) + return 2; + // is not 4-byte aligned? + if ((u32)unk0 & 3) + return 2; + // Nintendo pls, just use a ternary for once + if (copyInterruptToRam) + { + // An assert/debug print may have existed before, ie + // printf("%s %u < %u", "somefile.c:12345", unk1, num) + // to push this into r3? + r3 = 0xe64; + if (unk1 < r3) + return 1; + } + if (!copyInterruptToRam) + { + r3 = 0x504; // same as above, this should be r3 not r0 + if (unk1 < r3) + return 1; + } + gRfuLinkStatus = &unk0->linkStatus; + gRfuStatic = &unk0->static_; + gRfuFixed = &unk0->fixed; + gRfuSlotStatusNI[0] = &unk0->NI[0]; + gRfuSlotStatusUNI[0] = &unk0->UNI[0]; + for (i = 1; i < NELEMS(gRfuSlotStatusNI); ++i) + { + gRfuSlotStatusNI[i] = &gRfuSlotStatusNI[i - 1][1]; + gRfuSlotStatusUNI[i] = &gRfuSlotStatusUNI[i - 1][1]; + } + // TODO: Is it possible to fix the following 2 statements? + // It's equivalent to: + // gRfuFixed->STWIBuffer = &unk0->intr; + // STWI_init_all(&unk0->intr, interrupt, copyInterruptToRam); + gRfuFixed->STWIBuffer = (struct RfuIntrStruct *)&gRfuSlotStatusUNI[3][1]; + STWI_init_all((struct RfuIntrStruct *)&gRfuSlotStatusUNI[3][1], interrupt, copyInterruptToRam); + rfu_STC_clearAPIVariables(); + for (i = 0; i < NELEMS(gRfuSlotStatusNI); ++i) + { + gRfuSlotStatusNI[i]->recvBuffer = 0; + gRfuSlotStatusNI[i]->recvBufferSize = 0; + gRfuSlotStatusUNI[i]->recvBuffer = 0; + gRfuSlotStatusUNI[i]->recvBufferSize = 0; + } + src = (const u16 *)((u32)&rfu_STC_fastCopy & ~1); + dst = gRfuFixed->fastCopyBuffer; + // rfu_REQ_changeMasterSlave is the function next to rfu_STC_fastCopy + for (r3 = ((void *)rfu_REQ_changeMasterSlave - (void *)rfu_STC_fastCopy) / sizeof(u16), --r3; r3 != 0xFFFF; --r3) + *dst++ = *src++; + gRfuFixed->fastCopyPtr = (u8 *)gRfuFixed->fastCopyBuffer + 1; + return 0; +} + +void rfu_STC_clearAPIVariables(void) +{ + u16 IMEBackup = REG_IME; + u8 i, r4; + + REG_IME = 0; + r4 = gRfuStatic->flags; + CpuFill16(0, gRfuStatic, sizeof(struct RfuStatic)); + gRfuStatic->flags = r4 & 8; + CpuFill16(0, gRfuLinkStatus, sizeof(struct RfuLinkStatus)); + gRfuLinkStatus->watchInterval = 4; + gRfuStatic->nowWatchInterval = 0; + gRfuLinkStatus->connMode = 0xFF; + rfu_clearAllSlot(); + gRfuStatic->SCStartFlag = 0; + for (i = 0; i < NELEMS(gRfuStatic->cidBak); ++i) + gRfuStatic->cidBak[i] = 0; + REG_IME = IMEBackup; +} + +void rfu_REQ_PARENT_resumeRetransmitAndChange(void) +{ + STWI_set_Callback_M(rfu_STC_REQ_callback); + STWI_send_ResumeRetransmitAndChangeREQ(); +} + +u16 rfu_UNI_PARENT_getDRAC_ACK(u8 *ackFlag) +{ + struct RfuIntrStruct *buf; + *ackFlag = 0; + if (gRfuLinkStatus->connMode != 1) + return 0x300; + buf = rfu_getSTWIRecvBuffer(); + switch (buf->rxPacketAlloc.rfuPacket8.data[0]) + { + case 40: + case 54: + if (buf->rxPacketAlloc.rfuPacket8.data[1] == 0) + *ackFlag = gRfuLinkStatus->connSlotFlag; + else + *ackFlag = buf->rxPacketAlloc.rfuPacket8.data[4]; + return 0; + default: + return 0x10; + } +} + +void rfu_setTimerInterrupt(u8 which, IntrFunc *intr) +{ + STWI_init_timer(intr, which); +} + +struct RfuIntrStruct *rfu_getSTWIRecvBuffer(void) +{ + return gRfuFixed->STWIBuffer; +} + +void rfu_setMSCCallback(void (*callback)(u16)) +{ + STWI_set_Callback_S(callback); +} + +void rfu_setREQCallback(void (*callback)(u16, u16)) +{ + gRfuFixed->reqCallback = callback; + rfu_enableREQCallback(callback != NULL); +} + +void rfu_enableREQCallback(bool8 enable) +{ + if (enable) + gRfuStatic->flags |= 8; + else + gRfuStatic->flags &= 0xF7; +} + +void rfu_STC_REQ_callback(u8 r5, u16 reqResult) +{ + STWI_set_Callback_M(rfu_CB_defaultCallback); + gRfuStatic->reqResult = reqResult; + if (gRfuStatic->flags & 8) + gRfuFixed->reqCallback(r5, reqResult); +} + +void rfu_CB_defaultCallback(u8 r0, u16 reqResult) +{ + s32 r5; + u8 i; + + if (r0 == 0xFF) + { + if (gRfuStatic->flags & 8) + gRfuFixed->reqCallback(r0, reqResult); + r5 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; + for (i = 0; i < 4; ++i) + if ((r5 >> i) & 1) + rfu_STC_removeLinkData(i, 1); + gRfuLinkStatus->connMode = 0xFF; + } +} + +u16 rfu_waitREQComplete(void) +{ + STWI_poll_CommandEnd(); + return gRfuStatic->reqResult; +} + +void rfu_REQ_RFUStatus(void) +{ + STWI_set_Callback_M(rfu_STC_REQ_callback); + STWI_send_SystemStatusREQ(); +} + +u32 rfu_getRFUStatus(u8 *status) +{ + if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0] != 0x93) + return 0x10; + if (STWI_poll_CommandEnd() == 0) + *status = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7]; + else + *status = 0xFF; + return 0; +} + +s32 rfu_MBOOT_CHILD_inheritanceLinkStatus(void) +{ + const char *s1 = _Str_RFU_MBOOT; + char *s2 = (char *)0x30000F0; + u16 checksum; + u16 *r2; + u8 i; + + while (*s1 != '\0') + if (*s1++ != *s2++) + return 1; + r2 = (u16 *)0x3000000; + checksum = 0; + for (i = 0; i < 90; ++i) + checksum += *r2++; + if (checksum != *(u16 *)0x30000FA) + return 1; + CpuCopy16((u16 *)0x3000000, gRfuLinkStatus, sizeof(struct RfuLinkStatus)); + gRfuStatic->flags |= 0x80; + return 0; +} + +void rfu_REQ_stopMode(void) +{ + vu32 *timerReg; + + if (REG_IME == 0) + { + rfu_STC_REQ_callback(61, 6); + gRfuState->error = 6; + } + else + { + AgbRFU_SoftReset(); + rfu_STC_clearAPIVariables(); + if (sub_81E349C(8) == 0x8001) + { + timerReg = ®_TMCNT(gRfuState->timerSelect); + *timerReg = 0; + *timerReg = (TIMER_ENABLE | TIMER_1024CLK) << 16; + while (*timerReg << 16 < 262 << 16) + ; + *timerReg = 0; + STWI_set_Callback_M(rfu_CB_stopMode); + STWI_send_StopModeREQ(); + } + else + { + REG_SIOCNT = SIO_MULTI_MODE; + rfu_STC_REQ_callback(61, 0); + } + } +} + +void rfu_CB_stopMode(u8 a1, u16 reqResult) +{ + if (reqResult == 0) + REG_SIOCNT = SIO_MULTI_MODE; + rfu_STC_REQ_callback(a1, reqResult); +} + +s32 rfu_REQBN_softReset_and_checkID(void) +{ + s32 r2; + + if (REG_IME == 0) + return -1; + AgbRFU_SoftReset(); + rfu_STC_clearAPIVariables(); + if ((r2 = sub_81E349C(30)) == 0) + REG_SIOCNT = SIO_MULTI_MODE; + return r2; +} + +void rfu_REQ_reset(void) +{ + STWI_set_Callback_M(rfu_CB_reset); + STWI_send_ResetREQ(); +} + +void rfu_CB_reset(u8 a1, u16 reqResult) +{ + if (reqResult == 0) + rfu_STC_clearAPIVariables(); + rfu_STC_REQ_callback(a1, reqResult); +} + +void rfu_REQ_configSystem(u16 r4, u8 r5, u8 r6) +{ + STWI_set_Callback_M(rfu_STC_REQ_callback); + STWI_send_SystemConfigREQ((r4 & 3) | 0x3C, r5, r6); + if (r6 == 0) + { + gRfuStatic->unk_1a = 1; + } + else + { + u16 IMEBackup = REG_IME; + + REG_IME = 0; + gRfuStatic->unk_1a = Div(600, r6); + REG_IME = IMEBackup; + } +} + +void rfu_REQ_configGameData(u8 r6, u16 r2, const u8 *r4, const u8 *r7) +{ + u8 sp[16]; + u8 i; + u8 r3; + const u8 *r5 = r4; + const u8 *r1; + + sp[0] = r2; + sp[1] = r2 >> 8; + if (r6 != 0) + sp[1] = (r2 >> 8) | 0x80; + for (i = 2; i < 15; ++i) + sp[i] = *r4++; + r3 = 0; + r1 = r7; + for (i = 0; i < 8; ++i) + { + r3 += *r1++; + r3 += *r5++; + } + sp[15] = ~r3; + if (r6 != 0) + sp[14] = 0; + STWI_set_Callback_M(rfu_CB_configGameData); + STWI_send_GameConfigREQ(sp, r7); +} + +void rfu_CB_configGameData(u8 ip, u16 r7) +{ + s32 r2, r3; + u8 *r4; + u8 i; + u8 *r1; + + if (r7 == 0) + { + r1 = gRfuState->txPacket->rfuPacket8.data; + r2 = gRfuLinkStatus->my.serialNum = r1[4]; + gRfuLinkStatus->my.serialNum = (r1[5] << 8) | r2; + r4 = &r1[6]; + if (gRfuLinkStatus->my.serialNum & 0x8000) + { + gRfuLinkStatus->my.serialNum = gRfuLinkStatus->my.serialNum ^ 0x8000; + gRfuLinkStatus->my.multibootFlag = 1; + } + else + { + gRfuLinkStatus->my.multibootFlag = 0; + } + for (i = 0; i < NELEMS(gRfuLinkStatus->my.gname) - 2; ++i) + gRfuLinkStatus->my.gname[i] = *r4++; + ++r4; + for (i = 0; i < NELEMS(gRfuLinkStatus->my.uname) - 1; ++i) + gRfuLinkStatus->my.uname[i] = *r4++; + } + rfu_STC_REQ_callback(ip, r7); +} + +void rfu_REQ_startSearchChild(void) +{ + u16 r1; + + STWI_set_Callback_M(rfu_CB_defaultCallback); + STWI_send_SystemStatusREQ(); + r1 = STWI_poll_CommandEnd(); + if (r1 == 0) + { + if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0) + rfu_STC_clearLinkStatus(1); + } + else + { + rfu_STC_REQ_callback(25, r1); + } + STWI_set_Callback_M(rfu_CB_startSearchChild); + STWI_send_SC_StartREQ(); +} + +void rfu_CB_startSearchChild(u8 r3, u16 reqResult) +{ + if (reqResult == 0) + gRfuStatic->SCStartFlag = 1; + rfu_STC_REQ_callback(r3, reqResult); +} + +void rfu_STC_clearLinkStatus(u8 r4) +{ + u8 i; + + rfu_clearAllSlot(); + if (r4 != 0) + { + CpuFill16(0, gRfuLinkStatus->partner, sizeof(gRfuLinkStatus->partner)); + gRfuLinkStatus->findParentCount = 0; + } + for (i = 0; i < NELEMS(gRfuLinkStatus->strength); ++i) + gRfuLinkStatus->strength[i] = 0; + gRfuLinkStatus->connCount = 0; + gRfuLinkStatus->connSlotFlag = 0; + gRfuLinkStatus->linkLossSlotFlag = 0; + gRfuLinkStatus->getNameFlag = 0; +} + +void rfu_REQ_pollSearchChild(void) +{ + STWI_set_Callback_M(rfu_CB_pollAndEndSearchChild); + STWI_send_SC_PollingREQ(); +} + +void rfu_REQ_endSearchChild(void) +{ + STWI_set_Callback_M(rfu_CB_pollAndEndSearchChild); + STWI_send_SC_EndREQ(); +} + +void rfu_CB_pollAndEndSearchChild(u8 r4, u16 reqResult) +{ + if (reqResult == 0) + rfu_STC_readChildList(); + if (r4 == 26) + { + if (gRfuLinkStatus->my.id == 0) + { + STWI_set_Callback_M(rfu_CB_defaultCallback); + STWI_send_SystemStatusREQ(); + if (STWI_poll_CommandEnd() == 0) + gRfuLinkStatus->my.id = *(u16 *)&gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0]; + } + } + else if (r4 == 27) + { + if (gRfuLinkStatus->connMode == 255) + gRfuLinkStatus->my.id = 0; + gRfuStatic->SCStartFlag = 0; + } + rfu_STC_REQ_callback(r4, reqResult); +} + +void rfu_STC_readChildList(void) +{ + u32 r5; + u8 r8 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1]; + u8 *r4; + u8 i; + u8 sp[4]; + u8 r2; + + if (r8 != 0) + { + r5 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0]; + STWI_set_Callback_M(rfu_CB_defaultCallback); + STWI_send_LinkStatusREQ(); + if (STWI_poll_CommandEnd() == 0) + { + r4 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4]; + for (i = 0; i < NELEMS(sp); ++i) + sp[i] = *r4++; + } + gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] = r5; + } + for (r4 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4]; + r8 != 0; + r4 += 4) + { + r2 = r4[2]; + if (r2 < 4 && !((gRfuLinkStatus->connSlotFlag >> r2) & 1) && !((gRfuLinkStatus->linkLossSlotFlag >> r2) & 1)) + { + if (sp[r2] != 0) + ++gRfuStatic->lsFixedCount[r2]; + if (gRfuStatic->lsFixedCount[r2] >= 4) + { + gRfuStatic->lsFixedCount[r2] = 0; + gRfuLinkStatus->strength[r2] = 0xFF; + gRfuLinkStatus->connSlotFlag |= 1 << r2; + ++gRfuLinkStatus->connCount; + gRfuLinkStatus->partner[r2].id = *(u16 *)r4; + gRfuLinkStatus->partner[r2].slot = r2; + gRfuLinkStatus->connMode = 1; + gRfuStatic->flags &= 0x7F; + gRfuStatic->cidBak[r2] = gRfuLinkStatus->partner[r2].id; + } + } + --r8; + } +} + +void rfu_REQ_startSearchParent(void) +{ + STWI_set_Callback_M(rfu_CB_startSearchParent); + STWI_send_SP_StartREQ(); +} + +void rfu_CB_startSearchParent(u8 r5, u16 reqResult) +{ + if (reqResult == 0) + rfu_STC_clearLinkStatus(0); + rfu_STC_REQ_callback(r5, reqResult); +} + +void rfu_REQ_pollSearchParent(void) +{ + STWI_set_Callback_M(rfu_CB_pollSearchParent); + STWI_send_SP_PollingREQ(); +} + +void rfu_CB_pollSearchParent(u8 r5, u16 reqResult) +{ + if (reqResult == 0) + rfu_STC_readParentCandidateList(); + rfu_STC_REQ_callback(r5, reqResult); +} + +void rfu_REQ_endSearchParent(void) +{ + STWI_set_Callback_M(rfu_STC_REQ_callback); + STWI_send_SP_EndREQ(); +} + +void rfu_STC_readParentCandidateList(void) +{ + u8 r7, r6, r5, r4, r3; + u8 *r1, *r2; + struct RfuTgtData *r4_; + + CpuFill16(0, gRfuLinkStatus->partner, sizeof(gRfuLinkStatus->partner)); + r2 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0]; + r7 = r2[1]; + r2 += 4; + gRfuLinkStatus->findParentCount = 0; + for (r6 = 0; r6 < 4 && r7 != 0; ++r6) + { + r7 -= 7; + r1 = r2 + 6; + r2 += 19; + r5 = ~*r2; + ++r2; + r4 = 0; + for (r3 = 0; r3 < 8; ++r3) + { + r4 += *r2++; + r4 += *r1++; + } + if (r4 == r5) + { + r2 -= 28; + r4_ = &gRfuLinkStatus->partner[gRfuLinkStatus->findParentCount]; + r4_->id = *(u16 *)r2; + r2 += 2; + r4_->slot = *r2; + r2 += 2; + r4_->serialNum = *(u16 *)r2 & 0x7FFF; + if (*(u16 *)r2 & 0x8000) + r4_->multibootFlag = 1; + else + r4_->multibootFlag = 0; + r2 += 2; + for (r3 = 0; r3 < NELEMS(r4_->gname) - 2; ++r3) + r4_->gname[r3] = *r2++; + ++r2; + for (r3 = 0; r3 < NELEMS(r4_->uname) - 1; ++r3) + r4_->uname[r3] = *r2++; + ++gRfuLinkStatus->findParentCount; + } + } +} + +void rfu_REQ_startConnectParent(u16 r4) +{ + u16 r3 = 0; + u8 i; + for (i = 0; i < NELEMS(gRfuLinkStatus->partner) && gRfuLinkStatus->partner[i].id != r4; ++i) + ; + if (i == 4) + r3 = 256; + if (r3 == 0) + { + gRfuStatic->tryPid = r4; + STWI_set_Callback_M(rfu_STC_REQ_callback); + STWI_send_CP_StartREQ(r4); + } + else + { + rfu_STC_REQ_callback(31, r3); + } +} + +void rfu_REQ_pollConnectParent(void) +{ + STWI_set_Callback_M(rfu_CB_pollConnectParent); + STWI_send_CP_PollingREQ(); +} + +void rfu_CB_pollConnectParent(u8 sp24, u16 sp28) +{ + u16 id; + u8 slot; + u8 r2, r5; + struct RfuTgtData *r9; + struct RfuTgtData sp; + + if (sp28 == 0) + { + id = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0]; + slot = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[6]; + if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0) + { + r2 = 1 << slot; + if (!(r2 & gRfuLinkStatus->connSlotFlag)) + { + gRfuLinkStatus->connSlotFlag |= r2; + gRfuLinkStatus->linkLossSlotFlag &= ~r2; + gRfuLinkStatus->my.id = id; + ++gRfuLinkStatus->connCount; + gRfuLinkStatus->connMode = 0; + gRfuStatic->flags |= 0x80; + for (r5 = 0; r5 < NELEMS(gRfuLinkStatus->partner); ++r5) + { + if (gRfuLinkStatus->partner[r5].id == gRfuStatic->tryPid) + { + if (gRfuLinkStatus->findParentCount != 0) + { + r9 = &sp; + CpuCopy16(&gRfuLinkStatus->partner[r5], &sp, sizeof(struct RfuTgtData)); + CpuFill16(0, gRfuLinkStatus->partner, sizeof(gRfuLinkStatus->partner)); + gRfuLinkStatus->findParentCount = 0; + } + else + { + r9 = &gRfuLinkStatus->partner[r5]; + } + break; + } + } + if (r5 < 4) + { + CpuCopy16(r9, &gRfuLinkStatus->partner[slot], sizeof(struct RfuTgtData)); + gRfuLinkStatus->partner[slot].slot = slot; + } + } + } + } + rfu_STC_REQ_callback(sp24, sp28); +} + +u16 rfu_getConnectParentStatus(u8 *status, u8 *r1) +{ + u8 r0, *r2; + + *status = 0xFF; + r2 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data; + r0 = r2[0] + 96; + if (r0 <= 1) + { + r2 += 6; + *r1 = r2[0]; + *status = r2[1]; + return 0; + } + return 0x10; +} + +void rfu_REQ_endConnectParent(void) +{ + STWI_set_Callback_M(rfu_CB_pollConnectParent); + STWI_send_CP_EndREQ(); + if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[6] < 4) + gRfuStatic->linkEmergencyFlag[gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[6]] = 0; +} + +u16 rfu_syncVBlank(void) +{ + u8 r3, r4; + s32 r5; + + rfu_NI_checkCommFailCounter(); + if (gRfuLinkStatus->connMode == 0xFF) + return 0; + if (gRfuStatic->nowWatchInterval != 0) + --gRfuStatic->nowWatchInterval; + r3 = rfu_getMasterSlave(); + if (!(gRfuStatic->flags & 2)) + { + if (r3 == 0) + { + gRfuStatic->flags |= 4; + gRfuStatic->watchdogTimer = 360; + } + } + else if (r3 != 0) + { + gRfuStatic->flags &= 0xFB; + } + if (r3 != 0) + gRfuStatic->flags &= 0xFD; + else + gRfuStatic->flags |= 2; + if (!(gRfuStatic->flags & 4)) + return 0; + if (gRfuStatic->watchdogTimer == 0) + { + gRfuStatic->flags &= 0xFB; + r5 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; + for (r4 = 0; r4 < 4; ++r4) + if ((r5 >> r4) & 1) + rfu_STC_removeLinkData(r4, 1); + gRfuLinkStatus->connMode = 0xFF; + return 1; + } + --gRfuStatic->watchdogTimer; + return 0; +} diff --git a/src/librfu_stwi.c b/src/librfu_stwi.c index fe8a4ef76..c8df0ccfa 100644 --- a/src/librfu_stwi.c +++ b/src/librfu_stwi.c @@ -64,7 +64,7 @@ void AgbRFU_SoftReset(void) timerH = ®_TMCNT_H(gRfuState->timerSelect); *timerH = 0; *timerL = 0; - *timerH = 0x83; + *timerH = TIMER_ENABLE | TIMER_1024CLK; while (*timerL <= 0x11) REG_RCNT = 0x80A2; *timerH = 3; @@ -117,12 +117,13 @@ void STWI_init_Callback_S(void) STWI_set_Callback_S(NULL); } -void STWI_set_Callback_M(void (*callbackM)()) +// The callback can take 2 or 3 arguments. +void STWI_set_Callback_M(void *callbackM) { gRfuState->callbackM = callbackM; } -void STWI_set_Callback_S(void (*callbackS)()) +void STWI_set_Callback_S(void (*callbackS)(u16)) { gRfuState->callbackS = callbackS; } @@ -193,7 +194,7 @@ void STWI_send_ConfigStatusREQ(void) } } -void STWI_send_GameConfigREQ(u8 *unk1, u8 *data) +void STWI_send_GameConfigREQ(const u8 *unk1, const u8 *data) { u8 *packetBytes; s32 i; @@ -496,7 +497,7 @@ static void STWI_intr_timer(void) gRfuState->timerActive = 1; STWI_stop_timer(); STWI_reset_ClockCounter(); - if (gRfuState->callbackM) + if (gRfuState->callbackM != NULL) gRfuState->callbackM(255, 0); break; } @@ -546,7 +547,7 @@ static u16 STWI_init(u8 request) if (!REG_IME) { gRfuState->error = 6; - if (gRfuState->callbackM) + if (gRfuState->callbackM != NULL) gRfuState->callbackM(request, gRfuState->error); return TRUE; } @@ -554,14 +555,14 @@ static u16 STWI_init(u8 request) { gRfuState->error = 2; gRfuState->unk_2c = FALSE; - if (gRfuState->callbackM) + if (gRfuState->callbackM != NULL) gRfuState->callbackM(request, gRfuState->error); return TRUE; } else if(!gRfuState->msMode) { gRfuState->error = 4; - if (gRfuState->callbackM) + if (gRfuState->callbackM != NULL) gRfuState->callbackM(request, gRfuState->error, gRfuState); return TRUE; } @@ -617,14 +618,14 @@ static s32 STWI_restart_Command(void) { gRfuState->error = 1; gRfuState->unk_2c = 0; - if (gRfuState->callbackM) + if (gRfuState->callbackM != NULL) gRfuState->callbackM(gRfuState->reqActiveCommand, gRfuState->error); } else { gRfuState->error = 1; gRfuState->unk_2c = 0; - if (gRfuState->callbackM) + if (gRfuState->callbackM != NULL) gRfuState->callbackM(gRfuState->reqActiveCommand, gRfuState->error); gRfuState->state = 4; // TODO: what's 4 } diff --git a/sym_common.txt b/sym_common.txt index e72f9a03c..444c2a7af 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -159,24 +159,5 @@ gUnknown_3005E94: @ 3005E94 .include "berry_fix_program.o" .include "m4a.o" .include "agb_flash.o" - -gRfuState: @ 3007438 - .space 0x8 - -gRfuSlotStatusUNI: @ 3007440 - .space 0x10 - -gRfuSlotStatusNI: @ 3007450 - .space 0x10 - -gRfuLinkStatus: @ 3007460 - .space 0x4 - -gRfuStatic: @ 3007464 - .space 0x4 - -gRfuFixed: @ 3007468 - .space 0x8 - -gUnknown_3007470: @ 3007470 - .space 0xC + .align 2 + .include "librfu_rfu.o" -- cgit v1.2.3 From 6cbce0b9668c0fd7e902397e96f9a488b1d6f5a8 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 31 Dec 2019 06:42:18 +0800 Subject: librfu through 0x81E2C40 --- asm/librfu.s | 3255 ------------------------------------------------------ include/librfu.h | 75 +- src/librfu_rfu.c | 1095 +++++++++++++++++- 3 files changed, 1139 insertions(+), 3286 deletions(-) diff --git a/asm/librfu.s b/asm/librfu.s index d3b48f07e..c98ee854c 100644 --- a/asm/librfu.s +++ b/asm/librfu.s @@ -5,3261 +5,6 @@ .text - thumb_func_start rfu_REQBN_watchLink -rfu_REQBN_watchLink: @ 81E13F0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - mov r8, r1 - str r2, [sp] - str r3, [sp, 0x4] - lsls r0, 16 - lsrs r5, r0, 16 - movs r0, 0 - str r0, [sp, 0x8] - movs r1, 0 - str r1, [sp, 0xC] - mov r2, r8 - strb r1, [r2] - mov r0, sp - ldrb r1, [r0, 0xC] - ldr r0, [sp] - strb r1, [r0] - mov r2, sp - ldrb r0, [r2, 0xC] - ldr r2, [sp, 0x4] - strb r0, [r2] - ldr r4, _081E1490 @ =gRfuLinkStatus - ldr r0, [r4] - ldrb r0, [r0] - cmp r0, 0xFF - bne _081E142E - b _081E178E -_081E142E: - ldr r0, _081E1494 @ =gRfuState - ldr r0, [r0] - ldrb r0, [r0, 0x14] - cmp r0, 0 - bne _081E143A - b _081E178E -_081E143A: - ldr r3, _081E1498 @ =gRfuStatic - ldr r2, [r3] - ldrb r1, [r2] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _081E144E - movs r0, 0xB4 - lsls r0, 1 - strh r0, [r2, 0x20] -_081E144E: - ldr r1, [r3] - ldrb r0, [r1, 0x6] - cmp r0, 0 - bne _081E1460 - ldr r0, [r4] - ldrb r0, [r0, 0x9] - strb r0, [r1, 0x6] - movs r1, 0x1 - str r1, [sp, 0x8] -_081E1460: - lsls r0, r5, 24 - lsrs r0, 24 - cmp r0, 0x29 - bne _081E14A0 - ldr r0, _081E149C @ =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r1, [r0] - ldrb r0, [r1, 0x4] - mov r2, r8 - strb r0, [r2] - ldrb r0, [r1, 0x5] - ldr r1, [sp] - strb r0, [r1] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _081E148A - ldr r0, [r4] - ldrb r0, [r0, 0x2] - strb r0, [r2] -_081E148A: - movs r2, 0x2 - str r2, [sp, 0x8] - b _081E14F8 - .align 2, 0 -_081E1490: .4byte gRfuLinkStatus -_081E1494: .4byte gRfuState -_081E1498: .4byte gRfuStatic -_081E149C: .4byte gRfuFixed -_081E14A0: - movs r0, 0x9B - lsls r0, 1 - cmp r5, r0 - bne _081E14F0 - ldr r0, _081E154C @ =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r0, [r0] - ldrb r6, [r0, 0x5] - ldr r0, [r4] - ldrb r0, [r0, 0x2] - eors r6, r0 - ands r6, r0 - mov r0, r8 - strb r6, [r0] - movs r0, 0x1 - ldr r1, [sp] - strb r0, [r1] - movs r5, 0 -_081E14C6: - mov r2, r8 - ldrb r0, [r2] - asrs r0, r5 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _081E14E6 - ldr r0, _081E1550 @ =gRfuLinkStatus - ldr r0, [r0] - adds r0, 0xA - adds r0, r5 - movs r1, 0 - strb r1, [r0] - adds r0, r5, 0 - bl rfu_STC_removeLinkData -_081E14E6: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _081E14C6 -_081E14F0: - ldr r0, [sp, 0x8] - cmp r0, 0 - bne _081E14F8 - b _081E178E -_081E14F8: - ldr r4, _081E154C @ =gRfuFixed - ldr r0, [r4] - adds r0, 0xDC - ldr r0, [r0] - ldr r1, [r0] - str r1, [sp, 0x10] - ldr r0, [r0, 0x4] - str r0, [sp, 0x14] - ldr r0, _081E1554 @ =rfu_CB_defaultCallback - bl STWI_set_Callback_M - bl STWI_send_LinkStatusREQ - bl STWI_poll_CommandEnd - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0xC] - cmp r0, 0 - bne _081E1558 - ldr r0, [r4] - adds r0, 0xDC - ldr r0, [r0] - adds r2, r0, 0x4 - movs r5, 0 - ldr r3, _081E1550 @ =gRfuLinkStatus -_081E152C: - ldr r0, [r3] - adds r0, 0xA - adds r0, r5 - ldrb r1, [r2] - strb r1, [r0] - adds r2, 0x1 - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _081E152C - movs r2, 0 - mov r9, r2 - movs r5, 0 - b _081E1564 - .align 2, 0 -_081E154C: .4byte gRfuFixed -_081E1550: .4byte gRfuLinkStatus -_081E1554: .4byte rfu_CB_defaultCallback -_081E1558: - movs r0, 0x11 - ldr r1, [sp, 0xC] - bl rfu_STC_REQ_callback - ldr r0, [sp, 0xC] - b _081E1790 -_081E1564: - movs r0, 0x80 - lsls r0, 17 - lsls r0, r5 - lsrs r6, r0, 24 - adds r0, r5, 0x1 - mov r10, r0 - ldr r1, [sp, 0xC] - cmp r1, 0 - beq _081E1578 - b _081E1742 -_081E1578: - ldr r2, [sp, 0x8] - cmp r2, 0x1 - bne _081E164E - ldr r4, _081E15B8 @ =gRfuLinkStatus - ldr r1, [r4] - ldrb r0, [r1, 0x2] - ands r0, r6 - cmp r0, 0 - beq _081E164E - adds r0, r1, 0 - adds r0, 0xA - adds r0, r5 - ldrb r0, [r0] - cmp r0, 0 - bne _081E1640 - ldrb r0, [r1] - cmp r0, 0x1 - bne _081E15C0 - ldr r2, _081E15BC @ =gRfuStatic - ldr r1, [r2] - adds r1, 0xA - adds r1, r5 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r0, [r2] - adds r0, 0xA - adds r0, r5 - ldrb r0, [r0] - cmp r0, 0x3 - bls _081E164E - b _081E1626 - .align 2, 0 -_081E15B8: .4byte gRfuLinkStatus -_081E15BC: .4byte gRfuStatic -_081E15C0: - bl STWI_send_SystemStatusREQ - bl STWI_poll_CommandEnd - lsls r0, 16 - cmp r0, 0 - bne _081E164E - ldr r0, _081E15F0 @ =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r0, [r0] - ldrb r0, [r0, 0x7] - cmp r0, 0 - bne _081E15F4 - mov r2, r8 - ldrb r1, [r2] - adds r0, r6, 0 - orrs r0, r1 - strb r0, [r2] - mov r0, sp - ldrb r1, [r0, 0x8] - ldr r0, [sp] - b _081E164C - .align 2, 0 -_081E15F0: .4byte gRfuFixed -_081E15F4: - ldr r2, _081E163C @ =gRfuStatic - ldr r1, [r2] - adds r1, 0xA - adds r1, r5 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - lsls r0, 24 - ldr r2, [r2] - lsrs r0, 24 - ldrh r1, [r2, 0x1A] - cmp r0, r1 - bls _081E164E - adds r0, r2, 0 - adds r0, 0xA - adds r0, r5 - mov r2, sp - ldrb r2, [r2, 0xC] - strb r2, [r0] - ldr r0, [r4] - ldrb r0, [r0, 0x2] - bl STWI_send_DisconnectREQ - bl STWI_poll_CommandEnd -_081E1626: - mov r0, r8 - ldrb r1, [r0] - adds r0, r6, 0 - orrs r0, r1 - mov r1, r8 - strb r0, [r1] - mov r2, sp - ldrb r0, [r2, 0x8] - ldr r2, [sp] - strb r0, [r2] - b _081E164E - .align 2, 0 -_081E163C: .4byte gRfuStatic -_081E1640: - ldr r0, _081E16B0 @ =gRfuStatic - ldr r0, [r0] - adds r0, 0xA - adds r0, r5 - mov r1, sp - ldrb r1, [r1, 0xC] -_081E164C: - strb r1, [r0] -_081E164E: - ldr r2, _081E16B4 @ =gRfuLinkStatus - mov r12, r2 - ldr r1, [r2] - ldrb r7, [r1] - adds r0, r5, 0x1 - mov r10, r0 - cmp r7, 0x1 - bne _081E1742 - adds r0, r1, 0 - adds r0, 0xA - adds r4, r0, r5 - ldrb r3, [r4] - cmp r3, 0 - beq _081E1742 - ldrb r2, [r1, 0x3] - adds r0, r6, 0 - ands r0, r2 - cmp r0, 0 - beq _081E16BE - cmp r3, 0xA - bls _081E16B8 - ldr r2, [sp, 0x4] - ldrb r1, [r2] - adds r0, r6, 0 - orrs r0, r1 - strb r0, [r2] - mov r0, r12 - ldr r2, [r0] - ldrb r1, [r2, 0x2] - adds r0, r6, 0 - orrs r0, r1 - movs r3, 0 - strb r0, [r2, 0x2] - mov r2, r12 - ldr r1, [r2] - ldrb r0, [r1, 0x3] - bics r0, r6 - strb r0, [r1, 0x3] - ldr r1, [r2] - ldrb r0, [r1, 0x1] - adds r0, 0x1 - strb r0, [r1, 0x1] - ldr r0, _081E16B0 @ =gRfuStatic - ldr r0, [r0] - adds r0, 0xA - adds r0, r5 - strb r3, [r0] - b _081E1742 - .align 2, 0 -_081E16B0: .4byte gRfuStatic -_081E16B4: .4byte gRfuLinkStatus -_081E16B8: - movs r0, 0 - strb r0, [r4] - b _081E1742 -_081E16BE: - ldrb r0, [r1, 0x2] - orrs r0, r2 - ands r0, r6 - cmp r0, 0 - bne _081E1742 - bl STWI_send_SlotStatusREQ - bl STWI_poll_CommandEnd - ldr r0, _081E1708 @ =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r2, [r0] - ldrb r0, [r2, 0x1] - subs r0, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - adds r2, 0x8 - cmp r3, 0 - beq _081E1742 - ldrh r4, [r2] - ldrb r0, [r2, 0x2] - cmp r0, r5 - bne _081E1710 - ldr r0, _081E170C @ =gRfuStatic - ldr r0, [r0] - lsls r1, r5, 1 - adds r0, 0x12 - adds r0, r1 - ldrh r0, [r0] - cmp r4, r0 - bne _081E1710 - lsls r7, r5 - mov r0, r9 - orrs r0, r7 - lsls r0, 24 - b _081E173E - .align 2, 0 -_081E1708: .4byte gRfuFixed -_081E170C: .4byte gRfuStatic -_081E1710: - adds r2, 0x4 - subs r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0 - beq _081E1742 - ldrh r4, [r2] - ldrb r0, [r2, 0x2] - cmp r0, r5 - bne _081E1710 - ldr r0, _081E17A0 @ =gRfuStatic - ldr r0, [r0] - lsls r1, r5, 1 - adds r0, 0x12 - adds r0, r1 - ldrh r0, [r0] - cmp r4, r0 - bne _081E1710 - movs r0, 0x1 - lsls r0, r5 - mov r1, r9 - orrs r1, r0 - lsls r0, r1, 24 -_081E173E: - lsrs r0, 24 - mov r9, r0 -_081E1742: - ldr r0, _081E17A4 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r1, [r0, 0x2] - mov r2, r8 - ldrb r0, [r2] - ands r0, r1 - ands r6, r0 - cmp r6, 0 - beq _081E175C - adds r0, r5, 0 - movs r1, 0 - bl rfu_STC_removeLinkData -_081E175C: - mov r1, r10 - lsls r0, r1, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bhi _081E1768 - b _081E1564 -_081E1768: - mov r2, r9 - cmp r2, 0 - beq _081E1778 - mov r0, r9 - bl STWI_send_DisconnectREQ - bl STWI_poll_CommandEnd -_081E1778: - ldr r1, _081E17A8 @ =gRfuFixed - ldr r0, [r1] - adds r0, 0xDC - ldr r0, [r0] - ldr r2, [sp, 0x10] - str r2, [r0] - ldr r0, [r1] - adds r0, 0xDC - ldr r0, [r0] - ldr r1, [sp, 0x14] - str r1, [r0, 0x4] -_081E178E: - movs r0, 0 -_081E1790: - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_081E17A0: .4byte gRfuStatic -_081E17A4: .4byte gRfuLinkStatus -_081E17A8: .4byte gRfuFixed - thumb_func_end rfu_REQBN_watchLink - - thumb_func_start rfu_STC_removeLinkData -rfu_STC_removeLinkData: @ 81E17AC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r7, r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r12, r1 - movs r0, 0x80 - lsls r0, 17 - lsls r0, r7 - lsrs r5, r0, 24 - ldr r1, _081E1850 @ =gRfuLinkStatus - ldr r4, [r1] - ldrb r0, [r4, 0x2] - ands r0, r5 - mov r8, r1 - cmp r0, 0 - beq _081E17DE - ldrb r0, [r4, 0x1] - cmp r0, 0 - beq _081E17DE - subs r0, 0x1 - strb r0, [r4, 0x1] -_081E17DE: - mov r3, r8 - ldr r2, [r3] - mvns r6, r5 - ldrb r1, [r2, 0x2] - adds r0, r6, 0 - ands r0, r1 - strb r0, [r2, 0x2] - ldr r2, [r3] - ldrb r1, [r2, 0x3] - adds r0, r5, 0 - orrs r0, r1 - strb r0, [r2, 0x3] - ldr r3, [r3] - ldr r0, [r3] - ldr r1, _081E1854 @ =0x00ff00ff - ands r0, r1 - cmp r0, 0 - bne _081E1806 - movs r0, 0xFF - strb r0, [r3] -_081E1806: - mov r0, r12 - cmp r0, 0 - beq _081E1844 - mov r1, sp - movs r4, 0 - movs r0, 0 - strh r0, [r1] - lsls r0, r7, 5 - adds r0, 0x14 - mov r2, r8 - ldr r1, [r2] - adds r1, r0 - ldr r2, _081E1858 @ =0x01000010 - mov r0, sp - bl CpuSet - mov r0, r8 - ldr r2, [r0] - ldrb r1, [r2, 0x3] - adds r0, r6, 0 - ands r0, r1 - strb r0, [r2, 0x3] - mov r2, r8 - ldr r1, [r2] - ldrb r0, [r1, 0x7] - ands r6, r0 - strb r6, [r1, 0x7] - ldr r0, [r2] - adds r0, 0xA - adds r0, r7 - strb r4, [r0] -_081E1844: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081E1850: .4byte gRfuLinkStatus -_081E1854: .4byte 0x00ff00ff -_081E1858: .4byte 0x01000010 - thumb_func_end rfu_STC_removeLinkData - - thumb_func_start rfu_REQ_disconnect -rfu_REQ_disconnect: @ 81E185C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r2, _081E18A0 @ =gRfuLinkStatus - ldr r1, [r2] - ldrb r0, [r1, 0x2] - ldrb r1, [r1, 0x3] - orrs r0, r1 - ands r0, r4 - cmp r0, 0 - beq _081E18E0 - ldr r0, _081E18A4 @ =gRfuStatic - ldr r1, [r0] - strb r4, [r1, 0x5] - ldr r2, [r2] - ldrb r1, [r2] - adds r3, r0, 0 - cmp r1, 0xFF - bne _081E18A8 - ldr r0, [r3] - ldrb r1, [r0] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _081E18A8 - ldrb r0, [r2, 0x3] - ands r0, r4 - cmp r0, 0 - beq _081E18E0 - movs r0, 0x30 - movs r1, 0 - bl rfu_CB_disconnect - b _081E18E0 - .align 2, 0 -_081E18A0: .4byte gRfuLinkStatus -_081E18A4: .4byte gRfuStatic -_081E18A8: - ldr r0, [r3] - ldrb r0, [r0, 0x9] - cmp r0, 0 - beq _081E18D4 - ldr r0, _081E18D0 @ =rfu_CB_defaultCallback - bl STWI_set_Callback_M - bl STWI_send_SC_EndREQ - bl STWI_poll_CommandEnd - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - beq _081E18D4 - movs r0, 0x1B - bl rfu_STC_REQ_callback - b _081E18E0 - .align 2, 0 -_081E18D0: .4byte rfu_CB_defaultCallback -_081E18D4: - ldr r0, _081E18E8 @ =rfu_CB_disconnect - bl STWI_set_Callback_M - adds r0, r4, 0 - bl STWI_send_DisconnectREQ -_081E18E0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081E18E8: .4byte rfu_CB_disconnect - thumb_func_end rfu_REQ_disconnect - - thumb_func_start rfu_CB_disconnect -rfu_CB_disconnect: @ 81E18EC - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 16 - lsrs r5, r1, 16 - cmp r5, 0x3 - bne _081E1928 - ldr r0, _081E19BC @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0 - bne _081E1928 - ldr r0, _081E19C0 @ =rfu_CB_defaultCallback - bl STWI_set_Callback_M - bl STWI_send_SystemStatusREQ - bl STWI_poll_CommandEnd - lsls r0, 16 - cmp r0, 0 - bne _081E1928 - ldr r0, _081E19C4 @ =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r0, [r0] - ldrb r0, [r0, 0x7] - cmp r0, 0 - bne _081E1928 - movs r5, 0 -_081E1928: - ldr r3, _081E19C8 @ =gRfuStatic - ldr r2, [r3] - ldr r0, _081E19BC @ =gRfuLinkStatus - ldr r1, [r0] - ldrb r0, [r1, 0x2] - ldrb r1, [r1, 0x3] - orrs r0, r1 - ldrb r1, [r2, 0x5] - ands r0, r1 - strb r0, [r2, 0x5] - ldr r0, _081E19C4 @ =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r1, [r0] - ldr r0, [r3] - ldrb r0, [r0, 0x5] - strb r0, [r1, 0x8] - cmp r5, 0 - bne _081E1976 - movs r4, 0 -_081E1950: - movs r0, 0x80 - lsls r0, 17 - lsls r0, r4 - lsrs r0, 24 - ldr r1, _081E19C8 @ =gRfuStatic - ldr r1, [r1] - ldrb r1, [r1, 0x5] - ands r0, r1 - cmp r0, 0 - beq _081E196C - adds r0, r4, 0 - movs r1, 0x1 - bl rfu_STC_removeLinkData -_081E196C: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _081E1950 -_081E1976: - ldr r0, _081E19BC @ =gRfuLinkStatus - ldr r2, [r0] - ldrb r1, [r2, 0x2] - ldrb r0, [r2, 0x3] - orrs r0, r1 - cmp r0, 0 - bne _081E1988 - movs r0, 0xFF - strb r0, [r2] -_081E1988: - adds r0, r6, 0 - adds r1, r5, 0 - bl rfu_STC_REQ_callback - ldr r0, _081E19C8 @ =gRfuStatic - ldr r0, [r0] - ldrb r0, [r0, 0x9] - cmp r0, 0 - beq _081E19B6 - ldr r0, _081E19C0 @ =rfu_CB_defaultCallback - bl STWI_set_Callback_M - bl STWI_send_SC_StartREQ - bl STWI_poll_CommandEnd - adds r5, r0, 0 - cmp r5, 0 - beq _081E19B6 - movs r0, 0x19 - adds r1, r5, 0 - bl rfu_STC_REQ_callback -_081E19B6: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081E19BC: .4byte gRfuLinkStatus -_081E19C0: .4byte rfu_CB_defaultCallback -_081E19C4: .4byte gRfuFixed -_081E19C8: .4byte gRfuStatic - thumb_func_end rfu_CB_disconnect - - thumb_func_start rfu_REQ_CHILD_startConnectRecovery -rfu_REQ_CHILD_startConnectRecovery: @ 81E19CC - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _081E1A1C @ =gRfuStatic - ldr r0, [r0] - strb r5, [r0, 0x5] - movs r4, 0 - movs r0, 0x1 - ands r0, r5 - ldr r2, _081E1A20 @ =rfu_STC_REQ_callback - cmp r0, 0 - bne _081E19FA - movs r1, 0x1 -_081E19E6: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bhi _081E19FA - adds r0, r5, 0 - asrs r0, r4 - ands r0, r1 - cmp r0, 0 - beq _081E19E6 -_081E19FA: - adds r0, r2, 0 - bl STWI_set_Callback_M - ldr r0, _081E1A24 @ =gRfuLinkStatus - ldr r1, [r0] - lsls r0, r4, 5 - adds r0, r1, r0 - ldrh r0, [r0, 0x14] - adds r1, 0x94 - ldrh r1, [r1] - adds r2, r5, 0 - bl STWI_send_CPR_StartREQ - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081E1A1C: .4byte gRfuStatic -_081E1A20: .4byte rfu_STC_REQ_callback -_081E1A24: .4byte gRfuLinkStatus - thumb_func_end rfu_REQ_CHILD_startConnectRecovery - - thumb_func_start rfu_REQ_CHILD_pollConnectRecovery -rfu_REQ_CHILD_pollConnectRecovery: @ 81E1A28 - push {lr} - ldr r0, _081E1A38 @ =rfu_CB_CHILD_pollConnectRecovery - bl STWI_set_Callback_M - bl STWI_send_CPR_PollingREQ - pop {r0} - bx r0 - .align 2, 0 -_081E1A38: .4byte rfu_CB_CHILD_pollConnectRecovery - thumb_func_end rfu_REQ_CHILD_pollConnectRecovery - - thumb_func_start rfu_CB_CHILD_pollConnectRecovery -rfu_CB_CHILD_pollConnectRecovery: @ 81E1A3C - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, 16 - lsrs r7, r1, 16 - cmp r7, 0 - bne _081E1AC0 - ldr r0, _081E1AD4 @ =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r0, [r0] - ldrb r0, [r0, 0x4] - cmp r0, 0 - bne _081E1AC0 - ldr r0, _081E1AD8 @ =gRfuStatic - ldr r1, [r0] - ldrb r1, [r1, 0x5] - adds r6, r0, 0 - cmp r1, 0 - beq _081E1AC0 - ldr r1, _081E1ADC @ =gRfuLinkStatus - ldr r0, [r1] - strb r7, [r0] - movs r4, 0 - adds r5, r1, 0 - mov r12, r4 -_081E1A76: - movs r0, 0x80 - lsls r0, 17 - lsls r0, r4 - lsrs r3, r0, 24 - ldr r2, [r5] - ldr r0, [r6] - ldrb r0, [r0, 0x5] - ands r0, r3 - ldrb r1, [r2, 0x3] - ands r0, r1 - cmp r0, 0 - beq _081E1AB0 - ldrb r1, [r2, 0x2] - adds r0, r3, 0 - orrs r0, r1 - strb r0, [r2, 0x2] - ldr r1, [r5] - ldrb r0, [r1, 0x3] - bics r0, r3 - strb r0, [r1, 0x3] - ldr r1, [r5] - ldrb r0, [r1, 0x1] - adds r0, 0x1 - strb r0, [r1, 0x1] - ldr r0, [r6] - adds r0, 0xA - adds r0, r4 - mov r1, r12 - strb r1, [r0] -_081E1AB0: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _081E1A76 - ldr r1, [r6] - movs r0, 0 - strb r0, [r1, 0x5] -_081E1AC0: - mov r0, r8 - adds r1, r7, 0 - bl rfu_STC_REQ_callback - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081E1AD4: .4byte gRfuFixed -_081E1AD8: .4byte gRfuStatic -_081E1ADC: .4byte gRfuLinkStatus - thumb_func_end rfu_CB_CHILD_pollConnectRecovery - - thumb_func_start rfu_CHILD_getConnectRecoveryStatus -rfu_CHILD_getConnectRecoveryStatus: @ 81E1AE0 - push {lr} - adds r2, r0, 0 - movs r0, 0xFF - strb r0, [r2] - ldr r0, _081E1B00 @ =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x4D - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _081E1B04 - movs r0, 0x10 - b _081E1B0A - .align 2, 0 -_081E1B00: .4byte gRfuFixed -_081E1B04: - ldrb r0, [r1, 0x4] - strb r0, [r2] - movs r0, 0 -_081E1B0A: - pop {r1} - bx r1 - thumb_func_end rfu_CHILD_getConnectRecoveryStatus - - thumb_func_start rfu_REQ_CHILD_endConnectRecovery -rfu_REQ_CHILD_endConnectRecovery: @ 81E1B10 - push {lr} - ldr r0, _081E1B20 @ =rfu_CB_CHILD_pollConnectRecovery - bl STWI_set_Callback_M - bl STWI_send_CPR_EndREQ - pop {r0} - bx r0 - .align 2, 0 -_081E1B20: .4byte rfu_CB_CHILD_pollConnectRecovery - thumb_func_end rfu_REQ_CHILD_endConnectRecovery - - thumb_func_start rfu_STC_fastCopy -rfu_STC_fastCopy: @ 81E1B24 - push {r4-r6,lr} - adds r5, r0, 0 - adds r6, r1, 0 - ldr r3, [r5] - ldr r1, [r6] - subs r2, 0x1 - movs r0, 0x1 - negs r0, r0 - cmp r2, r0 - beq _081E1B48 - adds r4, r0, 0 -_081E1B3A: - ldrb r0, [r3] - strb r0, [r1] - adds r3, 0x1 - adds r1, 0x1 - subs r2, 0x1 - cmp r2, r4 - bne _081E1B3A -_081E1B48: - str r3, [r5] - str r1, [r6] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end rfu_STC_fastCopy - - thumb_func_start rfu_REQ_changeMasterSlave -rfu_REQ_changeMasterSlave: @ 81E1B54 - push {lr} - movs r0, 0x1 - bl STWI_read_status - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bne _081E1B74 - ldr r0, _081E1B70 @ =rfu_STC_REQ_callback - bl STWI_set_Callback_M - bl STWI_send_MS_ChangeREQ - b _081E1B7C - .align 2, 0 -_081E1B70: .4byte rfu_STC_REQ_callback -_081E1B74: - movs r0, 0x27 - movs r1, 0 - bl rfu_STC_REQ_callback -_081E1B7C: - pop {r0} - bx r0 - thumb_func_end rfu_REQ_changeMasterSlave - - thumb_func_start rfu_getMasterSlave -rfu_getMasterSlave: @ 81E1B80 - push {lr} - movs r0, 0x1 - bl STWI_read_status - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x1 - bne _081E1BAE - ldr r0, _081E1BB4 @ =gRfuState - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x2C - ldrb r0, [r0] - cmp r0, 0 - beq _081E1BAE - ldrb r0, [r1, 0x6] - cmp r0, 0x27 - beq _081E1BAC - cmp r0, 0x25 - beq _081E1BAC - cmp r0, 0x37 - bne _081E1BAE -_081E1BAC: - movs r2, 0 -_081E1BAE: - adds r0, r2, 0 - pop {r1} - bx r1 - .align 2, 0 -_081E1BB4: .4byte gRfuState - thumb_func_end rfu_getMasterSlave - - thumb_func_start rfu_clearAllSlot -rfu_clearAllSlot: @ 81E1BB8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - ldr r1, _081E1C3C @ =0x04000208 - ldrh r0, [r1] - mov r8, r0 - movs r0, 0 - strh r0, [r1] - movs r5, 0 - mov r0, sp - adds r0, 0x2 - movs r7, 0 - adds r6, r0, 0 -_081E1BD4: - mov r0, sp - strh r7, [r0] - ldr r0, _081E1C40 @ =gRfuSlotStatusNI - lsls r4, r5, 2 - adds r0, r4, r0 - ldr r1, [r0] - mov r0, sp - ldr r2, _081E1C44 @ =0x01000034 - bl CpuSet - strh r7, [r6] - ldr r0, _081E1C48 @ =gRfuSlotStatusUNI - adds r4, r0 - ldr r1, [r4] - adds r0, r6, 0 - ldr r2, _081E1C4C @ =0x0100000a - bl CpuSet - ldr r3, _081E1C50 @ =gRfuLinkStatus - ldr r0, [r3] - adds r0, 0x10 - adds r0, r5 - movs r1, 0x10 - strb r1, [r0] - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x3 - bls _081E1BD4 - ldr r2, [r3] - movs r1, 0 - movs r0, 0x57 - strb r0, [r2, 0xF] - ldr r0, [r3] - strb r1, [r0, 0x4] - ldr r0, [r3] - strb r1, [r0, 0x5] - ldr r0, [r3] - strb r1, [r0, 0x6] - ldr r0, _081E1C54 @ =gRfuStatic - ldr r0, [r0] - strb r1, [r0, 0x2] - ldr r0, _081E1C3C @ =0x04000208 - mov r1, r8 - strh r1, [r0] - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081E1C3C: .4byte 0x04000208 -_081E1C40: .4byte gRfuSlotStatusNI -_081E1C44: .4byte 0x01000034 -_081E1C48: .4byte gRfuSlotStatusUNI -_081E1C4C: .4byte 0x0100000a -_081E1C50: .4byte gRfuLinkStatus -_081E1C54: .4byte gRfuStatic - thumb_func_end rfu_clearAllSlot - - thumb_func_start rfu_STC_releaseFrame -rfu_STC_releaseFrame: @ 81E1C58 - push {r4-r6,lr} - adds r4, r2, 0 - lsls r0, 24 - lsrs r2, r0, 24 - adds r5, r2, 0 - lsls r1, 24 - lsrs r3, r1, 24 - ldr r0, _081E1C90 @ =gRfuStatic - ldr r0, [r0] - ldrb r1, [r0] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _081E1C98 - ldr r6, _081E1C94 @ =gRfuLinkStatus - cmp r3, 0 - bne _081E1C84 - ldr r1, [r6] - ldrb r0, [r1, 0xF] - ldrh r4, [r4, 0x2E] - adds r0, r4 - strb r0, [r1, 0xF] -_081E1C84: - ldr r1, [r6] - ldrb r0, [r1, 0xF] - adds r0, 0x3 - strb r0, [r1, 0xF] - b _081E1CB8 - .align 2, 0 -_081E1C90: .4byte gRfuStatic -_081E1C94: .4byte gRfuLinkStatus -_081E1C98: - ldr r6, _081E1CC0 @ =gRfuLinkStatus - cmp r3, 0 - bne _081E1CAC - ldr r1, [r6] - adds r1, 0x10 - adds r1, r2 - ldrb r0, [r1] - ldrh r4, [r4, 0x2E] - adds r0, r4 - strb r0, [r1] -_081E1CAC: - ldr r1, [r6] - adds r1, 0x10 - adds r1, r5 - ldrb r0, [r1] - adds r0, 0x2 - strb r0, [r1] -_081E1CB8: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081E1CC0: .4byte gRfuLinkStatus - thumb_func_end rfu_STC_releaseFrame - - thumb_func_start rfu_clearSlot -rfu_clearSlot: @ 81E1CC4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, 24 - lsrs r7, r1, 24 - cmp r7, 0x3 - bls _081E1CE4 - movs r0, 0x80 - lsls r0, 3 - b _081E1E5C -_081E1CE4: - movs r0, 0xF - mov r1, r8 - ands r0, r1 - cmp r0, 0 - bne _081E1CF4 - movs r0, 0xC0 - lsls r0, 3 - b _081E1E5C -_081E1CF4: - ldr r1, _081E1D38 @ =0x04000208 - ldrh r0, [r1] - mov r10, r0 - movs r0, 0 - strh r0, [r1] - movs r0, 0xC - mov r2, r8 - ands r0, r2 - cmp r0, 0 - beq _081E1DBC - movs r3, 0 - ldr r1, _081E1D3C @ =gRfuSlotStatusNI - lsls r0, r7, 2 - adds r0, r1 - mov r9, r0 -_081E1D12: - movs r4, 0 - cmp r3, 0 - bne _081E1D44 - movs r0, 0x4 - mov r1, r8 - ands r0, r1 - cmp r0, 0 - beq _081E1D64 - mov r2, r9 - ldr r4, [r2] - ldr r0, _081E1D40 @ =gRfuLinkStatus - ldr r2, [r0] - adds r0, r4, 0 - adds r0, 0x2C - ldrb r1, [r0] - ldrb r0, [r2, 0x4] - bics r0, r1 - strb r0, [r2, 0x4] - b _081E1D64 - .align 2, 0 -_081E1D38: .4byte 0x04000208 -_081E1D3C: .4byte gRfuSlotStatusNI -_081E1D40: .4byte gRfuLinkStatus -_081E1D44: - movs r0, 0x8 - mov r1, r8 - ands r0, r1 - cmp r0, 0 - beq _081E1D64 - mov r2, r9 - ldr r0, [r2] - adds r4, r0, 0 - adds r4, 0x34 - ldr r0, _081E1DF8 @ =gRfuLinkStatus - ldr r2, [r0] - movs r1, 0x1 - lsls r1, r7 - ldrb r0, [r2, 0x5] - bics r0, r1 - strb r0, [r2, 0x5] -_081E1D64: - adds r6, r3, 0x1 - cmp r4, 0 - beq _081E1DB4 - ldrh r0, [r4] - movs r2, 0x80 - lsls r2, 8 - adds r1, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _081E1DA4 - lsls r1, r3, 24 - lsrs r1, 24 - adds r0, r7, 0 - adds r2, r4, 0 - bl rfu_STC_releaseFrame - movs r1, 0 - adds r2, r4, 0 - adds r2, 0x2C - movs r5, 0x1 - movs r3, 0 -_081E1D8E: - ldrb r0, [r2] - asrs r0, r1 - ands r0, r5 - cmp r0, 0 - beq _081E1D9A - strh r3, [r4, 0x2] -_081E1D9A: - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x3 - bls _081E1D8E -_081E1DA4: - mov r1, sp - movs r0, 0 - strh r0, [r1] - mov r0, sp - adds r1, r4, 0 - ldr r2, _081E1DFC @ =0x0100001a - bl CpuSet -_081E1DB4: - lsls r0, r6, 16 - lsrs r3, r0, 16 - cmp r3, 0x1 - bls _081E1D12 -_081E1DBC: - movs r0, 0x1 - mov r4, r8 - ands r0, r4 - cmp r0, 0 - beq _081E1E32 - ldr r1, _081E1E00 @ =gRfuSlotStatusUNI - lsls r0, r7, 2 - adds r0, r1 - ldr r3, [r0] - ldrh r1, [r3] - movs r0, 0x80 - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _081E1E24 - ldr r0, _081E1E04 @ =gRfuStatic - ldr r0, [r0] - ldrb r1, [r0] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _081E1E08 - ldr r2, _081E1DF8 @ =gRfuLinkStatus - ldr r1, [r2] - ldrb r0, [r1, 0xF] - adds r0, 0x3 - ldrb r4, [r3, 0x4] - adds r0, r4 - strb r0, [r1, 0xF] - b _081E1E1A - .align 2, 0 -_081E1DF8: .4byte gRfuLinkStatus -_081E1DFC: .4byte 0x0100001a -_081E1E00: .4byte gRfuSlotStatusUNI -_081E1E04: .4byte gRfuStatic -_081E1E08: - ldr r2, _081E1E6C @ =gRfuLinkStatus - ldr r1, [r2] - adds r1, 0x10 - adds r1, r7 - ldrb r0, [r1] - adds r0, 0x2 - ldrb r4, [r3, 0x4] - adds r0, r4 - strb r0, [r1] -_081E1E1A: - ldr r2, [r2] - ldrb r1, [r3, 0x3] - ldrb r0, [r2, 0x6] - bics r0, r1 - strb r0, [r2, 0x6] -_081E1E24: - mov r0, sp - movs r1, 0 - strh r1, [r0] - ldr r2, _081E1E70 @ =0x01000006 - adds r1, r3, 0 - bl CpuSet -_081E1E32: - movs r0, 0x2 - mov r1, r8 - ands r0, r1 - cmp r0, 0 - beq _081E1E54 - mov r1, sp - movs r0, 0 - strh r0, [r1] - ldr r1, _081E1E74 @ =gRfuSlotStatusUNI - lsls r0, r7, 2 - adds r0, r1 - ldr r1, [r0] - adds r1, 0xC - ldr r2, _081E1E78 @ =0x01000004 - mov r0, sp - bl CpuSet -_081E1E54: - ldr r0, _081E1E7C @ =0x04000208 - mov r2, r10 - strh r2, [r0] - movs r0, 0 -_081E1E5C: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_081E1E6C: .4byte gRfuLinkStatus -_081E1E70: .4byte 0x01000006 -_081E1E74: .4byte gRfuSlotStatusUNI -_081E1E78: .4byte 0x01000004 -_081E1E7C: .4byte 0x04000208 - thumb_func_end rfu_clearSlot - - thumb_func_start rfu_setRecvBuffer -rfu_setRecvBuffer: @ 81E1E80 - push {r4-r6,lr} - adds r5, r2, 0 - adds r6, r3, 0 - lsls r0, 24 - lsrs r3, r0, 24 - adds r2, r3, 0 - lsls r1, 24 - lsrs r1, 24 - adds r4, r1, 0 - cmp r1, 0x3 - bls _081E1E9C - movs r0, 0x80 - lsls r0, 3 - b _081E1ED4 -_081E1E9C: - movs r0, 0x20 - ands r0, r3 - cmp r0, 0 - beq _081E1EB8 - ldr r0, _081E1EB4 @ =gRfuSlotStatusNI - lsls r1, 2 - adds r1, r0 - ldr r0, [r1] - str r5, [r0, 0x68] - str r6, [r0, 0x6C] - b _081E1ED2 - .align 2, 0 -_081E1EB4: .4byte gRfuSlotStatusNI -_081E1EB8: - movs r0, 0x10 - ands r2, r0 - cmp r2, 0 - bne _081E1EC6 - movs r0, 0xC0 - lsls r0, 3 - b _081E1ED4 -_081E1EC6: - ldr r0, _081E1EDC @ =gRfuSlotStatusUNI - lsls r1, r4, 2 - adds r1, r0 - ldr r0, [r1] - str r5, [r0, 0x14] - str r6, [r0, 0x18] -_081E1ED2: - movs r0, 0 -_081E1ED4: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_081E1EDC: .4byte gRfuSlotStatusUNI - thumb_func_end rfu_setRecvBuffer - - thumb_func_start rfu_NI_setSendData -rfu_NI_setSendData: @ 81E1EE0 - push {r4-r6,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - str r3, [sp] - movs r0, 0x20 - adds r1, r4, 0 - adds r2, r5, 0 - adds r3, r6, 0 - bl rfu_STC_setSendData_org - lsls r0, 16 - lsrs r0, 16 - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end rfu_NI_setSendData - - thumb_func_start rfu_UNI_setSendData -rfu_UNI_setSendData: @ 81E1F0C - push {lr} - sub sp, 0x4 - adds r3, r1, 0 - lsls r0, 24 - lsrs r1, r0, 24 - lsls r2, 24 - lsrs r2, 24 - ldr r0, _081E1F28 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0x1 - bne _081E1F2C - adds r0, r2, 0x3 - b _081E1F2E - .align 2, 0 -_081E1F28: .4byte gRfuLinkStatus -_081E1F2C: - adds r0, r2, 0x2 -_081E1F2E: - lsls r0, 24 - lsrs r2, r0, 24 - movs r0, 0 - str r0, [sp] - movs r0, 0x10 - bl rfu_STC_setSendData_org - lsls r0, 16 - lsrs r0, 16 - add sp, 0x4 - pop {r1} - bx r1 - thumb_func_end rfu_UNI_setSendData - - thumb_func_start rfu_NI_CHILD_setSendGameName -rfu_NI_CHILD_setSendGameName: @ 81E1F48 - push {lr} - sub sp, 0x4 - adds r2, r1, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r2, 24 - lsrs r2, 24 - movs r1, 0x80 - lsls r1, 17 - lsls r1, r0 - lsrs r1, 24 - ldr r0, _081E1F78 @ =gRfuLinkStatus - ldr r3, [r0] - adds r3, 0x98 - movs r0, 0x1A - str r0, [sp] - movs r0, 0x40 - bl rfu_STC_setSendData_org - lsls r0, 16 - lsrs r0, 16 - add sp, 0x4 - pop {r1} - bx r1 - .align 2, 0 -_081E1F78: .4byte gRfuLinkStatus - thumb_func_end rfu_NI_CHILD_setSendGameName - - thumb_func_start rfu_STC_setSendData_org -rfu_STC_setSendData_org: @ 81E1F7C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - str r3, [sp] - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r3, r1, 24 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - ldr r0, _081E1FA8 @ =gRfuLinkStatus - ldr r2, [r0] - ldrb r1, [r2] - mov r10, r0 - cmp r1, 0xFF - bne _081E1FB0 - ldr r0, _081E1FAC @ =0x00000301 - b _081E2166 - .align 2, 0 -_081E1FA8: .4byte gRfuLinkStatus -_081E1FAC: .4byte 0x00000301 -_081E1FB0: - movs r0, 0xF - ands r0, r3 - cmp r0, 0 - bne _081E1FBE - movs r0, 0x80 - lsls r0, 3 - b _081E2166 -_081E1FBE: - ldrb r0, [r2, 0x2] - ldrb r1, [r2, 0x3] - orrs r0, r1 - ands r0, r3 - cmp r0, r3 - beq _081E1FD4 - ldr r0, _081E1FD0 @ =0x00000401 - b _081E2166 - .align 2, 0 -_081E1FD0: .4byte 0x00000401 -_081E1FD4: - movs r0, 0x10 - ands r0, r6 - cmp r0, 0 - beq _081E1FE0 - ldrb r0, [r2, 0x6] - b _081E1FE2 -_081E1FE0: - ldrb r0, [r2, 0x4] -_081E1FE2: - ands r0, r3 - cmp r0, 0 - beq _081E1FF0 - ldr r0, _081E1FEC @ =0x00000402 - b _081E2166 - .align 2, 0 -_081E1FEC: .4byte 0x00000402 -_081E1FF0: - movs r2, 0 - movs r0, 0x1 - ands r0, r3 - ldr r4, _081E2020 @ =_Str_RfuHeader - cmp r0, 0 - bne _081E2012 - movs r1, 0x1 -_081E1FFE: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3 - bhi _081E2012 - adds r0, r3, 0 - asrs r0, r2 - ands r0, r1 - cmp r0, 0 - beq _081E1FFE -_081E2012: - mov r0, r10 - ldr r1, [r0] - ldrb r0, [r1] - cmp r0, 0x1 - bne _081E2024 - adds r1, 0xF - b _081E202E - .align 2, 0 -_081E2020: .4byte _Str_RfuHeader -_081E2024: - cmp r0, 0 - bne _081E2030 - adds r0, r2, 0 - adds r0, 0x10 - adds r1, r0 -_081E202E: - mov r9, r1 -_081E2030: - mov r1, r10 - ldr r0, [r1] - ldrb r0, [r0] - lsls r0, 4 - adds r0, r4 - ldrb r4, [r0] - mov r0, r9 - ldrb r0, [r0] - cmp r8, r0 - bhi _081E2048 - cmp r8, r4 - bhi _081E204E -_081E2048: - movs r0, 0xA0 - lsls r0, 3 - b _081E2166 -_081E204E: - ldr r1, _081E209C @ =0x04000208 - ldrh r0, [r1] - str r0, [sp, 0x4] - movs r7, 0 - strh r7, [r1] - movs r0, 0x20 - ands r0, r6 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _081E2068 - cmp r6, 0x40 - bne _081E2124 -_081E2068: - ldr r1, _081E20A0 @ =gRfuSlotStatusNI - lsls r0, r2, 2 - adds r0, r1 - ldr r0, [r0] - mov r12, r0 - movs r1, 0 - strh r1, [r0, 0x18] - mov r1, r12 - adds r1, 0x2D - mov r2, r12 - str r1, [r2, 0x4] - movs r0, 0x7 - str r0, [r2, 0x14] - mov r0, r12 - adds r0, 0x2C - strb r3, [r0] - strb r3, [r2, 0x1A] - mov r2, r8 - subs r0, r2, r4 - mov r2, r12 - strh r0, [r2, 0x2E] - cmp r5, 0 - beq _081E20A4 - strb r7, [r1] - b _081E20A8 - .align 2, 0 -_081E209C: .4byte 0x04000208 -_081E20A0: .4byte gRfuSlotStatusNI -_081E20A4: - movs r0, 0x1 - strb r0, [r1] -_081E20A8: - ldr r0, [sp, 0x28] - mov r1, r12 - str r0, [r1, 0x30] - ldr r2, [sp] - str r2, [r1, 0x28] - movs r1, 0 - mov r0, r12 - strb r1, [r0, 0x1F] - adds r0, 0x20 - strb r1, [r0] - mov r4, r12 - adds r4, 0x1B - movs r6, 0 - mov r2, r12 - adds r2, 0x21 - movs r5, 0x1 -_081E20C8: - adds r0, r4, r1 - strb r6, [r0] - adds r0, r2, r1 - strb r5, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x3 - bls _081E20C8 - movs r2, 0 - movs r5, 0x1 - ldr r4, _081E211C @ =gRfuSlotStatusNI - movs r1, 0 -_081E20E2: - adds r0, r3, 0 - asrs r0, r2 - ands r0, r5 - cmp r0, 0 - beq _081E20F4 - lsls r0, r2, 2 - adds r0, r4 - ldr r0, [r0] - strh r1, [r0, 0x2] -_081E20F4: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3 - bls _081E20E2 - mov r1, r10 - ldr r2, [r1] - ldrb r1, [r2, 0x4] - adds r0, r3, 0 - orrs r0, r1 - strb r0, [r2, 0x4] - mov r2, r9 - ldrb r0, [r2] - mov r1, r8 - subs r0, r1 - strb r0, [r2] - ldr r0, _081E2120 @ =0x00008021 - mov r2, r12 - strh r0, [r2] - b _081E215C - .align 2, 0 -_081E211C: .4byte gRfuSlotStatusNI -_081E2120: .4byte 0x00008021 -_081E2124: - movs r0, 0x10 - ands r0, r6 - cmp r0, 0 - beq _081E215C - ldr r1, _081E2178 @ =gRfuSlotStatusUNI - lsls r0, r2, 2 - adds r0, r1 - ldr r1, [r0] - strb r3, [r1, 0x3] - ldr r0, [sp] - str r0, [r1, 0x8] - mov r2, r8 - subs r0, r2, r4 - strh r0, [r1, 0x4] - mov r2, r9 - ldrb r0, [r2] - mov r2, r8 - subs r0, r2 - mov r2, r9 - strb r0, [r2] - ldr r0, _081E217C @ =0x00008024 - strh r0, [r1] - mov r0, r10 - ldr r2, [r0] - ldrb r1, [r2, 0x6] - adds r0, r3, 0 - orrs r0, r1 - strb r0, [r2, 0x6] -_081E215C: - ldr r0, _081E2180 @ =0x04000208 - mov r1, sp - ldrh r1, [r1, 0x4] - strh r1, [r0] - movs r0, 0 -_081E2166: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_081E2178: .4byte gRfuSlotStatusUNI -_081E217C: .4byte 0x00008024 -_081E2180: .4byte 0x04000208 - thumb_func_end rfu_STC_setSendData_org - - thumb_func_start rfu_changeSendTarget -rfu_changeSendTarget: @ 81E2184 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - adds r3, r0, 0 - lsls r1, 24 - lsrs r7, r1, 24 - lsls r2, 24 - lsrs r6, r2, 24 - cmp r7, 0x3 - bls _081E21A8 - movs r0, 0x80 - lsls r0, 3 - b _081E22DC -_081E21A8: - cmp r0, 0x20 - bne _081E2248 - ldr r0, _081E2238 @ =gRfuSlotStatusNI - mov r12, r0 - lsls r0, r7, 2 - add r0, r12 - ldr r5, [r0] - ldrh r2, [r5] - ldr r1, _081E223C @ =0x00008020 - adds r0, r1, 0 - ands r0, r2 - cmp r0, r1 - bne _081E225E - ldrb r0, [r5, 0x1A] - adds r3, r6, 0 - eors r3, r0 - adds r2, r3, 0 - ands r2, r6 - cmp r2, 0 - bne _081E2296 - cmp r3, 0 - bne _081E21D6 - b _081E22DA -_081E21D6: - ldr r1, _081E2240 @ =0x04000208 - ldrh r0, [r1] - mov r8, r0 - strh r2, [r1] - movs r2, 0 - mvns r1, r3 - str r1, [sp] - lsls r4, r6, 24 - mov r10, r4 - movs r0, 0x1 - mov r9, r0 - movs r1, 0 -_081E21EE: - adds r0, r3, 0 - asrs r0, r2 - mov r4, r9 - ands r0, r4 - cmp r0, 0 - beq _081E2202 - lsls r0, r2, 2 - add r0, r12 - ldr r0, [r0] - strh r1, [r0, 0x2] -_081E2202: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3 - bls _081E21EE - ldr r0, _081E2244 @ =gRfuLinkStatus - ldr r1, [r0] - ldrb r0, [r1, 0x4] - ldr r2, [sp] - ands r2, r0 - strb r2, [r1, 0x4] - strb r6, [r5, 0x1A] - mov r0, r10 - cmp r0, 0 - bne _081E222E - adds r0, r7, 0 - movs r1, 0 - adds r2, r5, 0 - bl rfu_STC_releaseFrame - movs r0, 0x27 - strh r0, [r5] -_081E222E: - ldr r0, _081E2240 @ =0x04000208 - mov r1, r8 - strh r1, [r0] - b _081E22DA - .align 2, 0 -_081E2238: .4byte gRfuSlotStatusNI -_081E223C: .4byte 0x00008020 -_081E2240: .4byte 0x04000208 -_081E2244: .4byte gRfuLinkStatus -_081E2248: - cmp r3, 0x10 - bne _081E22D4 - ldr r3, _081E2264 @ =gRfuSlotStatusUNI - lsls r1, r7, 2 - adds r0, r1, r3 - ldr r0, [r0] - ldrh r2, [r0] - ldr r0, _081E2268 @ =0x00008024 - adds r5, r3, 0 - cmp r2, r0 - beq _081E2270 -_081E225E: - ldr r0, _081E226C @ =0x00000403 - b _081E22DC - .align 2, 0 -_081E2264: .4byte gRfuSlotStatusUNI -_081E2268: .4byte 0x00008024 -_081E226C: .4byte 0x00000403 -_081E2270: - movs r3, 0 - movs r2, 0 - adds r4, r5, 0 -_081E2276: - cmp r2, r7 - beq _081E2284 - lsls r0, r2, 2 - adds r0, r4 - ldr r0, [r0] - ldrb r0, [r0, 0x3] - orrs r3, r0 -_081E2284: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3 - bls _081E2276 - adds r2, r6, 0 - ands r2, r3 - cmp r2, 0 - beq _081E22A0 -_081E2296: - ldr r0, _081E229C @ =0x00000404 - b _081E22DC - .align 2, 0 -_081E229C: .4byte 0x00000404 -_081E22A0: - ldr r3, _081E22CC @ =0x04000208 - ldrh r0, [r3] - mov r8, r0 - strh r2, [r3] - ldr r4, _081E22D0 @ =gRfuLinkStatus - ldr r2, [r4] - adds r5, r1, r5 - ldr r0, [r5] - ldrb r1, [r0, 0x3] - ldrb r0, [r2, 0x6] - bics r0, r1 - strb r0, [r2, 0x6] - ldr r2, [r4] - ldrb r1, [r2, 0x6] - adds r0, r6, 0 - orrs r0, r1 - strb r0, [r2, 0x6] - ldr r0, [r5] - strb r6, [r0, 0x3] - mov r2, r8 - strh r2, [r3] - b _081E22DA - .align 2, 0 -_081E22CC: .4byte 0x04000208 -_081E22D0: .4byte gRfuLinkStatus -_081E22D4: - movs r0, 0xC0 - lsls r0, 3 - b _081E22DC -_081E22DA: - movs r0, 0 -_081E22DC: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end rfu_changeSendTarget - - thumb_func_start rfu_NI_stopReceivingData -rfu_NI_stopReceivingData: @ 81E22EC - push {r4,r5,lr} - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3 - bls _081E22FC - movs r0, 0x80 - lsls r0, 3 - b _081E2356 -_081E22FC: - ldr r1, _081E2328 @ =gRfuSlotStatusNI - lsls r0, r3, 2 - adds r0, r1 - ldr r2, [r0] - adds r5, r2, 0 - adds r5, 0x34 - ldr r1, _081E232C @ =0x04000208 - ldrh r0, [r1] - adds r4, r0, 0 - movs r0, 0 - strh r0, [r1] - ldrh r1, [r2, 0x34] - movs r0, 0x80 - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _081E2350 - ldr r0, _081E2330 @ =0x00008043 - cmp r1, r0 - bne _081E2334 - movs r0, 0x48 - b _081E2336 - .align 2, 0 -_081E2328: .4byte gRfuSlotStatusNI -_081E232C: .4byte 0x04000208 -_081E2330: .4byte 0x00008043 -_081E2334: - movs r0, 0x47 -_081E2336: - strh r0, [r2, 0x34] - ldr r0, _081E235C @ =gRfuLinkStatus - ldr r2, [r0] - movs r1, 0x1 - lsls r1, r3 - ldrb r0, [r2, 0x5] - bics r0, r1 - strb r0, [r2, 0x5] - adds r0, r3, 0 - movs r1, 0x1 - adds r2, r5, 0 - bl rfu_STC_releaseFrame -_081E2350: - ldr r0, _081E2360 @ =0x04000208 - strh r4, [r0] - movs r0, 0 -_081E2356: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_081E235C: .4byte gRfuLinkStatus -_081E2360: .4byte 0x04000208 - thumb_func_end rfu_NI_stopReceivingData - - thumb_func_start rfu_UNI_changeAndReadySendData -rfu_UNI_changeAndReadySendData: @ 81E2364 - push {r4-r7,lr} - adds r7, r1, 0 - lsls r0, 24 - lsrs r0, 24 - adds r3, r0, 0 - lsls r2, 24 - lsrs r5, r2, 24 - cmp r0, 0x3 - bls _081E237C - movs r0, 0x80 - lsls r0, 3 - b _081E23F0 -_081E237C: - ldr r1, _081E2390 @ =gRfuSlotStatusUNI - lsls r0, 2 - adds r0, r1 - ldr r4, [r0] - ldrh r1, [r4] - ldr r0, _081E2394 @ =0x00008024 - cmp r1, r0 - beq _081E239C - ldr r0, _081E2398 @ =0x00000403 - b _081E23F0 - .align 2, 0 -_081E2390: .4byte gRfuSlotStatusUNI -_081E2394: .4byte 0x00008024 -_081E2398: .4byte 0x00000403 -_081E239C: - ldr r0, _081E23B0 @ =gRfuLinkStatus - ldr r1, [r0] - ldrb r0, [r1] - cmp r0, 0x1 - bne _081E23B4 - adds r6, r1, 0 - adds r6, 0xF - ldrb r0, [r4, 0x4] - ldrb r1, [r1, 0xF] - b _081E23C2 - .align 2, 0 -_081E23B0: .4byte gRfuLinkStatus -_081E23B4: - adds r0, r3, 0 - adds r0, 0x10 - adds r6, r1, r0 - adds r1, 0x10 - adds r1, r3 - ldrb r0, [r4, 0x4] - ldrb r1, [r1] -_081E23C2: - adds r0, r1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, r5 - bcc _081E23EC - ldr r2, _081E23E8 @ =0x04000208 - ldrh r1, [r2] - movs r0, 0 - strh r0, [r2] - str r7, [r4, 0x8] - subs r0, r3, r5 - strb r0, [r6] - strh r5, [r4, 0x4] - movs r0, 0x1 - strb r0, [r4, 0x2] - strh r1, [r2] - movs r0, 0 - b _081E23F0 - .align 2, 0 -_081E23E8: .4byte 0x04000208 -_081E23EC: - movs r0, 0xA0 - lsls r0, 3 -_081E23F0: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end rfu_UNI_changeAndReadySendData - - thumb_func_start rfu_UNI_readySendData -rfu_UNI_readySendData: @ 81E23F8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bhi _081E2416 - ldr r1, _081E241C @ =gRfuSlotStatusUNI - lsls r0, 2 - adds r0, r1 - ldr r2, [r0] - ldrh r1, [r2] - ldr r0, _081E2420 @ =0x00008024 - cmp r1, r0 - bne _081E2416 - movs r0, 0x1 - strb r0, [r2, 0x2] -_081E2416: - pop {r0} - bx r0 - .align 2, 0 -_081E241C: .4byte gRfuSlotStatusUNI -_081E2420: .4byte 0x00008024 - thumb_func_end rfu_UNI_readySendData - - thumb_func_start rfu_UNI_clearRecvNewDataFlag -rfu_UNI_clearRecvNewDataFlag: @ 81E2424 - push {lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bhi _081E243A - ldr r1, _081E2440 @ =gRfuSlotStatusUNI - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - movs r0, 0 - strb r0, [r1, 0x12] -_081E243A: - pop {r0} - bx r0 - .align 2, 0 -_081E2440: .4byte gRfuSlotStatusUNI - thumb_func_end rfu_UNI_clearRecvNewDataFlag - - thumb_func_start rfu_REQ_sendData -rfu_REQ_sendData: @ 81E2444 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _081E2490 @ =gRfuLinkStatus - ldr r2, [r0] - ldrb r1, [r2] - adds r4, r0, 0 - cmp r1, 0xFF - bne _081E2458 - b _081E257E -_081E2458: - cmp r1, 0x1 - bne _081E24E8 - ldrb r0, [r2, 0x4] - ldrb r1, [r2, 0x5] - adds r3, r0, 0 - orrs r3, r1 - ldrb r0, [r2, 0x6] - orrs r3, r0 - cmp r3, 0 - bne _081E24E8 - ldr r0, _081E2494 @ =gRfuStatic - ldr r2, [r0] - ldrb r1, [r2, 0x3] - adds r4, r0, 0 - cmp r1, 0 - beq _081E2480 - movs r0, 0x10 - strb r0, [r2, 0x8] - ldr r0, [r4] - strb r3, [r0, 0x7] -_081E2480: - ldr r1, [r4] - ldrb r0, [r1, 0x8] - cmp r0, 0 - beq _081E2498 - subs r0, 0x1 - strb r0, [r1, 0x8] - b _081E249E - .align 2, 0 -_081E2490: .4byte gRfuLinkStatus -_081E2494: .4byte gRfuStatic -_081E2498: - ldrb r0, [r1, 0x7] - adds r0, 0x1 - strb r0, [r1, 0x7] -_081E249E: - ldr r1, [r4] - ldrb r0, [r1, 0x8] - cmp r0, 0 - bne _081E24B0 - ldrb r1, [r1, 0x7] - movs r0, 0xF - ands r0, r1 - cmp r0, 0 - bne _081E2542 -_081E24B0: - ldr r4, _081E24D4 @ =gRfuFixed - ldr r1, [r4] - movs r0, 0x1 - str r0, [r1, 0x68] - movs r0, 0xFF - str r0, [r1, 0x78] - ldr r0, _081E24D8 @ =rfu_CB_sendData3 - bl STWI_set_Callback_M - cmp r5, 0 - bne _081E24DC - ldr r0, [r4] - adds r0, 0x68 - movs r1, 0x1 - bl STWI_send_DataTxREQ - b _081E257E - .align 2, 0 -_081E24D4: .4byte gRfuFixed -_081E24D8: .4byte rfu_CB_sendData3 -_081E24DC: - ldr r0, [r4] - adds r0, 0x68 - movs r1, 0x1 - bl STWI_send_DataTxAndChangeREQ - b _081E257E -_081E24E8: - ldr r0, [r4] - ldrb r0, [r0, 0xE] - cmp r0, 0 - bne _081E24F4 - bl rfu_constructSendLLFrame -_081E24F4: - ldr r0, [r4] - ldrb r0, [r0, 0xE] - cmp r0, 0 - beq _081E2542 - ldr r0, _081E2520 @ =rfu_CB_sendData - bl STWI_set_Callback_M - cmp r5, 0 - beq _081E252C - ldr r0, _081E2524 @ =gRfuFixed - ldr r0, [r0] - adds r0, 0x68 - ldr r1, _081E2528 @ =gRfuStatic - ldr r1, [r1] - ldr r1, [r1, 0x24] - adds r1, 0x4 - lsls r1, 24 - lsrs r1, 24 - bl STWI_send_DataTxAndChangeREQ - b _081E257E - .align 2, 0 -_081E2520: .4byte rfu_CB_sendData -_081E2524: .4byte gRfuFixed -_081E2528: .4byte gRfuStatic -_081E252C: - ldr r0, _081E2564 @ =gRfuFixed - ldr r0, [r0] - adds r0, 0x68 - ldr r1, _081E2568 @ =gRfuStatic - ldr r1, [r1] - ldr r1, [r1, 0x24] - adds r1, 0x4 - lsls r1, 24 - lsrs r1, 24 - bl STWI_send_DataTxREQ -_081E2542: - cmp r5, 0 - beq _081E257E - ldr r0, _081E256C @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0x1 - bne _081E2574 - ldr r0, _081E2570 @ =gRfuState - ldr r0, [r0] - ldr r1, [r0, 0x1C] - cmp r1, 0 - beq _081E257E - movs r0, 0x27 - bl _call_via_r1 - b _081E257E - .align 2, 0 -_081E2564: .4byte gRfuFixed -_081E2568: .4byte gRfuStatic -_081E256C: .4byte gRfuLinkStatus -_081E2570: .4byte gRfuState -_081E2574: - ldr r0, _081E2584 @ =rfu_CB_sendData2 - bl STWI_set_Callback_M - bl STWI_send_MS_ChangeREQ -_081E257E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081E2584: .4byte rfu_CB_sendData2 - thumb_func_end rfu_REQ_sendData - - thumb_func_start rfu_CB_sendData -rfu_CB_sendData: @ 81E2588 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r1, 16 - lsrs r7, r1, 16 - cmp r7, 0 - bne _081E25F2 - movs r6, 0 - ldr r0, _081E2610 @ =0x00008020 - mov r8, r0 -_081E259C: - ldr r0, _081E2614 @ =gRfuSlotStatusUNI - lsls r2, r6, 2 - adds r0, r2, r0 - ldr r1, [r0] - ldrb r0, [r1, 0x2] - cmp r0, 0 - beq _081E25AE - movs r0, 0 - strb r0, [r1, 0x2] -_081E25AE: - ldr r0, _081E2618 @ =gRfuSlotStatusNI - adds r0, r2, r0 - ldr r4, [r0] - ldrh r0, [r4] - cmp r0, r8 - bne _081E25E8 - adds r0, r6, 0 - movs r1, 0 - adds r2, r4, 0 - bl rfu_STC_releaseFrame - ldr r5, _081E261C @ =gRfuLinkStatus - ldr r2, [r5] - ldrb r1, [r4, 0x1A] - ldrb r0, [r2, 0x4] - bics r0, r1 - strb r0, [r2, 0x4] - adds r0, r4, 0 - adds r0, 0x2D - ldrb r3, [r0] - cmp r3, 0x1 - bne _081E25E4 - ldr r1, [r5] - lsls r3, r6 - ldrb r0, [r1, 0x7] - orrs r3, r0 - strb r3, [r1, 0x7] -_081E25E4: - movs r0, 0x26 - strh r0, [r4] -_081E25E8: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x3 - bls _081E259C -_081E25F2: - ldr r0, _081E261C @ =gRfuLinkStatus - ldr r1, [r0] - ldrb r0, [r1, 0xE] - movs r0, 0 - strb r0, [r1, 0xE] - movs r0, 0x24 - adds r1, r7, 0 - bl rfu_STC_REQ_callback - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081E2610: .4byte 0x00008020 -_081E2614: .4byte gRfuSlotStatusUNI -_081E2618: .4byte gRfuSlotStatusNI -_081E261C: .4byte gRfuLinkStatus - thumb_func_end rfu_CB_sendData - - thumb_func_start rfu_CB_sendData2 -rfu_CB_sendData2: @ 81E2620 - push {lr} - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x24 - bl rfu_STC_REQ_callback - pop {r0} - bx r0 - thumb_func_end rfu_CB_sendData2 - - thumb_func_start rfu_CB_sendData3 -rfu_CB_sendData3: @ 81E2630 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 16 - lsrs r1, 16 - cmp r1, 0 - beq _081E2646 - movs r0, 0x24 - bl rfu_STC_REQ_callback - b _081E2652 -_081E2646: - cmp r0, 0xFF - bne _081E2652 - movs r0, 0xFF - movs r1, 0 - bl rfu_STC_REQ_callback -_081E2652: - pop {r0} - bx r0 - thumb_func_end rfu_CB_sendData3 - - thumb_func_start rfu_constructSendLLFrame -rfu_constructSendLLFrame: @ 81E2658 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - ldr r0, _081E2704 @ =gRfuLinkStatus - ldr r2, [r0] - ldrb r0, [r2] - cmp r0, 0xFF - bne _081E2670 - b _081E2774 -_081E2670: - ldrb r0, [r2, 0x4] - ldrb r1, [r2, 0x5] - orrs r0, r1 - ldrb r1, [r2, 0x6] - orrs r0, r1 - cmp r0, 0 - beq _081E2774 - ldrb r0, [r2, 0xE] - movs r0, 0 - strb r0, [r2, 0xE] - mov r8, r0 - ldr r0, _081E2708 @ =gRfuFixed - ldr r0, [r0] - adds r0, 0x6C - str r0, [sp] - movs r6, 0 - movs r0, 0x80 - lsls r0, 8 - mov r9, r0 - ldr r1, _081E270C @ =0x00008024 - mov r10, r1 -_081E269A: - movs r5, 0 - ldr r0, _081E2710 @ =gRfuSlotStatusNI - lsls r7, r6, 2 - adds r4, r7, r0 - ldr r2, [r4] - ldrh r1, [r2] - mov r0, r9 - ands r0, r1 - cmp r0, 0 - beq _081E26BA - adds r0, r6, 0 - mov r1, sp - bl rfu_STC_NI_constructLLSF - lsls r0, 16 - lsrs r5, r0, 16 -_081E26BA: - ldr r2, [r4] - ldrh r1, [r2, 0x34] - mov r0, r9 - ands r0, r1 - cmp r0, 0 - beq _081E26D6 - adds r2, 0x34 - adds r0, r6, 0 - mov r1, sp - bl rfu_STC_NI_constructLLSF - lsls r0, 16 - lsrs r0, 16 - adds r5, r0 -_081E26D6: - ldr r0, _081E2714 @ =gRfuSlotStatusUNI - adds r0, r7, r0 - ldr r0, [r0] - ldrh r0, [r0] - cmp r0, r10 - bne _081E26F0 - adds r0, r6, 0 - mov r1, sp - bl rfu_STC_UNI_constructLLSF - lsls r0, 16 - lsrs r0, 16 - adds r5, r0 -_081E26F0: - cmp r5, 0 - beq _081E2724 - ldr r0, _081E2704 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0x1 - bne _081E2718 - add r8, r5 - b _081E2724 - .align 2, 0 -_081E2704: .4byte gRfuLinkStatus -_081E2708: .4byte gRfuFixed -_081E270C: .4byte 0x00008024 -_081E2710: .4byte gRfuSlotStatusNI -_081E2714: .4byte gRfuSlotStatusUNI -_081E2718: - adds r0, r7, r6 - adds r0, 0x8 - lsls r5, r0 - mov r2, r8 - orrs r2, r5 - mov r8, r2 -_081E2724: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x3 - bls _081E269A - ldr r6, _081E2784 @ =gRfuStatic - mov r0, r8 - cmp r0, 0 - beq _081E276E - ldr r2, [sp] - movs r0, 0x3 - ands r0, r2 - ldr r5, _081E2788 @ =gRfuLinkStatus - ldr r1, _081E278C @ =gRfuFixed - cmp r0, 0 - beq _081E2756 - movs r4, 0 - movs r3, 0x3 -_081E2748: - strb r4, [r2] - adds r0, r2, 0x1 - str r0, [sp] - adds r2, r0, 0 - ands r0, r3 - cmp r0, 0 - bne _081E2748 -_081E2756: - ldr r0, [r1] - mov r2, r8 - str r2, [r0, 0x68] - ldr r0, [r5] - ldrb r0, [r0] - cmp r0, 0 - bne _081E276E - ldr r0, [sp] - subs r0, 0x6C - ldr r1, [r1] - subs r0, r1 - mov r8, r0 -_081E276E: - ldr r0, [r6] - mov r1, r8 - str r1, [r0, 0x24] -_081E2774: - 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 -_081E2784: .4byte gRfuStatic -_081E2788: .4byte gRfuLinkStatus -_081E278C: .4byte gRfuFixed - thumb_func_end rfu_constructSendLLFrame - - thumb_func_start rfu_STC_NI_constructLLSF -rfu_STC_NI_constructLLSF: @ 81E2790 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - mov r12, r1 - adds r4, r2, 0 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - ldr r2, _081E280C @ =gRfuLinkStatus - ldr r0, [r2] - ldrb r0, [r0] - lsls r0, 4 - ldr r1, _081E2810 @ =_Str_RfuHeader - adds r0, r1 - mov r8, r0 - ldrh r1, [r4] - ldr r0, _081E2814 @ =0x00008022 - cmp r1, r0 - bne _081E27FA - adds r3, r4, 0 - adds r3, 0x20 - ldrb r1, [r3] - lsls r1, 2 - adds r5, r4, 0x4 - adds r1, r5, r1 - ldr r2, [r4, 0x28] - ldr r0, [r4, 0x30] - adds r2, r0 - ldr r0, [r1] - adds r6, r3, 0 - cmp r0, r2 - bcc _081E27FA - movs r7, 0 -_081E27D8: - ldrb r0, [r3] - adds r0, 0x1 - strb r0, [r3] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bne _081E27E8 - strb r7, [r6] -_081E27E8: - ldrb r1, [r3] - lsls r1, 2 - adds r1, r5, r1 - ldr r2, [r4, 0x28] - ldr r0, [r4, 0x30] - adds r2, r0 - ldr r0, [r1] - cmp r0, r2 - bcs _081E27D8 -_081E27FA: - ldrh r1, [r4] - movs r0, 0x40 - ands r0, r1 - mov r9, r1 - cmp r0, 0 - beq _081E2818 - movs r5, 0 - b _081E285C - .align 2, 0 -_081E280C: .4byte gRfuLinkStatus -_081E2810: .4byte _Str_RfuHeader -_081E2814: .4byte 0x00008022 -_081E2818: - ldr r0, _081E2844 @ =0x00008022 - cmp r9, r0 - bne _081E284C - adds r3, r4, 0 - adds r3, 0x20 - ldrb r0, [r3] - lsls r0, 2 - adds r1, r4, 0x4 - adds r1, r0 - ldrh r7, [r4, 0x2E] - ldr r5, [r1] - adds r2, r5, r7 - ldr r1, [r4, 0x28] - ldr r0, [r4, 0x30] - adds r0, r1, r0 - adds r6, r3, 0 - cmp r2, r0 - bls _081E2848 - subs r0, r5 - lsls r0, 16 - lsrs r5, r0, 16 - b _081E2860 - .align 2, 0 -_081E2844: .4byte 0x00008022 -_081E2848: - adds r5, r7, 0 - b _081E2860 -_081E284C: - ldrh r2, [r4, 0x2E] - ldr r0, [r4, 0x14] - cmp r0, r2 - bcc _081E2858 - adds r5, r2, 0 - b _081E285C -_081E2858: - lsls r0, 16 - lsrs r5, r0, 16 -_081E285C: - adds r6, r4, 0 - adds r6, 0x20 -_081E2860: - movs r3, 0xF - mov r0, r9 - ands r3, r0 - mov r1, r8 - ldrb r1, [r1, 0x3] - lsls r3, r1 - ldrb r0, [r4, 0x1F] - mov r2, r8 - ldrb r2, [r2, 0x4] - lsls r0, r2 - orrs r3, r0 - ldrb r1, [r6] - adds r0, r1, 0 - mov r7, r8 - ldrb r7, [r7, 0x5] - lsls r0, r7 - orrs r3, r0 - adds r0, r4, 0 - adds r0, 0x21 - adds r0, r1 - ldrb r0, [r0] - mov r1, r8 - ldrb r1, [r1, 0x6] - lsls r0, r1 - orrs r3, r0 - orrs r3, r5 - str r3, [sp] - ldr r2, _081E291C @ =gRfuLinkStatus - ldr r0, [r2] - ldrb r0, [r0] - cmp r0, 0x1 - bne _081E28A8 - ldrb r0, [r4, 0x1A] - lsls r0, 18 - orrs r3, r0 - str r3, [sp] -_081E28A8: - mov r2, sp - movs r3, 0 - mov r7, r8 - ldrb r7, [r7] - cmp r3, r7 - bcs _081E28D2 -_081E28B4: - mov r0, r12 - ldr r1, [r0] - ldrb r0, [r2] - strb r0, [r1] - adds r2, 0x1 - adds r1, 0x1 - mov r7, r12 - str r1, [r7] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - mov r0, r8 - ldrb r0, [r0] - cmp r3, r0 - bcc _081E28B4 -_081E28D2: - cmp r5, 0 - beq _081E28F2 - ldrb r1, [r6] - lsls r1, 2 - adds r0, r4, 0x4 - adds r0, r1 - ldr r0, [r0] - str r0, [sp, 0x4] - ldr r0, _081E2920 @ =gRfuFixed - ldr r1, [r0] - add r0, sp, 0x4 - ldr r3, [r1, 0x4] - mov r1, r12 - adds r2, r5, 0 - bl _call_via_r3 -_081E28F2: - ldrh r1, [r4] - ldr r0, _081E2924 @ =0x00008022 - cmp r1, r0 - bne _081E290C - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bne _081E290C - movs r0, 0 - strb r0, [r6] -_081E290C: - ldr r0, _081E291C @ =gRfuLinkStatus - ldr r2, [r0] - ldrb r1, [r2] - cmp r1, 0x1 - bne _081E2928 - ldrb r0, [r2, 0xE] - strb r1, [r2, 0xE] - b _081E2936 - .align 2, 0 -_081E291C: .4byte gRfuLinkStatus -_081E2920: .4byte gRfuFixed -_081E2924: .4byte 0x00008022 -_081E2928: - movs r0, 0x1 - mov r1, r10 - lsls r0, r1 - ldrb r1, [r2, 0xE] - orrs r0, r1 - ldrb r1, [r2, 0xE] - strb r0, [r2, 0xE] -_081E2936: - mov r2, r8 - ldrb r0, [r2] - adds r0, r5, r0 - lsls r0, 16 - lsrs r0, 16 - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end rfu_STC_NI_constructLLSF - - thumb_func_start rfu_STC_UNI_constructLLSF -rfu_STC_UNI_constructLLSF: @ 81E2950 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - adds r6, r1, 0 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r1, _081E2978 @ =gRfuSlotStatusUNI - lsls r0, 2 - adds r0, r1 - ldr r4, [r0] - ldrb r0, [r4, 0x2] - cmp r0, 0 - beq _081E2974 - ldrb r0, [r4, 0x3] - cmp r0, 0 - bne _081E297C -_081E2974: - movs r0, 0 - b _081E2A18 - .align 2, 0 -_081E2978: .4byte gRfuSlotStatusUNI -_081E297C: - ldr r0, _081E29F4 @ =gRfuLinkStatus - ldr r2, [r0] - ldrb r0, [r2] - lsls r0, 4 - ldr r1, _081E29F8 @ =_Str_RfuHeader - adds r5, r0, r1 - ldrh r0, [r4] - movs r1, 0xF - ands r1, r0 - ldrb r0, [r5, 0x3] - lsls r1, r0 - ldrh r0, [r4, 0x4] - orrs r1, r0 - str r1, [sp] - ldrb r0, [r2] - cmp r0, 0x1 - bne _081E29A6 - ldrb r0, [r4, 0x3] - lsls r0, 18 - orrs r1, r0 - str r1, [sp] -_081E29A6: - mov r2, sp - movs r3, 0 - ldr r1, _081E29FC @ =gRfuFixed - mov r12, r1 - add r7, sp, 0x4 - ldrb r0, [r5] - cmp r3, r0 - bcs _081E29CE -_081E29B6: - ldr r1, [r6] - ldrb r0, [r2] - strb r0, [r1] - adds r2, 0x1 - adds r1, 0x1 - str r1, [r6] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - ldrb r1, [r5] - cmp r3, r1 - bcc _081E29B6 -_081E29CE: - ldr r0, [r4, 0x8] - str r0, [sp, 0x4] - mov r2, r12 - ldr r0, [r2] - ldrh r2, [r4, 0x4] - ldr r3, [r0, 0x4] - adds r0, r7, 0 - adds r1, r6, 0 - bl _call_via_r3 - ldr r0, _081E29F4 @ =gRfuLinkStatus - ldr r2, [r0] - ldrb r0, [r2] - cmp r0, 0x1 - bne _081E2A00 - ldrb r0, [r2, 0xE] - movs r0, 0x10 - b _081E2A0C - .align 2, 0 -_081E29F4: .4byte gRfuLinkStatus -_081E29F8: .4byte _Str_RfuHeader -_081E29FC: .4byte gRfuFixed -_081E2A00: - movs r0, 0x10 - mov r1, r8 - lsls r0, r1 - ldrb r1, [r2, 0xE] - orrs r0, r1 - ldrb r1, [r2, 0xE] -_081E2A0C: - strb r0, [r2, 0xE] - ldrh r0, [r4, 0x4] - ldrb r5, [r5] - adds r0, r5 - lsls r0, 16 - lsrs r0, 16 -_081E2A18: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end rfu_STC_UNI_constructLLSF - - thumb_func_start rfu_REQ_recvData -rfu_REQ_recvData: @ 81E2A24 - push {r4,lr} - ldr r0, _081E2A58 @ =gRfuLinkStatus - ldr r4, [r0] - ldrb r0, [r4] - cmp r0, 0xFF - beq _081E2A50 - ldr r2, _081E2A5C @ =gRfuStatic - ldr r3, [r2] - ldrb r0, [r4, 0x4] - ldrb r1, [r4, 0x5] - orrs r0, r1 - ldrb r1, [r4, 0x6] - orrs r0, r1 - movs r1, 0 - strb r0, [r3, 0x3] - ldr r0, [r2] - strb r1, [r0, 0x4] - ldr r0, _081E2A60 @ =rfu_CB_recvData - bl STWI_set_Callback_M - bl STWI_send_DataRxREQ -_081E2A50: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081E2A58: .4byte gRfuLinkStatus -_081E2A5C: .4byte gRfuStatic -_081E2A60: .4byte rfu_CB_recvData - thumb_func_end rfu_REQ_recvData - - thumb_func_start rfu_CB_recvData -rfu_CB_recvData: @ 81E2A64 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r1, 16 - lsrs r7, r1, 16 - cmp r7, 0 - bne _081E2B28 - ldr r0, _081E2AA0 @ =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r0, [r0] - ldrb r0, [r0, 0x1] - cmp r0, 0 - beq _081E2B28 - ldr r0, _081E2AA4 @ =gRfuStatic - ldr r0, [r0] - strb r7, [r0, 0x1] - ldr r0, _081E2AA8 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0x1 - bne _081E2AAC - bl rfu_STC_PARENT_analyzeRecvPacket - b _081E2AB0 - .align 2, 0 -_081E2AA0: .4byte gRfuFixed -_081E2AA4: .4byte gRfuStatic -_081E2AA8: .4byte gRfuLinkStatus -_081E2AAC: - bl rfu_STC_CHILD_analyzeRecvPacket -_081E2AB0: - movs r6, 0 - ldr r0, _081E2B40 @ =0x00008043 - mov r8, r0 - ldr r3, _081E2B44 @ =gRfuLinkStatus -_081E2AB8: - ldr r0, _081E2B48 @ =gRfuSlotStatusNI - lsls r1, r6, 2 - adds r1, r0 - ldr r4, [r1] - ldrh r0, [r4, 0x34] - cmp r0, r8 - bne _081E2B0A - ldr r0, _081E2B4C @ =gRfuStatic - ldr r0, [r0] - ldrb r0, [r0, 0x1] - asrs r0, r6 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - bne _081E2B0A - adds r5, r4, 0 - adds r5, 0x34 - adds r0, r4, 0 - adds r0, 0x61 - ldrb r2, [r0] - cmp r2, 0x1 - bne _081E2AEE - ldr r1, [r3] - lsls r2, r6 - ldrb r0, [r1, 0x7] - orrs r2, r0 - strb r2, [r1, 0x7] -_081E2AEE: - adds r0, r6, 0 - movs r1, 0x1 - adds r2, r5, 0 - str r3, [sp] - bl rfu_STC_releaseFrame - ldr r3, [sp] - ldr r2, [r3] - ldrb r1, [r5, 0x1A] - ldrb r0, [r2, 0x5] - bics r0, r1 - strb r0, [r2, 0x5] - movs r0, 0x46 - strh r0, [r4, 0x34] -_081E2B0A: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x3 - bls _081E2AB8 - ldr r0, _081E2B4C @ =gRfuStatic - ldr r1, [r0] - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _081E2B28 - adds r7, r0, 0 - movs r1, 0xE0 - lsls r1, 3 - adds r0, r1, 0 - orrs r7, r0 -_081E2B28: - mov r0, r9 - adds r1, r7, 0 - bl rfu_STC_REQ_callback - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081E2B40: .4byte 0x00008043 -_081E2B44: .4byte gRfuLinkStatus -_081E2B48: .4byte gRfuSlotStatusNI -_081E2B4C: .4byte gRfuStatic - thumb_func_end rfu_CB_recvData - - thumb_func_start rfu_STC_PARENT_analyzeRecvPacket -rfu_STC_PARENT_analyzeRecvPacket: @ 81E2B50 - push {r4-r7,lr} - sub sp, 0x4 - ldr r1, _081E2BE0 @ =gRfuFixed - ldr r0, [r1] - adds r0, 0xDC - ldr r0, [r0] - ldr r0, [r0, 0x4] - lsrs r3, r0, 8 - movs r5, 0 - mov r12, r1 - movs r7, 0x1F - ldr r4, _081E2BE4 @ =gRfuStatic - movs r6, 0x1 -_081E2B6A: - mov r0, sp - adds r1, r0, r5 - adds r0, r3, 0 - ands r0, r7 - strb r0, [r1] - lsrs r3, 5 - cmp r0, 0 - bne _081E2B86 - ldr r0, [r4] - adds r1, r6, 0 - lsls r1, r5 - ldrb r2, [r0, 0x1] - orrs r1, r2 - strb r1, [r0, 0x1] -_081E2B86: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _081E2B6A - mov r1, r12 - ldr r0, [r1] - adds r0, 0xDC - ldr r0, [r0] - adds r6, r0, 0 - adds r6, 0x8 - movs r5, 0 -_081E2B9E: - mov r0, sp - adds r1, r0, r5 - ldrb r0, [r1] - adds r7, r5, 0x1 - cmp r0, 0 - beq _081E2BD0 - adds r4, r1, 0 -_081E2BAC: - ldrb r2, [r4] - adds r0, r5, 0 - adds r1, r6, 0 - bl rfu_STC_analyzeLLSF - lsls r0, 24 - lsrs r0, 24 - adds r6, r0 - ldrb r1, [r4] - subs r1, r0 - strb r1, [r4] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _081E2BD0 - lsls r0, r1, 24 - cmp r0, 0 - bne _081E2BAC -_081E2BD0: - lsls r0, r7, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _081E2B9E - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081E2BE0: .4byte gRfuFixed -_081E2BE4: .4byte gRfuStatic - thumb_func_end rfu_STC_PARENT_analyzeRecvPacket - - thumb_func_start rfu_STC_CHILD_analyzeRecvPacket -rfu_STC_CHILD_analyzeRecvPacket: @ 81E2BE8 - push {r4-r6,lr} - ldr r0, _081E2C38 @ =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r1, [r0] - ldrh r0, [r1, 0x4] - movs r4, 0x7F - ands r4, r0 - adds r5, r1, 0 - adds r5, 0x8 - cmp r4, 0 - bne _081E2C08 - ldr r0, _081E2C3C @ =gRfuStatic - ldr r1, [r0] - movs r0, 0xF - strb r0, [r1, 0x1] -_081E2C08: - movs r0, 0x80 - lsls r0, 8 - adds r6, r0, 0 -_081E2C0E: - cmp r4, 0 - beq _081E2C30 - movs r0, 0 - adds r1, r5, 0 - adds r2, r4, 0 - bl rfu_STC_analyzeLLSF - lsls r0, 16 - lsrs r0, 16 - adds r5, r0 - subs r0, r4, r0 - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r4, 0 - ands r0, r6 - cmp r0, 0 - beq _081E2C0E -_081E2C30: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081E2C38: .4byte gRfuFixed -_081E2C3C: .4byte gRfuStatic - thumb_func_end rfu_STC_CHILD_analyzeRecvPacket - thumb_func_start rfu_STC_analyzeLLSF rfu_STC_analyzeLLSF: @ 81E2C40 push {r4-r7,lr} diff --git a/include/librfu.h b/include/librfu.h index 9482b94c4..ff160e207 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -3,6 +3,12 @@ #include "main.h" +/* TODOs: + * - documentation + * - check if any field needs to be volatile + * - decompile librfu_intr.s once arm support is back again + */ + enum { RFU_RESET = 0x10, @@ -134,16 +140,25 @@ struct RfuIntrStruct struct RfuSlotStatusUNI { - u16 sendState; - u8 dataReadyFlag; - u8 bmSlot; - u16 payloadSize; - void *src; // TODO: is it correct? - u16 recvState; - u16 errorCode; - u16 dataSize; - u8 newDataFlag; - u8 dataBlockFlag; + struct + { + struct UNISend + { + u16 state; + u8 dataReadyFlag; + u8 bmSlot; + u16 payloadSize; + const void *src; + } send; + struct UNIRecv + { + u16 state; + u16 errorCode; + u16 dataSize; + u8 newDataFlag; + u8 dataBlockFlag; + } recv; + } sub; void *recvBuffer; u32 recvBufferSize; }; @@ -152,16 +167,15 @@ struct NIComm { u16 state; u16 failCounter; - u32 nowP[4]; // ??? + const u8 *nowP[4]; u32 remainSize; u16 errorCode; u8 bmSlot; - u8 unk_1b; u8 recvAckFlag[4]; u8 ack; u8 phase; - u8 n[4]; // ??? - void *src; + u8 n[4]; + const void *src; u8 bmSlotOrg; u8 dataType; u16 payloadSize; @@ -170,16 +184,19 @@ struct NIComm struct RfuSlotStatusNI { - struct NIComm send; - struct NIComm recv; + struct + { + struct NIComm send; + struct NIComm recv; + } sub; void *recvBuffer; - void *recvBufferSize; + u32 recvBufferSize; }; struct RfuFixed { void (*reqCallback)(u16, u16); - void *fastCopyPtr; + void (*fastCopyPtr)(const u8 **, u8 **, s32); u16 fastCopyBuffer[24]; u32 fastCopyBuffer2[12]; u32 LLFBuffer[29]; @@ -190,7 +207,7 @@ struct RfuStatic { u8 flags; u8 NIEndRecvFlag; - u8 RecvRenewalFlag; + u8 recvRenewalFlag; u8 commExistFlag; u8 recvErrorFlag; u8 recoveryBmSlot; @@ -231,7 +248,7 @@ struct RfuLinkStatus u8 findParentCount; u8 watchInterval; u8 strength[4]; - u8 LLFReadyFlag; + vu8 LLFReadyFlag; u8 remainLLFrameSizeParent; u8 remainLLFrameSizeChild[4]; struct RfuTgtData partner[4]; @@ -275,7 +292,7 @@ void rfu_REQ_sendData(u8); void rfu_setMSCCallback(void (*func)(u16)); void rfu_setREQCallback(void (*func)(u16, u16)); bool8 rfu_getMasterSlave(void); -void rfu_REQBN_watchLink(u16 a0, u8 *a1, u8 *a2, u8 *a3); +s32 rfu_REQBN_watchLink(u16 a0, u8 *a1, u8 *a2, u8 *a3); u16 rfu_syncVBlank(void); void rfu_REQ_reset(void); void rfu_REQ_configSystem(u16, u8, u8); @@ -296,24 +313,24 @@ void rfu_REQ_changeMasterSlave(void); void rfu_REQ_RFUStatus(void); u32 rfu_getRFUStatus(u8 *status); struct RfuIntrStruct *rfu_getSTWIRecvBuffer(void); -u8 rfu_NI_CHILD_setSendGameName(u8 a0, u8 a1); -void rfu_clearSlot(u8 a0, u8 a1); +s32 rfu_NI_CHILD_setSendGameName(u8 a0, u8 a1); +s32 rfu_clearSlot(u8 a0, u8 a1); void rfu_clearAllSlot(void); -bool16 rfu_CHILD_getConnectRecoveryStatus(u8 *status); +u16 rfu_CHILD_getConnectRecoveryStatus(u8 *status); u16 rfu_getConnectParentStatus(u8 *status, u8 *a1); bool16 rfu_UNI_PARENT_getDRAC_ACK(u8 *a0); void rfu_REQ_disconnect(u8 who); -void rfu_changeSendTarget(u8 a0, u8 who, u8 a2); -void rfu_NI_stopReceivingData(u8 who); +s32 rfu_changeSendTarget(u8 a0, u8 who, u8 a2); +s32 rfu_NI_stopReceivingData(u8 who); u16 rfu_initializeAPI(struct Unk_3001190 *unk0, u16 unk1, IntrFunc *interrupt, bool8 copyInterruptToRam); void rfu_setTimerInterrupt(u8 which, IntrFunc *intr); -void rfu_setRecvBuffer(u8 a0, u8 a1, void *a2, size_t a3); -bool16 rfu_UNI_setSendData(u8 flag, void *ptr, u8 size); +s32 rfu_setRecvBuffer(u8 a0, u8 a1, void *a2, size_t a3); +s32 rfu_UNI_setSendData(u8 flag, const void *ptr, u8 size); void rfu_REQ_recvData(void); void rfu_UNI_readySendData(u8 a0); void rfu_UNI_clearRecvNewDataFlag(u8 a0); void rfu_REQ_PARENT_resumeRetransmitAndChange(void); -void rfu_NI_setSendData(u8, u8, const void *, u32); +s32 rfu_NI_setSendData(u8, u8, const void *, u32); // librfu_intr void IntrSIO32(void); diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index 96f4e9519..3bfa3b601 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -11,17 +11,31 @@ void rfu_CB_startSearchParent(u8, u16); void rfu_CB_pollSearchParent(u8, u16); void rfu_CB_pollConnectParent(u8, u16); void rfu_CB_pollConnectParent(u8, u16); +void rfu_CB_disconnect(u8, u16); +void rfu_CB_CHILD_pollConnectRecovery(u8, u16); +void rfu_CB_sendData(UNUSED u8, u16); +void rfu_CB_sendData2(UNUSED u8, u16); +void rfu_CB_sendData3(u8, u16); +void rfu_CB_recvData(u8, u16); s32 sub_81E349C(u8); void rfu_enableREQCallback(bool8); void rfu_STC_readChildList(void); void rfu_STC_readParentCandidateList(void); void rfu_STC_REQ_callback(u8, u16); void rfu_STC_removeLinkData(u8, u8); -void rfu_STC_fastCopy(u8 **a1, u8 **a2, s32 a3); +void rfu_STC_fastCopy(const u8 **, u8 **, s32); void rfu_STC_clearLinkStatus(u8); void rfu_NI_checkCommFailCounter(void); +u16 rfu_STC_setSendData_org(u8, u8, u8, const void *, u32); +void rfu_constructSendLLFrame(void); +u16 rfu_STC_NI_constructLLSF(u8, u8 **, struct NIComm *); +u16 rfu_STC_UNI_constructLLSF(u8, u8 **); +void rfu_STC_PARENT_analyzeRecvPacket(void); +void rfu_STC_CHILD_analyzeRecvPacket(void); +u16 rfu_STC_analyzeLLSF(u8, u8 *, u16); extern const char _Str_RFU_MBOOT[]; +extern const u8 _Str_RfuHeader[]; struct RfuStruct *gRfuState; ALIGNED(8) struct RfuSlotStatusUNI *gRfuSlotStatusUNI[4]; @@ -89,7 +103,7 @@ u16 rfu_initializeAPI(struct Unk_3001190 *unk0, u16 unk1, IntrFunc *interrupt, b // rfu_REQ_changeMasterSlave is the function next to rfu_STC_fastCopy for (r3 = ((void *)rfu_REQ_changeMasterSlave - (void *)rfu_STC_fastCopy) / sizeof(u16), --r3; r3 != 0xFFFF; --r3) *dst++ = *src++; - gRfuFixed->fastCopyPtr = (u8 *)gRfuFixed->fastCopyBuffer + 1; + gRfuFixed->fastCopyPtr = (void *)gRfuFixed->fastCopyBuffer + 1; return 0; } @@ -734,3 +748,1080 @@ u16 rfu_syncVBlank(void) --gRfuStatic->watchdogTimer; return 0; } + +s32 rfu_REQBN_watchLink(u16 r5, u8 *r8, u8 *sp00, u8 *sp04) +{ + u8 sp08 = 0; + u8 sp0C = 0; + u8 i; + s32 sp10, sp14; + u8 *r2; + u8 r9, r6, r3, r1, r0; + + *r8 = 0; + *sp00 = 0; + *sp04 = 0; + if (gRfuLinkStatus->connMode == 0xFF || gRfuState->msMode == 0) + return 0; + if (gRfuStatic->flags & 4) + gRfuStatic->watchdogTimer = 360; + if (gRfuStatic->nowWatchInterval == 0) + { + gRfuStatic->nowWatchInterval = gRfuLinkStatus->watchInterval; + sp08 = 1; + } + if ((u8)r5 == 41) + { + u8 *r1 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data; + + *r8 = r1[4]; + *sp00 = r1[5]; + if (*sp00 == 1) + *r8 = gRfuLinkStatus->connSlotFlag; + sp08 = 2; + } + else + { + if (r5 == 310) + { + r6 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[5]; + r6 ^= gRfuLinkStatus->connSlotFlag; + *r8 = r6 & gRfuLinkStatus->connSlotFlag; + *sp00 = 1; + for (i = 0; i < NELEMS(gRfuLinkStatus->strength); ++i) + { + if ((*r8 >> i) & 1) + { + gRfuLinkStatus->strength[i] = 0; + rfu_STC_removeLinkData(i, 0); + } + } + } + if (sp08 == 0) + return 0; + } + sp10 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.command; + sp14 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0]; + STWI_set_Callback_M(rfu_CB_defaultCallback); + STWI_send_LinkStatusREQ(); + sp0C = STWI_poll_CommandEnd(); + if (sp0C == 0) + { + r2 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4]; + for (i = 0; i < NELEMS(gRfuLinkStatus->strength); ++i) + gRfuLinkStatus->strength[i] = *r2++; + r9 = 0; + i = 0; + } + else + { + rfu_STC_REQ_callback(17, sp0C); + return sp0C; + } + for (; i < 4; ++i) + { + r6 = 1 << i; + if (sp0C == 0) + { + if (sp08 == 1 && (gRfuLinkStatus->connSlotFlag & r6)) + { + if (gRfuLinkStatus->strength[i] == 0) + { + if (gRfuLinkStatus->connMode == 1) + { + ++gRfuStatic->linkEmergencyFlag[i]; + if (gRfuStatic->linkEmergencyFlag[i] > 3) + { + *r8 |= r6; + *sp00 = sp08; // why not directly use 1? + } + } + else + { + STWI_send_SystemStatusREQ(); + if (STWI_poll_CommandEnd() == 0) + { + if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0) + { + *r8 |= r6; + *sp00 = sp08; + } + else + { + if (++gRfuStatic->linkEmergencyFlag[i] > gRfuStatic->unk_1a) + { + gRfuStatic->linkEmergencyFlag[i] = 0; + STWI_send_DisconnectREQ(gRfuLinkStatus->connSlotFlag); + STWI_poll_CommandEnd(); + *r8 |= r6; + *sp00 = sp08; // why not directly use 1? + } + } + } + } + } + else + { + gRfuStatic->linkEmergencyFlag[i] = sp0C; // why not directly use 0? + } + } + if (gRfuLinkStatus->connMode == 1 && gRfuLinkStatus->strength[i] != 0) + { + if (r6 & gRfuLinkStatus->linkLossSlotFlag) + { + if (gRfuLinkStatus->strength[i] > 10) + { + *sp04 |= r6; + gRfuLinkStatus->connSlotFlag |= r6; + gRfuLinkStatus->linkLossSlotFlag &= ~r6; + ++gRfuLinkStatus->connCount; + gRfuStatic->linkEmergencyFlag[i] = 0; + } + else + { + gRfuLinkStatus->strength[i] = 0; + } + } + else + { + if (!((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & r6)) + { + STWI_send_SlotStatusREQ(); + STWI_poll_CommandEnd(); + r2 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data; + r3 = r2[1] - 1; + for (r2 += 8; r3 != 0; r2 += 4, --r3) + { + u16 r4 = *(u16 *)r2; + + if (r2[2] == i && r4 == gRfuStatic->cidBak[i]) + { + r9 |= 1 << i; + break; + } + } + } + } + } + } + r1 = gRfuLinkStatus->connSlotFlag; + r0 = *r8; + r0 &= r1; + if (r6 & r0) + rfu_STC_removeLinkData(i, 0); + } + if (r9 != 0) + { + STWI_send_DisconnectREQ(r9); + STWI_poll_CommandEnd(); + } + // equivalent to: + // gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.command = sp10; + *(u32 *)gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data = sp10; + gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] = sp14; + return 0; +} + +void rfu_STC_removeLinkData(u8 r7, u8 r12) +{ + u8 r5 = 1 << r7; + s32 r6; + + if ((gRfuLinkStatus->connSlotFlag & r5) && gRfuLinkStatus->connCount != 0) + --gRfuLinkStatus->connCount; + gRfuLinkStatus->connSlotFlag &= r6 = ~r5; + gRfuLinkStatus->linkLossSlotFlag |= r5; + if ((*(u32 *)gRfuLinkStatus & 0xFF00FF) == 0) + gRfuLinkStatus->connMode = 0xFF; + if (r12 != 0) + { + CpuFill16(0, &gRfuLinkStatus->partner[r7], sizeof(struct RfuTgtData)); + gRfuLinkStatus->linkLossSlotFlag &= r6; + gRfuLinkStatus->getNameFlag &= r6; + gRfuLinkStatus->strength[r7] = 0; + } +} + +void rfu_REQ_disconnect(u8 who) +{ + u16 r1; + + if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & who) + { + gRfuStatic->recoveryBmSlot = who; + if (gRfuLinkStatus->connMode == 0xFF && gRfuStatic->flags & 0x80) + { + if (gRfuLinkStatus->linkLossSlotFlag & who) + rfu_CB_disconnect(48, 0); + } + else if (gRfuStatic->SCStartFlag + && (STWI_set_Callback_M(rfu_CB_defaultCallback), + STWI_send_SC_EndREQ(), + (r1 = STWI_poll_CommandEnd()) != 0)) + { + rfu_STC_REQ_callback(27, r1); + } + else + { + STWI_set_Callback_M(rfu_CB_disconnect); + STWI_send_DisconnectREQ(who); + } + } +} + +void rfu_CB_disconnect(u8 r6, u16 r5) +{ + u8 r4, r0; + + if (r5 == 3 && gRfuLinkStatus->connMode == 0) + { + STWI_set_Callback_M(rfu_CB_defaultCallback); + STWI_send_SystemStatusREQ(); + if (STWI_poll_CommandEnd() == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0) + r5 = 0; + } + gRfuStatic->recoveryBmSlot &= gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; + gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8] = gRfuStatic->recoveryBmSlot; + if (r5 == 0) + { + for (r4 = 0; r4 < 4; ++r4) + { + r0 = 1 << r4; + if (r0 & gRfuStatic->recoveryBmSlot) + rfu_STC_removeLinkData(r4, 1); + } + } + if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) == 0) + gRfuLinkStatus->connMode = 0xFF; + rfu_STC_REQ_callback(r6, r5); + if (gRfuStatic->SCStartFlag) + { + STWI_set_Callback_M(rfu_CB_defaultCallback); + STWI_send_SC_StartREQ(); + r5 = STWI_poll_CommandEnd(); + if (r5 != 0) + rfu_STC_REQ_callback(25, r5); + } +} + +void rfu_REQ_CHILD_startConnectRecovery(u8 r5) +{ + u8 i; + + gRfuStatic->recoveryBmSlot = r5; + for (i = 0; i < 4 && !((r5 >> i) & 1); ++i) + ; + STWI_set_Callback_M(rfu_STC_REQ_callback); + // if i == 4, gRfuLinkStatus->partner[i].id becomes gRfuLinkStatus->my.id + STWI_send_CPR_StartREQ(gRfuLinkStatus->partner[i].id, gRfuLinkStatus->my.id, r5); +} + +void rfu_REQ_CHILD_pollConnectRecovery(void) +{ + STWI_set_Callback_M(rfu_CB_CHILD_pollConnectRecovery); + STWI_send_CPR_PollingREQ(); +} + +void rfu_CB_CHILD_pollConnectRecovery(u8 r8, u16 r7) +{ + u8 r3, r4; + struct RfuLinkStatus *r2; + + if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] == 0 && gRfuStatic->recoveryBmSlot) + { + gRfuLinkStatus->connMode = 0; + for (r4 = 0; r4 < NELEMS(gRfuStatic->linkEmergencyFlag); ++r4) + { + r3 = 1 << r4; + r2 = gRfuLinkStatus; // ??? + if (gRfuStatic->recoveryBmSlot & r3 & r2->linkLossSlotFlag) + { + gRfuLinkStatus->connSlotFlag |= r3; + gRfuLinkStatus->linkLossSlotFlag &= ~r3; + ++gRfuLinkStatus->connCount; + gRfuStatic->linkEmergencyFlag[r4] = 0; + } + } + gRfuStatic->recoveryBmSlot = 0; + } + rfu_STC_REQ_callback(r8, r7); +} + +u16 rfu_CHILD_getConnectRecoveryStatus(u8 *status) +{ + u8 r0; + + *status = 0xFF; + r0 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0] + 77; + if (r0 <= 1) + { + *status = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4]; + return 0; + } + return 0x10; +} + +void rfu_REQ_CHILD_endConnectRecovery(void) +{ + STWI_set_Callback_M(rfu_CB_CHILD_pollConnectRecovery); + STWI_send_CPR_EndREQ(); +} + +void rfu_STC_fastCopy(const u8 **src_p, u8 **dst_p, s32 size) +{ + const u8 *src = *src_p; + u8 *dst = *dst_p; + s32 i; + + for (i = size - 1; i != -1; --i) + *dst++ = *src++; + *src_p = src; + *dst_p = dst; +} + +void rfu_REQ_changeMasterSlave(void) +{ + if (STWI_read_status(1) == 1) + { + STWI_set_Callback_M(rfu_STC_REQ_callback); + STWI_send_MS_ChangeREQ(); + } + else + { + rfu_STC_REQ_callback(39, 0); + } +} + +bool8 rfu_getMasterSlave(void) +{ + bool8 r2 = STWI_read_status(1); + + if (r2 == 1) + { + if (gRfuState->unk_2c) + { + if (gRfuState->reqActiveCommand == 39 + || gRfuState->reqActiveCommand == 37 + || gRfuState->reqActiveCommand == 55) + r2 = 0; + } + } + return r2; +} + +void rfu_clearAllSlot(void) +{ + u16 i; + u16 IMEBackup = REG_IME; + + REG_IME = 0; + for (i = 0; i < NELEMS(gRfuSlotStatusNI); ++i) + { + CpuFill16(0, gRfuSlotStatusNI[i], sizeof(gRfuSlotStatusNI[i]->sub)); + CpuFill16(0, gRfuSlotStatusUNI[i], sizeof(gRfuSlotStatusUNI[i]->sub)); + gRfuLinkStatus->remainLLFrameSizeChild[i] = 16; + } + gRfuLinkStatus->remainLLFrameSizeParent = 87; + gRfuLinkStatus->sendSlotNIFlag = 0; + gRfuLinkStatus->recvSlotNIFlag = 0; + gRfuLinkStatus->sendSlotUNIFlag = 0; + gRfuStatic->recvRenewalFlag = 0; + REG_IME = IMEBackup; +} + +void rfu_STC_releaseFrame(u8 r5, u8 r3, struct NIComm *r4) +{ + + if (!(gRfuStatic->flags & 0x80)) + { + if (r3 == 0) + gRfuLinkStatus->remainLLFrameSizeParent += r4->payloadSize; + gRfuLinkStatus->remainLLFrameSizeParent += 3; + } + else + { + if (r3 == 0) + gRfuLinkStatus->remainLLFrameSizeChild[r5] += r4->payloadSize; + gRfuLinkStatus->remainLLFrameSizeChild[r5] += 2; + } +} + +s32 rfu_clearSlot(u8 r8, u8 r7) +{ + u16 r10, r3, r1; + struct NIComm *r4; + + if (r7 > 3) + return 0x400; + if ((r8 & 0xF) == 0) + return 0x600; + r10 = REG_IME; + REG_IME = 0; + if (r8 & 0xC) + { + for (r3 = 0; r3 < 2; ++r3) + { + r4 = NULL; + if (r3 == 0) + { + if (r8 & 4) + { + r4 = &gRfuSlotStatusNI[r7]->sub.send; + gRfuLinkStatus->sendSlotNIFlag &= ~r4->bmSlotOrg; + } + } + else + { + if (r8 & 8) + { + r4 = &gRfuSlotStatusNI[r7]->sub.recv; + gRfuLinkStatus->recvSlotNIFlag &= ~(1 << r7); + } + } + if (r4 != NULL) + { + if (r4->state & 0x8000) + { + rfu_STC_releaseFrame(r7, r3, r4); + for (r1 = 0; r1 < 4; ++r1) + if ((r4->bmSlotOrg >> r1) & 1) + r4->failCounter = 0; + } + CpuFill16(0, r4, sizeof(struct NIComm)); + } + } + } + if (r8 & 1) + { + struct RfuSlotStatusUNI *r3 = gRfuSlotStatusUNI[r7]; + + if (r3->sub.send.state & 0x8000) + { + if (!(gRfuStatic->flags & 0x80)) + gRfuLinkStatus->remainLLFrameSizeParent += 3 + (u8)r3->sub.send.payloadSize; + else + gRfuLinkStatus->remainLLFrameSizeChild[r7] += 2 + (u8)r3->sub.send.payloadSize; + gRfuLinkStatus->sendSlotUNIFlag &= ~r3->sub.send.bmSlot; + } + CpuFill16(0, &r3->sub.send, sizeof(struct UNISend)); + } + if (r8 & 2) + { + CpuFill16(0, &gRfuSlotStatusUNI[r7]->sub.recv, sizeof(struct UNIRecv)); + } + REG_IME = r10; + return 0; +} + +s32 rfu_setRecvBuffer(u8 r3, u8 r4, void *r5, size_t r6) +{ + if (r4 > 3) + return 0x400; + if (r3 & 0x20) + { + gRfuSlotStatusNI[r4]->recvBuffer = r5; + gRfuSlotStatusNI[r4]->recvBufferSize = r6; + } + else if (!(r3 & 0x10)) + { + return 0x600; + } + else + { + gRfuSlotStatusUNI[r4]->recvBuffer = r5; + gRfuSlotStatusUNI[r4]->recvBufferSize = r6; + } + return 0; +} + +s32 rfu_NI_setSendData(u8 a1, u8 a2, const void *a3, u32 a4) +{ + return rfu_STC_setSendData_org(32, a1, a2, a3, a4); +} + +s32 rfu_UNI_setSendData(u8 flag, const void *ptr, u8 size) +{ + u8 r0; + + if (gRfuLinkStatus->connMode == 1) + r0 = size + 3; + else + r0 = size + 2; + return rfu_STC_setSendData_org(16, flag, r0, ptr, 0); +} + +s32 rfu_NI_CHILD_setSendGameName(u8 a1, u8 a2) +{ + return rfu_STC_setSendData_org(64, 1 << a1, a2, &gRfuLinkStatus->my.serialNum, 26); +} + +u16 rfu_STC_setSendData_org(u8 r6, u8 r3, u8 r8, const void *sp00, u32 sp28) +{ + u8 r2, r0; + u8 r4; + u8 *r9; + u8 r5; + u8 i; + u16 sp04; + struct RfuSlotStatusUNI *r1; + struct RfuSlotStatusNI *r12; + + if (gRfuLinkStatus->connMode == 0xFF) + return 0x301; + if (!(r3 & 0xF)) + return 0x400; + if (((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & r3) != r3) + return 0x401; + if (r6 & 0x10) + r0 = gRfuLinkStatus->sendSlotUNIFlag; + else + r0 = gRfuLinkStatus->sendSlotNIFlag; + if (r0 & r3) + return 0x402; + for (r2 = 0; r2 < 4 && !((r3 >> r2) & 1); ++r2) + ; + if (gRfuLinkStatus->connMode == 1) + r9 = &gRfuLinkStatus->remainLLFrameSizeParent; + else if (gRfuLinkStatus->connMode == 0) + r9 = &gRfuLinkStatus->remainLLFrameSizeChild[r2]; + r4 = _Str_RfuHeader[16 * gRfuLinkStatus->connMode]; + if (r8 > *r9 || r8 <= r4) + return 0x500; + sp04 = REG_IME; + REG_IME = 0; + r5 = r6 & 0x20; + if (r5 || r6 == 0x40) + { + u8 *r1; // a hack to swap instructions + + r12 = gRfuSlotStatusNI[r2]; + r1 = NULL; + r12->sub.send.errorCode = 0; + *r12->sub.send.nowP = r1 = &r12->sub.send.dataType; + r12->sub.send.remainSize = 7; + r12->sub.send.bmSlotOrg = r3; + r12->sub.send.bmSlot = r3; + r12->sub.send.payloadSize = r8 - r4; + if (r5 != 0) + *r1 = 0; + else + *r1 = 1; + r12->sub.send.dataSize = sp28; + r12->sub.send.src = sp00; + r12->sub.send.ack = 0; + r12->sub.send.phase = 0; + #ifndef NONMATCHING // to fix r2, r3, r4, r5 register roulette + asm("":::"r2"); + #endif + for (i = 0; i < NELEMS(r12->sub.send.recvAckFlag); ++i) + { + r12->sub.send.recvAckFlag[i] = 0; + r12->sub.send.n[i] = 1; + } + for (r2 = 0; r2 < NELEMS(gRfuSlotStatusNI); ++r2) + if ((r3 >> r2) & 1) + gRfuSlotStatusNI[r2]->sub.send.failCounter = 0; + gRfuLinkStatus->sendSlotNIFlag |= r3; + *r9 -= r8; + r12->sub.send.state = 0x8021; + } + else if (r6 & 0x10) + { + r1 = gRfuSlotStatusUNI[r2]; + r1->sub.send.bmSlot = r3; + r1->sub.send.src = sp00; + r1->sub.send.payloadSize = r8 - r4; + *r9 -= r8; + r1->sub.send.state = 0x8024; + gRfuLinkStatus->sendSlotUNIFlag |= r3; + } + REG_IME = sp04; + return 0; +} + +s32 rfu_changeSendTarget(u8 r3, u8 r7, u8 r6) +{ + struct RfuSlotStatusNI *r5; + u16 r8; + u8 r2; + + if (r7 >= NELEMS(gRfuSlotStatusNI)) + return 0x400; + if (r3 == 0x20) + { + r5 = gRfuSlotStatusNI[r7]; + if ((r5->sub.send.state & 0x8000) + && (r5->sub.send.state & 0x20)) + { + r3 = r6 ^ r5->sub.send.bmSlot; + + if (!(r3 & r6)) + { + if (r3) + { + r8 = REG_IME; + REG_IME = 0; + for (r2 = 0; r2 < NELEMS(gRfuSlotStatusNI); ++r2) + { + if ((r3 >> r2) & 1) + gRfuSlotStatusNI[r2]->sub.send.failCounter = 0; + } + gRfuLinkStatus->sendSlotNIFlag &= ~r3; + r5->sub.send.bmSlot = r6; + if ((r6 << 24) == 0) // The shift doesn't make any sense. + { + rfu_STC_releaseFrame(r7, 0, &r5->sub.send); + r5->sub.send.state = 39; + } + REG_IME = r8; + } + } + else + { + return 0x404; + } + } + else + { + return 0x403; + } + } + else + { + if (r3 == 16) + { + s32 r3; + + if (gRfuSlotStatusUNI[r7]->sub.send.state != 0x8024) + return 0x403; + for (r3 = 0, r2 = 0; r2 < NELEMS(gRfuSlotStatusUNI); ++r2) + if (r2 != r7) + r3 |= gRfuSlotStatusUNI[r2]->sub.send.bmSlot; + if (r6 & r3) + return 0x404; + r8 = REG_IME; + REG_IME = 0; + gRfuLinkStatus->sendSlotUNIFlag &= ~gRfuSlotStatusUNI[r7]->sub.send.bmSlot; + gRfuLinkStatus->sendSlotUNIFlag |= r6; + gRfuSlotStatusUNI[r7]->sub.send.bmSlot = r6; + REG_IME = r8; + } + else + { + return 0x600; + } + } + return 0; +} + +s32 rfu_NI_stopReceivingData(u8 who) +{ +#ifndef NONMATCHING // r4, r5 register swap + register struct NIComm *r5 asm("r5"); +#else + struct NIComm *r5; +#endif + u16 r4, r1; + + if (who > 3) + return 0x400; + r5 = &gRfuSlotStatusNI[who]->sub.recv; + r4 = REG_IME; + REG_IME = 0; + if (gRfuSlotStatusNI[who]->sub.recv.state & 0x8000) + { + if (gRfuSlotStatusNI[who]->sub.recv.state == 0x8043) + gRfuSlotStatusNI[who]->sub.recv.state = 72; + else + gRfuSlotStatusNI[who]->sub.recv.state = 71; + gRfuLinkStatus->recvSlotNIFlag &= ~(1 << who); + rfu_STC_releaseFrame(who, 1, r5); + } + REG_IME = r4; + return 0; +} + +s32 rfu_UNI_changeAndReadySendData(u8 r3, const void *r7, u8 r5) +{ + struct UNISend *r4; + u8 *r6; + u16 r1; + u8 r3_; + + if (r3 >= 4) + return 0x400; + r4 = &gRfuSlotStatusUNI[r3]->sub.send; + if (r4->state != 0x8024) + return 0x403; + if (gRfuLinkStatus->connMode == 1) + { + r6 = &gRfuLinkStatus->remainLLFrameSizeParent; + r3_ = gRfuLinkStatus->remainLLFrameSizeParent + (u8)r4->payloadSize; + } + else + { + r6 = &gRfuLinkStatus->remainLLFrameSizeChild[r3]; + r3_ = gRfuLinkStatus->remainLLFrameSizeChild[r3] + (u8)r4->payloadSize; + } + if (r3_ < r5) + return 0x500; + r1 = REG_IME; + REG_IME = 0; + r4->src = r7; + *r6 = r3_ - r5; + r4->payloadSize = r5; + r4->dataReadyFlag = 1; + REG_IME = r1; + return 0; +} + +void rfu_UNI_readySendData(u8 a1) +{ + if (a1 < NELEMS(gRfuSlotStatusUNI)) + { + if (gRfuSlotStatusUNI[a1]->sub.send.state == 0x8024) + gRfuSlotStatusUNI[a1]->sub.send.dataReadyFlag = 1; + } +} + +void rfu_UNI_clearRecvNewDataFlag(u8 a1) +{ + if (a1 < NELEMS(gRfuSlotStatusUNI)) + gRfuSlotStatusUNI[a1]->sub.recv.newDataFlag = 0; +} + +void rfu_REQ_sendData(u8 r5) +{ + if (gRfuLinkStatus->connMode != 0xFF) + { + if (gRfuLinkStatus->connMode == 1 + && !(gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag)) + { + if (gRfuStatic->commExistFlag) + { + gRfuStatic->emberCount = 16; + gRfuStatic->nullFrameCount = 0; + } + if (gRfuStatic->emberCount) + --gRfuStatic->emberCount; + else + ++gRfuStatic->nullFrameCount; + if (gRfuStatic->emberCount + || !(gRfuStatic->nullFrameCount & 0xF)) + { + gRfuFixed->LLFBuffer[0] = 1; + gRfuFixed->LLFBuffer[4] = 0xFF; + STWI_set_Callback_M(rfu_CB_sendData3); + if (r5 == 0) + STWI_send_DataTxREQ(gRfuFixed->LLFBuffer, 1); + else + STWI_send_DataTxAndChangeREQ(gRfuFixed->LLFBuffer, 1); + return; + } + } + else + { + if (!gRfuLinkStatus->LLFReadyFlag) + rfu_constructSendLLFrame(); + if (gRfuLinkStatus->LLFReadyFlag) + { + STWI_set_Callback_M(rfu_CB_sendData); + if (r5 != 0) + { + STWI_send_DataTxAndChangeREQ(gRfuFixed->LLFBuffer, gRfuStatic->totalPacketSize + 4); + return; + } + STWI_send_DataTxREQ(gRfuFixed->LLFBuffer, gRfuStatic->totalPacketSize + 4); + } + } + if (r5 != 0) + { + if (gRfuLinkStatus->connMode == 1) + { + if (gRfuState->callbackS != NULL) + gRfuState->callbackS(39); + } + else + { + STWI_set_Callback_M(rfu_CB_sendData2); + STWI_send_MS_ChangeREQ(); + } + } + } +} + +void rfu_CB_sendData(UNUSED u8 r0, u16 r7) +{ + u8 r6; + struct NIComm *r4; + + if (r7 == 0) + { + for (r6 = 0; r6 < NELEMS(gRfuSlotStatusNI); ++r6) + { + if (gRfuSlotStatusUNI[r6]->sub.send.dataReadyFlag) + gRfuSlotStatusUNI[r6]->sub.send.dataReadyFlag = 0; + r4 = &gRfuSlotStatusNI[r6]->sub.send; + if (r4->state == 0x8020) + { + rfu_STC_releaseFrame(r6, 0, r4); + gRfuLinkStatus->sendSlotNIFlag &= ~r4->bmSlot; + if (r4->dataType == 1) + gRfuLinkStatus->getNameFlag |= 1 << r6; + r4->state = 38; + } + } + } + gRfuLinkStatus->LLFReadyFlag = 0; + rfu_STC_REQ_callback(36, r7); +} + +void rfu_CB_sendData2(UNUSED u8 r0, u16 r1) +{ + rfu_STC_REQ_callback(36, r1); +} + +void rfu_CB_sendData3(u8 r0, u16 r1) +{ + if (r1 != 0) + rfu_STC_REQ_callback(36, r1); + else if (r0 == 0xFF) + rfu_STC_REQ_callback(0xFF, 0); +} + +void rfu_constructSendLLFrame(void) +{ + u32 r8, r5; + u8 r6; + u8 *sp00; + struct RfuSlotStatusNI *r2; + + if (gRfuLinkStatus->connMode != 0xFF + && gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag) + { + gRfuLinkStatus->LLFReadyFlag = 0; + r8 = 0; + sp00 = (u8 *)&gRfuFixed->LLFBuffer[1]; + for (r6 = 0; r6 < NELEMS(gRfuSlotStatusUNI); ++r6) + { + r5 = 0; + if (gRfuSlotStatusNI[r6]->sub.send.state & 0x8000) + r5 = rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->sub.send); + if (gRfuSlotStatusNI[r6]->sub.recv.state & 0x8000) + r5 += rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->sub.recv); + if (gRfuSlotStatusUNI[r6]->sub.send.state == 0x8024) + r5 += rfu_STC_UNI_constructLLSF(r6, &sp00); + if (r5 != 0) + { + if (gRfuLinkStatus->connMode == 1) + r8 += r5; + else + r8 |= r5 << (5 * r6 + 8); + } + } + if (r8 != 0) + { + while ((u32)sp00 & 3) + *sp00++ = 0; + gRfuFixed->LLFBuffer[0] = r8; + if (gRfuLinkStatus->connMode == 0) + { + u8 *r0 = sp00 - offsetof(struct RfuFixed, LLFBuffer[1]); + + // Does the volatile qualifier make sense? + // It's the same as: + // asm("":::"memory"); + r8 = r0 - *(u8 *volatile *)&gRfuFixed; + } + } + gRfuStatic->totalPacketSize = r8; + } +} + +u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4) +{ + u16 r5; + u32 sp00; + u8 i; + u8 *r2; + const u8 *r8 = &_Str_RfuHeader[16 * gRfuLinkStatus->connMode]; + + if (r4->state == 0x8022) + { + while (r4->nowP[r4->phase] >= (const u8 *)r4->src + r4->dataSize) + { + ++r4->phase; + if (r4->phase == 4) + r4->phase = 0; + } + } + if (r4->state & 0x40) + { + r5 = 0; + } + else if (r4->state == 0x8022) + { + if (r4->nowP[r4->phase] + r4->payloadSize > (const u8 *)r4->src + r4->dataSize) + r5 = (const u8 *)r4->src + r4->dataSize - r4->nowP[r4->phase]; + else + r5 = r4->payloadSize; + } + else + { + if (r4->remainSize >= r4->payloadSize) + r5 = r4->payloadSize; + else + r5 = r4->remainSize; + } + sp00 = (r4->state & 0xF) << r8[3] + | r4->ack << r8[4] + | r4->phase << r8[5] + | r4->n[r4->phase] << r8[6] + | r5; + if (gRfuLinkStatus->connMode == 1) + sp00 |= r4->bmSlot << 18; + r2 = (u8 *)&sp00; + for (i = 0; i < *r8; ++i) + *(*r12)++ = *r2++; + if (r5 != 0) + { + const u8 *sp04 = r4->nowP[r4->phase]; + + gRfuFixed->fastCopyPtr(&sp04, r12, r5); + } + if (r4->state == 0x8022) + { + ++r4->phase; + if (r4->phase == 4) + r4->phase = 0; + } + if (gRfuLinkStatus->connMode == 1) + gRfuLinkStatus->LLFReadyFlag = 1; + else + gRfuLinkStatus->LLFReadyFlag |= 1 << r10; + return r5 + *r8; +} + +u16 rfu_STC_UNI_constructLLSF(u8 r8, u8 **r6) +{ + const u8 *r5; + const u8 *sp04; + u32 sp00; + u8 *r2; + u8 i; + struct UNISend *r4 = &gRfuSlotStatusUNI[r8]->sub.send; + + if (!r4->dataReadyFlag || !r4->bmSlot) + return 0; + r5 = &_Str_RfuHeader[16 * gRfuLinkStatus->connMode]; + sp00 = (r4->state & 0xF) << r5[3] + | r4->payloadSize; + if (gRfuLinkStatus->connMode == 1) + sp00 |= r4->bmSlot << 18; + r2 = (u8 *)&sp00; + for (i = 0; i < *r5; ++i) + *(*r6)++ = *r2++; + sp04 = r4->src; + gRfuFixed->fastCopyPtr(&sp04, r6, r4->payloadSize); + if (gRfuLinkStatus->connMode == 1) + gRfuLinkStatus->LLFReadyFlag = 16; + else + gRfuLinkStatus->LLFReadyFlag |= 16 << r8; + return *r5 + r4->payloadSize; +} + +void rfu_REQ_recvData(void) +{ + if (gRfuLinkStatus->connMode != 0xFF) + { + gRfuStatic->commExistFlag = gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag; + gRfuStatic->recvErrorFlag = 0; + STWI_set_Callback_M(rfu_CB_recvData); + STWI_send_DataRxREQ(); + } +} + +void rfu_CB_recvData(u8 r9, u16 r7) +{ + u8 r6; + struct RfuSlotStatusNI *r4; + struct NIComm *r5; + + if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1]) + { + gRfuStatic->NIEndRecvFlag = 0; + if (gRfuLinkStatus->connMode == 1) + rfu_STC_PARENT_analyzeRecvPacket(); + else + rfu_STC_CHILD_analyzeRecvPacket(); + for (r6 = 0; r6 < NELEMS(gRfuSlotStatusNI); ++r6) + { + r4 = gRfuSlotStatusNI[r6]; + if (r4->sub.recv.state == 0x8043 && !((gRfuStatic->NIEndRecvFlag >> r6) & 1)) + { + r5 = &r4->sub.recv; + if (r5->dataType == 1) + gRfuLinkStatus->getNameFlag |= 1 << r6; + rfu_STC_releaseFrame(r6, 1, r5); + gRfuLinkStatus->recvSlotNIFlag &= ~r5->bmSlot; + r4->sub.recv.state = 70; + } + } + if ( gRfuStatic->recvErrorFlag ) + r7 = gRfuStatic->recvErrorFlag | 0x700; + } + rfu_STC_REQ_callback(r9, r7); +} + +void rfu_STC_PARENT_analyzeRecvPacket(void) +{ + u32 r3; + u8 r5; + u8 sp[4]; + u8 *r6; + + r3 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] >> 8; + for (r5 = 0; r5 < NELEMS(sp); ++r5) + { + sp[r5] = r3 & 0x1F; + r3 >>= 5; + if (sp[r5] == 0) + gRfuStatic->NIEndRecvFlag |= 1 << r5; + } + r6 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8]; + for (r5 = 0; r5 < NELEMS(sp); ++r5) + { + if (sp[r5]) + { + u8 *r4 = &sp[r5]; + + do + { + u8 r0 = rfu_STC_analyzeLLSF(r5, r6, *r4); + + r6 += r0; + *r4 -= r0; + } while (!(*r4 & 0x80) && (*r4)); + } + } +} + +void rfu_STC_CHILD_analyzeRecvPacket(void) +{ + u16 r4; + u8 *r5; + u16 r0; + + r4 = *(u16 *)&gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] & 0x7F; + r5 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8]; + if (r4 == 0) + gRfuStatic->NIEndRecvFlag = 15; + do + { + if (r4 == 0) + break; + r0 = rfu_STC_analyzeLLSF(0, r5, r4); + r5 += r0; + r4 -= r0; + } while (!(r4 & 0x8000)); +} -- cgit v1.2.3 From 5bf8d1c62d6907b44d92f75f4402c4a0dee28a2c Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Wed, 1 Jan 2020 21:46:36 +0800 Subject: fix rfu_STC_analyzeLLSF Co-authored-by: Normmatt --- asm/librfu.s | 388 --------------------------------------------------- data/librfu_rodata.s | 1 + include/librfu.h | 1 - src/librfu_rfu.c | 175 +++++++++++++++++++++-- 4 files changed, 161 insertions(+), 404 deletions(-) diff --git a/asm/librfu.s b/asm/librfu.s index c98ee854c..f94aaabf3 100644 --- a/asm/librfu.s +++ b/asm/librfu.s @@ -5,394 +5,6 @@ .text - thumb_func_start rfu_STC_analyzeLLSF -rfu_STC_analyzeLLSF: @ 81E2C40 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - adds r7, r1, 0 - lsls r0, 24 - lsrs r0, 24 - mov r12, r0 - lsls r2, 16 - lsrs r3, r2, 16 - ldr r2, _081E2C74 @ =gRfuLinkStatus - ldr r0, [r2] - ldrb r0, [r0] - mvns r0, r0 - movs r1, 0x1 - ands r0, r1 - lsls r0, 4 - ldr r1, _081E2C78 @ =_Str_RfuHeader - adds r6, r0, r1 - ldrb r0, [r6] - cmp r3, r0 - bcs _081E2C7C - adds r0, r3, 0 - b _081E2E6E - .align 2, 0 -_081E2C74: .4byte gRfuLinkStatus -_081E2C78: .4byte _Str_RfuHeader -_081E2C7C: - movs r5, 0 - movs r4, 0 - ldrb r3, [r6, 0x1] - ldrb r1, [r6, 0x7] - mov r8, r1 - ldr r2, [sp] - mov r9, r2 - cmp r4, r0 - bcs _081E2CA4 - adds r2, r0, 0 -_081E2C90: - ldrb r0, [r7] - lsls r1, r4, 3 - lsls r0, r1 - orrs r5, r0 - adds r7, 0x1 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r2 - bcc _081E2C90 -_081E2CA4: - adds r0, r5, 0 - lsrs r0, r3 - mov r3, r8 - ands r0, r3 - ldr r1, _081E2D7C @ =0xffffff00 - mov r10, r1 - mov r3, r10 - mov r2, r9 - ands r3, r2 - orrs r3, r0 - str r3, [sp] - adds r0, r5, 0 - ldrb r1, [r6, 0x2] - lsrs r0, r1 - ldrb r1, [r6, 0x8] - ands r0, r1 - lsls r0, 8 - ldr r4, _081E2D80 @ =0xffff00ff - adds r2, r4, 0 - ands r2, r3 - orrs r2, r0 - str r2, [sp] - adds r0, r5, 0 - ldrb r3, [r6, 0x3] - lsrs r0, r3 - ldrb r1, [r6, 0x9] - ands r0, r1 - lsls r0, 16 - ldr r3, _081E2D84 @ =0xff00ffff - ands r3, r2 - orrs r3, r0 - str r3, [sp] - adds r0, r5, 0 - ldrb r1, [r6, 0x4] - lsrs r0, r1 - ldrb r1, [r6, 0xA] - ands r0, r1 - lsls r0, 24 - ldr r2, _081E2D88 @ =0x00ffffff - mov r8, r2 - mov r1, r8 - ands r1, r3 - orrs r1, r0 - mov r8, r1 - str r1, [sp] - adds r1, r5, 0 - ldrb r2, [r6, 0x5] - lsrs r1, r2 - ldrb r0, [r6, 0xB] - ands r1, r0 - mov r9, sp - ldr r2, [sp, 0x4] - mov r3, r10 - ands r2, r3 - orrs r2, r1 - str r2, [sp, 0x4] - adds r0, r5, 0 - ldrb r1, [r6, 0x6] - lsrs r0, r1 - ldrb r1, [r6, 0xC] - ands r0, r1 - lsls r0, 8 - ands r4, r2 - orrs r4, r0 - str r4, [sp, 0x4] - ldrh r0, [r6, 0xE] - ands r5, r0 - lsls r1, r5, 16 - ldr r0, _081E2D8C @ =0x0000ffff - ands r0, r4 - orrs r0, r1 - str r0, [sp, 0x4] - lsrs r0, 16 - ldrb r6, [r6] - adds r0, r6 - lsls r0, 16 - lsrs r0, 16 - mov r10, r0 - mov r0, sp - ldrb r0, [r0] - cmp r0, 0 - beq _081E2D4A - b _081E2E6C -_081E2D4A: - ldr r2, _081E2D90 @ =gRfuLinkStatus - ldr r3, [r2] - ldrb r2, [r3] - cmp r2, 0x1 - bne _081E2E08 - ldrb r0, [r3, 0x2] - mov r5, r12 - asrs r0, r5 - ands r0, r2 - cmp r0, 0 - bne _081E2D62 - b _081E2E6C -_081E2D62: - mov r1, r8 - lsrs r0, r1, 16 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bne _081E2D94 - mov r0, r12 - mov r1, sp - adds r2, r7, 0 - bl rfu_STC_UNI_receive - b _081E2E6C - .align 2, 0 -_081E2D7C: .4byte 0xffffff00 -_081E2D80: .4byte 0xffff00ff -_081E2D84: .4byte 0xff00ffff -_081E2D88: .4byte 0x00ffffff -_081E2D8C: .4byte 0x0000ffff -_081E2D90: .4byte gRfuLinkStatus -_081E2D94: - mov r5, r9 - ldrb r0, [r5, 0x3] - cmp r0, 0 - bne _081E2DA8 - mov r0, r12 - mov r1, sp - adds r2, r7, 0 - bl rfu_STC_NI_receive_Receiver - b _081E2E6C -_081E2DA8: - movs r4, 0 - ldr r1, _081E2DC0 @ =gRfuSlotStatusNI - ldr r0, [r1] - ldrb r0, [r0, 0x1A] - mov r5, r12 - asrs r0, r5 - ands r0, r2 - cmp r0, 0 - beq _081E2DC4 - ldrb r0, [r3, 0x4] - b _081E2DEA - .align 2, 0 -_081E2DC0: .4byte gRfuSlotStatusNI -_081E2DC4: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bhi _081E2E6C - lsls r0, r4, 2 - adds r0, r1 - ldr r0, [r0] - ldrb r0, [r0, 0x1A] - mov r2, r12 - asrs r0, r2 - movs r2, 0x1 - ands r0, r2 - cmp r0, 0 - beq _081E2DC4 - ldr r3, _081E2E04 @ =gRfuLinkStatus - ldr r0, [r3] - ldrb r0, [r0, 0x4] - mov r5, r12 -_081E2DEA: - asrs r0, r5 - ands r0, r2 - cmp r0, 0 - beq _081E2DC4 - cmp r4, 0x3 - bhi _081E2E6C - adds r0, r4, 0 - mov r1, r12 - mov r2, sp - adds r3, r7, 0 - bl rfu_STC_NI_receive_Sender - b _081E2E6C - .align 2, 0 -_081E2E04: .4byte gRfuLinkStatus -_081E2E08: - ldrb r1, [r3, 0x2] - mov r2, r9 - ldrb r0, [r2, 0x1] - adds r5, r1, 0 - ands r5, r0 - cmp r5, 0 - beq _081E2E6C - movs r4, 0 - movs r6, 0x1 -_081E2E1A: - adds r0, r5, 0 - asrs r0, r4 - ands r0, r6 - cmp r0, 0 - beq _081E2E62 - mov r1, sp - ldrb r0, [r1, 0x2] - cmp r0, 0x4 - bne _081E2E36 - adds r0, r4, 0 - adds r2, r7, 0 - bl rfu_STC_UNI_receive - b _081E2E62 -_081E2E36: - ldrb r0, [r1, 0x3] - cmp r0, 0 - bne _081E2E48 - adds r0, r4, 0 - mov r1, sp - adds r2, r7, 0 - bl rfu_STC_NI_receive_Receiver - b _081E2E62 -_081E2E48: - ldr r0, _081E2E80 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0, 0x4] - asrs r0, r4 - ands r0, r6 - cmp r0, 0 - beq _081E2E62 - adds r0, r4, 0 - adds r1, r4, 0 - mov r2, sp - adds r3, r7, 0 - bl rfu_STC_NI_receive_Sender -_081E2E62: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _081E2E1A -_081E2E6C: - mov r0, r10 -_081E2E6E: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_081E2E80: .4byte gRfuLinkStatus - thumb_func_end rfu_STC_analyzeLLSF - - thumb_func_start rfu_STC_UNI_receive -rfu_STC_UNI_receive: @ 81E2E84 - push {r4-r7,lr} - sub sp, 0x8 - adds r6, r1, 0 - str r2, [sp] - lsls r0, 24 - lsrs r7, r0, 24 - ldr r2, _081E2EB8 @ =gRfuSlotStatusUNI - lsls r1, r7, 2 - adds r1, r2 - ldr r3, [r1] - adds r5, r3, 0 - adds r5, 0xC - movs r4, 0 - movs r0, 0 - strh r0, [r5, 0x2] - ldr r0, [r1] - ldr r0, [r0, 0x18] - adds r1, r2, 0 - ldrh r2, [r6, 0x6] - cmp r0, r2 - bcs _081E2EC0 - movs r0, 0x49 - strh r0, [r3, 0xC] - ldr r0, _081E2EBC @ =0x00000701 - strh r0, [r5, 0x2] - b _081E2F0E - .align 2, 0 -_081E2EB8: .4byte gRfuSlotStatusUNI -_081E2EBC: .4byte 0x00000701 -_081E2EC0: - ldrb r0, [r5, 0x7] - cmp r0, 0 - beq _081E2ED8 - ldrb r0, [r5, 0x6] - cmp r0, 0 - beq _081E2EE4 - ldr r0, _081E2ED4 @ =0x00000709 - strh r0, [r5, 0x2] - b _081E2F0E - .align 2, 0 -_081E2ED4: .4byte 0x00000709 -_081E2ED8: - ldrb r0, [r5, 0x6] - cmp r0, 0 - beq _081E2EE4 - movs r0, 0xE1 - lsls r0, 3 - strh r0, [r5, 0x2] -_081E2EE4: - movs r4, 0 - ldr r0, _081E2F2C @ =0x00008042 - strh r0, [r5] - ldrh r0, [r6, 0x6] - strh r0, [r5, 0x4] - ldrh r2, [r6, 0x6] - lsls r0, r7, 2 - adds r0, r1 - ldr r0, [r0] - ldr r0, [r0, 0x14] - str r0, [sp, 0x4] - ldr r0, _081E2F30 @ =gRfuFixed - ldr r0, [r0] - add r1, sp, 0x4 - ldr r3, [r0, 0x4] - mov r0, sp - bl _call_via_r3 - movs r0, 0x1 - strb r0, [r5, 0x6] - strh r4, [r5] -_081E2F0E: - ldrh r0, [r5, 0x2] - cmp r0, 0 - beq _081E2F22 - ldr r0, _081E2F34 @ =gRfuStatic - ldr r2, [r0] - movs r0, 0x10 - lsls r0, r7 - ldrb r1, [r2, 0x4] - orrs r0, r1 - strb r0, [r2, 0x4] -_081E2F22: - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081E2F2C: .4byte 0x00008042 -_081E2F30: .4byte gRfuFixed -_081E2F34: .4byte gRfuStatic - thumb_func_end rfu_STC_UNI_receive - thumb_func_start rfu_STC_NI_receive_Sender rfu_STC_NI_receive_Sender: @ 81E2F38 push {r4-r7,lr} diff --git a/data/librfu_rodata.s b/data/librfu_rodata.s index d5e847aa3..e5b15c6c5 100644 --- a/data/librfu_rodata.s +++ b/data/librfu_rodata.s @@ -11,6 +11,7 @@ _Str_RfuHeader:: .byte 3, 22, 18, 14, 13, 9, 11, 3 .byte 15, 15, 1, 3, 3, 0, 0x7f, 0 + @ .ascii "RFU_V1024" .ascii "RFU_V" .byte VERSION_MAJOR + 0x30 .byte VERSION_MINOR + 0x30 diff --git a/include/librfu.h b/include/librfu.h index ff160e207..e50f5cc89 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -284,7 +284,6 @@ extern struct RfuSlotStatusUNI *gRfuSlotStatusUNI[4]; extern struct Unk_3007470 gUnknown_3007470; // librfu_rfu -void rfu_STC_clearAPIVariables(void); void rfu_REQ_stopMode(void); u16 rfu_waitREQComplete(void); s32 rfu_REQBN_softReset_and_checkID(void); diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index 3bfa3b601..e53aade49 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -1,6 +1,35 @@ #include "global.h" #include "librfu.h" +struct RfuHeader +{ + u8 unk00; + u8 unk01; + u8 unk02; + u8 unk03; + u8 unk04; + u8 unk05; + u8 unk06; + u8 unk07; + u8 unk08; + u8 unk09; + u8 unk0A; + u8 unk0B; + u8 unk0C; + u16 unk0E; +}; + +struct RfuTest +{ + u8 unk00; + u8 unk01; + u8 unk02; + u8 unk03; + u8 unk04; + u8 unk05; + u16 unk06; +}; + void rfu_CB_defaultCallback(u8, u16); void rfu_CB_reset(u8, u16); void rfu_CB_configGameData(u8, u16); @@ -19,6 +48,7 @@ void rfu_CB_sendData3(u8, u16); void rfu_CB_recvData(u8, u16); s32 sub_81E349C(u8); void rfu_enableREQCallback(bool8); +void rfu_STC_clearAPIVariables(void); void rfu_STC_readChildList(void); void rfu_STC_readParentCandidateList(void); void rfu_STC_REQ_callback(u8, u16); @@ -32,10 +62,13 @@ u16 rfu_STC_NI_constructLLSF(u8, u8 **, struct NIComm *); u16 rfu_STC_UNI_constructLLSF(u8, u8 **); void rfu_STC_PARENT_analyzeRecvPacket(void); void rfu_STC_CHILD_analyzeRecvPacket(void); -u16 rfu_STC_analyzeLLSF(u8, u8 *, u16); +u16 rfu_STC_analyzeLLSF(u8, const u8 *, u16); +void rfu_STC_UNI_receive(u8, const struct RfuTest *, const u8 *); +void rfu_STC_NI_receive_Receiver(u8, const struct RfuTest *, const u8 *); +void rfu_STC_NI_receive_Sender(u8, u8, const struct RfuTest *, UNUSED const u8 *); extern const char _Str_RFU_MBOOT[]; -extern const u8 _Str_RfuHeader[]; +extern const struct RfuHeader _Str_RfuHeader[2]; struct RfuStruct *gRfuState; ALIGNED(8) struct RfuSlotStatusUNI *gRfuSlotStatusUNI[4]; @@ -1284,7 +1317,7 @@ u16 rfu_STC_setSendData_org(u8 r6, u8 r3, u8 r8, const void *sp00, u32 sp28) r9 = &gRfuLinkStatus->remainLLFrameSizeParent; else if (gRfuLinkStatus->connMode == 0) r9 = &gRfuLinkStatus->remainLLFrameSizeChild[r2]; - r4 = _Str_RfuHeader[16 * gRfuLinkStatus->connMode]; + r4 = _Str_RfuHeader[gRfuLinkStatus->connMode].unk00; if (r8 > *r9 || r8 <= r4) return 0x500; sp04 = REG_IME; @@ -1644,7 +1677,7 @@ u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4) u32 sp00; u8 i; u8 *r2; - const u8 *r8 = &_Str_RfuHeader[16 * gRfuLinkStatus->connMode]; + const struct RfuHeader *r8 = &_Str_RfuHeader[gRfuLinkStatus->connMode]; if (r4->state == 0x8022) { @@ -1673,15 +1706,15 @@ u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4) else r5 = r4->remainSize; } - sp00 = (r4->state & 0xF) << r8[3] - | r4->ack << r8[4] - | r4->phase << r8[5] - | r4->n[r4->phase] << r8[6] + sp00 = (r4->state & 0xF) << r8->unk03 + | r4->ack << r8->unk04 + | r4->phase << r8->unk05 + | r4->n[r4->phase] << r8->unk06 | r5; if (gRfuLinkStatus->connMode == 1) sp00 |= r4->bmSlot << 18; r2 = (u8 *)&sp00; - for (i = 0; i < *r8; ++i) + for (i = 0; i < r8->unk00; ++i) *(*r12)++ = *r2++; if (r5 != 0) { @@ -1699,12 +1732,12 @@ u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4) gRfuLinkStatus->LLFReadyFlag = 1; else gRfuLinkStatus->LLFReadyFlag |= 1 << r10; - return r5 + *r8; + return r5 + r8->unk00; } u16 rfu_STC_UNI_constructLLSF(u8 r8, u8 **r6) { - const u8 *r5; + const struct RfuHeader *r5; const u8 *sp04; u32 sp00; u8 *r2; @@ -1713,13 +1746,13 @@ u16 rfu_STC_UNI_constructLLSF(u8 r8, u8 **r6) if (!r4->dataReadyFlag || !r4->bmSlot) return 0; - r5 = &_Str_RfuHeader[16 * gRfuLinkStatus->connMode]; - sp00 = (r4->state & 0xF) << r5[3] + r5 = &_Str_RfuHeader[gRfuLinkStatus->connMode]; + sp00 = (r4->state & 0xF) << r5->unk03 | r4->payloadSize; if (gRfuLinkStatus->connMode == 1) sp00 |= r4->bmSlot << 18; r2 = (u8 *)&sp00; - for (i = 0; i < *r5; ++i) + for (i = 0; i < r5->unk00; ++i) *(*r6)++ = *r2++; sp04 = r4->src; gRfuFixed->fastCopyPtr(&sp04, r6, r4->payloadSize); @@ -1727,7 +1760,7 @@ u16 rfu_STC_UNI_constructLLSF(u8 r8, u8 **r6) gRfuLinkStatus->LLFReadyFlag = 16; else gRfuLinkStatus->LLFReadyFlag |= 16 << r8; - return *r5 + r4->payloadSize; + return r5->unk00 + r4->payloadSize; } void rfu_REQ_recvData(void) @@ -1825,3 +1858,115 @@ void rfu_STC_CHILD_analyzeRecvPacket(void) r4 -= r0; } while (!(r4 & 0x8000)); } + +u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3) +{ + struct RfuTest sp00; + const struct RfuHeader *r6; + u32 r5; + u8 r4; + u32 r0; + u16 r10; + + r6 = &_Str_RfuHeader[~gRfuLinkStatus->connMode & 1]; + if (r3 < r6->unk00) + return r3; + r5 = 0; + for (r4 = 0; r4 < r6->unk00; ++r4) + r5 |= *r7++ << 8 * r4; + sp00.unk00 = (r5 >> r6->unk01) & r6->unk07; + sp00.unk01 = (r5 >> r6->unk02) & r6->unk08; + sp00.unk02 = (r5 >> r6->unk03) & r6->unk09; + sp00.unk03 = (r5 >> r6->unk04) & r6->unk0A; + sp00.unk04 = (r5 >> r6->unk05) & r6->unk0B; + sp00.unk05 = (r5 >> r6->unk06) & r6->unk0C; + sp00.unk06 = (r5 & r6->unk0E) & r5; + r10 = sp00.unk06 + r6->unk00; + if (sp00.unk00 == 0) + { + if (gRfuLinkStatus->connMode == 1) + { + if ((gRfuLinkStatus->connSlotFlag >> r12) & 1) + { + if (sp00.unk02 == 4) + { + rfu_STC_UNI_receive(r12, &sp00, r7); + } + else if (sp00.unk03 == 0) + { + rfu_STC_NI_receive_Receiver(r12, &sp00, r7); + } + else + { + for (r4 = 0; r4 < NELEMS(gRfuSlotStatusNI); ++r4) + if (((gRfuSlotStatusNI[r4]->sub.send.bmSlot >> r12) & 1) + && ((gRfuLinkStatus->sendSlotNIFlag >> r12) & 1)) + break; + if (r4 <= 3) + rfu_STC_NI_receive_Sender(r4, r12, &sp00, r7); + } + } + } + else + { + s32 r5 = gRfuLinkStatus->connSlotFlag & sp00.unk01; + + if (r5) + { + for (r4 = 0; r4 < 4; ++r4) + { + if ((r5 >> r4) & 1) + { + if (sp00.unk02 == 4) + rfu_STC_UNI_receive(r4, &sp00, r7); + else if (sp00.unk03 == 0) + rfu_STC_NI_receive_Receiver(r4, &sp00, r7); + else if ((gRfuLinkStatus->sendSlotNIFlag >> r4) & 1) + rfu_STC_NI_receive_Sender(r4, r4, &sp00, r7); + } + } + } + } + } + return r10; +} + +void rfu_STC_UNI_receive(u8 r7, const struct RfuTest *r6, const u8 *sp00) +{ + u8 *sp04; + u32 r2; + struct RfuSlotStatusUNI *r3 = gRfuSlotStatusUNI[r7]; + struct UNIRecv *r5 = &r3->sub.recv; + + r5->errorCode = 0; + if (gRfuSlotStatusUNI[r7]->recvBufferSize < r6->unk06) + { + r3->sub.recv.state = 73; + r5->errorCode = 0x701; + } + else + { + if (r5->dataBlockFlag) + { + if (r5->newDataFlag) + { + r5->errorCode = 0x709; + goto _081E2F0E; + } + } + else + { + if (r5->newDataFlag) + r5->errorCode = 0x708; + } + r5->state = 0x8042; + r2 = r5->dataSize = r6->unk06; + sp04 = gRfuSlotStatusUNI[r7]->recvBuffer; + gRfuFixed->fastCopyPtr(&sp00, &sp04, r2); + r5->newDataFlag = 1; + r5->state = 0; + } +_081E2F0E: + if (r5->errorCode) + gRfuStatic->recvErrorFlag |= 16 << r7; +} -- cgit v1.2.3 From 1fda78fd0a1b0235ec0ee2db85e5ebbfa9fc50b5 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Thu, 2 Jan 2020 06:19:23 +0800 Subject: k.o. librfu_rfu --- asm/librfu.s | 1111 ----------------------------------------------------- include/librfu.h | 14 +- ld_script.txt | 1 - src/librfu_rfu.c | 552 ++++++++++++++++++++++---- src/librfu_stwi.c | 4 +- 5 files changed, 487 insertions(+), 1195 deletions(-) delete mode 100644 asm/librfu.s diff --git a/asm/librfu.s b/asm/librfu.s deleted file mode 100644 index f94aaabf3..000000000 --- a/asm/librfu.s +++ /dev/null @@ -1,1111 +0,0 @@ - .include "constants/gba_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start rfu_STC_NI_receive_Sender -rfu_STC_NI_receive_Sender: @ 81E2F38 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r6, r2, 0 - lsls r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r10, r1 - ldr r1, _081E3004 @ =gRfuSlotStatusNI - lsrs r0, 22 - adds r0, r1 - ldr r0, [r0] - mov r12, r0 - ldrh r0, [r0] - mov r9, r0 - mov r0, r12 - adds r0, 0x21 - ldrb r2, [r6, 0x4] - adds r0, r2 - ldrb r0, [r0] - str r0, [sp] - ldrb r2, [r6, 0x2] - cmp r2, 0x2 - bne _081E2F74 - ldr r0, _081E3008 @ =0x00008022 - cmp r9, r0 - beq _081E2F8E -_081E2F74: - cmp r2, 0x1 - bne _081E2F7E - ldr r0, _081E300C @ =0x00008021 - cmp r9, r0 - beq _081E2F8E -_081E2F7E: - movs r3, 0x1B - add r3, r12 - mov r8, r3 - cmp r2, 0x3 - bne _081E2FB2 - ldr r0, _081E3010 @ =0x00008023 - cmp r9, r0 - bne _081E2FB2 -_081E2F8E: - ldrb r1, [r6, 0x4] - mov r0, r12 - adds r0, 0x21 - adds r0, r1 - ldrb r0, [r0] - movs r7, 0x1B - add r7, r12 - mov r8, r7 - ldrb r2, [r6, 0x5] - cmp r0, r2 - bne _081E2FB2 - adds r0, r7, r1 - movs r1, 0x1 - mov r3, r10 - lsls r1, r3 - ldrb r2, [r0] - orrs r1, r2 - strb r1, [r0] -_081E2FB2: - ldrb r2, [r6, 0x4] - mov r7, r8 - adds r0, r7, r2 - ldrb r0, [r0] - mov r3, r12 - ldrb r1, [r3, 0x1A] - ands r0, r1 - cmp r0, r1 - bne _081E30AE - adds r3, 0x21 - adds r2, r3, r2 - ldrb r0, [r2] - adds r0, 0x1 - movs r1, 0x3 - ands r0, r1 - movs r1, 0 - strb r0, [r2] - ldrb r0, [r6, 0x4] - add r0, r8 - strb r1, [r0] - mov r7, r12 - ldrh r1, [r7] - ldr r2, _081E3014 @ =0x00007fdf - adds r0, r1, r2 - lsls r0, 16 - lsrs r0, 16 - adds r5, r3, 0 - cmp r0, 0x1 - bhi _081E30A0 - ldr r0, _081E300C @ =0x00008021 - cmp r1, r0 - bne _081E3018 - ldrb r1, [r6, 0x4] - lsls r1, 2 - subs r3, 0x1D - adds r1, r3, r1 - ldrh r2, [r7, 0x2E] - ldr r0, [r1] - adds r0, r2 - str r0, [r1] - b _081E302E - .align 2, 0 -_081E3004: .4byte gRfuSlotStatusNI -_081E3008: .4byte 0x00008022 -_081E300C: .4byte 0x00008021 -_081E3010: .4byte 0x00008023 -_081E3014: .4byte 0x00007fdf -_081E3018: - ldrb r2, [r6, 0x4] - lsls r2, 2 - mov r3, r12 - adds r3, 0x4 - adds r2, r3, r2 - mov r7, r12 - ldrh r1, [r7, 0x2E] - lsls r1, 2 - ldr r0, [r2] - adds r0, r1 - str r0, [r2] -_081E302E: - mov r0, r12 - ldrh r1, [r0, 0x2E] - ldr r0, [r0, 0x14] - subs r0, r1 - mov r1, r12 - str r0, [r1, 0x14] - cmp r0, 0 - beq _081E3042 - cmp r0, 0 - bge _081E30AE -_081E3042: - mov r0, r12 - adds r0, 0x20 - movs r2, 0 - strb r2, [r0] - mov r7, r12 - ldrh r1, [r7] - ldr r0, _081E3084 @ =0x00008021 - cmp r1, r0 - bne _081E308C - movs r4, 0 -_081E3056: - adds r0, r5, r4 - movs r1, 0x1 - strb r1, [r0] - lsls r1, r4, 2 - adds r1, r3, r1 - mov r2, r12 - ldrh r0, [r2, 0x2E] - adds r2, r0, 0 - muls r2, r4 - mov r7, r12 - ldr r0, [r7, 0x28] - adds r0, r2 - str r0, [r1] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _081E3056 - ldr r0, [r7, 0x30] - str r0, [r7, 0x14] - ldr r0, _081E3088 @ =0x00008022 - strh r0, [r7] - b _081E30AE - .align 2, 0 -_081E3084: .4byte 0x00008021 -_081E3088: .4byte 0x00008022 -_081E308C: - strb r2, [r5] - mov r0, r12 - str r2, [r0, 0x14] - ldr r0, _081E309C @ =0x00008023 - mov r1, r12 - strh r0, [r1] - b _081E30AE - .align 2, 0 -_081E309C: .4byte 0x00008023 -_081E30A0: - lsls r1, 16 - ldr r0, _081E3110 @ =0x80230000 - cmp r1, r0 - bne _081E30AE - ldr r0, _081E3114 @ =0x00008020 - mov r2, r12 - strh r0, [r2] -_081E30AE: - mov r3, r12 - ldrh r0, [r3] - cmp r0, r9 - bne _081E30D8 - ldrb r2, [r6, 0x4] - mov r0, r12 - adds r0, 0x21 - adds r0, r2 - ldrb r0, [r0] - ldr r7, [sp] - cmp r0, r7 - bne _081E30D8 - mov r1, r8 - adds r0, r1, r2 - ldrb r0, [r0] - mov r2, r10 - asrs r0, r2 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _081E30FE -_081E30D8: - ldr r4, _081E3118 @ =0x04000208 - ldrh r2, [r4] - movs r0, 0 - strh r0, [r4] - ldr r0, _081E311C @ =gRfuStatic - ldr r3, [r0] - movs r0, 0x10 - mov r7, r10 - lsls r0, r7 - ldrb r1, [r3, 0x2] - orrs r0, r1 - movs r1, 0 - strb r0, [r3, 0x2] - lsls r0, r7, 2 - ldr r3, _081E3120 @ =gRfuSlotStatusNI - adds r0, r3 - ldr r0, [r0] - strh r1, [r0, 0x2] - strh r2, [r4] -_081E30FE: - 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 -_081E3110: .4byte 0x80230000 -_081E3114: .4byte 0x00008020 -_081E3118: .4byte 0x04000208 -_081E311C: .4byte gRfuStatic -_081E3120: .4byte gRfuSlotStatusNI - thumb_func_end rfu_STC_NI_receive_Sender - - thumb_func_start rfu_STC_NI_receive_Receiver -rfu_STC_NI_receive_Receiver: @ 81E3124 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r6, r1, 0 - str r2, [sp] - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r7, 0 - ldr r1, _081E3184 @ =gRfuSlotStatusNI - lsls r0, 2 - adds r0, r1 - ldr r4, [r0] - adds r5, r4, 0 - adds r5, 0x34 - ldrh r0, [r4, 0x34] - mov r9, r0 - ldrb r0, [r6, 0x4] - adds r3, r4, 0 - adds r3, 0x55 - adds r0, r3, r0 - ldrb r0, [r0] - mov r10, r0 - ldrb r0, [r6, 0x2] - cmp r0, 0x3 - bne _081E3194 - ldr r0, _081E3188 @ =gRfuStatic - ldr r2, [r0] - movs r0, 0x1 - mov r1, r8 - lsls r0, r1 - ldrb r1, [r2, 0x1] - orrs r0, r1 - strb r0, [r2, 0x1] - ldrh r1, [r4, 0x34] - ldr r0, _081E318C @ =0x00008042 - cmp r1, r0 - bne _081E31DA - adds r0, r4, 0 - adds r0, 0x54 - strb r7, [r0] - strb r7, [r3] - ldr r0, _081E3190 @ =0x00008043 - strh r0, [r4, 0x34] - b _081E31DA - .align 2, 0 -_081E3184: .4byte gRfuSlotStatusNI -_081E3188: .4byte gRfuStatic -_081E318C: .4byte 0x00008042 -_081E3190: .4byte 0x00008043 -_081E3194: - cmp r0, 0x2 - bne _081E31C0 - ldr r0, _081E31B8 @ =0x00008041 - cmp r9, r0 - bne _081E31AC - ldr r0, [r5, 0x14] - cmp r0, 0 - bne _081E31AC - mov r0, r8 - adds r1, r5, 0 - bl rfu_STC_NI_initSlot_asRecvDataEntity -_081E31AC: - ldrh r1, [r5] - ldr r0, _081E31BC @ =0x00008042 - cmp r1, r0 - bne _081E31DA - b _081E31DE - .align 2, 0 -_081E31B8: .4byte 0x00008041 -_081E31BC: .4byte 0x00008042 -_081E31C0: - cmp r0, 0x1 - bne _081E31DA - ldr r7, _081E328C @ =0x00008041 - cmp r9, r7 - beq _081E31DE - mov r0, r8 - adds r1, r5, 0 - bl rfu_STC_NI_initSlot_asRecvControllData - ldrh r0, [r4, 0x34] - cmp r0, r7 - bne _081E327A - movs r7, 0x1 -_081E31DA: - cmp r7, 0 - beq _081E3234 -_081E31DE: - ldrb r2, [r6, 0x5] - ldrb r3, [r6, 0x4] - adds r4, r5, 0 - adds r4, 0x21 - adds r0, r4, r3 - ldrb r0, [r0] - adds r0, 0x1 - movs r1, 0x3 - ands r0, r1 - cmp r2, r0 - bne _081E3234 - ldr r0, _081E3290 @ =gRfuFixed - ldr r0, [r0] - lsls r1, r3, 2 - adds r1, 0x4 - adds r1, r5, r1 - ldrh r2, [r6, 0x6] - ldr r3, [r0, 0x4] - mov r0, sp - bl _call_via_r3 - ldrh r1, [r5] - ldr r0, _081E3294 @ =0x00008042 - cmp r1, r0 - bne _081E3224 - ldrb r0, [r6, 0x4] - lsls r0, 2 - adds r2, r5, 0x4 - adds r2, r0 - ldrh r0, [r5, 0x2E] - lsls r1, r0, 1 - adds r1, r0 - ldr r0, [r2] - adds r0, r1 - str r0, [r2] -_081E3224: - ldrh r1, [r6, 0x6] - ldr r0, [r5, 0x14] - subs r0, r1 - str r0, [r5, 0x14] - ldrb r0, [r6, 0x4] - adds r0, r4, r0 - ldrb r1, [r6, 0x5] - strb r1, [r0] -_081E3234: - ldrh r0, [r5, 0x18] - cmp r0, 0 - bne _081E327A - ldrb r0, [r6, 0x4] - adds r1, r5, 0 - adds r1, 0x20 - strb r0, [r1] - ldrh r0, [r5] - cmp r0, r9 - bne _081E325C - adds r0, r5, 0 - adds r0, 0x21 - ldrb r2, [r6, 0x4] - adds r0, r2 - ldrb r0, [r0] - cmp r0, r10 - bne _081E325C - ldrb r6, [r6, 0x5] - cmp r0, r6 - bne _081E327A -_081E325C: - ldr r3, _081E3298 @ =0x04000208 - ldrh r2, [r3] - movs r0, 0 - strh r0, [r3] - ldr r0, _081E329C @ =gRfuStatic - ldr r4, [r0] - movs r0, 0x1 - mov r1, r8 - lsls r0, r1 - ldrb r1, [r4, 0x2] - orrs r0, r1 - movs r1, 0 - strb r0, [r4, 0x2] - strh r1, [r5, 0x2] - strh r2, [r3] -_081E327A: - 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 -_081E328C: .4byte 0x00008041 -_081E3290: .4byte gRfuFixed -_081E3294: .4byte 0x00008042 -_081E3298: .4byte 0x04000208 -_081E329C: .4byte gRfuStatic - thumb_func_end rfu_STC_NI_receive_Receiver - - thumb_func_start rfu_STC_NI_initSlot_asRecvControllData -rfu_STC_NI_initSlot_asRecvControllData: @ 81E32A0 - push {r4-r7,lr} - adds r2, r1, 0 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _081E32BC @ =gRfuLinkStatus - ldr r3, [r0] - ldrb r1, [r3] - mov r12, r0 - cmp r1, 0x1 - bne _081E32C0 - movs r5, 0x3 - adds r1, r3, 0 - adds r1, 0xF - b _081E32C8 - .align 2, 0 -_081E32BC: .4byte gRfuLinkStatus -_081E32C0: - movs r5, 0x2 - adds r0, r4, 0 - adds r0, 0x10 - adds r1, r3, r0 -_081E32C8: - movs r7, 0x1 - adds r0, r7, 0 - lsls r0, r4 - lsls r0, 24 - lsrs r6, r0, 24 - adds r4, r6, 0 - ldrh r3, [r2] - cmp r3, 0 - bne _081E3326 - ldrb r0, [r1] - cmp r0, r5 - bcs _081E3300 - movs r0, 0x49 - strh r0, [r2] - ldr r0, _081E32F8 @ =0x00000702 - strh r0, [r2, 0x18] - ldr r0, _081E32FC @ =gRfuStatic - ldr r2, [r0] - ldrb r1, [r2, 0x4] - adds r0, r6, 0 - orrs r0, r1 - strb r0, [r2, 0x4] - b _081E3326 - .align 2, 0 -_081E32F8: .4byte 0x00000702 -_081E32FC: .4byte gRfuStatic -_081E3300: - strh r3, [r2, 0x18] - ldrb r0, [r1] - subs r0, r5 - strb r0, [r1] - adds r0, r2, 0 - adds r0, 0x2D - str r0, [r2, 0x4] - movs r0, 0x7 - str r0, [r2, 0x14] - strb r7, [r2, 0x1F] - strh r3, [r2, 0x2E] - strb r4, [r2, 0x1A] - ldr r0, _081E332C @ =0x00008041 - strh r0, [r2] - mov r0, r12 - ldr r1, [r0] - ldrb r0, [r1, 0x5] - orrs r4, r0 - strb r4, [r1, 0x5] -_081E3326: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081E332C: .4byte 0x00008041 - thumb_func_end rfu_STC_NI_initSlot_asRecvControllData - - thumb_func_start rfu_STC_NI_initSlot_asRecvDataEntity -rfu_STC_NI_initSlot_asRecvDataEntity: @ 81E3330 - push {r4-r7,lr} - adds r4, r1, 0 - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r4, 0 - adds r0, 0x2D - ldrb r0, [r0] - cmp r0, 0x1 - bne _081E3354 - ldr r0, _081E3350 @ =gRfuLinkStatus - lsls r1, r5, 5 - adds r1, 0x14 - ldr r0, [r0] - adds r0, r1 - adds r0, 0x4 - b _081E33AA - .align 2, 0 -_081E3350: .4byte gRfuLinkStatus -_081E3354: - ldr r1, _081E3398 @ =gRfuSlotStatusNI - lsls r0, r5, 2 - adds r0, r1 - ldr r2, [r0] - ldr r1, [r4, 0x30] - ldr r0, [r2, 0x6C] - cmp r1, r0 - bls _081E33A8 - movs r1, 0x80 - lsls r1, 17 - lsls r1, r5 - lsrs r1, 24 - ldr r0, _081E339C @ =gRfuStatic - ldr r3, [r0] - ldrb r2, [r3, 0x4] - adds r0, r1, 0 - orrs r0, r2 - strb r0, [r3, 0x4] - ldr r0, _081E33A0 @ =gRfuLinkStatus - ldr r2, [r0] - ldrb r0, [r2, 0x5] - bics r0, r1 - strb r0, [r2, 0x5] - ldr r0, _081E33A4 @ =0x00000701 - strh r0, [r4, 0x18] - movs r0, 0x47 - strh r0, [r4] - adds r0, r5, 0 - movs r1, 0x1 - adds r2, r4, 0 - bl rfu_STC_releaseFrame - b _081E33DC - .align 2, 0 -_081E3398: .4byte gRfuSlotStatusNI -_081E339C: .4byte gRfuStatic -_081E33A0: .4byte gRfuLinkStatus -_081E33A4: .4byte 0x00000701 -_081E33A8: - ldr r0, [r2, 0x68] -_081E33AA: - str r0, [r4, 0x4] - movs r3, 0 - adds r6, r4, 0 - adds r6, 0x21 - movs r7, 0 - adds r5, r4, 0x4 -_081E33B6: - adds r0, r6, r3 - strb r7, [r0] - lsls r1, r3, 2 - adds r1, r5, r1 - ldrh r0, [r4, 0x2E] - adds r2, r0, 0 - muls r2, r3 - ldr r0, [r4, 0x4] - adds r0, r2 - str r0, [r1] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3 - bls _081E33B6 - ldr r0, [r4, 0x30] - str r0, [r4, 0x14] - ldr r0, _081E33E4 @ =0x00008042 - strh r0, [r4] -_081E33DC: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081E33E4: .4byte 0x00008042 - thumb_func_end rfu_STC_NI_initSlot_asRecvDataEntity - - thumb_func_start rfu_NI_checkCommFailCounter -rfu_NI_checkCommFailCounter: @ 81E33E8 - push {r4-r7,lr} - ldr r2, _081E3474 @ =gRfuLinkStatus - ldr r0, [r2] - ldrb r1, [r0, 0x4] - ldrb r0, [r0, 0x5] - orrs r0, r1 - cmp r0, 0 - beq _081E346E - ldr r1, _081E3478 @ =0x04000208 - ldrh r0, [r1] - mov r12, r0 - movs r0, 0 - strh r0, [r1] - ldr r1, _081E347C @ =gRfuStatic - ldr r0, [r1] - ldrb r0, [r0, 0x2] - lsrs r7, r0, 4 - movs r3, 0 - adds r6, r1, 0 - adds r5, r2, 0 - ldr r4, _081E3480 @ =gRfuSlotStatusNI -_081E3412: - movs r0, 0x80 - lsls r0, 17 - lsls r0, r3 - lsrs r2, r0, 24 - ldr r0, [r5] - ldrb r0, [r0, 0x4] - ands r0, r2 - cmp r0, 0 - beq _081E343A - ldr r0, [r6] - ldrb r0, [r0, 0x2] - ands r0, r2 - cmp r0, 0 - bne _081E343A - lsls r0, r3, 2 - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x2] - adds r0, 0x1 - strh r0, [r1, 0x2] -_081E343A: - ldr r0, [r5] - ldrb r0, [r0, 0x5] - ands r0, r2 - cmp r0, 0 - beq _081E3458 - adds r0, r7, 0 - ands r0, r2 - cmp r0, 0 - bne _081E3458 - lsls r0, r3, 2 - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x36] - adds r0, 0x1 - strh r0, [r1, 0x36] -_081E3458: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3 - bls _081E3412 - ldr r0, [r6] - movs r1, 0 - strb r1, [r0, 0x2] - ldr r0, _081E3478 @ =0x04000208 - mov r1, r12 - strh r1, [r0] -_081E346E: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081E3474: .4byte gRfuLinkStatus -_081E3478: .4byte 0x04000208 -_081E347C: .4byte gRfuStatic -_081E3480: .4byte gRfuSlotStatusNI - thumb_func_end rfu_NI_checkCommFailCounter - - thumb_func_start rfu_REQ_noise -rfu_REQ_noise: @ 81E3484 - push {lr} - ldr r0, _081E3498 @ =rfu_STC_REQ_callback - bl STWI_set_Callback_M - movs r0, 0x1 - movs r1, 0 - bl STWI_send_TestModeREQ - pop {r0} - bx r0 - .align 2, 0 -_081E3498: .4byte rfu_STC_REQ_callback - thumb_func_end rfu_REQ_noise - - thumb_func_start sub_81E349C -sub_81E349C: @ 81E349C - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _081E34B4 @ =0x04000208 - ldrh r0, [r0] - cmp r0, 0 - bne _081E34B8 - movs r0, 0x1 - negs r0, r0 - b _081E3538 - .align 2, 0 -_081E34B4: .4byte 0x04000208 -_081E34B8: - ldr r0, _081E34E4 @ =0x04000200 - ldrh r0, [r0] - mov r8, r0 - ldr r4, _081E34E8 @ =gRfuState - ldr r1, [r4] - movs r0, 0xA - str r0, [r1] - ldr r0, _081E34EC @ =sub_81E36B8 - bl STWI_set_Callback_ID - bl sub_81E3550 - ldr r0, [r4] - ldrb r0, [r0, 0xA] - lsls r0, 2 - ldr r1, _081E34F0 @ =0x04000100 - adds r4, r0, r1 - lsls r0, r5, 27 - lsrs r5, r0, 24 - movs r7, 0 - b _081E3506 - .align 2, 0 -_081E34E4: .4byte 0x04000200 -_081E34E8: .4byte gRfuState -_081E34EC: .4byte sub_81E36B8 -_081E34F0: .4byte 0x04000100 -_081E34F4: - strh r6, [r4, 0x2] - strh r6, [r4] - movs r0, 0x83 - strh r0, [r4, 0x2] -_081E34FC: - ldrh r0, [r4] - cmp r0, 0x1F - bls _081E34FC - strh r7, [r4, 0x2] - strh r7, [r4] -_081E3506: - subs r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0xFF - beq _081E351A - bl sub_81E35C4 - adds r6, r0, 0 - cmp r6, 0 - beq _081E34F4 -_081E351A: - ldr r1, _081E3544 @ =0x04000208 - movs r0, 0 - strh r0, [r1] - ldr r0, _081E3548 @ =0x04000200 - mov r2, r8 - strh r2, [r0] - movs r0, 0x1 - strh r0, [r1] - ldr r0, _081E354C @ =gRfuState - ldr r1, [r0] - movs r0, 0 - str r0, [r1] - bl STWI_set_Callback_ID - adds r0, r6, 0 -_081E3538: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_081E3544: .4byte 0x04000208 -_081E3548: .4byte 0x04000200 -_081E354C: .4byte gRfuState - thumb_func_end sub_81E349C - - thumb_func_start sub_81E3550 -sub_81E3550: @ 81E3550 - push {r4,r5,lr} - sub sp, 0x4 - ldr r3, _081E35A8 @ =0x04000208 - movs r4, 0 - strh r4, [r3] - ldr r2, _081E35AC @ =0x04000200 - ldr r0, _081E35B0 @ =gRfuState - ldr r0, [r0] - movs r1, 0x8 - ldrb r0, [r0, 0xA] - lsls r1, r0 - movs r5, 0x80 - orrs r1, r5 - ldrh r0, [r2] - bics r0, r1 - strh r0, [r2] - movs r0, 0x1 - strh r0, [r3] - ldr r0, _081E35B4 @ =0x04000134 - strh r4, [r0] - subs r2, 0xD8 - movs r1, 0x80 - lsls r1, 5 - adds r0, r1, 0 - strh r0, [r2] - ldrh r0, [r2] - movs r3, 0x81 - lsls r3, 7 - adds r1, r3, 0 - orrs r0, r1 - strh r0, [r2] - movs r0, 0 - str r0, [sp] - ldr r1, _081E35B8 @ =gUnknown_3007470 - ldr r2, _081E35BC @ =0x05000003 - mov r0, sp - bl CpuSet - ldr r0, _081E35C0 @ =0x04000202 - strh r5, [r0] - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081E35A8: .4byte 0x04000208 -_081E35AC: .4byte 0x04000200 -_081E35B0: .4byte gRfuState -_081E35B4: .4byte 0x04000134 -_081E35B8: .4byte gUnknown_3007470 -_081E35BC: .4byte 0x05000003 -_081E35C0: .4byte 0x04000202 - thumb_func_end sub_81E3550 - - thumb_func_start sub_81E35C4 -sub_81E35C4: @ 81E35C4 - push {r4-r7,lr} - ldr r0, _081E35D8 @ =gUnknown_3007470 - ldrb r1, [r0, 0x1] - mov r12, r1 - adds r7, r0, 0 - cmp r1, 0 - beq _081E35DC - cmp r1, 0x1 - beq _081E3614 - b _081E36AC - .align 2, 0 -_081E35D8: .4byte gUnknown_3007470 -_081E35DC: - movs r6, 0x1 - strb r6, [r7] - ldr r3, _081E3608 @ =0x04000128 - ldrh r0, [r3] - movs r5, 0x1 - orrs r0, r5 - strh r0, [r3] - ldr r4, _081E360C @ =0x04000208 - mov r0, r12 - strh r0, [r4] - ldr r2, _081E3610 @ =0x04000200 - ldrh r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strh r0, [r2] - strh r6, [r4] - strb r5, [r7, 0x1] - ldrb r0, [r3] - orrs r0, r1 - strb r0, [r3] - b _081E36B0 - .align 2, 0 -_081E3608: .4byte 0x04000128 -_081E360C: .4byte 0x04000208 -_081E3610: .4byte 0x04000200 -_081E3614: - ldrh r0, [r7, 0xA] - cmp r0, 0 - bne _081E36A8 - ldrb r0, [r7] - cmp r0, 0x1 - bne _081E3644 - ldrh r0, [r7, 0x2] - cmp r0, 0 - bne _081E36B0 - ldr r3, _081E363C @ =0x04000208 - strh r0, [r3] - ldr r2, _081E3640 @ =0x04000128 - ldrh r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strh r0, [r2] - mov r1, r12 - strh r1, [r3] - b _081E36B0 - .align 2, 0 -_081E363C: .4byte 0x04000208 -_081E3640: .4byte 0x04000128 -_081E3644: - ldrh r1, [r7, 0x4] - ldr r0, _081E3690 @ =0x00008001 - cmp r1, r0 - beq _081E36B0 - ldrh r6, [r7, 0x2] - cmp r6, 0 - bne _081E36B0 - ldr r4, _081E3694 @ =0x04000208 - strh r6, [r4] - ldr r3, _081E3698 @ =0x04000200 - ldrh r1, [r3] - ldr r0, _081E369C @ =0x0000ff7f - ands r0, r1 - strh r0, [r3] - mov r7, r12 - strh r7, [r4] - ldr r2, _081E36A0 @ =0x04000128 - strh r6, [r2] - movs r1, 0x80 - lsls r1, 5 - adds r0, r1, 0 - strh r0, [r2] - ldr r0, _081E36A4 @ =0x04000202 - movs r5, 0x80 - strh r5, [r0] - ldrh r0, [r2] - movs r7, 0x81 - lsls r7, 7 - adds r1, r7, 0 - orrs r0, r1 - strh r0, [r2] - strh r6, [r4] - ldrh r0, [r3] - orrs r0, r5 - strh r0, [r3] - mov r0, r12 - strh r0, [r4] - b _081E36B0 - .align 2, 0 -_081E3690: .4byte 0x00008001 -_081E3694: .4byte 0x04000208 -_081E3698: .4byte 0x04000200 -_081E369C: .4byte 0x0000ff7f -_081E36A0: .4byte 0x04000128 -_081E36A4: .4byte 0x04000202 -_081E36A8: - movs r0, 0x2 - strb r0, [r7, 0x1] -_081E36AC: - ldrh r0, [r7, 0xA] - b _081E36B2 -_081E36B0: - movs r0, 0 -_081E36B2: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_81E35C4 - - thumb_func_start sub_81E36B8 -sub_81E36B8: @ 81E36B8 - push {r4,r5,lr} - ldr r0, _081E3700 @ =0x04000120 - ldr r5, [r0] - ldr r0, _081E3704 @ =gUnknown_3007470 - ldrb r1, [r0] - adds r4, r0, 0 - cmp r1, 0x1 - beq _081E36D2 - ldr r0, _081E3708 @ =0x04000128 - ldrh r1, [r0] - movs r2, 0x80 - orrs r1, r2 - strh r1, [r0] -_081E36D2: - ldrb r2, [r4] - lsls r1, r2, 4 - adds r0, r5, 0 - lsls r0, r1 - lsrs r1, r0, 16 - movs r0, 0x1 - subs r0, r2 - lsls r0, 4 - lsls r5, r0 - adds r0, r5, 0 - lsrs r5, r0, 16 - ldrh r0, [r4, 0xA] - cmp r0, 0 - bne _081E3726 - ldrh r2, [r4, 0x6] - cmp r1, r2 - bne _081E3724 - ldrh r3, [r4, 0x2] - cmp r3, 0x3 - bls _081E370C - strh r5, [r4, 0xA] - b _081E3726 - .align 2, 0 -_081E3700: .4byte 0x04000120 -_081E3704: .4byte gUnknown_3007470 -_081E3708: .4byte 0x04000128 -_081E370C: - ldrh r0, [r4, 0x4] - mvns r0, r0 - lsls r0, 16 - lsrs r0, 16 - cmp r1, r0 - bne _081E3726 - mvns r0, r2 - lsls r0, 16 - lsrs r0, 16 - cmp r5, r0 - bne _081E3726 - adds r0, r3, 0x1 -_081E3724: - strh r0, [r4, 0x2] -_081E3726: - ldrh r0, [r4, 0x2] - cmp r0, 0x3 - bhi _081E373C - lsls r0, 1 - ldr r1, _081E3738 @ =_Str_Sio32ID - adds r0, r1 - ldrh r0, [r0] - b _081E373E - .align 2, 0 -_081E3738: .4byte _Str_Sio32ID -_081E373C: - ldr r0, _081E3794 @ =0x00008001 -_081E373E: - strh r0, [r4, 0x4] - mvns r0, r5 - strh r0, [r4, 0x6] - ldr r3, _081E3798 @ =0x04000120 - ldrh r2, [r4, 0x4] - ldrb r1, [r4] - movs r0, 0x1 - subs r0, r1 - lsls r0, 4 - lsls r2, r0 - ldrh r0, [r4, 0x6] - lsls r1, 4 - lsls r0, r1 - adds r2, r0 - str r2, [r3] - ldrb r0, [r4] - cmp r0, 0x1 - bne _081E378C - ldrh r0, [r4, 0x2] - cmp r0, 0 - bne _081E376E - ldr r0, _081E379C @ =0x0000494e - cmp r5, r0 - bne _081E378C -_081E376E: - movs r0, 0 - ldr r1, _081E37A0 @ =0x00000257 -_081E3772: - adds r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, r1 - bls _081E3772 - ldrh r0, [r4, 0xA] - cmp r0, 0 - bne _081E378C - ldr r0, _081E37A4 @ =0x04000128 - ldrh r1, [r0] - movs r2, 0x80 - orrs r1, r2 - strh r1, [r0] -_081E378C: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081E3794: .4byte 0x00008001 -_081E3798: .4byte 0x04000120 -_081E379C: .4byte 0x0000494e -_081E37A0: .4byte 0x00000257 -_081E37A4: .4byte 0x04000128 - thumb_func_end sub_81E36B8 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/librfu.h b/include/librfu.h index e50f5cc89..8bc1e636d 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -3,9 +3,11 @@ #include "main.h" -/* TODOs: +/* TODOs: + * - decide file boundaries * - documentation * - check if any field needs to be volatile + * - check if field names make sense * - decompile librfu_intr.s once arm support is back again */ @@ -124,7 +126,7 @@ struct RfuStruct u8 unk_17; void (*callbackM)(); void (*callbackS)(u16); - u32 callbackId; + void (*unk_20)(void); union RfuPacket *txPacket; union RfuPacket *rxPacket; vu8 unk_2c; @@ -168,7 +170,7 @@ struct NIComm u16 state; u16 failCounter; const u8 *nowP[4]; - u32 remainSize; + s32 remainSize; u16 errorCode; u8 bmSlot; u8 recvAckFlag[4]; @@ -261,7 +263,8 @@ struct Unk_3007470 u8 unk1; u16 unk2; u16 unk4; - u8 fill6[4]; + u16 unk6; + u16 unk8; // unused u16 unkA; }; @@ -330,6 +333,7 @@ void rfu_UNI_readySendData(u8 a0); void rfu_UNI_clearRecvNewDataFlag(u8 a0); void rfu_REQ_PARENT_resumeRetransmitAndChange(void); s32 rfu_NI_setSendData(u8, u8, const void *, u32); +void rfu_REQ_noise(void); // librfu_intr void IntrSIO32(void); @@ -343,7 +347,7 @@ void STWI_set_Callback_M(void *callbackM); void STWI_set_Callback_S(void (*callbackS)(u16)); void STWI_init_timer(IntrFunc *interrupt, s32 timerSelect); void AgbRFU_SoftReset(void); -void STWI_set_Callback_ID(u32 id); +void STWI_set_CallbackUnk(void (*func)(void)); u16 STWI_read_status(u8 index); u16 STWI_poll_CommandEnd(void); void STWI_send_DataRxREQ(void); diff --git a/ld_script.txt b/ld_script.txt index 89bf60c16..08adda00d 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -320,7 +320,6 @@ SECTIONS { src/librfu_stwi.o(.text); asm/librfu_intr.o(.text); src/librfu_rfu.o(.text); - asm/librfu.o(.text); src/isagbprn.o(.text); asm/libagbsyscall.o(.text); *libgcc.a:_call_via_rX.o(.text); diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index e53aade49..140aa353e 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -19,7 +19,7 @@ struct RfuHeader u16 unk0E; }; -struct RfuTest +struct RfuLocalStruct { u8 unk00; u8 unk01; @@ -30,45 +30,51 @@ struct RfuTest u16 unk06; }; -void rfu_CB_defaultCallback(u8, u16); -void rfu_CB_reset(u8, u16); -void rfu_CB_configGameData(u8, u16); -void rfu_CB_stopMode(u8, u16); -void rfu_CB_startSearchChild(u8, u16); -void rfu_CB_pollAndEndSearchChild(u8, u16); -void rfu_CB_startSearchParent(u8, u16); -void rfu_CB_pollSearchParent(u8, u16); -void rfu_CB_pollConnectParent(u8, u16); -void rfu_CB_pollConnectParent(u8, u16); -void rfu_CB_disconnect(u8, u16); -void rfu_CB_CHILD_pollConnectRecovery(u8, u16); -void rfu_CB_sendData(UNUSED u8, u16); -void rfu_CB_sendData2(UNUSED u8, u16); -void rfu_CB_sendData3(u8, u16); -void rfu_CB_recvData(u8, u16); -s32 sub_81E349C(u8); -void rfu_enableREQCallback(bool8); -void rfu_STC_clearAPIVariables(void); -void rfu_STC_readChildList(void); -void rfu_STC_readParentCandidateList(void); -void rfu_STC_REQ_callback(u8, u16); -void rfu_STC_removeLinkData(u8, u8); -void rfu_STC_fastCopy(const u8 **, u8 **, s32); -void rfu_STC_clearLinkStatus(u8); -void rfu_NI_checkCommFailCounter(void); -u16 rfu_STC_setSendData_org(u8, u8, u8, const void *, u32); -void rfu_constructSendLLFrame(void); -u16 rfu_STC_NI_constructLLSF(u8, u8 **, struct NIComm *); -u16 rfu_STC_UNI_constructLLSF(u8, u8 **); -void rfu_STC_PARENT_analyzeRecvPacket(void); -void rfu_STC_CHILD_analyzeRecvPacket(void); -u16 rfu_STC_analyzeLLSF(u8, const u8 *, u16); -void rfu_STC_UNI_receive(u8, const struct RfuTest *, const u8 *); -void rfu_STC_NI_receive_Receiver(u8, const struct RfuTest *, const u8 *); -void rfu_STC_NI_receive_Sender(u8, u8, const struct RfuTest *, UNUSED const u8 *); +static void rfu_CB_defaultCallback(u8, u16); +static void rfu_CB_reset(u8, u16); +static void rfu_CB_configGameData(u8, u16); +static void rfu_CB_stopMode(u8, u16); +static void rfu_CB_startSearchChild(u8, u16); +static void rfu_CB_pollAndEndSearchChild(u8, u16); +static void rfu_CB_startSearchParent(u8, u16); +static void rfu_CB_pollSearchParent(u8, u16); +static void rfu_CB_pollConnectParent(u8, u16); +static void rfu_CB_pollConnectParent(u8, u16); +static void rfu_CB_disconnect(u8, u16); +static void rfu_CB_CHILD_pollConnectRecovery(u8, u16); +static void rfu_CB_sendData(UNUSED u8, u16); +static void rfu_CB_sendData2(UNUSED u8, u16); +static void rfu_CB_sendData3(u8, u16); +static void rfu_CB_recvData(u8, u16); +static s32 sub_81E349C(u8); +static void sub_81E36B8(void); +static void sub_81E3550(void); +static s32 sub_81E35C4(void); +static void rfu_enableREQCallback(bool8); +static void rfu_STC_clearAPIVariables(void); +static void rfu_STC_readChildList(void); +static void rfu_STC_readParentCandidateList(void); +static void rfu_STC_REQ_callback(u8, u16); +static void rfu_STC_removeLinkData(u8, u8); +static void rfu_STC_fastCopy(const u8 **, u8 **, s32); +static void rfu_STC_clearLinkStatus(u8); +static void rfu_NI_checkCommFailCounter(void); +static u16 rfu_STC_setSendData_org(u8, u8, u8, const void *, u32); +static void rfu_constructSendLLFrame(void); +static u16 rfu_STC_NI_constructLLSF(u8, u8 **, struct NIComm *); +static u16 rfu_STC_UNI_constructLLSF(u8, u8 **); +static void rfu_STC_PARENT_analyzeRecvPacket(void); +static void rfu_STC_CHILD_analyzeRecvPacket(void); +static u16 rfu_STC_analyzeLLSF(u8, const u8 *, u16); +static void rfu_STC_UNI_receive(u8, const struct RfuLocalStruct *, const u8 *); +static void rfu_STC_NI_receive_Receiver(u8, const struct RfuLocalStruct *, const u8 *); +static void rfu_STC_NI_receive_Sender(u8, u8, const struct RfuLocalStruct *, UNUSED const u8 *); +static void rfu_STC_NI_initSlot_asRecvDataEntity(u8, struct NIComm *); +static void rfu_STC_NI_initSlot_asRecvControllData(u8, struct NIComm *); extern const char _Str_RFU_MBOOT[]; extern const struct RfuHeader _Str_RfuHeader[2]; +extern const u16 _Str_Sio32ID[]; struct RfuStruct *gRfuState; ALIGNED(8) struct RfuSlotStatusUNI *gRfuSlotStatusUNI[4]; @@ -91,7 +97,6 @@ u16 rfu_initializeAPI(struct Unk_3001190 *unk0, u16 unk1, IntrFunc *interrupt, b // is not 4-byte aligned? if ((u32)unk0 & 3) return 2; - // Nintendo pls, just use a ternary for once if (copyInterruptToRam) { // An assert/debug print may have existed before, ie @@ -140,7 +145,7 @@ u16 rfu_initializeAPI(struct Unk_3001190 *unk0, u16 unk1, IntrFunc *interrupt, b return 0; } -void rfu_STC_clearAPIVariables(void) +static void rfu_STC_clearAPIVariables(void) { u16 IMEBackup = REG_IME; u8 i, r4; @@ -169,6 +174,7 @@ void rfu_REQ_PARENT_resumeRetransmitAndChange(void) u16 rfu_UNI_PARENT_getDRAC_ACK(u8 *ackFlag) { struct RfuIntrStruct *buf; + *ackFlag = 0; if (gRfuLinkStatus->connMode != 1) return 0x300; @@ -208,7 +214,7 @@ void rfu_setREQCallback(void (*callback)(u16, u16)) rfu_enableREQCallback(callback != NULL); } -void rfu_enableREQCallback(bool8 enable) +static void rfu_enableREQCallback(bool8 enable) { if (enable) gRfuStatic->flags |= 8; @@ -216,7 +222,7 @@ void rfu_enableREQCallback(bool8 enable) gRfuStatic->flags &= 0xF7; } -void rfu_STC_REQ_callback(u8 r5, u16 reqResult) +static void rfu_STC_REQ_callback(u8 r5, u16 reqResult) { STWI_set_Callback_M(rfu_CB_defaultCallback); gRfuStatic->reqResult = reqResult; @@ -224,7 +230,7 @@ void rfu_STC_REQ_callback(u8 r5, u16 reqResult) gRfuFixed->reqCallback(r5, reqResult); } -void rfu_CB_defaultCallback(u8 r0, u16 reqResult) +static void rfu_CB_defaultCallback(u8 r0, u16 reqResult) { s32 r5; u8 i; @@ -264,7 +270,7 @@ u32 rfu_getRFUStatus(u8 *status) return 0; } -s32 rfu_MBOOT_CHILD_inheritanceLinkStatus(void) +static s32 rfu_MBOOT_CHILD_inheritanceLinkStatus(void) { const char *s1 = _Str_RFU_MBOOT; char *s2 = (char *)0x30000F0; @@ -318,7 +324,7 @@ void rfu_REQ_stopMode(void) } } -void rfu_CB_stopMode(u8 a1, u16 reqResult) +static void rfu_CB_stopMode(u8 a1, u16 reqResult) { if (reqResult == 0) REG_SIOCNT = SIO_MULTI_MODE; @@ -344,7 +350,7 @@ void rfu_REQ_reset(void) STWI_send_ResetREQ(); } -void rfu_CB_reset(u8 a1, u16 reqResult) +static void rfu_CB_reset(u8 a1, u16 reqResult) { if (reqResult == 0) rfu_STC_clearAPIVariables(); @@ -397,7 +403,7 @@ void rfu_REQ_configGameData(u8 r6, u16 r2, const u8 *r4, const u8 *r7) STWI_send_GameConfigREQ(sp, r7); } -void rfu_CB_configGameData(u8 ip, u16 r7) +static void rfu_CB_configGameData(u8 ip, u16 r7) { s32 r2, r3; u8 *r4; @@ -448,14 +454,14 @@ void rfu_REQ_startSearchChild(void) STWI_send_SC_StartREQ(); } -void rfu_CB_startSearchChild(u8 r3, u16 reqResult) +static void rfu_CB_startSearchChild(u8 r3, u16 reqResult) { if (reqResult == 0) gRfuStatic->SCStartFlag = 1; rfu_STC_REQ_callback(r3, reqResult); } -void rfu_STC_clearLinkStatus(u8 r4) +static void rfu_STC_clearLinkStatus(u8 r4) { u8 i; @@ -485,7 +491,7 @@ void rfu_REQ_endSearchChild(void) STWI_send_SC_EndREQ(); } -void rfu_CB_pollAndEndSearchChild(u8 r4, u16 reqResult) +static void rfu_CB_pollAndEndSearchChild(u8 r4, u16 reqResult) { if (reqResult == 0) rfu_STC_readChildList(); @@ -508,7 +514,7 @@ void rfu_CB_pollAndEndSearchChild(u8 r4, u16 reqResult) rfu_STC_REQ_callback(r4, reqResult); } -void rfu_STC_readChildList(void) +static void rfu_STC_readChildList(void) { u32 r5; u8 r8 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1]; @@ -562,7 +568,7 @@ void rfu_REQ_startSearchParent(void) STWI_send_SP_StartREQ(); } -void rfu_CB_startSearchParent(u8 r5, u16 reqResult) +static void rfu_CB_startSearchParent(u8 r5, u16 reqResult) { if (reqResult == 0) rfu_STC_clearLinkStatus(0); @@ -575,7 +581,7 @@ void rfu_REQ_pollSearchParent(void) STWI_send_SP_PollingREQ(); } -void rfu_CB_pollSearchParent(u8 r5, u16 reqResult) +static void rfu_CB_pollSearchParent(u8 r5, u16 reqResult) { if (reqResult == 0) rfu_STC_readParentCandidateList(); @@ -588,7 +594,7 @@ void rfu_REQ_endSearchParent(void) STWI_send_SP_EndREQ(); } -void rfu_STC_readParentCandidateList(void) +static void rfu_STC_readParentCandidateList(void) { u8 r7, r6, r5, r4, r3; u8 *r1, *r2; @@ -662,7 +668,7 @@ void rfu_REQ_pollConnectParent(void) STWI_send_CP_PollingREQ(); } -void rfu_CB_pollConnectParent(u8 sp24, u16 sp28) +static void rfu_CB_pollConnectParent(u8 sp24, u16 sp28) { u16 id; u8 slot; @@ -955,7 +961,7 @@ s32 rfu_REQBN_watchLink(u16 r5, u8 *r8, u8 *sp00, u8 *sp04) return 0; } -void rfu_STC_removeLinkData(u8 r7, u8 r12) +static void rfu_STC_removeLinkData(u8 r7, u8 r12) { u8 r5 = 1 << r7; s32 r6; @@ -1002,7 +1008,7 @@ void rfu_REQ_disconnect(u8 who) } } -void rfu_CB_disconnect(u8 r6, u16 r5) +static void rfu_CB_disconnect(u8 r6, u16 r5) { u8 r4, r0; @@ -1055,7 +1061,7 @@ void rfu_REQ_CHILD_pollConnectRecovery(void) STWI_send_CPR_PollingREQ(); } -void rfu_CB_CHILD_pollConnectRecovery(u8 r8, u16 r7) +static void rfu_CB_CHILD_pollConnectRecovery(u8 r8, u16 r7) { u8 r3, r4; struct RfuLinkStatus *r2; @@ -1100,7 +1106,7 @@ void rfu_REQ_CHILD_endConnectRecovery(void) STWI_send_CPR_EndREQ(); } -void rfu_STC_fastCopy(const u8 **src_p, u8 **dst_p, s32 size) +static void rfu_STC_fastCopy(const u8 **src_p, u8 **dst_p, s32 size) { const u8 *src = *src_p; u8 *dst = *dst_p; @@ -1162,7 +1168,7 @@ void rfu_clearAllSlot(void) REG_IME = IMEBackup; } -void rfu_STC_releaseFrame(u8 r5, u8 r3, struct NIComm *r4) +static void rfu_STC_releaseFrame(u8 r5, u8 r3, struct NIComm *r4) { if (!(gRfuStatic->flags & 0x80)) @@ -1288,7 +1294,7 @@ s32 rfu_NI_CHILD_setSendGameName(u8 a1, u8 a2) return rfu_STC_setSendData_org(64, 1 << a1, a2, &gRfuLinkStatus->my.serialNum, 26); } -u16 rfu_STC_setSendData_org(u8 r6, u8 r3, u8 r8, const void *sp00, u32 sp28) +static u16 rfu_STC_setSendData_org(u8 r6, u8 r3, u8 r8, const void *sp00, u32 sp28) { u8 r2, r0; u8 r4; @@ -1401,7 +1407,7 @@ s32 rfu_changeSendTarget(u8 r3, u8 r7, u8 r6) } gRfuLinkStatus->sendSlotNIFlag &= ~r3; r5->sub.send.bmSlot = r6; - if ((r6 << 24) == 0) // The shift doesn't make any sense. + if (r5->sub.send.bmSlot == 0) { rfu_STC_releaseFrame(r7, 0, &r5->sub.send); r5->sub.send.state = 39; @@ -1583,7 +1589,7 @@ void rfu_REQ_sendData(u8 r5) } } -void rfu_CB_sendData(UNUSED u8 r0, u16 r7) +static void rfu_CB_sendData(UNUSED u8 r0, u16 r7) { u8 r6; struct NIComm *r4; @@ -1609,12 +1615,12 @@ void rfu_CB_sendData(UNUSED u8 r0, u16 r7) rfu_STC_REQ_callback(36, r7); } -void rfu_CB_sendData2(UNUSED u8 r0, u16 r1) +static void rfu_CB_sendData2(UNUSED u8 r0, u16 r1) { rfu_STC_REQ_callback(36, r1); } -void rfu_CB_sendData3(u8 r0, u16 r1) +static void rfu_CB_sendData3(u8 r0, u16 r1) { if (r1 != 0) rfu_STC_REQ_callback(36, r1); @@ -1622,7 +1628,7 @@ void rfu_CB_sendData3(u8 r0, u16 r1) rfu_STC_REQ_callback(0xFF, 0); } -void rfu_constructSendLLFrame(void) +static void rfu_constructSendLLFrame(void) { u32 r8, r5; u8 r6; @@ -1671,7 +1677,7 @@ void rfu_constructSendLLFrame(void) } } -u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4) +static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4) { u16 r5; u32 sp00; @@ -1701,7 +1707,7 @@ u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4) } else { - if (r4->remainSize >= r4->payloadSize) + if ((u32)r4->remainSize >= r4->payloadSize) r5 = r4->payloadSize; else r5 = r4->remainSize; @@ -1735,7 +1741,7 @@ u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4) return r5 + r8->unk00; } -u16 rfu_STC_UNI_constructLLSF(u8 r8, u8 **r6) +static u16 rfu_STC_UNI_constructLLSF(u8 r8, u8 **r6) { const struct RfuHeader *r5; const u8 *sp04; @@ -1774,7 +1780,7 @@ void rfu_REQ_recvData(void) } } -void rfu_CB_recvData(u8 r9, u16 r7) +static void rfu_CB_recvData(u8 r9, u16 r7) { u8 r6; struct RfuSlotStatusNI *r4; @@ -1800,13 +1806,13 @@ void rfu_CB_recvData(u8 r9, u16 r7) r4->sub.recv.state = 70; } } - if ( gRfuStatic->recvErrorFlag ) + if (gRfuStatic->recvErrorFlag) r7 = gRfuStatic->recvErrorFlag | 0x700; } rfu_STC_REQ_callback(r9, r7); } -void rfu_STC_PARENT_analyzeRecvPacket(void) +static void rfu_STC_PARENT_analyzeRecvPacket(void) { u32 r3; u8 r5; @@ -1839,7 +1845,7 @@ void rfu_STC_PARENT_analyzeRecvPacket(void) } } -void rfu_STC_CHILD_analyzeRecvPacket(void) +static void rfu_STC_CHILD_analyzeRecvPacket(void) { u16 r4; u8 *r5; @@ -1859,9 +1865,9 @@ void rfu_STC_CHILD_analyzeRecvPacket(void) } while (!(r4 & 0x8000)); } -u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3) +static u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3) { - struct RfuTest sp00; + struct RfuLocalStruct sp00; const struct RfuHeader *r6; u32 r5; u8 r4; @@ -1900,7 +1906,7 @@ u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3) { for (r4 = 0; r4 < NELEMS(gRfuSlotStatusNI); ++r4) if (((gRfuSlotStatusNI[r4]->sub.send.bmSlot >> r12) & 1) - && ((gRfuLinkStatus->sendSlotNIFlag >> r12) & 1)) + && ((gRfuLinkStatus->sendSlotNIFlag >> r12) & 1)) break; if (r4 <= 3) rfu_STC_NI_receive_Sender(r4, r12, &sp00, r7); @@ -1931,7 +1937,7 @@ u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3) return r10; } -void rfu_STC_UNI_receive(u8 r7, const struct RfuTest *r6, const u8 *sp00) +static void rfu_STC_UNI_receive(u8 r7, const struct RfuLocalStruct *r6, const u8 *sp00) { u8 *sp04; u32 r2; @@ -1970,3 +1976,397 @@ _081E2F0E: if (r5->errorCode) gRfuStatic->recvErrorFlag |= 16 << r7; } + +static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct *r6, const u8 *r3) +{ + struct NIComm *r12 = &gRfuSlotStatusNI[r0]->sub.send; + u16 r9 = r12->state; + u8 sp00 = r12->n[r6->unk04]; + u8 *r8; + u8 r4; + u16 r2; + + if ((r6->unk02 == 2 && r9 == 0x8022) + || (r6->unk02 == 1 && r9 == 0x8021) + || (r6->unk02 == 3 && r9 == 0x8023)) + { + if (r12->n[r6->unk04] == r6->unk05) + r12->recvAckFlag[r6->unk04] |= 1 << r10; + } + if ((r12->recvAckFlag[r6->unk04] & r12->bmSlot) == r12->bmSlot) + { + r12->n[r6->unk04] = (r12->n[r6->unk04] + 1) & 3; + r12->recvAckFlag[r6->unk04] = 0; + if ((u16)(r12->state + ~0x8020) <= 1) + { + if (r12->state == 0x8021) + r12->nowP[r6->unk04] += r12->payloadSize; + else + r12->nowP[r6->unk04] += r12->payloadSize << 2; + r12->remainSize -= r12->payloadSize; + if (r12->remainSize != 0) + if (r12->remainSize >= 0) + goto _081E30AE; + // Above is a hack to avoid optimization over comparison. + // rfu_STC_NI_constructLLSF uses this field as u32. + // It's equivalent to the following condition: + // if (r12->remainSize == 0 || r12->remainSize < 0) + { + r12->phase = 0; + if (r12->state == 0x8021) + { + for (r4 = 0; r4 < NELEMS(r12->n); ++r4) + { + r12->n[r4] = 1; + r12->nowP[r4] = r12->src + r12->payloadSize * r4; + } + r12->remainSize = r12->dataSize; + r12->state = 0x8022; + } + else + { + r12->n[0] = 0; + r12->remainSize = 0; + r12->state = 0x8023; + } + } + _081E30AE: + } + else if (r12->state == 0x8023) + { + r12->state = 0x8020; + } + } + if (r12->state != r9 + || r12->n[r6->unk04] != sp00 + || (r12->recvAckFlag[r6->unk04] >> r10) & 1) + { + r2 = REG_IME; + REG_IME = 0; + gRfuStatic->recvRenewalFlag |= 16 << r10; + gRfuSlotStatusNI[r10]->sub.send.failCounter = 0; + REG_IME = r2; + } +} + +static void rfu_STC_NI_receive_Receiver(u8 r8, const struct RfuLocalStruct *r6, const u8 *sp00) +{ + u16 r2; + u32 r7 = 0; + struct RfuSlotStatusNI *r4 = gRfuSlotStatusNI[r8]; + struct NIComm *r5 = &r4->sub.recv; + u16 r9 = r4->sub.recv.state; + u8 r10 = r4->sub.recv.n[r6->unk04]; + + if (r6->unk02 == 3) + { + gRfuStatic->NIEndRecvFlag |= 1 << r8; + if (r4->sub.recv.state == 0x8042) + { + r4->sub.recv.phase = 0; + r4->sub.recv.n[0] = 0; + r4->sub.recv.state = 0x8043; + } + } + else if (r6->unk02 == 2) + { + if (r9 == 0x8041 && !r5->remainSize) + rfu_STC_NI_initSlot_asRecvDataEntity(r8, r5); + if (r5->state == 0x8042) + r7 = 1; + } + else if (r6->unk02 == 1) + { + if (r9 == 0x8041) + { + r7 = 1; + } + else + { + rfu_STC_NI_initSlot_asRecvControllData(r8, r5); + if (r4->sub.recv.state != 0x8041) + return; + r7 = 1; + } + } + if (r7 != 0) + { + if (r6->unk05 == ((r5->n[r6->unk04] + 1) & 3)) + { + gRfuFixed->fastCopyPtr(&sp00, (u8 **)&r5->nowP[r6->unk04], r6->unk06); + if (r5->state == 0x8042) + r5->nowP[r6->unk04] += 3 * r5->payloadSize; + r5->remainSize -= r6->unk06; + r5->n[r6->unk04] = r6->unk05; + } + } + if (r5->errorCode == 0) + { + r5->phase = r6->unk04; + if (r5->state != r9 || r5->n[r6->unk04] != r10 || r5->n[r6->unk04] == r6->unk05) + { + r2 = REG_IME; + REG_IME = 0; + gRfuStatic->recvRenewalFlag |= 1 << r8; + r5->failCounter = 0; + REG_IME = r2; + } + } +} + +static void rfu_STC_NI_initSlot_asRecvControllData(u8 r4, struct NIComm *r2) +{ + u8 *r1; + u32 r5; + u8 r6; + + if (gRfuLinkStatus->connMode == 1) + { + r5 = 3; + r1 = &gRfuLinkStatus->remainLLFrameSizeParent; + } + else + { + r5 = 2; + r1 = &gRfuLinkStatus->remainLLFrameSizeChild[r4]; + } + r6 = 1 << r4; + if (r2->state == 0) + { + if (*r1 < r5) + { + r2->state = 73; + r2->errorCode = 0x702; + gRfuStatic->recvErrorFlag |= r6; + } + else + { + r2->errorCode = 0; + *r1 -= r5; + r2->nowP[0] = &r2->dataType; + r2->remainSize = 7; + r2->ack = 1; + r2->payloadSize = 0; + r2->bmSlot = r6; + r2->state = 0x8041; + gRfuLinkStatus->recvSlotNIFlag |= r6; + } + } +} + +static void rfu_STC_NI_initSlot_asRecvDataEntity(u8 r5, struct NIComm *r4) +{ + u8 r1, r3; + + if (r4->dataType == 1) + { + r4->nowP[0] = (void *)&gRfuLinkStatus->partner[r5].serialNum; + } + else + { + if (r4->dataSize > gRfuSlotStatusNI[r5]->recvBufferSize) + { + r1 = 1 << r5; + gRfuStatic->recvErrorFlag |= r1; + gRfuLinkStatus->recvSlotNIFlag &= ~r1; + r4->errorCode = 0x701; + r4->state = 71; + rfu_STC_releaseFrame(r5, 1, r4); + return; + } + r4->nowP[0] = gRfuSlotStatusNI[r5]->recvBuffer; + } + for (r3 = 0; r3 < 4; ++r3) + { + r4->n[r3] = 0; + r4->nowP[r3] = &r4->nowP[0][r4->payloadSize * r3]; + } + r4->remainSize = r4->dataSize; + r4->state = 0x8042; +} + +static void rfu_NI_checkCommFailCounter(void) +{ + u16 r12; + u32 r7; + u8 r2, r3; + + if (gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag) + { + r12 = REG_IME; + REG_IME = 0; + r7 = gRfuStatic->recvRenewalFlag >> 4; + for (r3 = 0; r3 < NELEMS(gRfuSlotStatusNI); ++r3) + { + r2 = 1 << r3; + if (gRfuLinkStatus->sendSlotNIFlag & r2 + && !(gRfuStatic->recvRenewalFlag & r2)) + ++gRfuSlotStatusNI[r3]->sub.send.failCounter; + if (gRfuLinkStatus->recvSlotNIFlag & r2 + && !(r7 & r2)) + ++gRfuSlotStatusNI[r3]->sub.recv.failCounter; + } + gRfuStatic->recvRenewalFlag = 0; + REG_IME = r12; + } +} + +void rfu_REQ_noise(void) +{ + STWI_set_Callback_M(rfu_STC_REQ_callback); + STWI_send_TestModeREQ(1, 0); +} + +static s32 sub_81E349C(u8 r5) +{ + u16 r8; + vu16 *r4; + s32 r6; + + if (REG_IME == 0) + return -1; + r8 = REG_IE; + gRfuState->state = 10; + STWI_set_CallbackUnk(sub_81E36B8); + sub_81E3550(); + r4 = ®_TMCNT_L(gRfuState->timerSelect); + r5 *= 8; + while (--r5 != 0xFF) + { + r6 = sub_81E35C4(); + if (r6 != 0) + break; + r4[1] = 0; + r4[0] = 0; + r4[1] = TIMER_1024CLK | TIMER_ENABLE; + while (r4[0] < 32) + ; + r4[1] = 0; + r4[0] = 0; + } + REG_IME = 0; + REG_IE = r8; + REG_IME = 1; + gRfuState->state = 0; + STWI_set_CallbackUnk(NULL); + return r6; +} + +static void sub_81E3550(void) +{ + REG_IME = 0; + REG_IE &= ~((8 << gRfuState->timerSelect) | INTR_FLAG_SERIAL); + REG_IME = 1; + REG_RCNT = 0; + REG_SIOCNT = SIO_32BIT_MODE; + REG_SIOCNT |= SIO_INTR_ENABLE | SIO_ENABLE; + CpuFill32(0, &gUnknown_3007470, sizeof(struct Unk_3007470)); + REG_IF = INTR_FLAG_SERIAL; +} + +static s32 sub_81E35C4(void) +{ + u8 r12; + + switch (r12 = gUnknown_3007470.unk1) + { + case 0: + gUnknown_3007470.unk0 = 1; + REG_SIOCNT |= SIO_38400_BPS; + REG_IME = r12; + REG_IE |= INTR_FLAG_SERIAL; + REG_IME = 1; + gUnknown_3007470.unk1 = 1; + *(vu8 *)®_SIOCNT |= SIO_ENABLE; + break; + case 1: + if (gUnknown_3007470.unkA == 0) + { + if (gUnknown_3007470.unk0 == 1) + { + if (gUnknown_3007470.unk2 == 0) + { + REG_IME = gUnknown_3007470.unk2; + REG_SIOCNT |= SIO_ENABLE; + REG_IME = r12; + } + } + else if (gUnknown_3007470.unk4 != 0x8001 && !gUnknown_3007470.unk2) + { + REG_IME = gUnknown_3007470.unk2; + REG_IE &= ~INTR_FLAG_SERIAL; + REG_IME = r12; + REG_SIOCNT = gUnknown_3007470.unk2; + REG_SIOCNT = SIO_32BIT_MODE; + REG_IF = INTR_FLAG_SERIAL; + REG_SIOCNT |= SIO_INTR_ENABLE | SIO_ENABLE; + REG_IME = gUnknown_3007470.unk2; + REG_IE |= INTR_FLAG_SERIAL; + REG_IME = r12; + } + break; + } + else + { + gUnknown_3007470.unk1 = 2; + // fallthrough + } + default: + return gUnknown_3007470.unkA; + } + return 0; +} + +static void sub_81E36B8(void) +{ + u32 r5; + u16 r0; +#ifndef NONMATCHING + register u32 r1 asm("a2"); + register u16 r0_ asm("a1"); +#else + u32 r1; + u16 r0_; +#endif + + r5 = REG_SIODATA32; + if (gUnknown_3007470.unk0 != 1) + REG_SIOCNT |= SIO_ENABLE; + r1 = 16 * gUnknown_3007470.unk0; // to handle side effect of inline asm + r1 = (r5 << r1) >> 16; + r5 = (r5 << 16 * (1 - gUnknown_3007470.unk0)) >> 16; + if (gUnknown_3007470.unkA == 0) + { + if (r1 == gUnknown_3007470.unk6) + { + if (gUnknown_3007470.unk2 > 3) + { + gUnknown_3007470.unkA = r5; + } + else if (r1 == (u16)~gUnknown_3007470.unk4) + { + r0_ = ~gUnknown_3007470.unk6; + if (r5 == r0_) + ++gUnknown_3007470.unk2; + } + } + else + { + gUnknown_3007470.unk2 = gUnknown_3007470.unkA; + } + } + if (gUnknown_3007470.unk2 < 4) + gUnknown_3007470.unk4 = *(gUnknown_3007470.unk2 + _Str_Sio32ID); + else + gUnknown_3007470.unk4 = 0x8001; + gUnknown_3007470.unk6 = ~r5; + REG_SIODATA32 = (gUnknown_3007470.unk4 << 16 * (1 - gUnknown_3007470.unk0)) + + (gUnknown_3007470.unk6 << 16 * gUnknown_3007470.unk0); + if (gUnknown_3007470.unk0 == 1 && (gUnknown_3007470.unk2 || r5 == 0x494E)) + { + for (r0 = 0; r0 < 600; ++r0) + ; + if (gUnknown_3007470.unkA == 0) + REG_SIOCNT |= SIO_ENABLE; + } +} diff --git a/src/librfu_stwi.c b/src/librfu_stwi.c index c8df0ccfa..c6c3441ec 100644 --- a/src/librfu_stwi.c +++ b/src/librfu_stwi.c @@ -128,9 +128,9 @@ void STWI_set_Callback_S(void (*callbackS)(u16)) gRfuState->callbackS = callbackS; } -void STWI_set_Callback_ID(u32 id) +void STWI_set_CallbackUnk(void (*func)(void)) { - gRfuState->callbackId = id; + gRfuState->unk_20 = func; } u16 STWI_poll_CommandEnd(void) -- cgit v1.2.3 From a7ec7175f1eadf79ab6cb4efbde1b9694535806f Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 7 Jan 2020 12:09:18 +0800 Subject: resolve a fake match --- include/librfu.h | 2 +- src/librfu_rfu.c | 13 +++++-------- src/librfu_stwi.c | 2 +- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/include/librfu.h b/include/librfu.h index 8bc1e636d..9440ffd7b 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -347,7 +347,7 @@ void STWI_set_Callback_M(void *callbackM); void STWI_set_Callback_S(void (*callbackS)(u16)); void STWI_init_timer(IntrFunc *interrupt, s32 timerSelect); void AgbRFU_SoftReset(void); -void STWI_set_CallbackUnk(void (*func)(void)); +void STWI_set_Callback_ID(void (*func)(void)); u16 STWI_read_status(u8 index); u16 STWI_poll_CommandEnd(void); void STWI_send_DataRxREQ(void); diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index 140aa353e..6a4fee158 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -1455,17 +1455,14 @@ s32 rfu_changeSendTarget(u8 r3, u8 r7, u8 r6) s32 rfu_NI_stopReceivingData(u8 who) { -#ifndef NONMATCHING // r4, r5 register swap - register struct NIComm *r5 asm("r5"); -#else struct NIComm *r5; -#endif u16 r4, r1; if (who > 3) return 0x400; r5 = &gRfuSlotStatusNI[who]->sub.recv; r4 = REG_IME; + ++r4; --r4; // fix r4, r5 register swap REG_IME = 0; if (gRfuSlotStatusNI[who]->sub.recv.state & 0x8000) { @@ -2227,7 +2224,7 @@ static s32 sub_81E349C(u8 r5) return -1; r8 = REG_IE; gRfuState->state = 10; - STWI_set_CallbackUnk(sub_81E36B8); + STWI_set_Callback_ID(sub_81E36B8); sub_81E3550(); r4 = ®_TMCNT_L(gRfuState->timerSelect); r5 *= 8; @@ -2248,7 +2245,7 @@ static s32 sub_81E349C(u8 r5) REG_IE = r8; REG_IME = 1; gRfuState->state = 0; - STWI_set_CallbackUnk(NULL); + STWI_set_Callback_ID(NULL); return r6; } @@ -2322,8 +2319,8 @@ static void sub_81E36B8(void) u32 r5; u16 r0; #ifndef NONMATCHING - register u32 r1 asm("a2"); - register u16 r0_ asm("a1"); + register u32 r1 asm("r1"); + register u16 r0_ asm("r0"); #else u32 r1; u16 r0_; diff --git a/src/librfu_stwi.c b/src/librfu_stwi.c index c6c3441ec..8e27c04d8 100644 --- a/src/librfu_stwi.c +++ b/src/librfu_stwi.c @@ -128,7 +128,7 @@ void STWI_set_Callback_S(void (*callbackS)(u16)) gRfuState->callbackS = callbackS; } -void STWI_set_CallbackUnk(void (*func)(void)) +void STWI_set_Callback_ID(void (*func)(void)) // name in SDK, but is actually setting a function pointer { gRfuState->unk_20 = func; } -- cgit v1.2.3 From f12c1edf3f626fd608b837c125514768f264dc2c Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Fri, 10 Jan 2020 02:13:35 +0800 Subject: update documentation & func types --- common_syms/librfu_rfu.txt | 1 - common_syms/librfu_s32id.txt | 1 + include/librfu.h | 649 +++++++++++++++++++++++++---------- ld_script.txt | 1 + src/librfu_rfu.c | 787 +++++++++++++++++-------------------------- src/librfu_s32id.c | 163 +++++++++ src/librfu_stwi.c | 67 ++-- sym_common.txt | 2 + 8 files changed, 985 insertions(+), 686 deletions(-) create mode 100644 common_syms/librfu_s32id.txt create mode 100644 src/librfu_s32id.c diff --git a/common_syms/librfu_rfu.txt b/common_syms/librfu_rfu.txt index 142895733..94600cdf8 100644 --- a/common_syms/librfu_rfu.txt +++ b/common_syms/librfu_rfu.txt @@ -4,4 +4,3 @@ gRfuSlotStatusNI gRfuLinkStatus gRfuStatic gRfuFixed -gUnknown_3007470 diff --git a/common_syms/librfu_s32id.txt b/common_syms/librfu_s32id.txt new file mode 100644 index 000000000..6c24cc4a4 --- /dev/null +++ b/common_syms/librfu_s32id.txt @@ -0,0 +1 @@ +gRfuS32Id diff --git a/include/librfu.h b/include/librfu.h index 9440ffd7b..1e128d209 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -1,83 +1,276 @@ #ifndef GUARD_LIBRFU_H #define GUARD_LIBRFU_H +#include "global.h" #include "main.h" /* TODOs: - * - decide file boundaries + * - split files * - documentation + * - decompile librfu_intr.s once arm support is back again + (for internal structs not documented in SDK) * - check if any field needs to be volatile * - check if field names make sense - * - decompile librfu_intr.s once arm support is back again */ -enum -{ - RFU_RESET = 0x10, - RFU_LINK_STATUS, - RFU_VERSION_STATUS, - RFU_SYSTEM_STATUS, - RFU_SLOT_STATUS, - RFU_CONFIG_STATUS, - RFU_GAME_CONFIG, - RFU_SYSTEM_CONFIG, - RFU_UNK18, - RFU_SC_START, - RFU_SC_POLLING, - RFU_SC_END, - RFU_SP_START, - RFU_SP_POLLING, - RFU_SP_END, - RFU_CP_START, - RFU_CP_POLLING, - RFU_CP_END, - RFU_UNK22, - RFU_UNK23, - RFU_DATA_TX, - RFU_DATA_TX_AND_CHANGE, - RFU_DATA_RX, - RFU_MS_CHANGE, - RFU_DATA_READY_AND_CHANGE, - RFU_DISCONNECTED_AND_CHANGE, - RFU_UNK2A, - RFU_UNK2B, - RFU_UNK2C, - RFU_UNK2D, - RFU_UNK2E, - RFU_UNK2F, - RFU_DISCONNECT, - RFU_TEST_MODE, - RFU_CPR_START, - RFU_CPR_POLLING, - RFU_CPR_END, - RFU_UNK35, - RFU_UNK36, - RFU_RESUME_RETRANSMIT_AND_CHANGE, - RFU_UNK38, - RFU_UNK39, - RFU_UNK3A, - RFU_UNK3B, - RFU_UNK3C, - RFU_STOP_MODE, //3D -}; +// -------------------------------------------------------------------------- +// +// Restrictions When Using RFU +// +// -------------------------------------------------------------------------- +/* + The following restrictions apply when using RFU. -struct RfuPacket8 -{ - u8 data[0x74]; -}; + + (a) The timer for Sound DMA uses only 0 + (b) The prescaler for the timer count for the Sound DMA uses 59.5 ns. + (c) The sound sampling rate is Max36.314KHz. -struct RfuPacket32 -{ - u32 command; - u32 data[0x1C]; -}; + + These types of DMA can be operated on a maximum CPU cycle of 42 cycles. + Calculate the number of the transferable DMA count based on this 42 cycles and the access cycles of the destination and source. + For example, if both the CPU internal RAM --> VRAM have a one cycle access, then a 21 count DMA can occur. -union RfuPacket -{ - struct RfuPacket32 rfuPacket32; - struct RfuPacket8 rfuPacket8; -}; + + If RFU is used outside of these restrictions, problems, such as the loss of data caused by the failure of the AGB, as a clock slave, + to notify that data has been received from the RFU, will occur. + When this problem occurs, the REQ callback will send a REQ_commandID=ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ notification. + (When using Link Manager, the LMAN call back will send a LMAN_msg=LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA notification.) + +*/ + +// REQ-COMMAND (STWI) ID CODE LIST + +// REQ Command ID returned by the REQ callback +#define ID_RESET_REQ 0x0010 +#define ID_LINK_STATUS_REQ 0x0011 +#define ID_VERSION_STATUS_REQ 0x0012 // not defined in SDK header +#define ID_SYSTEM_STATUS_REQ 0x0013 +#define ID_SLOT_STATUS_REQ 0x0014 // not defined in SDK header +#define ID_CONFIG_STATUS_REQ 0x0015 // not defined in SDK header +#define ID_GAME_CONFIG_REQ 0x0016 +#define ID_SYSTEM_CONFIG_REQ 0x0017 +#define ID_SC_START_REQ 0x0019 +#define ID_SC_POLL_REQ 0x001a +#define ID_SC_END_REQ 0x001b +#define ID_SP_START_REQ 0x001c +#define ID_SP_POLL_REQ 0x001d +#define ID_SP_END_REQ 0x001e +#define ID_CP_START_REQ 0x001f +#define ID_CP_POLL_REQ 0x0020 +#define ID_CP_END_REQ 0x0021 +#define ID_DATA_TX_REQ 0x0024 +#define ID_DATA_TX_AND_CHANGE_REQ 0x0025 +#define ID_DATA_RX_REQ 0x0026 +#define ID_MS_CHANGE_REQ 0x0027 // When returned by the REQ callback, this ID indicates that execution of rfu_REQ_changeMasterSlave has finished. + // This ID is returned by both the REQ callback and the MSC callback. + // When returned by the MSC callback, this is notification that after the AGB has been made into the clock slave, the MC_Timer expired and the RFU returned the AGB to be the clock master. +#define ID_DISCONNECT_REQ 0x0030 +#define ID_TEST_MODE_REQ 0x0031 // not defined in SDK header +#define ID_CPR_START_REQ 0x0032 +#define ID_CPR_POLL_REQ 0x0033 +#define ID_CPR_END_REQ 0x0034 +#define ID_UNK35_REQ 0x0035 // not defined in SDK header +#define ID_RESUME_RETRANSMIT_AND_CHANGE_REQ 0x0037 +#define ID_STOP_MODE_REQ 0x003d +#define ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ 0x00ff // When the AGB is the clock slave, the RFU generates an informational notice, and an automatically started DMA, such as HDMA, is generated at the instant the AGB is being returned as the clock master. This ID is notified by a REQ callback when the exchange of this information (REQ command) fails. + +// REQ Command ID returned by the MSC callback +#define ID_DISCONNECTED_AND_CHANGE_REQ 0x0029 +#define ID_DATA_READY_AND_CHANGE_REQ 0x0028 +#define ID_DRAC_REQ_WITH_ACK_FLAG 0x0128 + +// -------------------------------------------------------------------------- +// +// Data Definitions +// +// -------------------------------------------------------------------------- + +#define RFU_ID 0x00008001 // ID number of AGB-RFU device: ID returned by execution of rfu_REQBN_softReset_and_checkID. + +#define RFU_MBOOT_DOWNLOADER_SERIAL_NO 0x0000 // The game serial number of the multi-boot downloader (programs that boot without a Game Pak) + +#define RFU_API_BUFF_SIZE_RAM 0x0e8c // Necessary size for buffer specified by rfu_initializeAPI (fast communication version that operates the library SIO interrupt routines in RAM) +#define RFU_API_BUFF_SIZE_ROM 0x052c // Necessary size for buffer specified by rfu_initializeAPI (fast communication version that operates the library SIO interrupt routines in ROM) + +#define RFU_CHILD_MAX 4 // Maximum number of slaves that can be connected to one parent device + +#define RFU_GAME_NAME_LENGTH 13 // Possible length of game name set by rfu_REQB_configGameData +#define RFU_USER_NAME_LENGTH 8 // Possible length of user name set by rfu_REQB_configGameData + +#define RFU_H_DMA_MAX_CPU_CYCLE 42 // Maximum number of CPU cycles for H-DMA or DMA that starts with V-Blank that can operate when using RFU + +// Value to determine the level of the icon that displays the link strength of the wireless status (value of rfuLinkStatus->strength[0-3]) +#define RFU_LINK_ICON_LEVEL4_MAX 255 // 90% -100% (If the value is betwen 229 and 255, the icon level is 4) +#define RFU_LINK_ICON_LEVEL4_MIN 229 +#define RFU_LINK_ICON_LEVEL3_MAX 228 // 50% - 89% (If the value is betwen 127 and 228, the icon level is 3) +#define RFU_LINK_ICON_LEVEL3_MIN 127 +#define RFU_LINK_ICON_LEVEL2_MAX 126 // 10% - 49% (If the value is betwen 25 and 126, the icon level is 2) +#define RFU_LINK_ICON_LEVEL2_MIN 25 +#define RFU_LINK_ICON_LEVEL1_MAX 24 // 0% - 9% (If the value is betwen 0 and 24, the icon level is 1) +#define RFU_LINK_ICON_LEVEL1_MIN 0 + + +// ******************************************************* +// Definition Data for Arguments Used in Library Functions +// ******************************************************* +// Specified by u16 mbootFlag in rfu_REQ_configGameData +#define RFU_MBOOT_FLAG 0x01 // Enabling this flag, allows connection to a multi-boot program. + +// AvailSlot (number of slots available for connection) used in u16 availSlotFlag in rfu_REQ_configSystem +#define AVAIL_SLOT4 0x0000 +#define AVAIL_SLOT3 0x0001 +#define AVAIL_SLOT2 0x0002 +#define AVAIL_SLOT1 0x0003 + +// u8 connTypeFlag specified by rfu_setRecvBuffer +#define TYPE_UNI 0x10 // UNI-type +#define TYPE_NI 0x20 // NI-type + +// u8 connTypeFlag specified by rfu_clearSlot +#define TYPE_UNI_SEND 0x01 // UNI-type send +#define TYPE_UNI_RECV 0x02 // UNI-type receive +#define TYPE_NI_SEND 0x04 // NI-type send +#define TYPE_NI_RECV 0x08 // NI-type receive + +// ******************************************************* +// Definition Data Returned by Return Values for Library Functions +// ******************************************************* + +// Value of u8 *status for rfu_REQ_pollConnectParent (Connection Trial Status) +#define CP_STATUS_DONE 0x00 // Connection successful +#define CP_STATUS_IN_PROCESS 0x01 // Connecting +#define CP_STATUS_SLOT_CLOSED 0x02 // Parent device is not in connection mode with child device +#define CP_STATUS_DISCONNECTED 0x03 // Disconnected by parent device while connecting +#define CP_STATUS_UNKNOWN 0xff // Cannot read status due to REQ-API execution error + +// Value of u8 *status argument for rfu_REQ_pollRecoveryConnect (Link Restore Status) +#define RC_STATUS_DONE 0x00 // Connection restore successful +#define RC_STATUS_FAILED 0x01 // Connection restore failure (meaningless to try anymore) +#define RC_STATUS_SEARCHING_PARENT 0x02 // Searching for parent device +#define RC_STATUS_UNKNOWN 0xff // Cannot read status due to REQ-API execution error + +// Value of u8 *linkLossReason argument for rfu_REQBN_watchLink (Reason for Link Loss) +#define REASON_DISCONNECTED 0x00 // State of complete disconnection with rfuLL_disconnect and no possibility of restoring the link (can detect only child device) +#define REASON_LINK_LOSS 0x01 // State of link loss that allows for the possibility for the link to be restored + + +// ******************************************************* +// Definition Data Returned with Return Values for Library Functions +// ******************************************************* + +// Value returned by rfu_getMasterSlave +#define AGB_CLK_SLAVE 0 // AGB clock slave +#define AGB_CLK_MASTER 1 // AGB clock master + +// ******************************************************* +// Error Code Group for Library Functions +// ******************************************************* + +// Error codes returned by u16 REQ_result with a REQ callback when a REQ-API function is executed +#define ERR_REQ_CMD 0x0000 +#define ERR_REQ_CMD_CLOCK_DRIFT (ERR_REQ_CMD | 0x0001) // Clock drift occurs when a REQ command is sent +#define ERR_REQ_CMD_SENDING (ERR_REQ_CMD | 0x0002) // The next command cannot be issued because a REQ command is being sent +#define ERR_REQ_CMD_ACK_REJECTION (ERR_REQ_CMD | 0x0003) // The REQ command was refused when issued +#define ERR_REQ_CMD_CLOCK_SLAVE (ERR_REQ_CMD | 0x0004) // Issuing the REQ command was attempted but failed because the AGB is the clock slave +#define ERR_REQ_CMD_IME_DISABLE (ERR_REQ_CMD | 0x0006) // Issuing the REQ command was attempted but failed because the IME register is 0 + +#define ERR_PID_NOT_FOUND 0x0100 // The specified PID does not exist in the gRfuLinkStatus->partner[0-3].id list + +// Error code returned by the return value of rfu_initializeAPI +#define ERR_RFU_API_BUFF_SIZE 0x0001 +#define ERR_RFU_API_BUFF_ADR 0x0002 + +// Error codes returned by return values for rfu_REQBN_softReset_and_checkID +#define ERR_ID_CHECK_IME_DISABLE 0xffffffff // ID check could not be executed because REG_IME=0 when executing rfu_REQBN_softReset_and_checkID + +// Error codes returned by rfu_getConnectParentStatus and rfu_CHILD_getConnectRecoveryStatus +#define ERR_REQ_CMD_ID (ERR_REQ_CMD | 0x0010) // A required REQ command was not executed within this function execution + +// Error codes returned by rfu_NI_setSendData, rfu_UNI_setSendData, and rfu_NI_CHILD_setSendGameName +#define ERR_MODE 0x0300 +#define ERR_MODE_NOT_CONNECTED (ERR_MODE | 0x0001) // RFU is not in connection mode (parent or child) + +#define ERR_SLOT 0x0400 +#define ERR_SLOT_NO (ERR_SLOT | 0x0000) // The specified slot number is not right +#define ERR_SLOT_NOT_CONNECTED (ERR_SLOT | 0x0001) // The specified slot is not connected +#define ERR_SLOT_BUSY (ERR_SLOT | 0x0002) // The specified slot is already communicating +#define ERR_SLOT_NOT_SENDING (ERR_SLOT | 0x0003) // The specified slot is not currently sending (Note: This is returned by rfu_UNI_re_setSendData) +#define ERR_SLOT_TARGET (ERR_SLOT | 0x0004) // The specified target slot is not right + +#define ERR_SUBFRAME_SIZE 0x0500 // The specified subframe size is either larger than the remaining communication frame size or smaller than the link layer subframe header size + +// Error code returned by rfu_clearSlot, rfu_setRecvBuffer, and rfu_changeSendTarget +#define ERR_COMM_TYPE 0x0600 // The specified communication format is not right + +// Error code returned by rfu_REQ_recvData (when receiving NI-type or UNI-type data) +#define ERR_DATA_RECV 0x0700 // Error notification is issued in the following format. + // "ERR_DATA_RECV | (slot number issuing error with 0x0010<recv.errorCode. + +// Error code during NI-type communication (code entered into gRfuSlotStatusNI[x]->recv.errorCode) +#define ERR_RECV_BUFF_OVER (ERR_DATA_RECV | 0x0001) // The receive data size is larger than the receive buffer (Note: This error is used for both NI and UNI) +#define ERR_RECV_REPLY_SUBFRAME_SIZE (ERR_DATA_RECV | 0x0002) // All frames are already in use by other communications, and a subframe for reception response could not be secured + +// Error code during UNI-type communication (code entered into gRfuSlotStatusUNI[x]->recv.errorCode) +#define ERR_RECV_DATA_OVERWRITED (ERR_DATA_RECV | 0x0008) // Received new data when gRfuSlotStatusUNI[x]->recv.newDataFlag=1 + + +// ******************************************************* +// Definition Data Used by Global Variables in the Library +// ******************************************************* + +// gRfuLinkStatus------------------------------------------- +// Connection status (refer to gRfuLinkStatus->parentChild) +#define MODE_NEUTRAL 0xff // Initialization +#define MODE_CHILD 0x00 // Child +#define MODE_PARENT 0x01 // Parent + + +// gRfuSlotStatusNI,UNI----------------------------------- +// Definition data for NI-(Numbered Information) and UNI-(Un-Numbered Information) type communication + +// Definition data common to NI- and UNI-type communication +#define LLF_P_SIZE 87 // Maximum link layer communication frame size for the Parent (Maximum number of bytes per transmission) +#define LLF_C_SIZE 16 // " " for the Child +#define LLSF_P_HEADER_SIZE 3 // Header size used by one link layer subframe (NI or UNI frame) for the Parent +#define LLSF_C_HEADER_SIZE 2 // " " for the Child + +// Link Layer Communication Code +#define LCOM_NULL 0x0000 +#define LCOM_NI_START 0x0001 +#define LCOM_NI 0x0002 +#define LCOM_NI_END 0x0003 +#define LCOM_UNI 0x0004 + +// Flag for Slot Status Data +#define SLOT_BUSY_FLAG 0x8000 // Slot in use +#define SLOT_SEND_FLAG 0x0020 // Send +#define SLOT_RECV_FLAG 0x0040 // Receive + +// NI- and UNI-type shared slot stand-by data (same state as gRfuSlotStatusNI[x]->send or ->recv.state or gRfuSlotStatusUNI) +#define SLOT_STATE_READY 0x0000 // Slot initialization + +// Status data for NI-type communication (gRfuSlotStatusNI[x]->send or ->recv.state) +#define SLOT_STATE_SEND_START (SLOT_BUSY_FLAG | SLOT_SEND_FLAG | LCOM_NI_START) // Start transmission +#define SLOT_STATE_SENDING (SLOT_BUSY_FLAG | SLOT_SEND_FLAG | LCOM_NI) // Transmitting +#define SLOT_STATE_SEND_LAST (SLOT_BUSY_FLAG | SLOT_SEND_FLAG | LCOM_NI_END) // Verify transmission end +#define SLOT_STATE_SEND_NULL (SLOT_BUSY_FLAG | SLOT_SEND_FLAG | LCOM_NULL) // Send NULL subframe to notify end of transmission +#define SLOT_STATE_SEND_SUCCESS ( SLOT_SEND_FLAG | 0x006) // Transmission successful +#define SLOT_STATE_SEND_FAILED ( SLOT_SEND_FLAG | 0x007) // Transmission failed + // Distinction of slot where transmission succeeded/failed compares gRfuSlotStatusNI[x]->send.bmSlot and same bmSlot_org +#define SLOT_STATE_RECV_START (SLOT_BUSY_FLAG | SLOT_RECV_FLAG | LCOM_NI_START) // Start reception +#define SLOT_STATE_RECEIVING (SLOT_BUSY_FLAG | SLOT_RECV_FLAG | LCOM_NI) // Receiving +#define SLOT_STATE_RECV_LAST (SLOT_BUSY_FLAG | SLOT_RECV_FLAG | LCOM_NI_END) // Verify reception end +#define SLOT_STATE_RECV_SUCCESS ( SLOT_RECV_FLAG | 0x006) // Reception successful +#define SLOT_STATE_RECV_FAILED ( SLOT_RECV_FLAG | 0x007) // Reception failed +#define SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN (SLOT_RECV_FLAG | 0x008) // The data was received successful, but because the end of the communication was incomplete, whether the transmission side status is successful or failed is unknown +#define SLOT_STATE_RECV_IGNORE ( SLOT_RECV_FLAG | 0x009) // Ignore reception (refer to gRfuSlotStatusNI[x]->recv.errorCode for reason for ignoring) + +// Status data for UNI-type communication (refer to gRfuSlotStatusUNI[x]->send.state) +#define SLOT_STATE_SEND_UNI (SLOT_BUSY_FLAG | SLOT_SEND_FLAG | LCOM_UNI) // Transmitting +// TODO: move the 2 structs to some other header as they're declared by GF struct UnkLinkRfuStruct_02022B14Substruct { u16 unk_00_0:4; @@ -105,7 +298,25 @@ struct __attribute__((packed, aligned(2))) UnkLinkRfuStruct_02022B14 u8 unk_0c; }; -struct RfuStruct +// the following structs are not documented in SDK +struct RfuPacket8 +{ + u8 data[0x74]; +}; + +struct RfuPacket32 +{ + u32 command; + u32 data[0x1C]; +}; + +union RfuPacket +{ + struct RfuPacket32 rfuPacket32; + struct RfuPacket8 rfuPacket8; +}; + +struct STWIStatus { vs32 state; u8 reqLength; @@ -132,69 +343,116 @@ struct RfuStruct vu8 unk_2c; }; +// This struct is used as u8 array in SDK. struct RfuIntrStruct { union RfuPacket rxPacketAlloc; union RfuPacket txPacketAlloc; u8 block1[0x960]; // size of librfu_intr.s binary - struct RfuStruct block2; + struct STWIStatus block2; }; +// Data Structure for Transmitting UNI-Type Data +struct UNISend +{ + u16 state; // Slot communication state (SLOT_STATE_READY, SLOT_STATE_SEND_UNI) + u8 dataReadyFlag; // Flag indicating transmission data is prepared (0: data sent; 1: transmission data ready) + // Set with rfu_UNI_re_setSendData or rfu_UNI_readySendData, cleared when data is sent with rfu_REQ_sendData. + u8 bmSlot; // Expresses transmission destination slot as bits + u16 payloadSize; // Payload size of 1 transmission. "size" specified by rfu_UNI_setSendData or rfu_UNI_re_setSendData is used. + const void *src; // Beginning address of transmission data +}; + +// Data Structure for Receiving UNI Data +struct UNIRecv +{ + u16 state; // Slot communication state (SLOT_STATE_READY, SLOT_STATE_RECEIVING, SLOT_STATE_RECV_IGNORE) + u16 errorCode; // Error code during reception + u16 dataSize; // Size of receive data + u8 newDataFlag; // Flag indicating whether receive data has newly arrived (0: no newly arrived data; 1: newly arrived data) + // The flag is cleared with rfu_UNI_clearRecvNewDataFlag; it is set when data is received with rfu_REQ_recvData. + u8 dataBlockFlag; // Flag for unreferenced receive data overwrite block (default is 0 Note: not used) +}; + +// Slot Status Data Structure for UNI-Type Communication struct RfuSlotStatusUNI { - struct - { - struct UNISend - { - u16 state; - u8 dataReadyFlag; - u8 bmSlot; - u16 payloadSize; - const void *src; - } send; - struct UNIRecv - { - u16 state; - u16 errorCode; - u16 dataSize; - u8 newDataFlag; - u8 dataBlockFlag; - } recv; - } sub; - void *recvBuffer; - u32 recvBufferSize; + struct UNISend send; // Transmission Status + struct UNIRecv recv; // Reception Status + void *recvBuffer; // Reception Buffer Address + u32 recvBufferSize; // Reception Buffer Size }; +#define WINDOW_COUNT 4 + struct NIComm { - u16 state; - u16 failCounter; - const u8 *nowP[4]; - s32 remainSize; - u16 errorCode; - u8 bmSlot; - u8 recvAckFlag[4]; + u16 state; // Communication state of slot + u16 failCounter; // Count of failed transmissions/receptions (Count is increased when transmission/reception of data does not succeed within 1PF=16.7 ms) + const u8 *now_p[WINDOW_COUNT]; // Address of current send/receive (The data is divided into WINDOW_COUNT blocks and sent in payloadSize units.) + // remainSize is u32 in SDK. This is a hack to match ASM + s32 remainSize; // Size of remaining communication data + u16 errorCode; // Error code + u8 bmSlot; // Expresses the current communication slot in bits + // (When sending from the Master, because multiple slaves can be specified with bmSlot, communications are terminated based on the failCounter for each child device) + // Parameters used inside the Library + u8 recvAckFlag[WINDOW_COUNT]; u8 ack; u8 phase; - u8 n[4]; - const void *src; - u8 bmSlotOrg; - u8 dataType; - u16 payloadSize; - u32 dataSize; + u8 n[WINDOW_COUNT]; + // Parameters indicating the current communication content + const void *src; // Start address transmission data (valid only for transmitting device) + u8 bmSlotOrg; // Expresses the communication source slot at the beginning of the transmission in bits (valid only for transmitting device) + u8 dataType; // Transmission/reception data type (0: User data; 1: Game identification information) + u16 payloadSize; // Payload size for one transmission + u32 dataSize; // Size of transmission/reception data + // Calculated by subtracting link layer header size from subFrameSize specified by the rfu_NI_setSendData function }; struct RfuSlotStatusNI { - struct - { - struct NIComm send; - struct NIComm recv; - } sub; - void *recvBuffer; - u32 recvBufferSize; + struct NIComm send; // Transmission Status + struct NIComm recv; // Reception Status + void *recvBuffer; // Reception Buffer Address + u32 recvBufferSize; // Reception Buffer Size +}; + +// Game Identification Information Data Structure +struct RfuTgtData +{ + u16 id; // ID of parent candidate ID of connection partner + u8 slot; // Slot number where parent candidate can enter Connection slot number + u8 mbootFlag; // Flag to indicate whether or not the parent candidate Flag to indicate whether or not the connection partner + // is multiboot program for download is multiboot program for download + u16 serialNo; // Game serial number of parent candidate Game serial number of connection partner + u8 gname[RFU_GAME_NAME_LENGTH + 2]; // Game name of parent candidate Game name of connection partner + u8 uname[RFU_USER_NAME_LENGTH + 1]; // User name for parent candidate User name for connection partner +}; + +struct RfuLinkStatus +{ + u8 parentChild; // Connection status (0x01:MODE_PARENT 0x00:MODE_CHILD 0xff:MODE_NEUTRAL) + u8 connCount; // Number of connections + u8 connSlotFlag; // Flag to indicate in bits the connection slot (0x01<linkStatus; - gRfuStatic = &unk0->static_; - gRfuFixed = &unk0->fixed; - gRfuSlotStatusNI[0] = &unk0->NI[0]; - gRfuSlotStatusUNI[0] = &unk0->UNI[0]; - for (i = 1; i < NELEMS(gRfuSlotStatusNI); ++i) + gRfuLinkStatus = &APIBuffer->linkStatus; + gRfuStatic = &APIBuffer->static_; + gRfuFixed = &APIBuffer->fixed; + gRfuSlotStatusNI[0] = &APIBuffer->NI[0]; + gRfuSlotStatusUNI[0] = &APIBuffer->UNI[0]; + for (i = 1; i < RFU_CHILD_MAX; ++i) { gRfuSlotStatusNI[i] = &gRfuSlotStatusNI[i - 1][1]; gRfuSlotStatusUNI[i] = &gRfuSlotStatusUNI[i - 1][1]; } // TODO: Is it possible to fix the following 2 statements? // It's equivalent to: - // gRfuFixed->STWIBuffer = &unk0->intr; - // STWI_init_all(&unk0->intr, interrupt, copyInterruptToRam); + // gRfuFixed->STWIBuffer = &APIBuffer->intr; + // STWI_init_all(&APIBuffer->intr, sioIntrTable_p, copyInterruptToRam); gRfuFixed->STWIBuffer = (struct RfuIntrStruct *)&gRfuSlotStatusUNI[3][1]; - STWI_init_all((struct RfuIntrStruct *)&gRfuSlotStatusUNI[3][1], interrupt, copyInterruptToRam); + STWI_init_all((struct RfuIntrStruct *)&gRfuSlotStatusUNI[3][1], sioIntrTable_p, copyInterruptToRam); rfu_STC_clearAPIVariables(); - for (i = 0; i < NELEMS(gRfuSlotStatusNI); ++i) + for (i = 0; i < RFU_CHILD_MAX; ++i) { gRfuSlotStatusNI[i]->recvBuffer = 0; gRfuSlotStatusNI[i]->recvBufferSize = 0; @@ -157,7 +150,7 @@ static void rfu_STC_clearAPIVariables(void) CpuFill16(0, gRfuLinkStatus, sizeof(struct RfuLinkStatus)); gRfuLinkStatus->watchInterval = 4; gRfuStatic->nowWatchInterval = 0; - gRfuLinkStatus->connMode = 0xFF; + gRfuLinkStatus->parentChild = 0xFF; rfu_clearAllSlot(); gRfuStatic->SCStartFlag = 0; for (i = 0; i < NELEMS(gRfuStatic->cidBak); ++i) @@ -176,7 +169,7 @@ u16 rfu_UNI_PARENT_getDRAC_ACK(u8 *ackFlag) struct RfuIntrStruct *buf; *ackFlag = 0; - if (gRfuLinkStatus->connMode != 1) + if (gRfuLinkStatus->parentChild != 1) return 0x300; buf = rfu_getSTWIRecvBuffer(); switch (buf->rxPacketAlloc.rfuPacket8.data[0]) @@ -193,9 +186,9 @@ u16 rfu_UNI_PARENT_getDRAC_ACK(u8 *ackFlag) } } -void rfu_setTimerInterrupt(u8 which, IntrFunc *intr) +void rfu_setTimerInterrupt(u8 timerNo, IntrFunc *timerIntrTable_p) { - STWI_init_timer(intr, which); + STWI_init_timer(timerIntrTable_p, timerNo); } struct RfuIntrStruct *rfu_getSTWIRecvBuffer(void) @@ -203,12 +196,12 @@ struct RfuIntrStruct *rfu_getSTWIRecvBuffer(void) return gRfuFixed->STWIBuffer; } -void rfu_setMSCCallback(void (*callback)(u16)) +void rfu_setMSCCallback(void (*callback)(u16 reqCommandId)) { STWI_set_Callback_S(callback); } -void rfu_setREQCallback(void (*callback)(u16, u16)) +void rfu_setREQCallback(void (*callback)(u16 reqCommandId, u16 reqResult)) { gRfuFixed->reqCallback = callback; rfu_enableREQCallback(callback != NULL); @@ -243,7 +236,7 @@ static void rfu_CB_defaultCallback(u8 r0, u16 reqResult) for (i = 0; i < 4; ++i) if ((r5 >> i) & 1) rfu_STC_removeLinkData(i, 1); - gRfuLinkStatus->connMode = 0xFF; + gRfuLinkStatus->parentChild = 0xFF; } } @@ -259,18 +252,18 @@ void rfu_REQ_RFUStatus(void) STWI_send_SystemStatusREQ(); } -u32 rfu_getRFUStatus(u8 *status) +u16 rfu_getRFUStatus(u8 *rfuState) { if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0] != 0x93) return 0x10; if (STWI_poll_CommandEnd() == 0) - *status = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7]; + *rfuState = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7]; else - *status = 0xFF; + *rfuState = 0xFF; return 0; } -static s32 rfu_MBOOT_CHILD_inheritanceLinkStatus(void) +u16 rfu_MBOOT_CHILD_inheritanceLinkStatus(void) { const char *s1 = _Str_RFU_MBOOT; char *s2 = (char *)0x30000F0; @@ -305,7 +298,7 @@ void rfu_REQ_stopMode(void) { AgbRFU_SoftReset(); rfu_STC_clearAPIVariables(); - if (sub_81E349C(8) == 0x8001) + if (AgbRFU_checkID(8) == 0x8001) { timerReg = ®_TMCNT(gRfuState->timerSelect); *timerReg = 0; @@ -331,7 +324,7 @@ static void rfu_CB_stopMode(u8 a1, u16 reqResult) rfu_STC_REQ_callback(a1, reqResult); } -s32 rfu_REQBN_softReset_and_checkID(void) +u32 rfu_REQBN_softReset_and_checkID(void) { s32 r2; @@ -339,7 +332,7 @@ s32 rfu_REQBN_softReset_and_checkID(void) return -1; AgbRFU_SoftReset(); rfu_STC_clearAPIVariables(); - if ((r2 = sub_81E349C(30)) == 0) + if ((r2 = AgbRFU_checkID(30)) == 0) REG_SIOCNT = SIO_MULTI_MODE; return r2; } @@ -357,11 +350,11 @@ static void rfu_CB_reset(u8 a1, u16 reqResult) rfu_STC_REQ_callback(a1, reqResult); } -void rfu_REQ_configSystem(u16 r4, u8 r5, u8 r6) +void rfu_REQ_configSystem(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer) { STWI_set_Callback_M(rfu_STC_REQ_callback); - STWI_send_SystemConfigREQ((r4 & 3) | 0x3C, r5, r6); - if (r6 == 0) + STWI_send_SystemConfigREQ((availSlotFlag & 3) | 0x3C, maxMFrame, mcTimer); + if (mcTimer == 0) { gRfuStatic->unk_1a = 1; } @@ -370,37 +363,37 @@ void rfu_REQ_configSystem(u16 r4, u8 r5, u8 r6) u16 IMEBackup = REG_IME; REG_IME = 0; - gRfuStatic->unk_1a = Div(600, r6); + gRfuStatic->unk_1a = Div(600, mcTimer); REG_IME = IMEBackup; } } -void rfu_REQ_configGameData(u8 r6, u16 r2, const u8 *r4, const u8 *r7) +void rfu_REQ_configGameData(u8 mbootFlag, u16 serialNo, const u8 *gname, const u8 *uname) { u8 sp[16]; u8 i; u8 r3; - const u8 *r5 = r4; - const u8 *r1; + const u8 *gnameBackup = gname; + const u8 *unameBackup; - sp[0] = r2; - sp[1] = r2 >> 8; - if (r6 != 0) - sp[1] = (r2 >> 8) | 0x80; + sp[0] = serialNo; + sp[1] = serialNo >> 8; + if (mbootFlag != 0) + sp[1] = (serialNo >> 8) | 0x80; for (i = 2; i < 15; ++i) - sp[i] = *r4++; + sp[i] = *gname++; r3 = 0; - r1 = r7; + unameBackup = uname; for (i = 0; i < 8; ++i) { - r3 += *r1++; - r3 += *r5++; + r3 += *unameBackup++; + r3 += *gnameBackup++; } sp[15] = ~r3; - if (r6 != 0) + if (mbootFlag != 0) sp[14] = 0; STWI_set_Callback_M(rfu_CB_configGameData); - STWI_send_GameConfigREQ(sp, r7); + STWI_send_GameConfigREQ(sp, uname); } static void rfu_CB_configGameData(u8 ip, u16 r7) @@ -413,22 +406,22 @@ static void rfu_CB_configGameData(u8 ip, u16 r7) if (r7 == 0) { r1 = gRfuState->txPacket->rfuPacket8.data; - r2 = gRfuLinkStatus->my.serialNum = r1[4]; - gRfuLinkStatus->my.serialNum = (r1[5] << 8) | r2; + r2 = gRfuLinkStatus->my.serialNo = r1[4]; + gRfuLinkStatus->my.serialNo = (r1[5] << 8) | r2; r4 = &r1[6]; - if (gRfuLinkStatus->my.serialNum & 0x8000) + if (gRfuLinkStatus->my.serialNo & 0x8000) { - gRfuLinkStatus->my.serialNum = gRfuLinkStatus->my.serialNum ^ 0x8000; - gRfuLinkStatus->my.multibootFlag = 1; + gRfuLinkStatus->my.serialNo = gRfuLinkStatus->my.serialNo ^ 0x8000; + gRfuLinkStatus->my.mbootFlag = 1; } else { - gRfuLinkStatus->my.multibootFlag = 0; + gRfuLinkStatus->my.mbootFlag = 0; } - for (i = 0; i < NELEMS(gRfuLinkStatus->my.gname) - 2; ++i) + for (i = 0; i < RFU_GAME_NAME_LENGTH; ++i) gRfuLinkStatus->my.gname[i] = *r4++; ++r4; - for (i = 0; i < NELEMS(gRfuLinkStatus->my.uname) - 1; ++i) + for (i = 0; i < RFU_USER_NAME_LENGTH; ++i) gRfuLinkStatus->my.uname[i] = *r4++; } rfu_STC_REQ_callback(ip, r7); @@ -471,7 +464,7 @@ static void rfu_STC_clearLinkStatus(u8 r4) CpuFill16(0, gRfuLinkStatus->partner, sizeof(gRfuLinkStatus->partner)); gRfuLinkStatus->findParentCount = 0; } - for (i = 0; i < NELEMS(gRfuLinkStatus->strength); ++i) + for (i = 0; i < RFU_CHILD_MAX; ++i) gRfuLinkStatus->strength[i] = 0; gRfuLinkStatus->connCount = 0; gRfuLinkStatus->connSlotFlag = 0; @@ -507,7 +500,7 @@ static void rfu_CB_pollAndEndSearchChild(u8 r4, u16 reqResult) } else if (r4 == 27) { - if (gRfuLinkStatus->connMode == 255) + if (gRfuLinkStatus->parentChild == 255) gRfuLinkStatus->my.id = 0; gRfuStatic->SCStartFlag = 0; } @@ -553,7 +546,7 @@ static void rfu_STC_readChildList(void) ++gRfuLinkStatus->connCount; gRfuLinkStatus->partner[r2].id = *(u16 *)r4; gRfuLinkStatus->partner[r2].slot = r2; - gRfuLinkStatus->connMode = 1; + gRfuLinkStatus->parentChild = 1; gRfuStatic->flags &= 0x7F; gRfuStatic->cidBak[r2] = gRfuLinkStatus->partner[r2].id; } @@ -626,35 +619,35 @@ static void rfu_STC_readParentCandidateList(void) r2 += 2; r4_->slot = *r2; r2 += 2; - r4_->serialNum = *(u16 *)r2 & 0x7FFF; + r4_->serialNo = *(u16 *)r2 & 0x7FFF; if (*(u16 *)r2 & 0x8000) - r4_->multibootFlag = 1; + r4_->mbootFlag = 1; else - r4_->multibootFlag = 0; + r4_->mbootFlag = 0; r2 += 2; - for (r3 = 0; r3 < NELEMS(r4_->gname) - 2; ++r3) + for (r3 = 0; r3 < RFU_GAME_NAME_LENGTH; ++r3) r4_->gname[r3] = *r2++; ++r2; - for (r3 = 0; r3 < NELEMS(r4_->uname) - 1; ++r3) + for (r3 = 0; r3 < RFU_USER_NAME_LENGTH; ++r3) r4_->uname[r3] = *r2++; ++gRfuLinkStatus->findParentCount; } } } -void rfu_REQ_startConnectParent(u16 r4) +void rfu_REQ_startConnectParent(u16 pid) { u16 r3 = 0; u8 i; - for (i = 0; i < NELEMS(gRfuLinkStatus->partner) && gRfuLinkStatus->partner[i].id != r4; ++i) + for (i = 0; i < RFU_CHILD_MAX && gRfuLinkStatus->partner[i].id != pid; ++i) ; if (i == 4) r3 = 256; if (r3 == 0) { - gRfuStatic->tryPid = r4; + gRfuStatic->tryPid = pid; STWI_set_Callback_M(rfu_STC_REQ_callback); - STWI_send_CP_StartREQ(r4); + STWI_send_CP_StartREQ(pid); } else { @@ -689,9 +682,9 @@ static void rfu_CB_pollConnectParent(u8 sp24, u16 sp28) gRfuLinkStatus->linkLossSlotFlag &= ~r2; gRfuLinkStatus->my.id = id; ++gRfuLinkStatus->connCount; - gRfuLinkStatus->connMode = 0; + gRfuLinkStatus->parentChild = 0; gRfuStatic->flags |= 0x80; - for (r5 = 0; r5 < NELEMS(gRfuLinkStatus->partner); ++r5) + for (r5 = 0; r5 < RFU_CHILD_MAX; ++r5) { if (gRfuLinkStatus->partner[r5].id == gRfuStatic->tryPid) { @@ -720,7 +713,7 @@ static void rfu_CB_pollConnectParent(u8 sp24, u16 sp28) rfu_STC_REQ_callback(sp24, sp28); } -u16 rfu_getConnectParentStatus(u8 *status, u8 *r1) +u16 rfu_getConnectParentStatus(u8 *status, u8 *connectSlotNo) { u8 r0, *r2; @@ -730,7 +723,7 @@ u16 rfu_getConnectParentStatus(u8 *status, u8 *r1) if (r0 <= 1) { r2 += 6; - *r1 = r2[0]; + *connectSlotNo = r2[0]; *status = r2[1]; return 0; } @@ -751,7 +744,7 @@ u16 rfu_syncVBlank(void) s32 r5; rfu_NI_checkCommFailCounter(); - if (gRfuLinkStatus->connMode == 0xFF) + if (gRfuLinkStatus->parentChild == 0xFF) return 0; if (gRfuStatic->nowWatchInterval != 0) --gRfuStatic->nowWatchInterval; @@ -781,26 +774,26 @@ u16 rfu_syncVBlank(void) for (r4 = 0; r4 < 4; ++r4) if ((r5 >> r4) & 1) rfu_STC_removeLinkData(r4, 1); - gRfuLinkStatus->connMode = 0xFF; + gRfuLinkStatus->parentChild = 0xFF; return 1; } --gRfuStatic->watchdogTimer; return 0; } -s32 rfu_REQBN_watchLink(u16 r5, u8 *r8, u8 *sp00, u8 *sp04) +u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason, u8 *parentBmLinkRecoverySlot) { u8 sp08 = 0; u8 sp0C = 0; u8 i; s32 sp10, sp14; u8 *r2; - u8 r9, r6, r3, r1, r0; + u8 r9, r6, r3, connSlotFlag, r0; - *r8 = 0; - *sp00 = 0; - *sp04 = 0; - if (gRfuLinkStatus->connMode == 0xFF || gRfuState->msMode == 0) + *bmLinkLossSlot = 0; + *linkLossReason = 0; + *parentBmLinkRecoverySlot = 0; + if (gRfuLinkStatus->parentChild == 0xFF || gRfuState->msMode == 0) return 0; if (gRfuStatic->flags & 4) gRfuStatic->watchdogTimer = 360; @@ -809,27 +802,27 @@ s32 rfu_REQBN_watchLink(u16 r5, u8 *r8, u8 *sp00, u8 *sp04) gRfuStatic->nowWatchInterval = gRfuLinkStatus->watchInterval; sp08 = 1; } - if ((u8)r5 == 41) + if ((u8)reqCommandId == 41) { u8 *r1 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data; - *r8 = r1[4]; - *sp00 = r1[5]; - if (*sp00 == 1) - *r8 = gRfuLinkStatus->connSlotFlag; + *bmLinkLossSlot = r1[4]; + *linkLossReason = r1[5]; + if (*linkLossReason == 1) + *bmLinkLossSlot = gRfuLinkStatus->connSlotFlag; sp08 = 2; } else { - if (r5 == 310) + if (reqCommandId == 310) { r6 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[5]; r6 ^= gRfuLinkStatus->connSlotFlag; - *r8 = r6 & gRfuLinkStatus->connSlotFlag; - *sp00 = 1; - for (i = 0; i < NELEMS(gRfuLinkStatus->strength); ++i) + *bmLinkLossSlot = r6 & gRfuLinkStatus->connSlotFlag; + *linkLossReason = 1; + for (i = 0; i < RFU_CHILD_MAX; ++i) { - if ((*r8 >> i) & 1) + if ((*bmLinkLossSlot >> i) & 1) { gRfuLinkStatus->strength[i] = 0; rfu_STC_removeLinkData(i, 0); @@ -847,7 +840,7 @@ s32 rfu_REQBN_watchLink(u16 r5, u8 *r8, u8 *sp00, u8 *sp04) if (sp0C == 0) { r2 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4]; - for (i = 0; i < NELEMS(gRfuLinkStatus->strength); ++i) + for (i = 0; i < RFU_CHILD_MAX; ++i) gRfuLinkStatus->strength[i] = *r2++; r9 = 0; i = 0; @@ -866,13 +859,13 @@ s32 rfu_REQBN_watchLink(u16 r5, u8 *r8, u8 *sp00, u8 *sp04) { if (gRfuLinkStatus->strength[i] == 0) { - if (gRfuLinkStatus->connMode == 1) + if (gRfuLinkStatus->parentChild == 1) { ++gRfuStatic->linkEmergencyFlag[i]; if (gRfuStatic->linkEmergencyFlag[i] > 3) { - *r8 |= r6; - *sp00 = sp08; // why not directly use 1? + *bmLinkLossSlot |= r6; + *linkLossReason = sp08; // why not directly use 1? } } else @@ -882,8 +875,8 @@ s32 rfu_REQBN_watchLink(u16 r5, u8 *r8, u8 *sp00, u8 *sp04) { if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0) { - *r8 |= r6; - *sp00 = sp08; + *bmLinkLossSlot |= r6; + *linkLossReason = sp08; } else { @@ -892,8 +885,8 @@ s32 rfu_REQBN_watchLink(u16 r5, u8 *r8, u8 *sp00, u8 *sp04) gRfuStatic->linkEmergencyFlag[i] = 0; STWI_send_DisconnectREQ(gRfuLinkStatus->connSlotFlag); STWI_poll_CommandEnd(); - *r8 |= r6; - *sp00 = sp08; // why not directly use 1? + *bmLinkLossSlot |= r6; + *linkLossReason = sp08; // why not directly use 1? } } } @@ -904,13 +897,13 @@ s32 rfu_REQBN_watchLink(u16 r5, u8 *r8, u8 *sp00, u8 *sp04) gRfuStatic->linkEmergencyFlag[i] = sp0C; // why not directly use 0? } } - if (gRfuLinkStatus->connMode == 1 && gRfuLinkStatus->strength[i] != 0) + if (gRfuLinkStatus->parentChild == 1 && gRfuLinkStatus->strength[i] != 0) { if (r6 & gRfuLinkStatus->linkLossSlotFlag) { if (gRfuLinkStatus->strength[i] > 10) { - *sp04 |= r6; + *parentBmLinkRecoverySlot |= r6; gRfuLinkStatus->connSlotFlag |= r6; gRfuLinkStatus->linkLossSlotFlag &= ~r6; ++gRfuLinkStatus->connCount; @@ -943,9 +936,9 @@ s32 rfu_REQBN_watchLink(u16 r5, u8 *r8, u8 *sp00, u8 *sp04) } } } - r1 = gRfuLinkStatus->connSlotFlag; - r0 = *r8; - r0 &= r1; + connSlotFlag = gRfuLinkStatus->connSlotFlag; + r0 = *bmLinkLossSlot; + r0 &= connSlotFlag; if (r6 & r0) rfu_STC_removeLinkData(i, 0); } @@ -971,7 +964,7 @@ static void rfu_STC_removeLinkData(u8 r7, u8 r12) gRfuLinkStatus->connSlotFlag &= r6 = ~r5; gRfuLinkStatus->linkLossSlotFlag |= r5; if ((*(u32 *)gRfuLinkStatus & 0xFF00FF) == 0) - gRfuLinkStatus->connMode = 0xFF; + gRfuLinkStatus->parentChild = 0xFF; if (r12 != 0) { CpuFill16(0, &gRfuLinkStatus->partner[r7], sizeof(struct RfuTgtData)); @@ -981,16 +974,16 @@ static void rfu_STC_removeLinkData(u8 r7, u8 r12) } } -void rfu_REQ_disconnect(u8 who) +void rfu_REQ_disconnect(u8 bmDisconnectSlot) { u16 r1; - if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & who) + if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & bmDisconnectSlot) { - gRfuStatic->recoveryBmSlot = who; - if (gRfuLinkStatus->connMode == 0xFF && gRfuStatic->flags & 0x80) + gRfuStatic->recoveryBmSlot = bmDisconnectSlot; + if (gRfuLinkStatus->parentChild == 0xFF && gRfuStatic->flags & 0x80) { - if (gRfuLinkStatus->linkLossSlotFlag & who) + if (gRfuLinkStatus->linkLossSlotFlag & bmDisconnectSlot) rfu_CB_disconnect(48, 0); } else if (gRfuStatic->SCStartFlag @@ -1003,7 +996,7 @@ void rfu_REQ_disconnect(u8 who) else { STWI_set_Callback_M(rfu_CB_disconnect); - STWI_send_DisconnectREQ(who); + STWI_send_DisconnectREQ(bmDisconnectSlot); } } } @@ -1012,7 +1005,7 @@ static void rfu_CB_disconnect(u8 r6, u16 r5) { u8 r4, r0; - if (r5 == 3 && gRfuLinkStatus->connMode == 0) + if (r5 == 3 && gRfuLinkStatus->parentChild == 0) { STWI_set_Callback_M(rfu_CB_defaultCallback); STWI_send_SystemStatusREQ(); @@ -1031,7 +1024,7 @@ static void rfu_CB_disconnect(u8 r6, u16 r5) } } if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) == 0) - gRfuLinkStatus->connMode = 0xFF; + gRfuLinkStatus->parentChild = 0xFF; rfu_STC_REQ_callback(r6, r5); if (gRfuStatic->SCStartFlag) { @@ -1043,16 +1036,16 @@ static void rfu_CB_disconnect(u8 r6, u16 r5) } } -void rfu_REQ_CHILD_startConnectRecovery(u8 r5) +void rfu_REQ_CHILD_startConnectRecovery(u8 bmRecoverySlot) { u8 i; - gRfuStatic->recoveryBmSlot = r5; - for (i = 0; i < 4 && !((r5 >> i) & 1); ++i) + gRfuStatic->recoveryBmSlot = bmRecoverySlot; + for (i = 0; i < 4 && !((bmRecoverySlot >> i) & 1); ++i) ; STWI_set_Callback_M(rfu_STC_REQ_callback); // if i == 4, gRfuLinkStatus->partner[i].id becomes gRfuLinkStatus->my.id - STWI_send_CPR_StartREQ(gRfuLinkStatus->partner[i].id, gRfuLinkStatus->my.id, r5); + STWI_send_CPR_StartREQ(gRfuLinkStatus->partner[i].id, gRfuLinkStatus->my.id, bmRecoverySlot); } void rfu_REQ_CHILD_pollConnectRecovery(void) @@ -1068,7 +1061,7 @@ static void rfu_CB_CHILD_pollConnectRecovery(u8 r8, u16 r7) if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] == 0 && gRfuStatic->recoveryBmSlot) { - gRfuLinkStatus->connMode = 0; + gRfuLinkStatus->parentChild = 0; for (r4 = 0; r4 < NELEMS(gRfuStatic->linkEmergencyFlag); ++r4) { r3 = 1 << r4; @@ -1154,10 +1147,10 @@ void rfu_clearAllSlot(void) u16 IMEBackup = REG_IME; REG_IME = 0; - for (i = 0; i < NELEMS(gRfuSlotStatusNI); ++i) + for (i = 0; i < RFU_CHILD_MAX; ++i) { - CpuFill16(0, gRfuSlotStatusNI[i], sizeof(gRfuSlotStatusNI[i]->sub)); - CpuFill16(0, gRfuSlotStatusUNI[i], sizeof(gRfuSlotStatusUNI[i]->sub)); + CpuFill16(0, gRfuSlotStatusNI[i], 2 * sizeof(struct NIComm)); + CpuFill16(0, gRfuSlotStatusUNI[i], sizeof(struct UNISend) + sizeof(struct UNIRecv)); gRfuLinkStatus->remainLLFrameSizeChild[i] = 16; } gRfuLinkStatus->remainLLFrameSizeParent = 87; @@ -1185,43 +1178,43 @@ static void rfu_STC_releaseFrame(u8 r5, u8 r3, struct NIComm *r4) } } -s32 rfu_clearSlot(u8 r8, u8 r7) +u16 rfu_clearSlot(u8 connTypeFlag, u8 slotStatusIndex) { u16 r10, r3, r1; struct NIComm *r4; - if (r7 > 3) + if (slotStatusIndex >= RFU_CHILD_MAX) return 0x400; - if ((r8 & 0xF) == 0) + if ((connTypeFlag & 0xF) == 0) return 0x600; r10 = REG_IME; REG_IME = 0; - if (r8 & 0xC) + if (connTypeFlag & 0xC) { for (r3 = 0; r3 < 2; ++r3) { r4 = NULL; if (r3 == 0) { - if (r8 & 4) + if (connTypeFlag & 4) { - r4 = &gRfuSlotStatusNI[r7]->sub.send; + r4 = &gRfuSlotStatusNI[slotStatusIndex]->send; gRfuLinkStatus->sendSlotNIFlag &= ~r4->bmSlotOrg; } } else { - if (r8 & 8) + if (connTypeFlag & 8) { - r4 = &gRfuSlotStatusNI[r7]->sub.recv; - gRfuLinkStatus->recvSlotNIFlag &= ~(1 << r7); + r4 = &gRfuSlotStatusNI[slotStatusIndex]->recv; + gRfuLinkStatus->recvSlotNIFlag &= ~(1 << slotStatusIndex); } } if (r4 != NULL) { if (r4->state & 0x8000) { - rfu_STC_releaseFrame(r7, r3, r4); + rfu_STC_releaseFrame(slotStatusIndex, r3, r4); for (r1 = 0; r1 < 4; ++r1) if ((r4->bmSlotOrg >> r1) & 1) r4->failCounter = 0; @@ -1230,71 +1223,71 @@ s32 rfu_clearSlot(u8 r8, u8 r7) } } } - if (r8 & 1) + if (connTypeFlag & 1) { - struct RfuSlotStatusUNI *r3 = gRfuSlotStatusUNI[r7]; + struct RfuSlotStatusUNI *r3 = gRfuSlotStatusUNI[slotStatusIndex]; - if (r3->sub.send.state & 0x8000) + if (r3->send.state & 0x8000) { if (!(gRfuStatic->flags & 0x80)) - gRfuLinkStatus->remainLLFrameSizeParent += 3 + (u8)r3->sub.send.payloadSize; + gRfuLinkStatus->remainLLFrameSizeParent += 3 + (u8)r3->send.payloadSize; else - gRfuLinkStatus->remainLLFrameSizeChild[r7] += 2 + (u8)r3->sub.send.payloadSize; - gRfuLinkStatus->sendSlotUNIFlag &= ~r3->sub.send.bmSlot; + gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex] += 2 + (u8)r3->send.payloadSize; + gRfuLinkStatus->sendSlotUNIFlag &= ~r3->send.bmSlot; } - CpuFill16(0, &r3->sub.send, sizeof(struct UNISend)); + CpuFill16(0, &r3->send, sizeof(struct UNISend)); } - if (r8 & 2) + if (connTypeFlag & 2) { - CpuFill16(0, &gRfuSlotStatusUNI[r7]->sub.recv, sizeof(struct UNIRecv)); + CpuFill16(0, &gRfuSlotStatusUNI[slotStatusIndex]->recv, sizeof(struct UNIRecv)); } REG_IME = r10; return 0; } -s32 rfu_setRecvBuffer(u8 r3, u8 r4, void *r5, size_t r6) +u16 rfu_setRecvBuffer(u8 connType, u8 slotNo, void *buffer, u32 buffSize) { - if (r4 > 3) + if (slotNo >= RFU_CHILD_MAX) return 0x400; - if (r3 & 0x20) + if (connType & 0x20) { - gRfuSlotStatusNI[r4]->recvBuffer = r5; - gRfuSlotStatusNI[r4]->recvBufferSize = r6; + gRfuSlotStatusNI[slotNo]->recvBuffer = buffer; + gRfuSlotStatusNI[slotNo]->recvBufferSize = buffSize; } - else if (!(r3 & 0x10)) + else if (!(connType & 0x10)) { return 0x600; } else { - gRfuSlotStatusUNI[r4]->recvBuffer = r5; - gRfuSlotStatusUNI[r4]->recvBufferSize = r6; + gRfuSlotStatusUNI[slotNo]->recvBuffer = buffer; + gRfuSlotStatusUNI[slotNo]->recvBufferSize = buffSize; } return 0; } -s32 rfu_NI_setSendData(u8 a1, u8 a2, const void *a3, u32 a4) +u16 rfu_NI_setSendData(u8 bmSendSlot, u8 subFrameSize, const void *src, u32 size) { - return rfu_STC_setSendData_org(32, a1, a2, a3, a4); + return rfu_STC_setSendData_org(32, bmSendSlot, subFrameSize, src, size); } -s32 rfu_UNI_setSendData(u8 flag, const void *ptr, u8 size) +u16 rfu_UNI_setSendData(u8 bmSendSlot, const void *src, u8 size) { - u8 r0; + u8 subFrameSize; - if (gRfuLinkStatus->connMode == 1) - r0 = size + 3; + if (gRfuLinkStatus->parentChild == 1) + subFrameSize = size + 3; else - r0 = size + 2; - return rfu_STC_setSendData_org(16, flag, r0, ptr, 0); + subFrameSize = size + 2; + return rfu_STC_setSendData_org(16, bmSendSlot, subFrameSize, src, 0); } -s32 rfu_NI_CHILD_setSendGameName(u8 a1, u8 a2) +u16 rfu_NI_CHILD_setSendGameName(u8 slotNo, u8 subFrameSize) { - return rfu_STC_setSendData_org(64, 1 << a1, a2, &gRfuLinkStatus->my.serialNum, 26); + return rfu_STC_setSendData_org(64, 1 << slotNo, subFrameSize, &gRfuLinkStatus->my.serialNo, 26); } -static u16 rfu_STC_setSendData_org(u8 r6, u8 r3, u8 r8, const void *sp00, u32 sp28) +static u16 rfu_STC_setSendData_org(u8 r6, u8 bmSendSlot, u8 subFrameSize, const void *src, u32 sp28) { u8 r2, r0; u8 r4; @@ -1305,26 +1298,26 @@ static u16 rfu_STC_setSendData_org(u8 r6, u8 r3, u8 r8, const void *sp00, u32 sp struct RfuSlotStatusUNI *r1; struct RfuSlotStatusNI *r12; - if (gRfuLinkStatus->connMode == 0xFF) + if (gRfuLinkStatus->parentChild == 0xFF) return 0x301; - if (!(r3 & 0xF)) + if (!(bmSendSlot & 0xF)) return 0x400; - if (((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & r3) != r3) + if (((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & bmSendSlot) != bmSendSlot) return 0x401; if (r6 & 0x10) r0 = gRfuLinkStatus->sendSlotUNIFlag; else r0 = gRfuLinkStatus->sendSlotNIFlag; - if (r0 & r3) + if (r0 & bmSendSlot) return 0x402; - for (r2 = 0; r2 < 4 && !((r3 >> r2) & 1); ++r2) + for (r2 = 0; r2 < 4 && !((bmSendSlot >> r2) & 1); ++r2) ; - if (gRfuLinkStatus->connMode == 1) + if (gRfuLinkStatus->parentChild == 1) r9 = &gRfuLinkStatus->remainLLFrameSizeParent; - else if (gRfuLinkStatus->connMode == 0) + else if (gRfuLinkStatus->parentChild == 0) r9 = &gRfuLinkStatus->remainLLFrameSizeChild[r2]; - r4 = _Str_RfuHeader[gRfuLinkStatus->connMode].unk00; - if (r8 > *r9 || r8 <= r4) + r4 = _Str_RfuHeader[gRfuLinkStatus->parentChild].unk00; + if (subFrameSize > *r9 || subFrameSize <= r4) return 0x500; sp04 = REG_IME; REG_IME = 0; @@ -1335,82 +1328,82 @@ static u16 rfu_STC_setSendData_org(u8 r6, u8 r3, u8 r8, const void *sp00, u32 sp r12 = gRfuSlotStatusNI[r2]; r1 = NULL; - r12->sub.send.errorCode = 0; - *r12->sub.send.nowP = r1 = &r12->sub.send.dataType; - r12->sub.send.remainSize = 7; - r12->sub.send.bmSlotOrg = r3; - r12->sub.send.bmSlot = r3; - r12->sub.send.payloadSize = r8 - r4; + r12->send.errorCode = 0; + *r12->send.now_p = r1 = &r12->send.dataType; + r12->send.remainSize = 7; + r12->send.bmSlotOrg = bmSendSlot; + r12->send.bmSlot = bmSendSlot; + r12->send.payloadSize = subFrameSize - r4; if (r5 != 0) *r1 = 0; else *r1 = 1; - r12->sub.send.dataSize = sp28; - r12->sub.send.src = sp00; - r12->sub.send.ack = 0; - r12->sub.send.phase = 0; + r12->send.dataSize = sp28; + r12->send.src = src; + r12->send.ack = 0; + r12->send.phase = 0; #ifndef NONMATCHING // to fix r2, r3, r4, r5 register roulette asm("":::"r2"); #endif - for (i = 0; i < NELEMS(r12->sub.send.recvAckFlag); ++i) + for (i = 0; i < WINDOW_COUNT; ++i) { - r12->sub.send.recvAckFlag[i] = 0; - r12->sub.send.n[i] = 1; + r12->send.recvAckFlag[i] = 0; + r12->send.n[i] = 1; } - for (r2 = 0; r2 < NELEMS(gRfuSlotStatusNI); ++r2) - if ((r3 >> r2) & 1) - gRfuSlotStatusNI[r2]->sub.send.failCounter = 0; - gRfuLinkStatus->sendSlotNIFlag |= r3; - *r9 -= r8; - r12->sub.send.state = 0x8021; + for (r2 = 0; r2 < RFU_CHILD_MAX; ++r2) + if ((bmSendSlot >> r2) & 1) + gRfuSlotStatusNI[r2]->send.failCounter = 0; + gRfuLinkStatus->sendSlotNIFlag |= bmSendSlot; + *r9 -= subFrameSize; + r12->send.state = 0x8021; } else if (r6 & 0x10) { r1 = gRfuSlotStatusUNI[r2]; - r1->sub.send.bmSlot = r3; - r1->sub.send.src = sp00; - r1->sub.send.payloadSize = r8 - r4; - *r9 -= r8; - r1->sub.send.state = 0x8024; - gRfuLinkStatus->sendSlotUNIFlag |= r3; + r1->send.bmSlot = bmSendSlot; + r1->send.src = src; + r1->send.payloadSize = subFrameSize - r4; + *r9 -= subFrameSize; + r1->send.state = 0x8024; + gRfuLinkStatus->sendSlotUNIFlag |= bmSendSlot; } REG_IME = sp04; return 0; } -s32 rfu_changeSendTarget(u8 r3, u8 r7, u8 r6) +u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot) { struct RfuSlotStatusNI *r5; u16 r8; u8 r2; - if (r7 >= NELEMS(gRfuSlotStatusNI)) + if (slotStatusIndex >= RFU_CHILD_MAX) return 0x400; - if (r3 == 0x20) + if (connType == 0x20) { - r5 = gRfuSlotStatusNI[r7]; - if ((r5->sub.send.state & 0x8000) - && (r5->sub.send.state & 0x20)) + r5 = gRfuSlotStatusNI[slotStatusIndex]; + if ((r5->send.state & 0x8000) + && (r5->send.state & 0x20)) { - r3 = r6 ^ r5->sub.send.bmSlot; + connType = bmNewTgtSlot ^ r5->send.bmSlot; - if (!(r3 & r6)) + if (!(connType & bmNewTgtSlot)) { - if (r3) + if (connType) { r8 = REG_IME; REG_IME = 0; - for (r2 = 0; r2 < NELEMS(gRfuSlotStatusNI); ++r2) + for (r2 = 0; r2 < RFU_CHILD_MAX; ++r2) { - if ((r3 >> r2) & 1) - gRfuSlotStatusNI[r2]->sub.send.failCounter = 0; + if ((connType >> r2) & 1) + gRfuSlotStatusNI[r2]->send.failCounter = 0; } - gRfuLinkStatus->sendSlotNIFlag &= ~r3; - r5->sub.send.bmSlot = r6; - if (r5->sub.send.bmSlot == 0) + gRfuLinkStatus->sendSlotNIFlag &= ~connType; + r5->send.bmSlot = bmNewTgtSlot; + if (r5->send.bmSlot == 0) { - rfu_STC_releaseFrame(r7, 0, &r5->sub.send); - r5->sub.send.state = 39; + rfu_STC_releaseFrame(slotStatusIndex, 0, &r5->send); + r5->send.state = 39; } REG_IME = r8; } @@ -1427,22 +1420,22 @@ s32 rfu_changeSendTarget(u8 r3, u8 r7, u8 r6) } else { - if (r3 == 16) + if (connType == 16) { s32 r3; - if (gRfuSlotStatusUNI[r7]->sub.send.state != 0x8024) + if (gRfuSlotStatusUNI[slotStatusIndex]->send.state != 0x8024) return 0x403; - for (r3 = 0, r2 = 0; r2 < NELEMS(gRfuSlotStatusUNI); ++r2) - if (r2 != r7) - r3 |= gRfuSlotStatusUNI[r2]->sub.send.bmSlot; - if (r6 & r3) + for (r3 = 0, r2 = 0; r2 < RFU_CHILD_MAX; ++r2) + if (r2 != slotStatusIndex) + r3 |= gRfuSlotStatusUNI[r2]->send.bmSlot; + if (bmNewTgtSlot & r3) return 0x404; r8 = REG_IME; REG_IME = 0; - gRfuLinkStatus->sendSlotUNIFlag &= ~gRfuSlotStatusUNI[r7]->sub.send.bmSlot; - gRfuLinkStatus->sendSlotUNIFlag |= r6; - gRfuSlotStatusUNI[r7]->sub.send.bmSlot = r6; + gRfuLinkStatus->sendSlotUNIFlag &= ~gRfuSlotStatusUNI[slotStatusIndex]->send.bmSlot; + gRfuLinkStatus->sendSlotUNIFlag |= bmNewTgtSlot; + gRfuSlotStatusUNI[slotStatusIndex]->send.bmSlot = bmNewTgtSlot; REG_IME = r8; } else @@ -1453,84 +1446,84 @@ s32 rfu_changeSendTarget(u8 r3, u8 r7, u8 r6) return 0; } -s32 rfu_NI_stopReceivingData(u8 who) +u16 rfu_NI_stopReceivingData(u8 slotStatusIndex) { struct NIComm *r5; u16 r4, r1; - if (who > 3) + if (slotStatusIndex > 3) return 0x400; - r5 = &gRfuSlotStatusNI[who]->sub.recv; + r5 = &gRfuSlotStatusNI[slotStatusIndex]->recv; r4 = REG_IME; ++r4; --r4; // fix r4, r5 register swap REG_IME = 0; - if (gRfuSlotStatusNI[who]->sub.recv.state & 0x8000) + if (gRfuSlotStatusNI[slotStatusIndex]->recv.state & 0x8000) { - if (gRfuSlotStatusNI[who]->sub.recv.state == 0x8043) - gRfuSlotStatusNI[who]->sub.recv.state = 72; + if (gRfuSlotStatusNI[slotStatusIndex]->recv.state == 0x8043) + gRfuSlotStatusNI[slotStatusIndex]->recv.state = 72; else - gRfuSlotStatusNI[who]->sub.recv.state = 71; - gRfuLinkStatus->recvSlotNIFlag &= ~(1 << who); - rfu_STC_releaseFrame(who, 1, r5); + gRfuSlotStatusNI[slotStatusIndex]->recv.state = 71; + gRfuLinkStatus->recvSlotNIFlag &= ~(1 << slotStatusIndex); + rfu_STC_releaseFrame(slotStatusIndex, 1, r5); } REG_IME = r4; return 0; } -s32 rfu_UNI_changeAndReadySendData(u8 r3, const void *r7, u8 r5) +u16 rfu_UNI_changeAndReadySendData(u8 slotStatusIndex, const void *src, u8 size) { struct UNISend *r4; u8 *r6; u16 r1; u8 r3_; - if (r3 >= 4) + if (slotStatusIndex >= RFU_CHILD_MAX) return 0x400; - r4 = &gRfuSlotStatusUNI[r3]->sub.send; + r4 = &gRfuSlotStatusUNI[slotStatusIndex]->send; if (r4->state != 0x8024) return 0x403; - if (gRfuLinkStatus->connMode == 1) + if (gRfuLinkStatus->parentChild == 1) { r6 = &gRfuLinkStatus->remainLLFrameSizeParent; r3_ = gRfuLinkStatus->remainLLFrameSizeParent + (u8)r4->payloadSize; } else { - r6 = &gRfuLinkStatus->remainLLFrameSizeChild[r3]; - r3_ = gRfuLinkStatus->remainLLFrameSizeChild[r3] + (u8)r4->payloadSize; + r6 = &gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex]; + r3_ = gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex] + (u8)r4->payloadSize; } - if (r3_ < r5) + if (r3_ < size) return 0x500; r1 = REG_IME; REG_IME = 0; - r4->src = r7; - *r6 = r3_ - r5; - r4->payloadSize = r5; + r4->src = src; + *r6 = r3_ - size; + r4->payloadSize = size; r4->dataReadyFlag = 1; REG_IME = r1; return 0; } -void rfu_UNI_readySendData(u8 a1) +void rfu_UNI_readySendData(u8 slotStatusIndex) { - if (a1 < NELEMS(gRfuSlotStatusUNI)) + if (slotStatusIndex < RFU_CHILD_MAX) { - if (gRfuSlotStatusUNI[a1]->sub.send.state == 0x8024) - gRfuSlotStatusUNI[a1]->sub.send.dataReadyFlag = 1; + if (gRfuSlotStatusUNI[slotStatusIndex]->send.state == 0x8024) + gRfuSlotStatusUNI[slotStatusIndex]->send.dataReadyFlag = 1; } } -void rfu_UNI_clearRecvNewDataFlag(u8 a1) +void rfu_UNI_clearRecvNewDataFlag(u8 slotStatusIndex) { - if (a1 < NELEMS(gRfuSlotStatusUNI)) - gRfuSlotStatusUNI[a1]->sub.recv.newDataFlag = 0; + if (slotStatusIndex < RFU_CHILD_MAX) + gRfuSlotStatusUNI[slotStatusIndex]->recv.newDataFlag = 0; } -void rfu_REQ_sendData(u8 r5) +void rfu_REQ_sendData(u8 clockChangeFlag) { - if (gRfuLinkStatus->connMode != 0xFF) + if (gRfuLinkStatus->parentChild != 0xFF) { - if (gRfuLinkStatus->connMode == 1 + if (gRfuLinkStatus->parentChild == 1 && !(gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag)) { if (gRfuStatic->commExistFlag) @@ -1548,7 +1541,7 @@ void rfu_REQ_sendData(u8 r5) gRfuFixed->LLFBuffer[0] = 1; gRfuFixed->LLFBuffer[4] = 0xFF; STWI_set_Callback_M(rfu_CB_sendData3); - if (r5 == 0) + if (clockChangeFlag == 0) STWI_send_DataTxREQ(gRfuFixed->LLFBuffer, 1); else STWI_send_DataTxAndChangeREQ(gRfuFixed->LLFBuffer, 1); @@ -1562,7 +1555,7 @@ void rfu_REQ_sendData(u8 r5) if (gRfuLinkStatus->LLFReadyFlag) { STWI_set_Callback_M(rfu_CB_sendData); - if (r5 != 0) + if (clockChangeFlag != 0) { STWI_send_DataTxAndChangeREQ(gRfuFixed->LLFBuffer, gRfuStatic->totalPacketSize + 4); return; @@ -1570,9 +1563,9 @@ void rfu_REQ_sendData(u8 r5) STWI_send_DataTxREQ(gRfuFixed->LLFBuffer, gRfuStatic->totalPacketSize + 4); } } - if (r5 != 0) + if (clockChangeFlag != 0) { - if (gRfuLinkStatus->connMode == 1) + if (gRfuLinkStatus->parentChild == 1) { if (gRfuState->callbackS != NULL) gRfuState->callbackS(39); @@ -1593,11 +1586,11 @@ static void rfu_CB_sendData(UNUSED u8 r0, u16 r7) if (r7 == 0) { - for (r6 = 0; r6 < NELEMS(gRfuSlotStatusNI); ++r6) + for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6) { - if (gRfuSlotStatusUNI[r6]->sub.send.dataReadyFlag) - gRfuSlotStatusUNI[r6]->sub.send.dataReadyFlag = 0; - r4 = &gRfuSlotStatusNI[r6]->sub.send; + if (gRfuSlotStatusUNI[r6]->send.dataReadyFlag) + gRfuSlotStatusUNI[r6]->send.dataReadyFlag = 0; + r4 = &gRfuSlotStatusNI[r6]->send; if (r4->state == 0x8020) { rfu_STC_releaseFrame(r6, 0, r4); @@ -1632,24 +1625,24 @@ static void rfu_constructSendLLFrame(void) u8 *sp00; struct RfuSlotStatusNI *r2; - if (gRfuLinkStatus->connMode != 0xFF + if (gRfuLinkStatus->parentChild != 0xFF && gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag) { gRfuLinkStatus->LLFReadyFlag = 0; r8 = 0; sp00 = (u8 *)&gRfuFixed->LLFBuffer[1]; - for (r6 = 0; r6 < NELEMS(gRfuSlotStatusUNI); ++r6) + for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6) { r5 = 0; - if (gRfuSlotStatusNI[r6]->sub.send.state & 0x8000) - r5 = rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->sub.send); - if (gRfuSlotStatusNI[r6]->sub.recv.state & 0x8000) - r5 += rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->sub.recv); - if (gRfuSlotStatusUNI[r6]->sub.send.state == 0x8024) + if (gRfuSlotStatusNI[r6]->send.state & 0x8000) + r5 = rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->send); + if (gRfuSlotStatusNI[r6]->recv.state & 0x8000) + r5 += rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->recv); + if (gRfuSlotStatusUNI[r6]->send.state == 0x8024) r5 += rfu_STC_UNI_constructLLSF(r6, &sp00); if (r5 != 0) { - if (gRfuLinkStatus->connMode == 1) + if (gRfuLinkStatus->parentChild == 1) r8 += r5; else r8 |= r5 << (5 * r6 + 8); @@ -1660,7 +1653,7 @@ static void rfu_constructSendLLFrame(void) while ((u32)sp00 & 3) *sp00++ = 0; gRfuFixed->LLFBuffer[0] = r8; - if (gRfuLinkStatus->connMode == 0) + if (gRfuLinkStatus->parentChild == 0) { u8 *r0 = sp00 - offsetof(struct RfuFixed, LLFBuffer[1]); @@ -1680,11 +1673,11 @@ static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4) u32 sp00; u8 i; u8 *r2; - const struct RfuHeader *r8 = &_Str_RfuHeader[gRfuLinkStatus->connMode]; + const struct RfuHeader *r8 = &_Str_RfuHeader[gRfuLinkStatus->parentChild]; if (r4->state == 0x8022) { - while (r4->nowP[r4->phase] >= (const u8 *)r4->src + r4->dataSize) + while (r4->now_p[r4->phase] >= (const u8 *)r4->src + r4->dataSize) { ++r4->phase; if (r4->phase == 4) @@ -1697,8 +1690,8 @@ static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4) } else if (r4->state == 0x8022) { - if (r4->nowP[r4->phase] + r4->payloadSize > (const u8 *)r4->src + r4->dataSize) - r5 = (const u8 *)r4->src + r4->dataSize - r4->nowP[r4->phase]; + if (r4->now_p[r4->phase] + r4->payloadSize > (const u8 *)r4->src + r4->dataSize) + r5 = (const u8 *)r4->src + r4->dataSize - r4->now_p[r4->phase]; else r5 = r4->payloadSize; } @@ -1714,14 +1707,14 @@ static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4) | r4->phase << r8->unk05 | r4->n[r4->phase] << r8->unk06 | r5; - if (gRfuLinkStatus->connMode == 1) + if (gRfuLinkStatus->parentChild == 1) sp00 |= r4->bmSlot << 18; r2 = (u8 *)&sp00; for (i = 0; i < r8->unk00; ++i) *(*r12)++ = *r2++; if (r5 != 0) { - const u8 *sp04 = r4->nowP[r4->phase]; + const u8 *sp04 = r4->now_p[r4->phase]; gRfuFixed->fastCopyPtr(&sp04, r12, r5); } @@ -1731,7 +1724,7 @@ static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4) if (r4->phase == 4) r4->phase = 0; } - if (gRfuLinkStatus->connMode == 1) + if (gRfuLinkStatus->parentChild == 1) gRfuLinkStatus->LLFReadyFlag = 1; else gRfuLinkStatus->LLFReadyFlag |= 1 << r10; @@ -1745,21 +1738,21 @@ static u16 rfu_STC_UNI_constructLLSF(u8 r8, u8 **r6) u32 sp00; u8 *r2; u8 i; - struct UNISend *r4 = &gRfuSlotStatusUNI[r8]->sub.send; + struct UNISend *r4 = &gRfuSlotStatusUNI[r8]->send; if (!r4->dataReadyFlag || !r4->bmSlot) return 0; - r5 = &_Str_RfuHeader[gRfuLinkStatus->connMode]; + r5 = &_Str_RfuHeader[gRfuLinkStatus->parentChild]; sp00 = (r4->state & 0xF) << r5->unk03 | r4->payloadSize; - if (gRfuLinkStatus->connMode == 1) + if (gRfuLinkStatus->parentChild == 1) sp00 |= r4->bmSlot << 18; r2 = (u8 *)&sp00; for (i = 0; i < r5->unk00; ++i) *(*r6)++ = *r2++; sp04 = r4->src; gRfuFixed->fastCopyPtr(&sp04, r6, r4->payloadSize); - if (gRfuLinkStatus->connMode == 1) + if (gRfuLinkStatus->parentChild == 1) gRfuLinkStatus->LLFReadyFlag = 16; else gRfuLinkStatus->LLFReadyFlag |= 16 << r8; @@ -1768,7 +1761,7 @@ static u16 rfu_STC_UNI_constructLLSF(u8 r8, u8 **r6) void rfu_REQ_recvData(void) { - if (gRfuLinkStatus->connMode != 0xFF) + if (gRfuLinkStatus->parentChild != 0xFF) { gRfuStatic->commExistFlag = gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag; gRfuStatic->recvErrorFlag = 0; @@ -1786,21 +1779,21 @@ static void rfu_CB_recvData(u8 r9, u16 r7) if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1]) { gRfuStatic->NIEndRecvFlag = 0; - if (gRfuLinkStatus->connMode == 1) + if (gRfuLinkStatus->parentChild == 1) rfu_STC_PARENT_analyzeRecvPacket(); else rfu_STC_CHILD_analyzeRecvPacket(); - for (r6 = 0; r6 < NELEMS(gRfuSlotStatusNI); ++r6) + for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6) { r4 = gRfuSlotStatusNI[r6]; - if (r4->sub.recv.state == 0x8043 && !((gRfuStatic->NIEndRecvFlag >> r6) & 1)) + if (r4->recv.state == 0x8043 && !((gRfuStatic->NIEndRecvFlag >> r6) & 1)) { - r5 = &r4->sub.recv; + r5 = &r4->recv; if (r5->dataType == 1) gRfuLinkStatus->getNameFlag |= 1 << r6; rfu_STC_releaseFrame(r6, 1, r5); gRfuLinkStatus->recvSlotNIFlag &= ~r5->bmSlot; - r4->sub.recv.state = 70; + r4->recv.state = 70; } } if (gRfuStatic->recvErrorFlag) @@ -1871,7 +1864,7 @@ static u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3) u32 r0; u16 r10; - r6 = &_Str_RfuHeader[~gRfuLinkStatus->connMode & 1]; + r6 = &_Str_RfuHeader[~gRfuLinkStatus->parentChild & 1]; if (r3 < r6->unk00) return r3; r5 = 0; @@ -1887,7 +1880,7 @@ static u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3) r10 = sp00.unk06 + r6->unk00; if (sp00.unk00 == 0) { - if (gRfuLinkStatus->connMode == 1) + if (gRfuLinkStatus->parentChild == 1) { if ((gRfuLinkStatus->connSlotFlag >> r12) & 1) { @@ -1901,8 +1894,8 @@ static u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3) } else { - for (r4 = 0; r4 < NELEMS(gRfuSlotStatusNI); ++r4) - if (((gRfuSlotStatusNI[r4]->sub.send.bmSlot >> r12) & 1) + for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4) + if (((gRfuSlotStatusNI[r4]->send.bmSlot >> r12) & 1) && ((gRfuLinkStatus->sendSlotNIFlag >> r12) & 1)) break; if (r4 <= 3) @@ -1939,12 +1932,12 @@ static void rfu_STC_UNI_receive(u8 r7, const struct RfuLocalStruct *r6, const u8 u8 *sp04; u32 r2; struct RfuSlotStatusUNI *r3 = gRfuSlotStatusUNI[r7]; - struct UNIRecv *r5 = &r3->sub.recv; + struct UNIRecv *r5 = &r3->recv; r5->errorCode = 0; if (gRfuSlotStatusUNI[r7]->recvBufferSize < r6->unk06) { - r3->sub.recv.state = 73; + r3->recv.state = 73; r5->errorCode = 0x701; } else @@ -1976,7 +1969,7 @@ _081E2F0E: static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct *r6, const u8 *r3) { - struct NIComm *r12 = &gRfuSlotStatusNI[r0]->sub.send; + struct NIComm *r12 = &gRfuSlotStatusNI[r0]->send; u16 r9 = r12->state; u8 sp00 = r12->n[r6->unk04]; u8 *r8; @@ -1997,9 +1990,9 @@ static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct if ((u16)(r12->state + ~0x8020) <= 1) { if (r12->state == 0x8021) - r12->nowP[r6->unk04] += r12->payloadSize; + r12->now_p[r6->unk04] += r12->payloadSize; else - r12->nowP[r6->unk04] += r12->payloadSize << 2; + r12->now_p[r6->unk04] += r12->payloadSize << 2; r12->remainSize -= r12->payloadSize; if (r12->remainSize != 0) if (r12->remainSize >= 0) @@ -2012,10 +2005,10 @@ static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct r12->phase = 0; if (r12->state == 0x8021) { - for (r4 = 0; r4 < NELEMS(r12->n); ++r4) + for (r4 = 0; r4 < WINDOW_COUNT; ++r4) { r12->n[r4] = 1; - r12->nowP[r4] = r12->src + r12->payloadSize * r4; + r12->now_p[r4] = r12->src + r12->payloadSize * r4; } r12->remainSize = r12->dataSize; r12->state = 0x8022; @@ -2041,7 +2034,7 @@ static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct r2 = REG_IME; REG_IME = 0; gRfuStatic->recvRenewalFlag |= 16 << r10; - gRfuSlotStatusNI[r10]->sub.send.failCounter = 0; + gRfuSlotStatusNI[r10]->send.failCounter = 0; REG_IME = r2; } } @@ -2051,18 +2044,18 @@ static void rfu_STC_NI_receive_Receiver(u8 r8, const struct RfuLocalStruct *r6, u16 r2; u32 r7 = 0; struct RfuSlotStatusNI *r4 = gRfuSlotStatusNI[r8]; - struct NIComm *r5 = &r4->sub.recv; - u16 r9 = r4->sub.recv.state; - u8 r10 = r4->sub.recv.n[r6->unk04]; + struct NIComm *r5 = &r4->recv; + u16 r9 = r4->recv.state; + u8 r10 = r4->recv.n[r6->unk04]; if (r6->unk02 == 3) { gRfuStatic->NIEndRecvFlag |= 1 << r8; - if (r4->sub.recv.state == 0x8042) + if (r4->recv.state == 0x8042) { - r4->sub.recv.phase = 0; - r4->sub.recv.n[0] = 0; - r4->sub.recv.state = 0x8043; + r4->recv.phase = 0; + r4->recv.n[0] = 0; + r4->recv.state = 0x8043; } } else if (r6->unk02 == 2) @@ -2081,7 +2074,7 @@ static void rfu_STC_NI_receive_Receiver(u8 r8, const struct RfuLocalStruct *r6, else { rfu_STC_NI_initSlot_asRecvControllData(r8, r5); - if (r4->sub.recv.state != 0x8041) + if (r4->recv.state != 0x8041) return; r7 = 1; } @@ -2090,9 +2083,9 @@ static void rfu_STC_NI_receive_Receiver(u8 r8, const struct RfuLocalStruct *r6, { if (r6->unk05 == ((r5->n[r6->unk04] + 1) & 3)) { - gRfuFixed->fastCopyPtr(&sp00, (u8 **)&r5->nowP[r6->unk04], r6->unk06); + gRfuFixed->fastCopyPtr(&sp00, (u8 **)&r5->now_p[r6->unk04], r6->unk06); if (r5->state == 0x8042) - r5->nowP[r6->unk04] += 3 * r5->payloadSize; + r5->now_p[r6->unk04] += 3 * r5->payloadSize; r5->remainSize -= r6->unk06; r5->n[r6->unk04] = r6->unk05; } @@ -2117,7 +2110,7 @@ static void rfu_STC_NI_initSlot_asRecvControllData(u8 r4, struct NIComm *r2) u32 r5; u8 r6; - if (gRfuLinkStatus->connMode == 1) + if (gRfuLinkStatus->parentChild == 1) { r5 = 3; r1 = &gRfuLinkStatus->remainLLFrameSizeParent; @@ -2140,7 +2133,7 @@ static void rfu_STC_NI_initSlot_asRecvControllData(u8 r4, struct NIComm *r2) { r2->errorCode = 0; *r1 -= r5; - r2->nowP[0] = &r2->dataType; + r2->now_p[0] = &r2->dataType; r2->remainSize = 7; r2->ack = 1; r2->payloadSize = 0; @@ -2157,7 +2150,7 @@ static void rfu_STC_NI_initSlot_asRecvDataEntity(u8 r5, struct NIComm *r4) if (r4->dataType == 1) { - r4->nowP[0] = (void *)&gRfuLinkStatus->partner[r5].serialNum; + r4->now_p[0] = (void *)&gRfuLinkStatus->partner[r5].serialNo; } else { @@ -2171,12 +2164,12 @@ static void rfu_STC_NI_initSlot_asRecvDataEntity(u8 r5, struct NIComm *r4) rfu_STC_releaseFrame(r5, 1, r4); return; } - r4->nowP[0] = gRfuSlotStatusNI[r5]->recvBuffer; + r4->now_p[0] = gRfuSlotStatusNI[r5]->recvBuffer; } for (r3 = 0; r3 < 4; ++r3) { r4->n[r3] = 0; - r4->nowP[r3] = &r4->nowP[0][r4->payloadSize * r3]; + r4->now_p[r3] = &r4->now_p[0][r4->payloadSize * r3]; } r4->remainSize = r4->dataSize; r4->state = 0x8042; @@ -2193,15 +2186,15 @@ static void rfu_NI_checkCommFailCounter(void) r12 = REG_IME; REG_IME = 0; r7 = gRfuStatic->recvRenewalFlag >> 4; - for (r3 = 0; r3 < NELEMS(gRfuSlotStatusNI); ++r3) + for (r3 = 0; r3 < RFU_CHILD_MAX; ++r3) { r2 = 1 << r3; if (gRfuLinkStatus->sendSlotNIFlag & r2 && !(gRfuStatic->recvRenewalFlag & r2)) - ++gRfuSlotStatusNI[r3]->sub.send.failCounter; + ++gRfuSlotStatusNI[r3]->send.failCounter; if (gRfuLinkStatus->recvSlotNIFlag & r2 && !(r7 & r2)) - ++gRfuSlotStatusNI[r3]->sub.recv.failCounter; + ++gRfuSlotStatusNI[r3]->recv.failCounter; } gRfuStatic->recvRenewalFlag = 0; REG_IME = r12; @@ -2213,157 +2206,3 @@ void rfu_REQ_noise(void) STWI_set_Callback_M(rfu_STC_REQ_callback); STWI_send_TestModeREQ(1, 0); } - -static s32 sub_81E349C(u8 r5) -{ - u16 r8; - vu16 *r4; - s32 r6; - - if (REG_IME == 0) - return -1; - r8 = REG_IE; - gRfuState->state = 10; - STWI_set_Callback_ID(sub_81E36B8); - sub_81E3550(); - r4 = ®_TMCNT_L(gRfuState->timerSelect); - r5 *= 8; - while (--r5 != 0xFF) - { - r6 = sub_81E35C4(); - if (r6 != 0) - break; - r4[1] = 0; - r4[0] = 0; - r4[1] = TIMER_1024CLK | TIMER_ENABLE; - while (r4[0] < 32) - ; - r4[1] = 0; - r4[0] = 0; - } - REG_IME = 0; - REG_IE = r8; - REG_IME = 1; - gRfuState->state = 0; - STWI_set_Callback_ID(NULL); - return r6; -} - -static void sub_81E3550(void) -{ - REG_IME = 0; - REG_IE &= ~((8 << gRfuState->timerSelect) | INTR_FLAG_SERIAL); - REG_IME = 1; - REG_RCNT = 0; - REG_SIOCNT = SIO_32BIT_MODE; - REG_SIOCNT |= SIO_INTR_ENABLE | SIO_ENABLE; - CpuFill32(0, &gUnknown_3007470, sizeof(struct Unk_3007470)); - REG_IF = INTR_FLAG_SERIAL; -} - -static s32 sub_81E35C4(void) -{ - u8 r12; - - switch (r12 = gUnknown_3007470.unk1) - { - case 0: - gUnknown_3007470.unk0 = 1; - REG_SIOCNT |= SIO_38400_BPS; - REG_IME = r12; - REG_IE |= INTR_FLAG_SERIAL; - REG_IME = 1; - gUnknown_3007470.unk1 = 1; - *(vu8 *)®_SIOCNT |= SIO_ENABLE; - break; - case 1: - if (gUnknown_3007470.unkA == 0) - { - if (gUnknown_3007470.unk0 == 1) - { - if (gUnknown_3007470.unk2 == 0) - { - REG_IME = gUnknown_3007470.unk2; - REG_SIOCNT |= SIO_ENABLE; - REG_IME = r12; - } - } - else if (gUnknown_3007470.unk4 != 0x8001 && !gUnknown_3007470.unk2) - { - REG_IME = gUnknown_3007470.unk2; - REG_IE &= ~INTR_FLAG_SERIAL; - REG_IME = r12; - REG_SIOCNT = gUnknown_3007470.unk2; - REG_SIOCNT = SIO_32BIT_MODE; - REG_IF = INTR_FLAG_SERIAL; - REG_SIOCNT |= SIO_INTR_ENABLE | SIO_ENABLE; - REG_IME = gUnknown_3007470.unk2; - REG_IE |= INTR_FLAG_SERIAL; - REG_IME = r12; - } - break; - } - else - { - gUnknown_3007470.unk1 = 2; - // fallthrough - } - default: - return gUnknown_3007470.unkA; - } - return 0; -} - -static void sub_81E36B8(void) -{ - u32 r5; - u16 r0; -#ifndef NONMATCHING - register u32 r1 asm("r1"); - register u16 r0_ asm("r0"); -#else - u32 r1; - u16 r0_; -#endif - - r5 = REG_SIODATA32; - if (gUnknown_3007470.unk0 != 1) - REG_SIOCNT |= SIO_ENABLE; - r1 = 16 * gUnknown_3007470.unk0; // to handle side effect of inline asm - r1 = (r5 << r1) >> 16; - r5 = (r5 << 16 * (1 - gUnknown_3007470.unk0)) >> 16; - if (gUnknown_3007470.unkA == 0) - { - if (r1 == gUnknown_3007470.unk6) - { - if (gUnknown_3007470.unk2 > 3) - { - gUnknown_3007470.unkA = r5; - } - else if (r1 == (u16)~gUnknown_3007470.unk4) - { - r0_ = ~gUnknown_3007470.unk6; - if (r5 == r0_) - ++gUnknown_3007470.unk2; - } - } - else - { - gUnknown_3007470.unk2 = gUnknown_3007470.unkA; - } - } - if (gUnknown_3007470.unk2 < 4) - gUnknown_3007470.unk4 = *(gUnknown_3007470.unk2 + _Str_Sio32ID); - else - gUnknown_3007470.unk4 = 0x8001; - gUnknown_3007470.unk6 = ~r5; - REG_SIODATA32 = (gUnknown_3007470.unk4 << 16 * (1 - gUnknown_3007470.unk0)) - + (gUnknown_3007470.unk6 << 16 * gUnknown_3007470.unk0); - if (gUnknown_3007470.unk0 == 1 && (gUnknown_3007470.unk2 || r5 == 0x494E)) - { - for (r0 = 0; r0 < 600; ++r0) - ; - if (gUnknown_3007470.unkA == 0) - REG_SIOCNT |= SIO_ENABLE; - } -} diff --git a/src/librfu_s32id.c b/src/librfu_s32id.c new file mode 100644 index 000000000..c3bb922e2 --- /dev/null +++ b/src/librfu_s32id.c @@ -0,0 +1,163 @@ +#include "librfu.h" + +extern const u16 _Str_Sio32ID[]; + +static void Sio32IDIntr(void); +static void Sio32IDInit(void); +static s32 Sio32IDMain(void); + +struct RfuS32Id gRfuS32Id; + +s32 AgbRFU_checkID(u8 r5) +{ + u16 r8; + vu16 *r4; + s32 r6; + + if (REG_IME == 0) + return -1; + r8 = REG_IE; + gRfuState->state = 10; + STWI_set_Callback_ID(Sio32IDIntr); + Sio32IDInit(); + r4 = ®_TMCNT_L(gRfuState->timerSelect); + r5 *= 8; + while (--r5 != 0xFF) + { + r6 = Sio32IDMain(); + if (r6 != 0) + break; + r4[1] = 0; + r4[0] = 0; + r4[1] = TIMER_1024CLK | TIMER_ENABLE; + while (r4[0] < 32) + ; + r4[1] = 0; + r4[0] = 0; + } + REG_IME = 0; + REG_IE = r8; + REG_IME = 1; + gRfuState->state = 0; + STWI_set_Callback_ID(NULL); + return r6; +} + +static void Sio32IDInit(void) +{ + REG_IME = 0; + REG_IE &= ~((8 << gRfuState->timerSelect) | INTR_FLAG_SERIAL); + REG_IME = 1; + REG_RCNT = 0; + REG_SIOCNT = SIO_32BIT_MODE; + REG_SIOCNT |= SIO_INTR_ENABLE | SIO_ENABLE; + CpuFill32(0, &gRfuS32Id, sizeof(struct RfuS32Id)); + REG_IF = INTR_FLAG_SERIAL; +} + +static s32 Sio32IDMain(void) +{ + u8 r12; + + switch (r12 = gRfuS32Id.unk1) + { + case 0: + gRfuS32Id.unk0 = 1; + REG_SIOCNT |= SIO_38400_BPS; + REG_IME = r12; + REG_IE |= INTR_FLAG_SERIAL; + REG_IME = 1; + gRfuS32Id.unk1 = 1; + *(vu8 *)®_SIOCNT |= SIO_ENABLE; + break; + case 1: + if (gRfuS32Id.unkA == 0) + { + if (gRfuS32Id.unk0 == 1) + { + if (gRfuS32Id.unk2 == 0) + { + REG_IME = gRfuS32Id.unk2; + REG_SIOCNT |= SIO_ENABLE; + REG_IME = r12; + } + } + else if (gRfuS32Id.unk4 != 0x8001 && !gRfuS32Id.unk2) + { + REG_IME = gRfuS32Id.unk2; + REG_IE &= ~INTR_FLAG_SERIAL; + REG_IME = r12; + REG_SIOCNT = gRfuS32Id.unk2; + REG_SIOCNT = SIO_32BIT_MODE; + REG_IF = INTR_FLAG_SERIAL; + REG_SIOCNT |= SIO_INTR_ENABLE | SIO_ENABLE; + REG_IME = gRfuS32Id.unk2; + REG_IE |= INTR_FLAG_SERIAL; + REG_IME = r12; + } + break; + } + else + { + gRfuS32Id.unk1 = 2; + // fallthrough + } + default: + return gRfuS32Id.unkA; + } + return 0; +} + +static void Sio32IDIntr(void) +{ + u32 r5; + u16 r0; +#ifndef NONMATCHING + register u32 r1 asm("r1"); + register u16 r0_ asm("r0"); +#else + u32 r1; + u16 r0_; +#endif + + r5 = REG_SIODATA32; + if (gRfuS32Id.unk0 != 1) + REG_SIOCNT |= SIO_ENABLE; + r1 = 16 * gRfuS32Id.unk0; // to handle side effect of inline asm + r1 = (r5 << r1) >> 16; + r5 = (r5 << 16 * (1 - gRfuS32Id.unk0)) >> 16; + if (gRfuS32Id.unkA == 0) + { + if (r1 == gRfuS32Id.unk6) + { + if (gRfuS32Id.unk2 > 3) + { + gRfuS32Id.unkA = r5; + } + else if (r1 == (u16)~gRfuS32Id.unk4) + { + r0_ = ~gRfuS32Id.unk6; + if (r5 == r0_) + ++gRfuS32Id.unk2; + } + } + else + { + gRfuS32Id.unk2 = gRfuS32Id.unkA; + } + } + if (gRfuS32Id.unk2 < 4) + gRfuS32Id.unk4 = *(gRfuS32Id.unk2 + _Str_Sio32ID); + else + gRfuS32Id.unk4 = 0x8001; + gRfuS32Id.unk6 = ~r5; + REG_SIODATA32 = (gRfuS32Id.unk4 << 16 * (1 - gRfuS32Id.unk0)) + + (gRfuS32Id.unk6 << 16 * gRfuS32Id.unk0); + if (gRfuS32Id.unk0 == 1 && (gRfuS32Id.unk2 || r5 == 0x494E)) + { + for (r0 = 0; r0 < 600; ++r0) + ; + if (gRfuS32Id.unkA == 0) + REG_SIOCNT |= SIO_ENABLE; + } +} diff --git a/src/librfu_stwi.c b/src/librfu_stwi.c index 8e27c04d8..50e102f19 100644 --- a/src/librfu_stwi.c +++ b/src/librfu_stwi.c @@ -1,4 +1,3 @@ -#include "global.h" #include "librfu.h" static void STWI_intr_timer(void); @@ -12,7 +11,7 @@ static s32 STWI_reset_ClockCounter(void); void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam) { // If we're copying our interrupt into RAM, DMA it to block1 and use - // block2 for our RfuStruct, otherwise block1 holds the RfuStruct. + // block2 for our STWIStatus, otherwise block1 holds the STWIStatus. // interrupt usually is a pointer to gIntrTable[1] if (copyInterruptToRam == TRUE) { @@ -23,7 +22,7 @@ void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, b else { *interrupt = IntrSIO32; - gRfuState = (struct RfuStruct *)interruptStruct->block1; + gRfuState = (struct STWIStatus *)interruptStruct->block1; } gRfuState->rxPacket = &interruptStruct->rxPacketAlloc; gRfuState->txPacket = &interruptStruct->txPacketAlloc; @@ -142,7 +141,7 @@ u16 STWI_poll_CommandEnd(void) void STWI_send_ResetREQ(void) { - if (!STWI_init(RFU_RESET)) + if (!STWI_init(ID_RESET_REQ)) { gRfuState->reqLength = 0; STWI_start_Command(); @@ -151,7 +150,7 @@ void STWI_send_ResetREQ(void) void STWI_send_LinkStatusREQ(void) { - if (!STWI_init(RFU_LINK_STATUS)) + if (!STWI_init(ID_LINK_STATUS_REQ)) { gRfuState->reqLength = 0; STWI_start_Command(); @@ -160,7 +159,7 @@ void STWI_send_LinkStatusREQ(void) void STWI_send_VersionStatusREQ(void) { - if (!STWI_init(RFU_VERSION_STATUS)) + if (!STWI_init(ID_VERSION_STATUS_REQ)) { gRfuState->reqLength = 0; STWI_start_Command(); @@ -169,7 +168,7 @@ void STWI_send_VersionStatusREQ(void) void STWI_send_SystemStatusREQ(void) { - if (!STWI_init(RFU_SYSTEM_STATUS)) + if (!STWI_init(ID_SYSTEM_STATUS_REQ)) { gRfuState->reqLength = 0; STWI_start_Command(); @@ -178,7 +177,7 @@ void STWI_send_SystemStatusREQ(void) void STWI_send_SlotStatusREQ(void) { - if (!STWI_init(RFU_SLOT_STATUS)) + if (!STWI_init(ID_SLOT_STATUS_REQ)) { gRfuState->reqLength = 0; STWI_start_Command(); @@ -187,7 +186,7 @@ void STWI_send_SlotStatusREQ(void) void STWI_send_ConfigStatusREQ(void) { - if (!STWI_init(RFU_CONFIG_STATUS)) + if (!STWI_init(ID_CONFIG_STATUS_REQ)) { gRfuState->reqLength = 0; STWI_start_Command(); @@ -199,7 +198,7 @@ void STWI_send_GameConfigREQ(const u8 *unk1, const u8 *data) u8 *packetBytes; s32 i; - if (!STWI_init(RFU_GAME_CONFIG)) + if (!STWI_init(ID_GAME_CONFIG_REQ)) { gRfuState->reqLength = 6; // TODO: what is unk1 @@ -226,7 +225,7 @@ void STWI_send_GameConfigREQ(const u8 *unk1, const u8 *data) void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3) { - if (!STWI_init(RFU_SYSTEM_CONFIG)) + if (!STWI_init(ID_SYSTEM_CONFIG_REQ)) { u8 *packetBytes; @@ -242,7 +241,7 @@ void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3) void STWI_send_SC_StartREQ(void) { - if (!STWI_init(RFU_SC_START)) + if (!STWI_init(ID_SC_START_REQ)) { gRfuState->reqLength = 0; STWI_start_Command(); @@ -251,7 +250,7 @@ void STWI_send_SC_StartREQ(void) void STWI_send_SC_PollingREQ(void) { - if (!STWI_init(RFU_SC_POLLING)) + if (!STWI_init(ID_SC_POLL_REQ)) { gRfuState->reqLength = 0; STWI_start_Command(); @@ -260,7 +259,7 @@ void STWI_send_SC_PollingREQ(void) void STWI_send_SC_EndREQ(void) { - if (!STWI_init(RFU_SC_END)) + if (!STWI_init(ID_SC_END_REQ)) { gRfuState->reqLength = 0; STWI_start_Command(); @@ -269,7 +268,7 @@ void STWI_send_SC_EndREQ(void) void STWI_send_SP_StartREQ(void) { - if (!STWI_init(RFU_SP_START)) + if (!STWI_init(ID_SP_START_REQ)) { gRfuState->reqLength = 0; STWI_start_Command(); @@ -278,7 +277,7 @@ void STWI_send_SP_StartREQ(void) void STWI_send_SP_PollingREQ(void) { - if (!STWI_init(RFU_SP_POLLING)) + if (!STWI_init(ID_SP_POLL_REQ)) { gRfuState->reqLength = 0; STWI_start_Command(); @@ -287,7 +286,7 @@ void STWI_send_SP_PollingREQ(void) void STWI_send_SP_EndREQ(void) { - if (!STWI_init(RFU_SP_END)) + if (!STWI_init(ID_SP_END_REQ)) { gRfuState->reqLength = 0; STWI_start_Command(); @@ -296,7 +295,7 @@ void STWI_send_SP_EndREQ(void) void STWI_send_CP_StartREQ(u16 unk1) { - if (!STWI_init(RFU_CP_START)) + if (!STWI_init(ID_CP_START_REQ)) { gRfuState->reqLength = 1; gRfuState->txPacket->rfuPacket32.data[0] = unk1; @@ -306,7 +305,7 @@ void STWI_send_CP_StartREQ(u16 unk1) void STWI_send_CP_PollingREQ(void) { - if (!STWI_init(RFU_CP_POLLING)) + if (!STWI_init(ID_CP_POLL_REQ)) { gRfuState->reqLength = 0; STWI_start_Command(); @@ -315,7 +314,7 @@ void STWI_send_CP_PollingREQ(void) void STWI_send_CP_EndREQ(void) { - if (!STWI_init(RFU_CP_END)) + if (!STWI_init(ID_CP_END_REQ)) { gRfuState->reqLength = 0; STWI_start_Command(); @@ -324,7 +323,7 @@ void STWI_send_CP_EndREQ(void) void STWI_send_DataTxREQ(const void *in, u8 size) { - if (!STWI_init(RFU_DATA_TX)) + if (!STWI_init(ID_DATA_TX_REQ)) { u8 reqLength = (size / sizeof(u32)); if (size & (sizeof(u32) - 1)) @@ -337,7 +336,7 @@ void STWI_send_DataTxREQ(const void *in, u8 size) void STWI_send_DataTxAndChangeREQ(const void *in, u8 size) { - if (!STWI_init(RFU_DATA_TX_AND_CHANGE)) + if (!STWI_init(ID_DATA_TX_AND_CHANGE_REQ)) { u8 reqLength = (size / sizeof(u32)); if (size & (sizeof(u32) - 1)) @@ -350,7 +349,7 @@ void STWI_send_DataTxAndChangeREQ(const void *in, u8 size) void STWI_send_DataRxREQ(void) { - if (!STWI_init(RFU_DATA_RX)) + if (!STWI_init(ID_DATA_RX_REQ)) { gRfuState->reqLength = 0; STWI_start_Command(); @@ -359,7 +358,7 @@ void STWI_send_DataRxREQ(void) void STWI_send_MS_ChangeREQ(void) { - if (!STWI_init(RFU_MS_CHANGE)) + if (!STWI_init(ID_MS_CHANGE_REQ)) { gRfuState->reqLength = 0; STWI_start_Command(); @@ -368,7 +367,7 @@ void STWI_send_MS_ChangeREQ(void) void STWI_send_DataReadyAndChangeREQ(u8 unk) { - if (!STWI_init(RFU_DATA_READY_AND_CHANGE)) + if (!STWI_init(ID_DATA_READY_AND_CHANGE_REQ)) { if (!unk) { @@ -392,7 +391,7 @@ void STWI_send_DataReadyAndChangeREQ(u8 unk) void STWI_send_DisconnectedAndChangeREQ(u8 unk0, u8 unk1) { - if (!STWI_init(RFU_DISCONNECTED_AND_CHANGE)) + if (!STWI_init(ID_DISCONNECTED_AND_CHANGE_REQ)) { u8 *packetBytes; @@ -409,7 +408,7 @@ void STWI_send_DisconnectedAndChangeREQ(u8 unk0, u8 unk1) void STWI_send_ResumeRetransmitAndChangeREQ(void) { - if (!STWI_init(RFU_RESUME_RETRANSMIT_AND_CHANGE)) + if (!STWI_init(ID_RESUME_RETRANSMIT_AND_CHANGE_REQ)) { gRfuState->reqLength = 0; STWI_start_Command(); @@ -418,7 +417,7 @@ void STWI_send_ResumeRetransmitAndChangeREQ(void) void STWI_send_DisconnectREQ(u8 unk) { - if (!STWI_init(RFU_DISCONNECT)) + if (!STWI_init(ID_DISCONNECT_REQ)) { gRfuState->reqLength = 1; gRfuState->txPacket->rfuPacket32.data[0] = unk; @@ -428,7 +427,7 @@ void STWI_send_DisconnectREQ(u8 unk) void STWI_send_TestModeREQ(u8 unk0, u8 unk1) { - if (!STWI_init(RFU_TEST_MODE)) + if (!STWI_init(ID_TEST_MODE_REQ)) { gRfuState->reqLength = 1; gRfuState->txPacket->rfuPacket32.data[0] = unk0 | (unk1 << 8); @@ -441,7 +440,7 @@ void STWI_send_CPR_StartREQ(u16 unk0, u16 unk1, u8 unk2) u32 *packetData; u32 arg1; - if (!STWI_init(RFU_CPR_START)) + if (!STWI_init(ID_CPR_START_REQ)) { gRfuState->reqLength = 2; arg1 = unk1 | (unk0 << 16); @@ -454,7 +453,7 @@ void STWI_send_CPR_StartREQ(u16 unk0, u16 unk1, u8 unk2) void STWI_send_CPR_PollingREQ(void) { - if (!STWI_init(RFU_CPR_POLLING)) + if (!STWI_init(ID_CPR_POLL_REQ)) { gRfuState->reqLength = 0; STWI_start_Command(); @@ -463,7 +462,7 @@ void STWI_send_CPR_PollingREQ(void) void STWI_send_CPR_EndREQ(void) { - if (!STWI_init(RFU_CPR_END)) + if (!STWI_init(ID_CPR_END_REQ)) { gRfuState->reqLength = 0; STWI_start_Command(); @@ -472,7 +471,7 @@ void STWI_send_CPR_EndREQ(void) void STWI_send_StopModeREQ(void) { - if (!STWI_init(RFU_STOP_MODE)) + if (!STWI_init(ID_STOP_MODE_REQ)) { gRfuState->reqLength = 0; STWI_start_Command(); @@ -614,7 +613,7 @@ static s32 STWI_restart_Command(void) } else { - if (gRfuState->reqActiveCommand == RFU_MS_CHANGE || gRfuState->reqActiveCommand == RFU_DATA_TX_AND_CHANGE || gRfuState->reqActiveCommand == RFU_UNK35 || gRfuState->reqActiveCommand == RFU_RESUME_RETRANSMIT_AND_CHANGE) + if (gRfuState->reqActiveCommand == ID_MS_CHANGE_REQ || gRfuState->reqActiveCommand == ID_DATA_TX_AND_CHANGE_REQ || gRfuState->reqActiveCommand == ID_UNK35_REQ || gRfuState->reqActiveCommand == ID_RESUME_RETRANSMIT_AND_CHANGE_REQ) { gRfuState->error = 1; gRfuState->unk_2c = 0; diff --git a/sym_common.txt b/sym_common.txt index 444c2a7af..188981dbe 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -161,3 +161,5 @@ gUnknown_3005E94: @ 3005E94 .include "agb_flash.o" .align 2 .include "librfu_rfu.o" + .align 4 + .include "librfu_s32id.o" -- cgit v1.2.3 From 0ce29c0ee9e7a37089e9bea8111ef40e16d6a63e Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Fri, 10 Jan 2020 03:17:00 +0800 Subject: use constants --- asm/crt0.s | 2 +- asm/librfu_intr.s | 28 ++-- asm/link_rfu_2.s | 4 +- common_syms/librfu_rfu.txt | 1 - common_syms/librfu_stwi.txt | 1 + include/librfu.h | 29 ++-- src/librfu_rfu.c | 333 ++++++++++++++++++++++---------------------- src/librfu_s32id.c | 8 +- src/librfu_stwi.c | 292 +++++++++++++++++++------------------- sym_bss.txt | 2 +- sym_common.txt | 2 + 11 files changed, 355 insertions(+), 347 deletions(-) create mode 100644 common_syms/librfu_stwi.txt diff --git a/asm/crt0.s b/asm/crt0.s index 28855d504..7f9626251 100644 --- a/asm/crt0.s +++ b/asm/crt0.s @@ -204,7 +204,7 @@ loop: jump_intr: strh r0, [r3, OFFSET_REG_IF - 0x200] bic r2, r2, r0 - ldr r0, =gRfuState + ldr r0, =gSTWIStatus ldr r0, [r0] ldrb r0, [r0, 0xA] mov r1, 0x8 diff --git a/asm/librfu_intr.s b/asm/librfu_intr.s index 63aa88f3e..10ee02e7b 100644 --- a/asm/librfu_intr.s +++ b/asm/librfu_intr.s @@ -9,7 +9,7 @@ IntrSIO32: @ 81DFC50 mov r12, sp stmdb sp!, {r11,r12,lr,pc} - ldr r3, _081DFCB0 @ =gRfuState + ldr r3, _081DFCB0 @ =gSTWIStatus ldr r0, [r3] ldr r2, [r0] sub r11, r12, 0x4 @@ -34,7 +34,7 @@ _081DFCA4: ldmdb r11, {r11,sp,lr} bx lr .align 2, 0 -_081DFCB0: .4byte gRfuState +_081DFCB0: .4byte gSTWIStatus arm_func_end IntrSIO32 arm_func_start sio32intr_clock_master @@ -45,7 +45,7 @@ sio32intr_clock_master: @ 81DFCB4 sub r11, r12, 0x4 bl STWI_set_timer_in_RAM mov r4, 0x120 - ldr r2, _081DFF28 @ =gRfuState + ldr r2, _081DFF28 @ =gSTWIStatus add r4, r4, 0x4000000 ldr lr, [r4] ldr r12, [r2] @@ -208,7 +208,7 @@ _081DFEFC: bl sub_81E05A4 b _081DFF3C .align 2, 0 -_081DFF28: .4byte gRfuState +_081DFF28: .4byte gSTWIStatus _081DFF2C: add r3, r5, 0x3 strh r3, [r4] @@ -223,7 +223,7 @@ _081DFF3C: sio32intr_clock_slave: @ 81DFF44 mov r12, sp stmdb sp!, {r4-r6,r11,r12,lr,pc} - ldr r4, _081E02F0 @ =gRfuState + ldr r4, _081E02F0 @ =gSTWIStatus mov r0, 0x64 ldr r3, [r4] mov r6, 0 @@ -473,7 +473,7 @@ _081E02E0: bhi _081E02E0 b _081E031C .align 2, 0 -_081E02F0: .4byte gRfuState +_081E02F0: .4byte gSTWIStatus _081E02F4: .4byte 0x996601ee _081E02F8: mov r2, 0xFF00 @@ -510,7 +510,7 @@ handshake_wait: @ 81E0350 mov r1, 0x128 add r1, r1, 0x4000000 mov r0, r0, lsl 16 - ldr r2, _081E03B4 @ =gRfuState + ldr r2, _081E03B4 @ =gSTWIStatus sub r11, r12, 0x4 mov lr, r0, lsr 14 ldr r12, [r2] @@ -533,7 +533,7 @@ _081E03A0: ldmdb r11, {r11,sp,lr} bx lr .align 2, 0 -_081E03B4: .4byte gRfuState +_081E03B4: .4byte gSTWIStatus arm_func_end handshake_wait arm_func_start STWI_set_timer_in_RAM @@ -544,7 +544,7 @@ STWI_set_timer_in_RAM: @ 81E03B8 add r1, r1, 0x4000000 mov r3, 0 sub r11, r12, 0x4 - ldr r12, _081E0470 @ =gRfuState + ldr r12, _081E0470 @ =gSTWIStatus and lr, r0, 0xFF ldr r2, [r12] cmp lr, 0x50 @@ -589,7 +589,7 @@ _081E0458: mov r3, 0x3 b _081E0488 .align 2, 0 -_081E0470: .4byte gRfuState +_081E0470: .4byte gSTWIStatus _081E0474: mvn r3, 0x850 sub r3, r3, 0x2 @@ -621,7 +621,7 @@ STWI_stop_timer_in_RAM: @ 81E04C8 mov r12, sp stmdb sp!, {r11,r12,lr,pc} mov r1, 0x100 - ldr lr, _081E0514 @ =gRfuState + ldr lr, _081E0514 @ =gSTWIStatus add r0, r1, 0x4000000 ldr r2, [lr] sub r11, r12, 0x4 @@ -638,14 +638,14 @@ STWI_stop_timer_in_RAM: @ 81E04C8 ldmdb r11, {r11,sp,lr} bx lr .align 2, 0 -_081E0514: .4byte gRfuState +_081E0514: .4byte gSTWIStatus arm_func_end STWI_stop_timer_in_RAM arm_func_start STWI_init_slave STWI_init_slave: @ 81E0518 mov r12, sp stmdb sp!, {r11,r12,lr,pc} - ldr r0, _081E05A0 @ =gRfuState + ldr r0, _081E05A0 @ =gSTWIStatus ldr r2, [r0] mov r3, 0x5 str r3, [r2] @@ -678,7 +678,7 @@ STWI_init_slave: @ 81E0518 ldmdb r11, {r11,sp,lr} bx lr .align 2, 0 -_081E05A0: .4byte gRfuState +_081E05A0: .4byte gSTWIStatus arm_func_end STWI_init_slave arm_func_start sub_81E05A4 diff --git a/asm/link_rfu_2.s b/asm/link_rfu_2.s index 2e3f89291..10d4fd03d 100644 --- a/asm/link_rfu_2.s +++ b/asm/link_rfu_2.s @@ -132,7 +132,7 @@ _080F86F0: .4byte 0x04000208 thumb_func_start sub_80F86F4 sub_80F86F4: @ 80F86F4 push {r4,lr} - ldr r0, _080F8728 @ =gUnknown_3001190 + ldr r0, _080F8728 @ =gRfuAPIBuffer ldr r1, _080F872C @ =0x00000e64 ldr r4, _080F8730 @ =gIntrTable + 0x4 adds r2, r4, 0 @@ -155,7 +155,7 @@ _080F8722: pop {r0} bx r0 .align 2, 0 -_080F8728: .4byte gUnknown_3001190 +_080F8728: .4byte gRfuAPIBuffer _080F872C: .4byte 0x00000e64 _080F8730: .4byte gIntrTable + 0x4 _080F8734: .4byte gLinkType diff --git a/common_syms/librfu_rfu.txt b/common_syms/librfu_rfu.txt index 94600cdf8..4b742dcd2 100644 --- a/common_syms/librfu_rfu.txt +++ b/common_syms/librfu_rfu.txt @@ -1,4 +1,3 @@ -gRfuState gRfuSlotStatusUNI gRfuSlotStatusNI gRfuLinkStatus diff --git a/common_syms/librfu_stwi.txt b/common_syms/librfu_stwi.txt new file mode 100644 index 000000000..a1f773553 --- /dev/null +++ b/common_syms/librfu_stwi.txt @@ -0,0 +1 @@ +gSTWIStatus diff --git a/include/librfu.h b/include/librfu.h index 1e128d209..f5a7b4d96 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -137,18 +137,20 @@ // Definition Data Returned by Return Values for Library Functions // ******************************************************* +// The function doesn't have return value. // Value of u8 *status for rfu_REQ_pollConnectParent (Connection Trial Status) -#define CP_STATUS_DONE 0x00 // Connection successful -#define CP_STATUS_IN_PROCESS 0x01 // Connecting -#define CP_STATUS_SLOT_CLOSED 0x02 // Parent device is not in connection mode with child device -#define CP_STATUS_DISCONNECTED 0x03 // Disconnected by parent device while connecting -#define CP_STATUS_UNKNOWN 0xff // Cannot read status due to REQ-API execution error +// #define CP_STATUS_DONE 0x00 // Connection successful +// #define CP_STATUS_IN_PROCESS 0x01 // Connecting +// #define CP_STATUS_SLOT_CLOSED 0x02 // Parent device is not in connection mode with child device +// #define CP_STATUS_DISCONNECTED 0x03 // Disconnected by parent device while connecting +// #define CP_STATUS_UNKNOWN 0xff // Cannot read status due to REQ-API execution error +// The function doesn't exist. // Value of u8 *status argument for rfu_REQ_pollRecoveryConnect (Link Restore Status) -#define RC_STATUS_DONE 0x00 // Connection restore successful -#define RC_STATUS_FAILED 0x01 // Connection restore failure (meaningless to try anymore) -#define RC_STATUS_SEARCHING_PARENT 0x02 // Searching for parent device -#define RC_STATUS_UNKNOWN 0xff // Cannot read status due to REQ-API execution error +// #define RC_STATUS_DONE 0x00 // Connection restore successful +// #define RC_STATUS_FAILED 0x01 // Connection restore failure (meaningless to try anymore) +// #define RC_STATUS_SEARCHING_PARENT 0x02 // Searching for parent device +// #define RC_STATUS_UNKNOWN 0xff // Cannot read status due to REQ-API execution error // Value of u8 *linkLossReason argument for rfu_REQBN_watchLink (Reason for Link Loss) #define REASON_DISCONNECTED 0x00 // State of complete disconnection with rfuLL_disconnect and no possibility of restoring the link (can detect only child device) @@ -189,6 +191,7 @@ // Error codes returned by rfu_NI_setSendData, rfu_UNI_setSendData, and rfu_NI_CHILD_setSendGameName #define ERR_MODE 0x0300 +#define ERR_MODE_NOT_PARENT (ERR_MODE | 0x0000) // not in SDK #define ERR_MODE_NOT_CONNECTED (ERR_MODE | 0x0001) // RFU is not in connection mode (parent or child) #define ERR_SLOT 0x0400 @@ -215,6 +218,8 @@ // Error code during UNI-type communication (code entered into gRfuSlotStatusUNI[x]->recv.errorCode) #define ERR_RECV_DATA_OVERWRITED (ERR_DATA_RECV | 0x0008) // Received new data when gRfuSlotStatusUNI[x]->recv.newDataFlag=1 +// not in SDK header +#define ERR_RECV_UNK (ERR_DATA_RECV | 0x0001 | 0x0008) // ******************************************************* // Definition Data Used by Global Variables in the Library @@ -496,7 +501,7 @@ struct RfuS32Id u16 unkA; }; -struct RfuStructsBuffer +struct RfuAPIBuffer { struct RfuLinkStatus linkStatus; struct RfuStatic static_; @@ -506,7 +511,7 @@ struct RfuStructsBuffer struct RfuIntrStruct intr; }; -extern struct STWIStatus *gRfuState; +extern struct STWIStatus *gSTWIStatus; extern struct RfuLinkStatus *gRfuLinkStatus; extern struct RfuStatic *gRfuStatic; extern struct RfuFixed *gRfuFixed; @@ -522,7 +527,7 @@ s32 AgbRFU_checkID(u8); // librfu_rfu // API Initialization and Initial Settings // API Initialization -u16 rfu_initializeAPI(struct RfuStructsBuffer *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam); +u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam); // Set Timer Interrupt void rfu_setTimerInterrupt(u8 timerNo, IntrFunc *timerIntrTable_p); // Resident Function called from within a V-Blank Interrupt diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index 7e4e26fad..70d5b4990 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -70,14 +70,13 @@ static void rfu_STC_NI_initSlot_asRecvControllData(u8, struct NIComm *); extern const char _Str_RFU_MBOOT[]; extern const struct RfuHeader _Str_RfuHeader[2]; -struct STWIStatus *gRfuState; -ALIGNED(8) struct RfuSlotStatusUNI *gRfuSlotStatusUNI[RFU_CHILD_MAX]; +struct RfuSlotStatusUNI *gRfuSlotStatusUNI[RFU_CHILD_MAX]; struct RfuSlotStatusNI *gRfuSlotStatusNI[RFU_CHILD_MAX]; struct RfuLinkStatus *gRfuLinkStatus; struct RfuStatic *gRfuStatic; struct RfuFixed *gRfuFixed; -u16 rfu_initializeAPI(struct RfuStructsBuffer *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam) +u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam) { u16 i; u16 *dst; @@ -86,24 +85,24 @@ u16 rfu_initializeAPI(struct RfuStructsBuffer *APIBuffer, u16 buffByteSize, Intr // is in EWRAM? if (((u32)APIBuffer & 0xF000000) == 0x2000000 && copyInterruptToRam) - return 2; + return ERR_RFU_API_BUFF_ADR; // is not 4-byte aligned? if ((u32)APIBuffer & 3) - return 2; + return ERR_RFU_API_BUFF_ADR; if (copyInterruptToRam) { // An assert/debug print may have existed before, ie // printf("%s %u < %u", "somefile.c:12345", buffByteSize, num) // to push this into r3? - r3 = 0xe64; + r3 = sizeof(struct RfuAPIBuffer); if (buffByteSize < r3) - return 1; + return ERR_RFU_API_BUFF_SIZE; } if (!copyInterruptToRam) { - r3 = 0x504; // same as above, this should be r3 not r0 + r3 = 0x504; // same issue as above if (buffByteSize < r3) - return 1; + return ERR_RFU_API_BUFF_SIZE; } gRfuLinkStatus = &APIBuffer->linkStatus; gRfuStatic = &APIBuffer->static_; @@ -124,9 +123,9 @@ u16 rfu_initializeAPI(struct RfuStructsBuffer *APIBuffer, u16 buffByteSize, Intr rfu_STC_clearAPIVariables(); for (i = 0; i < RFU_CHILD_MAX; ++i) { - gRfuSlotStatusNI[i]->recvBuffer = 0; + gRfuSlotStatusNI[i]->recvBuffer = NULL; gRfuSlotStatusNI[i]->recvBufferSize = 0; - gRfuSlotStatusUNI[i]->recvBuffer = 0; + gRfuSlotStatusUNI[i]->recvBuffer = NULL; gRfuSlotStatusUNI[i]->recvBufferSize = 0; } src = (const u16 *)((u32)&rfu_STC_fastCopy & ~1); @@ -150,7 +149,7 @@ static void rfu_STC_clearAPIVariables(void) CpuFill16(0, gRfuLinkStatus, sizeof(struct RfuLinkStatus)); gRfuLinkStatus->watchInterval = 4; gRfuStatic->nowWatchInterval = 0; - gRfuLinkStatus->parentChild = 0xFF; + gRfuLinkStatus->parentChild = MODE_NEUTRAL; rfu_clearAllSlot(); gRfuStatic->SCStartFlag = 0; for (i = 0; i < NELEMS(gRfuStatic->cidBak); ++i) @@ -169,8 +168,8 @@ u16 rfu_UNI_PARENT_getDRAC_ACK(u8 *ackFlag) struct RfuIntrStruct *buf; *ackFlag = 0; - if (gRfuLinkStatus->parentChild != 1) - return 0x300; + if (gRfuLinkStatus->parentChild != MODE_PARENT) + return ERR_MODE_NOT_PARENT; buf = rfu_getSTWIRecvBuffer(); switch (buf->rxPacketAlloc.rfuPacket8.data[0]) { @@ -182,7 +181,7 @@ u16 rfu_UNI_PARENT_getDRAC_ACK(u8 *ackFlag) *ackFlag = buf->rxPacketAlloc.rfuPacket8.data[4]; return 0; default: - return 0x10; + return ERR_REQ_CMD_ID; } } @@ -233,10 +232,10 @@ static void rfu_CB_defaultCallback(u8 r0, u16 reqResult) if (gRfuStatic->flags & 8) gRfuFixed->reqCallback(r0, reqResult); r5 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; - for (i = 0; i < 4; ++i) + for (i = 0; i < RFU_CHILD_MAX; ++i) if ((r5 >> i) & 1) rfu_STC_removeLinkData(i, 1); - gRfuLinkStatus->parentChild = 0xFF; + gRfuLinkStatus->parentChild = MODE_NEUTRAL; } } @@ -255,7 +254,7 @@ void rfu_REQ_RFUStatus(void) u16 rfu_getRFUStatus(u8 *rfuState) { if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0] != 0x93) - return 0x10; + return ERR_REQ_CMD_ID; if (STWI_poll_CommandEnd() == 0) *rfuState = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7]; else @@ -292,7 +291,7 @@ void rfu_REQ_stopMode(void) if (REG_IME == 0) { rfu_STC_REQ_callback(61, 6); - gRfuState->error = 6; + gSTWIStatus->error = ERR_REQ_CMD_IME_DISABLE; } else { @@ -300,7 +299,7 @@ void rfu_REQ_stopMode(void) rfu_STC_clearAPIVariables(); if (AgbRFU_checkID(8) == 0x8001) { - timerReg = ®_TMCNT(gRfuState->timerSelect); + timerReg = ®_TMCNT(gSTWIStatus->timerSelect); *timerReg = 0; *timerReg = (TIMER_ENABLE | TIMER_1024CLK) << 16; while (*timerReg << 16 < 262 << 16) @@ -326,10 +325,10 @@ static void rfu_CB_stopMode(u8 a1, u16 reqResult) u32 rfu_REQBN_softReset_and_checkID(void) { - s32 r2; + u32 r2; if (REG_IME == 0) - return -1; + return ERR_ID_CHECK_IME_DISABLE; AgbRFU_SoftReset(); rfu_STC_clearAPIVariables(); if ((r2 = AgbRFU_checkID(30)) == 0) @@ -353,7 +352,7 @@ static void rfu_CB_reset(u8 a1, u16 reqResult) void rfu_REQ_configSystem(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer) { STWI_set_Callback_M(rfu_STC_REQ_callback); - STWI_send_SystemConfigREQ((availSlotFlag & 3) | 0x3C, maxMFrame, mcTimer); + STWI_send_SystemConfigREQ((availSlotFlag & AVAIL_SLOT1) | 0x3C, maxMFrame, mcTimer); if (mcTimer == 0) { gRfuStatic->unk_1a = 1; @@ -405,7 +404,7 @@ static void rfu_CB_configGameData(u8 ip, u16 r7) if (r7 == 0) { - r1 = gRfuState->txPacket->rfuPacket8.data; + r1 = gSTWIStatus->txPacket->rfuPacket8.data; r2 = gRfuLinkStatus->my.serialNo = r1[4]; gRfuLinkStatus->my.serialNo = (r1[5] << 8) | r2; r4 = &r1[6]; @@ -500,7 +499,7 @@ static void rfu_CB_pollAndEndSearchChild(u8 r4, u16 reqResult) } else if (r4 == 27) { - if (gRfuLinkStatus->parentChild == 255) + if (gRfuLinkStatus->parentChild == MODE_NEUTRAL) gRfuLinkStatus->my.id = 0; gRfuStatic->SCStartFlag = 0; } @@ -534,7 +533,7 @@ static void rfu_STC_readChildList(void) r4 += 4) { r2 = r4[2]; - if (r2 < 4 && !((gRfuLinkStatus->connSlotFlag >> r2) & 1) && !((gRfuLinkStatus->linkLossSlotFlag >> r2) & 1)) + if (r2 < RFU_CHILD_MAX && !((gRfuLinkStatus->connSlotFlag >> r2) & 1) && !((gRfuLinkStatus->linkLossSlotFlag >> r2) & 1)) { if (sp[r2] != 0) ++gRfuStatic->lsFixedCount[r2]; @@ -546,7 +545,7 @@ static void rfu_STC_readChildList(void) ++gRfuLinkStatus->connCount; gRfuLinkStatus->partner[r2].id = *(u16 *)r4; gRfuLinkStatus->partner[r2].slot = r2; - gRfuLinkStatus->parentChild = 1; + gRfuLinkStatus->parentChild = MODE_PARENT; gRfuStatic->flags &= 0x7F; gRfuStatic->cidBak[r2] = gRfuLinkStatus->partner[r2].id; } @@ -682,7 +681,7 @@ static void rfu_CB_pollConnectParent(u8 sp24, u16 sp28) gRfuLinkStatus->linkLossSlotFlag &= ~r2; gRfuLinkStatus->my.id = id; ++gRfuLinkStatus->connCount; - gRfuLinkStatus->parentChild = 0; + gRfuLinkStatus->parentChild = MODE_CHILD; gRfuStatic->flags |= 0x80; for (r5 = 0; r5 < RFU_CHILD_MAX; ++r5) { @@ -702,7 +701,7 @@ static void rfu_CB_pollConnectParent(u8 sp24, u16 sp28) break; } } - if (r5 < 4) + if (r5 < RFU_CHILD_MAX) { CpuCopy16(r9, &gRfuLinkStatus->partner[slot], sizeof(struct RfuTgtData)); gRfuLinkStatus->partner[slot].slot = slot; @@ -727,7 +726,7 @@ u16 rfu_getConnectParentStatus(u8 *status, u8 *connectSlotNo) *status = r2[1]; return 0; } - return 0x10; + return ERR_REQ_CMD_ID; } void rfu_REQ_endConnectParent(void) @@ -744,7 +743,7 @@ u16 rfu_syncVBlank(void) s32 r5; rfu_NI_checkCommFailCounter(); - if (gRfuLinkStatus->parentChild == 0xFF) + if (gRfuLinkStatus->parentChild == MODE_NEUTRAL) return 0; if (gRfuStatic->nowWatchInterval != 0) --gRfuStatic->nowWatchInterval; @@ -771,10 +770,10 @@ u16 rfu_syncVBlank(void) { gRfuStatic->flags &= 0xFB; r5 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; - for (r4 = 0; r4 < 4; ++r4) + for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4) if ((r5 >> r4) & 1) rfu_STC_removeLinkData(r4, 1); - gRfuLinkStatus->parentChild = 0xFF; + gRfuLinkStatus->parentChild = MODE_NEUTRAL; return 1; } --gRfuStatic->watchdogTimer; @@ -791,9 +790,9 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason u8 r9, r6, r3, connSlotFlag, r0; *bmLinkLossSlot = 0; - *linkLossReason = 0; + *linkLossReason = REASON_DISCONNECTED; *parentBmLinkRecoverySlot = 0; - if (gRfuLinkStatus->parentChild == 0xFF || gRfuState->msMode == 0) + if (gRfuLinkStatus->parentChild == MODE_NEUTRAL || gSTWIStatus->msMode == 0) return 0; if (gRfuStatic->flags & 4) gRfuStatic->watchdogTimer = 360; @@ -808,7 +807,7 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason *bmLinkLossSlot = r1[4]; *linkLossReason = r1[5]; - if (*linkLossReason == 1) + if (*linkLossReason == REASON_LINK_LOSS) *bmLinkLossSlot = gRfuLinkStatus->connSlotFlag; sp08 = 2; } @@ -819,7 +818,7 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason r6 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[5]; r6 ^= gRfuLinkStatus->connSlotFlag; *bmLinkLossSlot = r6 & gRfuLinkStatus->connSlotFlag; - *linkLossReason = 1; + *linkLossReason = REASON_LINK_LOSS; for (i = 0; i < RFU_CHILD_MAX; ++i) { if ((*bmLinkLossSlot >> i) & 1) @@ -850,7 +849,7 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason rfu_STC_REQ_callback(17, sp0C); return sp0C; } - for (; i < 4; ++i) + for (; i < RFU_CHILD_MAX; ++i) { r6 = 1 << i; if (sp0C == 0) @@ -859,13 +858,13 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason { if (gRfuLinkStatus->strength[i] == 0) { - if (gRfuLinkStatus->parentChild == 1) + if (gRfuLinkStatus->parentChild == MODE_PARENT) { ++gRfuStatic->linkEmergencyFlag[i]; if (gRfuStatic->linkEmergencyFlag[i] > 3) { *bmLinkLossSlot |= r6; - *linkLossReason = sp08; // why not directly use 1? + *linkLossReason = sp08; // why not directly use REASON_LINK_LOSS? } } else @@ -876,7 +875,7 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0) { *bmLinkLossSlot |= r6; - *linkLossReason = sp08; + *linkLossReason = sp08; // why not directly use REASON_LINK_LOSS? } else { @@ -886,7 +885,7 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason STWI_send_DisconnectREQ(gRfuLinkStatus->connSlotFlag); STWI_poll_CommandEnd(); *bmLinkLossSlot |= r6; - *linkLossReason = sp08; // why not directly use 1? + *linkLossReason = sp08; // why not directly use REASON_LINK_LOSS? } } } @@ -897,7 +896,7 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason gRfuStatic->linkEmergencyFlag[i] = sp0C; // why not directly use 0? } } - if (gRfuLinkStatus->parentChild == 1 && gRfuLinkStatus->strength[i] != 0) + if (gRfuLinkStatus->parentChild == MODE_PARENT && gRfuLinkStatus->strength[i] != 0) { if (r6 & gRfuLinkStatus->linkLossSlotFlag) { @@ -964,7 +963,7 @@ static void rfu_STC_removeLinkData(u8 r7, u8 r12) gRfuLinkStatus->connSlotFlag &= r6 = ~r5; gRfuLinkStatus->linkLossSlotFlag |= r5; if ((*(u32 *)gRfuLinkStatus & 0xFF00FF) == 0) - gRfuLinkStatus->parentChild = 0xFF; + gRfuLinkStatus->parentChild = MODE_NEUTRAL; if (r12 != 0) { CpuFill16(0, &gRfuLinkStatus->partner[r7], sizeof(struct RfuTgtData)); @@ -981,7 +980,7 @@ void rfu_REQ_disconnect(u8 bmDisconnectSlot) if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & bmDisconnectSlot) { gRfuStatic->recoveryBmSlot = bmDisconnectSlot; - if (gRfuLinkStatus->parentChild == 0xFF && gRfuStatic->flags & 0x80) + if (gRfuLinkStatus->parentChild == MODE_NEUTRAL && gRfuStatic->flags & 0x80) { if (gRfuLinkStatus->linkLossSlotFlag & bmDisconnectSlot) rfu_CB_disconnect(48, 0); @@ -1005,7 +1004,7 @@ static void rfu_CB_disconnect(u8 r6, u16 r5) { u8 r4, r0; - if (r5 == 3 && gRfuLinkStatus->parentChild == 0) + if (r5 == 3 && gRfuLinkStatus->parentChild == MODE_CHILD) { STWI_set_Callback_M(rfu_CB_defaultCallback); STWI_send_SystemStatusREQ(); @@ -1016,7 +1015,7 @@ static void rfu_CB_disconnect(u8 r6, u16 r5) gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8] = gRfuStatic->recoveryBmSlot; if (r5 == 0) { - for (r4 = 0; r4 < 4; ++r4) + for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4) { r0 = 1 << r4; if (r0 & gRfuStatic->recoveryBmSlot) @@ -1024,7 +1023,7 @@ static void rfu_CB_disconnect(u8 r6, u16 r5) } } if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) == 0) - gRfuLinkStatus->parentChild = 0xFF; + gRfuLinkStatus->parentChild = MODE_NEUTRAL; rfu_STC_REQ_callback(r6, r5); if (gRfuStatic->SCStartFlag) { @@ -1041,7 +1040,7 @@ void rfu_REQ_CHILD_startConnectRecovery(u8 bmRecoverySlot) u8 i; gRfuStatic->recoveryBmSlot = bmRecoverySlot; - for (i = 0; i < 4 && !((bmRecoverySlot >> i) & 1); ++i) + for (i = 0; i < RFU_CHILD_MAX && !((bmRecoverySlot >> i) & 1); ++i) ; STWI_set_Callback_M(rfu_STC_REQ_callback); // if i == 4, gRfuLinkStatus->partner[i].id becomes gRfuLinkStatus->my.id @@ -1061,7 +1060,7 @@ static void rfu_CB_CHILD_pollConnectRecovery(u8 r8, u16 r7) if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] == 0 && gRfuStatic->recoveryBmSlot) { - gRfuLinkStatus->parentChild = 0; + gRfuLinkStatus->parentChild = MODE_CHILD; for (r4 = 0; r4 < NELEMS(gRfuStatic->linkEmergencyFlag); ++r4) { r3 = 1 << r4; @@ -1090,7 +1089,7 @@ u16 rfu_CHILD_getConnectRecoveryStatus(u8 *status) *status = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4]; return 0; } - return 0x10; + return ERR_REQ_CMD_ID; } void rfu_REQ_CHILD_endConnectRecovery(void) @@ -1126,19 +1125,19 @@ void rfu_REQ_changeMasterSlave(void) bool8 rfu_getMasterSlave(void) { - bool8 r2 = STWI_read_status(1); + bool8 masterSlave = STWI_read_status(1); - if (r2 == 1) + if (masterSlave == AGB_CLK_MASTER) { - if (gRfuState->unk_2c) + if (gSTWIStatus->unk_2c) { - if (gRfuState->reqActiveCommand == 39 - || gRfuState->reqActiveCommand == 37 - || gRfuState->reqActiveCommand == 55) - r2 = 0; + if (gSTWIStatus->reqActiveCommand == 39 + || gSTWIStatus->reqActiveCommand == 37 + || gSTWIStatus->reqActiveCommand == 55) + masterSlave = AGB_CLK_SLAVE; } } - return r2; + return masterSlave; } void rfu_clearAllSlot(void) @@ -1153,7 +1152,7 @@ void rfu_clearAllSlot(void) CpuFill16(0, gRfuSlotStatusUNI[i], sizeof(struct UNISend) + sizeof(struct UNIRecv)); gRfuLinkStatus->remainLLFrameSizeChild[i] = 16; } - gRfuLinkStatus->remainLLFrameSizeParent = 87; + gRfuLinkStatus->remainLLFrameSizeParent = LLF_P_SIZE; gRfuLinkStatus->sendSlotNIFlag = 0; gRfuLinkStatus->recvSlotNIFlag = 0; gRfuLinkStatus->sendSlotUNIFlag = 0; @@ -1184,19 +1183,19 @@ u16 rfu_clearSlot(u8 connTypeFlag, u8 slotStatusIndex) struct NIComm *r4; if (slotStatusIndex >= RFU_CHILD_MAX) - return 0x400; - if ((connTypeFlag & 0xF) == 0) - return 0x600; + return ERR_SLOT_NO; + if (!(connTypeFlag & (TYPE_UNI_SEND | TYPE_UNI_RECV | TYPE_NI_SEND | TYPE_NI_RECV))) + return ERR_COMM_TYPE; r10 = REG_IME; REG_IME = 0; - if (connTypeFlag & 0xC) + if (connTypeFlag & (TYPE_NI_SEND | TYPE_NI_RECV)) { for (r3 = 0; r3 < 2; ++r3) { r4 = NULL; if (r3 == 0) { - if (connTypeFlag & 4) + if (connTypeFlag & TYPE_NI_SEND) { r4 = &gRfuSlotStatusNI[slotStatusIndex]->send; gRfuLinkStatus->sendSlotNIFlag &= ~r4->bmSlotOrg; @@ -1204,7 +1203,7 @@ u16 rfu_clearSlot(u8 connTypeFlag, u8 slotStatusIndex) } else { - if (connTypeFlag & 8) + if (connTypeFlag & TYPE_NI_RECV) { r4 = &gRfuSlotStatusNI[slotStatusIndex]->recv; gRfuLinkStatus->recvSlotNIFlag &= ~(1 << slotStatusIndex); @@ -1212,10 +1211,10 @@ u16 rfu_clearSlot(u8 connTypeFlag, u8 slotStatusIndex) } if (r4 != NULL) { - if (r4->state & 0x8000) + if (r4->state & SLOT_BUSY_FLAG) { rfu_STC_releaseFrame(slotStatusIndex, r3, r4); - for (r1 = 0; r1 < 4; ++r1) + for (r1 = 0; r1 < RFU_CHILD_MAX; ++r1) if ((r4->bmSlotOrg >> r1) & 1) r4->failCounter = 0; } @@ -1223,11 +1222,11 @@ u16 rfu_clearSlot(u8 connTypeFlag, u8 slotStatusIndex) } } } - if (connTypeFlag & 1) + if (connTypeFlag & TYPE_UNI_SEND) { struct RfuSlotStatusUNI *r3 = gRfuSlotStatusUNI[slotStatusIndex]; - if (r3->send.state & 0x8000) + if (r3->send.state & SLOT_BUSY_FLAG) { if (!(gRfuStatic->flags & 0x80)) gRfuLinkStatus->remainLLFrameSizeParent += 3 + (u8)r3->send.payloadSize; @@ -1237,7 +1236,7 @@ u16 rfu_clearSlot(u8 connTypeFlag, u8 slotStatusIndex) } CpuFill16(0, &r3->send, sizeof(struct UNISend)); } - if (connTypeFlag & 2) + if (connTypeFlag & TYPE_UNI_RECV) { CpuFill16(0, &gRfuSlotStatusUNI[slotStatusIndex]->recv, sizeof(struct UNIRecv)); } @@ -1248,15 +1247,15 @@ u16 rfu_clearSlot(u8 connTypeFlag, u8 slotStatusIndex) u16 rfu_setRecvBuffer(u8 connType, u8 slotNo, void *buffer, u32 buffSize) { if (slotNo >= RFU_CHILD_MAX) - return 0x400; - if (connType & 0x20) + return ERR_SLOT_NO; + if (connType & TYPE_NI) { gRfuSlotStatusNI[slotNo]->recvBuffer = buffer; gRfuSlotStatusNI[slotNo]->recvBufferSize = buffSize; } - else if (!(connType & 0x10)) + else if (!(connType & TYPE_UNI)) { - return 0x600; + return ERR_COMM_TYPE; } else { @@ -1275,7 +1274,7 @@ u16 rfu_UNI_setSendData(u8 bmSendSlot, const void *src, u8 size) { u8 subFrameSize; - if (gRfuLinkStatus->parentChild == 1) + if (gRfuLinkStatus->parentChild == MODE_PARENT) subFrameSize = size + 3; else subFrameSize = size + 2; @@ -1298,27 +1297,27 @@ static u16 rfu_STC_setSendData_org(u8 r6, u8 bmSendSlot, u8 subFrameSize, const struct RfuSlotStatusUNI *r1; struct RfuSlotStatusNI *r12; - if (gRfuLinkStatus->parentChild == 0xFF) - return 0x301; + if (gRfuLinkStatus->parentChild == MODE_NEUTRAL) + return ERR_MODE_NOT_CONNECTED; if (!(bmSendSlot & 0xF)) - return 0x400; + return ERR_SLOT_NO; if (((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & bmSendSlot) != bmSendSlot) - return 0x401; + return ERR_SLOT_NOT_CONNECTED; if (r6 & 0x10) r0 = gRfuLinkStatus->sendSlotUNIFlag; else r0 = gRfuLinkStatus->sendSlotNIFlag; if (r0 & bmSendSlot) - return 0x402; - for (r2 = 0; r2 < 4 && !((bmSendSlot >> r2) & 1); ++r2) + return ERR_SLOT_BUSY; + for (r2 = 0; r2 < RFU_CHILD_MAX && !((bmSendSlot >> r2) & 1); ++r2) ; - if (gRfuLinkStatus->parentChild == 1) + if (gRfuLinkStatus->parentChild == MODE_PARENT) r9 = &gRfuLinkStatus->remainLLFrameSizeParent; - else if (gRfuLinkStatus->parentChild == 0) + else if (gRfuLinkStatus->parentChild == MODE_CHILD) r9 = &gRfuLinkStatus->remainLLFrameSizeChild[r2]; r4 = _Str_RfuHeader[gRfuLinkStatus->parentChild].unk00; if (subFrameSize > *r9 || subFrameSize <= r4) - return 0x500; + return ERR_SUBFRAME_SIZE; sp04 = REG_IME; REG_IME = 0; r5 = r6 & 0x20; @@ -1355,7 +1354,7 @@ static u16 rfu_STC_setSendData_org(u8 r6, u8 bmSendSlot, u8 subFrameSize, const gRfuSlotStatusNI[r2]->send.failCounter = 0; gRfuLinkStatus->sendSlotNIFlag |= bmSendSlot; *r9 -= subFrameSize; - r12->send.state = 0x8021; + r12->send.state = SLOT_STATE_SEND_START; } else if (r6 & 0x10) { @@ -1364,7 +1363,7 @@ static u16 rfu_STC_setSendData_org(u8 r6, u8 bmSendSlot, u8 subFrameSize, const r1->send.src = src; r1->send.payloadSize = subFrameSize - r4; *r9 -= subFrameSize; - r1->send.state = 0x8024; + r1->send.state = SLOT_STATE_SEND_UNI; gRfuLinkStatus->sendSlotUNIFlag |= bmSendSlot; } REG_IME = sp04; @@ -1378,12 +1377,12 @@ u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot) u8 r2; if (slotStatusIndex >= RFU_CHILD_MAX) - return 0x400; + return ERR_SLOT_NO; if (connType == 0x20) { r5 = gRfuSlotStatusNI[slotStatusIndex]; - if ((r5->send.state & 0x8000) - && (r5->send.state & 0x20)) + if ((r5->send.state & SLOT_BUSY_FLAG) + && (r5->send.state & SLOT_SEND_FLAG)) { connType = bmNewTgtSlot ^ r5->send.bmSlot; @@ -1403,19 +1402,19 @@ u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot) if (r5->send.bmSlot == 0) { rfu_STC_releaseFrame(slotStatusIndex, 0, &r5->send); - r5->send.state = 39; + r5->send.state = SLOT_STATE_SEND_FAILED; } REG_IME = r8; } } else { - return 0x404; + return ERR_SLOT_TARGET; } } else { - return 0x403; + return ERR_SLOT_NOT_SENDING; } } else @@ -1424,13 +1423,13 @@ u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot) { s32 r3; - if (gRfuSlotStatusUNI[slotStatusIndex]->send.state != 0x8024) - return 0x403; + if (gRfuSlotStatusUNI[slotStatusIndex]->send.state != SLOT_STATE_SEND_UNI) + return ERR_SLOT_NOT_SENDING; for (r3 = 0, r2 = 0; r2 < RFU_CHILD_MAX; ++r2) if (r2 != slotStatusIndex) r3 |= gRfuSlotStatusUNI[r2]->send.bmSlot; if (bmNewTgtSlot & r3) - return 0x404; + return ERR_SLOT_TARGET; r8 = REG_IME; REG_IME = 0; gRfuLinkStatus->sendSlotUNIFlag &= ~gRfuSlotStatusUNI[slotStatusIndex]->send.bmSlot; @@ -1440,7 +1439,7 @@ u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot) } else { - return 0x600; + return ERR_COMM_TYPE; } } return 0; @@ -1451,18 +1450,18 @@ u16 rfu_NI_stopReceivingData(u8 slotStatusIndex) struct NIComm *r5; u16 r4, r1; - if (slotStatusIndex > 3) - return 0x400; + if (slotStatusIndex >= RFU_CHILD_MAX) + return ERR_SLOT_NO; r5 = &gRfuSlotStatusNI[slotStatusIndex]->recv; r4 = REG_IME; ++r4; --r4; // fix r4, r5 register swap REG_IME = 0; - if (gRfuSlotStatusNI[slotStatusIndex]->recv.state & 0x8000) + if (gRfuSlotStatusNI[slotStatusIndex]->recv.state & SLOT_BUSY_FLAG) { - if (gRfuSlotStatusNI[slotStatusIndex]->recv.state == 0x8043) - gRfuSlotStatusNI[slotStatusIndex]->recv.state = 72; + if (gRfuSlotStatusNI[slotStatusIndex]->recv.state == SLOT_STATE_RECV_LAST) + gRfuSlotStatusNI[slotStatusIndex]->recv.state = SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN; else - gRfuSlotStatusNI[slotStatusIndex]->recv.state = 71; + gRfuSlotStatusNI[slotStatusIndex]->recv.state = SLOT_STATE_RECV_FAILED; gRfuLinkStatus->recvSlotNIFlag &= ~(1 << slotStatusIndex); rfu_STC_releaseFrame(slotStatusIndex, 1, r5); } @@ -1478,11 +1477,11 @@ u16 rfu_UNI_changeAndReadySendData(u8 slotStatusIndex, const void *src, u8 size) u8 r3_; if (slotStatusIndex >= RFU_CHILD_MAX) - return 0x400; + return ERR_SLOT_NO; r4 = &gRfuSlotStatusUNI[slotStatusIndex]->send; - if (r4->state != 0x8024) - return 0x403; - if (gRfuLinkStatus->parentChild == 1) + if (r4->state != SLOT_STATE_SEND_UNI) + return ERR_SLOT_NOT_SENDING; + if (gRfuLinkStatus->parentChild == MODE_PARENT) { r6 = &gRfuLinkStatus->remainLLFrameSizeParent; r3_ = gRfuLinkStatus->remainLLFrameSizeParent + (u8)r4->payloadSize; @@ -1493,7 +1492,7 @@ u16 rfu_UNI_changeAndReadySendData(u8 slotStatusIndex, const void *src, u8 size) r3_ = gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex] + (u8)r4->payloadSize; } if (r3_ < size) - return 0x500; + return ERR_SUBFRAME_SIZE; r1 = REG_IME; REG_IME = 0; r4->src = src; @@ -1508,7 +1507,7 @@ void rfu_UNI_readySendData(u8 slotStatusIndex) { if (slotStatusIndex < RFU_CHILD_MAX) { - if (gRfuSlotStatusUNI[slotStatusIndex]->send.state == 0x8024) + if (gRfuSlotStatusUNI[slotStatusIndex]->send.state == SLOT_STATE_SEND_UNI) gRfuSlotStatusUNI[slotStatusIndex]->send.dataReadyFlag = 1; } } @@ -1521,7 +1520,7 @@ void rfu_UNI_clearRecvNewDataFlag(u8 slotStatusIndex) void rfu_REQ_sendData(u8 clockChangeFlag) { - if (gRfuLinkStatus->parentChild != 0xFF) + if (gRfuLinkStatus->parentChild != MODE_NEUTRAL) { if (gRfuLinkStatus->parentChild == 1 && !(gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag)) @@ -1565,10 +1564,10 @@ void rfu_REQ_sendData(u8 clockChangeFlag) } if (clockChangeFlag != 0) { - if (gRfuLinkStatus->parentChild == 1) + if (gRfuLinkStatus->parentChild == MODE_PARENT) { - if (gRfuState->callbackS != NULL) - gRfuState->callbackS(39); + if (gSTWIStatus->callbackS != NULL) + gSTWIStatus->callbackS(39); } else { @@ -1591,13 +1590,13 @@ static void rfu_CB_sendData(UNUSED u8 r0, u16 r7) if (gRfuSlotStatusUNI[r6]->send.dataReadyFlag) gRfuSlotStatusUNI[r6]->send.dataReadyFlag = 0; r4 = &gRfuSlotStatusNI[r6]->send; - if (r4->state == 0x8020) + if (r4->state == SLOT_STATE_SEND_NULL) { rfu_STC_releaseFrame(r6, 0, r4); gRfuLinkStatus->sendSlotNIFlag &= ~r4->bmSlot; if (r4->dataType == 1) gRfuLinkStatus->getNameFlag |= 1 << r6; - r4->state = 38; + r4->state = SLOT_STATE_SEND_SUCCESS; } } } @@ -1625,7 +1624,7 @@ static void rfu_constructSendLLFrame(void) u8 *sp00; struct RfuSlotStatusNI *r2; - if (gRfuLinkStatus->parentChild != 0xFF + if (gRfuLinkStatus->parentChild != MODE_NEUTRAL && gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag) { gRfuLinkStatus->LLFReadyFlag = 0; @@ -1634,15 +1633,15 @@ static void rfu_constructSendLLFrame(void) for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6) { r5 = 0; - if (gRfuSlotStatusNI[r6]->send.state & 0x8000) + if (gRfuSlotStatusNI[r6]->send.state & SLOT_BUSY_FLAG) r5 = rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->send); - if (gRfuSlotStatusNI[r6]->recv.state & 0x8000) + if (gRfuSlotStatusNI[r6]->recv.state & SLOT_BUSY_FLAG) r5 += rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->recv); - if (gRfuSlotStatusUNI[r6]->send.state == 0x8024) + if (gRfuSlotStatusUNI[r6]->send.state == SLOT_STATE_SEND_UNI) r5 += rfu_STC_UNI_constructLLSF(r6, &sp00); if (r5 != 0) { - if (gRfuLinkStatus->parentChild == 1) + if (gRfuLinkStatus->parentChild == MODE_PARENT) r8 += r5; else r8 |= r5 << (5 * r6 + 8); @@ -1653,7 +1652,7 @@ static void rfu_constructSendLLFrame(void) while ((u32)sp00 & 3) *sp00++ = 0; gRfuFixed->LLFBuffer[0] = r8; - if (gRfuLinkStatus->parentChild == 0) + if (gRfuLinkStatus->parentChild == MODE_CHILD) { u8 *r0 = sp00 - offsetof(struct RfuFixed, LLFBuffer[1]); @@ -1675,7 +1674,7 @@ static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4) u8 *r2; const struct RfuHeader *r8 = &_Str_RfuHeader[gRfuLinkStatus->parentChild]; - if (r4->state == 0x8022) + if (r4->state == SLOT_STATE_SENDING) { while (r4->now_p[r4->phase] >= (const u8 *)r4->src + r4->dataSize) { @@ -1684,11 +1683,11 @@ static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4) r4->phase = 0; } } - if (r4->state & 0x40) + if (r4->state & SLOT_RECV_FLAG) { r5 = 0; } - else if (r4->state == 0x8022) + else if (r4->state == SLOT_STATE_SENDING) { if (r4->now_p[r4->phase] + r4->payloadSize > (const u8 *)r4->src + r4->dataSize) r5 = (const u8 *)r4->src + r4->dataSize - r4->now_p[r4->phase]; @@ -1707,7 +1706,7 @@ static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4) | r4->phase << r8->unk05 | r4->n[r4->phase] << r8->unk06 | r5; - if (gRfuLinkStatus->parentChild == 1) + if (gRfuLinkStatus->parentChild == MODE_PARENT) sp00 |= r4->bmSlot << 18; r2 = (u8 *)&sp00; for (i = 0; i < r8->unk00; ++i) @@ -1718,13 +1717,13 @@ static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4) gRfuFixed->fastCopyPtr(&sp04, r12, r5); } - if (r4->state == 0x8022) + if (r4->state == SLOT_STATE_SENDING) { ++r4->phase; if (r4->phase == 4) r4->phase = 0; } - if (gRfuLinkStatus->parentChild == 1) + if (gRfuLinkStatus->parentChild == MODE_PARENT) gRfuLinkStatus->LLFReadyFlag = 1; else gRfuLinkStatus->LLFReadyFlag |= 1 << r10; @@ -1745,14 +1744,14 @@ static u16 rfu_STC_UNI_constructLLSF(u8 r8, u8 **r6) r5 = &_Str_RfuHeader[gRfuLinkStatus->parentChild]; sp00 = (r4->state & 0xF) << r5->unk03 | r4->payloadSize; - if (gRfuLinkStatus->parentChild == 1) + if (gRfuLinkStatus->parentChild == MODE_PARENT) sp00 |= r4->bmSlot << 18; r2 = (u8 *)&sp00; for (i = 0; i < r5->unk00; ++i) *(*r6)++ = *r2++; sp04 = r4->src; gRfuFixed->fastCopyPtr(&sp04, r6, r4->payloadSize); - if (gRfuLinkStatus->parentChild == 1) + if (gRfuLinkStatus->parentChild == MODE_PARENT) gRfuLinkStatus->LLFReadyFlag = 16; else gRfuLinkStatus->LLFReadyFlag |= 16 << r8; @@ -1761,7 +1760,7 @@ static u16 rfu_STC_UNI_constructLLSF(u8 r8, u8 **r6) void rfu_REQ_recvData(void) { - if (gRfuLinkStatus->parentChild != 0xFF) + if (gRfuLinkStatus->parentChild != MODE_NEUTRAL) { gRfuStatic->commExistFlag = gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag; gRfuStatic->recvErrorFlag = 0; @@ -1779,25 +1778,25 @@ static void rfu_CB_recvData(u8 r9, u16 r7) if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1]) { gRfuStatic->NIEndRecvFlag = 0; - if (gRfuLinkStatus->parentChild == 1) + if (gRfuLinkStatus->parentChild == MODE_PARENT) rfu_STC_PARENT_analyzeRecvPacket(); else rfu_STC_CHILD_analyzeRecvPacket(); for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6) { r4 = gRfuSlotStatusNI[r6]; - if (r4->recv.state == 0x8043 && !((gRfuStatic->NIEndRecvFlag >> r6) & 1)) + if (r4->recv.state == SLOT_STATE_RECV_LAST && !((gRfuStatic->NIEndRecvFlag >> r6) & 1)) { r5 = &r4->recv; if (r5->dataType == 1) gRfuLinkStatus->getNameFlag |= 1 << r6; rfu_STC_releaseFrame(r6, 1, r5); gRfuLinkStatus->recvSlotNIFlag &= ~r5->bmSlot; - r4->recv.state = 70; + r4->recv.state = SLOT_STATE_RECV_SUCCESS; } } if (gRfuStatic->recvErrorFlag) - r7 = gRfuStatic->recvErrorFlag | 0x700; + r7 = gRfuStatic->recvErrorFlag | ERR_DATA_RECV; } rfu_STC_REQ_callback(r9, r7); } @@ -1864,7 +1863,7 @@ static u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3) u32 r0; u16 r10; - r6 = &_Str_RfuHeader[~gRfuLinkStatus->parentChild & 1]; + r6 = &_Str_RfuHeader[~gRfuLinkStatus->parentChild & (MODE_NEUTRAL & MODE_PARENT)]; if (r3 < r6->unk00) return r3; r5 = 0; @@ -1880,7 +1879,7 @@ static u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3) r10 = sp00.unk06 + r6->unk00; if (sp00.unk00 == 0) { - if (gRfuLinkStatus->parentChild == 1) + if (gRfuLinkStatus->parentChild == MODE_PARENT) { if ((gRfuLinkStatus->connSlotFlag >> r12) & 1) { @@ -1909,7 +1908,7 @@ static u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3) if (r5) { - for (r4 = 0; r4 < 4; ++r4) + for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4) { if ((r5 >> r4) & 1) { @@ -1937,8 +1936,8 @@ static void rfu_STC_UNI_receive(u8 r7, const struct RfuLocalStruct *r6, const u8 r5->errorCode = 0; if (gRfuSlotStatusUNI[r7]->recvBufferSize < r6->unk06) { - r3->recv.state = 73; - r5->errorCode = 0x701; + r3->recv.state = SLOT_STATE_RECV_IGNORE; + r5->errorCode = ERR_RECV_BUFF_OVER; } else { @@ -1946,16 +1945,16 @@ static void rfu_STC_UNI_receive(u8 r7, const struct RfuLocalStruct *r6, const u8 { if (r5->newDataFlag) { - r5->errorCode = 0x709; + r5->errorCode = ERR_RECV_UNK; goto _081E2F0E; } } else { if (r5->newDataFlag) - r5->errorCode = 0x708; + r5->errorCode = ERR_RECV_DATA_OVERWRITED; } - r5->state = 0x8042; + r5->state = SLOT_STATE_RECEIVING; r2 = r5->dataSize = r6->unk06; sp04 = gRfuSlotStatusUNI[r7]->recvBuffer; gRfuFixed->fastCopyPtr(&sp00, &sp04, r2); @@ -1976,9 +1975,9 @@ static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct u8 r4; u16 r2; - if ((r6->unk02 == 2 && r9 == 0x8022) - || (r6->unk02 == 1 && r9 == 0x8021) - || (r6->unk02 == 3 && r9 == 0x8023)) + if ((r6->unk02 == 2 && r9 == SLOT_STATE_SENDING) + || (r6->unk02 == 1 && r9 == SLOT_STATE_SEND_START) + || (r6->unk02 == 3 && r9 == SLOT_STATE_SEND_LAST)) { if (r12->n[r6->unk04] == r6->unk05) r12->recvAckFlag[r6->unk04] |= 1 << r10; @@ -1987,9 +1986,9 @@ static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct { r12->n[r6->unk04] = (r12->n[r6->unk04] + 1) & 3; r12->recvAckFlag[r6->unk04] = 0; - if ((u16)(r12->state + ~0x8020) <= 1) + if ((u16)(r12->state + ~SLOT_STATE_SEND_NULL) <= 1) { - if (r12->state == 0x8021) + if (r12->state == SLOT_STATE_SEND_START) r12->now_p[r6->unk04] += r12->payloadSize; else r12->now_p[r6->unk04] += r12->payloadSize << 2; @@ -2003,7 +2002,7 @@ static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct // if (r12->remainSize == 0 || r12->remainSize < 0) { r12->phase = 0; - if (r12->state == 0x8021) + if (r12->state == SLOT_STATE_SEND_START) { for (r4 = 0; r4 < WINDOW_COUNT; ++r4) { @@ -2011,20 +2010,20 @@ static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct r12->now_p[r4] = r12->src + r12->payloadSize * r4; } r12->remainSize = r12->dataSize; - r12->state = 0x8022; + r12->state = SLOT_STATE_SENDING; } else { r12->n[0] = 0; r12->remainSize = 0; - r12->state = 0x8023; + r12->state = SLOT_STATE_SEND_LAST; } } _081E30AE: } - else if (r12->state == 0x8023) + else if (r12->state == SLOT_STATE_SEND_LAST) { - r12->state = 0x8020; + r12->state = SLOT_STATE_SEND_NULL; } } if (r12->state != r9 @@ -2051,30 +2050,30 @@ static void rfu_STC_NI_receive_Receiver(u8 r8, const struct RfuLocalStruct *r6, if (r6->unk02 == 3) { gRfuStatic->NIEndRecvFlag |= 1 << r8; - if (r4->recv.state == 0x8042) + if (r4->recv.state == SLOT_STATE_RECEIVING) { r4->recv.phase = 0; r4->recv.n[0] = 0; - r4->recv.state = 0x8043; + r4->recv.state = SLOT_STATE_RECV_LAST; } } else if (r6->unk02 == 2) { - if (r9 == 0x8041 && !r5->remainSize) + if (r9 == SLOT_STATE_RECV_START && !r5->remainSize) rfu_STC_NI_initSlot_asRecvDataEntity(r8, r5); - if (r5->state == 0x8042) + if (r5->state == SLOT_STATE_RECEIVING) r7 = 1; } else if (r6->unk02 == 1) { - if (r9 == 0x8041) + if (r9 == SLOT_STATE_RECV_START) { r7 = 1; } else { rfu_STC_NI_initSlot_asRecvControllData(r8, r5); - if (r4->recv.state != 0x8041) + if (r4->recv.state != SLOT_STATE_RECV_START) return; r7 = 1; } @@ -2084,7 +2083,7 @@ static void rfu_STC_NI_receive_Receiver(u8 r8, const struct RfuLocalStruct *r6, if (r6->unk05 == ((r5->n[r6->unk04] + 1) & 3)) { gRfuFixed->fastCopyPtr(&sp00, (u8 **)&r5->now_p[r6->unk04], r6->unk06); - if (r5->state == 0x8042) + if (r5->state == SLOT_STATE_RECEIVING) r5->now_p[r6->unk04] += 3 * r5->payloadSize; r5->remainSize -= r6->unk06; r5->n[r6->unk04] = r6->unk05; @@ -2110,7 +2109,7 @@ static void rfu_STC_NI_initSlot_asRecvControllData(u8 r4, struct NIComm *r2) u32 r5; u8 r6; - if (gRfuLinkStatus->parentChild == 1) + if (gRfuLinkStatus->parentChild == MODE_PARENT) { r5 = 3; r1 = &gRfuLinkStatus->remainLLFrameSizeParent; @@ -2125,8 +2124,8 @@ static void rfu_STC_NI_initSlot_asRecvControllData(u8 r4, struct NIComm *r2) { if (*r1 < r5) { - r2->state = 73; - r2->errorCode = 0x702; + r2->state = SLOT_STATE_RECV_IGNORE; + r2->errorCode = ERR_RECV_REPLY_SUBFRAME_SIZE; gRfuStatic->recvErrorFlag |= r6; } else @@ -2138,7 +2137,7 @@ static void rfu_STC_NI_initSlot_asRecvControllData(u8 r4, struct NIComm *r2) r2->ack = 1; r2->payloadSize = 0; r2->bmSlot = r6; - r2->state = 0x8041; + r2->state = SLOT_STATE_RECV_START; gRfuLinkStatus->recvSlotNIFlag |= r6; } } @@ -2159,20 +2158,20 @@ static void rfu_STC_NI_initSlot_asRecvDataEntity(u8 r5, struct NIComm *r4) r1 = 1 << r5; gRfuStatic->recvErrorFlag |= r1; gRfuLinkStatus->recvSlotNIFlag &= ~r1; - r4->errorCode = 0x701; - r4->state = 71; + r4->errorCode = ERR_RECV_BUFF_OVER; + r4->state = SLOT_STATE_RECV_FAILED; rfu_STC_releaseFrame(r5, 1, r4); return; } r4->now_p[0] = gRfuSlotStatusNI[r5]->recvBuffer; } - for (r3 = 0; r3 < 4; ++r3) + for (r3 = 0; r3 < WINDOW_COUNT; ++r3) { r4->n[r3] = 0; r4->now_p[r3] = &r4->now_p[0][r4->payloadSize * r3]; } r4->remainSize = r4->dataSize; - r4->state = 0x8042; + r4->state = SLOT_STATE_RECEIVING; } static void rfu_NI_checkCommFailCounter(void) diff --git a/src/librfu_s32id.c b/src/librfu_s32id.c index c3bb922e2..7c99cda2d 100644 --- a/src/librfu_s32id.c +++ b/src/librfu_s32id.c @@ -17,10 +17,10 @@ s32 AgbRFU_checkID(u8 r5) if (REG_IME == 0) return -1; r8 = REG_IE; - gRfuState->state = 10; + gSTWIStatus->state = 10; STWI_set_Callback_ID(Sio32IDIntr); Sio32IDInit(); - r4 = ®_TMCNT_L(gRfuState->timerSelect); + r4 = ®_TMCNT_L(gSTWIStatus->timerSelect); r5 *= 8; while (--r5 != 0xFF) { @@ -38,7 +38,7 @@ s32 AgbRFU_checkID(u8 r5) REG_IME = 0; REG_IE = r8; REG_IME = 1; - gRfuState->state = 0; + gSTWIStatus->state = 0; STWI_set_Callback_ID(NULL); return r6; } @@ -46,7 +46,7 @@ s32 AgbRFU_checkID(u8 r5) static void Sio32IDInit(void) { REG_IME = 0; - REG_IE &= ~((8 << gRfuState->timerSelect) | INTR_FLAG_SERIAL); + REG_IE &= ~((8 << gSTWIStatus->timerSelect) | INTR_FLAG_SERIAL); REG_IME = 1; REG_RCNT = 0; REG_SIOCNT = SIO_32BIT_MODE; diff --git a/src/librfu_stwi.c b/src/librfu_stwi.c index 50e102f19..b88f21737 100644 --- a/src/librfu_stwi.c +++ b/src/librfu_stwi.c @@ -8,6 +8,8 @@ static void STWI_stop_timer(void); static s32 STWI_restart_Command(void); static s32 STWI_reset_ClockCounter(void); +struct STWIStatus *gSTWIStatus; + void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam) { // If we're copying our interrupt into RAM, DMA it to block1 and use @@ -17,27 +19,27 @@ void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, b { *interrupt = (IntrFunc)interruptStruct->block1; DmaCopy16(3, &IntrSIO32, interruptStruct->block1, sizeof(interruptStruct->block1)); - gRfuState = &interruptStruct->block2; + gSTWIStatus = &interruptStruct->block2; } else { *interrupt = IntrSIO32; - gRfuState = (struct STWIStatus *)interruptStruct->block1; - } - gRfuState->rxPacket = &interruptStruct->rxPacketAlloc; - gRfuState->txPacket = &interruptStruct->txPacketAlloc; - gRfuState->msMode = 1; - gRfuState->state = 0; - gRfuState->reqLength = 0; - gRfuState->reqNext = 0; - gRfuState->ackLength = 0; - gRfuState->ackNext = 0; - gRfuState->ackActiveCommand = 0; - gRfuState->timerState = 0; - gRfuState->timerActive = 0; - gRfuState->error = 0; - gRfuState->recoveryCount = 0; - gRfuState->unk_2c = 0; + gSTWIStatus = (struct STWIStatus *)interruptStruct->block1; + } + gSTWIStatus->rxPacket = &interruptStruct->rxPacketAlloc; + gSTWIStatus->txPacket = &interruptStruct->txPacketAlloc; + gSTWIStatus->msMode = 1; + gSTWIStatus->state = 0; + gSTWIStatus->reqLength = 0; + gSTWIStatus->reqNext = 0; + gSTWIStatus->ackLength = 0; + gSTWIStatus->ackNext = 0; + gSTWIStatus->ackActiveCommand = 0; + gSTWIStatus->timerState = 0; + gSTWIStatus->timerActive = 0; + gSTWIStatus->error = 0; + gSTWIStatus->recoveryCount = 0; + gSTWIStatus->unk_2c = 0; REG_RCNT = 0x100; // TODO: mystery bit? REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; STWI_init_Callback_M(); @@ -48,8 +50,8 @@ void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, b void STWI_init_timer(IntrFunc *interrupt, s32 timerSelect) { *interrupt = STWI_intr_timer; - gRfuState->timerSelect = timerSelect; - IntrEnable(INTR_FLAG_TIMER0 << gRfuState->timerSelect); + gSTWIStatus->timerSelect = timerSelect; + IntrEnable(INTR_FLAG_TIMER0 << gSTWIStatus->timerSelect); } void AgbRFU_SoftReset(void) @@ -59,8 +61,8 @@ void AgbRFU_SoftReset(void) REG_RCNT = 0x8000; REG_RCNT = 0x80A0; // all these bits are undocumented - timerL = ®_TMCNT_L(gRfuState->timerSelect); - timerH = ®_TMCNT_H(gRfuState->timerSelect); + timerL = ®_TMCNT_L(gSTWIStatus->timerSelect); + timerH = ®_TMCNT_H(gSTWIStatus->timerSelect); *timerH = 0; *timerL = 0; *timerH = TIMER_ENABLE | TIMER_1024CLK; @@ -69,24 +71,24 @@ void AgbRFU_SoftReset(void) *timerH = 3; REG_RCNT = 0x80A0; REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; - gRfuState->state = 0; - gRfuState->reqLength = 0; - gRfuState->reqNext = 0; - gRfuState->reqActiveCommand = 0; - gRfuState->ackLength = 0; - gRfuState->ackNext = 0; - gRfuState->ackActiveCommand = 0; - gRfuState->timerState = 0; - gRfuState->timerActive = 0; - gRfuState->error = 0; - gRfuState->msMode = 1; - gRfuState->recoveryCount = 0; - gRfuState->unk_2c = 0; + gSTWIStatus->state = 0; + gSTWIStatus->reqLength = 0; + gSTWIStatus->reqNext = 0; + gSTWIStatus->reqActiveCommand = 0; + gSTWIStatus->ackLength = 0; + gSTWIStatus->ackNext = 0; + gSTWIStatus->ackActiveCommand = 0; + gSTWIStatus->timerState = 0; + gSTWIStatus->timerActive = 0; + gSTWIStatus->error = 0; + gSTWIStatus->msMode = 1; + gSTWIStatus->recoveryCount = 0; + gSTWIStatus->unk_2c = 0; } void STWI_set_MS_mode(u8 mode) { - gRfuState->msMode = mode; + gSTWIStatus->msMode = mode; } u16 STWI_read_status(u8 index) @@ -94,13 +96,13 @@ u16 STWI_read_status(u8 index) switch (index) { case 0: - return gRfuState->error; + return gSTWIStatus->error; case 1: - return gRfuState->msMode; + return gSTWIStatus->msMode; case 2: - return gRfuState->state; + return gSTWIStatus->state; case 3: - return gRfuState->reqActiveCommand; + return gSTWIStatus->reqActiveCommand; default: return 0xFFFF; } @@ -119,31 +121,31 @@ void STWI_init_Callback_S(void) // The callback can take 2 or 3 arguments. void STWI_set_Callback_M(void *callbackM) { - gRfuState->callbackM = callbackM; + gSTWIStatus->callbackM = callbackM; } void STWI_set_Callback_S(void (*callbackS)(u16)) { - gRfuState->callbackS = callbackS; + gSTWIStatus->callbackS = callbackS; } void STWI_set_Callback_ID(void (*func)(void)) // name in SDK, but is actually setting a function pointer { - gRfuState->unk_20 = func; + gSTWIStatus->unk_20 = func; } u16 STWI_poll_CommandEnd(void) { - while (gRfuState->unk_2c == TRUE) + while (gSTWIStatus->unk_2c == TRUE) ; - return gRfuState->error; + return gSTWIStatus->error; } void STWI_send_ResetREQ(void) { if (!STWI_init(ID_RESET_REQ)) { - gRfuState->reqLength = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } @@ -152,7 +154,7 @@ void STWI_send_LinkStatusREQ(void) { if (!STWI_init(ID_LINK_STATUS_REQ)) { - gRfuState->reqLength = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } @@ -161,7 +163,7 @@ void STWI_send_VersionStatusREQ(void) { if (!STWI_init(ID_VERSION_STATUS_REQ)) { - gRfuState->reqLength = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } @@ -170,7 +172,7 @@ void STWI_send_SystemStatusREQ(void) { if (!STWI_init(ID_SYSTEM_STATUS_REQ)) { - gRfuState->reqLength = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } @@ -179,7 +181,7 @@ void STWI_send_SlotStatusREQ(void) { if (!STWI_init(ID_SLOT_STATUS_REQ)) { - gRfuState->reqLength = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } @@ -188,7 +190,7 @@ void STWI_send_ConfigStatusREQ(void) { if (!STWI_init(ID_CONFIG_STATUS_REQ)) { - gRfuState->reqLength = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } @@ -200,9 +202,9 @@ void STWI_send_GameConfigREQ(const u8 *unk1, const u8 *data) if (!STWI_init(ID_GAME_CONFIG_REQ)) { - gRfuState->reqLength = 6; + gSTWIStatus->reqLength = 6; // TODO: what is unk1 - packetBytes = gRfuState->txPacket->rfuPacket8.data; + packetBytes = gSTWIStatus->txPacket->rfuPacket8.data; packetBytes += sizeof(u32); *(u16 *)packetBytes = *(u16 *)unk1; packetBytes += sizeof(u16); @@ -229,8 +231,8 @@ void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3) { u8 *packetBytes; - gRfuState->reqLength = 1; - packetBytes = gRfuState->txPacket->rfuPacket8.data; + gSTWIStatus->reqLength = 1; + packetBytes = gSTWIStatus->txPacket->rfuPacket8.data; packetBytes += sizeof(u32); *packetBytes++ = unk3; *packetBytes++ = unk2; @@ -243,7 +245,7 @@ void STWI_send_SC_StartREQ(void) { if (!STWI_init(ID_SC_START_REQ)) { - gRfuState->reqLength = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } @@ -252,7 +254,7 @@ void STWI_send_SC_PollingREQ(void) { if (!STWI_init(ID_SC_POLL_REQ)) { - gRfuState->reqLength = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } @@ -261,7 +263,7 @@ void STWI_send_SC_EndREQ(void) { if (!STWI_init(ID_SC_END_REQ)) { - gRfuState->reqLength = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } @@ -270,7 +272,7 @@ void STWI_send_SP_StartREQ(void) { if (!STWI_init(ID_SP_START_REQ)) { - gRfuState->reqLength = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } @@ -279,7 +281,7 @@ void STWI_send_SP_PollingREQ(void) { if (!STWI_init(ID_SP_POLL_REQ)) { - gRfuState->reqLength = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } @@ -288,7 +290,7 @@ void STWI_send_SP_EndREQ(void) { if (!STWI_init(ID_SP_END_REQ)) { - gRfuState->reqLength = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } @@ -297,8 +299,8 @@ void STWI_send_CP_StartREQ(u16 unk1) { if (!STWI_init(ID_CP_START_REQ)) { - gRfuState->reqLength = 1; - gRfuState->txPacket->rfuPacket32.data[0] = unk1; + gSTWIStatus->reqLength = 1; + gSTWIStatus->txPacket->rfuPacket32.data[0] = unk1; STWI_start_Command(); } } @@ -307,7 +309,7 @@ void STWI_send_CP_PollingREQ(void) { if (!STWI_init(ID_CP_POLL_REQ)) { - gRfuState->reqLength = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } @@ -316,7 +318,7 @@ void STWI_send_CP_EndREQ(void) { if (!STWI_init(ID_CP_END_REQ)) { - gRfuState->reqLength = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } @@ -328,8 +330,8 @@ void STWI_send_DataTxREQ(const void *in, u8 size) u8 reqLength = (size / sizeof(u32)); if (size & (sizeof(u32) - 1)) reqLength += 1; - gRfuState->reqLength = reqLength; - CpuCopy32(in, gRfuState->txPacket->rfuPacket32.data, gRfuState->reqLength * sizeof(u32)); + gSTWIStatus->reqLength = reqLength; + CpuCopy32(in, gSTWIStatus->txPacket->rfuPacket32.data, gSTWIStatus->reqLength * sizeof(u32)); STWI_start_Command(); } } @@ -341,8 +343,8 @@ void STWI_send_DataTxAndChangeREQ(const void *in, u8 size) u8 reqLength = (size / sizeof(u32)); if (size & (sizeof(u32) - 1)) reqLength += 1; - gRfuState->reqLength = reqLength; - CpuCopy32(in, gRfuState->txPacket->rfuPacket32.data, gRfuState->reqLength * sizeof(u32)); + gSTWIStatus->reqLength = reqLength; + CpuCopy32(in, gSTWIStatus->txPacket->rfuPacket32.data, gSTWIStatus->reqLength * sizeof(u32)); STWI_start_Command(); } } @@ -351,7 +353,7 @@ void STWI_send_DataRxREQ(void) { if (!STWI_init(ID_DATA_RX_REQ)) { - gRfuState->reqLength = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } @@ -360,7 +362,7 @@ void STWI_send_MS_ChangeREQ(void) { if (!STWI_init(ID_MS_CHANGE_REQ)) { - gRfuState->reqLength = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } @@ -371,14 +373,14 @@ void STWI_send_DataReadyAndChangeREQ(u8 unk) { if (!unk) { - gRfuState->reqLength = 0; + gSTWIStatus->reqLength = 0; } else { u8 *packetBytes; - gRfuState->reqLength = 1; - packetBytes = gRfuState->txPacket->rfuPacket8.data; + gSTWIStatus->reqLength = 1; + packetBytes = gSTWIStatus->txPacket->rfuPacket8.data; packetBytes += sizeof(u32); *packetBytes++ = unk; *packetBytes++ = 0; @@ -395,8 +397,8 @@ void STWI_send_DisconnectedAndChangeREQ(u8 unk0, u8 unk1) { u8 *packetBytes; - gRfuState->reqLength = 1; - packetBytes = gRfuState->txPacket->rfuPacket8.data; + gSTWIStatus->reqLength = 1; + packetBytes = gSTWIStatus->txPacket->rfuPacket8.data; packetBytes += sizeof(u32); *packetBytes++ = unk0; *packetBytes++ = unk1; @@ -410,7 +412,7 @@ void STWI_send_ResumeRetransmitAndChangeREQ(void) { if (!STWI_init(ID_RESUME_RETRANSMIT_AND_CHANGE_REQ)) { - gRfuState->reqLength = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } @@ -419,8 +421,8 @@ void STWI_send_DisconnectREQ(u8 unk) { if (!STWI_init(ID_DISCONNECT_REQ)) { - gRfuState->reqLength = 1; - gRfuState->txPacket->rfuPacket32.data[0] = unk; + gSTWIStatus->reqLength = 1; + gSTWIStatus->txPacket->rfuPacket32.data[0] = unk; STWI_start_Command(); } } @@ -429,8 +431,8 @@ void STWI_send_TestModeREQ(u8 unk0, u8 unk1) { if (!STWI_init(ID_TEST_MODE_REQ)) { - gRfuState->reqLength = 1; - gRfuState->txPacket->rfuPacket32.data[0] = unk0 | (unk1 << 8); + gSTWIStatus->reqLength = 1; + gSTWIStatus->txPacket->rfuPacket32.data[0] = unk0 | (unk1 << 8); STWI_start_Command(); } } @@ -442,9 +444,9 @@ void STWI_send_CPR_StartREQ(u16 unk0, u16 unk1, u8 unk2) if (!STWI_init(ID_CPR_START_REQ)) { - gRfuState->reqLength = 2; + gSTWIStatus->reqLength = 2; arg1 = unk1 | (unk0 << 16); - packetData = gRfuState->txPacket->rfuPacket32.data; + packetData = gSTWIStatus->txPacket->rfuPacket32.data; packetData[0] = arg1; packetData[1] = unk2; STWI_start_Command(); @@ -455,7 +457,7 @@ void STWI_send_CPR_PollingREQ(void) { if (!STWI_init(ID_CPR_POLL_REQ)) { - gRfuState->reqLength = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } @@ -464,7 +466,7 @@ void STWI_send_CPR_EndREQ(void) { if (!STWI_init(ID_CPR_END_REQ)) { - gRfuState->reqLength = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } @@ -473,18 +475,18 @@ void STWI_send_StopModeREQ(void) { if (!STWI_init(ID_STOP_MODE_REQ)) { - gRfuState->reqLength = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } static void STWI_intr_timer(void) { - switch (gRfuState->timerState) + switch (gSTWIStatus->timerState) { // TODO: Make an enum for these case 2: - gRfuState->timerActive = 1; + gSTWIStatus->timerActive = 1; STWI_set_timer(50); break; case 1: @@ -493,11 +495,11 @@ static void STWI_intr_timer(void) STWI_restart_Command(); break; case 3: - gRfuState->timerActive = 1; + gSTWIStatus->timerActive = 1; STWI_stop_timer(); STWI_reset_ClockCounter(); - if (gRfuState->callbackM != NULL) - gRfuState->callbackM(255, 0); + if (gSTWIStatus->callbackM != NULL) + gSTWIStatus->callbackM(255, 0); break; } } @@ -507,78 +509,78 @@ static void STWI_set_timer(u8 unk) vu16 *timerL; vu16 *timerH; - timerL = ®_TMCNT_L(gRfuState->timerSelect); - timerH = ®_TMCNT_H(gRfuState->timerSelect); + timerL = ®_TMCNT_L(gSTWIStatus->timerSelect); + timerH = ®_TMCNT_H(gSTWIStatus->timerSelect); REG_IME = 0; switch (unk) { case 50: *timerL = 0xFCCB; - gRfuState->timerState = 1; + gSTWIStatus->timerState = 1; break; case 80: *timerL = 0xFAE0; - gRfuState->timerState = 2; + gSTWIStatus->timerState = 2; break; case 100: *timerL = 0xF996; - gRfuState->timerState = 3; + gSTWIStatus->timerState = 3; break; case 130: *timerL = 0xF7AD; - gRfuState->timerState = 4; + gSTWIStatus->timerState = 4; break; } *timerH = TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_1024CLK; - REG_IF = INTR_FLAG_TIMER0 << gRfuState->timerSelect; + REG_IF = INTR_FLAG_TIMER0 << gSTWIStatus->timerSelect; REG_IME = 1; } static void STWI_stop_timer(void) { - gRfuState->timerState = 0; - REG_TMCNT_L(gRfuState->timerSelect) = 0; - REG_TMCNT_H(gRfuState->timerSelect) = 0; + gSTWIStatus->timerState = 0; + REG_TMCNT_L(gSTWIStatus->timerSelect) = 0; + REG_TMCNT_H(gSTWIStatus->timerSelect) = 0; } static u16 STWI_init(u8 request) { if (!REG_IME) { - gRfuState->error = 6; - if (gRfuState->callbackM != NULL) - gRfuState->callbackM(request, gRfuState->error); + gSTWIStatus->error = ERR_REQ_CMD_IME_DISABLE; + if (gSTWIStatus->callbackM != NULL) + gSTWIStatus->callbackM(request, gSTWIStatus->error); return TRUE; } - else if (gRfuState->unk_2c == TRUE) + else if (gSTWIStatus->unk_2c == TRUE) { - gRfuState->error = 2; - gRfuState->unk_2c = FALSE; - if (gRfuState->callbackM != NULL) - gRfuState->callbackM(request, gRfuState->error); + gSTWIStatus->error = ERR_REQ_CMD_SENDING; + gSTWIStatus->unk_2c = FALSE; + if (gSTWIStatus->callbackM != NULL) + gSTWIStatus->callbackM(request, gSTWIStatus->error); return TRUE; } - else if(!gRfuState->msMode) + else if(!gSTWIStatus->msMode) { - gRfuState->error = 4; - if (gRfuState->callbackM != NULL) - gRfuState->callbackM(request, gRfuState->error, gRfuState); + gSTWIStatus->error = ERR_REQ_CMD_CLOCK_SLAVE; + if (gSTWIStatus->callbackM != NULL) + gSTWIStatus->callbackM(request, gSTWIStatus->error, gSTWIStatus); return TRUE; } else { - gRfuState->unk_2c = TRUE; - gRfuState->reqActiveCommand = request; - gRfuState->state = 0; - gRfuState->reqLength = 0; - gRfuState->reqNext = 0; - gRfuState->ackLength = 0; - gRfuState->ackNext = 0; - gRfuState->ackActiveCommand = 0; - gRfuState->timerState = 0; - gRfuState->timerActive = 0; - gRfuState->error = 0; - gRfuState->recoveryCount = 0; + gSTWIStatus->unk_2c = TRUE; + gSTWIStatus->reqActiveCommand = request; + gSTWIStatus->state = 0; + gSTWIStatus->reqLength = 0; + gSTWIStatus->reqNext = 0; + gSTWIStatus->ackLength = 0; + gSTWIStatus->ackNext = 0; + gSTWIStatus->ackActiveCommand = 0; + gSTWIStatus->timerState = 0; + gSTWIStatus->timerActive = 0; + gSTWIStatus->error = 0; + gSTWIStatus->recoveryCount = 0; REG_RCNT = 0x100; REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; return FALSE; @@ -589,15 +591,15 @@ static s32 STWI_start_Command(void) { u16 imeTemp; - // equivalent to gRfuState->txPacket->rfuPacket32.command, + // equivalent to gSTWIStatus->txPacket->rfuPacket32.command, // but the cast here is required to avoid register issue - *(u32 *)gRfuState->txPacket->rfuPacket8.data = 0x99660000 | (gRfuState->reqLength << 8) | gRfuState->reqActiveCommand; - REG_SIODATA32 = gRfuState->txPacket->rfuPacket32.command; - gRfuState->state = 0; - gRfuState->reqNext = 1; + *(u32 *)gSTWIStatus->txPacket->rfuPacket8.data = 0x99660000 | (gSTWIStatus->reqLength << 8) | gSTWIStatus->reqActiveCommand; + REG_SIODATA32 = gSTWIStatus->txPacket->rfuPacket32.command; + gSTWIStatus->state = 0; + gSTWIStatus->reqNext = 1; imeTemp = REG_IME; REG_IME = 0; - REG_IE |= (INTR_FLAG_TIMER0 << gRfuState->timerSelect); + REG_IE |= (INTR_FLAG_TIMER0 << gSTWIStatus->timerSelect); REG_IE |= INTR_FLAG_SERIAL; REG_IME = imeTemp; REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_MULTI_BUSY | SIO_115200_BPS; @@ -606,27 +608,27 @@ static s32 STWI_start_Command(void) static s32 STWI_restart_Command(void) { - if (gRfuState->recoveryCount <= 1) + if (gSTWIStatus->recoveryCount <= 1) { - ++gRfuState->recoveryCount; + ++gSTWIStatus->recoveryCount; STWI_start_Command(); } else { - if (gRfuState->reqActiveCommand == ID_MS_CHANGE_REQ || gRfuState->reqActiveCommand == ID_DATA_TX_AND_CHANGE_REQ || gRfuState->reqActiveCommand == ID_UNK35_REQ || gRfuState->reqActiveCommand == ID_RESUME_RETRANSMIT_AND_CHANGE_REQ) + if (gSTWIStatus->reqActiveCommand == ID_MS_CHANGE_REQ || gSTWIStatus->reqActiveCommand == ID_DATA_TX_AND_CHANGE_REQ || gSTWIStatus->reqActiveCommand == ID_UNK35_REQ || gSTWIStatus->reqActiveCommand == ID_RESUME_RETRANSMIT_AND_CHANGE_REQ) { - gRfuState->error = 1; - gRfuState->unk_2c = 0; - if (gRfuState->callbackM != NULL) - gRfuState->callbackM(gRfuState->reqActiveCommand, gRfuState->error); + gSTWIStatus->error = ERR_REQ_CMD_CLOCK_DRIFT; + gSTWIStatus->unk_2c = 0; + if (gSTWIStatus->callbackM != NULL) + gSTWIStatus->callbackM(gSTWIStatus->reqActiveCommand, gSTWIStatus->error); } else { - gRfuState->error = 1; - gRfuState->unk_2c = 0; - if (gRfuState->callbackM != NULL) - gRfuState->callbackM(gRfuState->reqActiveCommand, gRfuState->error); - gRfuState->state = 4; // TODO: what's 4 + gSTWIStatus->error = ERR_REQ_CMD_CLOCK_DRIFT; + gSTWIStatus->unk_2c = 0; + if (gSTWIStatus->callbackM != NULL) + gSTWIStatus->callbackM(gSTWIStatus->reqActiveCommand, gSTWIStatus->error); + gSTWIStatus->state = 4; // TODO: what's 4 } } return 0; @@ -634,9 +636,9 @@ static s32 STWI_restart_Command(void) static s32 STWI_reset_ClockCounter(void) { - gRfuState->state = 5; // TODO: what is 5 - gRfuState->reqLength = 0; - gRfuState->reqNext = 0; + gSTWIStatus->state = 5; // TODO: what is 5 + gSTWIStatus->reqLength = 0; + gSTWIStatus->reqNext = 0; REG_SIODATA32 = (1 << 31); REG_SIOCNT = 0; REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; diff --git a/sym_bss.txt b/sym_bss.txt index 06502497e..08f390b01 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -74,7 +74,7 @@ gUnknown_3000FE8: @ 3000FE8 gUnknown_3001188: @ 3001188 .space 0x8 -gUnknown_3001190: @ 3001190 +gRfuAPIBuffer: @ 3001190 .space 0xE68 gUnknown_3001FF8: @ 3001FF8 diff --git a/sym_common.txt b/sym_common.txt index 188981dbe..c50f09540 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -160,6 +160,8 @@ gUnknown_3005E94: @ 3005E94 .include "m4a.o" .include "agb_flash.o" .align 2 + .include "librfu_stwi.o" + .align 4 .include "librfu_rfu.o" .align 4 .include "librfu_s32id.o" -- cgit v1.2.3 From aa9843199592012301931381bd2fe1396fe29c82 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Fri, 10 Jan 2020 04:13:33 +0800 Subject: librfu rodata --- data/librfu_rodata.s | 28 ---------------------------- ld_script.txt | 3 ++- src/librfu_rfu.c | 37 ++++++++++++++++++++++++++----------- src/librfu_s32id.c | 7 ++++--- 4 files changed, 32 insertions(+), 43 deletions(-) delete mode 100644 data/librfu_rodata.s diff --git a/data/librfu_rodata.s b/data/librfu_rodata.s deleted file mode 100644 index e5b15c6c5..000000000 --- a/data/librfu_rodata.s +++ /dev/null @@ -1,28 +0,0 @@ - .section .rodata - - .set VERSION_MAJOR, 1 - .set VERSION_MINOR, 0 - .set VERSION_REVISION, 24 - - .align 2 -_Str_RfuHeader:: - .byte 2, 14, 0, 10, 9, 5, 7, 2 - .byte 0, 15, 1, 3, 3, 0, 31, 0 - .byte 3, 22, 18, 14, 13, 9, 11, 3 - .byte 15, 15, 1, 3, 3, 0, 0x7f, 0 - - @ .ascii "RFU_V1024" - .ascii "RFU_V" - .byte VERSION_MAJOR + 0x30 - .byte VERSION_MINOR + 0x30 - .byte (VERSION_REVISION / 10) + 0x30 - .byte (VERSION_REVISION % 10) + 0x30 - .byte 0 - - .align 2 -_Str_RFU_MBOOT:: - .asciz "RFU-MBOOT" - - .align 2 -_Str_Sio32ID:: - .asciz "NINTENDOSio32ID_030820" diff --git a/ld_script.txt b/ld_script.txt index 0588a613a..614bc4c93 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -940,7 +940,8 @@ SECTIONS { src/agb_flash_1m.o(.rodata); src/agb_flash_mx.o(.rodata); src/agb_flash_le.o(.rodata); - data/librfu_rodata.o(.rodata); + src/librfu_rfu.o(.rodata); + src/librfu_s32id.o(.rodata); src/isagbprn.o(.rodata); *libgcc.a:_divdi3.o(.rodata); *libgcc.a:_udivdi3.o(.rodata); diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index 70d5b4990..96de99c2a 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -1,6 +1,6 @@ #include "librfu.h" -struct RfuHeader +struct LLSFStruct { u8 unk00; u8 unk01; @@ -67,15 +67,30 @@ static void rfu_STC_NI_receive_Sender(u8, u8, const struct RfuLocalStruct *, UNU static void rfu_STC_NI_initSlot_asRecvDataEntity(u8, struct NIComm *); static void rfu_STC_NI_initSlot_asRecvControllData(u8, struct NIComm *); -extern const char _Str_RFU_MBOOT[]; -extern const struct RfuHeader _Str_RfuHeader[2]; - struct RfuSlotStatusUNI *gRfuSlotStatusUNI[RFU_CHILD_MAX]; struct RfuSlotStatusNI *gRfuSlotStatusNI[RFU_CHILD_MAX]; struct RfuLinkStatus *gRfuLinkStatus; struct RfuStatic *gRfuStatic; struct RfuFixed *gRfuFixed; +static const struct LLSFStruct llsf_struct[2] = { + { + 2, 14, 0, 10, 9, 5, 7, 2, + 0, 15, 1, 3, 3, 0x1f + }, { + 3, 22, 18, 14, 13, 9, 11, 3, + 15, 15, 1, 3, 3, 0x7f + } +}; + +#ifdef EMERALD +static const char lib_ver[] = "RFU_V1026"; +#else +static const char lib_ver[] = "RFU_V1024"; +#endif + +static const char str_checkMbootLL[] = "RFU-MBOOT"; + u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam) { u16 i; @@ -264,7 +279,7 @@ u16 rfu_getRFUStatus(u8 *rfuState) u16 rfu_MBOOT_CHILD_inheritanceLinkStatus(void) { - const char *s1 = _Str_RFU_MBOOT; + const char *s1 = str_checkMbootLL; char *s2 = (char *)0x30000F0; u16 checksum; u16 *r2; @@ -1315,7 +1330,7 @@ static u16 rfu_STC_setSendData_org(u8 r6, u8 bmSendSlot, u8 subFrameSize, const r9 = &gRfuLinkStatus->remainLLFrameSizeParent; else if (gRfuLinkStatus->parentChild == MODE_CHILD) r9 = &gRfuLinkStatus->remainLLFrameSizeChild[r2]; - r4 = _Str_RfuHeader[gRfuLinkStatus->parentChild].unk00; + r4 = llsf_struct[gRfuLinkStatus->parentChild].unk00; if (subFrameSize > *r9 || subFrameSize <= r4) return ERR_SUBFRAME_SIZE; sp04 = REG_IME; @@ -1672,7 +1687,7 @@ static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4) u32 sp00; u8 i; u8 *r2; - const struct RfuHeader *r8 = &_Str_RfuHeader[gRfuLinkStatus->parentChild]; + const struct LLSFStruct *r8 = &llsf_struct[gRfuLinkStatus->parentChild]; if (r4->state == SLOT_STATE_SENDING) { @@ -1732,7 +1747,7 @@ static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4) static u16 rfu_STC_UNI_constructLLSF(u8 r8, u8 **r6) { - const struct RfuHeader *r5; + const struct LLSFStruct *r5; const u8 *sp04; u32 sp00; u8 *r2; @@ -1741,7 +1756,7 @@ static u16 rfu_STC_UNI_constructLLSF(u8 r8, u8 **r6) if (!r4->dataReadyFlag || !r4->bmSlot) return 0; - r5 = &_Str_RfuHeader[gRfuLinkStatus->parentChild]; + r5 = &llsf_struct[gRfuLinkStatus->parentChild]; sp00 = (r4->state & 0xF) << r5->unk03 | r4->payloadSize; if (gRfuLinkStatus->parentChild == MODE_PARENT) @@ -1857,13 +1872,13 @@ static void rfu_STC_CHILD_analyzeRecvPacket(void) static u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3) { struct RfuLocalStruct sp00; - const struct RfuHeader *r6; + const struct LLSFStruct *r6; u32 r5; u8 r4; u32 r0; u16 r10; - r6 = &_Str_RfuHeader[~gRfuLinkStatus->parentChild & (MODE_NEUTRAL & MODE_PARENT)]; + r6 = &llsf_struct[~gRfuLinkStatus->parentChild & (MODE_NEUTRAL & MODE_PARENT)]; if (r3 < r6->unk00) return r3; r5 = 0; diff --git a/src/librfu_s32id.c b/src/librfu_s32id.c index 7c99cda2d..ed51dcd12 100644 --- a/src/librfu_s32id.c +++ b/src/librfu_s32id.c @@ -1,13 +1,14 @@ #include "librfu.h" -extern const u16 _Str_Sio32ID[]; - static void Sio32IDIntr(void); static void Sio32IDInit(void); static s32 Sio32IDMain(void); struct RfuS32Id gRfuS32Id; +static const u16 Sio32ConnectionData[] = { 0x494e, 0x544e, 0x4e45, 0x4f44 }; // NINTENDO +static const char Sio32IDLib_Var[] = "Sio32ID_030820"; + s32 AgbRFU_checkID(u8 r5) { u16 r8; @@ -147,7 +148,7 @@ static void Sio32IDIntr(void) } } if (gRfuS32Id.unk2 < 4) - gRfuS32Id.unk4 = *(gRfuS32Id.unk2 + _Str_Sio32ID); + gRfuS32Id.unk4 = *(gRfuS32Id.unk2 + Sio32ConnectionData); else gRfuS32Id.unk4 = 0x8001; gRfuS32Id.unk6 = ~r5; -- cgit v1.2.3 From 5734043a202bb831609736802de615687531f7f3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 9 Jan 2020 15:23:04 -0500 Subject: Document intr flag load in crt0.s --- asm/crt0.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/asm/crt0.s b/asm/crt0.s index 7f9626251..8530a76f5 100644 --- a/asm/crt0.s +++ b/asm/crt0.s @@ -207,7 +207,7 @@ jump_intr: ldr r0, =gSTWIStatus ldr r0, [r0] ldrb r0, [r0, 0xA] - mov r1, 0x8 + mov r1, INTR_FLAG_TIMER0 mov r0, r1, lsl r0 orr r0, r0, INTR_FLAG_GAMEPAK orr r1, r0, INTR_FLAG_SERIAL | INTR_FLAG_TIMER3 | INTR_FLAG_VCOUNT | INTR_FLAG_HBLANK -- cgit v1.2.3 From 3a8006e30cb16cf5ea98f4ae0703ee1d1f3f1c05 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Fri, 10 Jan 2020 06:25:57 +0800 Subject: s32 to sio32 --- common_syms/librfu_s32id.txt | 1 - common_syms/librfu_sio32id.txt | 1 + include/librfu.h | 4 +- ld_script.txt | 4 +- src/librfu_s32id.c | 164 ----------------------------------------- src/librfu_sio32id.c | 164 +++++++++++++++++++++++++++++++++++++++++ sym_common.txt | 2 +- 7 files changed, 170 insertions(+), 170 deletions(-) delete mode 100644 common_syms/librfu_s32id.txt create mode 100644 common_syms/librfu_sio32id.txt delete mode 100644 src/librfu_s32id.c create mode 100644 src/librfu_sio32id.c diff --git a/common_syms/librfu_s32id.txt b/common_syms/librfu_s32id.txt deleted file mode 100644 index 6c24cc4a4..000000000 --- a/common_syms/librfu_s32id.txt +++ /dev/null @@ -1 +0,0 @@ -gRfuS32Id diff --git a/common_syms/librfu_sio32id.txt b/common_syms/librfu_sio32id.txt new file mode 100644 index 000000000..97395e84b --- /dev/null +++ b/common_syms/librfu_sio32id.txt @@ -0,0 +1 @@ +gRfuSIO32Id diff --git a/include/librfu.h b/include/librfu.h index f5a7b4d96..cf409ca69 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -490,7 +490,7 @@ struct RfuStatic u32 totalPacketSize; }; -struct RfuS32Id +struct RfuSIO32Id { u8 unk0; u8 unk1; @@ -517,7 +517,7 @@ extern struct RfuStatic *gRfuStatic; extern struct RfuFixed *gRfuFixed; extern struct RfuSlotStatusNI *gRfuSlotStatusNI[RFU_CHILD_MAX]; extern struct RfuSlotStatusUNI *gRfuSlotStatusUNI[RFU_CHILD_MAX]; -extern struct RfuS32Id gRfuS32Id; +extern struct RfuSIO32Id gRfuSIO32Id; // librfu_s32id s32 AgbRFU_checkID(u8); diff --git a/ld_script.txt b/ld_script.txt index 614bc4c93..c060394f6 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -320,7 +320,7 @@ SECTIONS { src/librfu_stwi.o(.text); asm/librfu_intr.o(.text); src/librfu_rfu.o(.text); - src/librfu_s32id.o(.text); + src/librfu_sio32id.o(.text); src/isagbprn.o(.text); asm/libagbsyscall.o(.text); *libgcc.a:_call_via_rX.o(.text); @@ -941,7 +941,7 @@ SECTIONS { src/agb_flash_mx.o(.rodata); src/agb_flash_le.o(.rodata); src/librfu_rfu.o(.rodata); - src/librfu_s32id.o(.rodata); + src/librfu_sio32id.o(.rodata); src/isagbprn.o(.rodata); *libgcc.a:_divdi3.o(.rodata); *libgcc.a:_udivdi3.o(.rodata); diff --git a/src/librfu_s32id.c b/src/librfu_s32id.c deleted file mode 100644 index ed51dcd12..000000000 --- a/src/librfu_s32id.c +++ /dev/null @@ -1,164 +0,0 @@ -#include "librfu.h" - -static void Sio32IDIntr(void); -static void Sio32IDInit(void); -static s32 Sio32IDMain(void); - -struct RfuS32Id gRfuS32Id; - -static const u16 Sio32ConnectionData[] = { 0x494e, 0x544e, 0x4e45, 0x4f44 }; // NINTENDO -static const char Sio32IDLib_Var[] = "Sio32ID_030820"; - -s32 AgbRFU_checkID(u8 r5) -{ - u16 r8; - vu16 *r4; - s32 r6; - - if (REG_IME == 0) - return -1; - r8 = REG_IE; - gSTWIStatus->state = 10; - STWI_set_Callback_ID(Sio32IDIntr); - Sio32IDInit(); - r4 = ®_TMCNT_L(gSTWIStatus->timerSelect); - r5 *= 8; - while (--r5 != 0xFF) - { - r6 = Sio32IDMain(); - if (r6 != 0) - break; - r4[1] = 0; - r4[0] = 0; - r4[1] = TIMER_1024CLK | TIMER_ENABLE; - while (r4[0] < 32) - ; - r4[1] = 0; - r4[0] = 0; - } - REG_IME = 0; - REG_IE = r8; - REG_IME = 1; - gSTWIStatus->state = 0; - STWI_set_Callback_ID(NULL); - return r6; -} - -static void Sio32IDInit(void) -{ - REG_IME = 0; - REG_IE &= ~((8 << gSTWIStatus->timerSelect) | INTR_FLAG_SERIAL); - REG_IME = 1; - REG_RCNT = 0; - REG_SIOCNT = SIO_32BIT_MODE; - REG_SIOCNT |= SIO_INTR_ENABLE | SIO_ENABLE; - CpuFill32(0, &gRfuS32Id, sizeof(struct RfuS32Id)); - REG_IF = INTR_FLAG_SERIAL; -} - -static s32 Sio32IDMain(void) -{ - u8 r12; - - switch (r12 = gRfuS32Id.unk1) - { - case 0: - gRfuS32Id.unk0 = 1; - REG_SIOCNT |= SIO_38400_BPS; - REG_IME = r12; - REG_IE |= INTR_FLAG_SERIAL; - REG_IME = 1; - gRfuS32Id.unk1 = 1; - *(vu8 *)®_SIOCNT |= SIO_ENABLE; - break; - case 1: - if (gRfuS32Id.unkA == 0) - { - if (gRfuS32Id.unk0 == 1) - { - if (gRfuS32Id.unk2 == 0) - { - REG_IME = gRfuS32Id.unk2; - REG_SIOCNT |= SIO_ENABLE; - REG_IME = r12; - } - } - else if (gRfuS32Id.unk4 != 0x8001 && !gRfuS32Id.unk2) - { - REG_IME = gRfuS32Id.unk2; - REG_IE &= ~INTR_FLAG_SERIAL; - REG_IME = r12; - REG_SIOCNT = gRfuS32Id.unk2; - REG_SIOCNT = SIO_32BIT_MODE; - REG_IF = INTR_FLAG_SERIAL; - REG_SIOCNT |= SIO_INTR_ENABLE | SIO_ENABLE; - REG_IME = gRfuS32Id.unk2; - REG_IE |= INTR_FLAG_SERIAL; - REG_IME = r12; - } - break; - } - else - { - gRfuS32Id.unk1 = 2; - // fallthrough - } - default: - return gRfuS32Id.unkA; - } - return 0; -} - -static void Sio32IDIntr(void) -{ - u32 r5; - u16 r0; -#ifndef NONMATCHING - register u32 r1 asm("r1"); - register u16 r0_ asm("r0"); -#else - u32 r1; - u16 r0_; -#endif - - r5 = REG_SIODATA32; - if (gRfuS32Id.unk0 != 1) - REG_SIOCNT |= SIO_ENABLE; - r1 = 16 * gRfuS32Id.unk0; // to handle side effect of inline asm - r1 = (r5 << r1) >> 16; - r5 = (r5 << 16 * (1 - gRfuS32Id.unk0)) >> 16; - if (gRfuS32Id.unkA == 0) - { - if (r1 == gRfuS32Id.unk6) - { - if (gRfuS32Id.unk2 > 3) - { - gRfuS32Id.unkA = r5; - } - else if (r1 == (u16)~gRfuS32Id.unk4) - { - r0_ = ~gRfuS32Id.unk6; - if (r5 == r0_) - ++gRfuS32Id.unk2; - } - } - else - { - gRfuS32Id.unk2 = gRfuS32Id.unkA; - } - } - if (gRfuS32Id.unk2 < 4) - gRfuS32Id.unk4 = *(gRfuS32Id.unk2 + Sio32ConnectionData); - else - gRfuS32Id.unk4 = 0x8001; - gRfuS32Id.unk6 = ~r5; - REG_SIODATA32 = (gRfuS32Id.unk4 << 16 * (1 - gRfuS32Id.unk0)) - + (gRfuS32Id.unk6 << 16 * gRfuS32Id.unk0); - if (gRfuS32Id.unk0 == 1 && (gRfuS32Id.unk2 || r5 == 0x494E)) - { - for (r0 = 0; r0 < 600; ++r0) - ; - if (gRfuS32Id.unkA == 0) - REG_SIOCNT |= SIO_ENABLE; - } -} diff --git a/src/librfu_sio32id.c b/src/librfu_sio32id.c new file mode 100644 index 000000000..fc5701986 --- /dev/null +++ b/src/librfu_sio32id.c @@ -0,0 +1,164 @@ +#include "librfu.h" + +static void Sio32IDIntr(void); +static void Sio32IDInit(void); +static s32 Sio32IDMain(void); + +struct RfuSIO32Id gRfuSIO32Id; + +static const u16 Sio32ConnectionData[] = { 0x494e, 0x544e, 0x4e45, 0x4f44 }; // NINTENDO +static const char Sio32IDLib_Var[] = "Sio32ID_030820"; + +s32 AgbRFU_checkID(u8 r5) +{ + u16 r8; + vu16 *r4; + s32 r6; + + if (REG_IME == 0) + return -1; + r8 = REG_IE; + gSTWIStatus->state = 10; + STWI_set_Callback_ID(Sio32IDIntr); + Sio32IDInit(); + r4 = ®_TMCNT_L(gSTWIStatus->timerSelect); + r5 *= 8; + while (--r5 != 0xFF) + { + r6 = Sio32IDMain(); + if (r6 != 0) + break; + r4[1] = 0; + r4[0] = 0; + r4[1] = TIMER_1024CLK | TIMER_ENABLE; + while (r4[0] < 32) + ; + r4[1] = 0; + r4[0] = 0; + } + REG_IME = 0; + REG_IE = r8; + REG_IME = 1; + gSTWIStatus->state = 0; + STWI_set_Callback_ID(NULL); + return r6; +} + +static void Sio32IDInit(void) +{ + REG_IME = 0; + REG_IE &= ~((8 << gSTWIStatus->timerSelect) | INTR_FLAG_SERIAL); + REG_IME = 1; + REG_RCNT = 0; + REG_SIOCNT = SIO_32BIT_MODE; + REG_SIOCNT |= SIO_INTR_ENABLE | SIO_ENABLE; + CpuFill32(0, &gRfuSIO32Id, sizeof(struct RfuSIO32Id)); + REG_IF = INTR_FLAG_SERIAL; +} + +static s32 Sio32IDMain(void) +{ + u8 r12; + + switch (r12 = gRfuSIO32Id.unk1) + { + case 0: + gRfuSIO32Id.unk0 = 1; + REG_SIOCNT |= SIO_38400_BPS; + REG_IME = r12; + REG_IE |= INTR_FLAG_SERIAL; + REG_IME = 1; + gRfuSIO32Id.unk1 = 1; + *(vu8 *)®_SIOCNT |= SIO_ENABLE; + break; + case 1: + if (gRfuSIO32Id.unkA == 0) + { + if (gRfuSIO32Id.unk0 == 1) + { + if (gRfuSIO32Id.unk2 == 0) + { + REG_IME = gRfuSIO32Id.unk2; + REG_SIOCNT |= SIO_ENABLE; + REG_IME = r12; + } + } + else if (gRfuSIO32Id.unk4 != 0x8001 && !gRfuSIO32Id.unk2) + { + REG_IME = gRfuSIO32Id.unk2; + REG_IE &= ~INTR_FLAG_SERIAL; + REG_IME = r12; + REG_SIOCNT = gRfuSIO32Id.unk2; + REG_SIOCNT = SIO_32BIT_MODE; + REG_IF = INTR_FLAG_SERIAL; + REG_SIOCNT |= SIO_INTR_ENABLE | SIO_ENABLE; + REG_IME = gRfuSIO32Id.unk2; + REG_IE |= INTR_FLAG_SERIAL; + REG_IME = r12; + } + break; + } + else + { + gRfuSIO32Id.unk1 = 2; + // fallthrough + } + default: + return gRfuSIO32Id.unkA; + } + return 0; +} + +static void Sio32IDIntr(void) +{ + u32 r5; + u16 r0; +#ifndef NONMATCHING + register u32 r1 asm("r1"); + register u16 r0_ asm("r0"); +#else + u32 r1; + u16 r0_; +#endif + + r5 = REG_SIODATA32; + if (gRfuSIO32Id.unk0 != 1) + REG_SIOCNT |= SIO_ENABLE; + r1 = 16 * gRfuSIO32Id.unk0; // to handle side effect of inline asm + r1 = (r5 << r1) >> 16; + r5 = (r5 << 16 * (1 - gRfuSIO32Id.unk0)) >> 16; + if (gRfuSIO32Id.unkA == 0) + { + if (r1 == gRfuSIO32Id.unk6) + { + if (gRfuSIO32Id.unk2 > 3) + { + gRfuSIO32Id.unkA = r5; + } + else if (r1 == (u16)~gRfuSIO32Id.unk4) + { + r0_ = ~gRfuSIO32Id.unk6; + if (r5 == r0_) + ++gRfuSIO32Id.unk2; + } + } + else + { + gRfuSIO32Id.unk2 = gRfuSIO32Id.unkA; + } + } + if (gRfuSIO32Id.unk2 < 4) + gRfuSIO32Id.unk4 = *(gRfuSIO32Id.unk2 + Sio32ConnectionData); + else + gRfuSIO32Id.unk4 = 0x8001; + gRfuSIO32Id.unk6 = ~r5; + REG_SIODATA32 = (gRfuSIO32Id.unk4 << 16 * (1 - gRfuSIO32Id.unk0)) + + (gRfuSIO32Id.unk6 << 16 * gRfuSIO32Id.unk0); + if (gRfuSIO32Id.unk0 == 1 && (gRfuSIO32Id.unk2 || r5 == 0x494E)) + { + for (r0 = 0; r0 < 600; ++r0) + ; + if (gRfuSIO32Id.unkA == 0) + REG_SIOCNT |= SIO_ENABLE; + } +} diff --git a/sym_common.txt b/sym_common.txt index c50f09540..753ce9ebd 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -164,4 +164,4 @@ gUnknown_3005E94: @ 3005E94 .align 4 .include "librfu_rfu.o" .align 4 - .include "librfu_s32id.o" + .include "librfu_sio32id.o" -- cgit v1.2.3 From 514a67edc114ab7772ebd823919b462e0f8c5a9b Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Fri, 10 Jan 2020 07:05:41 +0800 Subject: document rfu_sio32_intr --- asm/librfu_intr.s | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/asm/librfu_intr.s b/asm/librfu_intr.s index 10ee02e7b..2cc761554 100644 --- a/asm/librfu_intr.s +++ b/asm/librfu_intr.s @@ -19,7 +19,7 @@ IntrSIO32: @ 81DFC50 cmp r0, 0 ldmdbeq r11, {r11,sp,lr} bxeq lr - bl sub_81E05AC + bl Callback_Dummy_ID ldmdb r11, {r11,sp,lr} bx lr _081DFC8C: @@ -205,7 +205,7 @@ _081DFEFC: beq _081DFF3C ldrh r1, [r0, 0x12] ldrb r0, [r0, 0x6] - bl sub_81E05A4 + bl Callback_Dummy_M b _081DFF3C .align 2, 0 _081DFF28: .4byte gSTWIStatus @@ -424,7 +424,7 @@ _081E01D0: beq _081E0348 mov r0, 0x1EC add r0, r0, 0x2 - bl sub_81E05A8 + bl Callback_Dummy_S b _081E0348 _081E0244: mov r3, 0x120 @@ -446,7 +446,7 @@ _081E0244: ldrb r0, [r0, 0x6] mov r1, r2 orr r0, r0, r3, lsl 8 - bl sub_81E05A8 + bl Callback_Dummy_S b _081E0348 _081E0298: mov r3, 0x208 @@ -681,17 +681,17 @@ STWI_init_slave: @ 81E0518 _081E05A0: .4byte gSTWIStatus arm_func_end STWI_init_slave - arm_func_start sub_81E05A4 -sub_81E05A4: @ 81E05A4 + arm_func_start Callback_Dummy_M +Callback_Dummy_M: @ 81E05A4 bx r2 - arm_func_end sub_81E05A4 + arm_func_end Callback_Dummy_M - arm_func_start sub_81E05A8 -sub_81E05A8: @ 81E05A8 + arm_func_start Callback_Dummy_S +Callback_Dummy_S: @ 81E05A8 bx r1 - arm_func_end sub_81E05A8 + arm_func_end Callback_Dummy_S - arm_func_start sub_81E05AC -sub_81E05AC: @ 81E05AC + arm_func_start Callback_Dummy_ID +Callback_Dummy_ID: @ 81E05AC bx r0 - arm_func_end sub_81E05AC + arm_func_end Callback_Dummy_ID -- cgit v1.2.3 From 61c6609000743d31e315a678a2b800e3cc74a9df Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Fri, 10 Jan 2020 08:40:17 +0800 Subject: pc_screen_effect --- asm/pc_screen_effect.s | 477 ------------------------------------------------- ld_script.txt | 2 +- src/pc_screen_effect.c | 156 ++++++++++++++++ 3 files changed, 157 insertions(+), 478 deletions(-) delete mode 100644 asm/pc_screen_effect.s create mode 100644 src/pc_screen_effect.c diff --git a/asm/pc_screen_effect.s b/asm/pc_screen_effect.s deleted file mode 100644 index 61c47a719..000000000 --- a/asm/pc_screen_effect.s +++ /dev/null @@ -1,477 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80A0A48 -sub_80A0A48: @ 80A0A48 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r3, r2, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - lsls r3, 24 - lsrs r3, 24 - ldr r0, _080A0A6C @ =sub_80A0B0C - adds r1, r4, 0 - adds r2, r5, 0 - bl sub_80A0AC0 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080A0A6C: .4byte sub_80A0B0C - thumb_func_end sub_80A0A48 - - thumb_func_start sub_80A0A70 -sub_80A0A70: @ 80A0A70 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r3, r2, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - lsls r3, 24 - lsrs r3, 24 - ldr r0, _080A0A94 @ =sub_80A0C78 - adds r1, r4, 0 - adds r2, r5, 0 - bl sub_80A0AC0 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080A0A94: .4byte sub_80A0C78 - thumb_func_end sub_80A0A70 - - thumb_func_start sub_80A0A98 -sub_80A0A98: @ 80A0A98 - push {lr} - ldr r0, _080A0AA8 @ =sub_80A0B0C - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_080A0AA8: .4byte sub_80A0B0C - thumb_func_end sub_80A0A98 - - thumb_func_start sub_80A0AAC -sub_80A0AAC: @ 80A0AAC - push {lr} - ldr r0, _080A0ABC @ =sub_80A0C78 - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_080A0ABC: .4byte sub_80A0C78 - thumb_func_end sub_80A0AAC - - thumb_func_start sub_80A0AC0 -sub_80A0AC0: @ 80A0AC0 - push {r4,r5,lr} - lsls r1, 16 - lsrs r4, r1, 16 - adds r5, r4, 0 - lsls r3, 24 - lsrs r3, 24 - adds r1, r3, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - adds r2, r0, 0 - ldr r1, _080A0B08 @ =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r1, r0, r1 - movs r0, 0 - strh r0, [r1, 0x8] - movs r0, 0x10 - cmp r4, 0 - beq _080A0AEE - adds r0, r4, 0 -_080A0AEE: - strh r0, [r1, 0xA] - movs r0, 0x14 - cmp r5, 0 - beq _080A0AF8 - adds r0, r5, 0 -_080A0AF8: - strh r0, [r1, 0xC] - ldr r1, [r1] - adds r0, r2, 0 - bl _call_via_r1 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080A0B08: .4byte gTasks - thumb_func_end sub_80A0AC0 - - thumb_func_start sub_80A0B0C -sub_80A0B0C: @ 80A0B0C - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080A0B30 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080A0B8C - cmp r0, 0x1 - bgt _080A0B34 - cmp r0, 0 - beq _080A0B3E - b _080A0C5A - .align 2, 0 -_080A0B30: .4byte gTasks -_080A0B34: - cmp r0, 0x2 - beq _080A0BAE - cmp r0, 0x3 - beq _080A0C10 - b _080A0C5A -_080A0B3E: - movs r0, 0x78 - strh r0, [r4, 0xE] - strh r0, [r4, 0x10] - movs r0, 0x50 - strh r0, [r4, 0x12] - movs r0, 0x51 - strh r0, [r4, 0x14] - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl SetGpuRegBits - ldrh r1, [r4, 0xE] - lsls r1, 8 - ldrh r0, [r4, 0x10] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x40 - bl SetGpuReg - ldrh r1, [r4, 0x12] - lsls r1, 8 - ldrh r0, [r4, 0x14] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x44 - bl SetGpuReg - movs r0, 0x48 - movs r1, 0x3F - bl SetGpuReg - movs r0, 0x4A - movs r1, 0 - bl SetGpuReg - b _080A0C6A -_080A0B8C: - movs r0, 0x50 - bl GetGpuReg - strh r0, [r4, 0x16] - movs r0, 0x54 - bl GetGpuReg - strh r0, [r4, 0x18] - movs r0, 0x50 - movs r1, 0xBF - bl SetGpuReg - movs r0, 0x54 - movs r1, 0x10 - bl SetGpuReg - b _080A0C6A -_080A0BAE: - ldrh r0, [r4, 0xE] - ldrh r1, [r4, 0xA] - subs r0, r1 - movs r5, 0 - strh r0, [r4, 0xE] - ldrh r2, [r4, 0x10] - adds r1, r2 - strh r1, [r4, 0x10] - lsls r0, 16 - cmp r0, 0 - ble _080A0BCC - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0xEF - ble _080A0BF2 -_080A0BCC: - strh r5, [r4, 0xE] - movs r0, 0xF0 - strh r0, [r4, 0x10] - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - ldrh r1, [r4, 0x16] - movs r0, 0x50 - bl SetGpuReg - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - movs r2, 0 - bl BlendPalettes - ldr r0, _080A0C0C @ =gPlttBufferFaded - strh r5, [r0] -_080A0BF2: - ldrh r1, [r4, 0xE] - lsls r1, 8 - ldrh r0, [r4, 0x10] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x40 - bl SetGpuReg - movs r1, 0xE - ldrsh r0, [r4, r1] - b _080A0C54 - .align 2, 0 -_080A0C0C: .4byte gPlttBufferFaded -_080A0C10: - ldrh r0, [r4, 0x12] - ldrh r1, [r4, 0xC] - subs r0, r1 - strh r0, [r4, 0x12] - ldrh r2, [r4, 0x14] - adds r1, r2 - strh r1, [r4, 0x14] - lsls r0, 16 - cmp r0, 0 - ble _080A0C2C - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0x9F - ble _080A0C3E -_080A0C2C: - movs r0, 0 - strh r0, [r4, 0x12] - movs r0, 0xA0 - strh r0, [r4, 0x14] - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl ClearGpuRegBits -_080A0C3E: - ldrh r1, [r4, 0x12] - lsls r1, 8 - ldrh r0, [r4, 0x14] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x44 - bl SetGpuReg - movs r1, 0x12 - ldrsh r0, [r4, r1] -_080A0C54: - cmp r0, 0 - bne _080A0C70 - b _080A0C6A -_080A0C5A: - ldrh r1, [r4, 0x16] - movs r0, 0x50 - bl SetGpuReg - adds r0, r5, 0 - bl DestroyTask - b _080A0C70 -_080A0C6A: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080A0C70: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80A0B0C - - thumb_func_start sub_80A0C78 -sub_80A0C78: @ 80A0C78 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080A0C9C @ =gTasks - adds r4, r0, r1 - movs r0, 0x8 - ldrsh r1, [r4, r0] - cmp r1, 0x1 - beq _080A0CB4 - cmp r1, 0x1 - bgt _080A0CA0 - cmp r1, 0 - beq _080A0CAA - b _080A0DA8 - .align 2, 0 -_080A0C9C: .4byte gTasks -_080A0CA0: - cmp r1, 0x2 - beq _080A0D02 - cmp r1, 0x3 - beq _080A0D54 - b _080A0DA8 -_080A0CAA: - ldr r0, _080A0CB0 @ =gPlttBufferFaded - strh r1, [r0] - b _080A0DCA - .align 2, 0 -_080A0CB0: .4byte gPlttBufferFaded -_080A0CB4: - movs r1, 0 - strh r1, [r4, 0xE] - movs r0, 0xF0 - strh r0, [r4, 0x10] - strh r1, [r4, 0x12] - movs r0, 0xA0 - strh r0, [r4, 0x14] - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl SetGpuRegBits - ldrh r1, [r4, 0xE] - lsls r1, 8 - ldrh r0, [r4, 0x10] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x40 - bl SetGpuReg - ldrh r1, [r4, 0x12] - lsls r1, 8 - ldrh r0, [r4, 0x14] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x44 - bl SetGpuReg - movs r0, 0x48 - movs r1, 0x3F - bl SetGpuReg - movs r0, 0x4A - movs r1, 0 - bl SetGpuReg - b _080A0DCA -_080A0D02: - ldrh r0, [r4, 0xC] - ldrh r2, [r4, 0x12] - adds r1, r0, r2 - strh r1, [r4, 0x12] - ldrh r2, [r4, 0x14] - subs r0, r2, r0 - strh r0, [r4, 0x14] - lsls r1, 16 - asrs r1, 16 - cmp r1, 0x4F - bgt _080A0D20 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x51 - bgt _080A0D38 -_080A0D20: - movs r0, 0x50 - strh r0, [r4, 0x12] - movs r0, 0x51 - strh r0, [r4, 0x14] - movs r0, 0x50 - movs r1, 0xBF - bl SetGpuReg - movs r0, 0x54 - movs r1, 0x10 - bl SetGpuReg -_080A0D38: - ldrh r1, [r4, 0x12] - lsls r1, 8 - ldrh r0, [r4, 0x14] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x44 - bl SetGpuReg - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r0, 0x50 - bne _080A0DD0 - b _080A0DCA -_080A0D54: - ldrh r0, [r4, 0xA] - ldrh r2, [r4, 0xE] - adds r1, r0, r2 - strh r1, [r4, 0xE] - ldrh r2, [r4, 0x10] - subs r0, r2, r0 - strh r0, [r4, 0x10] - lsls r1, 16 - asrs r1, 16 - cmp r1, 0x77 - bgt _080A0D72 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x78 - bgt _080A0D88 -_080A0D72: - movs r0, 0x78 - strh r0, [r4, 0xE] - strh r0, [r4, 0x10] - subs r0, 0x79 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - ldr r1, _080A0DA4 @ =gPlttBufferFaded - movs r0, 0 - strh r0, [r1] -_080A0D88: - ldrh r1, [r4, 0xE] - lsls r1, 8 - ldrh r0, [r4, 0x10] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x40 - bl SetGpuReg - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, 0x78 - bne _080A0DD0 - b _080A0DCA - .align 2, 0 -_080A0DA4: .4byte gPlttBufferFaded -_080A0DA8: - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl ClearGpuRegBits - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - adds r0, r5, 0 - bl DestroyTask - b _080A0DD0 -_080A0DCA: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080A0DD0: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80A0C78 - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 614bc4c93..3981d9abe 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -148,7 +148,7 @@ SECTIONS { asm/script_pokemon_util_80A0058.o(.text); src/field_poison.o(.text); src/pokemon_size_record.o(.text); - asm/pc_screen_effect.o(.text); + src/pc_screen_effect.o(.text); src/fldeff_poison.o(.text); src/fldeff_berrytree.o(.text); src/field_special_scene.o(.text); diff --git a/src/pc_screen_effect.c b/src/pc_screen_effect.c new file mode 100644 index 000000000..5cc09df71 --- /dev/null +++ b/src/pc_screen_effect.c @@ -0,0 +1,156 @@ +#include "global.h" +#include "task.h" +#include "gpu_regs.h" +#include "palette.h" + +static void sub_80A0AC0(TaskFunc func, u16 a2, UNUSED u16 a3, u8 priority); +static void sub_80A0B0C(u8 taskId); +static void sub_80A0C78(u8 taskId); + +void sub_80A0A48(u16 a1, u16 a2, u8 a3) +{ + sub_80A0AC0(sub_80A0B0C, a1, a2, a3); +} + +void sub_80A0A70(u16 a1, u16 a2, u8 a3) +{ + sub_80A0AC0(sub_80A0C78, a1, a2, a3); +} + +bool8 sub_80A0A98(void) +{ + return FuncIsActiveTask(sub_80A0B0C); +} + +bool8 sub_80A0AAC(void) +{ + return FuncIsActiveTask(sub_80A0C78); +} + +static void sub_80A0AC0(TaskFunc func, u16 a2, UNUSED u16 a3, u8 priority) +{ + u8 taskId = CreateTask(func, priority); + + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = a2 == 0 ? 16 : a2; + gTasks[taskId].data[2] = a2 == 0 ? 20 : a2; + gTasks[taskId].func(taskId); +} + +static void sub_80A0B0C(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[3] = 120; + task->data[4] = 120; + task->data[5] = 80; + task->data[6] = 81; + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4])); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6])); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR); + SetGpuReg(REG_OFFSET_WINOUT, 0); + break; + case 1: + task->data[7] = GetGpuReg(REG_OFFSET_BLDCNT); + task->data[8] = GetGpuReg(REG_OFFSET_BLDY); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_LIGHTEN); + SetGpuReg(REG_OFFSET_BLDY, 16); + break; + case 2: + task->data[3] -= task->data[1]; + task->data[4] += task->data[1]; + if (task->data[3] <= 0 || task->data[4] >= DISPLAY_WIDTH) + { + task->data[3] = 0; + task->data[4] = DISPLAY_WIDTH; + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuReg(REG_OFFSET_BLDCNT, task->data[7]); + BlendPalettes(0xFFFFFFFF, 0, RGB_BLACK); + gPlttBufferFaded[0] = 0; + } + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4])); + if (task->data[3]) + return; + break; + case 3: + task->data[5] -= task->data[2]; + task->data[6] += task->data[2]; + if (task->data[5] <= 0 || task->data[6] >= DISPLAY_HEIGHT) + { + task->data[5] = 0; + task->data[6] = DISPLAY_HEIGHT; + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + } + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6])); + if (task->data[5]) + return; + break; + default: + SetGpuReg(REG_OFFSET_BLDCNT, task->data[7]); + DestroyTask(taskId); + return; + } + ++task->data[0]; +} + +static void sub_80A0C78(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + gPlttBufferFaded[0] = 0; + break; + case 1: + task->data[3] = 0; + task->data[4] = DISPLAY_WIDTH; + task->data[5] = 0; + task->data[6] = DISPLAY_HEIGHT; + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4])); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6])); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR); + SetGpuReg(REG_OFFSET_WINOUT, 0); + break; + case 2: + task->data[5] += task->data[2]; + task->data[6] -= task->data[2]; + if (task->data[5] >= 80 || task->data[6] <= 81) + { + task->data[5] = 80; + task->data[6] = 81; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_LIGHTEN); + SetGpuReg(REG_OFFSET_BLDY, 16); + } + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6])); + if (task->data[5] != 80) + return; + break; + case 3: + task->data[3] += task->data[1]; + task->data[4] -= task->data[1]; + if (task->data[3] >= 120 || task->data[4] <= 120) + { + task->data[3] = 120; + task->data[4] = 120; + BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK); + gPlttBufferFaded[0] = 0; + } + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4])); + if (task->data[3] != 120) + return; + break; + default: + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + DestroyTask(taskId); + return; + } + ++task->data[0]; +} -- cgit v1.2.3 From dd381f49827a1e08b460336cf3bc496961d3eaec Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Fri, 10 Jan 2020 14:12:32 +0800 Subject: use headers in main.c --- include/intro.h | 1 + include/link.h | 2 ++ include/link_rfu.h | 2 ++ include/load_save.h | 2 ++ include/m4a.h | 1 + include/overworld.h | 2 ++ include/save_failed_screen.h | 2 ++ include/text.h | 1 - src/main.c | 57 +++++++++++++------------------------------- 9 files changed, 29 insertions(+), 41 deletions(-) diff --git a/include/intro.h b/include/intro.h index f01c81a9e..19cdcd032 100644 --- a/include/intro.h +++ b/include/intro.h @@ -2,5 +2,6 @@ #define GUARD_INTRO_H void sub_80EC864(void); +void c2_copyright_1(void); #endif //GUARD_INTRO_H diff --git a/include/link.h b/include/link.h index 9465f0404..d61152d8a 100644 --- a/include/link.h +++ b/include/link.h @@ -259,5 +259,7 @@ void sub_80FA42C(void); void sub_800B284(struct LinkPlayer * linkPlayer); bool8 IsWirelessAdapterConnected(void); bool8 sub_800A474(u8 a0); +void LinkVSync(void); +bool8 HandleLinkConnection(void); #endif // GUARD_LINK_H diff --git a/include/link_rfu.h b/include/link_rfu.h index d1bc2b2bc..033f4c8d4 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -46,6 +46,8 @@ void sub_80FBB20(void); bool8 sub_80FA484(bool32 a0); void var_800D_set_xB(void); struct UnkLinkRfuStruct_02022B14 *sub_80F9800(void); +void sub_80FCF34(void); +void InitRFU(void); #include "mevent_server.h" extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[]; diff --git a/include/load_save.h b/include/load_save.h index 10d1083a8..20df691e5 100644 --- a/include/load_save.h +++ b/include/load_save.h @@ -4,6 +4,8 @@ #include "global.h" extern bool32 gFlashMemoryPresent; +extern struct SaveBlock1 gSaveBlock1; +extern struct SaveBlock2 gSaveBlock2; void ClearSav2(void); void ClearSav1(void); diff --git a/include/m4a.h b/include/m4a.h index 2bb7f2124..ee23d917a 100644 --- a/include/m4a.h +++ b/include/m4a.h @@ -9,6 +9,7 @@ extern struct MusicPlayerInfo gMPlayInfo_BGM; extern struct MusicPlayerInfo gMPlayInfo_SE1; extern struct MusicPlayerInfo gMPlayInfo_SE2; extern struct MusicPlayerInfo gMPlayInfo_SE3; +extern struct SoundInfo gSoundInfo; void m4aSoundVSync(void); void m4aSoundVSyncOn(void); diff --git a/include/overworld.h b/include/overworld.h index 324150779..69c1e964f 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -150,5 +150,7 @@ void sub_8055738(u8 loc); void sub_8056078(void *, void *); void sub_805546C(u8 a0); +bool32 sub_80582E0(void); +bool32 sub_8058274(void); #endif //GUARD_OVERWORLD_H diff --git a/include/save_failed_screen.h b/include/save_failed_screen.h index feffa2014..5950430d2 100644 --- a/include/save_failed_screen.h +++ b/include/save_failed_screen.h @@ -2,5 +2,7 @@ #define GUARD_SAVE_FAILED_SCREEN_H extern void DoSaveFailedScreen(u8 saveType); // save_failed_screen +void sub_80F50F4(void); +bool32 sub_80F5118(void); #endif //GUARD_SAVE_FAILED_SCREEN_H diff --git a/include/text.h b/include/text.h index 578a0d735..a15b42c92 100644 --- a/include/text.h +++ b/include/text.h @@ -255,7 +255,6 @@ u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y); u8 GetKeypadIconTileOffset(u8 keypadIconId); u8 GetKeypadIconWidth(u8 keypadIconId); u8 GetKeypadIconHeight(u8 keypadIconId); -void SetDefaultFontsPointer(void); u8 GetFontAttribute(u8 fontId, u8 attributeId); u8 GetMenuCursorDimensionByFont(u8 fontId, u8 whichDimension); void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese); diff --git a/src/main.c b/src/main.c index 60f762a62..5d2db95be 100644 --- a/src/main.c +++ b/src/main.c @@ -1,4 +1,9 @@ #include "global.h" +#include "bg.h" +#include "gpu_regs.h" +#include "link.h" +#include "link_rfu.h" +#include "load_save.h" #include "main.h" #include "m4a.h" #include "random.h" @@ -6,48 +11,20 @@ #include "gba/flash_internal.h" #include "battle.h" #include "help_system.h" +#include "sound.h" +#include "new_menu_helpers.h" +#include "malloc.h" +#include "overworld.h" +#include "sprite.h" +#include "play_time.h" +#include "pokemon.h" +#include "intro.h" +#include "battle_controllers.h" +#include "scanline_effect.h" +#include "save_failed_screen.h" +#include "battle.h" -extern u16 GetGpuReg(u8); -extern void SetGpuReg(u8, u16); -extern void RFUVSync(void); -extern void LinkVSync(void); -extern void sub_80FCF34(void); -extern void LinkVSync(void); -extern void InitGpuRegManager(void); -extern void InitRFU(void); -extern void CheckForFlashMemory(void); -extern void InitMapMusic(void); -extern void ResetBgs(void); -extern void SetDefaultFontsPointer(void); -extern void InitHeap(void *heapStart, u32 heapSize); // malloc.h -extern void rfu_REQ_stopMode(void); -extern void rfu_waitREQComplete(void); -extern bool32 sub_80582E0(void); -extern bool32 sub_8058274(void); -extern void ClearSpriteCopyRequests(void); -extern void PlayTimeCounter_Update(void); -extern void MapMusicMain(void); -extern void EnableInterrupts(u16); -extern void sub_800DD28(void); -extern u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void)); -extern void ScanlineEffect_Stop(void); -extern void sub_80F50F4(void); -extern bool32 sub_80F5118(void); - -extern struct SoundInfo gSoundInfo; -extern u32 gFlashMemoryPresent; extern u32 intr_main[]; -extern u8 gHeap[]; -extern struct SaveBlock1 gSaveBlock1; -extern struct SaveBlock2 gSaveBlock2; -extern struct PokemonStorage gPokemonStorage; -extern u32 gBattleTypeFlags; -extern u8 gUnknown_03002748; -extern u32 *gUnknown_0203CF5C; - -void Timer3Intr(void); -bool8 HandleLinkConnection(void); -void c2_copyright_1(void); static void VBlankIntr(void); static void HBlankIntr(void); -- cgit v1.2.3 From e300f2ece0bd3c5c0967ac635a48ccd8ef13cf50 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Fri, 10 Jan 2020 12:56:31 +0800 Subject: script_pokemon_util_80BF8FC --- asm/script_pokemon_util_80BF8FC.s | 422 ------------------------------- data/maps/FuchsiaCity_House3/scripts.inc | 12 +- data/maps/TwoIsland_House/scripts.inc | 4 +- data/specials.inc | 12 +- include/pokemon.h | 1 + include/pokemon_summary_screen.h | 1 + include/script_pokemon_80F8.h | 12 - include/script_pokemon_81B9.h | 8 - include/script_pokemon_util_80A0058.h | 1 + ld_script.txt | 2 +- src/party_menu_specials.c | 111 ++++++++ src/scrcmd.c | 1 - 12 files changed, 129 insertions(+), 458 deletions(-) delete mode 100644 asm/script_pokemon_util_80BF8FC.s delete mode 100644 include/script_pokemon_80F8.h delete mode 100644 include/script_pokemon_81B9.h create mode 100644 src/party_menu_specials.c diff --git a/asm/script_pokemon_util_80BF8FC.s b/asm/script_pokemon_util_80BF8FC.s deleted file mode 100644 index a909758c2..000000000 --- a/asm/script_pokemon_util_80BF8FC.s +++ /dev/null @@ -1,422 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Special_ChooseMonFromParty -Special_ChooseMonFromParty: @ 80BF8FC - push {lr} - sub sp, 0x4 - bl ScriptContext2_Enable - ldr r0, _080BF934 @ =sub_80BF97C - movs r1, 0xA - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080BF938 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0 - movs r0, 0x3 - strh r0, [r1, 0x8] - subs r0, 0x4 - str r2, [sp] - movs r1, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_080BF934: .4byte sub_80BF97C -_080BF938: .4byte gTasks - thumb_func_end Special_ChooseMonFromParty - - thumb_func_start SelectMoveTutorMon -SelectMoveTutorMon: @ 80BF93C - push {lr} - sub sp, 0x4 - bl ScriptContext2_Enable - ldr r0, _080BF974 @ =sub_80BF97C - movs r1, 0xA - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080BF978 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0 - movs r0, 0x7 - strh r0, [r1, 0x8] - subs r0, 0x8 - str r2, [sp] - movs r1, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_080BF974: .4byte sub_80BF97C -_080BF978: .4byte gTasks - thumb_func_end SelectMoveTutorMon - - thumb_func_start sub_80BF97C -sub_80BF97C: @ 80BF97C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r2, _080BF9B4 @ =gPaletteFade - ldrb r1, [r2, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080BF9AC - ldrb r0, [r2, 0x8] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2, 0x8] - ldr r1, _080BF9B8 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldrb r0, [r0, 0x8] - bl ChoosePartyMonByMenuType - adds r0, r4, 0 - bl DestroyTask -_080BF9AC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080BF9B4: .4byte gPaletteFade -_080BF9B8: .4byte gTasks - thumb_func_end sub_80BF97C - - thumb_func_start SelectMove -SelectMove: @ 80BF9BC - push {r4,lr} - sub sp, 0x4 - ldr r0, _080BF9F0 @ =gPlayerParty - ldr r1, _080BF9F4 @ =gSpecialVar_0x8004 - ldrb r1, [r1] - ldr r2, _080BF9F8 @ =gPlayerPartyCount - ldrb r2, [r2] - subs r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - ldr r3, _080BF9FC @ =CB2_ReturnToField - movs r4, 0 - str r4, [sp] - bl ShowSelectMovePokemonSummaryScreen - movs r0, 0x3 - bl sub_8138B38 - ldr r1, _080BFA00 @ =gFieldCallback - ldr r0, _080BFA04 @ =FieldCallback_ReturnToEventScript2 - str r0, [r1] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080BF9F0: .4byte gPlayerParty -_080BF9F4: .4byte gSpecialVar_0x8004 -_080BF9F8: .4byte gPlayerPartyCount -_080BF9FC: .4byte CB2_ReturnToField -_080BFA00: .4byte gFieldCallback -_080BFA04: .4byte FieldCallback_ReturnToEventScript2 - thumb_func_end SelectMove - - thumb_func_start ScrSpecial_CountPokemonMoves -ScrSpecial_CountPokemonMoves: @ 80BFA08 - push {r4,r5,lr} - ldr r1, _080BFA44 @ =gSpecialVar_Result - movs r0, 0 - strh r0, [r1] - movs r4, 0 - adds r5, r1, 0 -_080BFA14: - ldr r0, _080BFA48 @ =gSpecialVar_0x8004 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080BFA4C @ =gPlayerParty - adds r0, r1 - adds r1, r4, 0 - adds r1, 0xD - bl GetMonData - cmp r0, 0 - beq _080BFA32 - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] -_080BFA32: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _080BFA14 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080BFA44: .4byte gSpecialVar_Result -_080BFA48: .4byte gSpecialVar_0x8004 -_080BFA4C: .4byte gPlayerParty - thumb_func_end ScrSpecial_CountPokemonMoves - - thumb_func_start ScrSpecial_GetPokemonNicknameAndMoveName -ScrSpecial_GetPokemonNicknameAndMoveName: @ 80BFA50 - push {r4,r5,lr} - ldr r0, _080BFA90 @ =gSpecialVar_0x8004 - ldrh r1, [r0] - movs r0, 0x64 - adds r5, r1, 0 - muls r5, r0 - ldr r0, _080BFA94 @ =gPlayerParty - adds r5, r0 - ldr r0, _080BFA98 @ =gSpecialVar_0x8005 - ldrh r1, [r0] - adds r1, 0xD - adds r0, r5, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - ldr r1, _080BFA9C @ =gStringVar1 - adds r0, r5, 0 - bl GetMonNickname - ldr r0, _080BFAA0 @ =gStringVar2 - movs r1, 0xD - muls r1, r4 - ldr r2, _080BFAA4 @ =gMoveNames - adds r1, r2 - bl StringCopy - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080BFA90: .4byte gSpecialVar_0x8004 -_080BFA94: .4byte gPlayerParty -_080BFA98: .4byte gSpecialVar_0x8005 -_080BFA9C: .4byte gStringVar1 -_080BFAA0: .4byte gStringVar2 -_080BFAA4: .4byte gMoveNames - thumb_func_end ScrSpecial_GetPokemonNicknameAndMoveName - - thumb_func_start sub_80BFAA8 -sub_80BFAA8: @ 80BFAA8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x20 - mov r8, r0 - adds r5, r1, 0 - adds r4, r2, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - adds r0, 0xD - str r0, [sp, 0x8] - mov r0, r8 - ldr r1, [sp, 0x8] - bl GetMonData - mov r1, sp - adds r1, 0x2 - str r1, [sp, 0x14] - strh r0, [r1] - adds r3, r4, 0 - adds r3, 0xD - str r3, [sp, 0xC] - mov r0, r8 - adds r1, r3, 0 - bl GetMonData - mov r1, sp - strh r0, [r1] - adds r7, r5, 0 - adds r7, 0x11 - str r7, [sp, 0x10] - mov r0, r8 - adds r1, r7, 0 - bl GetMonData - mov r1, sp - adds r1, 0x5 - str r1, [sp, 0x18] - strb r0, [r1] - adds r3, r4, 0 - adds r3, 0x11 - str r3, [sp, 0x1C] - mov r0, r8 - adds r1, r3, 0 - bl GetMonData - add r7, sp, 0x4 - mov r10, r7 - strb r0, [r7] - mov r0, r8 - movs r1, 0x15 - bl GetMonData - mov r6, sp - adds r6, 0x6 - strb r0, [r6] - ldr r1, _080BFBA4 @ =gPPUpGetMask - adds r0, r5, r1 - ldrb r0, [r0] - mov r9, r0 - ldrb r0, [r6] - adds r2, r0, 0 - mov r3, r9 - ands r2, r3 - lsls r5, 1 - asrs r2, r5 - lsls r2, 24 - lsrs r2, 24 - adds r1, r4, r1 - ldrb r3, [r1] - adds r1, r0, 0 - ands r1, r3 - lsls r4, 1 - asrs r1, r4 - lsls r1, 24 - lsrs r1, 24 - mov r7, r9 - bics r0, r7 - strb r0, [r6] - ldrb r0, [r6] - bics r0, r3 - strb r0, [r6] - lsls r2, r4 - lsls r1, r5 - adds r2, r1 - ldrb r0, [r6] - orrs r0, r2 - strb r0, [r6] - mov r0, r8 - ldr r1, [sp, 0x8] - mov r2, sp - bl SetMonData - mov r0, r8 - ldr r1, [sp, 0xC] - ldr r2, [sp, 0x14] - bl SetMonData - mov r0, r8 - ldr r1, [sp, 0x10] - mov r2, r10 - bl SetMonData - mov r0, r8 - ldr r1, [sp, 0x1C] - ldr r2, [sp, 0x18] - bl SetMonData - mov r0, r8 - movs r1, 0x15 - adds r2, r6, 0 - bl SetMonData - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080BFBA4: .4byte gPPUpGetMask - thumb_func_end sub_80BFAA8 - - thumb_func_start DeleteMonMove -DeleteMonMove: @ 80BFBA8 - push {r4-r6,lr} - mov r6, r8 - push {r6} - ldr r0, _080BFC08 @ =gSpecialVar_0x8004 - mov r8, r0 - ldrh r0, [r0] - movs r6, 0x64 - muls r0, r6 - ldr r5, _080BFC0C @ =gPlayerParty - adds r0, r5 - ldr r4, _080BFC10 @ =gSpecialVar_0x8005 - ldrb r2, [r4] - movs r1, 0 - bl SetMonMoveSlot - mov r1, r8 - ldrh r0, [r1] - muls r0, r6 - adds r0, r5 - ldrb r1, [r4] - bl RemoveMonPPBonus - ldrh r4, [r4] - cmp r4, 0x2 - bhi _080BFBFC -_080BFBDA: - ldr r0, _080BFC08 @ =gSpecialVar_0x8004 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080BFC0C @ =gPlayerParty - adds r0, r1 - lsls r1, r4, 24 - lsrs r1, 24 - adds r4, 0x1 - lsls r2, r4, 24 - lsrs r2, 24 - bl sub_80BFAA8 - lsls r4, 16 - lsrs r4, 16 - cmp r4, 0x2 - bls _080BFBDA -_080BFBFC: - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080BFC08: .4byte gSpecialVar_0x8004 -_080BFC0C: .4byte gPlayerParty -_080BFC10: .4byte gSpecialVar_0x8005 - thumb_func_end DeleteMonMove - - thumb_func_start IsSelectedMonEgg -IsSelectedMonEgg: @ 80BFC14 - push {lr} - ldr r0, _080BFC38 @ =gSpecialVar_0x8004 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080BFC3C @ =gPlayerParty - adds r0, r1 - movs r1, 0x2D - bl GetMonData - adds r1, r0, 0 - cmp r1, 0 - beq _080BFC44 - ldr r1, _080BFC40 @ =gSpecialVar_Result - movs r0, 0x1 - strh r0, [r1] - b _080BFC48 - .align 2, 0 -_080BFC38: .4byte gSpecialVar_0x8004 -_080BFC3C: .4byte gPlayerParty -_080BFC40: .4byte gSpecialVar_Result -_080BFC44: - ldr r0, _080BFC4C @ =gSpecialVar_Result - strh r1, [r0] -_080BFC48: - pop {r0} - bx r0 - .align 2, 0 -_080BFC4C: .4byte gSpecialVar_Result - thumb_func_end IsSelectedMonEgg - - .align 2, 0 @ Don't pad with nop. diff --git a/data/maps/FuchsiaCity_House3/scripts.inc b/data/maps/FuchsiaCity_House3/scripts.inc index da4f19e60..dfbfd1365 100644 --- a/data/maps/FuchsiaCity_House3/scripts.inc +++ b/data/maps/FuchsiaCity_House3/scripts.inc @@ -16,19 +16,19 @@ EventScript_16D8B0:: @ 816D8B0 waitstate compare_var_to_value VAR_0x8004, 6 goto_if ge, EventScript_16D941 - special IsSelectedMonEgg + special Special_IsSelectedMonEgg compare_var_to_value VAR_RESULT, 1 goto_if eq, EventScript_16D937 - special ScrSpecial_CountPokemonMoves + special Special_GetNumMovesSelectedMonHas compare_var_to_value VAR_RESULT, 1 goto_if eq, EventScript_16D92A msgbox gUnknown_8199445 fadescreen 1 - special SelectMove + special Special_SelectMove fadescreen 0 compare_var_to_value VAR_0x8005, 4 goto_if eq, EventScript_16D8B0 - special ScrSpecial_GetPokemonNicknameAndMoveName + special Special_BufferMoveDeleterNicknameAndMove msgbox gUnknown_8199485, MSGBOX_YESNO compare_var_to_value VAR_RESULT, 1 goto_if eq, EventScript_16D919 @@ -36,7 +36,7 @@ EventScript_16D8B0:: @ 816D8B0 end EventScript_16D919:: @ 816D919 - special DeleteMonMove + special Special_MoveDeleterForgetMove playfanfare MUS_ME_WASURE waitfanfare msgbox gUnknown_81994B1 @@ -44,7 +44,7 @@ EventScript_16D919:: @ 816D919 end EventScript_16D92A:: @ 816D92A - special ScrSpecial_GetPokemonNicknameAndMoveName + special Special_BufferMoveDeleterNicknameAndMove msgbox gUnknown_8199465 release end diff --git a/data/maps/TwoIsland_House/scripts.inc b/data/maps/TwoIsland_House/scripts.inc index 40c68cb7e..3841620b0 100644 --- a/data/maps/TwoIsland_House/scripts.inc +++ b/data/maps/TwoIsland_House/scripts.inc @@ -53,11 +53,11 @@ EventScript_1716A5:: @ 81716A5 EventScript_1716BE:: @ 81716BE msgbox gUnknown_81A2CC3 - special SelectMoveTutorMon + special Special_SelectMoveTutorMon waitstate compare_var_to_value VAR_0x8004, 6 goto_if ge, EventScript_17179E - special IsSelectedMonEgg + special Special_IsSelectedMonEgg compare_var_to_value VAR_RESULT, 1 goto_if eq, EventScript_171790 compare_var_to_value VAR_0x8005, 0 diff --git a/data/specials.inc b/data/specials.inc index f7ca055ef..922d9677e 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -227,11 +227,11 @@ gSpecials:: @ 815FD60 def_special Special_GetElevatorFloor def_special nullsub_75 def_special nullsub_75 - def_special SelectMoveTutorMon - def_special SelectMove - def_special DeleteMonMove - def_special ScrSpecial_GetPokemonNicknameAndMoveName - def_special ScrSpecial_CountPokemonMoves + def_special Special_SelectMoveTutorMon + def_special Special_SelectMove + def_special Special_MoveDeleterForgetMove + def_special Special_BufferMoveDeleterNicknameAndMove + def_special Special_GetNumMovesSelectedMonHas def_special DisplayMoveTutorMenu def_special nullsub_75 def_special nullsub_75 @@ -336,7 +336,7 @@ gSpecials:: @ 815FD60 def_special nullsub_75 def_special nullsub_75 def_special Special_GetSpeciesOfPartySlot_x8004 - def_special IsSelectedMonEgg + def_special Special_IsSelectedMonEgg def_special nullsub_75 def_special nullsub_75 def_special LoadPlayerBag diff --git a/include/pokemon.h b/include/pokemon.h index 7bc1239f1..999879880 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -513,6 +513,7 @@ extern const u16 *const gLevelUpLearnsets[]; extern const u8 gFacilityClassToPicIndex[]; extern const u8 gFacilityClassToTrainerClass[]; extern const struct SpriteTemplate gUnknown_825DEF0[]; +extern const u8 gPPUpGetMask[]; void ZeroBoxMonData(struct BoxPokemon *boxMon); void ZeroMonData(struct Pokemon *mon); diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h index 3695d46df..2b8f96316 100644 --- a/include/pokemon_summary_screen.h +++ b/include/pokemon_summary_screen.h @@ -34,5 +34,6 @@ enum PokemonSummaryScreenPage s32 GetLastViewedMonIndex(void); void ShowPokemonSummaryScreen(struct Pokemon * party, u8 cursorPos, u8 lastIdx, void (*callback)(void), u8 a4); +void sub_8138B38(u8); #endif // GUARD_POKEMON_SUMMARY_SCREEN_H diff --git a/include/script_pokemon_80F8.h b/include/script_pokemon_80F8.h deleted file mode 100644 index 8a5bb12e1..000000000 --- a/include/script_pokemon_80F8.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef GUARD_SCRIPTPOKE80F8_H -#define GUARD_SCRIPTPOKE80F8_H - -#include "global.h" - -void ShowContestWinner(void); -u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8); -u8 ScriptGiveEgg(u16); -void CreateScriptedWildMon(u16, u8, u16); -void ScriptSetMonMoveSlot(u8, u16, u8); - -#endif diff --git a/include/script_pokemon_81B9.h b/include/script_pokemon_81B9.h deleted file mode 100644 index d49095fcc..000000000 --- a/include/script_pokemon_81B9.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef GUARD_SCRIPTPOKE81B9_H -#define GUARD_SCRIPTPOKE81B9_H - -#include "global.h" - -void sub_81B9404(void); - -#endif diff --git a/include/script_pokemon_util_80A0058.h b/include/script_pokemon_util_80A0058.h index b63a7b0ef..75e826e93 100644 --- a/include/script_pokemon_util_80A0058.h +++ b/include/script_pokemon_util_80A0058.h @@ -6,5 +6,6 @@ bool8 ScriptGiveEgg(u16 species); void ScriptSetMonMoveSlot(u8 partyIdx, u16 move, u8 slot); void sp000_heal_pokemon(void); void ReducePlayerPartyToThree(void); +void CreateScriptedWildMon(u16 species, u8 level, u16 item); #endif //GUARD_SCRIPT_POKEMON_UTIL_80A0058_H diff --git a/ld_script.txt b/ld_script.txt index 614bc4c93..a24e1a406 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -178,7 +178,7 @@ SECTIONS { src/mon_markings.o(.text); src/mail.o(.text); src/menu_helpers.o(.text); - asm/script_pokemon_util_80BF8FC.o(.text); + src/party_menu_specials.o(.text); src/heal_location.o(.text); src/region_map.o(.text); src/image_processing_effects.o(.text); diff --git a/src/party_menu_specials.c b/src/party_menu_specials.c new file mode 100644 index 000000000..751684bd5 --- /dev/null +++ b/src/party_menu_specials.c @@ -0,0 +1,111 @@ +#include "global.h" +#include "data.h" +#include "script.h" +#include "overworld.h" +#include "battle.h" +#include "palette.h" +#include "pokemon.h" +#include "party_menu.h" +#include "field_fadetransition.h" +#include "pokemon_summary_screen.h" +#include "event_data.h" +#include "string_util.h" +#include "constants/moves.h" + +static void sub_80BF97C(u8 taskId); + +void Special_ChooseMonFromParty(void) +{ + u8 taskId; + + ScriptContext2_Enable(); + taskId = CreateTask(sub_80BF97C, 10); + gTasks[taskId].data[0] = PARTY_MENU_TYPE_CHOOSE_MON; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); +} + +void Special_SelectMoveTutorMon(void) +{ + u8 taskId; + + ScriptContext2_Enable(); + taskId = CreateTask(sub_80BF97C, 10); + gTasks[taskId].data[0] = PARTY_MENU_TYPE_MOVE_RELEARNER; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); +} + +static void sub_80BF97C(u8 taskId) +{ + if (!gPaletteFade.active) + { + gPaletteFade.bufferTransferDisabled = TRUE; + ChoosePartyMonByMenuType((u8)gTasks[taskId].data[0]); + DestroyTask(taskId); + } +} + +void Special_SelectMove(void) +{ + ShowSelectMovePokemonSummaryScreen(gPlayerParty, gSpecialVar_0x8004, gPlayerPartyCount - 1, CB2_ReturnToField, 0); + sub_8138B38(3); + gFieldCallback = FieldCallback_ReturnToEventScript2; +} + +void Special_GetNumMovesSelectedMonHas(void) +{ + u8 i; + + gSpecialVar_Result = 0; + for (i = 0; i < MAX_MON_MOVES; ++i) + if (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_MOVE1 + i) != MOVE_NONE) + ++gSpecialVar_Result; +} + +void Special_BufferMoveDeleterNicknameAndMove(void) +{ + struct Pokemon *mon = &gPlayerParty[gSpecialVar_0x8004]; + u16 move = GetMonData(mon, MON_DATA_MOVE1 + gSpecialVar_0x8005); + + GetMonNickname(mon, gStringVar1); + StringCopy(gStringVar2, gMoveNames[move]); +} + +static void ShiftMoveSlot(struct Pokemon *mon, u8 slotTo, u8 slotFrom) +{ + u16 move1 = GetMonData(mon, MON_DATA_MOVE1 + slotTo); + u16 move0 = GetMonData(mon, MON_DATA_MOVE1 + slotFrom); + u8 pp1 = GetMonData(mon, MON_DATA_PP1 + slotTo); + u8 pp0 = GetMonData(mon, MON_DATA_PP1 + slotFrom); + u8 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES); + u8 ppBonusMask1 = gPPUpGetMask[slotTo]; + u8 ppBonusMove1 = (ppBonuses & ppBonusMask1) >> (slotTo * 2); + u8 ppBonusMask2 = gPPUpGetMask[slotFrom]; + u8 ppBonusMove2 = (ppBonuses & ppBonusMask2) >> (slotFrom * 2); + + ppBonuses &= ~ppBonusMask1; + ppBonuses &= ~ppBonusMask2; + ppBonuses |= (ppBonusMove1 << (slotFrom * 2)) + (ppBonusMove2 << (slotTo * 2)); + SetMonData(mon, MON_DATA_MOVE1 + slotTo, &move0); + SetMonData(mon, MON_DATA_MOVE1 + slotFrom, &move1); + SetMonData(mon, MON_DATA_PP1 + slotTo, &pp0); + SetMonData(mon, MON_DATA_PP1 + slotFrom, &pp1); + SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses); +} + +void Special_MoveDeleterForgetMove(void) +{ + u16 i; + + SetMonMoveSlot(&gPlayerParty[gSpecialVar_0x8004], MOVE_NONE, gSpecialVar_0x8005); + RemoveMonPPBonus(&gPlayerParty[gSpecialVar_0x8004], gSpecialVar_0x8005); + for (i = gSpecialVar_0x8005; i < MAX_MON_MOVES - 1; ++i) + ShiftMoveSlot(&gPlayerParty[gSpecialVar_0x8004], i, i + 1); +} + +void Special_IsSelectedMonEgg(void) +{ + if (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_IS_EGG)) + gSpecialVar_Result = TRUE; + else + gSpecialVar_Result = FALSE; +} diff --git a/src/scrcmd.c b/src/scrcmd.c index fad30a6a8..6d2b1f430 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -34,7 +34,6 @@ #include "coins.h" #include "battle_setup.h" #include "shop.h" -#include "script_pokemon_80F8.h" #include "slot_machine.h" #include "field_effect.h" #include "fieldmap.h" -- cgit v1.2.3 From 3f54c7caa1c40692f3f8c2b7660b0459dac38c0e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 10 Jan 2020 11:51:13 -0500 Subject: Port script_pokemon_util_80A0058 --- asm/link_rfu_3.s | 8 +- asm/overworld.s | 2 +- asm/script_pokemon_util_80A0058.s | 535 --------------------- data/event_scripts.s | 26 +- .../maps/OneIsland_KindleRoad_EmberSpa/scripts.inc | 2 +- data/maps/PalletTown_ProfessorOaksLab/scripts.inc | 2 +- data/maps/PokemonTower_5F/scripts.inc | 2 +- data/maps/SevenIsland_House_Room1/scripts.inc | 2 +- data/maps/SevenIsland_House_Room2/scripts.inc | 2 +- .../SevenIsland_TrainerTower_Lobby/scripts.inc | 2 +- data/specials.inc | 6 +- include/script_pokemon_util_80A0058.h | 2 +- ld_script.txt | 2 +- src/battle_setup.c | 2 +- src/post_battle_event_funcs.c | 2 +- src/script_pokemon_util_80A0058.c | 232 +++++++++ 16 files changed, 263 insertions(+), 566 deletions(-) delete mode 100644 asm/script_pokemon_util_80A0058.s create mode 100644 src/script_pokemon_util_80A0058.c diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s index 1f47f7214..96a599bc9 100644 --- a/asm/link_rfu_3.s +++ b/asm/link_rfu_3.s @@ -3272,7 +3272,7 @@ sub_81173C0: @ 81173C0 adds r6, r0, 0 lsls r6, 16 lsrs r6, 16 - bl sp000_heal_pokemon + bl HealPlayerParty bl SavePlayerParty bl LoadPlayerBag ldr r5, _0811742C @ =gLinkPlayers @@ -3660,7 +3660,7 @@ _081177A0: ldr r0, _081177C4 @ =gBlockSendBuffer movs r1, 0x1 bl sub_8117594 - bl sp000_heal_pokemon + bl HealPlayerParty bl SavePlayerParty bl LoadPlayerBag movs r0, 0x1 @@ -3673,7 +3673,7 @@ _081177A0: _081177C4: .4byte gBlockSendBuffer _081177C8: bl CleanupOverworldWindowsAndTilemaps - bl sp000_heal_pokemon + bl HealPlayerParty bl SavePlayerParty bl LoadPlayerBag ldr r0, _081177EC @ =gBlockSendBuffer @@ -3689,7 +3689,7 @@ _081177C8: _081177EC: .4byte gBlockSendBuffer _081177F0: bl CleanupOverworldWindowsAndTilemaps - bl sp000_heal_pokemon + bl HealPlayerParty bl SavePlayerParty bl LoadPlayerBag ldr r0, _08117814 @ =gBlockSendBuffer diff --git a/asm/overworld.s b/asm/overworld.s index 4fbe39153..9939296af 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -19,7 +19,7 @@ sub_8054BC8: @ 8054BC8 adds r1, r0, 0 adds r0, r4, 0 bl RemoveMoney - bl sp000_heal_pokemon + bl HealPlayerParty bl sub_8054DD8 bl sub_80554BC bl WarpIntoMap diff --git a/asm/script_pokemon_util_80A0058.s b/asm/script_pokemon_util_80A0058.s deleted file mode 100644 index 6f451b90a..000000000 --- a/asm/script_pokemon_util_80A0058.s +++ /dev/null @@ -1,535 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sp000_heal_pokemon -sp000_heal_pokemon: @ 80A0058 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - movs r0, 0 - mov r8, r0 - ldr r0, _080A0114 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r8, r0 - bcs _080A0104 - ldr r1, _080A0118 @ =gPlayerParty - mov r10, r1 - mov r6, sp -_080A0076: - movs r0, 0x64 - mov r4, r8 - muls r4, r0 - add r4, r10 - adds r0, r4, 0 - movs r1, 0x3A - bl GetMonData - lsls r1, r0, 16 - strb r0, [r6] - lsrs r1, 24 - strb r1, [r6, 0x1] - adds r0, r4, 0 - movs r1, 0x39 - mov r2, sp - bl SetMonData - adds r0, r4, 0 - movs r1, 0x15 - bl GetMonData - lsls r0, 24 - lsrs r7, r0, 24 - movs r5, 0 - movs r1, 0x1 - add r1, r8 - mov r9, r1 -_080A00AC: - adds r1, r5, 0 - adds r1, 0xD - adds r0, r4, 0 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - adds r1, r7, 0 - adds r2, r5, 0 - bl CalculatePPWithBonus - strb r0, [r6] - adds r1, r5, 0 - adds r1, 0x11 - adds r0, r4, 0 - mov r2, sp - bl SetMonData - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _080A00AC - movs r0, 0 - strb r0, [r6] - strb r0, [r6, 0x1] - strb r0, [r6, 0x2] - strb r0, [r6, 0x3] - movs r1, 0x64 - mov r0, r8 - muls r0, r1 - add r0, r10 - movs r1, 0x37 - mov r2, sp - bl SetMonData - mov r1, r9 - lsls r0, r1, 24 - lsrs r0, 24 - mov r8, r0 - ldr r0, _080A0114 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r8, r0 - bcc _080A0076 -_080A0104: - 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 -_080A0114: .4byte gPlayerPartyCount -_080A0118: .4byte gPlayerParty - thumb_func_end sp000_heal_pokemon - - thumb_func_start ScriptGiveMon -ScriptGiveMon: @ 80A011C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - adds r6, r0, 0 - adds r4, r1, 0 - adds r5, r2, 0 - lsls r6, 16 - lsrs r6, 16 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 16 - lsrs r0, r5, 16 - mov r8, r0 - movs r0, 0x64 - bl AllocZeroed - adds r7, r0, 0 - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - adds r0, r7, 0 - adds r1, r6, 0 - adds r2, r4, 0 - movs r3, 0x20 - bl CreateMon - add r0, sp, 0x10 - mov r1, r8 - strb r1, [r0] - lsrs r5, 24 - strb r5, [r0, 0x1] - adds r0, r7, 0 - movs r1, 0xC - add r2, sp, 0x10 - bl SetMonData - adds r0, r7, 0 - bl GiveMonToPlayer - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r6, 0 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r5, r0, 16 - cmp r4, 0x1 - bgt _080A0196 - cmp r4, 0 - blt _080A0196 - adds r0, r5, 0 - movs r1, 0x2 - bl GetSetPokedexFlag - adds r0, r5, 0 - movs r1, 0x3 - bl GetSetPokedexFlag -_080A0196: - adds r0, r7, 0 - bl Free - adds r0, r4, 0 - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end ScriptGiveMon - - thumb_func_start ScriptGiveEgg -ScriptGiveEgg: @ 80A01AC - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - movs r0, 0x64 - bl AllocZeroed - adds r5, r0, 0 - adds r1, r4, 0 - movs r2, 0x1 - bl CreateEgg - movs r1, 0x1 - mov r0, sp - strb r1, [r0] - adds r0, r5, 0 - movs r1, 0x2D - mov r2, sp - bl SetMonData - adds r0, r5, 0 - bl GiveMonToPlayer - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - bl Free - adds r0, r4, 0 - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end ScriptGiveEgg - - thumb_func_start CheckForAlivePartyMons -CheckForAlivePartyMons: @ 80A01F4 - push {lr} - bl GetMonsStateToDoubles - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x1 - beq _080A0210 - cmp r1, 0x1 - bgt _080A020C - cmp r1, 0 - beq _080A0210 - b _080A0214 -_080A020C: - cmp r1, 0x2 - bne _080A0214 -_080A0210: - ldr r0, _080A0218 @ =gSpecialVar_Result - strh r1, [r0] -_080A0214: - pop {r0} - bx r0 - .align 2, 0 -_080A0218: .4byte gSpecialVar_Result - thumb_func_end CheckForAlivePartyMons - - thumb_func_start CheckPartyMonHasHeldItem -CheckPartyMonHasHeldItem: @ 80A021C - push {r4-r7,lr} - lsls r0, 16 - lsrs r6, r0, 16 - movs r5, 0 - movs r7, 0xCE - lsls r7, 1 -_080A0228: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _080A0258 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - beq _080A025C - cmp r0, r7 - beq _080A025C - adds r0, r4, 0 - movs r1, 0xC - bl GetMonData - cmp r0, r6 - bne _080A025C - movs r0, 0x1 - b _080A0264 - .align 2, 0 -_080A0258: .4byte gPlayerParty -_080A025C: - adds r5, 0x1 - cmp r5, 0x5 - ble _080A0228 - movs r0, 0 -_080A0264: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end CheckPartyMonHasHeldItem - - thumb_func_start GetNameOfEnigmaBerryInPlayerParty -GetNameOfEnigmaBerryInPlayerParty: @ 80A026C - push {r4,lr} - movs r0, 0xAF - bl CheckPartyMonHasHeldItem - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - cmp r4, 0x1 - bne _080A028E - movs r0, 0xAF - bl ItemIdToBerryType - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080A0298 @ =gStringVar1 - bl GetBerryNameByBerryType -_080A028E: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080A0298: .4byte gStringVar1 - thumb_func_end GetNameOfEnigmaBerryInPlayerParty - - thumb_func_start CreateScriptedWildMon -CreateScriptedWildMon: @ 80A029C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 24 - lsrs r5, 24 - lsls r7, r2, 16 - lsrs r6, r7, 16 - bl ZeroEnemyPartyMons - ldr r0, _080A02F8 @ =gEnemyParty - mov r8, r0 - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - mov r0, r8 - adds r1, r4, 0 - adds r2, r5, 0 - movs r3, 0x20 - bl CreateMon - cmp r6, 0 - beq _080A02EA - add r0, sp, 0x10 - strb r6, [r0] - adds r1, r0, 0 - lsrs r0, r7, 24 - strb r0, [r1, 0x1] - mov r0, r8 - movs r1, 0xC - add r2, sp, 0x10 - bl SetMonData -_080A02EA: - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080A02F8: .4byte gEnemyParty - thumb_func_end CreateScriptedWildMon - - thumb_func_start ScriptSetMonMoveSlot -ScriptSetMonMoveSlot: @ 80A02FC - push {r4,lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r1, 16 - lsrs r4, r1, 16 - lsls r2, 24 - lsrs r2, 24 - cmp r3, 0x6 - bls _080A0318 - ldr r0, _080A032C @ =gPlayerPartyCount - ldrb r0, [r0] - subs r0, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 -_080A0318: - movs r0, 0x64 - muls r0, r3 - ldr r1, _080A0330 @ =gPlayerParty - adds r0, r1 - adds r1, r4, 0 - bl SetMonMoveSlot - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080A032C: .4byte gPlayerPartyCount -_080A0330: .4byte gPlayerParty - thumb_func_end ScriptSetMonMoveSlot - - thumb_func_start sub_80A0334 -sub_80A0334: @ 80A0334 - push {lr} - ldr r1, _080A0348 @ =gMain - ldr r0, _080A034C @ =sub_80A0350 - str r0, [r1, 0x8] - movs r0, 0 - bl InitChooseHalfPartyForBattle - pop {r0} - bx r0 - .align 2, 0 -_080A0348: .4byte gMain -_080A034C: .4byte sub_80A0350 - thumb_func_end sub_80A0334 - - thumb_func_start sub_80A0350 -sub_80A0350: @ 80A0350 - push {lr} - ldr r0, _080A0360 @ =gSelectedOrderFromParty - ldrb r1, [r0] - cmp r1, 0 - bne _080A0368 - ldr r0, _080A0364 @ =gSpecialVar_Result - strh r1, [r0] - b _080A036E - .align 2, 0 -_080A0360: .4byte gSelectedOrderFromParty -_080A0364: .4byte gSpecialVar_Result -_080A0368: - ldr r1, _080A0378 @ =gSpecialVar_Result - movs r0, 0x1 - strh r0, [r1] -_080A036E: - ldr r0, _080A037C @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_080A0378: .4byte gSpecialVar_Result -_080A037C: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic - thumb_func_end sub_80A0350 - - thumb_func_start ChooseBattleTowerPlayerParty -ChooseBattleTowerPlayerParty: @ 80A0380 - push {lr} - ldr r1, _080A0394 @ =gMain - ldr r0, _080A0398 @ =sub_80A039C - str r0, [r1, 0x8] - movs r0, 0x1 - bl InitChooseHalfPartyForBattle - pop {r0} - bx r0 - .align 2, 0 -_080A0394: .4byte gMain -_080A0398: .4byte sub_80A039C - thumb_func_end ChooseBattleTowerPlayerParty - - thumb_func_start sub_80A039C -sub_80A039C: @ 80A039C - push {r4,lr} - ldr r0, _080A03B0 @ =gSelectedOrderFromParty - ldrb r4, [r0] - cmp r4, 0 - bne _080A03B8 - bl LoadPlayerParty - ldr r0, _080A03B4 @ =gSpecialVar_Result - strh r4, [r0] - b _080A03C2 - .align 2, 0 -_080A03B0: .4byte gSelectedOrderFromParty -_080A03B4: .4byte gSpecialVar_Result -_080A03B8: - bl ReducePlayerPartyToThree - ldr r1, _080A03D0 @ =gSpecialVar_Result - movs r0, 0x1 - strh r0, [r1] -_080A03C2: - ldr r0, _080A03D4 @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080A03D0: .4byte gSpecialVar_Result -_080A03D4: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic - thumb_func_end sub_80A039C - - thumb_func_start ReducePlayerPartyToThree -ReducePlayerPartyToThree: @ 80A03D8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r0, 0x96 - lsls r0, 1 - bl AllocZeroed - adds r7, r0, 0 - movs r5, 0 - movs r0, 0x64 - mov r8, r0 - ldr r6, _080A0454 @ =gPlayerParty - adds r4, r7, 0 -_080A03F4: - ldr r0, _080A0458 @ =gSelectedOrderFromParty - adds r1, r5, r0 - ldrb r0, [r1] - cmp r0, 0 - beq _080A040E - subs r0, 0x1 - mov r1, r8 - muls r1, r0 - adds r1, r6 - adds r0, r4, 0 - movs r2, 0x64 - bl memcpy -_080A040E: - adds r4, 0x64 - adds r5, 0x1 - cmp r5, 0x2 - ble _080A03F4 - movs r0, 0 - str r0, [sp] - ldr r4, _080A0454 @ =gPlayerParty - ldr r2, _080A045C @ =0x05000096 - mov r0, sp - adds r1, r4, 0 - bl CpuSet - adds r5, r7, 0 - adds r6, r7, 0 - adds r6, 0xC8 -_080A042C: - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x64 - bl memcpy - adds r5, 0x64 - adds r4, 0x64 - cmp r5, r6 - ble _080A042C - bl CalculatePlayerPartyCount - adds r0, r7, 0 - bl Free - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080A0454: .4byte gPlayerParty -_080A0458: .4byte gSelectedOrderFromParty -_080A045C: .4byte 0x05000096 - thumb_func_end ReducePlayerPartyToThree - - .align 2, 0 @ Don't pad with nop. diff --git a/data/event_scripts.s b/data/event_scripts.s index 21fdffe43..13bba19f8 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -871,7 +871,7 @@ EventScript_TryDoDoubleTrainerBattle:: @ 81A4EE9 specialvar VAR_RESULT, ScrSpecial_HasTrainerBeenFought compare_var_to_value VAR_RESULT, 0 goto_if ne, EventScript_1A4F20 - special CheckForAlivePartyMons + special HasEnoughMonsForDoubleBattle compare_var_to_value VAR_RESULT, 0 goto_if ne, EventScript_1A4F19 special PlayTrainerEncounterMusic @@ -923,7 +923,7 @@ EventScript_TryDoDoubleRematchBattle:: @ 81A4F73 specialvar VAR_RESULT, ScrSpecial_GetTrainerEyeRematchFlag compare_var_to_value VAR_RESULT, 0 goto_if eq, EventScript_1A4FB0 - special CheckForAlivePartyMons + special HasEnoughMonsForDoubleBattle compare_var_to_value VAR_RESULT, 0 goto_if ne, EventScript_1A4FB1 special PlayTrainerEncounterMusic @@ -1617,7 +1617,7 @@ EventScript_1A65CE:: @ 81A65CE waitfieldeffect 25 applymovement VAR_LAST_TALKED, Movement_1A75ED waitmovement 0 - special sp000_heal_pokemon + special HealPlayerParty return EventScript_1A65EC:: @ 81A65EC @@ -2161,7 +2161,7 @@ EventScript_FadeOut_Heal_FadeIn:: @ 81A6C26 fadescreen 1 playfanfare MUS_ME_ASA waitfanfare - special sp000_heal_pokemon + special HealPlayerParty fadescreen 0 return @@ -8644,7 +8644,7 @@ EventScript_1BB519:: @ 81BB519 end EventScript_1BB51A:: @ 81BB51A - special CheckForAlivePartyMons + special HasEnoughMonsForDoubleBattle compare_var_to_value VAR_RESULT, 0 goto_if ne, EventScript_1BB533 setvar VAR_0x8004, 2 @@ -8693,7 +8693,7 @@ EventScript_1BB54C:: @ 81BB54C end EventScript_1BB5B3:: @ 81BB5B3 - special sp000_heal_pokemon + special HealPlayerParty special SavePlayerParty special LoadPlayerBag copyvar VAR_0x406F, VAR_0x8004 @@ -9019,7 +9019,7 @@ UnknownMap_00_00_EventScript_1BB8CF:: @ 81BB8CF gUnknown_81BB8DB:: @ 81BB8DB UnknownMap_00_03_EventScript_1BB8DB:: @ 81BB8DB fadescreen 1 - special sub_80A0334 + special ChooseHalfPartyForBattle waitstate compare_var_to_value VAR_RESULT, 0 goto_if eq, EventScript_1BB94F @@ -9032,7 +9032,7 @@ UnknownMap_00_03_EventScript_1BB8DB:: @ 81BB8DB gUnknown_81BB8F8:: @ 81BB8F8 UnknownMap_00_03_EventScript_1BB8F8:: @ 81BB8F8 fadescreen 1 - special sub_80A0334 + special ChooseHalfPartyForBattle waitstate compare_var_to_value VAR_RESULT, 0 goto_if eq, EventScript_1BB94F @@ -9045,7 +9045,7 @@ UnknownMap_00_03_EventScript_1BB8F8:: @ 81BB8F8 gUnknown_81BB915:: @ 81BB915 UnknownMap_00_03_EventScript_1BB915:: @ 81BB915 fadescreen 1 - special sub_80A0334 + special ChooseHalfPartyForBattle waitstate compare_var_to_value VAR_RESULT, 0 goto_if eq, EventScript_1BB94F @@ -9058,7 +9058,7 @@ UnknownMap_00_03_EventScript_1BB915:: @ 81BB915 gUnknown_81BB932:: @ 81BB932 UnknownMap_00_03_EventScript_1BB932:: @ 81BB932 fadescreen 1 - special sub_80A0334 + special ChooseHalfPartyForBattle waitstate compare_var_to_value VAR_RESULT, 0 goto_if eq, EventScript_1BB94F @@ -9217,7 +9217,7 @@ EventScript_1BBA94:: @ 81BBA94 goto_if eq, EventScript_1BB82F msgbox gUnknown_81BD86A closemessage - special sp000_heal_pokemon + special HealPlayerParty setvar VAR_0x8004, 6 copyvar VAR_0x406F, VAR_0x8004 special HelpSystem_Disable @@ -9368,7 +9368,7 @@ EventScript_1BBCF4:: @ 81BBCF4 end EventScript_1BBCF5:: @ 81BBCF5 - special CheckForAlivePartyMons + special HasEnoughMonsForDoubleBattle compare_var_to_value VAR_RESULT, 0 goto_if ne, EventScript_1BBD0E setvar VAR_0x8004, 1 @@ -14241,7 +14241,7 @@ EventScript_1C52D7: end EventScript_1C52E0:: @ 81C52E0 - special sp000_heal_pokemon + special HealPlayerParty setvar VAR_0x8004, 11 special sub_815D9E8 warp MAP_SEVEN_ISLAND_TRAINER_TOWER_LOBBY, 255, 9, 7 diff --git a/data/maps/OneIsland_KindleRoad_EmberSpa/scripts.inc b/data/maps/OneIsland_KindleRoad_EmberSpa/scripts.inc index 71c8cf0ee..a713b044f 100644 --- a/data/maps/OneIsland_KindleRoad_EmberSpa/scripts.inc +++ b/data/maps/OneIsland_KindleRoad_EmberSpa/scripts.inc @@ -45,7 +45,7 @@ EventScript_1653C5:: @ 81653C5 OneIsland_KindleRoad_EmberSpa_EventScript_1653CF:: @ 81653CF lockall fadescreen 3 - special sp000_heal_pokemon + special HealPlayerParty fadescreen 2 msgbox gUnknown_817D450 setvar VAR_0x4001, 1 diff --git a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc index 850182c08..38d85f0d1 100644 --- a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc +++ b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc @@ -488,7 +488,7 @@ Movement_1694BE:: @ 81694BE step_end EventScript_1694C2:: @ 81694C2 - special sp000_heal_pokemon + special HealPlayerParty msgbox gUnknown_818DE38 closemessage playbgm MUS_RIVAL2, 0 diff --git a/data/maps/PokemonTower_5F/scripts.inc b/data/maps/PokemonTower_5F/scripts.inc index 85517e241..dee5b5bbd 100644 --- a/data/maps/PokemonTower_5F/scripts.inc +++ b/data/maps/PokemonTower_5F/scripts.inc @@ -8,7 +8,7 @@ PokemonTower_5F_EventScript_163433:: @ 8163433 PokemonTower_5F_EventScript_16343C:: @ 816343C lockall fadescreen 3 - special sp000_heal_pokemon + special HealPlayerParty fadescreen 2 msgbox gUnknown_817A1FA setvar VAR_0x4001, 1 diff --git a/data/maps/SevenIsland_House_Room1/scripts.inc b/data/maps/SevenIsland_House_Room1/scripts.inc index fd83fa051..f136b8de2 100644 --- a/data/maps/SevenIsland_House_Room1/scripts.inc +++ b/data/maps/SevenIsland_House_Room1/scripts.inc @@ -128,7 +128,7 @@ EventScript_170A11:: @ 8170A11 EventScript_170A1E:: @ 8170A1E msgbox gUnknown_81A06AB fadescreen 1 - special sub_80A0334 + special ChooseHalfPartyForBattle waitstate return diff --git a/data/maps/SevenIsland_House_Room2/scripts.inc b/data/maps/SevenIsland_House_Room2/scripts.inc index f2928f916..0ca956c55 100644 --- a/data/maps/SevenIsland_House_Room2/scripts.inc +++ b/data/maps/SevenIsland_House_Room2/scripts.inc @@ -29,7 +29,7 @@ EventScript_170A97:: @ 8170A97 compare_var_to_value VAR_RESULT, 2 call_if eq, EventScript_170B17 closemessage - special sp000_heal_pokemon + special HealPlayerParty applymovement 255, Movement_170B28 waitmovement 0 special LoadPlayerParty diff --git a/data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc b/data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc index 142f33ee3..b0074f4b3 100644 --- a/data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc +++ b/data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc @@ -196,7 +196,7 @@ EventScript_164A53:: @ 8164A53 EventScript_164AA0:: @ 8164AA0 copyvar VAR_0x8005, VAR_RESULT setvar VAR_MAP_SCENE_TRAINER_TOWER, 1 - special sp000_heal_pokemon + special HealPlayerParty msgbox gUnknown_817C8BF setvar VAR_0x8004, 6 special sub_815D9E8 diff --git a/data/specials.inc b/data/specials.inc index f7ca055ef..514acc0fc 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -8,7 +8,7 @@ .set __special__, 0 .align 2 gSpecials:: @ 815FD60 - def_special sp000_heal_pokemon + def_special HealPlayerParty def_special SetCableClubWarp def_special DoCableClubWarp def_special sub_807E704 @@ -49,7 +49,7 @@ gSpecials:: @ 815FD60 def_special nullsub_75 def_special SavePlayerParty def_special LoadPlayerParty - def_special sub_80A0334 + def_special ChooseHalfPartyForBattle def_special sp02A_crash_sound def_special nullsub_75 def_special nullsub_75 @@ -69,7 +69,7 @@ gSpecials:: @ 815FD60 def_special ScrSpecial_GetTrainerEyeRematchFlag def_special ScrSpecial_StartTrainerEyeRematch def_special ShowPokemonStorageSystem - def_special CheckForAlivePartyMons + def_special HasEnoughMonsForDoubleBattle def_special nullsub_75 def_special nullsub_75 def_special nullsub_75 diff --git a/include/script_pokemon_util_80A0058.h b/include/script_pokemon_util_80A0058.h index b63a7b0ef..d0b8949e4 100644 --- a/include/script_pokemon_util_80A0058.h +++ b/include/script_pokemon_util_80A0058.h @@ -4,7 +4,7 @@ bool8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unk1, u32 unk2, u8 unk3); bool8 ScriptGiveEgg(u16 species); void ScriptSetMonMoveSlot(u8 partyIdx, u16 move, u8 slot); -void sp000_heal_pokemon(void); +void HealPlayerParty(void); void ReducePlayerPartyToThree(void); #endif //GUARD_SCRIPT_POKEMON_UTIL_80A0058_H diff --git a/ld_script.txt b/ld_script.txt index 614bc4c93..995bed11f 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -145,7 +145,7 @@ SECTIONS { src/script_menu.o(.text); asm/naming_screen.o(.text); src/money.o(.text); - asm/script_pokemon_util_80A0058.o(.text); + src/script_pokemon_util_80A0058.o(.text); src/field_poison.o(.text); src/pokemon_size_record.o(.text); asm/pc_screen_effect.o(.text); diff --git a/src/battle_setup.c b/src/battle_setup.c index 17da53083..dee0c492b 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -901,7 +901,7 @@ static void CB2_EndTrainerBattle(void) gSpecialVar_Result = 1; if (gUnknown_20386CC & 1) { - sp000_heal_pokemon(); + HealPlayerParty(); } else { diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c index 6d4652f35..1e61b9b77 100644 --- a/src/post_battle_event_funcs.c +++ b/src/post_battle_event_funcs.c @@ -14,7 +14,7 @@ bool8 Special_HallOfFame(void) bool8 *r7; int i; bool8 gaveAtLeastOneRibbon; - sp000_heal_pokemon(); + HealPlayerParty(); if (FlagGet(FLAG_SYS_GAME_CLEAR) == TRUE) { gHasHallOfFameRecords = TRUE; diff --git a/src/script_pokemon_util_80A0058.c b/src/script_pokemon_util_80A0058.c new file mode 100644 index 000000000..9a9fd37a5 --- /dev/null +++ b/src/script_pokemon_util_80A0058.c @@ -0,0 +1,232 @@ +#include "global.h" +#include "battle.h" +#include "battle_gfx_sfx_util.h" +#include "berry.h" +#include "data.h" +#include "daycare.h" +#include "decompress.h" +#include "event_data.h" +#include "event_object_movement.h" +#include "link.h" +#include "link_rfu.h" +#include "load_save.h" +#include "main.h" +#include "malloc.h" +#include "menu.h" +#include "overworld.h" +#include "palette.h" +#include "party_menu.h" +#include "pokedex.h" +#include "pokemon.h" +#include "random.h" +#include "script.h" +#include "script_menu.h" +#include "script_pokemon_util_80A0058.h" +#include "sprite.h" +#include "string_util.h" +#include "constants/items.h" +#include "constants/species.h" +#include "constants/vars.h" + +static void CB2_ReturnFromChooseHalfParty(void); +static void CB2_ReturnFromChooseBattleTowerParty(void); + +void HealPlayerParty(void) +{ + u8 i, j; + u8 ppBonuses; + u8 arg[4]; + + // restore HP. + for(i = 0; i < gPlayerPartyCount; i++) + { + u16 maxHP = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); + arg[0] = maxHP; + arg[1] = maxHP >> 8; + SetMonData(&gPlayerParty[i], MON_DATA_HP, arg); + ppBonuses = GetMonData(&gPlayerParty[i], MON_DATA_PP_BONUSES); + + // restore PP. + for(j = 0; j < MAX_MON_MOVES; j++) + { + arg[0] = CalculatePPWithBonus(GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j), ppBonuses, j); + SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, arg); + } + + // since status is u32, the four 0 assignments here are probably for safety to prevent undefined data from reaching SetMonData. + arg[0] = 0; + arg[1] = 0; + arg[2] = 0; + arg[3] = 0; + SetMonData(&gPlayerParty[i], MON_DATA_STATUS, arg); + } +} + +u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3) +{ + u16 nationalDexNum; + int sentToPc; + u8 heldItem[2]; + struct Pokemon *mon = AllocZeroed(sizeof(struct Pokemon)); + + CreateMon(mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0); + heldItem[0] = item; + heldItem[1] = item >> 8; + SetMonData(mon, MON_DATA_HELD_ITEM, heldItem); + sentToPc = GiveMonToPlayer(mon); + nationalDexNum = SpeciesToNationalPokedexNum(species); + + switch(sentToPc) + { + case 0: + case 1: + GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN); + GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT); + break; + } + + Free(mon); + return sentToPc; +} + +u8 ScriptGiveEgg(u16 species) +{ + struct Pokemon *mon = AllocZeroed(sizeof(struct Pokemon)); + u8 isEgg; + bool8 sentToPc; + + CreateEgg(mon, species, TRUE); + isEgg = TRUE; + SetMonData(mon, MON_DATA_IS_EGG, &isEgg); + + sentToPc = GiveMonToPlayer(mon); + Free(mon); + return sentToPc; +} + +void HasEnoughMonsForDoubleBattle(void) +{ + switch (GetMonsStateToDoubles()) + { + case PLAYER_HAS_TWO_USABLE_MONS: + gSpecialVar_Result = PLAYER_HAS_TWO_USABLE_MONS; + break; + case PLAYER_HAS_ONE_MON: + gSpecialVar_Result = PLAYER_HAS_ONE_MON; + break; + case PLAYER_HAS_ONE_USABLE_MON: + gSpecialVar_Result = PLAYER_HAS_ONE_USABLE_MON; + break; + } +} + +static bool8 CheckPartyMonHasHeldItem(u16 item) +{ + int i; + + for(i = 0; i < PARTY_SIZE; i++) + { + u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item) + return TRUE; + } + return FALSE; +} + +bool8 GetNameOfEnigmaBerryInPlayerParty(void) +{ + bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY); + if (hasItem == TRUE) + GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1); + + return hasItem; +} + +void CreateScriptedWildMon(u16 species, u8 level, u16 item) +{ + u8 heldItem[2]; + + ZeroEnemyPartyMons(); + CreateMon(&gEnemyParty[0], species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0); + if (item) + { + heldItem[0] = item; + heldItem[1] = item >> 8; + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem); + } +} + +void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot) +{ + if (monIndex > PARTY_SIZE) + monIndex = gPlayerPartyCount - 1; + + SetMonMoveSlot(&gPlayerParty[monIndex], move, slot); +} + +// Note: When control returns to the event script, gSpecialVar_Result will be +// TRUE if the party selection was successful. +void ChooseHalfPartyForBattle(void) +{ + gMain.savedCallback = CB2_ReturnFromChooseHalfParty; +// VarSet(VAR_FRONTIER_FACILITY, FACILITY_MULTI_OR_EREADER); + InitChooseHalfPartyForBattle(0); +} + +static void CB2_ReturnFromChooseHalfParty(void) +{ + switch (gSelectedOrderFromParty[0]) + { + case 0: + gSpecialVar_Result = FALSE; + break; + default: + gSpecialVar_Result = TRUE; + break; + } + + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); +} + +void ChooseBattleTowerPlayerParty(void) +{ + gMain.savedCallback = CB2_ReturnFromChooseBattleTowerParty; + InitChooseHalfPartyForBattle(1); +} + +static void CB2_ReturnFromChooseBattleTowerParty(void) +{ + switch (gSelectedOrderFromParty[0]) + { + case 0: + LoadPlayerParty(); + gSpecialVar_Result = FALSE; + break; + default: + ReducePlayerPartyToThree(); + gSpecialVar_Result = TRUE; + break; + } + + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); +} + +void ReducePlayerPartyToThree(void) +{ + struct Pokemon * party = AllocZeroed(3 * sizeof(struct Pokemon)); + int i; + + // copy the selected pokemon according to the order. + for (i = 0; i < 3; i++) + if (gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop + party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal + + CpuFill32(0, gPlayerParty, sizeof gPlayerParty); + + // overwrite the first 4 with the order copied to. + for (i = 0; i < 3; i++) + gPlayerParty[i] = party[i]; + + CalculatePlayerPartyCount(); + Free(party); +} -- cgit v1.2.3 From 1a246cc567f91d3975a7b9ca26a74afd06245bc9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 10 Jan 2020 11:53:19 -0500 Subject: Clean up script_pokemon_util_80A0058 includes --- src/script_pokemon_util_80A0058.c | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/script_pokemon_util_80A0058.c b/src/script_pokemon_util_80A0058.c index 9a9fd37a5..14f5d490f 100644 --- a/src/script_pokemon_util_80A0058.c +++ b/src/script_pokemon_util_80A0058.c @@ -1,32 +1,17 @@ #include "global.h" #include "battle.h" -#include "battle_gfx_sfx_util.h" #include "berry.h" -#include "data.h" #include "daycare.h" -#include "decompress.h" #include "event_data.h" #include "event_object_movement.h" -#include "link.h" -#include "link_rfu.h" #include "load_save.h" -#include "main.h" #include "malloc.h" -#include "menu.h" #include "overworld.h" -#include "palette.h" #include "party_menu.h" #include "pokedex.h" -#include "pokemon.h" -#include "random.h" -#include "script.h" -#include "script_menu.h" #include "script_pokemon_util_80A0058.h" -#include "sprite.h" -#include "string_util.h" #include "constants/items.h" #include "constants/species.h" -#include "constants/vars.h" static void CB2_ReturnFromChooseHalfParty(void); static void CB2_ReturnFromChooseBattleTowerParty(void); -- cgit v1.2.3 From a52fe6c9a0037c90350059bd438bafdb8f0e5ec6 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sat, 11 Jan 2020 04:20:27 +0800 Subject: sub_810C4EC --- src/vs_seeker.c | 91 +++++---------------------------------------------------- 1 file changed, 8 insertions(+), 83 deletions(-) diff --git a/src/vs_seeker.c b/src/vs_seeker.c index 46a0649d7..6c4dba398 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -637,7 +637,6 @@ void sub_810C444(void) } } -#ifdef NONMATCHING bool8 sub_810C4EC(void) { if (CheckBagHasItem(ITEM_VS_SEEKER, 1) == TRUE) @@ -648,18 +647,18 @@ bool8 sub_810C4EC(void) if (FlagGet(FLAG_SYS_VS_SEEKER_CHARGING) == TRUE) { - u16 x; - do { - x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF; - } while (0); + u8 x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF; + u32 r4 = 0xFF; + if (x < 100) { x++; - gSaveBlock1Ptr->trainerRematchStepCounter = ((u16)(x << 8)) | (gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF); + #ifndef NONMATCHING // fool the compiler that r4 has been changed + asm("":"=r"(r4)); + #endif + gSaveBlock1Ptr->trainerRematchStepCounter = (gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF) | (x << 8); } - do { - x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF; - } while (0); + x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & r4; if (x == 100) { FlagClear(FLAG_SYS_VS_SEEKER_CHARGING); @@ -671,80 +670,6 @@ bool8 sub_810C4EC(void) return FALSE; } -#else -NAKED -bool8 sub_810C4EC(void) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmovs r0, 0xB5\n" - "\tlsls r0, 1\n" - "\tmovs r1, 0x1\n" - "\tbl CheckBagHasItem\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r0, 0x1\n" - "\tbne _0810C516\n" - "\tldr r0, _0810C568 @ =gSaveBlock1Ptr\n" - "\tldr r0, [r0]\n" - "\tmovs r2, 0xC7\n" - "\tlsls r2, 3\n" - "\tadds r1, r0, r2\n" - "\tldrh r2, [r1]\n" - "\tldrb r0, [r1]\n" - "\tcmp r0, 0x63\n" - "\tbhi _0810C516\n" - "\tadds r0, r2, 0x1\n" - "\tstrh r0, [r1]\n" - "_0810C516:\n" - "\tldr r7, _0810C56C @ =0x00000801\n" - "\tadds r0, r7, 0\n" - "\tbl FlagGet\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r0, 0x1\n" - "\tbne _0810C570\n" - "\tldr r6, _0810C568 @ =gSaveBlock1Ptr\n" - "\tldr r0, [r6]\n" - "\tmovs r5, 0xC7\n" - "\tlsls r5, 3\n" - "\tadds r3, r0, r5\n" - "\tldrh r2, [r3]\n" - "\tlsrs r1, r2, 8\n" - "\tmovs r4, 0xFF\n" - "\tcmp r1, 0x63\n" - "\tbhi _0810C548\n" - "\tadds r1, 0x1\n" - "\tlsls r1, 24\n" - "\tmovs r0, 0xFF\n" - "\tands r0, r2\n" - "\tlsrs r1, 16\n" - "\torrs r0, r1\n" - "\tstrh r0, [r3]\n" - "_0810C548:\n" - "\tldr r0, [r6]\n" - "\tadds r0, r5\n" - "\tldrh r0, [r0]\n" - "\tlsrs r0, 8\n" - "\tands r0, r4\n" - "\tcmp r0, 0x64\n" - "\tbne _0810C570\n" - "\tadds r0, r7, 0\n" - "\tbl FlagClear\n" - "\tbl sub_810C640\n" - "\tbl sub_810D0D0\n" - "\tmovs r0, 0x1\n" - "\tb _0810C572\n" - "\t.align 2, 0\n" - "_0810C568: .4byte gSaveBlock1Ptr\n" - "_0810C56C: .4byte 0x00000801\n" - "_0810C570:\n" - "\tmovs r0, 0\n" - "_0810C572:\n" - "\tpop {r4-r7}\n" - "\tpop {r1}\n" - "\tbx r1"); -} -#endif void sub_810C578(void) { -- cgit v1.2.3 From 3e79c7890fe3196f3c9142a796e18f9b628dd762 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 10 Jan 2020 16:32:32 -0500 Subject: through UpdateLvlInHealthbox --- asm/battle_interface.s | 1252 +------------------------------------- data/battle_interface.s | 14 +- include/graphics.h | 3 + include/pokemon_summary_screen.h | 1 + ld_script.txt | 1 + src/battle_interface.c | 383 ++++++++++++ 6 files changed, 423 insertions(+), 1231 deletions(-) create mode 100644 src/battle_interface.c diff --git a/asm/battle_interface.s b/asm/battle_interface.s index 753b1696b..43a8a8391 100644 --- a/asm/battle_interface.s +++ b/asm/battle_interface.s @@ -5,1202 +5,6 @@ .text - thumb_func_start sub_8047B0C -sub_8047B0C: @ 8047B0C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r7, r1, 0 - lsls r0, 16 - lsrs r5, r0, 16 - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - movs r3, 0 - movs r2, 0 -_08047B28: - lsls r0, r3, 24 - asrs r0, 24 - mov r3, sp - adds r1, r3, r0 - strb r2, [r1] - adds r0, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - asrs r0, 24 - cmp r0, 0x3 - ble _08047B28 - movs r3, 0x3 - movs r0, 0x1 - negs r0, r0 - mov r9, r0 - mov r8, sp -_08047B48: - lsls r0, r5, 16 - asrs r6, r0, 16 - cmp r6, 0 - ble _08047B76 - lsls r4, r3, 24 - asrs r4, 24 - mov r1, sp - adds r5, r1, r4 - adds r0, r6, 0 - movs r1, 0xA - bl __modsi3 - strb r0, [r5] - adds r0, r6, 0 - movs r1, 0xA - bl __divsi3 - lsls r0, 16 - lsrs r5, r0, 16 - subs r4, 0x1 - lsls r4, 24 - lsrs r3, r4, 24 - b _08047B48 -_08047B76: - lsls r1, r3, 24 - asrs r0, r1, 24 - cmp r0, r9 - ble _08047B9A - movs r4, 0xFF - movs r3, 0x1 - negs r3, r3 -_08047B84: - asrs r2, r1, 24 - mov r5, sp - adds r1, r5, r2 - ldrb r0, [r1] - orrs r0, r4 - strb r0, [r1] - subs r2, 0x1 - lsls r1, r2, 24 - asrs r0, r1, 24 - cmp r0, r3 - bgt _08047B84 -_08047B9A: - mov r1, r8 - ldrb r0, [r1, 0x3] - cmp r0, 0xFF - bne _08047BA6 - movs r0, 0 - strb r0, [r1, 0x3] -_08047BA6: - mov r2, r10 - cmp r2, 0 - bne _08047C36 - movs r3, 0 - movs r1, 0 - movs r6, 0xFC - lsls r6, 8 - movs r5, 0x1E - mov r12, r5 -_08047BB8: - lsls r1, 24 - asrs r2, r1, 24 - mov r0, sp - adds r5, r0, r2 - ldrb r0, [r5] - mov r8, r1 - cmp r0, 0xFF - bne _08047BEE - lsls r1, r2, 1 - adds r1, r7 - ldrh r2, [r1] - adds r0, r6, 0 - ands r0, r2 - mov r2, r12 - orrs r0, r2 - strh r0, [r1] - lsls r3, 24 - asrs r1, r3, 23 - adds r1, r7 - adds r1, 0x40 - ldrh r2, [r1] - adds r0, r6, 0 - ands r0, r2 - mov r5, r12 - orrs r0, r5 - strh r0, [r1] - b _08047C1E -_08047BEE: - lsls r2, 1 - adds r2, r7 - ldrh r0, [r2] - adds r1, r6, 0 - ands r1, r0 - ldrb r0, [r5] - adds r0, 0x14 - orrs r1, r0 - strh r1, [r2] - lsls r4, r3, 24 - asrs r3, r4, 24 - lsls r2, r3, 1 - adds r2, r7 - adds r2, 0x40 - ldrh r0, [r2] - adds r1, r6, 0 - ands r1, r0 - mov r5, sp - adds r0, r5, r3 - ldrb r0, [r0] - adds r0, 0x34 - orrs r1, r0 - strh r1, [r2] - adds r3, r4, 0 -_08047C1E: - movs r0, 0x80 - lsls r0, 17 - add r0, r8 - lsrs r1, r0, 24 - movs r2, 0x80 - lsls r2, 17 - adds r0, r3, r2 - lsrs r3, r0, 24 - asrs r0, 24 - cmp r0, 0x3 - ble _08047BB8 - b _08047C9A -_08047C36: - movs r3, 0 - movs r4, 0xFC - lsls r4, 8 - movs r6, 0x1E -_08047C3E: - lsls r1, r3, 24 - asrs r2, r1, 24 - mov r3, sp - adds r5, r3, r2 - ldrb r0, [r5] - adds r3, r1, 0 - cmp r0, 0xFF - bne _08047C6A - lsls r1, r2, 1 - adds r1, r7 - ldrh r2, [r1] - adds r0, r4, 0 - ands r0, r2 - orrs r0, r6 - strh r0, [r1] - adds r1, 0x40 - ldrh r2, [r1] - adds r0, r4, 0 - ands r0, r2 - orrs r0, r6 - strh r0, [r1] - b _08047C8C -_08047C6A: - lsls r2, 1 - adds r2, r7 - ldrh r0, [r2] - adds r1, r4, 0 - ands r1, r0 - ldrb r0, [r5] - adds r0, 0x14 - orrs r1, r0 - strh r1, [r2] - adds r2, 0x40 - ldrh r0, [r2] - adds r1, r4, 0 - ands r1, r0 - ldrb r0, [r5] - adds r0, 0x34 - orrs r1, r0 - strh r1, [r2] -_08047C8C: - movs r5, 0x80 - lsls r5, 17 - adds r0, r3, r5 - lsrs r3, r0, 24 - asrs r0, 24 - cmp r0, 0x3 - ble _08047C3E -_08047C9A: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8047B0C - - thumb_func_start sub_8047CAC -sub_8047CAC: @ 8047CAC - push {r4,r5,lr} - adds r4, r0, 0 - adds r0, r1, 0 - adds r5, r2, 0 - lsls r4, 16 - lsrs r4, 16 - movs r1, 0x1E - strh r1, [r5, 0x8] - lsls r0, 16 - asrs r0, 16 - adds r1, r5, 0 - movs r2, 0 - bl sub_8047B0C - lsls r4, 16 - asrs r4, 16 - adds r5, 0xA - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x1 - bl sub_8047B0C - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8047CAC - - thumb_func_start CreateBattlerHealthboxSprites -CreateBattlerHealthboxSprites: @ 8047CE0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - movs r0, 0 - str r0, [sp] - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _08047DF4 - mov r0, r10 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08047D78 - ldr r4, _08047D68 @ =gUnknown_8260278 - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r7, r0, 24 - ldr r4, _08047D6C @ =gSprites - lsls r1, r6, 4 - adds r1, r6 - lsls r1, 2 - adds r1, r4 - ldrb r2, [r1, 0x1] - movs r3, 0x3F - adds r0, r3, 0 - ands r0, r2 - strb r0, [r1, 0x1] - lsls r2, r7, 4 - adds r2, r7 - lsls r2, 2 - adds r2, r4 - ldrb r0, [r2, 0x1] - ands r3, r0 - strb r3, [r2, 0x1] - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x40 - ldr r4, _08047D70 @ =0x000003ff - adds r0, r4, 0 - ands r1, r0 - ldr r0, _08047D74 @ =0xfffffc00 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, 0x4] - b _08047DBE - .align 2, 0 -_08047D68: .4byte gUnknown_8260278 -_08047D6C: .4byte gSprites -_08047D70: .4byte 0x000003ff -_08047D74: .4byte 0xfffffc00 -_08047D78: - ldr r4, _08047DE0 @ =gUnknown_82602A8 - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _08047DE4 @ =gSprites - lsls r2, r7, 4 - adds r2, r7 - lsls r2, 2 - adds r2, r0 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x20 - ldr r5, _08047DE8 @ =0x000003ff - adds r0, r5, 0 - ands r1, r0 - ldr r0, _08047DEC @ =0xfffffc00 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, 0x4] - movs r0, 0x2 - str r0, [sp] -_08047DBE: - ldr r2, _08047DE4 @ =gSprites - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - adds r0, r2 - strh r7, [r0, 0x6] - lsls r0, r7, 4 - adds r0, r7 - lsls r0, 2 - adds r1, r0, r2 - strh r6, [r1, 0x38] - adds r2, 0x1C - adds r0, r2 - ldr r1, _08047DF0 @ =sub_8048128 - str r1, [r0] - b _08047F1C - .align 2, 0 -_08047DE0: .4byte gUnknown_82602A8 -_08047DE4: .4byte gSprites -_08047DE8: .4byte 0x000003ff -_08047DEC: .4byte 0xfffffc00 -_08047DF0: .4byte sub_8048128 -_08047DF4: - mov r0, r10 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08047E98 - mov r0, r10 - bl GetBattlerPosition - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 25 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - ldr r4, _08047E84 @ =gUnknown_8260278 - adds r0, r4 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r6, r0, 24 - mov r0, r10 - bl GetBattlerPosition - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 25 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r0, r4 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r7, r0, 24 - ldr r4, _08047E88 @ =gSprites - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - adds r0, r4 - strh r7, [r0, 0x6] - lsls r2, r7, 4 - adds r2, r7 - lsls r2, 2 - adds r3, r2, r4 - strh r6, [r3, 0x38] - ldrh r1, [r3, 0x4] - mov r8, r1 - mov r5, r8 - lsls r1, r5, 22 - lsrs r1, 22 - adds r1, 0x20 - ldr r5, _08047E8C @ =0x000003ff - adds r0, r5, 0 - ands r1, r0 - ldr r0, _08047E90 @ =0xfffffc00 - mov r5, r8 - ands r0, r5 - orrs r0, r1 - strh r0, [r3, 0x4] - adds r4, 0x1C - adds r2, r4 - ldr r0, _08047E94 @ =sub_8048128 - str r0, [r2] - movs r0, 0x1 - b _08047F1A - .align 2, 0 -_08047E84: .4byte gUnknown_8260278 -_08047E88: .4byte gSprites -_08047E8C: .4byte 0x000003ff -_08047E90: .4byte 0xfffffc00 -_08047E94: .4byte sub_8048128 -_08047E98: - mov r0, r10 - bl GetBattlerPosition - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 25 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - ldr r4, _08047FE0 @ =gUnknown_82602A8 - adds r0, r4 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r6, r0, 24 - mov r0, r10 - bl GetBattlerPosition - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 25 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r0, r4 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r7, r0, 24 - ldr r4, _08047FE4 @ =gSprites - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - adds r0, r4 - strh r7, [r0, 0x6] - lsls r2, r7, 4 - adds r2, r7 - lsls r2, 2 - adds r3, r2, r4 - strh r6, [r3, 0x38] - ldrh r1, [r3, 0x4] - mov r8, r1 - mov r5, r8 - lsls r1, r5, 22 - lsrs r1, 22 - adds r1, 0x20 - ldr r5, _08047FE8 @ =0x000003ff - adds r0, r5, 0 - ands r1, r0 - ldr r0, _08047FEC @ =0xfffffc00 - mov r5, r8 - ands r0, r5 - orrs r0, r1 - strh r0, [r3, 0x4] - adds r4, 0x1C - adds r2, r4 - ldr r0, _08047FF0 @ =sub_8048128 - str r0, [r2] - movs r0, 0x2 -_08047F1A: - str r0, [sp] -_08047F1C: - ldr r0, _08047FF4 @ =gBattlerPositions - add r0, r10 - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - ldr r1, _08047FF8 @ =gUnknown_82602F8 - adds r0, r1 - movs r1, 0x8C - movs r2, 0x3C - movs r3, 0 - bl CreateSpriteAtEnd - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, r5, 4 - adds r4, r5 - lsls r4, 2 - ldr r1, _08047FE4 @ =gSprites - mov r8, r1 - add r4, r8 - mov r0, r10 - bl GetBattlerSide - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 21 - ldr r0, _08047FFC @ =gUnknown_82603C4 - adds r1, r0 - adds r0, r4, 0 - bl SetSubspriteTables - adds r2, r4, 0 - adds r2, 0x42 - ldrb r1, [r2] - movs r0, 0x3F - ands r0, r1 - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] - ldrb r1, [r4, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - movs r2, 0x4 - mov r9, r2 - mov r1, r9 - orrs r0, r1 - strb r0, [r4, 0x5] - movs r0, 0x1 - bl GetHealthboxElementGfxPtr - ldrh r1, [r4, 0x4] - lsls r1, 22 - lsrs r1, 17 - ldr r2, _08048000 @ =0x06010000 - adds r1, r2 - ldr r2, _08048004 @ =0x04000010 - bl CpuSet - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - add r0, r8 - strh r5, [r0, 0x38] - mov r2, r10 - strh r2, [r0, 0x3A] - adds r0, 0x3E - ldrb r1, [r0] - mov r5, r9 - orrs r1, r5 - strb r1, [r0] - lsls r0, r7, 4 - adds r0, r7 - lsls r0, 2 - add r0, r8 - adds r0, 0x3E - ldrb r1, [r0] - orrs r1, r5 - strb r1, [r0] - strh r6, [r4, 0x38] - mov r0, sp - ldrh r0, [r0] - strh r0, [r4, 0x3A] - adds r4, 0x3E - ldrb r0, [r4] - orrs r0, r5 - strb r0, [r4] - adds r0, r6, 0 - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08047FE0: .4byte gUnknown_82602A8 -_08047FE4: .4byte gSprites -_08047FE8: .4byte 0x000003ff -_08047FEC: .4byte 0xfffffc00 -_08047FF0: .4byte sub_8048128 -_08047FF4: .4byte gBattlerPositions -_08047FF8: .4byte gUnknown_82602F8 -_08047FFC: .4byte gUnknown_82603C4 -_08048000: .4byte 0x06010000 -_08048004: .4byte 0x04000010 - thumb_func_end CreateBattlerHealthboxSprites - - thumb_func_start CreateSafariPlayerHealthboxSprites -CreateSafariPlayerHealthboxSprites: @ 8048008 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r4, _08048094 @ =gUnknown_82602D8 - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSprite - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08048098 @ =gSprites - mov r9, r1 - lsls r4, r6, 4 - adds r4, r6 - lsls r4, 2 - add r4, r9 - ldrb r3, [r4, 0x1] - movs r2, 0x3F - adds r1, r2, 0 - ands r1, r3 - strb r1, [r4, 0x1] - lsls r3, r0, 4 - adds r3, r0 - lsls r3, 2 - mov r7, r9 - adds r5, r3, r7 - ldrb r1, [r5, 0x1] - ands r2, r1 - strb r2, [r5, 0x1] - ldrh r1, [r5, 0x4] - mov r8, r1 - mov r7, r8 - lsls r2, r7, 22 - lsrs r2, 22 - adds r2, 0x40 - ldr r7, _0804809C @ =0x000003ff - adds r1, r7, 0 - ands r2, r1 - ldr r1, _080480A0 @ =0xfffffc00 - mov r7, r8 - ands r1, r7 - orrs r1, r2 - strh r1, [r5, 0x4] - strh r0, [r4, 0x6] - strh r6, [r5, 0x38] - movs r0, 0x1C - add r9, r0 - add r3, r9 - ldr r0, _080480A4 @ =sub_8048128 - str r0, [r3] - adds r0, r6, 0 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08048094: .4byte gUnknown_82602D8 -_08048098: .4byte gSprites -_0804809C: .4byte 0x000003ff -_080480A0: .4byte 0xfffffc00 -_080480A4: .4byte sub_8048128 - thumb_func_end CreateSafariPlayerHealthboxSprites - - thumb_func_start GetHealthboxElementGfxPtr -GetHealthboxElementGfxPtr: @ 80480A8 - lsls r0, 24 - lsrs r0, 19 - ldr r1, _080480B4 @ =gHealthboxElementsGfxTable - adds r0, r1 - bx lr - .align 2, 0 -_080480B4: .4byte gHealthboxElementsGfxTable - thumb_func_end GetHealthboxElementGfxPtr - - thumb_func_start sub_80480B8 -sub_80480B8: @ 80480B8 - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x38] - lsls r0, 24 - lsrs r5, r0, 24 - movs r1, 0x3A - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080480E8 - cmp r0, 0x1 - bgt _080480FC - cmp r0, 0 - bne _080480FC - ldr r2, _080480E4 @ =gSprites - lsls r3, r5, 4 - adds r1, r3, r5 - lsls r1, 2 - adds r1, r2 - ldrh r0, [r1, 0x20] - adds r0, 0x10 - b _0804810A - .align 2, 0 -_080480E4: .4byte gSprites -_080480E8: - ldr r2, _080480F8 @ =gSprites - lsls r3, r5, 4 - adds r1, r3, r5 - lsls r1, 2 - adds r1, r2 - ldrh r0, [r1, 0x20] - adds r0, 0x10 - b _0804810A - .align 2, 0 -_080480F8: .4byte gSprites -_080480FC: - ldr r2, _08048124 @ =gSprites - lsls r3, r5, 4 - adds r1, r3, r5 - lsls r1, 2 - adds r1, r2 - ldrh r0, [r1, 0x20] - adds r0, 0x8 -_0804810A: - strh r0, [r4, 0x20] - ldrh r0, [r1, 0x22] - strh r0, [r4, 0x22] - adds r0, r3, r5 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x24] - strh r1, [r4, 0x24] - ldrh r0, [r0, 0x26] - strh r0, [r4, 0x26] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08048124: .4byte gSprites - thumb_func_end sub_80480B8 - - thumb_func_start sub_8048128 -sub_8048128: @ 8048128 - ldrh r1, [r0, 0x38] - lsls r1, 24 - lsrs r1, 24 - ldr r3, _0804814C @ =gSprites - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - adds r2, r3 - ldrh r1, [r2, 0x20] - adds r1, 0x40 - strh r1, [r0, 0x20] - ldrh r1, [r2, 0x22] - strh r1, [r0, 0x22] - ldrh r1, [r2, 0x24] - strh r1, [r0, 0x24] - ldrh r1, [r2, 0x26] - strh r1, [r0, 0x26] - bx lr - .align 2, 0 -_0804814C: .4byte gSprites - thumb_func_end sub_8048128 - - thumb_func_start SetBattleBarStruct -SetBattleBarStruct: @ 8048150 - push {r4-r7,lr} - ldr r7, [sp, 0x14] - lsls r0, 24 - lsrs r0, 24 - ldr r6, _08048180 @ =gBattleSpritesDataPtr - ldr r4, [r6] - ldr r5, [r4, 0xC] - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 2 - adds r5, r4, r5 - strb r1, [r5] - ldr r0, [r6] - ldr r0, [r0, 0xC] - adds r4, r0 - str r2, [r4, 0x4] - str r3, [r4, 0x8] - str r7, [r4, 0xC] - ldr r0, _08048184 @ =0xffff8000 - str r0, [r4, 0x10] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08048180: .4byte gBattleSpritesDataPtr -_08048184: .4byte 0xffff8000 - thumb_func_end SetBattleBarStruct - - thumb_func_start SetHealthboxSpriteInvisible -SetHealthboxSpriteInvisible: @ 8048188 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r4, _080481D0 @ =gSprites - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r4 - adds r1, r2, 0 - adds r1, 0x3E - ldrb r0, [r1] - movs r3, 0x4 - orrs r0, r3 - strb r0, [r1] - movs r0, 0x38 - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - adds r0, 0x3E - ldrb r1, [r0] - orrs r1, r3 - strb r1, [r0] - ldrh r1, [r2, 0x6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - adds r0, 0x3E - ldrb r1, [r0] - orrs r1, r3 - strb r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080481D0: .4byte gSprites - thumb_func_end SetHealthboxSpriteInvisible - - thumb_func_start SetHealthboxSpriteVisible -SetHealthboxSpriteVisible: @ 80481D4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _08048224 @ =gSprites - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r5 - adds r4, r2, 0 - adds r4, 0x3E - ldrb r1, [r4] - movs r3, 0x5 - negs r3, r3 - adds r0, r3, 0 - ands r0, r1 - strb r0, [r4] - movs r0, 0x38 - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - adds r0, 0x3E - ldrb r4, [r0] - adds r1, r3, 0 - ands r1, r4 - strb r1, [r0] - ldrh r1, [r2, 0x6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - adds r0, 0x3E - ldrb r1, [r0] - ands r3, r1 - strb r3, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08048224: .4byte gSprites - thumb_func_end SetHealthboxSpriteVisible - - thumb_func_start UpdateSpritePos -UpdateSpritePos: @ 8048228 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r4, _08048244 @ =gSprites - lsls r3, r0, 4 - adds r3, r0 - lsls r3, 2 - adds r3, r4 - strh r1, [r3, 0x20] - strh r2, [r3, 0x22] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08048244: .4byte gSprites - thumb_func_end UpdateSpritePos - - thumb_func_start DestoryHealthboxSprite -DestoryHealthboxSprite: @ 8048248 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _08048284 @ =gSprites - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - adds r4, r5 - ldrh r1, [r4, 0x6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - bl DestroySprite - movs r0, 0x38 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - bl DestroySprite - adds r0, r4, 0 - bl DestroySprite - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08048284: .4byte gSprites - thumb_func_end DestoryHealthboxSprite - - thumb_func_start DummyBattleInterfaceFunc -DummyBattleInterfaceFunc: @ 8048288 - bx lr - thumb_func_end DummyBattleInterfaceFunc - - thumb_func_start UpdateOamPriorityInAllHealthboxes -UpdateOamPriorityInAllHealthboxes: @ 804828C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r0, 24 - movs r6, 0 - ldr r1, _08048310 @ =gBattlersCount - mov r8, r1 - ldrb r2, [r1] - cmp r6, r2 - bge _08048304 - ldr r1, _08048314 @ =gSprites - mov r12, r1 - movs r1, 0x3 - ands r0, r1 - lsls r5, r0, 2 - movs r7, 0xD - negs r7, r7 - ldr r2, _08048318 @ =gHealthboxSpriteIds - mov r9, r2 -_080482B6: - mov r1, r9 - adds r0, r6, r1 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - add r1, r12 - ldrb r4, [r1, 0x6] - ldrh r3, [r1, 0x38] - lsls r3, 24 - lsrs r3, 24 - ldrb r2, [r1, 0x5] - adds r0, r7, 0 - ands r0, r2 - orrs r0, r5 - strb r0, [r1, 0x5] - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - add r1, r12 - ldrb r2, [r1, 0x5] - adds r0, r7, 0 - ands r0, r2 - orrs r0, r5 - strb r0, [r1, 0x5] - lsls r1, r3, 4 - adds r1, r3 - lsls r1, 2 - add r1, r12 - ldrb r2, [r1, 0x5] - adds r0, r7, 0 - ands r0, r2 - orrs r0, r5 - strb r0, [r1, 0x5] - adds r6, 0x1 - mov r2, r8 - ldrb r2, [r2] - cmp r6, r2 - blt _080482B6 -_08048304: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08048310: .4byte gBattlersCount -_08048314: .4byte gSprites -_08048318: .4byte gHealthboxSpriteIds - thumb_func_end UpdateOamPriorityInAllHealthboxes - - thumb_func_start InitBattlerHealthboxCoords -InitBattlerHealthboxCoords: @ 804831C - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - movs r5, 0 - movs r4, 0 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _08048348 - adds r0, r6, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08048342 - movs r5, 0x2C - movs r4, 0x1E - b _08048380 -_08048342: - movs r5, 0x9E - movs r4, 0x58 - b _08048380 -_08048348: - adds r0, r6, 0 - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08048376 - cmp r0, 0x1 - bgt _08048360 - cmp r0, 0 - beq _0804836A - b _08048380 -_08048360: - cmp r0, 0x2 - beq _08048370 - cmp r0, 0x3 - beq _0804837C - b _08048380 -_0804836A: - movs r5, 0x9F - movs r4, 0x4B - b _08048380 -_08048370: - movs r5, 0xAB - movs r4, 0x64 - b _08048380 -_08048376: - movs r5, 0x2C - movs r4, 0x13 - b _08048380 -_0804837C: - movs r5, 0x20 - movs r4, 0x2C -_08048380: - ldr r0, _08048394 @ =gHealthboxSpriteIds - adds r0, r6, r0 - ldrb r0, [r0] - adds r1, r5, 0 - adds r2, r4, 0 - bl UpdateSpritePos - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08048394: .4byte gHealthboxSpriteIds - thumb_func_end InitBattlerHealthboxCoords - - thumb_func_start UpdateLvlInHealthbox -UpdateLvlInHealthbox: @ 8048398 - push {r4-r6,lr} - sub sp, 0x14 - adds r5, r0, 0 - adds r4, r1, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _08048410 @ =gUnknown_826051C - mov r0, sp - movs r2, 0x10 - bl memcpy - mov r0, sp - adds r0, 0x2 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - adds r1, r0, 0 - subs r1, 0x2 - mov r0, sp - subs r1, r0 - movs r0, 0x3 - subs r0, r1 - lsls r1, r0, 2 - adds r1, r0 - add r3, sp, 0x10 - mov r0, sp - movs r2, 0x3 - bl AddTextPrinterAndCreateWindowOnHealthbox - adds r6, r0, 0 - ldr r0, _08048414 @ =gSprites - lsls r1, r5, 4 - adds r1, r5 - lsls r1, 2 - adds r1, r0 - ldrh r0, [r1, 0x4] - lsls r0, 22 - lsrs r4, r0, 17 - ldrh r0, [r1, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08048420 - bl IsDoubleBattle - lsls r0, 24 - ldr r2, _08048418 @ =0x06010420 - adds r1, r4, r2 - cmp r0, 0 - bne _08048424 - ldr r0, _0804841C @ =0x06010820 - adds r1, r4, r0 - b _08048424 - .align 2, 0 -_08048410: .4byte gUnknown_826051C -_08048414: .4byte gSprites -_08048418: .4byte 0x06010420 -_0804841C: .4byte 0x06010820 -_08048420: - ldr r2, _0804843C @ =0x06010400 - adds r1, r4, r2 -_08048424: - adds r0, r1, 0 - adds r1, r6, 0 - movs r2, 0x3 - bl sub_804A6E8 - ldr r0, [sp, 0x10] - bl sub_804A6D8 - add sp, 0x14 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0804843C: .4byte 0x06010400 - thumb_func_end UpdateLvlInHealthbox - thumb_func_start UpdateHpTextInHealthbox UpdateHpTextInHealthbox: @ 8048440 push {r4-r7,lr} @@ -1285,7 +89,7 @@ _080484BC: adds r0, r4, r1 adds r1, r5, 0 movs r2, 0x1 - bl sub_804A6E8 + bl TextIntoHealthboxObject ldr r2, _08048510 @ =0x06010a00 adds r4, r2 adds r1, r5, 0 @@ -1293,9 +97,9 @@ _080484BC: adds r0, r4, 0 _080484FE: movs r2, 0x2 - bl sub_804A6E8 + bl TextIntoHealthboxObject ldr r0, [sp, 0x2C] - bl sub_804A6D8 + bl RemoveWindowOnHealthbox b _080485F8 .align 2, 0 _0804850C: .4byte 0x060102e0 @@ -1332,7 +136,7 @@ _0804854C: asrs r1, 16 mov r0, r9 mov r2, r8 - bl sub_8048618 + bl UpdateHpTextInHealthboxInDoubles b _080485F8 .align 2, 0 _0804855C: .4byte gUnknown_826052C @@ -1427,8 +231,8 @@ _08048610: .4byte 0x06010000 _08048614: .4byte 0x04000008 thumb_func_end UpdateHpTextInHealthbox - thumb_func_start sub_8048618 -sub_8048618: @ 8048618 + thumb_func_start UpdateHpTextInHealthboxInDoubles +UpdateHpTextInHealthboxInDoubles: @ 8048618 push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -1651,10 +455,10 @@ _080487DC: _080487EC: .4byte gSprites _080487F0: .4byte 0x06010000 _080487F4: .4byte 0x04000008 - thumb_func_end sub_8048618 + thumb_func_end UpdateHpTextInHealthboxInDoubles - thumb_func_start sub_80487F8 -sub_80487F8: @ 80487F8 + thumb_func_start PrintSafariMonInfo +PrintSafariMonInfo: @ 80487F8 push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -1943,7 +747,7 @@ _08048A2C: .align 2, 0 _08048A44: .4byte 0x060100c0 _08048A48: .4byte 0x04000008 - thumb_func_end sub_80487F8 + thumb_func_end PrintSafariMonInfo thumb_func_start SwapHpBarsWithHpText SwapHpBarsWithHpText: @ 8048A4C @@ -2087,7 +891,7 @@ _08048B16: asrs r1, 16 adds r0, r4, 0 movs r2, 0 - bl sub_8048618 + bl UpdateHpTextInHealthboxInDoubles ldrb r4, [r6] mov r2, r8 ldrh r0, [r2] @@ -2153,7 +957,7 @@ _08048BE8: muls r1, r2 ldr r2, _08048C10 @ =gEnemyParty adds r1, r2 - bl sub_80487F8 + bl PrintSafariMonInfo b _08048CCA .align 2, 0 _08048C0C: .4byte gBattleTypeFlags @@ -2194,7 +998,7 @@ _08048C14: asrs r1, 16 adds r0, r4, 0 movs r2, 0 - bl sub_8048618 + bl UpdateHpTextInHealthboxInDoubles ldrb r4, [r6] mov r2, r8 ldrh r0, [r2] @@ -2210,7 +1014,7 @@ _08048C6E: asrs r1, 16 adds r0, r4, 0 movs r2, 0x1 - bl sub_8048618 + bl UpdateHpTextInHealthboxInDoubles b _08048CCA .align 2, 0 _08048C88: .4byte 0x06010000 @@ -3667,7 +2471,7 @@ _08049782: adds r0, r4, r1 adds r1, r6, 0 movs r2, 0x6 - bl sub_804A6E8 + bl TextIntoHealthboxObject bl IsDoubleBattle lsls r0, 24 ldr r2, _080497F0 @ =0x06010400 @@ -3681,7 +2485,7 @@ _080497D4: adds r1, 0xC0 adds r0, r5, 0 movs r2, 0x1 - bl sub_804A6E8 + bl TextIntoHealthboxObject b _08049804 .align 2, 0 _080497E4: .4byte gDisplayedStringBattle @@ -3694,10 +2498,10 @@ _080497F8: adds r0, r4, r1 adds r1, r6, 0 movs r2, 0x7 - bl sub_804A6E8 + bl TextIntoHealthboxObject _08049804: ldr r0, [sp, 0xC] - bl sub_804A6D8 + bl RemoveWindowOnHealthbox add sp, 0x10 pop {r3} mov r8, r3 @@ -4276,16 +3080,16 @@ UpdateSafariBallsTextOnHealthbox: @ 8049CAC adds r0, r4, r1 adds r1, r5, 0 movs r2, 0x6 - bl sub_804A6E8 + bl TextIntoHealthboxObject ldr r0, _08049D0C @ =0x06010800 adds r4, r0 adds r5, 0xC0 adds r0, r4, 0 adds r1, r5, 0 movs r2, 0x2 - bl sub_804A6E8 + bl TextIntoHealthboxObject ldr r0, [sp] - bl sub_804A6D8 + bl RemoveWindowOnHealthbox add sp, 0x4 pop {r4,r5} pop {r0} @@ -4344,7 +3148,7 @@ UpdateLeftNoOfBallsTextOnHealthbox: @ 8049D10 movs r2, 0x4 bl sub_804A734 ldr r0, [sp, 0x10] - bl sub_804A6D8 + bl RemoveWindowOnHealthbox add sp, 0x14 pop {r4,r5} pop {r0} @@ -5577,18 +4381,18 @@ AddTextPrinterAndCreateWindowOnHealthbox: @ 804A648 _0804A6D4: .4byte gUnknown_8260564 thumb_func_end AddTextPrinterAndCreateWindowOnHealthbox - thumb_func_start sub_804A6D8 -sub_804A6D8: @ 804A6D8 + thumb_func_start RemoveWindowOnHealthbox +RemoveWindowOnHealthbox: @ 804A6D8 push {lr} lsls r0, 24 lsrs r0, 24 bl RemoveWindow pop {r0} bx r0 - thumb_func_end sub_804A6D8 + thumb_func_end RemoveWindowOnHealthbox - thumb_func_start sub_804A6E8 -sub_804A6E8: @ 804A6E8 + thumb_func_start TextIntoHealthboxObject +TextIntoHealthboxObject: @ 804A6E8 push {r4-r6,lr} adds r6, r0, 0 adds r5, r1, 0 @@ -5625,7 +4429,7 @@ _0804A724: .align 2, 0 _0804A72C: .4byte 0x001fffff _0804A730: .4byte 0x04000003 - thumb_func_end sub_804A6E8 + thumb_func_end TextIntoHealthboxObject thumb_func_start sub_804A734 sub_804A734: @ 804A734 diff --git a/data/battle_interface.s b/data/battle_interface.s index f8cf4a4b9..12b46279c 100644 --- a/data/battle_interface.s +++ b/data/battle_interface.s @@ -14,25 +14,25 @@ gUnknown_8260270:: @ 8260270 .4byte 0xc0004000, 0x00000400 -gUnknown_8260278:: @ 8260278 +sHealthboxPlayerSpriteTemplates:: @ 8260278 spr_template 55039, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy spr_template 55040, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy -gUnknown_82602A8:: @ 82602A8 +sHealthboxOpponentSpriteTemplates:: @ 82602A8 spr_template 55041, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy spr_template 55042, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy -gUnknown_82602D8:: @ 82602D8 +sHealthboxSafariSpriteTemplate:: @ 82602D8 spr_template 55051, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy gUnknown_82602F0:: .4byte 0x40004000, 0x00000400 gUnknown_82602F8:: @ 82602F8 - spr_template 55044, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80480B8 - spr_template 55045, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80480B8 - spr_template 55046, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80480B8 - spr_template 55047, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80480B8 + spr_template 55044, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_HealthBar + spr_template 55045, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_HealthBar + spr_template 55046, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_HealthBar + spr_template 55047, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_HealthBar gUnknown_8260358:: subsprite 240, 0, 1, 0x0000, 64x32 diff --git a/include/graphics.h b/include/graphics.h index dc0389420..03c9e5de6 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4854,4 +4854,7 @@ extern const u32 gFireRedTrainerCard_Gfx[]; extern const u16 gEmeraldTrainerCard_Pal[]; extern const u32 gEmeraldTrainerCard_Gfx[]; +// battle_interface +extern const u8 gHealthboxElementsGfxTable[][32]; + #endif //GUARD_GRAPHICS_H diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h index 3695d46df..6f96fa86d 100644 --- a/include/pokemon_summary_screen.h +++ b/include/pokemon_summary_screen.h @@ -34,5 +34,6 @@ enum PokemonSummaryScreenPage s32 GetLastViewedMonIndex(void); void ShowPokemonSummaryScreen(struct Pokemon * party, u8 cursorPos, u8 lastIdx, void (*callback)(void), u8 a4); +extern const u8 *gNatureNames[]; #endif // GUARD_POKEMON_SUMMARY_SCREEN_H diff --git a/ld_script.txt b/ld_script.txt index 995bed11f..d05f63e44 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -79,6 +79,7 @@ SECTIONS { src/util.o(.text); src/blend_palette.o(.text); src/daycare.o(.text); + src/battle_interface.o(.text); asm/battle_interface.o(.text); asm/smokescreen.o(.text); src/pokeball.o(.text); diff --git a/src/battle_interface.c b/src/battle_interface.c new file mode 100644 index 000000000..fd4f9af3e --- /dev/null +++ b/src/battle_interface.c @@ -0,0 +1,383 @@ +#include "global.h" +#include "battle_anim.h" +#include "battle_interface.h" +#include "graphics.h" +#include "pokemon_summary_screen.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" + +void SpriteCB_HealthBoxOther(struct Sprite * sprite); +const u8 *GetHealthboxElementGfxPtr(u8 which); +u8 *AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 *windowId); +void RemoveWindowOnHealthbox(u32 windowId); +void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 windowWidth); +void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent); + +extern const struct SpriteTemplate sHealthboxPlayerSpriteTemplates[]; +extern const struct SpriteTemplate sHealthboxOpponentSpriteTemplates[]; +extern const struct SpriteTemplate sHealthboxSafariSpriteTemplate; +extern const struct SpriteTemplate gUnknown_82602F8[]; +extern const struct SubspriteTable gUnknown_82603C4[]; +extern const u8 gUnknown_826051C[16]; +extern const u8 gUnknown_826052C[20]; +extern const u8 gUnknown_8260542[20]; + +void sub_8047B0C(s16 number, u16 *dest, bool8 unk) +{ + s8 i, j; + u8 buff[4]; + + for (i = 0; i < 4; i++) + { + buff[i] = 0; + } + + for (i = 3; ; i--) + { + if (number > 0) + { + buff[i] = number % 10; + number /= 10; + } + else + { + for (; i > -1; i--) + { + buff[i] = 0xFF; + } + if (buff[3] == 0xFF) + buff[3] = 0; + break; + } + } + + + + if (!unk) + { + for (i = 0, j = 0; i < 4; i++) + { + if (buff[j] == 0xFF) + { + dest[j + 0x00] &= 0xFC00; + dest[j + 0x00] |= 0x1E; + dest[i + 0x20] &= 0xFC00; + dest[i + 0x20] |= 0x1E; + } + else + { + dest[j + 0x00] &= 0xFC00; + dest[j + 0x00] |= 0x14 + buff[j]; + dest[i + 0x20] &= 0xFC00; + dest[i + 0x20] |= 0x34 + buff[i]; + } + j++; + } + } + else + { + for (i = 0; i < 4; i++) + { + if (buff[i] == 0xFF) + { + dest[i + 0x00] &= 0xFC00; + dest[i + 0x00] |= 0x1E; + dest[i + 0x20] &= 0xFC00; + dest[i + 0x20] |= 0x1E; + } + else + { + dest[i + 0x00] &= 0xFC00; + dest[i + 0x00] |= 0x14 + buff[i]; + dest[i + 0x20] &= 0xFC00; + dest[i + 0x20] |= 0x34 + buff[i]; + } + } + } +} + +void sub_8047CAC(s16 num1, s16 num2, u16 *dest) +{ + dest[4] = 0x1E; + sub_8047B0C(num2, &dest[0], FALSE); + sub_8047B0C(num1, &dest[5], TRUE); +} + +// Because the healthbox is too large to fit into one sprite, it is divided into two sprites. +// healthboxLeft or healthboxMain is the left part that is used as the 'main' sprite. +// healthboxRight or healthboxOther is the right part of the healthbox. +// There's also the third sprite under name of healthbarSprite that refers to the healthbar visible on the healtbox. + +// data fields for healthboxMain +// oam.affineParam holds healthboxRight spriteId +#define hMain_HealthBarSpriteId data[5] +#define hMain_Battler data[6] +#define hMain_Data7 data[7] + +// data fields for healthboxRight +#define hOther_HealthBoxSpriteId data[5] + +// data fields for healthbar +#define hBar_HealthBoxSpriteId data[5] +#define hBar_Data6 data[6] + +u8 CreateBattlerHealthboxSprites(u8 a) +{ + s16 data6 = 0; + u8 healthboxLeftSpriteId; + u8 healthboxRightSpriteId; + u8 healthbarSpriteId; + struct Sprite *sprite; + + if (!IsDoubleBattle()) + { + if (GetBattlerSide(a) == 0) + { + healthboxLeftSpriteId = CreateSprite(&sHealthboxPlayerSpriteTemplates[0], 240, 160, 1); + healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxPlayerSpriteTemplates[0], 240, 160, 1); + + gSprites[healthboxLeftSpriteId].oam.shape = 0; + gSprites[healthboxRightSpriteId].oam.shape = 0; + gSprites[healthboxRightSpriteId].oam.tileNum += 64; + } + else + { + healthboxLeftSpriteId = CreateSprite(&sHealthboxOpponentSpriteTemplates[0], 240, 160, 1); + healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxOpponentSpriteTemplates[0], 240, 160, 1); + + gSprites[healthboxRightSpriteId].oam.tileNum += 32; + data6 = 2; + } + + gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId; + gSprites[healthboxRightSpriteId].hBar_HealthBoxSpriteId = healthboxLeftSpriteId; + gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther; + } + else + { + if (GetBattlerSide(a) == 0) + { + healthboxLeftSpriteId = CreateSprite(&sHealthboxPlayerSpriteTemplates[GetBattlerPosition(a) / 2], 240, 160, 1); + healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxPlayerSpriteTemplates[GetBattlerPosition(a) / 2], 240, 160, 1); + + gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId; + gSprites[healthboxRightSpriteId].hBar_HealthBoxSpriteId = healthboxLeftSpriteId; + gSprites[healthboxRightSpriteId].oam.tileNum += 32; + gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther; + data6 = 1; + } + else + { + healthboxLeftSpriteId = CreateSprite(&sHealthboxOpponentSpriteTemplates[GetBattlerPosition(a) / 2], 240, 160, 1); + healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxOpponentSpriteTemplates[GetBattlerPosition(a) / 2], 240, 160, 1); + + gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId; + gSprites[healthboxRightSpriteId].hBar_HealthBoxSpriteId = healthboxLeftSpriteId; + gSprites[healthboxRightSpriteId].oam.tileNum += 32; + gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther; + data6 = 2; + } + } + healthbarSpriteId = CreateSpriteAtEnd(&gUnknown_82602F8[gBattlerPositions[a]], 140, 60, 0); + sprite = &gSprites[healthbarSpriteId]; + SetSubspriteTables(sprite, &gUnknown_82603C4[GetBattlerSide(a)]); + sprite->subspriteMode = 2; + sprite->oam.priority = 1; + CpuCopy32(GetHealthboxElementGfxPtr(1), OBJ_VRAM0 + sprite->oam.tileNum * 32, 64); + + gSprites[healthboxLeftSpriteId].hBar_HealthBoxSpriteId = healthbarSpriteId; + gSprites[healthboxLeftSpriteId].hBar_Data6 = a; + gSprites[healthboxLeftSpriteId].invisible = TRUE; + gSprites[healthboxRightSpriteId].invisible = TRUE; + sprite->data[5] = healthboxLeftSpriteId; + sprite->data[6] = data6; + sprite->invisible = TRUE; + + return healthboxLeftSpriteId; +} + +u8 CreateSafariPlayerHealthboxSprites(void) +{ + u8 healthboxLeftSpriteId = CreateSprite(&sHealthboxSafariSpriteTemplate, 240, 160, 1); + u8 healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxSafariSpriteTemplate, 240, 160, 1); + + gSprites[healthboxLeftSpriteId].oam.shape = ST_OAM_SQUARE; + gSprites[healthboxRightSpriteId].oam.shape = ST_OAM_SQUARE; + gSprites[healthboxRightSpriteId].oam.tileNum += 0x40; + gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId; + gSprites[healthboxRightSpriteId].hBar_HealthBoxSpriteId = healthboxLeftSpriteId; + gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther; + return healthboxLeftSpriteId; +} + +const u8 *GetHealthboxElementGfxPtr(u8 elementId) +{ + return gHealthboxElementsGfxTable[elementId]; +} + +// Syncs the position of healthbar accordingly with the healthbox. +void SpriteCB_HealthBar(struct Sprite *sprite) +{ + u8 r5 = sprite->data[5]; + + switch (sprite->data[6]) + { + case 0: + sprite->pos1.x = gSprites[r5].pos1.x + 16; + sprite->pos1.y = gSprites[r5].pos1.y; + break; + case 1: + sprite->pos1.x = gSprites[r5].pos1.x + 16; + sprite->pos1.y = gSprites[r5].pos1.y; + break; + default: + case 2: + sprite->pos1.x = gSprites[r5].pos1.x + 8; + sprite->pos1.y = gSprites[r5].pos1.y; + break; + } + sprite->pos2.x = gSprites[r5].pos2.x; + sprite->pos2.y = gSprites[r5].pos2.y; +} + +void SpriteCB_HealthBoxOther(struct Sprite *sprite) +{ + u8 healthboxMainSpriteId = sprite->hOther_HealthBoxSpriteId; + + sprite->pos1.x = gSprites[healthboxMainSpriteId].pos1.x + 64; + sprite->pos1.y = gSprites[healthboxMainSpriteId].pos1.y; + + sprite->pos2.x = gSprites[healthboxMainSpriteId].pos2.x; + sprite->pos2.y = gSprites[healthboxMainSpriteId].pos2.y; +} + +void SetBattleBarStruct(u8 battlerId, u8 healthboxSpriteId, s32 maxVal, s32 oldVal, s32 receivedValue) +{ + gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId = healthboxSpriteId; + gBattleSpritesDataPtr->battleBars[battlerId].maxValue = maxVal; + gBattleSpritesDataPtr->battleBars[battlerId].oldValue = oldVal; + gBattleSpritesDataPtr->battleBars[battlerId].receivedValue = receivedValue; + gBattleSpritesDataPtr->battleBars[battlerId].currValue = -32768; +} + +void SetHealthboxSpriteInvisible(u8 healthboxSpriteId) +{ + gSprites[healthboxSpriteId].invisible = TRUE; + gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = TRUE; + gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = TRUE; +} + +void SetHealthboxSpriteVisible(u8 healthboxSpriteId) +{ + gSprites[healthboxSpriteId].invisible = FALSE; + gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = FALSE; + gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = FALSE; +} + +void UpdateSpritePos(u8 spriteId, s16 x, s16 y) +{ + gSprites[spriteId].pos1.x = x; + gSprites[spriteId].pos1.y = y; +} + +void DestoryHealthboxSprite(u8 healthboxSpriteId) +{ + DestroySprite(&gSprites[gSprites[healthboxSpriteId].oam.affineParam]); + DestroySprite(&gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId]); + DestroySprite(&gSprites[healthboxSpriteId]); +} + +void DummyBattleInterfaceFunc(u8 healthboxSpriteId, bool8 isDoubleBattleBattlerOnly) +{ + +} + +void UpdateOamPriorityInAllHealthboxes(u8 priority) +{ + s32 i; + + for (i = 0; i < gBattlersCount; i++) + { + u8 healthboxLeftSpriteId = gHealthboxSpriteIds[i]; + u8 healthboxRightSpriteId = gSprites[gHealthboxSpriteIds[i]].oam.affineParam; + u8 healthbarSpriteId = gSprites[gHealthboxSpriteIds[i]].hMain_HealthBarSpriteId; + + gSprites[healthboxLeftSpriteId].oam.priority = priority; + gSprites[healthboxRightSpriteId].oam.priority = priority; + gSprites[healthbarSpriteId].oam.priority = priority; + } +} + +void InitBattlerHealthboxCoords(u8 battler) +{ + s16 x = 0, y = 0; + + if (!IsDoubleBattle()) + { + if (GetBattlerSide(battler) != B_SIDE_PLAYER) + x = 44, y = 30; + else + x = 158, y = 88; + } + else + { + switch (GetBattlerPosition(battler)) + { + case B_POSITION_PLAYER_LEFT: + x = 159, y = 75; + break; + case B_POSITION_PLAYER_RIGHT: + x = 171, y = 100; + break; + case B_POSITION_OPPONENT_LEFT: + x = 44, y = 19; + break; + case B_POSITION_OPPONENT_RIGHT: + x = 32, y = 44; + break; + } + } + + UpdateSpritePos(gHealthboxSpriteIds[battler], x, y); +} + +void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) +{ + u32 windowId, spriteTileNum; + u8 *windowTileData; + u8 text[16]; + u32 xPos, var1; + void *objVram; + + memcpy(text, gUnknown_826051C, 16); + + xPos = (u32) ConvertIntToDecimalStringN(text + 2, lvl, STR_CONV_MODE_LEFT_ALIGN, 3); + // Alright, that part was unmatchable. It's basically doing: + // xPos = 5 * (3 - (u32)(&text[2])); + xPos--; + xPos--; + xPos -= ((u32)(text)); + var1 = (3 - xPos); + xPos = 4 * var1; + xPos += var1; + + windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, xPos, 3, &windowId); + spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP; + + if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER) + { + objVram = (void*)(OBJ_VRAM0); + if (!IsDoubleBattle()) + objVram += spriteTileNum + 0x820; + else + objVram += spriteTileNum + 0x420; + } + else + { + objVram = (void*)(OBJ_VRAM0); + objVram += spriteTileNum + 0x400; + } + TextIntoHealthboxObject(objVram, windowTileData, 3); + RemoveWindowOnHealthbox(windowId); +} -- cgit v1.2.3 From 214c651acd3588dce2258a24a89b08d43c1fa477 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sat, 11 Jan 2020 08:01:53 +0800 Subject: GetVsSeekerResponseInArea --- src/vs_seeker.c | 261 +++++--------------------------------------------------- 1 file changed, 23 insertions(+), 238 deletions(-) diff --git a/src/vs_seeker.c b/src/vs_seeker.c index 46a0649d7..969f05982 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -920,13 +920,17 @@ u8 CanUseVsSeeker(void) } } -// Nonmatching due to register roulette -#ifdef NONMATCHING static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0) { u16 r8 = 0; u8 sp0 = 0; s32 vsSeekerIdx; + u8 *r2; +#ifndef NONMATCHING + register u32 r3 asm("r3"); + register s32 r0_ asm("r0"); + asm("":::"r10", "r8", "r6", "r4"); +#endif for (vsSeekerIdx = 0; sVsSeeker->trainerInfo[vsSeekerIdx].localId != 0xFF; vsSeekerIdx++) { @@ -936,6 +940,7 @@ static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0) if (!HasTrainerBeenFought(r8)) { StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], gUnknown_8453F60); + sVsSeeker->trainerInfo[vsSeekerIdx].trainerIdx += 0; sVsSeeker->trainerHasNotYetBeenFought = 1; } else @@ -944,7 +949,15 @@ static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0) if (r7 == 0) { StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerNoRematch); + #ifdef NONMATCHING sVsSeeker->trainerDoesNotWantRematch = 1; + #else + r2 = (u8 *)sVsSeeker; + r3 = 0x431; + asm("":::"r1"); + r2 = &r2[r3]; + *(r2) |= 2; + #endif } else { @@ -957,7 +970,15 @@ static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0) if (rval < 30) { StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerNoRematch); + #ifdef NONMATCHING sVsSeeker->trainerDoesNotWantRematch = 1; + #else + r2 = (u8 *)sVsSeeker; + r0_ = 0x431; + asm("":::"r1"); + r2 = &r2[r0_]; + *(r2) |= 2; + #endif } else { @@ -985,242 +1006,6 @@ static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0) return 1; return 0; } -#else -NAKED -static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x8\n" - "\tstr r0, [sp, 0x4]\n" - "\tmovs r0, 0\n" - "\tmov r8, r0\n" - "\tmov r0, sp\n" - "\tmov r1, r8\n" - "\tstrb r1, [r0]\n" - "\tmovs r2, 0\n" - "\tmov r9, r2\n" - "\tldr r4, _0810CA14 @ =sVsSeeker\n" - "\tldr r0, [r4]\n" - "\tldrb r0, [r0, 0x6]\n" - "\tcmp r0, 0xFF\n" - "\tbne _0810C9D0\n" - "\tb _0810CB2C\n" - "_0810C9D0:\n" - "\tadds r6, r4, 0\n" - "\tmovs r3, 0x86\n" - "\tlsls r3, 3\n" - "\tmov r10, r3\n" - "\tmovs r5, 0\n" - "_0810C9DA:\n" - "\tldr r0, [r6]\n" - "\tadds r0, r5\n" - "\tbl IsTrainerVisibleOnScreen\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r0, 0x1\n" - "\tbeq _0810C9EC\n" - "\tb _0810CB18\n" - "_0810C9EC:\n" - "\tldr r0, [r4]\n" - "\tadds r0, r5\n" - "\tldrh r0, [r0, 0x4]\n" - "\tmov r8, r0\n" - "\tbl HasTrainerBeenFought\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbne _0810CA20\n" - "\tldr r0, [r6]\n" - "\tadds r0, r5\n" - "\tldr r1, _0810CA18 @ =gUnknown_8453F60\n" - "\tbl StartTrainerObjectMovementScript\n" - "\tldr r2, [r6]\n" - "\tldr r0, _0810CA1C @ =0x00000431\n" - "\tadds r2, r0\n" - "\tldrb r0, [r2]\n" - "\tmovs r1, 0x1\n" - "\tb _0810CB14\n" - "\t.align 2, 0\n" - "_0810CA14: .4byte sVsSeeker\n" - "_0810CA18: .4byte gUnknown_8453F60\n" - "_0810CA1C: .4byte 0x00000431\n" - "_0810CA20:\n" - "\tldr r0, [sp, 0x4]\n" - "\tmov r1, r8\n" - "\tmov r2, sp\n" - "\tbl GetNextAvailableRematchTrainer\n" - "\tlsls r0, 24\n" - "\tlsrs r7, r0, 24\n" - "\tcmp r7, 0\n" - "\tbne _0810CA50\n" - "\tldr r0, [r6]\n" - "\tadds r0, r5\n" - "\tldr r1, _0810CA48 @ =sMovementScript_TrainerNoRematch\n" - "\tbl StartTrainerObjectMovementScript\n" - "\tldr r2, [r6]\n" - "\tldr r3, _0810CA4C @ =0x00000431\n" - "\tadds r2, r3\n" - "\tldrb r0, [r2]\n" - "\tmovs r1, 0x2\n" - "\tb _0810CB14\n" - "\t.align 2, 0\n" - "_0810CA48: .4byte sMovementScript_TrainerNoRematch\n" - "_0810CA4C: .4byte 0x00000431\n" - "_0810CA50:\n" - "\tbl Random\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tmovs r1, 0x64\n" - "\tbl __umodsi3\n" - "\tlsls r0, 16\n" - "\tlsrs r4, r0, 16\n" - "\tmov r0, r9\n" - "\tmov r1, r8\n" - "\tbl GetCurVsSeekerResponse\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r0, 0x2\n" - "\tbne _0810CA76\n" - "\tmovs r4, 0x64\n" - "\tb _0810CA7C\n" - "_0810CA76:\n" - "\tcmp r0, 0x1\n" - "\tbne _0810CA7C\n" - "\tmovs r4, 0\n" - "_0810CA7C:\n" - "\tcmp r4, 0x1D\n" - "\tbhi _0810CAA0\n" - "\tldr r0, [r6]\n" - "\tadds r0, r5\n" - "\tldr r1, _0810CA98 @ =sMovementScript_TrainerNoRematch\n" - "\tbl StartTrainerObjectMovementScript\n" - "\tldr r2, [r6]\n" - "\tldr r0, _0810CA9C @ =0x00000431\n" - "\tadds r2, r0\n" - "\tldrb r0, [r2]\n" - "\tmovs r1, 0x2\n" - "\tb _0810CB14\n" - "\t.align 2, 0\n" - "_0810CA98: .4byte sMovementScript_TrainerNoRematch\n" - "_0810CA9C: .4byte 0x00000431\n" - "_0810CAA0:\n" - "\tldr r0, _0810CB54 @ =gSaveBlock1Ptr\n" - "\tldr r1, [r0]\n" - "\tldr r0, [r6]\n" - "\tadds r0, r5\n" - "\tldr r2, _0810CB58 @ =0x0000063a\n" - "\tadds r1, r2\n" - "\tldrb r0, [r0, 0x6]\n" - "\tadds r1, r0\n" - "\tstrb r7, [r1]\n" - "\tldr r0, [r6]\n" - "\tadds r0, r5\n" - "\tldrb r1, [r0, 0x7]\n" - "\tlsls r0, r1, 3\n" - "\tadds r0, r1\n" - "\tlsls r0, 2\n" - "\tldr r1, _0810CB5C @ =gObjectEvents\n" - "\tadds r0, r1\n" - "\tbl npc_coords_shift_still\n" - "\tldr r0, [r6]\n" - "\tadds r0, r5\n" - "\tldr r1, _0810CB60 @ =gUnknown_8453F64\n" - "\tbl StartTrainerObjectMovementScript\n" - "\tldr r2, [r6]\n" - "\tmov r3, r10\n" - "\tadds r0, r2, r3\n" - "\tldrb r1, [r0]\n" - "\tlsls r1, 1\n" - "\tmovs r3, 0x80\n" - "\tlsls r3, 3\n" - "\tadds r0, r2, r3\n" - "\tadds r0, r1\n" - "\tmov r1, r8\n" - "\tstrh r1, [r0]\n" - "\tadds r2, r5\n" - "\tldrb r0, [r2, 0xC]\n" - "\tbl GetRunningBehaviorFromGraphicsId\n" - "\tldr r1, [r6]\n" - "\tmov r3, r10\n" - "\tadds r2, r1, r3\n" - "\tmovs r3, 0x84\n" - "\tlsls r3, 3\n" - "\tadds r1, r3\n" - "\tldrb r2, [r2]\n" - "\tadds r1, r2\n" - "\tstrb r0, [r1]\n" - "\tldr r1, [r6]\n" - "\tadd r1, r10\n" - "\tldrb r0, [r1]\n" - "\tadds r0, 0x1\n" - "\tstrb r0, [r1]\n" - "\tldr r2, [r6]\n" - "\tldr r0, _0810CB64 @ =0x00000431\n" - "\tadds r2, r0\n" - "\tldrb r0, [r2]\n" - "\tmovs r1, 0x4\n" - "_0810CB14:\n" - "\torrs r0, r1\n" - "\tstrb r0, [r2]\n" - "_0810CB18:\n" - "\tadds r5, 0x10\n" - "\tmovs r1, 0x1\n" - "\tadd r9, r1\n" - "\tldr r4, _0810CB68 @ =sVsSeeker\n" - "\tldr r0, [r4]\n" - "\tadds r0, r5\n" - "\tldrb r0, [r0, 0x6]\n" - "\tcmp r0, 0xFF\n" - "\tbeq _0810CB2C\n" - "\tb _0810C9DA\n" - "_0810CB2C:\n" - "\tldr r2, _0810CB68 @ =sVsSeeker\n" - "\tldr r0, [r2]\n" - "\tldr r3, _0810CB64 @ =0x00000431\n" - "\tadds r0, r3\n" - "\tldrb r1, [r0]\n" - "\tmovs r0, 0x4\n" - "\tands r0, r1\n" - "\tcmp r0, 0\n" - "\tbeq _0810CB70\n" - "\tmovs r0, 0x15\n" - "\tbl PlaySE\n" - "\tldr r0, _0810CB6C @ =0x00000801\n" - "\tbl FlagSet\n" - "\tbl sub_810C640\n" - "\tmovs r0, 0x2\n" - "\tb _0810CB7E\n" - "\t.align 2, 0\n" - "_0810CB54: .4byte gSaveBlock1Ptr\n" - "_0810CB58: .4byte 0x0000063a\n" - "_0810CB5C: .4byte gObjectEvents\n" - "_0810CB60: .4byte gUnknown_8453F64\n" - "_0810CB64: .4byte 0x00000431\n" - "_0810CB68: .4byte sVsSeeker\n" - "_0810CB6C: .4byte 0x00000801\n" - "_0810CB70:\n" - "\tmovs r0, 0x1\n" - "\tands r0, r1\n" - "\tcmp r0, 0\n" - "\tbne _0810CB7C\n" - "\tmovs r0, 0\n" - "\tb _0810CB7E\n" - "_0810CB7C:\n" - "\tmovs r0, 0x1\n" - "_0810CB7E:\n" - "\tadd sp, 0x8\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r1}\n" - "\tbx r1"); -} -#endif void sub_810CB90(void) { -- cgit v1.2.3 From 3310aadb548f11b356a6fb10a049aff6704dc82b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 10 Jan 2020 21:34:44 -0500 Subject: Much battle_interface data to C --- data/battle_interface.s | 120 ------------------------ include/graphics.h | 4 + ld_script.txt | 1 + src/battle_interface.c | 244 +++++++++++++++++++++++++++++++++++++++++++++--- 4 files changed, 238 insertions(+), 131 deletions(-) diff --git a/data/battle_interface.s b/data/battle_interface.s index 12b46279c..4dc0c1b99 100644 --- a/data/battle_interface.s +++ b/data/battle_interface.s @@ -11,126 +11,6 @@ .section .rodata .align 2, 0 -gUnknown_8260270:: @ 8260270 - .4byte 0xc0004000, 0x00000400 - -sHealthboxPlayerSpriteTemplates:: @ 8260278 - spr_template 55039, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - spr_template 55040, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -sHealthboxOpponentSpriteTemplates:: @ 82602A8 - spr_template 55041, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - spr_template 55042, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -sHealthboxSafariSpriteTemplate:: @ 82602D8 - spr_template 55051, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gUnknown_82602F0:: - .4byte 0x40004000, 0x00000400 - -gUnknown_82602F8:: @ 82602F8 - spr_template 55044, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_HealthBar - spr_template 55045, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_HealthBar - spr_template 55046, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_HealthBar - spr_template 55047, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_HealthBar - -gUnknown_8260358:: - subsprite 240, 0, 1, 0x0000, 64x32 - subsprite 48, 0, 1, 0x0020, 32x32 - subsprite 240, 32, 1, 0x0030, 32x8 - subsprite 16, 32, 1, 0x0034, 32x8 - subsprite 48, 32, 1, 0x0038, 32x8 - -gUnknown_826036C:: - subsprite 240, 0, 1, 0x0040, 64x32 - subsprite 48, 0, 1, 0x0060, 32x32 - subsprite 240, 32, 1, 0x0070, 32x8 - subsprite 16, 32, 1, 0x0074, 32x8 - subsprite 48, 32, 1, 0x0078, 32x8 - -gUnknown_8260380:: - subsprite 240, 0, 1, 0x0000, 64x32 - subsprite 48, 0, 1, 0x0020, 32x32 - -gUnknown_8260388:: - subsprite 240, 0, 1, 0x0000, 64x32 - subsprite 48, 0, 1, 0x0020, 32x32 - -gUnknown_8260390:: - subsprite 240, 0, 1, 0x0000, 32x8 - subsprite 16, 0, 1, 0x0004, 32x8 - -gUnknown_8260398:: - subsprite 240, 0, 1, 0x0000, 32x8 - subsprite 16, 0, 1, 0x0004, 32x8 - subsprite 224, 0, 1, 0x0008, 8x8 - -gUnknown_82603A4:: - .4byte 5, gUnknown_8260358 - .4byte 2, gUnknown_8260380 - .4byte 5, gUnknown_826036C - .4byte 2, gUnknown_8260388 - -gUnknown_82603C4:: @ 82603C4 - .4byte 2, gUnknown_8260390 - .4byte 3, gUnknown_8260398 - -gUnknown_82603D4:: - subsprite 160, 0, 1, 0x0000, 32x8 - subsprite 192, 0, 1, 0x0004, 32x8 - subsprite 224, 0, 1, 0x0008, 32x8 - subsprite 0, 0, 1, 0x000c, 32x8 - -gUnknown_82603E4:: - subsprite 160, 0, 1, 0x0000, 32x8 - subsprite 192, 0, 1, 0x0004, 32x8 - subsprite 224, 0, 1, 0x0008, 32x8 - subsprite 0, 0, 1, 0x0008, 32x8 - subsprite 32, 0, 1, 0x0008, 32x8 - subsprite 64, 0, 1, 0x000c, 32x8 - -gUnknown_82603FC:: @ 82603FC - .4byte 4, gUnknown_82603D4 - -gUnknown_8260404:: @ 8260404 - .4byte 6, gUnknown_82603E4 - -gUnknown_26040C:: - .incbin "graphics/battle_interface/unk_826404C.4bpp" - -gUnknown_826046C:: @ 826046C - obj_tiles gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55052 - obj_tiles gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55053 - -gUnknown_826047C:: @ 826047C - obj_pal gBattleInterface_BallStatusBarPal, 55056 - obj_pal gBattleInterface_BallStatusBarPal, 55057 - -gUnknown_826048C:: @ 826048C - obj_pal gBattleInterface_BallDisplayPal, 55058 - obj_pal gBattleInterface_BallDisplayPal, 55059 - -gUnknown_826049C:: @ 826049C - obj_tiles gUnknown_8D12404, 0x0080, 55060 - obj_tiles gUnknown_8D12404, 0x0080, 55061 - -gUnknown_82604AC:: - .4byte 0xc0004000, 0x00000400 - -gUnknown_82604B4:: - .4byte 0x00000000, 0x00000400 - -gUnknown_82604BC:: @ 82604BC - spr_template 55052, 55056, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_StatusSummaryBar - spr_template 55053, 55057, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_StatusSummaryBar - -gUnknown_82604EC:: @ 82604EC - spr_template 55060, 55058, gUnknown_82604B4, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_StatusSummaryBallsOnBattleStart - spr_template 55061, 55059, gUnknown_82604B4, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_StatusSummaryBallsOnBattleStart - -gUnknown_826051C:: @ 826051C - .string "{LV_2}$", 16 - gUnknown_826052C:: @ 826052C .string "{COLOR 01}{HIGHLIGHT 02}", 20 diff --git a/include/graphics.h b/include/graphics.h index 03c9e5de6..a668364bd 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4855,6 +4855,10 @@ extern const u16 gEmeraldTrainerCard_Pal[]; extern const u32 gEmeraldTrainerCard_Gfx[]; // battle_interface +extern const u32 gFile_graphics_battle_interface_ball_status_bar_sheet[]; extern const u8 gHealthboxElementsGfxTable[][32]; +extern const u16 gBattleInterface_BallStatusBarPal[]; +extern const u16 gBattleInterface_BallDisplayPal[]; +extern const u16 gUnknown_8D12404[]; #endif //GUARD_GRAPHICS_H diff --git a/ld_script.txt b/ld_script.txt index d05f63e44..f837fb356 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -406,6 +406,7 @@ SECTIONS { src/util.o(.rodata); src/daycare.o(.rodata); src/battle_gfx_sfx_util.o(.rodata); + src/battle_interface.o(.rodata); data/battle_interface.o(.rodata); src/pokeball.o(.rodata); src/trade.o(.rodata); diff --git a/src/battle_interface.c b/src/battle_interface.c index fd4f9af3e..926324300 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -8,20 +8,244 @@ #include "text.h" void SpriteCB_HealthBoxOther(struct Sprite * sprite); +void SpriteCB_HealthBar(struct Sprite * sprite); +void SpriteCB_StatusSummaryBar(struct Sprite * sprite); +void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite * sprite); const u8 *GetHealthboxElementGfxPtr(u8 which); u8 *AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 *windowId); void RemoveWindowOnHealthbox(u32 windowId); void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 windowWidth); void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent); -extern const struct SpriteTemplate sHealthboxPlayerSpriteTemplates[]; -extern const struct SpriteTemplate sHealthboxOpponentSpriteTemplates[]; -extern const struct SpriteTemplate sHealthboxSafariSpriteTemplate; -extern const struct SpriteTemplate gUnknown_82602F8[]; -extern const struct SubspriteTable gUnknown_82603C4[]; -extern const u8 gUnknown_826051C[16]; -extern const u8 gUnknown_826052C[20]; -extern const u8 gUnknown_8260542[20]; +const struct OamData gOamData_8260270 = { + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .priority = 1 +}; + +const struct SpriteTemplate sHealthboxPlayerSpriteTemplates[] = { + { + .tileTag = 55039, + .paletteTag = 55039, + .oam = &gOamData_8260270, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + }, { + .tileTag = 55040, + .paletteTag = 55039, + .oam = &gOamData_8260270, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + } +}; + +const struct SpriteTemplate sHealthboxOpponentSpriteTemplates[] = { + { + .tileTag = 55041, + .paletteTag = 55039, + .oam = &gOamData_8260270, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + }, { + .tileTag = 55042, + .paletteTag = 55039, + .oam = &gOamData_8260270, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + } +}; + +const struct SpriteTemplate sHealthboxSafariSpriteTemplate = +{ + .tileTag = 55051, + .paletteTag = 55039, + .oam = &gOamData_8260270, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const struct OamData gUnknown_82602F0 = { + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .priority = 1 +}; + +const struct SpriteTemplate gUnknown_82602F8[] = { + { + .tileTag = 55044, + .paletteTag = 55044, + .oam = &gUnknown_82602F0, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_HealthBar + }, { + .tileTag = 55045, + .paletteTag = 55044, + .oam = &gUnknown_82602F0, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_HealthBar + }, { + .tileTag = 55046, + .paletteTag = 55044, + .oam = &gUnknown_82602F0, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_HealthBar + }, { + .tileTag = 55047, + .paletteTag = 55044, + .oam = &gUnknown_82602F0, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_HealthBar + } +}; + +const struct Subsprite gUnknown_8260358[] = { + { 240, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0x0000, 1 }, + { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 0x0020, 1 }, + { 240, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0030, 1 }, + { 16, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0034, 1 }, + { 48, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0038, 1 } +}; + +const struct Subsprite gUnknown_826036C[] = { + { 240, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0x0040, 1 }, + { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 0x0060, 1 }, + { 240, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0070, 1 }, + { 16, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0074, 1 }, + { 48, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0078, 1 } +}; + +const struct Subsprite gUnknown_8260380[] = { + { 240, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0x0000, 1 }, + { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 0x0020, 1 } +}; + +const struct Subsprite gUnknown_8260388[] = { + { 240, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0x0000, 1 }, + { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 0x0020, 1 } +}; + +const struct Subsprite gUnknown_8260390[] = { + { 240, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0000, 1 }, + { 16, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0004, 1 } +}; + +const struct Subsprite gUnknown_8260398[] = { + { 240, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0000, 1 }, + { 16, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0004, 1 }, + { 224, 0, SPRITE_SHAPE(8x8), SPRITE_SIZE(8x8), 0x0008, 1 } +}; + +const struct SubspriteTable gUnknown_82603A4[] = { + {NELEMS(gUnknown_8260358), gUnknown_8260358}, + {NELEMS(gUnknown_8260380), gUnknown_8260380}, + {NELEMS(gUnknown_826036C), gUnknown_826036C}, + {NELEMS(gUnknown_8260388), gUnknown_8260388} +}; + +const struct SubspriteTable gUnknown_82603C4[] = { + {NELEMS(gUnknown_8260390), gUnknown_8260390}, + {NELEMS(gUnknown_8260398), gUnknown_8260398} +}; + +const struct Subsprite gUnknown_82603D4[] = { + { 160, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0000, 1 }, + { 192, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0004, 1 }, + { 224, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0008, 1 }, + { 0, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x000c, 1 } +}; + +const struct Subsprite gUnknown_82603E4[] = { + { 160, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0000, 1 }, + { 192, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0004, 1 }, + { 224, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0008, 1 }, + { 0, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0008, 1 }, + { 32, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0008, 1 }, + { 64, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x000c, 1 } +}; + +const struct SubspriteTable gUnknown_82603FC = +{NELEMS(gUnknown_82603D4), gUnknown_82603D4}; +const struct SubspriteTable gUnknown_8260404 = +{NELEMS(gUnknown_82603E4), gUnknown_82603E4}; + +const u16 gUnknown_26040C[] = INCBIN_U16("graphics/battle_interface/unk_826404C.4bpp"); + +const struct CompressedSpriteSheet gUnknown_826046C[] = { + {gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55052}, + {gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55053} +}; + +const struct SpritePalette gUnknown_826047C[] = { + {gBattleInterface_BallStatusBarPal, 55056}, + {gBattleInterface_BallStatusBarPal, 55057} +}; + +const struct SpritePalette gUnknown_826048C[] = { + {gBattleInterface_BallDisplayPal, 55058}, + {gBattleInterface_BallDisplayPal, 55059} +}; + +const struct SpriteSheet gUnknown_826049C[] = { + {gUnknown_8D12404, 0x0080, 55060}, + {gUnknown_8D12404, 0x0080, 55061} +}; + +const struct OamData gUnknown_82604AC = { + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .priority = 1 +}; + +const struct OamData gUnknown_82604B4 = { + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .priority = 1 +}; + +const struct SpriteTemplate gUnknown_82604BC[] = { + { + .tileTag = 55052, + .paletteTag = 55056, + .oam = &gOamData_8260270, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_StatusSummaryBar + }, { + .tileTag = 55053, + .paletteTag = 55057, + .oam = &gOamData_8260270, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_StatusSummaryBar + } +}; + +const struct SpriteTemplate gUnknown_82604EC[] = { + { + .tileTag = 55060, + .paletteTag = 55058, + .oam = &gUnknown_82604B4, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_StatusSummaryBallsOnBattleStart + }, { + .tileTag = 55061, + .paletteTag = 55059, + .oam = &gUnknown_82604B4, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_StatusSummaryBallsOnBattleStart + } +}; void sub_8047B0C(s16 number, u16 *dest, bool8 unk) { @@ -346,12 +570,10 @@ void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) { u32 windowId, spriteTileNum; u8 *windowTileData; - u8 text[16]; + u8 text[16] = _("{LV_2}"); u32 xPos, var1; void *objVram; - memcpy(text, gUnknown_826051C, 16); - xPos = (u32) ConvertIntToDecimalStringN(text + 2, lvl, STR_CONV_MODE_LEFT_ALIGN, 3); // Alright, that part was unmatchable. It's basically doing: // xPos = 5 * (3 - (u32)(&text[2])); -- cgit v1.2.3 From 9d2f1af103fb52ec5d06e185a4ddf25d91554549 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 11 Jan 2020 10:58:30 -0500 Subject: through PrintSafariMonInfo --- asm/battle_interface.s | 744 --------------------------------------- asm/pokemon_summary_screen.s | 8 +- data/battle_interface.s | 44 --- data/pokemon_summary_screen.s | 2 +- include/pokemon_summary_screen.h | 1 - include/text.h | 2 +- ld_script.txt | 1 - src/battle_interface.c | 225 ++++++++++++ src/text.c | 2 +- 9 files changed, 232 insertions(+), 797 deletions(-) delete mode 100644 data/battle_interface.s diff --git a/asm/battle_interface.s b/asm/battle_interface.s index 43a8a8391..f277fbf17 100644 --- a/asm/battle_interface.s +++ b/asm/battle_interface.s @@ -5,750 +5,6 @@ .text - thumb_func_start UpdateHpTextInHealthbox -UpdateHpTextInHealthbox: @ 8048440 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x30 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r1, 16 - lsrs r1, 16 - mov r10, r1 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - ldr r1, _080484B4 @ =gSprites - lsls r0, 4 - add r0, r9 - lsls r0, 2 - adds r4, r0, r1 - ldrh r0, [r4, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08048514 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _08048514 - mov r0, r8 - cmp r0, 0 - beq _080484BC - mov r2, r10 - lsls r1, r2, 16 - asrs r1, 16 - add r0, sp, 0x10 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - add r3, sp, 0x2C - add r0, sp, 0x10 - movs r1, 0 - movs r2, 0x5 - bl AddTextPrinterAndCreateWindowOnHealthbox - adds r5, r0, 0 - ldrh r0, [r4, 0x4] - lsls r0, 22 - lsrs r0, 17 - ldr r1, _080484B8 @ =0x06010a40 - adds r0, r1 - adds r1, r5, 0 - b _080484FE - .align 2, 0 -_080484B4: .4byte gSprites -_080484B8: .4byte 0x06010a40 -_080484BC: - mov r2, r10 - lsls r1, r2, 16 - asrs r1, 16 - add r0, sp, 0x10 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - movs r1, 0xBA - strb r1, [r0] - movs r1, 0xFF - strb r1, [r0, 0x1] - add r3, sp, 0x2C - add r0, sp, 0x10 - movs r1, 0x4 - movs r2, 0x5 - bl AddTextPrinterAndCreateWindowOnHealthbox - adds r5, r0, 0 - ldrh r4, [r4, 0x4] - lsls r4, 22 - lsrs r4, 17 - ldr r1, _0804850C @ =0x060102e0 - adds r0, r4, r1 - adds r1, r5, 0 - movs r2, 0x1 - bl TextIntoHealthboxObject - ldr r2, _08048510 @ =0x06010a00 - adds r4, r2 - adds r1, r5, 0 - adds r1, 0x20 - adds r0, r4, 0 -_080484FE: - movs r2, 0x2 - bl TextIntoHealthboxObject - ldr r0, [sp, 0x2C] - bl RemoveWindowOnHealthbox - b _080485F8 - .align 2, 0 -_0804850C: .4byte 0x060102e0 -_08048510: .4byte 0x06010a00 -_08048514: - add r5, sp, 0x18 - ldr r1, _0804855C @ =gUnknown_826052C - adds r0, r5, 0 - movs r2, 0x14 - bl memcpy - ldr r1, _08048560 @ =gSprites - mov r0, r9 - lsls r4, r0, 4 - adds r0, r4, r0 - lsls r0, 2 - adds r7, r0, r1 - ldrh r0, [r7, 0x3A] - lsls r0, 24 - lsrs r6, r0, 24 - bl IsDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0804854C - adds r0, r6, 0 - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08048564 -_0804854C: - mov r2, r10 - lsls r1, r2, 16 - asrs r1, 16 - mov r0, r9 - mov r2, r8 - bl UpdateHpTextInHealthboxInDoubles - b _080485F8 - .align 2, 0 -_0804855C: .4byte gUnknown_826052C -_08048560: .4byte gSprites -_08048564: - ldrh r0, [r7, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08048580 - movs r6, 0x59 - mov r0, r8 - cmp r0, 0 - bne _0804858A - movs r6, 0x1D - b _0804858A -_08048580: - movs r6, 0x30 - mov r1, r8 - cmp r1, 0 - bne _0804858A - movs r6, 0x14 -_0804858A: - mov r0, sp - adds r0, 0x1E - mov r2, r10 - lsls r1, r2, 16 - asrs r1, 16 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - ldr r0, _08048608 @ =gMonSpritesGfxPtr - ldr r0, [r0] - movs r1, 0xBA - lsls r1, 1 - adds r0, r1 - ldr r0, [r0] - movs r1, 0 - str r1, [sp] - str r1, [sp, 0x4] - str r1, [sp, 0x8] - str r1, [sp, 0xC] - adds r2, r5, 0 - movs r3, 0 - bl RenderTextFont9 - movs r5, 0 - ldr r1, _0804860C @ =gSprites - mov r2, r9 - adds r0, r4, r2 - lsls r0, 2 - adds r4, r0, r1 -_080485C6: - ldr r0, _08048608 @ =gMonSpritesGfxPtr - ldr r0, [r0] - movs r1, 0xBA - lsls r1, 1 - adds r0, r1 - lsls r1, r5, 6 - adds r1, 0x20 - ldr r0, [r0] - adds r0, r1 - ldrh r1, [r4, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r1, r6 - adds r1, r5 - lsls r1, 5 - ldr r2, _08048610 @ =0x06010000 - adds r1, r2 - ldr r2, _08048614 @ =0x04000008 - bl CpuSet - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x2 - bls _080485C6 -_080485F8: - add sp, 0x30 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08048608: .4byte gMonSpritesGfxPtr -_0804860C: .4byte gSprites -_08048610: .4byte 0x06010000 -_08048614: .4byte 0x04000008 - thumb_func_end UpdateHpTextInHealthbox - - thumb_func_start UpdateHpTextInHealthboxInDoubles -UpdateHpTextInHealthboxInDoubles: @ 8048618 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x28 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r1, 16 - lsrs r4, r1, 16 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - ldr r1, _080486F8 @ =gUnknown_8260542 - add r0, sp, 0x10 - movs r2, 0x14 - bl memcpy - ldr r5, _080486FC @ =gSprites - mov r1, r9 - lsls r0, r1, 4 - add r0, r9 - lsls r0, 2 - adds r2, r0, r5 - ldrh r0, [r2, 0x3A] - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - ldr r0, _08048700 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0] - mov r3, r10 - lsls r0, r3, 2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _0804866A - b _080487DC -_0804866A: - movs r6, 0x4 - mov r1, r8 - negs r0, r1 - orrs r0, r1 - asrs r0, 31 - ands r6, r0 - ldrh r0, [r2, 0x38] - lsls r0, 24 - lsrs r7, r0, 24 - mov r0, sp - adds r0, 0x16 - lsls r1, r4, 16 - asrs r1, 16 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - mov r2, r8 - cmp r2, 0 - bne _08048698 - ldr r1, _08048704 @ =gUnknown_8260540 - bl StringCopy -_08048698: - ldr r0, _08048708 @ =gMonSpritesGfxPtr - ldr r0, [r0] - movs r3, 0xBA - lsls r3, 1 - adds r0, r3 - ldr r0, [r0] - movs r1, 0 - str r1, [sp] - str r1, [sp, 0x4] - str r1, [sp, 0x8] - str r1, [sp, 0xC] - add r2, sp, 0x10 - movs r3, 0 - bl RenderTextFont9 - adds r4, r6, 0 - adds r0, r4, 0x3 - cmp r4, r0 - bge _08048748 - lsls r0, r7, 4 - adds r0, r7 - lsls r0, 2 - adds r5, r0, r5 -_080486C6: - cmp r4, 0x2 - bhi _08048714 - ldr r0, _08048708 @ =gMonSpritesGfxPtr - ldr r0, [r0] - movs r1, 0xBA - lsls r1, 1 - adds r0, r1 - subs r1, r4, r6 - lsls r1, 6 - adds r1, 0x20 - ldr r0, [r0] - adds r0, r1 - ldrh r1, [r5, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r4, 0x1 - adds r1, r4 - lsls r1, 5 - ldr r2, _0804870C @ =0x06010000 - adds r1, r2 - ldr r2, _08048710 @ =0x04000008 - bl CpuSet - b _0804873E - .align 2, 0 -_080486F8: .4byte gUnknown_8260542 -_080486FC: .4byte gSprites -_08048700: .4byte gBattleSpritesDataPtr -_08048704: .4byte gUnknown_8260540 -_08048708: .4byte gMonSpritesGfxPtr -_0804870C: .4byte 0x06010000 -_08048710: .4byte 0x04000008 -_08048714: - ldr r0, _08048790 @ =gMonSpritesGfxPtr - ldr r0, [r0] - movs r3, 0xBA - lsls r3, 1 - adds r0, r3 - subs r1, r4, r6 - lsls r1, 6 - adds r1, 0x20 - ldr r0, [r0] - adds r0, r1 - ldrh r1, [r5, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r1, r4, r1 - lsls r1, 5 - ldr r2, _08048794 @ =0x06010020 - adds r1, r2 - ldr r2, _08048798 @ =0x04000008 - bl CpuSet - adds r4, 0x1 -_0804873E: - lsls r0, r4, 24 - lsrs r4, r0, 24 - adds r0, r6, 0x3 - cmp r4, r0 - blt _080486C6 -_08048748: - mov r3, r8 - cmp r3, 0 - bne _080487A8 - ldr r0, _08048790 @ =gMonSpritesGfxPtr - ldr r0, [r0] - movs r1, 0xBA - lsls r1, 1 - adds r0, r1 - ldr r0, [r0] - adds r0, 0xE0 - ldr r1, _0804879C @ =gSprites - lsls r4, r7, 4 - adds r4, r7 - lsls r4, 2 - adds r4, r1 - ldrh r1, [r4, 0x4] - lsls r1, 22 - lsrs r1, 17 - adds r1, 0x80 - ldr r5, _080487A0 @ =0x06010000 - adds r1, r5 - ldr r2, _08048798 @ =0x04000008 - bl CpuSet - mov r2, r8 - str r2, [sp, 0x24] - add r0, sp, 0x24 - ldrh r1, [r4, 0x4] - lsls r1, 22 - lsrs r1, 17 - adds r1, r5 - ldr r2, _080487A4 @ =0x05000008 - bl CpuSet - b _080487DC - .align 2, 0 -_08048790: .4byte gMonSpritesGfxPtr -_08048794: .4byte 0x06010020 -_08048798: .4byte 0x04000008 -_0804879C: .4byte gSprites -_080487A0: .4byte 0x06010000 -_080487A4: .4byte 0x05000008 -_080487A8: - mov r0, r10 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080487DC - movs r0, 0x74 - bl GetHealthboxElementGfxPtr - ldr r2, _080487EC @ =gSprites - mov r3, r9 - lsls r1, r3, 4 - add r1, r9 - lsls r1, 2 - adds r1, r2 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 17 - movs r2, 0xD0 - lsls r2, 3 - adds r1, r2 - ldr r2, _080487F0 @ =0x06010000 - adds r1, r2 - ldr r2, _080487F4 @ =0x04000008 - bl CpuSet -_080487DC: - add sp, 0x28 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080487EC: .4byte gSprites -_080487F0: .4byte 0x06010000 -_080487F4: .4byte 0x04000008 - thumb_func_end UpdateHpTextInHealthboxInDoubles - - thumb_func_start PrintSafariMonInfo -PrintSafariMonInfo: @ 80487F8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x30 - adds r4, r1, 0 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x24] - ldr r1, _080488AC @ =gUnknown_826052C - add r0, sp, 0x10 - movs r2, 0x14 - bl memcpy - ldr r1, _080488B0 @ =gSprites - ldr r2, [sp, 0x24] - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerPosition - ldr r1, _080488B4 @ =gMonSpritesGfxPtr - ldr r2, [r1] - movs r3, 0xBA - lsls r3, 1 - adds r2, r3 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 7 - movs r0, 0xA4 - lsls r0, 3 - adds r1, r0 - ldr r0, [r2] - adds r6, r0, r1 - movs r1, 0x5 - mov r8, r1 - adds r0, r4, 0 - bl GetNature - lsls r0, 24 - mov r4, sp - adds r4, 0x16 - ldr r1, _080488B8 @ =gNatureNames - lsrs r0, 22 - adds r0, r1 - ldr r1, [r0] - adds r0, r4, 0 - bl StringCopy - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - adds r0, r6, 0 - movs r1, 0 - add r2, sp, 0x10 - movs r3, 0 - bl RenderTextFont9 - movs r7, 0x6 - movs r5, 0 - mov r2, sp - adds r2, 0x19 - str r2, [sp, 0x28] -_08048888: - mov r0, sp - adds r0, r7 - adds r0, 0x10 - ldrb r1, [r0] - adds r0, r1, 0 - subs r0, 0x37 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x13 - bls _080488A8 - adds r0, r1, 0 - adds r0, 0x79 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x13 - bhi _080488BC -_080488A8: - movs r0, 0x2C - b _080488DA - .align 2, 0 -_080488AC: .4byte gUnknown_826052C -_080488B0: .4byte gSprites -_080488B4: .4byte gMonSpritesGfxPtr -_080488B8: .4byte gNatureNames -_080488BC: - adds r0, r1, 0 - subs r0, 0x4B - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bls _080488D4 - adds r0, r1, 0 - adds r0, 0x65 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bhi _080488D8 -_080488D4: - movs r0, 0x2D - b _080488DA -_080488D8: - movs r0, 0x2B -_080488DA: - bl GetHealthboxElementGfxPtr - lsls r1, r5, 6 - adds r1, r6, r1 - ldr r2, _080489F8 @ =0x04000008 - bl CpuSet - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r7, 0x1 - cmp r5, r8 - bcc _08048888 - movs r7, 0x1 - ldr r3, [sp, 0x24] - lsls r3, 4 - str r3, [sp, 0x2C] - movs r0, 0x1 - add r0, r8 - mov r9, r0 - cmp r7, r9 - bge _08048966 - ldr r1, _080489FC @ =gSprites - ldr r2, _080489F8 @ =0x04000008 - mov r10, r2 - ldr r2, [sp, 0x24] - adds r0, r3, r2 - lsls r0, 2 - adds r0, r1 - mov r8, r0 -_08048916: - mov r3, r8 - ldrh r0, [r3, 0x4] - lsls r0, 22 - lsrs r0, 22 - adds r5, r7, 0 - cmp r7, 0 - bge _08048926 - adds r5, r7, 0x7 -_08048926: - asrs r5, 3 - lsls r4, r5, 3 - subs r4, r7, r4 - adds r0, r4 - lsls r5, 6 - adds r0, r5 - lsls r0, 5 - ldr r2, _08048A00 @ =0x06010000 - adds r1, r0, r2 - adds r0, r6, 0 - mov r2, r10 - bl CpuSet - adds r6, 0x20 - mov r3, r8 - ldrh r0, [r3, 0x4] - lsls r0, 22 - lsrs r0, 22 - adds r4, 0x8 - adds r0, r4 - adds r0, r5 - lsls r0, 5 - ldr r2, _08048A00 @ =0x06010000 - adds r1, r0, r2 - adds r0, r6, 0 - mov r2, r10 - bl CpuSet - adds r6, 0x20 - adds r7, 0x1 - cmp r7, r9 - blt _08048916 -_08048966: - ldr r6, _080489FC @ =gSprites - ldr r3, [sp, 0x2C] - ldr r1, [sp, 0x24] - adds r0, r3, r1 - lsls r0, 2 - adds r0, r6 - ldrh r4, [r0, 0x38] - lsls r4, 24 - lsrs r4, 24 - ldr r5, _08048A04 @ =gBattleStruct - ldr r0, [r5] - adds r0, 0x7C - ldrb r1, [r0] - mov r0, sp - adds r0, 0x16 - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r0, [r5] - adds r0, 0x7B - ldrb r1, [r0] - ldr r0, [sp, 0x28] - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - add r0, sp, 0x10 - movs r1, 0 - strb r1, [r0, 0x5] - adds r2, r0, 0 - movs r0, 0xBA - strb r0, [r2, 0x8] - ldr r5, _08048A08 @ =gMonSpritesGfxPtr - ldr r0, [r5] - movs r2, 0xBA - lsls r2, 1 - adds r0, r2 - ldr r0, [r0] - str r1, [sp] - str r1, [sp, 0x4] - str r1, [sp, 0x8] - str r1, [sp, 0xC] - add r2, sp, 0x10 - movs r3, 0 - bl RenderTextFont9 - movs r7, 0 - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r6, r0, r6 - movs r4, 0x20 -_080489D0: - cmp r7, 0x1 - bgt _08048A0C - ldr r0, [r5] - movs r3, 0xBA - lsls r3, 1 - adds r0, r3 - ldr r0, [r0] - adds r0, r4 - ldrh r1, [r6, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r2, r7, 0x2 - adds r1, r2 - lsls r1, 5 - ldr r2, _08048A00 @ =0x06010000 - adds r1, r2 - ldr r2, _080489F8 @ =0x04000008 - bl CpuSet - b _08048A2C - .align 2, 0 -_080489F8: .4byte 0x04000008 -_080489FC: .4byte gSprites -_08048A00: .4byte 0x06010000 -_08048A04: .4byte gBattleStruct -_08048A08: .4byte gMonSpritesGfxPtr -_08048A0C: - ldr r0, [r5] - movs r3, 0xBA - lsls r3, 1 - adds r0, r3 - ldr r0, [r0] - adds r0, r4 - ldrh r1, [r6, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r1, r7, r1 - lsls r1, 5 - ldr r2, _08048A44 @ =0x060100c0 - adds r1, r2 - ldr r2, _08048A48 @ =0x04000008 - bl CpuSet -_08048A2C: - adds r4, 0x40 - adds r7, 0x1 - cmp r7, 0x4 - ble _080489D0 - add sp, 0x30 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08048A44: .4byte 0x060100c0 -_08048A48: .4byte 0x04000008 - thumb_func_end PrintSafariMonInfo - thumb_func_start SwapHpBarsWithHpText SwapHpBarsWithHpText: @ 8048A4C push {r4-r7,lr} diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s index 45eba1df8..d14d64ee4 100644 --- a/asm/pokemon_summary_screen.s +++ b/asm/pokemon_summary_screen.s @@ -5755,7 +5755,7 @@ sub_8137578: @ 8137578 bl GetNature lsls r0, 24 lsrs r6, r0, 24 - ldr r1, _081375F0 @ =gNatureNames + ldr r1, _081375F0 @ =gNatureNamePointers lsls r0, r6, 2 adds r0, r1 ldr r1, [r0] @@ -5796,7 +5796,7 @@ _081375B2: .align 2, 0 _081375E8: .4byte gUnknown_203B140 _081375EC: .4byte 0x00003290 -_081375F0: .4byte gNatureNames +_081375F0: .4byte gNatureNamePointers _081375F4: ldr r0, [r7] ldr r1, _08137614 @ =0x00003024 @@ -5952,7 +5952,7 @@ sub_8137724: @ 8137724 bl GetNature lsls r0, 24 lsrs r6, r0, 24 - ldr r1, _081377A8 @ =gNatureNames + ldr r1, _081377A8 @ =gNatureNamePointers lsls r0, r6, 2 adds r0, r1 ldr r1, [r0] @@ -5997,7 +5997,7 @@ _08137790: .align 2, 0 _081377A0: .4byte gUnknown_203B140 _081377A4: .4byte 0x00003290 -_081377A8: .4byte gNatureNames +_081377A8: .4byte gNatureNamePointers _081377AC: cmp r5, 0xFF bne _081377D0 diff --git a/data/battle_interface.s b/data/battle_interface.s deleted file mode 100644 index 4dc0c1b99..000000000 --- a/data/battle_interface.s +++ /dev/null @@ -1,44 +0,0 @@ -#include "constants/region_map.h" -#include "constants/trainer_classes.h" -#include "constants/songs.h" -#include "constants/flags.h" -#include "constants/region_map.h" -#include "constants/maps.h" -#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10)) - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2, 0 - -gUnknown_826052C:: @ 826052C - .string "{COLOR 01}{HIGHLIGHT 02}", 20 - -gUnknown_8260540:: @ 8260540 - .string "/$" - -gUnknown_8260542:: @ 8260542 - .string "{COLOR 01}{HIGHLIGHT 00}", 20 - -gUnknown_8260556:: @ 8260556 - .string "{HIGHLIGHT 02}$" - -gUnknown_826055A:: @ 826055A - .2byte RGB(24, 12, 24) - .2byte RGB(23, 23, 3) - .2byte RGB(20, 20, 17) - .2byte RGB(17, 22, 28) - .2byte RGB(28, 14, 10) - -gUnknown_8260564:: @ 8260564 - .byte 0, 0, 0, 8, 2, 0 - .2byte 0x0000 - @ { - @ .bg = 0, - @ .tilemapLeft = 0, - @ .tilemapTop = 0, - @ .width = 8, - @ .height = 2, - @ .paletteNum = 0, - @ .baseBlock = 0x0000 - @ } diff --git a/data/pokemon_summary_screen.s b/data/pokemon_summary_screen.s index ff732f5ae..3400c9ae0 100644 --- a/data/pokemon_summary_screen.s +++ b/data/pokemon_summary_screen.s @@ -266,7 +266,7 @@ gUnknown_8463E57:: @ 8463E57 .string "QUIRKY$" .align 2 -gNatureNames:: @ 8463E60 dataptr +gNatureNamePointers:: @ 8463E60 dataptr .4byte gUnknown_8463DBC .4byte gUnknown_8463DC2 .4byte gUnknown_8463DC9 diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h index 6f96fa86d..3695d46df 100644 --- a/include/pokemon_summary_screen.h +++ b/include/pokemon_summary_screen.h @@ -34,6 +34,5 @@ enum PokemonSummaryScreenPage s32 GetLastViewedMonIndex(void); void ShowPokemonSummaryScreen(struct Pokemon * party, u8 cursorPos, u8 lastIdx, void (*callback)(void), u8 a4); -extern const u8 *gNatureNames[]; #endif // GUARD_POKEMON_SUMMARY_SCREEN_H diff --git a/include/text.h b/include/text.h index 578a0d735..eaf125b05 100644 --- a/include/text.h +++ b/include/text.h @@ -250,7 +250,7 @@ u16 RenderText(struct TextPrinter *textPrinter); s32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing); s32 (*GetFontWidthFunc(u8 glyphId))(u16, bool32); s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing); -u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str); +u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str, int a3, int a4, int a5, int a6, int a7); u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y); u8 GetKeypadIconTileOffset(u8 keypadIconId); u8 GetKeypadIconWidth(u8 keypadIconId); diff --git a/ld_script.txt b/ld_script.txt index f837fb356..30ba74347 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -407,7 +407,6 @@ SECTIONS { src/daycare.o(.rodata); src/battle_gfx_sfx_util.o(.rodata); src/battle_interface.o(.rodata); - data/battle_interface.o(.rodata); src/pokeball.o(.rodata); src/trade.o(.rodata); src/trade_scene.o(.rodata); diff --git a/src/battle_interface.c b/src/battle_interface.c index 926324300..2f8a8c2a1 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -6,6 +6,7 @@ #include "string_util.h" #include "strings.h" #include "text.h" +#include "window.h" void SpriteCB_HealthBoxOther(struct Sprite * sprite); void SpriteCB_HealthBar(struct Sprite * sprite); @@ -603,3 +604,227 @@ void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) TextIntoHealthboxObject(objVram, windowTileData, 3); RemoveWindowOnHealthbox(windowId); } + +const u8 gUnknown_826052C[20] = __("{COLOR 01}{HIGHLIGHT 02}"); + +void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent) +{ + u32 windowId, spriteTileNum; + u8 *windowTileData; + u8 *strptr; + register void *objVram; + + if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER && !IsDoubleBattle()) + { + u8 text[8]; + if (maxOrCurrent != HP_CURRENT) // singles, max + { + ConvertIntToDecimalStringN(text, value, STR_CONV_MODE_RIGHT_ALIGN, 3); + windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 0, 5, &windowId); + spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum; + TextIntoHealthboxObject( (void*)(OBJ_VRAM0) + spriteTileNum * TILE_SIZE_4BPP + 0xA40, windowTileData, 2); + RemoveWindowOnHealthbox(windowId); + } + else // singles, current + { + strptr = ConvertIntToDecimalStringN(text, value, STR_CONV_MODE_RIGHT_ALIGN, 3); + *strptr++ = CHAR_SLASH; + *strptr++ = EOS; + windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 4, 5, &windowId); + spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum; + TextIntoHealthboxObject((void *)(OBJ_VRAM0) + spriteTileNum * TILE_SIZE_4BPP + 0x2E0, windowTileData, 1); + TextIntoHealthboxObject((void *)(OBJ_VRAM0) + spriteTileNum * TILE_SIZE_4BPP + 0xA00, windowTileData + 0x20, 2); + RemoveWindowOnHealthbox(windowId); + } + } + else + { + u8 battler; + + u8 text[20]; memcpy(text, gUnknown_826052C, sizeof(gUnknown_826052C)); + battler = gSprites[healthboxSpriteId].hMain_Battler; + if (IsDoubleBattle() == TRUE || GetBattlerSide(battler) == B_SIDE_OPPONENT) + { + UpdateHpTextInHealthboxInDoubles(healthboxSpriteId, value, maxOrCurrent); + } + else + { + u32 var; + u8 i; + + if (GetBattlerSide(gSprites[healthboxSpriteId].data[6]) == B_SIDE_PLAYER) + { + if (maxOrCurrent == HP_CURRENT) + var = 29; + else + var = 89; + } + else + { + if (maxOrCurrent == HP_CURRENT) + var = 20; + else + var = 48; + } + + ConvertIntToDecimalStringN(text + 6, value, STR_CONV_MODE_RIGHT_ALIGN, 3); + RenderTextFont9(gMonSpritesGfxPtr->barFontGfx, 0, text, 0, 0, 0, 0, 0); + + for (i = 0; i < 3; i++) + { + CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[i * 64 + 32], + (void*)((OBJ_VRAM0) + TILE_SIZE_4BPP * (gSprites[healthboxSpriteId].oam.tileNum + var + i)), + 0x20); + } + } + } +} + +const u8 gUnknown_8260540[] = _("/"); + +void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent) +{ + u32 windowId, spriteTileNum; + u8 *windowTileData; + void *objVram; + + u8 battlerId; + + u8 text[20] = __("{COLOR 01}{HIGHLIGHT 00}"); + battlerId = gSprites[healthboxSpriteId].hMain_Battler; + + if (gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) // don't print text if only bars are visible + { + u8 var = 4; + u8 r7; + u8 *txtPtr; + u8 i; + + if (maxOrCurrent == HP_CURRENT) + var = 0; + + r7 = gSprites[healthboxSpriteId].data[5]; + txtPtr = ConvertIntToDecimalStringN(text + 6, value, STR_CONV_MODE_RIGHT_ALIGN, 3); + if (!maxOrCurrent) + StringCopy(txtPtr, gUnknown_8260540); + RenderTextFont9(gMonSpritesGfxPtr->barFontGfx, 0, text, 0, 0, 0, 0, 0); + + for (i = var; i < var + 3; i++) + { + if (i < 3) + { + CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[((i - var) * 64) + 32], + (void*)((OBJ_VRAM0) + 32 * (1 + gSprites[r7].oam.tileNum + i)), + 0x20); + } + else + { + CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[((i - var) * 64) + 32], + (void*)((OBJ_VRAM0 + 0x20) + 32 * (i + gSprites[r7].oam.tileNum)), + 0x20); + } + } + + if (maxOrCurrent == HP_CURRENT) + { + CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[224], + (void*)((OBJ_VRAM0) + ((gSprites[r7].oam.tileNum + 4) * TILE_SIZE_4BPP)), + 0x20); + CpuFill32(0, (void*)((OBJ_VRAM0) + (gSprites[r7].oam.tileNum * TILE_SIZE_4BPP)), 0x20); + } + else + { + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) // Impossible to reach part, because the battlerId is from the opponent's side. + { + CpuCopy32(GetHealthboxElementGfxPtr(116), + (void*)(OBJ_VRAM0) + ((gSprites[healthboxSpriteId].oam.tileNum + 52) * TILE_SIZE_4BPP), + 0x20); + } + } + } +} + +// Prints mon's nature, catch and flee rate. Probably used to test pokeblock-related features. +void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon) +{ + u8 text[20]; + s32 j, spriteTileNum; + u8 *barFontGfx; + u8 i, var, nature, healthBarSpriteId; + + memcpy(text, gUnknown_826052C, sizeof(gUnknown_826052C)); + barFontGfx = &gMonSpritesGfxPtr->barFontGfx[0x520 + (GetBattlerPosition(gSprites[healthboxSpriteId].hMain_Battler) * 384)]; + var = 5; + nature = GetNature(mon); + StringCopy(text + 6, gNatureNamePointers[nature]); + RenderTextFont9(barFontGfx, 0, text, 0, 0, 0, 0, 0); + + for (j = 6, i = 0; i < var; i++, j++) + { + u8 elementId; + + if ((text[j] >= 55 && text[j] <= 74) || (text[j] >= 135 && text[j] <= 154)) + elementId = 44; + else if ((text[j] >= 75 && text[j] <= 79) || (text[j] >= 155 && text[j] <= 159)) + elementId = 45; + else + elementId = 43; + + CpuCopy32(GetHealthboxElementGfxPtr(elementId), barFontGfx + (i * 64), 0x20); + } + + for (j = 1; j < var + 1; j++) + { + spriteTileNum = (gSprites[healthboxSpriteId].oam.tileNum + (j - (j / 8 * 8)) + (j / 8 * 64)) * TILE_SIZE_4BPP; + CpuCopy32(barFontGfx, (void*)(OBJ_VRAM0) + (spriteTileNum), 0x20); + barFontGfx += 0x20; + + spriteTileNum = (8 + gSprites[healthboxSpriteId].oam.tileNum + (j - (j / 8 * 8)) + (j / 8 * 64)) * TILE_SIZE_4BPP; + CpuCopy32(barFontGfx, (void*)(OBJ_VRAM0) + (spriteTileNum), 0x20); + barFontGfx += 0x20; + } + + healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId; + ConvertIntToDecimalStringN(text + 6, gBattleStruct->safariCatchFactor, STR_CONV_MODE_RIGHT_ALIGN, 2); + ConvertIntToDecimalStringN(text + 9, gBattleStruct->safariEscapeFactor, STR_CONV_MODE_RIGHT_ALIGN, 2); + text[5] = CHAR_SPACE; + text[8] = CHAR_SLASH; + RenderTextFont9(gMonSpritesGfxPtr->barFontGfx, 0, text, 0, 0, 0, 0, 0); + + j = healthBarSpriteId; // Needed to match for some reason. + for (j = 0; j < 5; j++) + { + if (j <= 1) + { + CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[0x40 * j + 0x20], + (void*)(OBJ_VRAM0) + (gSprites[healthBarSpriteId].oam.tileNum + 2 + j) * TILE_SIZE_4BPP, + 32); + } + else + { + CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[0x40 * j + 0x20], + (void*)(OBJ_VRAM0 + 0xC0) + (j + gSprites[healthBarSpriteId].oam.tileNum) * TILE_SIZE_4BPP, + 32); + } + } +} + +const u8 gUnknown_8260556[] = _("{HIGHLIGHT 02}"); + +const u16 gUnknown_826055A[] = { + RGB(24, 12, 24), + RGB(23, 23, 3), + RGB(20, 20, 17), + RGB(17, 22, 28), + RGB(28, 14, 10) +}; + +const struct WindowTemplate gUnknown_8260564 = { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 8, + .height = 2, + .paletteNum = 0, + .baseBlock = 0x000 +}; diff --git a/src/text.c b/src/text.c index 93a35a07d..a0da0399f 100644 --- a/src/text.c +++ b/src/text.c @@ -1180,7 +1180,7 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) return width; } -u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str) +u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str, int a3, int a4, int a5, int a6, int a7) { u8 shadowColor; u8 *strLocal; -- cgit v1.2.3 From 854e8cd3f341e0487b2aaa71d8ac7d0b43e0d242 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 11 Jan 2020 11:25:36 -0500 Subject: SwapHpBarsWithHpText --- asm/battle_interface.s | 362 ++----------------------------------------------- src/battle_interface.c | 96 +++++++++++-- 2 files changed, 100 insertions(+), 358 deletions(-) diff --git a/asm/battle_interface.s b/asm/battle_interface.s index f277fbf17..aeffb047f 100644 --- a/asm/battle_interface.s +++ b/asm/battle_interface.s @@ -5,340 +5,6 @@ .text - thumb_func_start SwapHpBarsWithHpText -SwapHpBarsWithHpText: @ 8048A4C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - movs r0, 0 - mov r9, r0 - ldr r0, _08048B78 @ =gBattlersCount - ldrb r0, [r0] - cmp r9, r0 - blt _08048A66 - b _08048CF2 -_08048A66: - ldr r1, _08048B7C @ =gSprites - mov r10, r1 - ldr r2, _08048B80 @ =gBattlerPartyIndexes - mov r8, r2 -_08048A6E: - ldr r0, _08048B84 @ =gHealthboxSpriteIds - mov r1, r9 - adds r6, r1, r0 - ldrb r1, [r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - mov r1, r10 - adds r1, 0x1C - adds r0, r1 - ldr r1, [r0] - ldr r0, _08048B88 @ =SpriteCallbackDummy - cmp r1, r0 - beq _08048A8C - b _08048CE0 -_08048A8C: - mov r2, r9 - lsls r0, r2, 24 - lsrs r7, r0, 24 - adds r0, r7, 0 - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08048AA2 - b _08048CE0 -_08048AA2: - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _08048ABA - adds r0, r7, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08048ABA - b _08048CE0 -_08048ABA: - ldr r5, _08048B8C @ =gBattleSpritesDataPtr - ldr r0, [r5] - ldr r3, [r0] - mov r0, r9 - lsls r4, r0, 2 - adds r3, r4, r3 - ldr r0, [r3] - lsls r0, 27 - lsrs r0, 31 - movs r2, 0x1 - eors r2, r0 - lsls r2, 4 - mov r12, r2 - ldrb r0, [r3] - movs r2, 0x11 - negs r2, r2 - adds r1, r2, 0 - ands r0, r1 - mov r1, r12 - orrs r0, r1 - strb r0, [r3] - ldr r0, [r5] - ldr r0, [r0] - adds r4, r0 - ldr r0, [r4] - lsls r0, 27 - lsrs r4, r0, 31 - adds r0, r7, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08048BE8 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _08048B08 - b _08048CE0 -_08048B08: - ldr r0, _08048B90 @ =gBattleTypeFlags - ldr r2, [r0] - movs r0, 0x80 - ands r2, r0 - cmp r2, 0 - beq _08048B16 - b _08048CE0 -_08048B16: - cmp r4, 0x1 - bne _08048BA0 - ldrb r1, [r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r10 - ldrh r0, [r0, 0x38] - lsls r0, 24 - lsrs r1, r0, 24 - str r2, [sp] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r10 - ldrh r1, [r0, 0x4] - lsls r1, 22 - lsrs r1, 17 - ldr r2, _08048B94 @ =0x06010000 - adds r1, r2 - mov r0, sp - ldr r2, _08048B98 @ =0x05000040 - bl CpuSet - ldrb r4, [r6] - mov r1, r8 - ldrh r0, [r1] - movs r2, 0x64 - muls r0, r2 - ldr r1, _08048B9C @ =gPlayerParty - adds r0, r1 - movs r1, 0x39 - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r4, 0 - movs r2, 0 - bl UpdateHpTextInHealthboxInDoubles - ldrb r4, [r6] - mov r2, r8 - ldrh r0, [r2] - movs r1, 0x64 - muls r0, r1 - ldr r2, _08048B9C @ =gPlayerParty - b _08048C6E - .align 2, 0 -_08048B78: .4byte gBattlersCount -_08048B7C: .4byte gSprites -_08048B80: .4byte gBattlerPartyIndexes -_08048B84: .4byte gHealthboxSpriteIds -_08048B88: .4byte SpriteCallbackDummy -_08048B8C: .4byte gBattleSpritesDataPtr -_08048B90: .4byte gBattleTypeFlags -_08048B94: .4byte 0x06010000 -_08048B98: .4byte 0x05000040 -_08048B9C: .4byte gPlayerParty -_08048BA0: - ldrb r0, [r6] - bl UpdateStatusIconInHealthbox - ldrb r0, [r6] - mov r2, r8 - ldrh r1, [r2] - movs r2, 0x64 - muls r1, r2 - ldr r2, _08048BDC @ =gPlayerParty - adds r1, r2 - movs r2, 0x5 - bl UpdateHealthboxAttribute - movs r0, 0x75 - bl GetHealthboxElementGfxPtr - ldrb r2, [r6] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - add r1, r10 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 17 - ldr r2, _08048BE0 @ =0x06010680 - adds r1, r2 - ldr r2, _08048BE4 @ =0x04000008 - bl CpuSet - b _08048CCA - .align 2, 0 -_08048BDC: .4byte gPlayerParty -_08048BE0: .4byte 0x06010680 -_08048BE4: .4byte 0x04000008 -_08048BE8: - cmp r4, 0x1 - bne _08048C94 - ldr r0, _08048C0C @ =gBattleTypeFlags - ldr r2, [r0] - movs r0, 0x80 - ands r2, r0 - cmp r2, 0 - beq _08048C14 - ldrb r0, [r6] - mov r2, r8 - ldrh r1, [r2] - movs r2, 0x64 - muls r1, r2 - ldr r2, _08048C10 @ =gEnemyParty - adds r1, r2 - bl PrintSafariMonInfo - b _08048CCA - .align 2, 0 -_08048C0C: .4byte gBattleTypeFlags -_08048C10: .4byte gEnemyParty -_08048C14: - ldrb r1, [r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r10 - ldrh r0, [r0, 0x38] - lsls r0, 24 - lsrs r1, r0, 24 - str r2, [sp] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r10 - ldrh r1, [r0, 0x4] - lsls r1, 22 - lsrs r1, 17 - ldr r0, _08048C88 @ =0x06010000 - adds r1, r0 - mov r0, sp - ldr r2, _08048C8C @ =0x05000040 - bl CpuSet - ldrb r4, [r6] - mov r1, r8 - ldrh r0, [r1] - movs r2, 0x64 - muls r0, r2 - ldr r1, _08048C90 @ =gEnemyParty - adds r0, r1 - movs r1, 0x39 - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r4, 0 - movs r2, 0 - bl UpdateHpTextInHealthboxInDoubles - ldrb r4, [r6] - mov r2, r8 - ldrh r0, [r2] - movs r1, 0x64 - muls r0, r1 - ldr r2, _08048C90 @ =gEnemyParty -_08048C6E: - adds r0, r2 - movs r1, 0x3A - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r4, 0 - movs r2, 0x1 - bl UpdateHpTextInHealthboxInDoubles - b _08048CCA - .align 2, 0 -_08048C88: .4byte 0x06010000 -_08048C8C: .4byte 0x05000040 -_08048C90: .4byte gEnemyParty -_08048C94: - ldrb r0, [r6] - bl UpdateStatusIconInHealthbox - ldrb r0, [r6] - mov r2, r8 - ldrh r1, [r2] - movs r5, 0x64 - muls r1, r5 - ldr r4, _08048D04 @ =gEnemyParty - adds r1, r4 - movs r2, 0x5 - bl UpdateHealthboxAttribute - ldr r0, _08048D08 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08048CCA - ldrb r0, [r6] - mov r2, r8 - ldrh r1, [r2] - muls r1, r5 - adds r1, r4 - movs r2, 0x4 - bl UpdateHealthboxAttribute -_08048CCA: - ldr r0, _08048D0C @ =gHealthboxSpriteIds - add r0, r9 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r10 - ldrh r1, [r0, 0x3C] - movs r2, 0x1 - eors r1, r2 - strh r1, [r0, 0x3C] -_08048CE0: - movs r0, 0x2 - add r8, r0 - movs r1, 0x1 - add r9, r1 - ldr r0, _08048D10 @ =gBattlersCount - ldrb r0, [r0] - cmp r9, r0 - bge _08048CF2 - b _08048A6E -_08048CF2: - 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 -_08048D04: .4byte gEnemyParty -_08048D08: .4byte gBattleTypeFlags -_08048D0C: .4byte gHealthboxSpriteIds -_08048D10: .4byte gBattlersCount - thumb_func_end SwapHpBarsWithHpText - thumb_func_start CreatePartyStatusSummarySprites CreatePartyStatusSummarySprites: @ 8048D14 push {r4-r7,lr} @@ -412,7 +78,7 @@ _08048D94: movs r6, 0 str r6, [sp, 0x14] lsls r4, r7, 3 - ldr r0, _08048E44 @ =gUnknown_826046C + ldr r0, _08048E44 @ =sStatusSummaryBarSpriteSheets mov r10, r0 lsls r3, r7, 1 mov r9, r3 @@ -442,19 +108,19 @@ _08048DC4: mov r6, r10 adds r0, r4, r6 bl LoadCompressedSpriteSheetUsingHeap - ldr r0, _08048E4C @ =gUnknown_826049C + ldr r0, _08048E4C @ =sStatusSummaryBallsSpriteSheets adds r0, r4, r0 bl LoadSpriteSheet - ldr r0, _08048E50 @ =gUnknown_826047C + ldr r0, _08048E50 @ =sStatusSummaryBarSpritePals adds r0, r4, r0 bl LoadSpritePalette - ldr r0, _08048E54 @ =gUnknown_826048C + ldr r0, _08048E54 @ =sStatusSummaryBallsSpritePals adds r0, r4, r0 bl LoadSpritePalette mov r1, r9 adds r0, r1, r7 lsls r0, 3 - ldr r1, _08048E58 @ =gUnknown_82604BC + ldr r1, _08048E58 @ =sStatusSummaryBarSpriteTemplates adds r0, r1 ldr r2, [sp, 0x20] asrs r1, r2, 16 @@ -471,7 +137,7 @@ _08048DC4: lsls r0, 2 ldr r1, _08048E5C @ =gSprites adds r4, r0, r1 - ldr r1, _08048E60 @ =gUnknown_82603FC + ldr r1, _08048E60 @ =sStatusSummaryBar_SubspriteTable adds r0, r4, 0 bl SetSubspriteTables mov r0, r8 @@ -492,14 +158,14 @@ _08048DC4: b _08048E6A .align 2, 0 _08048E40: .4byte 0x0000ff9c -_08048E44: .4byte gUnknown_826046C +_08048E44: .4byte sStatusSummaryBarSpriteSheets _08048E48: .4byte 0x0000ffff -_08048E4C: .4byte gUnknown_826049C -_08048E50: .4byte gUnknown_826047C -_08048E54: .4byte gUnknown_826048C -_08048E58: .4byte gUnknown_82604BC +_08048E4C: .4byte sStatusSummaryBallsSpriteSheets +_08048E50: .4byte sStatusSummaryBarSpritePals +_08048E54: .4byte sStatusSummaryBallsSpritePals +_08048E58: .4byte sStatusSummaryBarSpriteTemplates _08048E5C: .4byte gSprites -_08048E60: .4byte gUnknown_82603FC +_08048E60: .4byte sStatusSummaryBar_SubspriteTable _08048E64: ldrh r0, [r4, 0x20] adds r0, 0x60 @@ -517,7 +183,7 @@ _08048E6A: mov r9, r3 mov r8, r6 _08048E80: - ldr r0, _08048F18 @ =gUnknown_82604EC + ldr r0, _08048F18 @ =sStatusSummaryBallsSpriteTemplates ldr r5, [sp, 0x24] ldr r1, _08048F1C @ =0xfffc0000 adds r2, r5, r1 @@ -593,7 +259,7 @@ _08048ECE: b _08048F66 .align 2, 0 _08048F14: .4byte gSprites -_08048F18: .4byte gUnknown_82604EC +_08048F18: .4byte sStatusSummaryBallsSpriteTemplates _08048F1C: .4byte 0xfffc0000 _08048F20: .4byte gSprites + 0x1C _08048F24: .4byte SpriteCB_StatusSummaryBallsOnSwitchout diff --git a/src/battle_interface.c b/src/battle_interface.c index 2f8a8c2a1..e8a1f5a02 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -1,22 +1,27 @@ #include "global.h" #include "battle_anim.h" #include "battle_interface.h" +#include "decompress.h" #include "graphics.h" #include "pokemon_summary_screen.h" +#include "sound.h" #include "string_util.h" #include "strings.h" #include "text.h" #include "window.h" +#include "constants/songs.h" void SpriteCB_HealthBoxOther(struct Sprite * sprite); void SpriteCB_HealthBar(struct Sprite * sprite); +const u8 *GetHealthboxElementGfxPtr(u8 which); +void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent); +void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite * sprite); +void UpdateStatusIconInHealthbox(u8 spriteId); void SpriteCB_StatusSummaryBar(struct Sprite * sprite); void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite * sprite); -const u8 *GetHealthboxElementGfxPtr(u8 which); u8 *AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 *windowId); void RemoveWindowOnHealthbox(u32 windowId); void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 windowWidth); -void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent); const struct OamData gOamData_8260270 = { .shape = SPRITE_SHAPE(64x32), @@ -173,29 +178,32 @@ const struct Subsprite gUnknown_82603E4[] = { { 64, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x000c, 1 } }; -const struct SubspriteTable gUnknown_82603FC = -{NELEMS(gUnknown_82603D4), gUnknown_82603D4}; +const struct SubspriteTable sStatusSummaryBar_SubspriteTable[] = +{ + {NELEMS(gUnknown_82603D4), gUnknown_82603D4} +}; + const struct SubspriteTable gUnknown_8260404 = {NELEMS(gUnknown_82603E4), gUnknown_82603E4}; const u16 gUnknown_26040C[] = INCBIN_U16("graphics/battle_interface/unk_826404C.4bpp"); -const struct CompressedSpriteSheet gUnknown_826046C[] = { +const struct CompressedSpriteSheet sStatusSummaryBarSpriteSheets[] = { {gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55052}, {gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55053} }; -const struct SpritePalette gUnknown_826047C[] = { +const struct SpritePalette sStatusSummaryBarSpritePals[] = { {gBattleInterface_BallStatusBarPal, 55056}, {gBattleInterface_BallStatusBarPal, 55057} }; -const struct SpritePalette gUnknown_826048C[] = { +const struct SpritePalette sStatusSummaryBallsSpritePals[] = { {gBattleInterface_BallDisplayPal, 55058}, {gBattleInterface_BallDisplayPal, 55059} }; -const struct SpriteSheet gUnknown_826049C[] = { +const struct SpriteSheet sStatusSummaryBallsSpriteSheets[] = { {gUnknown_8D12404, 0x0080, 55060}, {gUnknown_8D12404, 0x0080, 55061} }; @@ -212,7 +220,7 @@ const struct OamData gUnknown_82604B4 = { .priority = 1 }; -const struct SpriteTemplate gUnknown_82604BC[] = { +const struct SpriteTemplate sStatusSummaryBarSpriteTemplates[] = { { .tileTag = 55052, .paletteTag = 55056, @@ -230,7 +238,7 @@ const struct SpriteTemplate gUnknown_82604BC[] = { } }; -const struct SpriteTemplate gUnknown_82604EC[] = { +const struct SpriteTemplate sStatusSummaryBallsSpriteTemplates[] = { { .tileTag = 55060, .paletteTag = 55058, @@ -809,6 +817,74 @@ void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon) } } +void SwapHpBarsWithHpText(void) +{ + s32 i; + u8 healthBarSpriteId; + + for (i = 0; i < gBattlersCount; i++) + { + if (gSprites[gHealthboxSpriteIds[i]].callback == SpriteCallbackDummy + && GetBattlerSide(i) != B_SIDE_OPPONENT + && (IsDoubleBattle() || GetBattlerSide(i) != B_SIDE_PLAYER)) + { + bool8 noBars; + + gBattleSpritesDataPtr->battlerData[i].hpNumbersNoBars ^= 1; + noBars = gBattleSpritesDataPtr->battlerData[i].hpNumbersNoBars; + if (GetBattlerSide(i) == B_SIDE_PLAYER) + { + if (!IsDoubleBattle()) + continue; + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + continue; + + if (noBars == TRUE) // bars to text + { + healthBarSpriteId = gSprites[gHealthboxSpriteIds[i]].hMain_HealthBarSpriteId; + + CpuFill32(0, (void*)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 0x100); + UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_HP), HP_CURRENT); + UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_MAX_HP), HP_MAX); + } + else // text to bars + { + UpdateStatusIconInHealthbox(gHealthboxSpriteIds[i]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[i], &gPlayerParty[gBattlerPartyIndexes[i]], HEALTHBOX_HEALTH_BAR); + CpuCopy32(GetHealthboxElementGfxPtr(117), (void*)(OBJ_VRAM0 + 0x680 + gSprites[gHealthboxSpriteIds[i]].oam.tileNum * TILE_SIZE_4BPP), 32); + } + } + else + { + if (noBars == TRUE) // bars to text + { + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + { + // Most likely a debug function. + PrintSafariMonInfo(gHealthboxSpriteIds[i], &gEnemyParty[gBattlerPartyIndexes[i]]); + } + else + { + healthBarSpriteId = gSprites[gHealthboxSpriteIds[i]].hMain_HealthBarSpriteId; + + CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * 32), 0x100); + UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_HP), HP_CURRENT); + UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_MAX_HP), HP_MAX); + } + } + else // text to bars + { + UpdateStatusIconInHealthbox(gHealthboxSpriteIds[i]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[i], &gEnemyParty[gBattlerPartyIndexes[i]], HEALTHBOX_HEALTH_BAR); + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + UpdateHealthboxAttribute(gHealthboxSpriteIds[i], &gEnemyParty[gBattlerPartyIndexes[i]], HEALTHBOX_NICK); + } + } + gSprites[gHealthboxSpriteIds[i]].hMain_Data7 ^= 1; + } + } +} + const u8 gUnknown_8260556[] = _("{HIGHLIGHT 02}"); const u16 gUnknown_826055A[] = { -- cgit v1.2.3 From 9def25f1d43c15d261042886f8f788dfab51d718 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 12 Jan 2020 08:39:43 -0500 Subject: nonmatching CreatePartyStatusSummarySprites --- asm/battle_interface.s | 589 ------------------------------------ src/battle_interface.c | 788 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 788 insertions(+), 589 deletions(-) diff --git a/asm/battle_interface.s b/asm/battle_interface.s index aeffb047f..5d3aa7b20 100644 --- a/asm/battle_interface.s +++ b/asm/battle_interface.s @@ -5,595 +5,6 @@ .text - thumb_func_start CreatePartyStatusSummarySprites -CreatePartyStatusSummarySprites: @ 8048D14 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x28 - str r1, [sp, 0xC] - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x8] - lsls r2, 24 - lsrs r2, 24 - adds r4, r2, 0 - lsls r3, 24 - lsrs r3, 24 - str r3, [sp, 0x10] - cmp r4, 0 - beq _08048D44 - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _08048D88 -_08048D44: - ldr r0, [sp, 0x8] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08048D64 - movs r7, 0 - movs r1, 0x88 - movs r2, 0x60 - movs r0, 0x64 - mov r8, r0 - ldr r5, _08048D60 @ =0x0000fffb - b _08048D94 - .align 2, 0 -_08048D60: .4byte 0x0000fffb -_08048D64: - movs r7, 0x1 - cmp r4, 0 - beq _08048D74 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _08048D7A -_08048D74: - movs r1, 0x68 - movs r2, 0x28 - b _08048D7E -_08048D7A: - movs r1, 0x68 - movs r2, 0x10 -_08048D7E: - ldr r3, _08048D84 @ =0x0000ff9c - mov r8, r3 - b _08048D92 - .align 2, 0 -_08048D84: .4byte 0x0000ff9c -_08048D88: - movs r7, 0x1 - movs r1, 0x68 - movs r2, 0x28 - ldr r5, _08048E40 @ =0x0000ff9c - mov r8, r5 -_08048D92: - movs r5, 0x5 -_08048D94: - movs r6, 0 - str r6, [sp, 0x14] - lsls r4, r7, 3 - ldr r0, _08048E44 @ =sStatusSummaryBarSpriteSheets - mov r10, r0 - lsls r3, r7, 1 - mov r9, r3 - lsls r1, 16 - str r1, [sp, 0x20] - lsls r2, 16 - str r2, [sp, 0x24] - ldr r2, _08048E48 @ =0x0000ffff - ldr r1, [sp, 0xC] - movs r6, 0x5 -_08048DB0: - ldrh r0, [r1] - cmp r0, r2 - beq _08048DC4 - ldr r3, [sp, 0x14] - lsls r0, r3, 24 - movs r3, 0x80 - lsls r3, 17 - adds r0, r3 - lsrs r0, 24 - str r0, [sp, 0x14] -_08048DC4: - adds r1, 0x8 - subs r6, 0x1 - cmp r6, 0 - bge _08048DB0 - mov r6, r10 - adds r0, r4, r6 - bl LoadCompressedSpriteSheetUsingHeap - ldr r0, _08048E4C @ =sStatusSummaryBallsSpriteSheets - adds r0, r4, r0 - bl LoadSpriteSheet - ldr r0, _08048E50 @ =sStatusSummaryBarSpritePals - adds r0, r4, r0 - bl LoadSpritePalette - ldr r0, _08048E54 @ =sStatusSummaryBallsSpritePals - adds r0, r4, r0 - bl LoadSpritePalette - mov r1, r9 - adds r0, r1, r7 - lsls r0, 3 - ldr r1, _08048E58 @ =sStatusSummaryBarSpriteTemplates - adds r0, r1 - ldr r2, [sp, 0x20] - asrs r1, r2, 16 - ldr r3, [sp, 0x24] - asrs r2, r3, 16 - movs r3, 0xA - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x18] - lsls r0, 4 - ldr r6, [sp, 0x18] - adds r0, r6 - lsls r0, 2 - ldr r1, _08048E5C @ =gSprites - adds r4, r0, r1 - ldr r1, _08048E60 @ =sStatusSummaryBar_SubspriteTable - adds r0, r4, 0 - bl SetSubspriteTables - mov r0, r8 - strh r0, [r4, 0x24] - strh r5, [r4, 0x2E] - cmp r7, 0 - beq _08048E64 - ldrh r0, [r4, 0x20] - subs r0, 0x60 - strh r0, [r4, 0x20] - ldrb r1, [r4, 0x3] - movs r0, 0x3F - negs r0, r0 - ands r0, r1 - movs r1, 0x10 - orrs r0, r1 - strb r0, [r4, 0x3] - b _08048E6A - .align 2, 0 -_08048E40: .4byte 0x0000ff9c -_08048E44: .4byte sStatusSummaryBarSpriteSheets -_08048E48: .4byte 0x0000ffff -_08048E4C: .4byte sStatusSummaryBallsSpriteSheets -_08048E50: .4byte sStatusSummaryBarSpritePals -_08048E54: .4byte sStatusSummaryBallsSpritePals -_08048E58: .4byte sStatusSummaryBarSpriteTemplates -_08048E5C: .4byte gSprites -_08048E60: .4byte sStatusSummaryBar_SubspriteTable -_08048E64: - ldrh r0, [r4, 0x20] - adds r0, 0x60 - strh r0, [r4, 0x20] -_08048E6A: - movs r6, 0 - ldr r1, _08048F14 @ =gSprites - mov r10, r1 - mov r4, sp - mov r2, r9 - adds r0, r2, r7 - lsls r0, 3 - str r0, [sp, 0x1C] - movs r3, 0xA - mov r9, r3 - mov r8, r6 -_08048E80: - ldr r0, _08048F18 @ =sStatusSummaryBallsSpriteTemplates - ldr r5, [sp, 0x24] - ldr r1, _08048F1C @ =0xfffc0000 - adds r2, r5, r1 - ldr r3, [sp, 0x1C] - adds r0, r3, r0 - ldr r5, [sp, 0x20] - asrs r1, r5, 16 - asrs r2, 16 - movs r3, 0x9 - bl CreateSpriteAtEnd - strb r0, [r4] - ldr r0, [sp, 0x10] - cmp r0, 0 - bne _08048EB0 - ldrb r0, [r4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r2, _08048F20 @ =gSprites + 0x1C - adds r1, r2 - ldr r0, _08048F24 @ =SpriteCB_StatusSummaryBallsOnSwitchout - str r0, [r1] -_08048EB0: - ldr r5, _08048F14 @ =gSprites - cmp r7, 0 - bne _08048ECE - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r10 - strh r7, [r0, 0x24] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r10 - strh r7, [r0, 0x26] -_08048ECE: - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0 - mov r3, sp - ldrh r3, [r3, 0x18] - strh r3, [r0, 0x2E] - cmp r7, 0 - bne _08048F28 - ldrb r0, [r4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - ldrh r0, [r1, 0x20] - adds r0, 0x18 - add r0, r8 - strh r0, [r1, 0x20] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - mov r1, r9 - strh r1, [r0, 0x30] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0x78 - b _08048F66 - .align 2, 0 -_08048F14: .4byte gSprites -_08048F18: .4byte sStatusSummaryBallsSpriteTemplates -_08048F1C: .4byte 0xfffc0000 -_08048F20: .4byte gSprites + 0x1C -_08048F24: .4byte SpriteCB_StatusSummaryBallsOnSwitchout -_08048F28: - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r5 - ldrh r3, [r2, 0x20] - subs r3, 0x18 - movs r1, 0x5 - subs r1, r6 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 1 - subs r3, r0 - strh r3, [r2, 0x20] - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r5 - movs r1, 0x6 - subs r1, r6 - lsls r0, r1, 3 - subs r0, r1 - adds r0, 0xA - strh r0, [r2, 0x30] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldr r1, _08048FD4 @ =0x0000ff88 -_08048F66: - strh r1, [r0, 0x24] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r7, [r0, 0x32] - adds r4, 0x1 - movs r2, 0x7 - add r9, r2 - movs r3, 0xA - add r8, r3 - adds r6, 0x1 - cmp r6, 0x5 - bgt _08048F86 - b _08048E80 -_08048F86: - ldr r0, [sp, 0x8] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _0804906E - movs r6, 0 - ldr r5, _08048FD8 @ =gBattleTypeFlags - mov r10, r5 - ldr r0, _08048FDC @ =0x0000ffff - mov r9, r0 - ldr r7, _08048FE0 @ =gSprites - ldr r1, _08048FE4 @ =0x000003ff - mov r12, r1 - ldr r2, _08048FE8 @ =0xfffffc00 - mov r8, r2 - mov r4, sp - ldr r5, [sp, 0xC] -_08048FAA: - mov r3, r10 - ldr r0, [r3] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08048FEC - ldrh r0, [r5] - cmp r0, r9 - beq _08048FF6 - cmp r0, 0 - bne _0804903E - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x3 - b _08049056 - .align 2, 0 -_08048FD4: .4byte 0x0000ff88 -_08048FD8: .4byte gBattleTypeFlags -_08048FDC: .4byte 0x0000ffff -_08048FE0: .4byte gSprites -_08048FE4: .4byte 0x000003ff -_08048FE8: .4byte 0xfffffc00 -_08048FEC: - ldr r1, [sp, 0x14] - lsls r0, r1, 24 - asrs r0, 24 - cmp r6, r0 - blt _08049024 -_08048FF6: - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x1 - mov r0, r12 - ands r1, r0 - mov r0, r8 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, 0x4] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r7 - movs r1, 0x1 - strh r1, [r0, 0x3C] - b _08049062 -_08049024: - ldrh r0, [r5] - cmp r0, 0 - bne _0804903E - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x3 - b _08049056 -_0804903E: - ldr r0, [r5, 0x4] - cmp r0, 0 - beq _08049062 - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x2 -_08049056: - mov r0, r12 - ands r1, r0 - mov r0, r8 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, 0x4] -_08049062: - adds r4, 0x1 - adds r5, 0x8 - adds r6, 0x1 - cmp r6, 0x5 - ble _08048FAA - b _08049148 -_0804906E: - movs r6, 0 - ldr r1, _080490B4 @ =gBattleTypeFlags - mov r10, r1 - ldr r2, _080490B8 @ =0x0000ffff - mov r9, r2 - ldr r7, _080490BC @ =gSprites - ldr r3, _080490C0 @ =0x000003ff - mov r12, r3 - ldr r5, _080490C4 @ =0xfffffc00 - mov r8, r5 - ldr r5, [sp, 0xC] - mov r4, sp - adds r4, 0x5 -_08049088: - mov r1, r10 - ldr r0, [r1] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080490C8 - ldrh r0, [r5] - cmp r0, r9 - beq _080490D2 - cmp r0, 0 - bne _0804911A - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x3 - b _08049132 - .align 2, 0 -_080490B4: .4byte gBattleTypeFlags -_080490B8: .4byte 0x0000ffff -_080490BC: .4byte gSprites -_080490C0: .4byte 0x000003ff -_080490C4: .4byte 0xfffffc00 -_080490C8: - ldr r1, [sp, 0x14] - lsls r0, r1, 24 - asrs r0, 24 - cmp r6, r0 - blt _08049100 -_080490D2: - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x1 - mov r0, r12 - ands r1, r0 - mov r0, r8 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, 0x4] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r7 - movs r1, 0x1 - strh r1, [r0, 0x3C] - b _0804913E -_08049100: - ldrh r0, [r5] - cmp r0, 0 - bne _0804911A - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x3 - b _08049132 -_0804911A: - ldr r0, [r5, 0x4] - cmp r0, 0 - beq _0804913E - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x2 -_08049132: - mov r0, r12 - ands r1, r0 - mov r0, r8 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, 0x4] -_0804913E: - subs r4, 0x1 - adds r5, 0x8 - adds r6, 0x1 - cmp r6, 0x5 - ble _08049088 -_08049148: - ldr r0, _080491A8 @ =TaskDummy - movs r1, 0x5 - bl CreateTask - lsls r0, 24 - lsrs r4, r0, 24 - ldr r2, _080491AC @ =gTasks - lsls r3, r4, 2 - adds r1, r3, r4 - lsls r1, 3 - adds r0, r1, r2 - mov r5, sp - ldrh r5, [r5, 0x8] - strh r5, [r0, 0x8] - mov r6, sp - ldrh r6, [r6, 0x18] - strh r6, [r0, 0xA] - movs r6, 0 - adds r0, r2, 0 - adds r0, 0xE - adds r1, r0 -_08049172: - mov r5, sp - adds r0, r5, r6 - ldrb r0, [r0] - strh r0, [r1] - adds r1, 0x2 - adds r6, 0x1 - cmp r6, 0x5 - ble _08049172 - adds r0, r3, r4 - lsls r0, 3 - adds r0, r2 - ldrh r6, [r5, 0x10] - strh r6, [r0, 0x1C] - movs r0, 0x6B - movs r1, 0 - bl PlaySE12WithPanning - adds r0, r4, 0 - add sp, 0x28 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080491A8: .4byte TaskDummy -_080491AC: .4byte gTasks - thumb_func_end CreatePartyStatusSummarySprites - thumb_func_start Task_HidePartyStatusSummary Task_HidePartyStatusSummary: @ 80491B0 push {r4-r7,lr} diff --git a/src/battle_interface.c b/src/battle_interface.c index e8a1f5a02..77ac1db80 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -885,6 +885,794 @@ void SwapHpBarsWithHpText(void) } } +#define tBattler data[0] +#define tSummaryBarSpriteId data[1] +#define tBallIconSpriteId(n) data[3 + n] +#define tIsBattleStart data[10] +#define tData15 data[15] + +#ifdef NONMATCHING +u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart) +{ + bool8 isOpponent; + s8 sp14; + s16 bar_X, bar_Y, bar_pos2_X, bar_data0; + s32 i; + u8 summaryBarSpriteId; + u8 ballIconSpritesIds[PARTY_SIZE]; + u8 taskId; + + if (!arg2 || GetBattlerPosition(battlerId) != B_POSITION_OPPONENT_RIGHT) + { + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + { + isOpponent = FALSE; + bar_X = 136, bar_Y = 96; + bar_pos2_X = 100; + bar_data0 = -5; + } + else + { + isOpponent = TRUE; + + if (!arg2 || !IsDoubleBattle()) + bar_X = 104, bar_Y = 40; + else + bar_X = 104, bar_Y = 16; + + bar_pos2_X = -100; + bar_data0 = 5; + } + } + else + { + isOpponent = TRUE; + bar_X = 104, bar_Y = 40; + bar_pos2_X = -100; + bar_data0 = 5; + } + + for (i = 0, sp14 = 0; i < PARTY_SIZE; i++) + { + if (partyInfo[i].hp != 0xFFFF) + sp14++; + } + + LoadCompressedSpriteSheetUsingHeap(&sStatusSummaryBarSpriteSheets[isOpponent]); + LoadSpriteSheet(&sStatusSummaryBallsSpriteSheets[isOpponent]); + LoadSpritePalette(&sStatusSummaryBarSpritePals[isOpponent]); + LoadSpritePalette(&sStatusSummaryBallsSpritePals[isOpponent]); + + summaryBarSpriteId = CreateSprite(&sStatusSummaryBarSpriteTemplates[isOpponent], bar_X, bar_Y, 10); + SetSubspriteTables(&gSprites[summaryBarSpriteId], sStatusSummaryBar_SubspriteTable); + gSprites[summaryBarSpriteId].pos2.x = bar_pos2_X; + gSprites[summaryBarSpriteId].data[0] = bar_data0; + + if (isOpponent) + { + gSprites[summaryBarSpriteId].pos1.x -= 96; + gSprites[summaryBarSpriteId].oam.matrixNum = ST_OAM_HFLIP; + } + else + { + gSprites[summaryBarSpriteId].pos1.x += 96; + } + + for (i = 0; i < PARTY_SIZE; i++) + { + ballIconSpritesIds[i] = CreateSpriteAtEnd(&sStatusSummaryBallsSpriteTemplates[isOpponent], bar_X, bar_Y - 4, 9); + + if (!isBattleStart) + gSprites[ballIconSpritesIds[i]].callback = SpriteCB_StatusSummaryBallsOnSwitchout; + + if (!isOpponent) + { + gSprites[ballIconSpritesIds[i]].pos2.x = 0; + gSprites[ballIconSpritesIds[i]].pos2.y = 0; + } + + gSprites[ballIconSpritesIds[i]].data[0] = summaryBarSpriteId; + + if (!isOpponent) + { + gSprites[ballIconSpritesIds[i]].pos1.x += 10 * i + 24; + gSprites[ballIconSpritesIds[i]].data[1] = i * 7 + 10; + gSprites[ballIconSpritesIds[i]].pos2.x = 120; + } + else + { + gSprites[ballIconSpritesIds[i]].pos1.x -= 10 * (5 - i) + 24; + gSprites[ballIconSpritesIds[i]].data[1] = (6 - i) * 7 + 10; + gSprites[ballIconSpritesIds[i]].pos2.x = -120; + } + + gSprites[ballIconSpritesIds[i]].data[2] = isOpponent; + } + + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + { + for (i = 0; i < PARTY_SIZE; i++) + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (partyInfo[i].hp == 0xFFFF) // empty slot or an egg + { + gSprites[ballIconSpritesIds[i]].oam.tileNum += 1; + gSprites[ballIconSpritesIds[i]].data[7] = 1; + } + else if (partyInfo[i].hp == 0) // fainted mon + { + gSprites[ballIconSpritesIds[i]].oam.tileNum += 3; + } + else if (partyInfo[i].status != 0) // mon with major status + { + gSprites[ballIconSpritesIds[i]].oam.tileNum += 2; + } + } + else + { + if (i >= sp14) // empty slot or an egg + { + gSprites[ballIconSpritesIds[i]].oam.tileNum += 1; + gSprites[ballIconSpritesIds[i]].data[7] = 1; + } + else if (partyInfo[i].hp == 0) // fainted mon + { + gSprites[ballIconSpritesIds[i]].oam.tileNum += 3; + } + else if (partyInfo[i].status != 0) // mon with major status + { + gSprites[ballIconSpritesIds[i]].oam.tileNum += 2; + } + } + } + } + else + { + /* + * FIXME: r4 and r5 are loaded correctly but in the wrong + * order. + */ + for (i = 0; i < PARTY_SIZE; i++) + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (partyInfo[i].hp == 0xFFFF) // empty slot or an egg + { + gSprites[ballIconSpritesIds[5 - i]].oam.tileNum += 1; + gSprites[ballIconSpritesIds[5 - i]].data[7] = 1; + } + else if (partyInfo[i].hp == 0) // fainted mon + { + gSprites[ballIconSpritesIds[5 - i]].oam.tileNum += 3; + } + else if (partyInfo[i].status != 0) // mon with major status + { + gSprites[ballIconSpritesIds[5 - i]].oam.tileNum += 2; + } + } + else + { + if (i >= sp14) // empty slot or an egg + { + gSprites[ballIconSpritesIds[5 - i]].oam.tileNum += 1; + gSprites[ballIconSpritesIds[5 - i]].data[7] = 1; + } + else if (partyInfo[i].hp == 0) // fainted mon + { + gSprites[ballIconSpritesIds[5 - i]].oam.tileNum += 3; + } + else if (partyInfo[i].status != 0) // mon with major status + { + gSprites[ballIconSpritesIds[5 - i]].oam.tileNum += 2; + } + } + } + } + + taskId = CreateTask(TaskDummy, 5); + gTasks[taskId].tBattler = battlerId; + gTasks[taskId].tSummaryBarSpriteId = summaryBarSpriteId; + + for (i = 0; i < PARTY_SIZE; i++) + gTasks[taskId].tBallIconSpriteId(i) = ballIconSpritesIds[i]; + + gTasks[taskId].tIsBattleStart = isBattleStart; + PlaySE12WithPanning(SE_TB_START, 0); + return taskId; +} +#else +NAKED +u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x28\n" + "\tstr r1, [sp, 0xC]\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstr r0, [sp, 0x8]\n" + "\tlsls r2, 24\n" + "\tlsrs r2, 24\n" + "\tadds r4, r2, 0\n" + "\tlsls r3, 24\n" + "\tlsrs r3, 24\n" + "\tstr r3, [sp, 0x10]\n" + "\tcmp r4, 0\n" + "\tbeq _08048D44\n" + "\tbl GetBattlerPosition\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x3\n" + "\tbeq _08048D88\n" + "_08048D44:\n" + "\tldr r0, [sp, 0x8]\n" + "\tbl GetBattlerSide\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _08048D64\n" + "\tmovs r7, 0\n" + "\tmovs r1, 0x88\n" + "\tmovs r2, 0x60\n" + "\tmovs r0, 0x64\n" + "\tmov r8, r0\n" + "\tldr r5, _08048D60 @ =0x0000fffb\n" + "\tb _08048D94\n" + "\t.align 2, 0\n" + "_08048D60: .4byte 0x0000fffb\n" + "_08048D64:\n" + "\tmovs r7, 0x1\n" + "\tcmp r4, 0\n" + "\tbeq _08048D74\n" + "\tbl IsDoubleBattle\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _08048D7A\n" + "_08048D74:\n" + "\tmovs r1, 0x68\n" + "\tmovs r2, 0x28\n" + "\tb _08048D7E\n" + "_08048D7A:\n" + "\tmovs r1, 0x68\n" + "\tmovs r2, 0x10\n" + "_08048D7E:\n" + "\tldr r3, _08048D84 @ =0x0000ff9c\n" + "\tmov r8, r3\n" + "\tb _08048D92\n" + "\t.align 2, 0\n" + "_08048D84: .4byte 0x0000ff9c\n" + "_08048D88:\n" + "\tmovs r7, 0x1\n" + "\tmovs r1, 0x68\n" + "\tmovs r2, 0x28\n" + "\tldr r5, _08048E40 @ =0x0000ff9c\n" + "\tmov r8, r5\n" + "_08048D92:\n" + "\tmovs r5, 0x5\n" + "_08048D94:\n" + "\tmovs r6, 0\n" + "\tstr r6, [sp, 0x14]\n" + "\tlsls r4, r7, 3\n" + "\tldr r0, _08048E44 @ =sStatusSummaryBarSpriteSheets\n" + "\tmov r10, r0\n" + "\tlsls r3, r7, 1\n" + "\tmov r9, r3\n" + "\tlsls r1, 16\n" + "\tstr r1, [sp, 0x20]\n" + "\tlsls r2, 16\n" + "\tstr r2, [sp, 0x24]\n" + "\tldr r2, _08048E48 @ =0x0000ffff\n" + "\tldr r1, [sp, 0xC]\n" + "\tmovs r6, 0x5\n" + "_08048DB0:\n" + "\tldrh r0, [r1]\n" + "\tcmp r0, r2\n" + "\tbeq _08048DC4\n" + "\tldr r3, [sp, 0x14]\n" + "\tlsls r0, r3, 24\n" + "\tmovs r3, 0x80\n" + "\tlsls r3, 17\n" + "\tadds r0, r3\n" + "\tlsrs r0, 24\n" + "\tstr r0, [sp, 0x14]\n" + "_08048DC4:\n" + "\tadds r1, 0x8\n" + "\tsubs r6, 0x1\n" + "\tcmp r6, 0\n" + "\tbge _08048DB0\n" + "\tmov r6, r10\n" + "\tadds r0, r4, r6\n" + "\tbl LoadCompressedSpriteSheetUsingHeap\n" + "\tldr r0, _08048E4C @ =sStatusSummaryBallsSpriteSheets\n" + "\tadds r0, r4, r0\n" + "\tbl LoadSpriteSheet\n" + "\tldr r0, _08048E50 @ =sStatusSummaryBarSpritePals\n" + "\tadds r0, r4, r0\n" + "\tbl LoadSpritePalette\n" + "\tldr r0, _08048E54 @ =sStatusSummaryBallsSpritePals\n" + "\tadds r0, r4, r0\n" + "\tbl LoadSpritePalette\n" + "\tmov r1, r9\n" + "\tadds r0, r1, r7\n" + "\tlsls r0, 3\n" + "\tldr r1, _08048E58 @ =sStatusSummaryBarSpriteTemplates\n" + "\tadds r0, r1\n" + "\tldr r2, [sp, 0x20]\n" + "\tasrs r1, r2, 16\n" + "\tldr r3, [sp, 0x24]\n" + "\tasrs r2, r3, 16\n" + "\tmovs r3, 0xA\n" + "\tbl CreateSprite\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstr r0, [sp, 0x18]\n" + "\tlsls r0, 4\n" + "\tldr r6, [sp, 0x18]\n" + "\tadds r0, r6\n" + "\tlsls r0, 2\n" + "\tldr r1, _08048E5C @ =gSprites\n" + "\tadds r4, r0, r1\n" + "\tldr r1, _08048E60 @ =sStatusSummaryBar_SubspriteTable\n" + "\tadds r0, r4, 0\n" + "\tbl SetSubspriteTables\n" + "\tmov r0, r8\n" + "\tstrh r0, [r4, 0x24]\n" + "\tstrh r5, [r4, 0x2E]\n" + "\tcmp r7, 0\n" + "\tbeq _08048E64\n" + "\tldrh r0, [r4, 0x20]\n" + "\tsubs r0, 0x60\n" + "\tstrh r0, [r4, 0x20]\n" + "\tldrb r1, [r4, 0x3]\n" + "\tmovs r0, 0x3F\n" + "\tnegs r0, r0\n" + "\tands r0, r1\n" + "\tmovs r1, 0x10\n" + "\torrs r0, r1\n" + "\tstrb r0, [r4, 0x3]\n" + "\tb _08048E6A\n" + "\t.align 2, 0\n" + "_08048E40: .4byte 0x0000ff9c\n" + "_08048E44: .4byte sStatusSummaryBarSpriteSheets\n" + "_08048E48: .4byte 0x0000ffff\n" + "_08048E4C: .4byte sStatusSummaryBallsSpriteSheets\n" + "_08048E50: .4byte sStatusSummaryBarSpritePals\n" + "_08048E54: .4byte sStatusSummaryBallsSpritePals\n" + "_08048E58: .4byte sStatusSummaryBarSpriteTemplates\n" + "_08048E5C: .4byte gSprites\n" + "_08048E60: .4byte sStatusSummaryBar_SubspriteTable\n" + "_08048E64:\n" + "\tldrh r0, [r4, 0x20]\n" + "\tadds r0, 0x60\n" + "\tstrh r0, [r4, 0x20]\n" + "_08048E6A:\n" + "\tmovs r6, 0\n" + "\tldr r1, _08048F14 @ =gSprites\n" + "\tmov r10, r1\n" + "\tmov r4, sp\n" + "\tmov r2, r9\n" + "\tadds r0, r2, r7\n" + "\tlsls r0, 3\n" + "\tstr r0, [sp, 0x1C]\n" + "\tmovs r3, 0xA\n" + "\tmov r9, r3\n" + "\tmov r8, r6\n" + "_08048E80:\n" + "\tldr r0, _08048F18 @ =sStatusSummaryBallsSpriteTemplates\n" + "\tldr r5, [sp, 0x24]\n" + "\tldr r1, _08048F1C @ =0xfffc0000\n" + "\tadds r2, r5, r1\n" + "\tldr r3, [sp, 0x1C]\n" + "\tadds r0, r3, r0\n" + "\tldr r5, [sp, 0x20]\n" + "\tasrs r1, r5, 16\n" + "\tasrs r2, 16\n" + "\tmovs r3, 0x9\n" + "\tbl CreateSpriteAtEnd\n" + "\tstrb r0, [r4]\n" + "\tldr r0, [sp, 0x10]\n" + "\tcmp r0, 0\n" + "\tbne _08048EB0\n" + "\tldrb r0, [r4]\n" + "\tlsls r1, r0, 4\n" + "\tadds r1, r0\n" + "\tlsls r1, 2\n" + "\tldr r2, _08048F20 @ =gSprites + 0x1C\n" + "\tadds r1, r2\n" + "\tldr r0, _08048F24 @ =SpriteCB_StatusSummaryBallsOnSwitchout\n" + "\tstr r0, [r1]\n" + "_08048EB0:\n" + "\tldr r5, _08048F14 @ =gSprites\n" + "\tcmp r7, 0\n" + "\tbne _08048ECE\n" + "\tldrb r1, [r4]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadd r0, r10\n" + "\tstrh r7, [r0, 0x24]\n" + "\tldrb r1, [r4]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadd r0, r10\n" + "\tstrh r7, [r0, 0x26]\n" + "_08048ECE:\n" + "\tldrb r1, [r4]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r5\n" + "\tmovs r1, 0\n" + "\tmov r3, sp\n" + "\tldrh r3, [r3, 0x18]\n" + "\tstrh r3, [r0, 0x2E]\n" + "\tcmp r7, 0\n" + "\tbne _08048F28\n" + "\tldrb r0, [r4]\n" + "\tlsls r1, r0, 4\n" + "\tadds r1, r0\n" + "\tlsls r1, 2\n" + "\tadds r1, r5\n" + "\tldrh r0, [r1, 0x20]\n" + "\tadds r0, 0x18\n" + "\tadd r0, r8\n" + "\tstrh r0, [r1, 0x20]\n" + "\tldrb r1, [r4]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r5\n" + "\tmov r1, r9\n" + "\tstrh r1, [r0, 0x30]\n" + "\tldrb r1, [r4]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r5\n" + "\tmovs r1, 0x78\n" + "\tb _08048F66\n" + "\t.align 2, 0\n" + "_08048F14: .4byte gSprites\n" + "_08048F18: .4byte sStatusSummaryBallsSpriteTemplates\n" + "_08048F1C: .4byte 0xfffc0000\n" + "_08048F20: .4byte gSprites + 0x1C\n" + "_08048F24: .4byte SpriteCB_StatusSummaryBallsOnSwitchout\n" + "_08048F28:\n" + "\tldrb r0, [r4]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tadds r2, r5\n" + "\tldrh r3, [r2, 0x20]\n" + "\tsubs r3, 0x18\n" + "\tmovs r1, 0x5\n" + "\tsubs r1, r6\n" + "\tlsls r0, r1, 2\n" + "\tadds r0, r1\n" + "\tlsls r0, 1\n" + "\tsubs r3, r0\n" + "\tstrh r3, [r2, 0x20]\n" + "\tldrb r0, [r4]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tadds r2, r5\n" + "\tmovs r1, 0x6\n" + "\tsubs r1, r6\n" + "\tlsls r0, r1, 3\n" + "\tsubs r0, r1\n" + "\tadds r0, 0xA\n" + "\tstrh r0, [r2, 0x30]\n" + "\tldrb r1, [r4]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r5\n" + "\tldr r1, _08048FD4 @ =0x0000ff88\n" + "_08048F66:\n" + "\tstrh r1, [r0, 0x24]\n" + "\tldrb r1, [r4]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r5\n" + "\tstrh r7, [r0, 0x32]\n" + "\tadds r4, 0x1\n" + "\tmovs r2, 0x7\n" + "\tadd r9, r2\n" + "\tmovs r3, 0xA\n" + "\tadd r8, r3\n" + "\tadds r6, 0x1\n" + "\tcmp r6, 0x5\n" + "\tbgt _08048F86\n" + "\tb _08048E80\n" + "_08048F86:\n" + "\tldr r0, [sp, 0x8]\n" + "\tbl GetBattlerSide\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _0804906E\n" + "\tmovs r6, 0\n" + "\tldr r5, _08048FD8 @ =gBattleTypeFlags\n" + "\tmov r10, r5\n" + "\tldr r0, _08048FDC @ =0x0000ffff\n" + "\tmov r9, r0\n" + "\tldr r7, _08048FE0 @ =gSprites\n" + "\tldr r1, _08048FE4 @ =0x000003ff\n" + "\tmov r12, r1\n" + "\tldr r2, _08048FE8 @ =0xfffffc00\n" + "\tmov r8, r2\n" + "\tmov r4, sp\n" + "\tldr r5, [sp, 0xC]\n" + "_08048FAA:\n" + "\tmov r3, r10\n" + "\tldr r0, [r3]\n" + "\tmovs r1, 0x40\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _08048FEC\n" + "\tldrh r0, [r5]\n" + "\tcmp r0, r9\n" + "\tbeq _08048FF6\n" + "\tcmp r0, 0\n" + "\tbne _0804903E\n" + "\tldrb r0, [r4]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tadds r2, r7\n" + "\tldrh r3, [r2, 0x4]\n" + "\tlsls r1, r3, 22\n" + "\tlsrs r1, 22\n" + "\tadds r1, 0x3\n" + "\tb _08049056\n" + "\t.align 2, 0\n" + "_08048FD4: .4byte 0x0000ff88\n" + "_08048FD8: .4byte gBattleTypeFlags\n" + "_08048FDC: .4byte 0x0000ffff\n" + "_08048FE0: .4byte gSprites\n" + "_08048FE4: .4byte 0x000003ff\n" + "_08048FE8: .4byte 0xfffffc00\n" + "_08048FEC:\n" + "\tldr r1, [sp, 0x14]\n" + "\tlsls r0, r1, 24\n" + "\tasrs r0, 24\n" + "\tcmp r6, r0\n" + "\tblt _08049024\n" + "_08048FF6:\n" + "\tldrb r0, [r4]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tadds r2, r7\n" + "\tldrh r3, [r2, 0x4]\n" + "\tlsls r1, r3, 22\n" + "\tlsrs r1, 22\n" + "\tadds r1, 0x1\n" + "\tmov r0, r12\n" + "\tands r1, r0\n" + "\tmov r0, r8\n" + "\tands r0, r3\n" + "\torrs r0, r1\n" + "\tstrh r0, [r2, 0x4]\n" + "\tldrb r1, [r4]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r7\n" + "\tmovs r1, 0x1\n" + "\tstrh r1, [r0, 0x3C]\n" + "\tb _08049062\n" + "_08049024:\n" + "\tldrh r0, [r5]\n" + "\tcmp r0, 0\n" + "\tbne _0804903E\n" + "\tldrb r0, [r4]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tadds r2, r7\n" + "\tldrh r3, [r2, 0x4]\n" + "\tlsls r1, r3, 22\n" + "\tlsrs r1, 22\n" + "\tadds r1, 0x3\n" + "\tb _08049056\n" + "_0804903E:\n" + "\tldr r0, [r5, 0x4]\n" + "\tcmp r0, 0\n" + "\tbeq _08049062\n" + "\tldrb r0, [r4]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tadds r2, r7\n" + "\tldrh r3, [r2, 0x4]\n" + "\tlsls r1, r3, 22\n" + "\tlsrs r1, 22\n" + "\tadds r1, 0x2\n" + "_08049056:\n" + "\tmov r0, r12\n" + "\tands r1, r0\n" + "\tmov r0, r8\n" + "\tands r0, r3\n" + "\torrs r0, r1\n" + "\tstrh r0, [r2, 0x4]\n" + "_08049062:\n" + "\tadds r4, 0x1\n" + "\tadds r5, 0x8\n" + "\tadds r6, 0x1\n" + "\tcmp r6, 0x5\n" + "\tble _08048FAA\n" + "\tb _08049148\n" + "_0804906E:\n" + "\tmovs r6, 0\n" + "\tldr r1, _080490B4 @ =gBattleTypeFlags\n" + "\tmov r10, r1\n" + "\tldr r2, _080490B8 @ =0x0000ffff\n" + "\tmov r9, r2\n" + "\tldr r7, _080490BC @ =gSprites\n" + "\tldr r3, _080490C0 @ =0x000003ff\n" + "\tmov r12, r3\n" + "\tldr r5, _080490C4 @ =0xfffffc00\n" + "\tmov r8, r5\n" + "\tldr r5, [sp, 0xC]\n" + "\tmov r4, sp\n" + "\tadds r4, 0x5\n" + "_08049088:\n" + "\tmov r1, r10\n" + "\tldr r0, [r1]\n" + "\tmovs r1, 0x40\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _080490C8\n" + "\tldrh r0, [r5]\n" + "\tcmp r0, r9\n" + "\tbeq _080490D2\n" + "\tcmp r0, 0\n" + "\tbne _0804911A\n" + "\tldrb r0, [r4]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tadds r2, r7\n" + "\tldrh r3, [r2, 0x4]\n" + "\tlsls r1, r3, 22\n" + "\tlsrs r1, 22\n" + "\tadds r1, 0x3\n" + "\tb _08049132\n" + "\t.align 2, 0\n" + "_080490B4: .4byte gBattleTypeFlags\n" + "_080490B8: .4byte 0x0000ffff\n" + "_080490BC: .4byte gSprites\n" + "_080490C0: .4byte 0x000003ff\n" + "_080490C4: .4byte 0xfffffc00\n" + "_080490C8:\n" + "\tldr r1, [sp, 0x14]\n" + "\tlsls r0, r1, 24\n" + "\tasrs r0, 24\n" + "\tcmp r6, r0\n" + "\tblt _08049100\n" + "_080490D2:\n" + "\tldrb r0, [r4]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tadds r2, r7\n" + "\tldrh r3, [r2, 0x4]\n" + "\tlsls r1, r3, 22\n" + "\tlsrs r1, 22\n" + "\tadds r1, 0x1\n" + "\tmov r0, r12\n" + "\tands r1, r0\n" + "\tmov r0, r8\n" + "\tands r0, r3\n" + "\torrs r0, r1\n" + "\tstrh r0, [r2, 0x4]\n" + "\tldrb r1, [r4]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r7\n" + "\tmovs r1, 0x1\n" + "\tstrh r1, [r0, 0x3C]\n" + "\tb _0804913E\n" + "_08049100:\n" + "\tldrh r0, [r5]\n" + "\tcmp r0, 0\n" + "\tbne _0804911A\n" + "\tldrb r0, [r4]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tadds r2, r7\n" + "\tldrh r3, [r2, 0x4]\n" + "\tlsls r1, r3, 22\n" + "\tlsrs r1, 22\n" + "\tadds r1, 0x3\n" + "\tb _08049132\n" + "_0804911A:\n" + "\tldr r0, [r5, 0x4]\n" + "\tcmp r0, 0\n" + "\tbeq _0804913E\n" + "\tldrb r0, [r4]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tadds r2, r7\n" + "\tldrh r3, [r2, 0x4]\n" + "\tlsls r1, r3, 22\n" + "\tlsrs r1, 22\n" + "\tadds r1, 0x2\n" + "_08049132:\n" + "\tmov r0, r12\n" + "\tands r1, r0\n" + "\tmov r0, r8\n" + "\tands r0, r3\n" + "\torrs r0, r1\n" + "\tstrh r0, [r2, 0x4]\n" + "_0804913E:\n" + "\tsubs r4, 0x1\n" + "\tadds r5, 0x8\n" + "\tadds r6, 0x1\n" + "\tcmp r6, 0x5\n" + "\tble _08049088\n" + "_08049148:\n" + "\tldr r0, _080491A8 @ =TaskDummy\n" + "\tmovs r1, 0x5\n" + "\tbl CreateTask\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tldr r2, _080491AC @ =gTasks\n" + "\tlsls r3, r4, 2\n" + "\tadds r1, r3, r4\n" + "\tlsls r1, 3\n" + "\tadds r0, r1, r2\n" + "\tmov r5, sp\n" + "\tldrh r5, [r5, 0x8]\n" + "\tstrh r5, [r0, 0x8]\n" + "\tmov r6, sp\n" + "\tldrh r6, [r6, 0x18]\n" + "\tstrh r6, [r0, 0xA]\n" + "\tmovs r6, 0\n" + "\tadds r0, r2, 0\n" + "\tadds r0, 0xE\n" + "\tadds r1, r0\n" + "_08049172:\n" + "\tmov r5, sp\n" + "\tadds r0, r5, r6\n" + "\tldrb r0, [r0]\n" + "\tstrh r0, [r1]\n" + "\tadds r1, 0x2\n" + "\tadds r6, 0x1\n" + "\tcmp r6, 0x5\n" + "\tble _08049172\n" + "\tadds r0, r3, r4\n" + "\tlsls r0, 3\n" + "\tadds r0, r2\n" + "\tldrh r6, [r5, 0x10]\n" + "\tstrh r6, [r0, 0x1C]\n" + "\tmovs r0, 0x6B\n" + "\tmovs r1, 0\n" + "\tbl PlaySE12WithPanning\n" + "\tadds r0, r4, 0\n" + "\tadd sp, 0x28\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1\n" + "\t.align 2, 0\n" + "_080491A8: .4byte TaskDummy\n" + "_080491AC: .4byte gTasks"); +} +#endif //NONMATCHING + const u8 gUnknown_8260556[] = _("{HIGHLIGHT 02}"); const u16 gUnknown_826055A[] = { -- cgit v1.2.3 From d09a3d7f1c6efc990b44b5ea240b36147d94104a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 12 Jan 2020 11:17:58 -0500 Subject: through TryAddPokeballIconToHealthbox --- asm/battle_interface.s | 978 +-------------------------------------------- include/battle_interface.h | 4 +- src/battle_gfx_sfx_util.c | 4 +- src/battle_interface.c | 334 +++++++++++++++- 4 files changed, 340 insertions(+), 980 deletions(-) diff --git a/asm/battle_interface.s b/asm/battle_interface.s index 5d3aa7b20..e4c45c51c 100644 --- a/asm/battle_interface.s +++ b/asm/battle_interface.s @@ -5,976 +5,6 @@ .text - thumb_func_start Task_HidePartyStatusSummary -Task_HidePartyStatusSummary: @ 80491B0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r2, _080492C0 @ =gTasks - lsls r3, r0, 2 - adds r1, r3, r0 - lsls r1, 3 - adds r0, r1, r2 - ldrb r7, [r0, 0x1C] - ldrb r4, [r0, 0xA] - mov r10, r4 - ldrb r0, [r0, 0x8] - str r0, [sp, 0x8] - movs r5, 0 - str r3, [sp, 0xC] - adds r2, 0xE - adds r2, r1, r2 -_080491DE: - mov r0, sp - adds r1, r0, r5 - ldrh r0, [r2] - strb r0, [r1] - adds r2, 0x2 - adds r5, 0x1 - cmp r5, 0x5 - ble _080491DE - movs r1, 0xFD - lsls r1, 6 - movs r0, 0x50 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0x10 - bl SetGpuReg - ldr r1, _080492C0 @ =gTasks - ldr r0, [sp, 0xC] - add r0, r8 - lsls r0, 3 - adds r0, r1 - movs r1, 0x10 - strh r1, [r0, 0x26] - movs r5, 0 - mov r1, r10 - lsls r1, 4 - str r1, [sp, 0x10] - ldr r3, _080492C4 @ =gSprites - movs r6, 0xD - negs r6, r6 - mov r12, r3 - movs r4, 0x4 -_08049220: - mov r2, sp - adds r0, r2, r5 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - ldrb r2, [r1, 0x1] - adds r0, r6, 0 - ands r0, r2 - orrs r0, r4 - strb r0, [r1, 0x1] - adds r5, 0x1 - cmp r5, 0x5 - ble _08049220 - ldr r2, [sp, 0x10] - add r2, r10 - lsls r2, 2 - add r2, r12 - ldrb r1, [r2, 0x1] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2, 0x1] - cmp r7, 0 - bne _0804925A - b _08049360 -_0804925A: - movs r5, 0 - mov r6, r12 - mov r9, r5 - adds r3, r6, 0 - adds r3, 0x1C - mov r4, sp - movs r7, 0 -_08049268: - ldr r0, [sp, 0x8] - str r3, [sp, 0x14] - bl GetBattlerSide - lsls r0, 24 - lsrs r2, r0, 24 - ldr r3, [sp, 0x14] - cmp r2, 0 - beq _080492CC - movs r0, 0x5 - subs r0, r5 - mov r1, sp - adds r2, r1, r0 - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strh r7, [r0, 0x30] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - mov r1, r9 - strh r1, [r0, 0x34] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - mov r1, r9 - strh r1, [r0, 0x36] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldr r1, _080492C8 @ =sub_8049630 - str r1, [r0] - ldr r2, _080492C4 @ =gSprites - mov r12, r2 - b _08049302 - .align 2, 0 -_080492C0: .4byte gTasks -_080492C4: .4byte gSprites -_080492C8: .4byte sub_8049630 -_080492CC: - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strh r7, [r0, 0x30] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strh r2, [r0, 0x34] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strh r2, [r0, 0x36] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldr r1, _08049348 @ =sub_8049630 - str r1, [r0] - ldr r0, _0804934C @ =gSprites - mov r12, r0 -_08049302: - adds r4, 0x1 - adds r7, 0x7 - adds r5, 0x1 - cmp r5, 0x5 - ble _08049268 - ldr r3, [sp, 0x10] - add r3, r10 - lsls r3, 2 - mov r1, r12 - adds r0, r3, r1 - movs r2, 0x2E - ldrsh r1, [r0, r2] - lsrs r2, r1, 31 - adds r1, r2 - asrs r1, 1 - movs r2, 0 - strh r1, [r0, 0x2E] - strh r2, [r0, 0x30] - mov r1, r12 - adds r1, 0x1C - adds r3, r1 - ldr r1, _08049350 @ =sub_8049568 - str r1, [r3] - ldr r1, _08049354 @ =gUnknown_8260404 - bl SetSubspriteTables - ldr r1, _08049358 @ =gTasks - ldr r0, [sp, 0xC] - add r0, r8 - lsls r0, 3 - adds r0, r1 - ldr r1, _0804935C @ =sub_8049388 - str r1, [r0] - b _0804936E - .align 2, 0 -_08049348: .4byte sub_8049630 -_0804934C: .4byte gSprites -_08049350: .4byte sub_8049568 -_08049354: .4byte gUnknown_8260404 -_08049358: .4byte gTasks -_0804935C: .4byte sub_8049388 -_08049360: - ldr r0, _08049380 @ =gTasks - ldr r1, [sp, 0xC] - add r1, r8 - lsls r1, 3 - adds r1, r0 - ldr r0, _08049384 @ =sub_804948C - str r0, [r1] -_0804936E: - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08049380: .4byte gTasks -_08049384: .4byte sub_804948C - thumb_func_end Task_HidePartyStatusSummary - - thumb_func_start sub_8049388 -sub_8049388: @ 8049388 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080493DC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 - ldrh r0, [r4, 0x1E] - adds r1, r0, 0x1 - strh r1, [r4, 0x1E] - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - bne _080493C8 - ldrh r0, [r4, 0x26] - subs r1, r0, 0x1 - strh r1, [r4, 0x26] - lsls r0, r1, 16 - cmp r0, 0 - blt _080493D4 - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg -_080493C8: - movs r1, 0x26 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080493D4 - ldr r0, _080493E0 @ =sub_80493E4 - str r0, [r4] -_080493D4: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080493DC: .4byte gTasks -_080493E0: .4byte sub_80493E4 - thumb_func_end sub_8049388 - - thumb_func_start sub_80493E4 -sub_80493E4: @ 80493E4 - push {r4-r7,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r7, _0804945C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r6, r0, 3 - adds r1, r6, r7 - ldrh r0, [r1, 0x26] - subs r0, 0x1 - strh r0, [r1, 0x26] - lsls r0, 16 - asrs r2, r0, 16 - movs r0, 0x1 - negs r0, r0 - cmp r2, r0 - bne _08049464 - ldrb r3, [r1, 0xA] - movs r5, 0 - adds r0, r7, 0 - adds r0, 0xE - adds r2, r6, r0 -_08049412: - mov r0, sp - adds r1, r0, r5 - ldrh r0, [r2] - strb r0, [r1] - adds r2, 0x2 - adds r5, 0x1 - cmp r5, 0x5 - ble _08049412 - lsls r0, r3, 4 - adds r0, r3 - lsls r0, 2 - ldr r4, _08049460 @ =gSprites - adds r0, r4 - bl DestroySpriteAndFreeResources - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySpriteAndFreeResources - movs r5, 0x1 -_08049442: - mov r1, sp - adds r0, r1, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - adds r5, 0x1 - cmp r5, 0x5 - ble _08049442 - b _08049482 - .align 2, 0 -_0804945C: .4byte gTasks -_08049460: .4byte gSprites -_08049464: - movs r0, 0x3 - negs r0, r0 - cmp r2, r0 - bne _08049482 - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - adds r0, r4, 0 - bl DestroyTask -_08049482: - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80493E4 - - thumb_func_start sub_804948C -sub_804948C: @ 804948C - push {r4-r7,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - ldr r7, _080494C4 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r6, r0, 3 - adds r3, r6, r7 - ldrh r0, [r3, 0x26] - subs r1, r0, 0x1 - strh r1, [r3, 0x26] - lsls r0, r1, 16 - asrs r2, r0, 16 - cmp r2, 0 - blt _080494C8 - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - b _08049546 - .align 2, 0 -_080494C4: .4byte gTasks -_080494C8: - movs r0, 0x1 - negs r0, r0 - cmp r2, r0 - bne _08049528 - ldrb r3, [r3, 0xA] - movs r5, 0 - adds r0, r7, 0 - adds r0, 0xE - adds r2, r6, r0 -_080494DA: - mov r0, sp - adds r1, r0, r5 - ldrh r0, [r2] - strb r0, [r1] - adds r2, 0x2 - adds r5, 0x1 - cmp r5, 0x5 - ble _080494DA - lsls r0, r3, 4 - adds r0, r3 - lsls r0, 2 - ldr r4, _08049524 @ =gSprites - adds r0, r4 - bl DestroySpriteAndFreeResources - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySpriteAndFreeResources - movs r5, 0x1 -_0804950A: - mov r1, sp - adds r0, r1, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - adds r5, 0x1 - cmp r5, 0x5 - ble _0804950A - b _08049546 - .align 2, 0 -_08049524: .4byte gSprites -_08049528: - movs r0, 0x3 - negs r0, r0 - cmp r2, r0 - bne _08049546 - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - adds r0, r4, 0 - bl DestroyTask -_08049546: - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_804948C - - thumb_func_start SpriteCB_StatusSummaryBar -SpriteCB_StatusSummaryBar: @ 8049550 - push {lr} - adds r1, r0, 0 - ldrh r2, [r1, 0x24] - movs r3, 0x24 - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _08049564 - ldrh r0, [r1, 0x2E] - adds r0, r2, r0 - strh r0, [r1, 0x24] -_08049564: - pop {r0} - bx r0 - thumb_func_end SpriteCB_StatusSummaryBar - - thumb_func_start sub_8049568 -sub_8049568: @ 8049568 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x30] - adds r1, r0, 0 - adds r1, 0x20 - strh r1, [r2, 0x30] - movs r3, 0x2E - ldrsh r0, [r2, r3] - cmp r0, 0 - ble _08049586 - lsls r0, r1, 16 - asrs r0, 20 - ldrh r1, [r2, 0x24] - adds r0, r1 - b _0804958E -_08049586: - lsls r1, 16 - asrs r1, 20 - ldrh r0, [r2, 0x24] - subs r0, r1 -_0804958E: - strh r0, [r2, 0x24] - ldrh r1, [r2, 0x30] - movs r0, 0xF - ands r0, r1 - strh r0, [r2, 0x30] - pop {r0} - bx r0 - thumb_func_end sub_8049568 - - thumb_func_start SpriteCB_StatusSummaryBallsOnBattleStart -SpriteCB_StatusSummaryBallsOnBattleStart: @ 804959C - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x30] - movs r2, 0x30 - ldrsh r0, [r4, r2] - cmp r0, 0 - ble _080495B0 - subs r0, r1, 0x1 - strh r0, [r4, 0x30] - b _08049626 -_080495B0: - ldrh r0, [r4, 0x32] - lsls r0, 24 - lsrs r3, r0, 24 - ldrh r2, [r4, 0x34] - adds r0, r2, 0 - adds r0, 0x38 - lsls r1, r0, 16 - lsrs r2, r1, 16 - ldr r0, _080495E0 @ =0x0000fff0 - ands r2, r0 - strh r2, [r4, 0x34] - cmp r3, 0 - beq _080495E4 - lsrs r0, r1, 20 - ldrh r1, [r4, 0x24] - adds r0, r1 - strh r0, [r4, 0x24] - lsls r0, 16 - cmp r0, 0 - ble _080495F4 - movs r0, 0 - strh r0, [r4, 0x24] - b _080495F4 - .align 2, 0 -_080495E0: .4byte 0x0000fff0 -_080495E4: - lsrs r1, 20 - ldrh r0, [r4, 0x24] - subs r0, r1 - strh r0, [r4, 0x24] - lsls r0, 16 - cmp r0, 0 - bge _080495F4 - strh r3, [r4, 0x24] -_080495F4: - movs r2, 0x24 - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _08049626 - movs r1, 0x3F - cmp r3, 0 - beq _08049604 - movs r1, 0xC0 -_08049604: - movs r2, 0x3C - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _08049618 - lsls r1, 24 - asrs r1, 24 - movs r0, 0x6D - bl PlaySE2WithPanning - b _08049622 -_08049618: - lsls r1, 24 - asrs r1, 24 - movs r0, 0x6C - bl PlaySE1WithPanning -_08049622: - ldr r0, _0804962C @ =SpriteCallbackDummy - str r0, [r4, 0x1C] -_08049626: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804962C: .4byte SpriteCallbackDummy - thumb_func_end SpriteCB_StatusSummaryBallsOnBattleStart - - thumb_func_start sub_8049630 -sub_8049630: @ 8049630 - push {r4,lr} - adds r3, r0, 0 - ldrh r1, [r3, 0x30] - movs r2, 0x30 - ldrsh r0, [r3, r2] - cmp r0, 0 - ble _08049644 - subs r0, r1, 0x1 - strh r0, [r3, 0x30] - b _08049694 -_08049644: - ldrh r0, [r3, 0x32] - lsls r0, 24 - ldrh r2, [r3, 0x34] - adds r1, r2, 0 - adds r1, 0x38 - lsls r4, r1, 16 - lsrs r2, r4, 16 - ldr r1, _08049664 @ =0x0000fff0 - ands r2, r1 - strh r2, [r3, 0x34] - cmp r0, 0 - beq _08049668 - lsrs r0, r4, 20 - ldrh r1, [r3, 0x24] - adds r0, r1 - b _0804966E - .align 2, 0 -_08049664: .4byte 0x0000fff0 -_08049668: - lsrs r1, r4, 20 - ldrh r0, [r3, 0x24] - subs r0, r1 -_0804966E: - strh r0, [r3, 0x24] - movs r2, 0x24 - ldrsh r0, [r3, r2] - movs r2, 0x20 - ldrsh r1, [r3, r2] - adds r0, r1 - adds r0, 0x8 - movs r1, 0x80 - lsls r1, 1 - cmp r0, r1 - bls _08049694 - adds r2, r3, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _0804969C @ =SpriteCallbackDummy - str r0, [r3, 0x1C] -_08049694: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804969C: .4byte SpriteCallbackDummy - thumb_func_end sub_8049630 - - thumb_func_start SpriteCB_StatusSummaryBallsOnSwitchout -SpriteCB_StatusSummaryBallsOnSwitchout: @ 80496A0 - ldrh r2, [r0, 0x2E] - lsls r2, 24 - lsrs r2, 24 - ldr r3, _080496BC @ =gSprites - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r3 - ldrh r2, [r1, 0x24] - strh r2, [r0, 0x24] - ldrh r1, [r1, 0x26] - strh r1, [r0, 0x26] - bx lr - .align 2, 0 -_080496BC: .4byte gSprites - thumb_func_end SpriteCB_StatusSummaryBallsOnSwitchout - - thumb_func_start sub_80496C0 -sub_80496C0: @ 80496C0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - adds r7, r1, 0 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r0, _08049760 @ =gDisplayedStringBattle - ldr r1, _08049764 @ =gUnknown_8260556 - bl StringCopy - adds r5, r0, 0 - adds r0, r7, 0 - movs r1, 0x2 - mov r2, sp - bl GetMonData - mov r0, sp - bl StringGetEnd10 - adds r0, r5, 0 - mov r1, sp - bl StringCopy - adds r5, r0, 0 - movs r0, 0xFC - strb r0, [r5] - adds r5, 0x1 - movs r0, 0x1 - strb r0, [r5] - adds r5, 0x1 - adds r0, r7, 0 - bl GetMonGender - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r7, 0 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - adds r1, r0, 0 - cmp r0, 0x1D - beq _08049720 - cmp r0, 0x20 - bne _08049734 -_08049720: - movs r0, 0xB - muls r1, r0 - ldr r0, _08049768 @ =gSpeciesNames - adds r1, r0 - mov r0, sp - bl StringCompare - cmp r0, 0 - bne _08049734 - movs r6, 0x64 -_08049734: - ldr r1, _0804976C @ =gSprites - mov r0, r8 - lsls r4, r0, 4 - adds r0, r4, r0 - lsls r0, 2 - adds r0, r1 - ldrh r1, [r0, 0x3A] - lsls r1, 24 - lsrs r1, 24 - adds r0, r7, 0 - bl CheckBattleTypeGhost - lsls r0, 24 - cmp r0, 0 - beq _08049754 - movs r6, 0x64 -_08049754: - cmp r6, 0 - beq _08049770 - cmp r6, 0xFE - beq _0804977A - movs r0, 0xB - b _08049782 - .align 2, 0 -_08049760: .4byte gDisplayedStringBattle -_08049764: .4byte gUnknown_8260556 -_08049768: .4byte gSpeciesNames -_0804976C: .4byte gSprites -_08049770: - movs r0, 0xB - strb r0, [r5] - adds r5, 0x1 - movs r0, 0xB5 - b _08049782 -_0804977A: - movs r0, 0xA - strb r0, [r5] - adds r5, 0x1 - movs r0, 0xB6 -_08049782: - strb r0, [r5] - movs r0, 0xFF - strb r0, [r5, 0x1] - ldr r0, _080497E4 @ =gDisplayedStringBattle - add r3, sp, 0xC - movs r1, 0 - movs r2, 0x3 - bl AddTextPrinterAndCreateWindowOnHealthbox - adds r6, r0, 0 - ldr r0, _080497E8 @ =gSprites - mov r2, r8 - adds r1, r4, r2 - lsls r1, 2 - adds r1, r0 - ldrh r0, [r1, 0x4] - lsls r0, 22 - lsrs r4, r0, 17 - ldrh r0, [r1, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080497F8 - ldr r1, _080497EC @ =0x06010040 - adds r0, r4, r1 - adds r1, r6, 0 - movs r2, 0x6 - bl TextIntoHealthboxObject - bl IsDoubleBattle - lsls r0, 24 - ldr r2, _080497F0 @ =0x06010400 - adds r5, r4, r2 - cmp r0, 0 - bne _080497D4 - ldr r0, _080497F4 @ =0x06010800 - adds r5, r4, r0 -_080497D4: - adds r1, r6, 0 - adds r1, 0xC0 - adds r0, r5, 0 - movs r2, 0x1 - bl TextIntoHealthboxObject - b _08049804 - .align 2, 0 -_080497E4: .4byte gDisplayedStringBattle -_080497E8: .4byte gSprites -_080497EC: .4byte 0x06010040 -_080497F0: .4byte 0x06010400 -_080497F4: .4byte 0x06010800 -_080497F8: - ldr r1, _08049818 @ =0x06010020 - adds r0, r4, r1 - adds r1, r6, 0 - movs r2, 0x7 - bl TextIntoHealthboxObject -_08049804: - ldr r0, [sp, 0xC] - bl RemoveWindowOnHealthbox - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08049818: .4byte 0x06010020 - thumb_func_end sub_80496C0 - - thumb_func_start sub_804981C -sub_804981C: @ 804981C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r2, r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r10, r1 - ldr r0, _080498DC @ =gBattleTypeFlags - ldr r1, [r0] - ldr r0, _080498E0 @ =0x00010210 - ands r0, r1 - cmp r0, 0 - bne _0804991C - movs r0, 0x8 - ands r1, r0 - cmp r1, 0 - bne _0804991C - ldr r0, _080498E4 @ =gSprites - mov r9, r0 - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - add r0, r9 - mov r8, r0 - ldrh r0, [r0, 0x3A] - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _0804991C - ldr r1, _080498E8 @ =gBattlerPartyIndexes - lsls r0, r4, 1 - adds r5, r0, r1 - ldrh r0, [r5] - movs r7, 0x64 - muls r0, r7 - ldr r6, _080498EC @ =gEnemyParty - adds r0, r6 - adds r1, r4, 0 - bl CheckBattleTypeGhost - lsls r0, 24 - cmp r0, 0 - bne _0804991C - ldrh r0, [r5] - muls r0, r7 - adds r0, r6 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - bl GetSetPokedexFlag - lsls r0, 24 - cmp r0, 0 - beq _0804991C - mov r1, r8 - ldrh r0, [r1, 0x38] - lsls r0, 24 - lsrs r4, r0, 24 - mov r2, r10 - cmp r2, 0 - beq _080498F8 - movs r0, 0x46 - bl GetHealthboxElementGfxPtr - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - add r1, r9 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 17 - movs r2, 0x80 - lsls r2, 1 - adds r1, r2 - ldr r2, _080498F0 @ =0x06010000 - adds r1, r2 - ldr r2, _080498F4 @ =0x04000008 - bl CpuSet - b _0804991C - .align 2, 0 -_080498DC: .4byte gBattleTypeFlags -_080498E0: .4byte 0x00010210 -_080498E4: .4byte gSprites -_080498E8: .4byte gBattlerPartyIndexes -_080498EC: .4byte gEnemyParty -_080498F0: .4byte 0x06010000 -_080498F4: .4byte 0x04000008 -_080498F8: - mov r0, r10 - str r0, [sp] - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - add r0, r9 - ldrh r1, [r0, 0x4] - lsls r1, 22 - lsrs r1, 17 - movs r2, 0x80 - lsls r2, 1 - adds r1, r2 - ldr r0, _0804992C @ =0x06010000 - adds r1, r0 - ldr r2, _08049930 @ =0x05000008 - mov r0, sp - bl CpuSet -_0804991C: - 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 -_0804992C: .4byte 0x06010000 -_08049930: .4byte 0x05000008 - thumb_func_end sub_804981C - thumb_func_start UpdateStatusIconInHealthbox UpdateStatusIconInHealthbox: @ 8049934 push {r4-r7,lr} @@ -1173,7 +203,7 @@ _08049A7E: _08049AD4: mov r0, r9 movs r1, 0x1 - bl sub_804981C + bl TryAddPokeballIconToHealthbox b _08049BB6 .align 2, 0 _08049AE0: .4byte gSprites @@ -1270,7 +300,7 @@ _08049B62: _08049BAE: mov r0, r9 movs r1, 0 - bl sub_804981C + bl TryAddPokeballIconToHealthbox _08049BB6: pop {r3-r5} mov r8, r3 @@ -1676,7 +706,7 @@ _08049F06: _08049F0E: adds r0, r6, 0 mov r1, r8 - bl sub_80496C0 + bl UpdateNickInHealthbox _08049F16: cmp r7, 0x9 beq _08049F1E @@ -1753,7 +783,7 @@ _08049FA8: _08049FB0: adds r0, r6, 0 mov r1, r8 - bl sub_80496C0 + bl UpdateNickInHealthbox _08049FB8: cmp r7, 0x9 beq _08049FC0 diff --git a/include/battle_interface.h b/include/battle_interface.h index 162faa8cb..01f3c4b29 100644 --- a/include/battle_interface.h +++ b/include/battle_interface.h @@ -79,8 +79,8 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem s32 sub_8074AA0(u8 bank, u8 healthboxSpriteId, u8 whichBar, u8 arg3); u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale); u8 GetHPBarLevel(s16 hp, s16 maxhp); -void sub_80496C0(u8 spriteId, struct Pokemon *mon); -void sub_804981C(u8 spriteId, u8); +void UpdateNickInHealthbox(u8 spriteId, struct Pokemon *mon); +void TryAddPokeballIconToHealthbox(u8 spriteId, u8); s32 MoveBattleBar(u8 battler, u8 healthboxSpriteId, u8 whichBar, u8 arg3); #endif // GUARD_BATTLE_INTERFACE_H diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index d7bccb298..60cff27be 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -687,8 +687,8 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, u8 notTransform) gSprites[gBattlerSpriteIds[battlerAtk]].pos1.y = GetBattlerSpriteDefault_Y(battlerAtk); StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerAtk]], gBattleMonForms[battlerAtk]); SetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_NICKNAME, gSpeciesNames[targetSpecies]); - sub_80496C0(gHealthboxSpriteIds[battlerAtk], &gEnemyParty[gBattlerPartyIndexes[battlerAtk]]); - sub_804981C(gHealthboxSpriteIds[battlerAtk], 1); + UpdateNickInHealthbox(gHealthboxSpriteIds[battlerAtk], &gEnemyParty[gBattlerPartyIndexes[battlerAtk]]); + TryAddPokeballIconToHealthbox(gHealthboxSpriteIds[battlerAtk], 1); } else if (notTransform) { diff --git a/src/battle_interface.c b/src/battle_interface.c index 77ac1db80..489378a13 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -1,8 +1,11 @@ #include "global.h" #include "battle_anim.h" #include "battle_interface.h" +#include "battle_message.h" #include "decompress.h" +#include "gpu_regs.h" #include "graphics.h" +#include "pokedex.h" #include "pokemon_summary_screen.h" #include "sound.h" #include "string_util.h" @@ -15,6 +18,11 @@ void SpriteCB_HealthBoxOther(struct Sprite * sprite); void SpriteCB_HealthBar(struct Sprite * sprite); const u8 *GetHealthboxElementGfxPtr(u8 which); void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent); +void sub_8049388(u8 taskId); +void sub_80493E4(u8 taskId); +void sub_8049568(struct Sprite * sprite); +void sub_8049630(struct Sprite * sprite); +void sub_804948C(u8 taskId); void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite * sprite); void UpdateStatusIconInHealthbox(u8 spriteId); void SpriteCB_StatusSummaryBar(struct Sprite * sprite); @@ -183,8 +191,9 @@ const struct SubspriteTable sStatusSummaryBar_SubspriteTable[] = {NELEMS(gUnknown_82603D4), gUnknown_82603D4} }; -const struct SubspriteTable gUnknown_8260404 = -{NELEMS(gUnknown_82603E4), gUnknown_82603E4}; +const struct SubspriteTable gUnknown_8260404[] = { + {NELEMS(gUnknown_82603E4), gUnknown_82603E4} +}; const u16 gUnknown_26040C[] = INCBIN_U16("graphics/battle_interface/unk_826404C.4bpp"); @@ -1673,8 +1682,329 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, } #endif //NONMATCHING +void Task_HidePartyStatusSummary(u8 taskId) +{ + u8 ballIconSpriteIds[PARTY_SIZE]; + bool8 isBattleStart; + u8 summaryBarSpriteId; + u8 battlerId; + s32 i; + + isBattleStart = gTasks[taskId].tIsBattleStart; + summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId; + battlerId = gTasks[taskId].tBattler; + + for (i = 0; i < PARTY_SIZE; i++) + ballIconSpriteIds[i] = gTasks[taskId].tBallIconSpriteId(i); + + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); + + gTasks[taskId].tData15 = 16; + + for (i = 0; i < PARTY_SIZE; i++) + gSprites[ballIconSpriteIds[i]].oam.objMode = ST_OAM_OBJ_BLEND; + + gSprites[summaryBarSpriteId].oam.objMode = ST_OAM_OBJ_BLEND; + + if (isBattleStart) + { + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + { + gSprites[ballIconSpriteIds[5 - i]].data[1] = 7 * i; + gSprites[ballIconSpriteIds[5 - i]].data[3] = 0; + gSprites[ballIconSpriteIds[5 - i]].data[4] = 0; + gSprites[ballIconSpriteIds[5 - i]].callback = sub_8049630; + } + else + { + gSprites[ballIconSpriteIds[i]].data[1] = 7 * i; + gSprites[ballIconSpriteIds[i]].data[3] = 0; + gSprites[ballIconSpriteIds[i]].data[4] = 0; + gSprites[ballIconSpriteIds[i]].callback = sub_8049630; + } + } + gSprites[summaryBarSpriteId].data[0] /= 2; + gSprites[summaryBarSpriteId].data[1] = 0; + gSprites[summaryBarSpriteId].callback = sub_8049568; + SetSubspriteTables(&gSprites[summaryBarSpriteId], gUnknown_8260404); + gTasks[taskId].func = sub_8049388; + } + else + { + gTasks[taskId].func = sub_804948C; + } +} + +void sub_8049388(u8 taskId) +{ + if ((gTasks[taskId].data[11]++ % 2) == 0) + { + if (--gTasks[taskId].tData15 < 0) + return; + + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[15], 16 - gTasks[taskId].data[15])); + } + if (gTasks[taskId].tData15 == 0) + gTasks[taskId].func = sub_80493E4; +} + +void sub_80493E4(u8 taskId) +{ + u8 ballIconSpriteIds[PARTY_SIZE]; + s32 i; + + u8 battlerId = gTasks[taskId].tBattler; + if (--gTasks[taskId].tData15 == -1) + { + u8 summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId; + + for (i = 0; i < PARTY_SIZE; i++) + ballIconSpriteIds[i] = gTasks[taskId].tBallIconSpriteId(i); + + DestroySpriteAndFreeResources(&gSprites[summaryBarSpriteId]); + DestroySpriteAndFreeResources(&gSprites[ballIconSpriteIds[0]]); + + for (i = 1; i < PARTY_SIZE; i++) + DestroySprite(&gSprites[ballIconSpriteIds[i]]); + } + else if (gTasks[taskId].tData15 == -3) + { + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyTask(taskId); + } +} + +void sub_804948C(u8 taskId) +{ + u8 ballIconSpriteIds[PARTY_SIZE]; + s32 i; + u8 battlerId = gTasks[taskId].tBattler; + + if (--gTasks[taskId].tData15 >= 0) + { + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[15], 16 - gTasks[taskId].data[15])); + } + else if (gTasks[taskId].tData15 == -1) + { + u8 summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId; + + for (i = 0; i < PARTY_SIZE; i++) + ballIconSpriteIds[i] = gTasks[taskId].tBallIconSpriteId(i); + + DestroySpriteAndFreeResources(&gSprites[summaryBarSpriteId]); + DestroySpriteAndFreeResources(&gSprites[ballIconSpriteIds[0]]); + + for (i = 1; i < PARTY_SIZE; i++) + DestroySprite(&gSprites[ballIconSpriteIds[i]]); + } + else if (gTasks[taskId].tData15 == -3) + { + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyTask(taskId); + } +} + +#undef tBattler +#undef tSummaryBarSpriteId +#undef tBallIconSpriteId +#undef tIsBattleStart +#undef tData15 + +void SpriteCB_StatusSummaryBar(struct Sprite *sprite) +{ + if (sprite->pos2.x != 0) + sprite->pos2.x += sprite->data[0]; +} + +void sub_8049568(struct Sprite *sprite) +{ + sprite->data[1] += 32; + if (sprite->data[0] > 0) + sprite->pos2.x += sprite->data[1] >> 4; + else + sprite->pos2.x -= sprite->data[1] >> 4; + sprite->data[1] &= 0xF; +} + +void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite) +{ + u8 var1; + u16 var2; + s8 pan; + + if (sprite->data[1] > 0) + { + sprite->data[1]--; + return; + } + + var1 = sprite->data[2]; + var2 = sprite->data[3]; + var2 += 56; + sprite->data[3] = var2 & 0xFFF0; + + if (var1 != 0) + { + sprite->pos2.x += var2 >> 4; + if (sprite->pos2.x > 0) + sprite->pos2.x = 0; + } + else + { + sprite->pos2.x -= var2 >> 4; + if (sprite->pos2.x < 0) + sprite->pos2.x = 0; + } + + if (sprite->pos2.x == 0) + { + pan = SOUND_PAN_TARGET; + if (var1 != 0) + pan = SOUND_PAN_ATTACKER; + + if (sprite->data[7] != 0) + PlaySE2WithPanning(SE_TB_KARA, pan); + else + PlaySE1WithPanning(SE_TB_KON, pan); + + sprite->callback = SpriteCallbackDummy; + } +} + +void sub_8049630(struct Sprite *sprite) +{ + u8 var1; + u16 var2; + + if (sprite->data[1] > 0) + { + sprite->data[1]--; + return; + } + var1 = sprite->data[2]; + var2 = sprite->data[3]; + var2 += 56; + sprite->data[3] = var2 & 0xFFF0; + if (var1 != 0) + sprite->pos2.x += var2 >> 4; + else + sprite->pos2.x -= var2 >> 4; + if (sprite->pos2.x + sprite->pos1.x > 248 + || sprite->pos2.x + sprite->pos1.x < -8) + { + sprite->invisible = TRUE; + sprite->callback = SpriteCallbackDummy; + } +} + +void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite *sprite) +{ + u8 barSpriteId = sprite->data[0]; + + sprite->pos2.x = gSprites[barSpriteId].pos2.x; + sprite->pos2.y = gSprites[barSpriteId].pos2.y; +} + const u8 gUnknown_8260556[] = _("{HIGHLIGHT 02}"); +void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon) +{ + u8 nickname[POKEMON_NAME_LENGTH + 1]; + u8 *ptr; + u32 windowId, spriteTileNum; + u8 *windowTileData; + u16 species; + u8 gender; + + ptr = StringCopy(gDisplayedStringBattle, gUnknown_8260556); + GetMonData(mon, MON_DATA_NICKNAME, nickname); + StringGetEnd10(nickname); + ptr = StringCopy(ptr, nickname); + *ptr++ = EXT_CTRL_CODE_BEGIN; + *ptr++ = EXT_CTRL_CODE_COLOR; + + gender = GetMonGender(mon); + species = GetMonData(mon, MON_DATA_SPECIES); + + if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && StringCompare(nickname, gSpeciesNames[species]) == 0) + gender = 100; + + if (CheckBattleTypeGhost(mon, gSprites[healthboxSpriteId].hMain_Battler)) + gender = 100; + + // AddTextPrinterAndCreateWindowOnHealthbox's arguments are the same in all 3 cases. + // It's possible they may have been different in early development phases. + switch (gender) + { + default: + *ptr++ = TEXT_DYNAMIC_COLOR_2; + *ptr++ = EOS; + windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gDisplayedStringBattle, 0, 3, &windowId); + break; + case MON_MALE: + *ptr++ = TEXT_DYNAMIC_COLOR_2; + *ptr++ = CHAR_MALE; + *ptr++ = EOS; + windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gDisplayedStringBattle, 0, 3, &windowId); + break; + case MON_FEMALE: + *ptr++ = TEXT_DYNAMIC_COLOR_1; + *ptr++ = CHAR_FEMALE; + *ptr++ = EOS; + windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gDisplayedStringBattle, 0, 3, &windowId); + break; + } + + spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP; + + if (GetBattlerSide(gSprites[healthboxSpriteId].data[6]) == B_SIDE_PLAYER) + { + TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x40 + spriteTileNum), windowTileData, 6); + ptr = (void*)(OBJ_VRAM0); + if (!IsDoubleBattle()) + ptr += spriteTileNum + 0x800; + else + ptr += spriteTileNum + 0x400; + TextIntoHealthboxObject(ptr, windowTileData + 0xC0, 1); + } + else + { + TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x20 + spriteTileNum), windowTileData, 7); + } + + RemoveWindowOnHealthbox(windowId); +} +void TryAddPokeballIconToHealthbox(u8 healthboxSpriteId, bool8 noStatus) +{ + u8 battlerId, healthBarSpriteId; + + if (gBattleTypeFlags & (BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_OLD_MAN_TUTORIAL | BATTLE_TYPE_POKEDUDE)) + return; + + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + return; + + battlerId = gSprites[healthboxSpriteId].hMain_Battler; + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + return; + if (CheckBattleTypeGhost(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId)) + return; + if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES)), FLAG_GET_CAUGHT)) + return; + + healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId; + + if (noStatus) + CpuCopy32(GetHealthboxElementGfxPtr(70), (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 32); + else + CpuFill32(0, (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 32); +} + const u16 gUnknown_826055A[] = { RGB(24, 12, 24), RGB(23, 23, 3), -- cgit v1.2.3 From ae41a2742ced950f37cbe1b21cdf394483ebd05b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 12 Jan 2020 12:13:03 -0500 Subject: Finish battle_interface.c decomp --- asm/battle_interface.s | 1827 ---------------------------------------------- include/battle_message.h | 3 + ld_script.txt | 1 - src/battle_interface.c | 807 +++++++++++++++++++- src/battle_message.c | 2 +- 5 files changed, 797 insertions(+), 1843 deletions(-) delete mode 100644 asm/battle_interface.s diff --git a/asm/battle_interface.s b/asm/battle_interface.s deleted file mode 100644 index e4c45c51c..000000000 --- a/asm/battle_interface.s +++ /dev/null @@ -1,1827 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start UpdateStatusIconInHealthbox -UpdateStatusIconInHealthbox: @ 8049934 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - ldr r0, _08049998 @ =gSprites - mov r2, r9 - lsls r1, r2, 4 - add r1, r9 - lsls r1, 2 - adds r1, r0 - ldrh r0, [r1, 0x3A] - lsls r0, 24 - lsrs r7, r0, 24 - ldrh r0, [r1, 0x38] - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - adds r0, r7, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080499A4 - ldr r1, _0804999C @ =gBattlerPartyIndexes - lsls r0, r7, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080499A0 @ =gPlayerParty - adds r0, r1 - movs r1, 0x37 - bl GetMonData - adds r4, r0, 0 - bl IsDoubleBattle - lsls r0, 24 - movs r3, 0x12 - mov r8, r3 - cmp r0, 0 - bne _080499C0 - movs r0, 0x1A - mov r8, r0 - b _080499C0 - .align 2, 0 -_08049998: .4byte gSprites -_0804999C: .4byte gBattlerPartyIndexes -_080499A0: .4byte gPlayerParty -_080499A4: - ldr r1, _080499E0 @ =gBattlerPartyIndexes - lsls r0, r7, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080499E4 @ =gEnemyParty - adds r0, r1 - movs r1, 0x37 - bl GetMonData - adds r4, r0, 0 - movs r1, 0x11 - mov r8, r1 -_080499C0: - movs r0, 0x7 - ands r0, r4 - cmp r0, 0 - beq _080499E8 - movs r0, 0x1B - adds r1, r7, 0 - bl GetStatusIconForBankId - lsls r0, 24 - lsrs r0, 24 - bl GetHealthboxElementGfxPtr - adds r6, r0, 0 - movs r0, 0x2 - b _08049AF4 - .align 2, 0 -_080499E0: .4byte gBattlerPartyIndexes -_080499E4: .4byte gEnemyParty -_080499E8: - movs r0, 0x88 - ands r0, r4 - cmp r0, 0 - beq _08049A06 - movs r0, 0x15 - adds r1, r7, 0 - bl GetStatusIconForBankId - lsls r0, 24 - lsrs r0, 24 - bl GetHealthboxElementGfxPtr - adds r6, r0, 0 - movs r0, 0 - b _08049AF4 -_08049A06: - movs r0, 0x10 - ands r0, r4 - cmp r0, 0 - beq _08049A24 - movs r0, 0x21 - adds r1, r7, 0 - bl GetStatusIconForBankId - lsls r0, 24 - lsrs r0, 24 - bl GetHealthboxElementGfxPtr - adds r6, r0, 0 - movs r0, 0x4 - b _08049AF4 -_08049A24: - movs r0, 0x20 - ands r0, r4 - cmp r0, 0 - beq _08049A42 - movs r0, 0x1E - adds r1, r7, 0 - bl GetStatusIconForBankId - lsls r0, 24 - lsrs r0, 24 - bl GetHealthboxElementGfxPtr - adds r6, r0, 0 - movs r0, 0x3 - b _08049AF4 -_08049A42: - movs r0, 0x40 - ands r0, r4 - cmp r0, 0 - beq _08049A60 - movs r0, 0x18 - adds r1, r7, 0 - bl GetStatusIconForBankId - lsls r0, 24 - lsrs r0, 24 - bl GetHealthboxElementGfxPtr - adds r6, r0, 0 - movs r0, 0x1 - b _08049AF4 -_08049A60: - movs r0, 0x27 - bl GetHealthboxElementGfxPtr - adds r6, r0, 0 - movs r4, 0 - mov r2, r9 - lsls r0, r2, 4 - mov r3, r8 - lsls r3, 16 - mov r8, r3 - lsls r7, 2 - ldr r1, _08049AE0 @ =gSprites - add r0, r9 - lsls r0, 2 - adds r5, r0, r1 -_08049A7E: - ldrh r1, [r5, 0x4] - lsls r1, 22 - lsrs r1, 22 - mov r2, r8 - asrs r0, r2, 16 - adds r1, r0 - adds r1, r4 - lsls r1, 5 - ldr r3, _08049AE4 @ =0x06010000 - adds r1, r3 - adds r0, r6, 0 - ldr r2, _08049AE8 @ =0x04000008 - bl CpuSet - adds r4, 0x1 - cmp r4, 0x2 - ble _08049A7E - ldr r0, _08049AEC @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r0, [r0] - adds r0, r7, r0 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08049AD4 - movs r0, 0x1 - bl GetHealthboxElementGfxPtr - ldr r2, _08049AE0 @ =gSprites - mov r3, r10 - lsls r1, r3, 4 - add r1, r10 - lsls r1, 2 - adds r1, r2 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 17 - ldr r2, _08049AE4 @ =0x06010000 - adds r1, r2 - ldr r2, _08049AF0 @ =0x04000010 - bl CpuSet -_08049AD4: - mov r0, r9 - movs r1, 0x1 - bl TryAddPokeballIconToHealthbox - b _08049BB6 - .align 2, 0 -_08049AE0: .4byte gSprites -_08049AE4: .4byte 0x06010000 -_08049AE8: .4byte 0x04000008 -_08049AEC: .4byte gBattleSpritesDataPtr -_08049AF0: .4byte 0x04000010 -_08049AF4: - mov r1, r9 - lsls r5, r1, 4 - add r5, r9 - lsls r5, 2 - ldr r2, _08049BC4 @ =gSprites - adds r5, r2 - ldrb r4, [r5, 0x5] - lsrs r4, 4 - lsls r4, 4 - adds r4, 0xC - adds r4, r7 - ldr r1, _08049BC8 @ =gUnknown_826055A - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - movs r3, 0x80 - lsls r3, 1 - adds r1, r4, r3 - movs r2, 0x2 - bl FillPalette - lsls r4, 1 - ldr r0, _08049BCC @ =gPlttBufferUnfaded + 0x200 - adds r0, r4, r0 - ldr r1, _08049BD0 @ =0x05000200 - adds r4, r1 - adds r1, r4, 0 - movs r2, 0x1 - bl CpuSet - ldrh r1, [r5, 0x4] - lsls r1, 22 - lsrs r1, 22 - add r1, r8 - lsls r1, 5 - ldr r2, _08049BD4 @ =0x06010000 - mov r8, r2 - add r1, r8 - ldr r2, _08049BD8 @ =0x04000018 - adds r0, r6, 0 - bl CpuSet - bl IsDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08049B62 - adds r0, r7, 0 - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08049BAE -_08049B62: - ldr r0, _08049BDC @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0] - lsls r0, r7, 2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08049BAE - movs r0, 0 - bl GetHealthboxElementGfxPtr - mov r3, r10 - lsls r4, r3, 4 - add r4, r10 - lsls r4, 2 - ldr r1, _08049BC4 @ =gSprites - adds r4, r1 - ldrh r1, [r4, 0x4] - lsls r1, 22 - lsrs r1, 17 - add r1, r8 - ldr r5, _08049BE0 @ =0x04000008 - adds r2, r5, 0 - bl CpuSet - movs r0, 0x41 - bl GetHealthboxElementGfxPtr - ldrh r1, [r4, 0x4] - lsls r1, 22 - lsrs r1, 17 - adds r1, 0x20 - add r1, r8 - adds r2, r5, 0 - bl CpuSet -_08049BAE: - mov r0, r9 - movs r1, 0 - bl TryAddPokeballIconToHealthbox -_08049BB6: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08049BC4: .4byte gSprites -_08049BC8: .4byte gUnknown_826055A -_08049BCC: .4byte gPlttBufferUnfaded + 0x200 -_08049BD0: .4byte 0x05000200 -_08049BD4: .4byte 0x06010000 -_08049BD8: .4byte 0x04000018 -_08049BDC: .4byte gBattleSpritesDataPtr -_08049BE0: .4byte 0x04000008 - thumb_func_end UpdateStatusIconInHealthbox - - thumb_func_start GetStatusIconForBankId -GetStatusIconForBankId: @ 8049BE4 - push {lr} - lsls r0, 24 - lsls r1, 24 - lsrs r3, r1, 24 - lsrs r2, r0, 24 - adds r0, r2, 0 - subs r0, 0x15 - cmp r0, 0xC - bhi _08049CA4 - lsls r0, 2 - ldr r1, _08049C00 @ =_08049C04 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08049C00: .4byte _08049C04 - .align 2, 0 -_08049C04: - .4byte _08049C38 - .4byte _08049CA4 - .4byte _08049CA4 - .4byte _08049C4E - .4byte _08049CA4 - .4byte _08049CA4 - .4byte _08049C64 - .4byte _08049CA4 - .4byte _08049CA4 - .4byte _08049C7A - .4byte _08049CA4 - .4byte _08049CA4 - .4byte _08049C90 -_08049C38: - movs r2, 0x15 - cmp r3, 0 - beq _08049CA4 - movs r2, 0x47 - cmp r3, 0x1 - beq _08049CA4 - movs r2, 0x65 - cmp r3, 0x2 - bne _08049CA4 - movs r2, 0x56 - b _08049CA4 -_08049C4E: - movs r2, 0x18 - cmp r3, 0 - beq _08049CA4 - movs r2, 0x4A - cmp r3, 0x1 - beq _08049CA4 - movs r2, 0x68 - cmp r3, 0x2 - bne _08049CA4 - movs r2, 0x59 - b _08049CA4 -_08049C64: - movs r2, 0x1B - cmp r3, 0 - beq _08049CA4 - movs r2, 0x4D - cmp r3, 0x1 - beq _08049CA4 - movs r2, 0x6B - cmp r3, 0x2 - bne _08049CA4 - movs r2, 0x5C - b _08049CA4 -_08049C7A: - movs r2, 0x1E - cmp r3, 0 - beq _08049CA4 - movs r2, 0x50 - cmp r3, 0x1 - beq _08049CA4 - movs r2, 0x6E - cmp r3, 0x2 - bne _08049CA4 - movs r2, 0x5F - b _08049CA4 -_08049C90: - movs r2, 0x21 - cmp r3, 0 - beq _08049CA4 - movs r2, 0x53 - cmp r3, 0x1 - beq _08049CA4 - movs r2, 0x71 - cmp r3, 0x2 - bne _08049CA4 - movs r2, 0x62 -_08049CA4: - adds r0, r2, 0 - pop {r1} - bx r1 - thumb_func_end GetStatusIconForBankId - - thumb_func_start UpdateSafariBallsTextOnHealthbox -UpdateSafariBallsTextOnHealthbox: @ 8049CAC - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08049D00 @ =gUnknown_83FE80C - movs r1, 0 - movs r2, 0x3 - mov r3, sp - bl AddTextPrinterAndCreateWindowOnHealthbox - adds r5, r0, 0 - ldr r1, _08049D04 @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r0, r1 - ldrh r4, [r0, 0x4] - lsls r4, 22 - lsrs r4, 17 - ldr r1, _08049D08 @ =0x06010040 - adds r0, r4, r1 - adds r1, r5, 0 - movs r2, 0x6 - bl TextIntoHealthboxObject - ldr r0, _08049D0C @ =0x06010800 - adds r4, r0 - adds r5, 0xC0 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x2 - bl TextIntoHealthboxObject - ldr r0, [sp] - bl RemoveWindowOnHealthbox - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08049D00: .4byte gUnknown_83FE80C -_08049D04: .4byte gSprites -_08049D08: .4byte 0x06010040 -_08049D0C: .4byte 0x06010800 - thumb_func_end UpdateSafariBallsTextOnHealthbox - - thumb_func_start UpdateLeftNoOfBallsTextOnHealthbox -UpdateLeftNoOfBallsTextOnHealthbox: @ 8049D10 - push {r4,r5,lr} - sub sp, 0x14 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _08049D84 @ =gText_HighlightRed_Left - mov r0, sp - bl StringCopy - ldr r1, _08049D88 @ =gNumSafariBalls - ldrb r1, [r1] - movs r2, 0 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - movs r0, 0 - mov r1, sp - movs r2, 0 - bl GetStringWidth - movs r1, 0x2F - subs r1, r0 - add r3, sp, 0x10 - mov r0, sp - movs r2, 0x3 - bl AddTextPrinterAndCreateWindowOnHealthbox - adds r5, r0, 0 - ldr r1, _08049D8C @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r0, r1 - ldrh r4, [r0, 0x4] - lsls r4, 22 - lsrs r4, 17 - ldr r1, _08049D90 @ =0x060102c0 - adds r0, r4, r1 - adds r1, r5, 0 - movs r2, 0x2 - bl sub_804A734 - ldr r0, _08049D94 @ =0x06010a00 - adds r4, r0 - adds r5, 0x40 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x4 - bl sub_804A734 - ldr r0, [sp, 0x10] - bl RemoveWindowOnHealthbox - add sp, 0x14 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08049D84: .4byte gText_HighlightRed_Left -_08049D88: .4byte gNumSafariBalls -_08049D8C: .4byte gSprites -_08049D90: .4byte 0x060102c0 -_08049D94: .4byte 0x06010a00 - thumb_func_end UpdateLeftNoOfBallsTextOnHealthbox - - thumb_func_start UpdateHealthboxAttribute -UpdateHealthboxAttribute: @ 8049D98 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - mov r8, r1 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r2, 24 - lsrs r7, r2, 24 - ldr r1, _08049F44 @ =gSprites - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0, 0x3A] - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - cmp r7, 0 - bne _08049DD4 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _08049DD4 - mov r0, r9 - bl GetBattlerSide -_08049DD4: - ldr r1, _08049F44 @ =gSprites - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08049DF0 - b _08049F50 -_08049DF0: - cmp r7, 0x3 - beq _08049DF8 - cmp r7, 0 - bne _08049E0C -_08049DF8: - mov r0, r8 - movs r1, 0x38 - bl GetMonData - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r6, 0 - bl UpdateLvlInHealthbox -_08049E0C: - cmp r7, 0x1 - bhi _08049E26 - mov r0, r8 - movs r1, 0x39 - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r6, 0 - movs r2, 0 - bl UpdateHpTextInHealthbox -_08049E26: - cmp r7, 0x2 - beq _08049E2E - cmp r7, 0 - bne _08049E44 -_08049E2E: - mov r0, r8 - movs r1, 0x3A - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r6, 0 - movs r2, 0x1 - bl UpdateHpTextInHealthbox -_08049E44: - cmp r7, 0x5 - beq _08049E4C - cmp r7, 0 - bne _08049E80 -_08049E4C: - movs r0, 0 - bl LoadBattleBarGfx - mov r0, r8 - movs r1, 0x3A - bl GetMonData - adds r4, r0, 0 - mov r0, r8 - movs r1, 0x39 - bl GetMonData - adds r3, r0, 0 - movs r0, 0 - str r0, [sp] - mov r0, r9 - adds r1, r6, 0 - adds r2, r4, 0 - bl SetBattleBarStruct - mov r0, r9 - adds r1, r6, 0 - movs r2, 0 - movs r3, 0 - bl MoveBattleBar -_08049E80: - bl IsDoubleBattle - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - cmp r0, 0 - bne _08049F06 - cmp r7, 0x6 - beq _08049E96 - cmp r7, 0 - bne _08049F06 -_08049E96: - movs r0, 0x3 - bl LoadBattleBarGfx - mov r0, r8 - movs r1, 0xB - bl GetMonData - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - mov r0, r8 - movs r1, 0x38 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - mov r0, r8 - movs r1, 0x19 - bl GetMonData - adds r3, r0, 0 - ldr r0, _08049F48 @ =gExperienceTables - mov r12, r0 - lsls r1, r4, 2 - ldr r2, _08049F4C @ =gBaseStats - lsls r0, r5, 3 - subs r0, r5 - lsls r0, 2 - adds r0, r2 - ldrb r2, [r0, 0x13] - movs r0, 0xCA - lsls r0, 1 - muls r0, r2 - adds r1, r0 - add r1, r12 - ldr r1, [r1] - subs r3, r1 - adds r4, 0x1 - lsls r4, 2 - adds r4, r0 - add r4, r12 - ldr r2, [r4] - subs r2, r1 - mov r0, r10 - str r0, [sp] - mov r0, r9 - adds r1, r6, 0 - bl SetBattleBarStruct - mov r0, r9 - adds r1, r6, 0 - movs r2, 0x1 - movs r3, 0 - bl MoveBattleBar -_08049F06: - cmp r7, 0x4 - beq _08049F0E - cmp r7, 0 - bne _08049F16 -_08049F0E: - adds r0, r6, 0 - mov r1, r8 - bl UpdateNickInHealthbox -_08049F16: - cmp r7, 0x9 - beq _08049F1E - cmp r7, 0 - bne _08049F24 -_08049F1E: - adds r0, r6, 0 - bl UpdateStatusIconInHealthbox -_08049F24: - cmp r7, 0xA - bne _08049F2E - adds r0, r6, 0 - bl UpdateSafariBallsTextOnHealthbox -_08049F2E: - adds r0, r7, 0 - subs r0, 0xA - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08049FC6 - adds r0, r6, 0 - bl UpdateLeftNoOfBallsTextOnHealthbox - b _08049FC6 - .align 2, 0 -_08049F44: .4byte gSprites -_08049F48: .4byte gExperienceTables -_08049F4C: .4byte gBaseStats -_08049F50: - cmp r7, 0x3 - beq _08049F58 - cmp r7, 0 - bne _08049F6C -_08049F58: - mov r0, r8 - movs r1, 0x38 - bl GetMonData - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r6, 0 - bl UpdateLvlInHealthbox -_08049F6C: - cmp r7, 0x5 - beq _08049F74 - cmp r7, 0 - bne _08049FA8 -_08049F74: - movs r0, 0 - bl LoadBattleBarGfx - mov r0, r8 - movs r1, 0x3A - bl GetMonData - adds r4, r0, 0 - mov r0, r8 - movs r1, 0x39 - bl GetMonData - adds r3, r0, 0 - movs r0, 0 - str r0, [sp] - mov r0, r9 - adds r1, r6, 0 - adds r2, r4, 0 - bl SetBattleBarStruct - mov r0, r9 - adds r1, r6, 0 - movs r2, 0 - movs r3, 0 - bl MoveBattleBar -_08049FA8: - cmp r7, 0x4 - beq _08049FB0 - cmp r7, 0 - bne _08049FB8 -_08049FB0: - adds r0, r6, 0 - mov r1, r8 - bl UpdateNickInHealthbox -_08049FB8: - cmp r7, 0x9 - beq _08049FC0 - cmp r7, 0 - bne _08049FC6 -_08049FC0: - adds r0, r6, 0 - bl UpdateStatusIconInHealthbox -_08049FC6: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end UpdateHealthboxAttribute - - thumb_func_start MoveBattleBar -MoveBattleBar: @ 8049FD8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r2, 24 - lsrs r2, 24 - mov r9, r2 - cmp r2, 0 - bne _0804A024 - ldr r0, _0804A020 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r0, [r0, 0xC] - mov r1, r8 - lsls r5, r1, 2 - adds r3, r5, r1 - lsls r3, 2 - adds r3, r0 - ldr r0, [r3, 0x4] - ldr r1, [r3, 0x8] - ldr r2, [r3, 0xC] - adds r3, 0x10 - movs r4, 0x6 - str r4, [sp] - movs r4, 0x1 - str r4, [sp, 0x4] - bl sub_804A2F0 - adds r4, r0, 0 - adds r7, r5, 0 - b _0804A080 - .align 2, 0 -_0804A020: .4byte gBattleSpritesDataPtr -_0804A024: - ldr r2, _0804A0D0 @ =gBattleSpritesDataPtr - mov r10, r2 - ldr r0, [r2] - ldr r2, [r0, 0xC] - mov r0, r8 - lsls r4, r0, 2 - adds r0, r4, r0 - lsls r6, r0, 2 - adds r2, r6, r2 - ldr r0, [r2, 0x8] - ldr r1, [r2, 0xC] - ldr r2, [r2, 0x4] - movs r3, 0x8 - bl GetScaledExpFraction - lsls r0, 24 - lsrs r5, r0, 24 - adds r7, r4, 0 - cmp r5, 0 - bne _0804A04E - movs r5, 0x1 -_0804A04E: - mov r1, r10 - ldr r0, [r1] - ldr r0, [r0, 0xC] - adds r4, r6, r0 - ldr r6, [r4, 0xC] - adds r0, r6, 0 - adds r1, r5, 0 - bl __divsi3 - cmp r0, 0 - bge _0804A066 - negs r0, r0 -_0804A066: - lsls r0, 16 - lsrs r5, r0, 16 - ldr r0, [r4, 0x4] - ldr r1, [r4, 0x8] - adds r3, r4, 0 - adds r3, 0x10 - movs r2, 0x8 - str r2, [sp] - str r5, [sp, 0x4] - adds r2, r6, 0 - bl sub_804A2F0 - adds r4, r0, 0 -_0804A080: - mov r2, r9 - cmp r2, 0x1 - beq _0804A09C - cmp r2, 0 - bne _0804A0A4 - ldr r0, _0804A0D0 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r0, [r0] - adds r0, r7, r0 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _0804A0A4 -_0804A09C: - mov r0, r8 - mov r1, r9 - bl sub_804A0D4 -_0804A0A4: - movs r0, 0x1 - negs r0, r0 - cmp r4, r0 - bne _0804A0BE - ldr r0, _0804A0D0 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0, 0xC] - mov r2, r8 - adds r0, r7, r2 - lsls r0, 2 - adds r0, r1 - movs r1, 0 - str r1, [r0, 0x10] -_0804A0BE: - adds r0, r4, 0 - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0804A0D0: .4byte gBattleSpritesDataPtr - thumb_func_end MoveBattleBar - - thumb_func_start sub_804A0D4 -sub_804A0D4: @ 804A0D4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x10 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0 - beq _0804A0F0 - cmp r1, 0x1 - beq _0804A1D8 - b _0804A2D6 -_0804A0F0: - ldr r0, _0804A184 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r0, [r0, 0xC] - lsls r5, r6, 2 - adds r3, r5, r6 - lsls r3, 2 - adds r3, r0 - ldr r0, [r3, 0x4] - ldr r1, [r3, 0x8] - ldr r2, [r3, 0xC] - adds r3, 0x10 - add r4, sp, 0x8 - str r4, [sp] - movs r4, 0x6 - str r4, [sp, 0x4] - bl sub_804A3C4 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x3 - mov r9, r1 - adds r7, r5, 0 - cmp r0, 0x18 - bhi _0804A12C - movs r2, 0x38 - mov r9, r2 - cmp r0, 0x9 - bls _0804A12C - movs r4, 0x2F - mov r9, r4 -_0804A12C: - movs r5, 0 - ldr r0, _0804A188 @ =gSprites - mov r8, r0 -_0804A132: - ldr r0, _0804A184 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0, 0xC] - adds r0, r7, r6 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r8 - ldrh r0, [r0, 0x38] - lsls r0, 24 - lsrs r4, r0, 24 - cmp r5, 0x1 - bhi _0804A194 - mov r0, r9 - bl GetHealthboxElementGfxPtr - mov r1, sp - adds r1, r5 - adds r1, 0x8 - ldrb r1, [r1] - lsls r1, 5 - adds r0, r1 - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - add r1, r8 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r2, r5, 0x2 - adds r1, r2 - lsls r1, 5 - ldr r2, _0804A18C @ =0x06010000 - adds r1, r2 - ldr r2, _0804A190 @ =0x04000008 - bl CpuSet - b _0804A1C2 - .align 2, 0 -_0804A184: .4byte gBattleSpritesDataPtr -_0804A188: .4byte gSprites -_0804A18C: .4byte 0x06010000 -_0804A190: .4byte 0x04000008 -_0804A194: - mov r0, r9 - bl GetHealthboxElementGfxPtr - mov r1, sp - adds r1, r5 - adds r1, 0x8 - ldrb r1, [r1] - lsls r1, 5 - adds r0, r1 - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - add r1, r8 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r1, r5, r1 - lsls r1, 5 - ldr r4, _0804A1D0 @ =0x06010040 - adds r1, r4 - ldr r2, _0804A1D4 @ =0x04000008 - bl CpuSet -_0804A1C2: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x5 - bls _0804A132 - b _0804A2D6 - .align 2, 0 -_0804A1D0: .4byte 0x06010040 -_0804A1D4: .4byte 0x04000008 -_0804A1D8: - ldr r0, _0804A27C @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r0, [r0, 0xC] - lsls r5, r6, 2 - adds r3, r5, r6 - lsls r3, 2 - adds r3, r0 - ldr r0, [r3, 0x4] - ldr r1, [r3, 0x8] - ldr r2, [r3, 0xC] - adds r3, 0x10 - add r4, sp, 0x8 - str r4, [sp] - movs r4, 0x8 - str r4, [sp, 0x4] - bl sub_804A3C4 - ldr r1, _0804A280 @ =gBattlerPartyIndexes - lsls r0, r6, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0804A284 @ =gPlayerParty - adds r0, r1 - movs r1, 0x38 - bl GetMonData - lsls r0, 24 - lsrs r0, 24 - adds r7, r5, 0 - cmp r0, 0x64 - bne _0804A230 - movs r5, 0 - movs r1, 0 -_0804A21E: - mov r0, sp - adds r0, r5 - adds r0, 0x8 - strb r1, [r0] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x7 - bls _0804A21E -_0804A230: - movs r5, 0 - ldr r0, _0804A288 @ =gSprites - mov r8, r0 - adds r0, r7, r6 - lsls r4, r0, 2 -_0804A23A: - cmp r5, 0x3 - bhi _0804A294 - movs r0, 0xC - bl GetHealthboxElementGfxPtr - mov r1, sp - adds r1, r5 - adds r1, 0x8 - ldrb r1, [r1] - lsls r1, 5 - adds r0, r1 - ldr r1, _0804A27C @ =gBattleSpritesDataPtr - ldr r1, [r1] - ldr r1, [r1, 0xC] - adds r1, r4, r1 - ldrb r2, [r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - add r1, r8 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r2, r5, 0 - adds r2, 0x24 - adds r1, r2 - lsls r1, 5 - ldr r2, _0804A28C @ =0x06010000 - adds r1, r2 - ldr r2, _0804A290 @ =0x04000008 - bl CpuSet - b _0804A2CC - .align 2, 0 -_0804A27C: .4byte gBattleSpritesDataPtr -_0804A280: .4byte gBattlerPartyIndexes -_0804A284: .4byte gPlayerParty -_0804A288: .4byte gSprites -_0804A28C: .4byte 0x06010000 -_0804A290: .4byte 0x04000008 -_0804A294: - movs r0, 0xC - bl GetHealthboxElementGfxPtr - mov r1, sp - adds r1, r5 - adds r1, 0x8 - ldrb r1, [r1] - lsls r1, 5 - adds r0, r1 - ldr r1, _0804A2E4 @ =gBattleSpritesDataPtr - ldr r1, [r1] - ldr r1, [r1, 0xC] - adds r1, r4, r1 - ldrb r2, [r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - add r1, r8 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r1, r5, r1 - lsls r1, 5 - ldr r2, _0804A2E8 @ =0x06010b80 - adds r1, r2 - ldr r2, _0804A2EC @ =0x04000008 - bl CpuSet -_0804A2CC: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x7 - bls _0804A23A -_0804A2D6: - add sp, 0x10 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804A2E4: .4byte gBattleSpritesDataPtr -_0804A2E8: .4byte 0x06010b80 -_0804A2EC: .4byte 0x04000008 - thumb_func_end sub_804A0D4 - - thumb_func_start sub_804A2F0 -sub_804A2F0: @ 804A2F0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r7, r0, 0 - adds r4, r1, 0 - mov r8, r2 - adds r5, r3, 0 - ldr r1, [sp, 0x18] - ldr r0, [sp, 0x1C] - lsls r0, 16 - lsrs r3, r0, 16 - lsls r1, 27 - lsrs r2, r1, 24 - ldr r1, [r5] - ldr r0, _0804A31C @ =0xffff8000 - cmp r1, r0 - bne _0804A322 - cmp r7, r2 - bge _0804A320 - lsls r0, r4, 8 - str r0, [r5] - b _0804A322 - .align 2, 0 -_0804A31C: .4byte 0xffff8000 -_0804A320: - str r4, [r5] -_0804A322: - mov r0, r8 - subs r4, r0 - cmp r4, 0 - bge _0804A32E - movs r4, 0 - b _0804A334 -_0804A32E: - cmp r4, r7 - ble _0804A334 - adds r4, r7, 0 -_0804A334: - cmp r7, r2 - bge _0804A350 - ldr r0, [r5] - asrs r1, r0, 8 - adds r6, r0, 0 - cmp r4, r1 - bne _0804A35C - movs r0, 0xFF - ands r0, r6 - cmp r0, 0 - bne _0804A35C - movs r0, 0x1 - negs r0, r0 - b _0804A3B8 -_0804A350: - ldr r6, [r5] - cmp r4, r6 - bne _0804A35C - movs r0, 0x1 - negs r0, r0 - b _0804A3B8 -_0804A35C: - cmp r7, r2 - bge _0804A396 - lsls r0, r7, 8 - adds r1, r2, 0 - bl __divsi3 - mov r1, r8 - cmp r1, 0 - bge _0804A37A - adds r0, r6, r0 - str r0, [r5] - asrs r2, r0, 8 - cmp r2, r4 - blt _0804A3B6 - b _0804A38E -_0804A37A: - subs r0, r6, r0 - str r0, [r5] - asrs r2, r0, 8 - movs r1, 0xFF - ands r0, r1 - cmp r0, 0 - ble _0804A38A - adds r2, 0x1 -_0804A38A: - cmp r2, r4 - bgt _0804A3B6 -_0804A38E: - lsls r0, r4, 8 - str r0, [r5] - adds r2, r4, 0 - b _0804A3B6 -_0804A396: - mov r0, r8 - cmp r0, 0 - bge _0804A3A8 - ldr r0, [r5] - adds r0, r3 - str r0, [r5] - cmp r0, r4 - ble _0804A3B4 - b _0804A3B2 -_0804A3A8: - ldr r0, [r5] - subs r0, r3 - str r0, [r5] - cmp r0, r4 - bge _0804A3B4 -_0804A3B2: - str r4, [r5] -_0804A3B4: - ldr r2, [r5] -_0804A3B6: - adds r0, r2, 0 -_0804A3B8: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_804A2F0 - - thumb_func_start sub_804A3C4 -sub_804A3C4: @ 804A3C4 - push {r4-r7,lr} - adds r4, r0, 0 - mov r12, r3 - ldr r7, [sp, 0x14] - ldr r0, [sp, 0x18] - lsls r0, 24 - lsrs r6, r0, 24 - subs r5, r1, r2 - cmp r5, 0 - bge _0804A3DC - movs r5, 0 - b _0804A3E2 -_0804A3DC: - cmp r5, r4 - ble _0804A3E2 - adds r5, r4, 0 -_0804A3E2: - lsls r0, r6, 27 - lsrs r3, r0, 24 - movs r1, 0 - cmp r1, r6 - bcs _0804A3FC - movs r2, 0 -_0804A3EE: - adds r0, r7, r1 - strb r2, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, r6 - bcc _0804A3EE -_0804A3FC: - cmp r4, r3 - bge _0804A410 - mov r1, r12 - ldr r0, [r1] - muls r0, r3 - adds r1, r4, 0 - bl __divsi3 - asrs r0, 8 - b _0804A41C -_0804A410: - mov r1, r12 - ldr r0, [r1] - muls r0, r3 - adds r1, r4, 0 - bl __divsi3 -_0804A41C: - lsls r0, 24 - lsrs r2, r0, 24 - adds r3, r2, 0 - cmp r3, 0 - bne _0804A432 - cmp r5, 0 - ble _0804A432 - movs r0, 0x1 - strb r0, [r7] - movs r3, 0x1 - b _0804A456 -_0804A432: - movs r1, 0 - movs r4, 0x8 -_0804A436: - cmp r1, r6 - bcs _0804A456 - cmp r2, 0x7 - bls _0804A452 - adds r0, r7, r1 - strb r4, [r0] - adds r0, r2, 0 - subs r0, 0x8 - lsls r0, 24 - lsrs r2, r0, 24 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - b _0804A436 -_0804A452: - adds r0, r7, r1 - strb r2, [r0] -_0804A456: - adds r0, r3, 0 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_804A3C4 - - thumb_func_start sub_804A460 -sub_804A460: @ 804A460 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - sub sp, 0x8 - mov r9, r0 - mov r10, r1 - adds r6, r2, 0 - mov r8, r3 - ldr r5, [sp, 0x24] - lsls r6, 24 - lsrs r6, 24 - mov r0, r8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r5, 24 - lsrs r5, 24 - mov r1, r9 - ldr r0, [r1] - ldr r1, [r1, 0x4] - mov r3, r9 - ldr r2, [r3, 0x8] - movs r3, 0x6 - str r3, [sp] - movs r3, 0x1 - str r3, [sp, 0x4] - mov r3, r10 - bl sub_804A2F0 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - str r5, [sp] - mov r0, r9 - mov r1, r10 - adds r2, r6, 0 - mov r3, r8 - bl sub_804A510 - lsls r4, 16 - asrs r4, 16 - adds r0, r4, 0 - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_804A460 - - thumb_func_start sub_804A4C8 -sub_804A4C8: @ 804A4C8 - push {r4,lr} - sub sp, 0x8 - adds r3, r1, 0 - ldr r4, [r0] - ldr r1, [r0, 0x4] - ldr r2, [r0, 0x8] - movs r0, 0x6 - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - adds r0, r4, 0 - bl sub_804A2F0 - lsls r0, 16 - asrs r0, 16 - add sp, 0x8 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_804A4C8 - - thumb_func_start sub_804A4F0 -sub_804A4F0: @ 804A4F0 - push {r4,lr} - sub sp, 0x4 - ldr r4, [sp, 0xC] - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsrs r3, 24 - lsls r4, 24 - lsrs r4, 24 - str r4, [sp] - bl sub_804A510 - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_804A4F0 - - thumb_func_start sub_804A510 -sub_804A510: @ 804A510 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x20 - adds r4, r0, 0 - adds r5, r1, 0 - ldr r0, [sp, 0x40] - lsls r2, 24 - lsrs r2, 24 - mov r9, r2 - lsls r3, 24 - lsrs r3, 24 - mov r10, r3 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r0, [r4] - ldr r1, [r4, 0x4] - ldr r2, [r4, 0x8] - add r3, sp, 0xC - str r3, [sp] - movs r3, 0x6 - str r3, [sp, 0x4] - adds r3, r5, 0 - bl sub_804A3C4 - movs r3, 0 - add r6, sp, 0x14 - adds r7, r6, 0 - ldrb r0, [r4, 0xC] - lsls r5, r0, 27 - ldr r4, [r4, 0x10] -_0804A554: - lsls r2, r3, 1 - adds r2, r7, r2 - lsrs r1, r5, 15 - mov r0, sp - adds r0, r3 - adds r0, 0xC - ldrb r0, [r0] - adds r0, r4, r0 - orrs r1, r0 - strh r1, [r2] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x5 - bls _0804A554 - movs r0, 0x6 - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - movs r0, 0x11 - str r0, [sp, 0x8] - mov r0, r9 - adds r1, r6, 0 - mov r2, r10 - mov r3, r8 - bl CopyToBgTilemapBufferRect_ChangePalette - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_804A510 - - thumb_func_start GetScaledExpFraction -GetScaledExpFraction: @ 804A59C - push {r4-r7,lr} - adds r6, r2, 0 - lsls r3, 27 - lsrs r7, r3, 24 - subs r5, r0, r1 - cmp r5, 0 - bge _0804A5AE - movs r5, 0 - b _0804A5B4 -_0804A5AE: - cmp r5, r6 - ble _0804A5B4 - adds r5, r6, 0 -_0804A5B4: - muls r0, r7 - adds r1, r6, 0 - bl __divsi3 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - muls r0, r7 - adds r1, r6, 0 - bl __divsi3 - lsls r4, 24 - asrs r4, 24 - lsls r0, 24 - asrs r0, 24 - subs r0, r4, r0 - cmp r0, 0 - bge _0804A5DC - negs r0, r0 -_0804A5DC: - lsls r0, 24 - lsrs r0, 24 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end GetScaledExpFraction - - thumb_func_start GetScaledHPFraction -GetScaledHPFraction: @ 804A5E8 - push {r4,lr} - lsls r2, 24 - lsrs r2, 24 - lsls r0, 16 - asrs r4, r0, 16 - adds r0, r4, 0 - muls r0, r2 - lsls r1, 16 - asrs r1, 16 - bl __divsi3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _0804A60C - cmp r4, 0 - ble _0804A60C - movs r0, 0x1 -_0804A60C: - pop {r4} - pop {r1} - bx r1 - thumb_func_end GetScaledHPFraction - - thumb_func_start GetHPBarLevel -GetHPBarLevel: @ 804A614 - push {lr} - lsls r0, 16 - asrs r0, 16 - lsls r1, 16 - asrs r1, 16 - cmp r0, r1 - bne _0804A626 - movs r0, 0x4 - b _0804A642 -_0804A626: - movs r2, 0x30 - bl GetScaledHPFraction - lsls r0, 24 - lsrs r1, r0, 24 - movs r0, 0x3 - cmp r1, 0x18 - bhi _0804A642 - movs r0, 0x2 - cmp r1, 0x9 - bhi _0804A642 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 -_0804A642: - pop {r1} - bx r1 - thumb_func_end GetHPBarLevel - - thumb_func_start AddTextPrinterAndCreateWindowOnHealthbox -AddTextPrinterAndCreateWindowOnHealthbox: @ 804A648 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - sub sp, 0x20 - mov r9, r0 - adds r6, r1, 0 - mov r8, r2 - mov r10, r3 - ldr r0, _0804A6D4 @ =gUnknown_8260564 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp, 0x18] - str r1, [sp, 0x1C] - add r0, sp, 0x18 - bl AddWindow - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, r4, 24 - lsrs r5, 24 - adds r0, r5, 0 - movs r1, 0x22 - bl FillWindowPixelBuffer - add r1, sp, 0x14 - movs r2, 0 - movs r0, 0x2 - strb r0, [r1] - movs r0, 0x1 - strb r0, [r1, 0x1] - movs r0, 0x3 - strb r0, [r1, 0x2] - lsls r6, 24 - lsrs r6, 24 - mov r0, r8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - str r2, [sp] - str r2, [sp, 0x4] - str r1, [sp, 0x8] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0xC] - mov r0, r9 - str r0, [sp, 0x10] - adds r0, r5, 0 - movs r1, 0 - adds r2, r6, 0 - mov r3, r8 - bl AddTextPrinterParameterized4 - mov r0, r10 - str r4, [r0] - adds r0, r5, 0 - movs r1, 0x7 - bl GetWindowAttribute - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0804A6D4: .4byte gUnknown_8260564 - thumb_func_end AddTextPrinterAndCreateWindowOnHealthbox - - thumb_func_start RemoveWindowOnHealthbox -RemoveWindowOnHealthbox: @ 804A6D8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl RemoveWindow - pop {r0} - bx r0 - thumb_func_end RemoveWindowOnHealthbox - - thumb_func_start TextIntoHealthboxObject -TextIntoHealthboxObject: @ 804A6E8 - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - adds r4, r2, 0 - movs r1, 0x80 - lsls r1, 1 - adds r0, r5, r1 - adds r1, r6, r1 - lsls r2, r4, 3 - ldr r3, _0804A72C @ =0x001fffff - ands r2, r3 - movs r3, 0x80 - lsls r3, 19 - orrs r2, r3 - bl CpuSet - cmp r4, 0 - ble _0804A724 -_0804A70C: - adds r0, r5, 0 - adds r0, 0x14 - adds r1, r6, 0 - adds r1, 0x14 - ldr r2, _0804A730 @ =0x04000003 - bl CpuSet - adds r6, 0x20 - adds r5, 0x20 - subs r4, 0x1 - cmp r4, 0 - bne _0804A70C -_0804A724: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0804A72C: .4byte 0x001fffff -_0804A730: .4byte 0x04000003 - thumb_func_end TextIntoHealthboxObject - - thumb_func_start sub_804A734 -sub_804A734: @ 804A734 - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - lsls r4, r2, 3 - ldr r0, _0804A768 @ =0x001fffff - ands r4, r0 - movs r0, 0x80 - lsls r0, 19 - orrs r4, r0 - adds r0, r5, 0 - adds r1, r6, 0 - adds r2, r4, 0 - bl CpuSet - movs r0, 0x80 - lsls r0, 1 - adds r5, r0 - adds r6, r0 - adds r0, r5, 0 - adds r1, r6, 0 - adds r2, r4, 0 - bl CpuSet - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0804A768: .4byte 0x001fffff - thumb_func_end sub_804A734 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/battle_message.h b/include/battle_message.h index 612b253cf..2e2baa278 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -248,4 +248,7 @@ extern const u8 gUnknown_83FE85C[]; extern const u8 gUnknown_83FE860[]; extern const u8 gUnknown_83FE864[]; +extern const u8 gText_SafariBalls[]; +extern const u8 gText_HighlightRed_Left[]; + #endif // GUARD_BATTLE_MESSAGE_H diff --git a/ld_script.txt b/ld_script.txt index 30ba74347..d3ed6bf39 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -80,7 +80,6 @@ SECTIONS { src/blend_palette.o(.text); src/daycare.o(.text); src/battle_interface.o(.text); - asm/battle_interface.o(.text); asm/smokescreen.o(.text); src/pokeball.o(.text); src/load_save.o(.text); diff --git a/src/battle_interface.c b/src/battle_interface.c index 489378a13..4098025fe 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -5,8 +5,11 @@ #include "decompress.h" #include "gpu_regs.h" #include "graphics.h" +#include "menu.h" +#include "palette.h" #include "pokedex.h" #include "pokemon_summary_screen.h" +#include "safari_zone.h" #include "sound.h" #include "string_util.h" #include "strings.h" @@ -14,6 +17,148 @@ #include "window.h" #include "constants/songs.h" +#define GetStringRightAlignXOffset(fontId, string, destWidth) ({ \ + s32 w = GetStringWidth(fontId, string, 0); \ + destWidth - w; \ +}) + +#define abs(a) ((a) < 0 ? -(a) : (a)) + +#define Q_24_8(n) ((s32)((n) * 256)) +#define Q_24_8_TO_INT(n) ((int)((n) >> 8)) + +struct TestingBar +{ + s32 maxValue; + s32 oldValue; + s32 receivedValue; + u32 pal:5; + u32 tileOffset; +}; + +enum +{ // Corresponds to gHealthboxElementsGfxTable (and the tables after it) in graphics.c + // These are indexes into the tables, which are filled with 8x8 square pixel data. + HEALTHBOX_GFX_0, //hp bar [black section] + HEALTHBOX_GFX_1, //hp bar "H" + HEALTHBOX_GFX_2, //hp bar "P" + HEALTHBOX_GFX_HP_BAR_GREEN, //hp bar [0 pixels] + HEALTHBOX_GFX_4, //hp bar [1 pixels] + HEALTHBOX_GFX_5, //hp bar [2 pixels] + HEALTHBOX_GFX_6, //hp bar [3 pixels] + HEALTHBOX_GFX_7, //hp bar [4 pixels] + HEALTHBOX_GFX_8, //hp bar [5 pixels] + HEALTHBOX_GFX_9, //hp bar [6 pixels] + HEALTHBOX_GFX_10, //hp bar [7 pixels] + HEALTHBOX_GFX_11, //hp bar [8 pixels] + HEALTHBOX_GFX_12, //exp bar [0 pixels] + HEALTHBOX_GFX_13, //exp bar [1 pixels] + HEALTHBOX_GFX_14, //exp bar [2 pixels] + HEALTHBOX_GFX_15, //exp bar [3 pixels] + HEALTHBOX_GFX_16, //exp bar [4 pixels] + HEALTHBOX_GFX_17, //exp bar [5 pixels] + HEALTHBOX_GFX_18, //exp bar [6 pixels] + HEALTHBOX_GFX_19, //exp bar [7 pixels] + HEALTHBOX_GFX_20, //exp bar [8 pixels] + HEALTHBOX_GFX_STATUS_PSN_BATTLER0, //status psn "(P" + HEALTHBOX_GFX_22, //status psn "SN" + HEALTHBOX_GFX_23, //status psn "|)"" + HEALTHBOX_GFX_STATUS_PRZ_BATTLER0, //status prz + HEALTHBOX_GFX_25, + HEALTHBOX_GFX_26, + HEALTHBOX_GFX_STATUS_SLP_BATTLER0, //status slp + HEALTHBOX_GFX_28, + HEALTHBOX_GFX_29, + HEALTHBOX_GFX_STATUS_FRZ_BATTLER0, //status frz + HEALTHBOX_GFX_31, + HEALTHBOX_GFX_32, + HEALTHBOX_GFX_STATUS_BRN_BATTLER0, //status brn + HEALTHBOX_GFX_34, + HEALTHBOX_GFX_35, + HEALTHBOX_GFX_36, //misc [Black section] + HEALTHBOX_GFX_37, //misc [Black section] + HEALTHBOX_GFX_38, //misc [Black section] + HEALTHBOX_GFX_39, //misc [Blank Health Window?] + HEALTHBOX_GFX_40, //misc [Blank Health Window?] + HEALTHBOX_GFX_41, //misc [Blank Health Window?] + HEALTHBOX_GFX_42, //misc [Blank Health Window?] + HEALTHBOX_GFX_43, //misc [Top of Health Window?] + HEALTHBOX_GFX_44, //misc [Top of Health Window?] + HEALTHBOX_GFX_45, //misc [Top of Health Window?] + HEALTHBOX_GFX_46, //misc [Blank Health Window?] + HEALTHBOX_GFX_HP_BAR_YELLOW, //hp bar yellow [0 pixels] + HEALTHBOX_GFX_48, //hp bar yellow [1 pixels] + HEALTHBOX_GFX_49, //hp bar yellow [2 pixels] + HEALTHBOX_GFX_50, //hp bar yellow [3 pixels] + HEALTHBOX_GFX_51, //hp bar yellow [4 pixels] + HEALTHBOX_GFX_52, //hp bar yellow [5 pixels] + HEALTHBOX_GFX_53, //hp bar yellow [6 pixels] + HEALTHBOX_GFX_54, //hp bar yellow [7 pixels] + HEALTHBOX_GFX_55, //hp bar yellow [8 pixels] + HEALTHBOX_GFX_HP_BAR_RED, //hp bar red [0 pixels] + HEALTHBOX_GFX_57, //hp bar red [1 pixels] + HEALTHBOX_GFX_58, //hp bar red [2 pixels] + HEALTHBOX_GFX_59, //hp bar red [3 pixels] + HEALTHBOX_GFX_60, //hp bar red [4 pixels] + HEALTHBOX_GFX_61, //hp bar red [5 pixels] + HEALTHBOX_GFX_62, //hp bar red [6 pixels] + HEALTHBOX_GFX_63, //hp bar red [7 pixels] + HEALTHBOX_GFX_64, //hp bar red [8 pixels] + HEALTHBOX_GFX_65, //hp bar frame end + HEALTHBOX_GFX_66, //status ball [full] + HEALTHBOX_GFX_67, //status ball [empty] + HEALTHBOX_GFX_68, //status ball [fainted] + HEALTHBOX_GFX_69, //status ball [statused] + HEALTHBOX_GFX_70, //status ball [unused extra] + HEALTHBOX_GFX_STATUS_PSN_BATTLER1, //status2 "PSN" + HEALTHBOX_GFX_72, + HEALTHBOX_GFX_73, + HEALTHBOX_GFX_STATUS_PRZ_BATTLER1, //status2 "PRZ" + HEALTHBOX_GFX_75, + HEALTHBOX_GFX_76, + HEALTHBOX_GFX_STATUS_SLP_BATTLER1, //status2 "SLP" + HEALTHBOX_GFX_78, + HEALTHBOX_GFX_79, + HEALTHBOX_GFX_STATUS_FRZ_BATTLER1, //status2 "FRZ" + HEALTHBOX_GFX_81, + HEALTHBOX_GFX_82, + HEALTHBOX_GFX_STATUS_BRN_BATTLER1, //status2 "BRN" + HEALTHBOX_GFX_84, + HEALTHBOX_GFX_85, + HEALTHBOX_GFX_STATUS_PSN_BATTLER2, //status3 "PSN" + HEALTHBOX_GFX_87, + HEALTHBOX_GFX_88, + HEALTHBOX_GFX_STATUS_PRZ_BATTLER2, //status3 "PRZ" + HEALTHBOX_GFX_90, + HEALTHBOX_GFX_91, + HEALTHBOX_GFX_STATUS_SLP_BATTLER2, //status3 "SLP" + HEALTHBOX_GFX_93, + HEALTHBOX_GFX_94, + HEALTHBOX_GFX_STATUS_FRZ_BATTLER2, //status3 "FRZ" + HEALTHBOX_GFX_96, + HEALTHBOX_GFX_97, + HEALTHBOX_GFX_STATUS_BRN_BATTLER2, //status3 "BRN" + HEALTHBOX_GFX_99, + HEALTHBOX_GFX_100, + HEALTHBOX_GFX_STATUS_PSN_BATTLER3, //status4 "PSN" + HEALTHBOX_GFX_102, + HEALTHBOX_GFX_103, + HEALTHBOX_GFX_STATUS_PRZ_BATTLER3, //status4 "PRZ" + HEALTHBOX_GFX_105, + HEALTHBOX_GFX_106, + HEALTHBOX_GFX_STATUS_SLP_BATTLER3, //status4 "SLP" + HEALTHBOX_GFX_108, + HEALTHBOX_GFX_109, + HEALTHBOX_GFX_STATUS_FRZ_BATTLER3, //status4 "FRZ" + HEALTHBOX_GFX_111, + HEALTHBOX_GFX_112, + HEALTHBOX_GFX_STATUS_BRN_BATTLER3, //status4 "BRN" + HEALTHBOX_GFX_114, + HEALTHBOX_GFX_115, + HEALTHBOX_GFX_116, //unknown_D12FEC + HEALTHBOX_GFX_117, //unknown_D1300C +}; + void SpriteCB_HealthBoxOther(struct Sprite * sprite); void SpriteCB_HealthBar(struct Sprite * sprite); const u8 *GetHealthboxElementGfxPtr(u8 which); @@ -27,6 +172,13 @@ void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite * sprite); void UpdateStatusIconInHealthbox(u8 spriteId); void SpriteCB_StatusSummaryBar(struct Sprite * sprite); void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite * sprite); +u8 GetStatusIconForBattlerId(u8 statusElementId, u8 battlerId); +void MoveBattleBarGraphically(u8 battlerId, u8 whichBar); +u8 GetScaledExpFraction(s32 oldValue, s32 receivedValue, s32 maxValue, u8 scale); +u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *arg4, u8 scale); +s32 CalcNewBarValue(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 arg4, u16 arg5); +void sub_804A510(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y); +void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth); u8 *AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 *windowId); void RemoveWindowOnHealthbox(u32 windowId); void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 windowWidth); @@ -426,7 +578,7 @@ u8 CreateBattlerHealthboxSprites(u8 a) SetSubspriteTables(sprite, &gUnknown_82603C4[GetBattlerSide(a)]); sprite->subspriteMode = 2; sprite->oam.priority = 1; - CpuCopy32(GetHealthboxElementGfxPtr(1), OBJ_VRAM0 + sprite->oam.tileNum * 32, 64); + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), OBJ_VRAM0 + sprite->oam.tileNum * 32, 64); gSprites[healthboxLeftSpriteId].hBar_HealthBoxSpriteId = healthbarSpriteId; gSprites[healthboxLeftSpriteId].hBar_Data6 = a; @@ -753,7 +905,7 @@ void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrC { if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) // Impossible to reach part, because the battlerId is from the opponent's side. { - CpuCopy32(GetHealthboxElementGfxPtr(116), + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_116), (void*)(OBJ_VRAM0) + ((gSprites[healthboxSpriteId].oam.tileNum + 52) * TILE_SIZE_4BPP), 0x20); } @@ -781,11 +933,11 @@ void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon) u8 elementId; if ((text[j] >= 55 && text[j] <= 74) || (text[j] >= 135 && text[j] <= 154)) - elementId = 44; + elementId = HEALTHBOX_GFX_44; else if ((text[j] >= 75 && text[j] <= 79) || (text[j] >= 155 && text[j] <= 159)) - elementId = 45; + elementId = HEALTHBOX_GFX_45; else - elementId = 43; + elementId = HEALTHBOX_GFX_43; CpuCopy32(GetHealthboxElementGfxPtr(elementId), barFontGfx + (i * 64), 0x20); } @@ -860,7 +1012,7 @@ void SwapHpBarsWithHpText(void) { UpdateStatusIconInHealthbox(gHealthboxSpriteIds[i]); UpdateHealthboxAttribute(gHealthboxSpriteIds[i], &gPlayerParty[gBattlerPartyIndexes[i]], HEALTHBOX_HEALTH_BAR); - CpuCopy32(GetHealthboxElementGfxPtr(117), (void*)(OBJ_VRAM0 + 0x680 + gSprites[gHealthboxSpriteIds[i]].oam.tileNum * TILE_SIZE_4BPP), 32); + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_117), (void*)(OBJ_VRAM0 + 0x680 + gSprites[gHealthboxSpriteIds[i]].oam.tileNum * TILE_SIZE_4BPP), 32); } } else @@ -2000,20 +2152,601 @@ void TryAddPokeballIconToHealthbox(u8 healthboxSpriteId, bool8 noStatus) healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId; if (noStatus) - CpuCopy32(GetHealthboxElementGfxPtr(70), (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 32); + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_70), (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 32); else CpuFill32(0, (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 32); } -const u16 gUnknown_826055A[] = { - RGB(24, 12, 24), - RGB(23, 23, 3), - RGB(20, 20, 17), - RGB(17, 22, 28), - RGB(28, 14, 10) +enum +{ + PAL_STATUS_PSN, + PAL_STATUS_PAR, + PAL_STATUS_SLP, + PAL_STATUS_FRZ, + PAL_STATUS_BRN +}; + +const u16 sStatusIconColors[] = { + [PAL_STATUS_PSN] = RGB(24, 12, 24), + [PAL_STATUS_PAR] = RGB(23, 23, 3), + [PAL_STATUS_SLP] = RGB(20, 20, 17), + [PAL_STATUS_FRZ] = RGB(17, 22, 28), + [PAL_STATUS_BRN] = RGB(28, 14, 10) }; -const struct WindowTemplate gUnknown_8260564 = { +void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) +{ + s32 i; + u8 battlerId, healthBarSpriteId; + u32 status, pltAdder; + const u8 *statusGfxPtr; + s16 tileNumAdder; + u8 statusPalId; + + battlerId = gSprites[healthboxSpriteId].hMain_Battler; + healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId; + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + { + status = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_STATUS); + if (!IsDoubleBattle()) + tileNumAdder = 0x1A; + else + tileNumAdder = 0x12; + } + else + { + status = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_STATUS); + tileNumAdder = 0x11; + } + + if (status & STATUS1_SLEEP) + { + statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_SLP_BATTLER0, battlerId)); + statusPalId = PAL_STATUS_SLP; + } + else if (status & STATUS1_PSN_ANY) + { + statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_PSN_BATTLER0, battlerId)); + statusPalId = PAL_STATUS_PSN; + } + else if (status & STATUS1_BURN) + { + statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_BRN_BATTLER0, battlerId)); + statusPalId = PAL_STATUS_BRN; + } + else if (status & STATUS1_FREEZE) + { + statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_FRZ_BATTLER0, battlerId)); + statusPalId = PAL_STATUS_FRZ; + } + else if (status & STATUS1_PARALYSIS) + { + statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_PRZ_BATTLER0, battlerId)); + statusPalId = PAL_STATUS_PAR; + } + else + { + statusGfxPtr = GetHealthboxElementGfxPtr(HEALTHBOX_GFX_39); + + for (i = 0; i < 3; i++) + CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder + i) * TILE_SIZE_4BPP), 32); + + if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 64); + + TryAddPokeballIconToHealthbox(healthboxSpriteId, TRUE); + return; + } + + pltAdder = gSprites[healthboxSpriteId].oam.paletteNum * 16; + pltAdder += battlerId + 12; + + FillPalette(sStatusIconColors[statusPalId], pltAdder + 0x100, 2); + CpuCopy16(gPlttBufferUnfaded + 0x100 + pltAdder, (void*)(OBJ_PLTT + pltAdder * 2), 2); + CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder) * TILE_SIZE_4BPP), 96); + if (IsDoubleBattle() == TRUE || GetBattlerSide(battlerId) == B_SIDE_OPPONENT) + { + if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) + { + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_0), (void*)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 32); + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_65), (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 1) * TILE_SIZE_4BPP), 32); + } + } + TryAddPokeballIconToHealthbox(healthboxSpriteId, FALSE); +} + +u8 GetStatusIconForBattlerId(u8 statusElementId, u8 battlerId) +{ + u8 ret = statusElementId; + + switch (statusElementId) + { + case HEALTHBOX_GFX_STATUS_PSN_BATTLER0: + if (battlerId == 0) + ret = HEALTHBOX_GFX_STATUS_PSN_BATTLER0; + else if (battlerId == 1) + ret = HEALTHBOX_GFX_STATUS_PSN_BATTLER1; + else if (battlerId == 2) + ret = HEALTHBOX_GFX_STATUS_PSN_BATTLER2; + else + ret = HEALTHBOX_GFX_STATUS_PSN_BATTLER3; + break; + case HEALTHBOX_GFX_STATUS_PRZ_BATTLER0: + if (battlerId == 0) + ret = HEALTHBOX_GFX_STATUS_PRZ_BATTLER0; + else if (battlerId == 1) + ret = HEALTHBOX_GFX_STATUS_PRZ_BATTLER1; + else if (battlerId == 2) + ret = HEALTHBOX_GFX_STATUS_PRZ_BATTLER2; + else + ret = HEALTHBOX_GFX_STATUS_PRZ_BATTLER3; + break; + case HEALTHBOX_GFX_STATUS_SLP_BATTLER0: + if (battlerId == 0) + ret = HEALTHBOX_GFX_STATUS_SLP_BATTLER0; + else if (battlerId == 1) + ret = HEALTHBOX_GFX_STATUS_SLP_BATTLER1; + else if (battlerId == 2) + ret = HEALTHBOX_GFX_STATUS_SLP_BATTLER2; + else + ret = HEALTHBOX_GFX_STATUS_SLP_BATTLER3; + break; + case HEALTHBOX_GFX_STATUS_FRZ_BATTLER0: + if (battlerId == 0) + ret = HEALTHBOX_GFX_STATUS_FRZ_BATTLER0; + else if (battlerId == 1) + ret = HEALTHBOX_GFX_STATUS_FRZ_BATTLER1; + else if (battlerId == 2) + ret = HEALTHBOX_GFX_STATUS_FRZ_BATTLER2; + else + ret = HEALTHBOX_GFX_STATUS_FRZ_BATTLER3; + break; + case HEALTHBOX_GFX_STATUS_BRN_BATTLER0: + if (battlerId == 0) + ret = HEALTHBOX_GFX_STATUS_BRN_BATTLER0; + else if (battlerId == 1) + ret = HEALTHBOX_GFX_STATUS_BRN_BATTLER1; + else if (battlerId == 2) + ret = HEALTHBOX_GFX_STATUS_BRN_BATTLER2; + else + ret = HEALTHBOX_GFX_STATUS_BRN_BATTLER3; + break; + } + return ret; +} + +void UpdateSafariBallsTextOnHealthbox(u8 healthboxSpriteId) +{ + u32 windowId, spriteTileNum; + u8 *windowTileData; + + windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gText_SafariBalls, 0, 3, &windowId); + spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP; + TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x40) + spriteTileNum, windowTileData, 6); + TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x800) + spriteTileNum, windowTileData + 0xC0, 2); + RemoveWindowOnHealthbox(windowId); +} + +void UpdateLeftNoOfBallsTextOnHealthbox(u8 healthboxSpriteId) +{ + u8 text[16]; + u8 *txtPtr; + u32 windowId, spriteTileNum; + u8 *windowTileData; + + txtPtr = StringCopy(text, gText_HighlightRed_Left); + ConvertIntToDecimalStringN(txtPtr, gNumSafariBalls, STR_CONV_MODE_LEFT_ALIGN, 2); + + windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, GetStringRightAlignXOffset(0, text, 0x2F), 3, &windowId); + spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP; + SafariTextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x2C0) + spriteTileNum, windowTileData, 2); + SafariTextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0xA00) + spriteTileNum, windowTileData + 0x40, 4); + RemoveWindowOnHealthbox(windowId); +} + +void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elementId) +{ + s32 maxHp, currHp; + u8 battlerId = gSprites[healthboxSpriteId].hMain_Battler; + + if (elementId == HEALTHBOX_ALL && !IsDoubleBattle()) + GetBattlerSide(battlerId); // Pointless function call. + + if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER) + { + u8 isDoubles; + + if (elementId == HEALTHBOX_LEVEL || elementId == HEALTHBOX_ALL) + UpdateLvlInHealthbox(healthboxSpriteId, GetMonData(mon, MON_DATA_LEVEL)); + if (elementId == HEALTHBOX_CURRENT_HP || elementId == HEALTHBOX_ALL) + UpdateHpTextInHealthbox(healthboxSpriteId, GetMonData(mon, MON_DATA_HP), HP_CURRENT); + if (elementId == HEALTHBOX_MAX_HP || elementId == HEALTHBOX_ALL) + UpdateHpTextInHealthbox(healthboxSpriteId, GetMonData(mon, MON_DATA_MAX_HP), HP_MAX); + if (elementId == HEALTHBOX_HEALTH_BAR || elementId == HEALTHBOX_ALL) + { + LoadBattleBarGfx(0); + maxHp = GetMonData(mon, MON_DATA_MAX_HP); + currHp = GetMonData(mon, MON_DATA_HP); + SetBattleBarStruct(battlerId, healthboxSpriteId, maxHp, currHp, 0); + MoveBattleBar(battlerId, healthboxSpriteId, HEALTH_BAR, 0); + } + isDoubles = IsDoubleBattle(); + if (!isDoubles && (elementId == HEALTHBOX_EXP_BAR || elementId == HEALTHBOX_ALL)) + { + u16 species; + u32 exp, currLevelExp; + s32 currExpBarValue, maxExpBarValue; + u8 level; + + LoadBattleBarGfx(3); + species = GetMonData(mon, MON_DATA_SPECIES); + level = GetMonData(mon, MON_DATA_LEVEL); + exp = GetMonData(mon, MON_DATA_EXP); + currLevelExp = gExperienceTables[gBaseStats[species].growthRate][level]; + currExpBarValue = exp - currLevelExp; + maxExpBarValue = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLevelExp; + SetBattleBarStruct(battlerId, healthboxSpriteId, maxExpBarValue, currExpBarValue, isDoubles); + MoveBattleBar(battlerId, healthboxSpriteId, EXP_BAR, 0); + } + if (elementId == HEALTHBOX_NICK || elementId == HEALTHBOX_ALL) + UpdateNickInHealthbox(healthboxSpriteId, mon); + if (elementId == HEALTHBOX_STATUS_ICON || elementId == HEALTHBOX_ALL) + UpdateStatusIconInHealthbox(healthboxSpriteId); + if (elementId == HEALTHBOX_SAFARI_ALL_TEXT) + UpdateSafariBallsTextOnHealthbox(healthboxSpriteId); + if (elementId == HEALTHBOX_SAFARI_ALL_TEXT || elementId == HEALTHBOX_SAFARI_BALLS_TEXT) + UpdateLeftNoOfBallsTextOnHealthbox(healthboxSpriteId); + } + else + { + if (elementId == HEALTHBOX_LEVEL || elementId == HEALTHBOX_ALL) + UpdateLvlInHealthbox(healthboxSpriteId, GetMonData(mon, MON_DATA_LEVEL)); + if (elementId == HEALTHBOX_HEALTH_BAR || elementId == HEALTHBOX_ALL) + { + LoadBattleBarGfx(0); + maxHp = GetMonData(mon, MON_DATA_MAX_HP); + currHp = GetMonData(mon, MON_DATA_HP); + SetBattleBarStruct(battlerId, healthboxSpriteId, maxHp, currHp, 0); + MoveBattleBar(battlerId, healthboxSpriteId, HEALTH_BAR, 0); + } + if (elementId == HEALTHBOX_NICK || elementId == HEALTHBOX_ALL) + UpdateNickInHealthbox(healthboxSpriteId, mon); + if (elementId == HEALTHBOX_STATUS_ICON || elementId == HEALTHBOX_ALL) + UpdateStatusIconInHealthbox(healthboxSpriteId); + } +} + +#define B_EXPBAR_PIXELS 64 +#define B_HEALTHBAR_PIXELS 48 + +s32 MoveBattleBar(u8 battlerId, u8 healthboxSpriteId, u8 whichBar, u8 unused) +{ + s32 currentBarValue; + + if (whichBar == HEALTH_BAR) // health bar + { + currentBarValue = CalcNewBarValue(gBattleSpritesDataPtr->battleBars[battlerId].maxValue, + gBattleSpritesDataPtr->battleBars[battlerId].oldValue, + gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, + &gBattleSpritesDataPtr->battleBars[battlerId].currValue, + B_HEALTHBAR_PIXELS / 8, 1); + } + else // exp bar + { + u16 expFraction = GetScaledExpFraction(gBattleSpritesDataPtr->battleBars[battlerId].oldValue, + gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, + gBattleSpritesDataPtr->battleBars[battlerId].maxValue, 8); + if (expFraction == 0) + expFraction = 1; + expFraction = abs(gBattleSpritesDataPtr->battleBars[battlerId].receivedValue / expFraction); + + currentBarValue = CalcNewBarValue(gBattleSpritesDataPtr->battleBars[battlerId].maxValue, + gBattleSpritesDataPtr->battleBars[battlerId].oldValue, + gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, + &gBattleSpritesDataPtr->battleBars[battlerId].currValue, + B_EXPBAR_PIXELS / 8, expFraction); + } + + if (whichBar == EXP_BAR || (whichBar == HEALTH_BAR && !gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars)) + MoveBattleBarGraphically(battlerId, whichBar); + + if (currentBarValue == -1) + gBattleSpritesDataPtr->battleBars[battlerId].currValue = 0; + + return currentBarValue; +} + +void MoveBattleBarGraphically(u8 battlerId, u8 whichBar) +{ + u8 array[8]; + u8 filledPixelsCount, level; + u8 barElementId; + u8 i; + + switch (whichBar) + { + case HEALTH_BAR: + filledPixelsCount = CalcBarFilledPixels(gBattleSpritesDataPtr->battleBars[battlerId].maxValue, + gBattleSpritesDataPtr->battleBars[battlerId].oldValue, + gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, + &gBattleSpritesDataPtr->battleBars[battlerId].currValue, + array, B_HEALTHBAR_PIXELS / 8); + + if (filledPixelsCount > (B_HEALTHBAR_PIXELS * 50 / 100)) // more than 50 % hp + barElementId = HEALTHBOX_GFX_HP_BAR_GREEN; + else if (filledPixelsCount > (B_HEALTHBAR_PIXELS * 20 / 100)) // more than 20% hp + barElementId = HEALTHBOX_GFX_HP_BAR_YELLOW; + else + barElementId = HEALTHBOX_GFX_HP_BAR_RED; // 20 % or less + + for (i = 0; i < 6; i++) + { + u8 healthbarSpriteId = gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].hMain_HealthBarSpriteId; + if (i < 2) + CpuCopy32(GetHealthboxElementGfxPtr(barElementId) + array[i] * 32, + (void*)(OBJ_VRAM0 + (gSprites[healthbarSpriteId].oam.tileNum + 2 + i) * TILE_SIZE_4BPP), 32); + else + CpuCopy32(GetHealthboxElementGfxPtr(barElementId) + array[i] * 32, + (void*)(OBJ_VRAM0 + 64 + (i + gSprites[healthbarSpriteId].oam.tileNum) * TILE_SIZE_4BPP), 32); + } + break; + case EXP_BAR: + CalcBarFilledPixels(gBattleSpritesDataPtr->battleBars[battlerId].maxValue, + gBattleSpritesDataPtr->battleBars[battlerId].oldValue, + gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, + &gBattleSpritesDataPtr->battleBars[battlerId].currValue, + array, B_EXPBAR_PIXELS / 8); + level = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_LEVEL); + if (level == MAX_LEVEL) + { + for (i = 0; i < 8; i++) + array[i] = 0; + } + for (i = 0; i < 8; i++) + { + if (i < 4) + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_12) + array[i] * 32, + (void*)(OBJ_VRAM0 + (gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum + 0x24 + i) * TILE_SIZE_4BPP), 32); + else + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_12) + array[i] * 32, + (void*)(OBJ_VRAM0 + 0xB80 + (i + gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum) * TILE_SIZE_4BPP), 32); + } + break; + } +} +s32 CalcNewBarValue(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 scale, u16 toAdd) +{ + s32 ret, newValue; + scale *= 8; + + if (*currValue == -32768) // first function call + { + if (maxValue < scale) + *currValue = Q_24_8(oldValue); + else + *currValue = oldValue; + } + + newValue = oldValue - receivedValue; + if (newValue < 0) + newValue = 0; + else if (newValue > maxValue) + newValue = maxValue; + + if (maxValue < scale) + { + if (newValue == Q_24_8_TO_INT(*currValue) && (*currValue & 0xFF) == 0) + return -1; + } + else + { + if (newValue == *currValue) // we're done, the bar's value has been updated + return -1; + } + + if (maxValue < scale) // handle cases of max var having less pixels than the whole bar + { + s32 toAdd_ = Q_24_8(maxValue) / scale; + + if (receivedValue < 0) // fill bar right + { + *currValue += toAdd_; + ret = Q_24_8_TO_INT(*currValue); + if (ret >= newValue) + { + *currValue = Q_24_8(newValue); + ret = newValue; + } + } + else // move bar left + { + *currValue -= toAdd_; + ret = Q_24_8_TO_INT(*currValue); + // try round up + if ((*currValue & 0xFF) > 0) + ret++; + if (ret <= newValue) + { + *currValue = Q_24_8(newValue); + ret = newValue; + } + } + } + else + { + if (receivedValue < 0) // fill bar right + { + *currValue += toAdd; + if (*currValue > newValue) + *currValue = newValue; + ret = *currValue; + } + else // move bar left + { + *currValue -= toAdd; + if (*currValue < newValue) + *currValue = newValue; + ret = *currValue; + } + } + + return ret; +} + +u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *arg4, u8 scale) +{ + u8 pixels, filledPixels, totalPixels; + u8 i; + + s32 newValue = oldValue - receivedValue; + if (newValue < 0) + newValue = 0; + else if (newValue > maxValue) + newValue = maxValue; + + totalPixels = scale * 8; + + for (i = 0; i < scale; i++) + arg4[i] = 0; + + if (maxValue < totalPixels) + pixels = (*currValue * totalPixels / maxValue) >> 8; + else + pixels = *currValue * totalPixels / maxValue; + + filledPixels = pixels; + + if (filledPixels == 0 && newValue > 0) + { + arg4[0] = 1; + filledPixels = 1; + } + else + { + for (i = 0; i < scale; i++) + { + if (pixels >= 8) + { + arg4[i] = 8; + } + else + { + arg4[i] = pixels; + break; + } + pixels -= 8; + } + } + + return filledPixels; +} + +// These functions seem as if they were made for testing the health bar. +s16 sub_804A460(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y) +{ + s16 ret; + + ret = CalcNewBarValue(barInfo->maxValue, + barInfo->oldValue, + barInfo->receivedValue, + currValue, B_HEALTHBAR_PIXELS / 8, 1); + + sub_804A510(barInfo, currValue, bg, x, y); + + return ret; +} + +s16 sub_804A4C8(struct TestingBar *barInfo, s32 *currValue) +{ + s16 ret; + + ret = CalcNewBarValue(barInfo->maxValue, + barInfo->oldValue, + barInfo->receivedValue, + currValue, B_HEALTHBAR_PIXELS / 8, 1); + + return ret; +} + +void sub_804A4F0(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y) +{ + sub_804A510(barInfo, currValue, bg, x, y); +} + +void sub_804A510(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y) +{ + u8 spC[B_HEALTHBAR_PIXELS / 8]; + u16 tiles[B_HEALTHBAR_PIXELS / 8]; + u8 i; + + CalcBarFilledPixels(barInfo->maxValue, + barInfo->oldValue, + barInfo->receivedValue, + currValue, spC, B_HEALTHBAR_PIXELS / 8); + + for (i = 0; i < B_HEALTHBAR_PIXELS / 8; i++) + { + tiles[i] = (barInfo->pal << 12) | (barInfo->tileOffset + spC[i]); + } + + CopyToBgTilemapBufferRect_ChangePalette(bg, tiles, x, y, 6, 1, 17); +} + +u8 GetScaledExpFraction(s32 oldValue, s32 receivedValue, s32 maxValue, u8 scale) +{ + s32 newVal, result; + s8 oldToMax, newToMax; + + scale *= 8; + newVal = oldValue - receivedValue; + + if (newVal < 0) + newVal = 0; + else if (newVal > maxValue) + newVal = maxValue; + + oldToMax = oldValue * scale / maxValue; + newToMax = newVal * scale / maxValue; + result = oldToMax - newToMax; + + return abs(result); +} + +u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale) +{ + u8 result = hp * scale / maxhp; + + if (result == 0 && hp > 0) + return 1; + + return result; +} + +u8 GetHPBarLevel(s16 hp, s16 maxhp) +{ + u8 result; + + if (hp == maxhp) + { + result = HP_BAR_FULL; + } + else + { + u8 fraction = GetScaledHPFraction(hp, maxhp, B_HEALTHBAR_PIXELS); + if (fraction > (B_HEALTHBAR_PIXELS * 50 / 100)) // more than 50 % hp + result = HP_BAR_GREEN; + else if (fraction > (B_HEALTHBAR_PIXELS * 20 / 100)) // more than 20% hp + result = HP_BAR_YELLOW; + else if (fraction > 0) + result = HP_BAR_RED; + else + result = HP_BAR_EMPTY; + } + + return result; +} + +const struct WindowTemplate sHealthboxWindowTemplate = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 0, @@ -2022,3 +2755,49 @@ const struct WindowTemplate gUnknown_8260564 = { .paletteNum = 0, .baseBlock = 0x000 }; + + +u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 *windowId) +{ + u16 winId; + u8 color[3]; + struct WindowTemplate winTemplate = sHealthboxWindowTemplate; + + winId = AddWindow(&winTemplate); + FillWindowPixelBuffer(winId, PIXEL_FILL(2)); + + color[0] = 2; + color[1] = 1; + color[2] = 3; + + AddTextPrinterParameterized4(winId, 0, x, y, 0, 0, color, -1, str); + + *windowId = winId; + return (u8*)(GetWindowAttribute(winId, WINDOW_TILE_DATA)); +} + +void RemoveWindowOnHealthbox(u32 windowId) +{ + RemoveWindow(windowId); +} + +void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 windowWidth) +{ + CpuCopy32(windowTileData + 256, dest + 256, windowWidth * TILE_SIZE_4BPP); +// + 256 as that prevents the top 4 blank rows of sHealthboxWindowTemplate from being copied + if (windowWidth > 0) + { + do + { + CpuCopy32(windowTileData + 20, dest + 20, 12); + dest += 32, windowTileData += 32; + windowWidth--; + } while (windowWidth != 0); + } +} + +void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth) +{ + CpuCopy32(windowTileData, dest, windowWidth * TILE_SIZE_4BPP); + CpuCopy32(windowTileData + 256, dest + 256, windowWidth * TILE_SIZE_4BPP); +} diff --git a/src/battle_message.c b/src/battle_message.c index 396c4c7f0..2513aaff6 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1254,7 +1254,7 @@ const u8 *const gUnknown_83FE7F4[] = { sText_Speed }; -const u8 gUnknown_83FE80C[] = _("{HIGHLIGHT 2}SAFARI BALLS"); // +const u8 gText_SafariBalls[] = _("{HIGHLIGHT 2}SAFARI BALLS"); // const u8 gText_HighlightRed_Left[] = _("{HIGHLIGHT 2}Left: "); const u8 gText_HighlightRed[] = _("{HIGHLIGHT 2}"); const u8 gText_Sleep[] = _("sleep"); -- cgit v1.2.3 From bc4d3b892a1685c0cb9cd368ba586031657c8710 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 12 Jan 2020 13:37:37 -0500 Subject: Static labels --- src/battle_interface.c | 180 ++++++++++++++++++++++++------------------------- 1 file changed, 90 insertions(+), 90 deletions(-) diff --git a/src/battle_interface.c b/src/battle_interface.c index 4098025fe..1ad2fa7fe 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -159,37 +159,37 @@ enum HEALTHBOX_GFX_117, //unknown_D1300C }; -void SpriteCB_HealthBoxOther(struct Sprite * sprite); -void SpriteCB_HealthBar(struct Sprite * sprite); -const u8 *GetHealthboxElementGfxPtr(u8 which); -void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent); -void sub_8049388(u8 taskId); -void sub_80493E4(u8 taskId); -void sub_8049568(struct Sprite * sprite); -void sub_8049630(struct Sprite * sprite); -void sub_804948C(u8 taskId); -void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite * sprite); -void UpdateStatusIconInHealthbox(u8 spriteId); -void SpriteCB_StatusSummaryBar(struct Sprite * sprite); -void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite * sprite); -u8 GetStatusIconForBattlerId(u8 statusElementId, u8 battlerId); -void MoveBattleBarGraphically(u8 battlerId, u8 whichBar); -u8 GetScaledExpFraction(s32 oldValue, s32 receivedValue, s32 maxValue, u8 scale); -u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *arg4, u8 scale); -s32 CalcNewBarValue(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 arg4, u16 arg5); -void sub_804A510(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y); -void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth); -u8 *AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 *windowId); -void RemoveWindowOnHealthbox(u32 windowId); -void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 windowWidth); - -const struct OamData gOamData_8260270 = { +static void SpriteCB_HealthBoxOther(struct Sprite * sprite); +static void SpriteCB_HealthBar(struct Sprite * sprite); +static const u8 *GetHealthboxElementGfxPtr(u8 which); +static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent); +static void sub_8049388(u8 taskId); +static void sub_80493E4(u8 taskId); +static void sub_8049568(struct Sprite * sprite); +static void sub_8049630(struct Sprite * sprite); +static void sub_804948C(u8 taskId); +static void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite * sprite); +static void UpdateStatusIconInHealthbox(u8 spriteId); +static void SpriteCB_StatusSummaryBar(struct Sprite * sprite); +static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite * sprite); +static u8 GetStatusIconForBattlerId(u8 statusElementId, u8 battlerId); +static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar); +static u8 GetScaledExpFraction(s32 oldValue, s32 receivedValue, s32 maxValue, u8 scale); +static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *arg4, u8 scale); +static s32 CalcNewBarValue(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 arg4, u16 arg5); +static void sub_804A510(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y); +static void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth); +static u8 *AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 *windowId); +static void RemoveWindowOnHealthbox(u32 windowId); +static void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 windowWidth); + +static const struct OamData gOamData_8260270 = { .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), .priority = 1 }; -const struct SpriteTemplate sHealthboxPlayerSpriteTemplates[] = { +static const struct SpriteTemplate sHealthboxPlayerSpriteTemplates[] = { { .tileTag = 55039, .paletteTag = 55039, @@ -207,7 +207,7 @@ const struct SpriteTemplate sHealthboxPlayerSpriteTemplates[] = { } }; -const struct SpriteTemplate sHealthboxOpponentSpriteTemplates[] = { +static const struct SpriteTemplate sHealthboxOpponentSpriteTemplates[] = { { .tileTag = 55041, .paletteTag = 55039, @@ -225,7 +225,7 @@ const struct SpriteTemplate sHealthboxOpponentSpriteTemplates[] = { } }; -const struct SpriteTemplate sHealthboxSafariSpriteTemplate = +static const struct SpriteTemplate sHealthboxSafariSpriteTemplate = { .tileTag = 55051, .paletteTag = 55039, @@ -235,13 +235,13 @@ const struct SpriteTemplate sHealthboxSafariSpriteTemplate = .callback = SpriteCallbackDummy }; -const struct OamData gUnknown_82602F0 = { +static const struct OamData gUnknown_82602F0 = { .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .priority = 1 }; -const struct SpriteTemplate gUnknown_82602F8[] = { +static const struct SpriteTemplate gUnknown_82602F8[] = { { .tileTag = 55044, .paletteTag = 55044, @@ -273,7 +273,7 @@ const struct SpriteTemplate gUnknown_82602F8[] = { } }; -const struct Subsprite gUnknown_8260358[] = { +static const struct Subsprite gUnknown_8260358[] = { { 240, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0x0000, 1 }, { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 0x0020, 1 }, { 240, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0030, 1 }, @@ -281,7 +281,7 @@ const struct Subsprite gUnknown_8260358[] = { { 48, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0038, 1 } }; -const struct Subsprite gUnknown_826036C[] = { +static const struct Subsprite gUnknown_826036C[] = { { 240, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0x0040, 1 }, { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 0x0060, 1 }, { 240, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0070, 1 }, @@ -289,47 +289,47 @@ const struct Subsprite gUnknown_826036C[] = { { 48, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0078, 1 } }; -const struct Subsprite gUnknown_8260380[] = { +static const struct Subsprite gUnknown_8260380[] = { { 240, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0x0000, 1 }, { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 0x0020, 1 } }; -const struct Subsprite gUnknown_8260388[] = { +static const struct Subsprite gUnknown_8260388[] = { { 240, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0x0000, 1 }, { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 0x0020, 1 } }; -const struct Subsprite gUnknown_8260390[] = { +static const struct Subsprite gUnknown_8260390[] = { { 240, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0000, 1 }, { 16, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0004, 1 } }; -const struct Subsprite gUnknown_8260398[] = { +static const struct Subsprite gUnknown_8260398[] = { { 240, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0000, 1 }, { 16, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0004, 1 }, { 224, 0, SPRITE_SHAPE(8x8), SPRITE_SIZE(8x8), 0x0008, 1 } }; -const struct SubspriteTable gUnknown_82603A4[] = { +static const struct SubspriteTable gUnknown_82603A4[] = { {NELEMS(gUnknown_8260358), gUnknown_8260358}, {NELEMS(gUnknown_8260380), gUnknown_8260380}, {NELEMS(gUnknown_826036C), gUnknown_826036C}, {NELEMS(gUnknown_8260388), gUnknown_8260388} }; -const struct SubspriteTable gUnknown_82603C4[] = { +static const struct SubspriteTable gUnknown_82603C4[] = { {NELEMS(gUnknown_8260390), gUnknown_8260390}, {NELEMS(gUnknown_8260398), gUnknown_8260398} }; -const struct Subsprite gUnknown_82603D4[] = { +static const struct Subsprite gUnknown_82603D4[] = { { 160, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0000, 1 }, { 192, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0004, 1 }, { 224, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0008, 1 }, { 0, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x000c, 1 } }; -const struct Subsprite gUnknown_82603E4[] = { +static const struct Subsprite gUnknown_82603E4[] = { { 160, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0000, 1 }, { 192, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0004, 1 }, { 224, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0008, 1 }, @@ -338,50 +338,50 @@ const struct Subsprite gUnknown_82603E4[] = { { 64, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x000c, 1 } }; -const struct SubspriteTable sStatusSummaryBar_SubspriteTable[] = +static const struct SubspriteTable sStatusSummaryBar_SubspriteTable[] = { {NELEMS(gUnknown_82603D4), gUnknown_82603D4} }; -const struct SubspriteTable gUnknown_8260404[] = { +static const struct SubspriteTable gUnknown_8260404[] = { {NELEMS(gUnknown_82603E4), gUnknown_82603E4} }; -const u16 gUnknown_26040C[] = INCBIN_U16("graphics/battle_interface/unk_826404C.4bpp"); +static const u16 gUnknown_26040C[] = INCBIN_U16("graphics/battle_interface/unk_826404C.4bpp"); -const struct CompressedSpriteSheet sStatusSummaryBarSpriteSheets[] = { +static const struct CompressedSpriteSheet sStatusSummaryBarSpriteSheets[] = { {gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55052}, {gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55053} }; -const struct SpritePalette sStatusSummaryBarSpritePals[] = { +static const struct SpritePalette sStatusSummaryBarSpritePals[] = { {gBattleInterface_BallStatusBarPal, 55056}, {gBattleInterface_BallStatusBarPal, 55057} }; -const struct SpritePalette sStatusSummaryBallsSpritePals[] = { +static const struct SpritePalette sStatusSummaryBallsSpritePals[] = { {gBattleInterface_BallDisplayPal, 55058}, {gBattleInterface_BallDisplayPal, 55059} }; -const struct SpriteSheet sStatusSummaryBallsSpriteSheets[] = { +static const struct SpriteSheet sStatusSummaryBallsSpriteSheets[] = { {gUnknown_8D12404, 0x0080, 55060}, {gUnknown_8D12404, 0x0080, 55061} }; -const struct OamData gUnknown_82604AC = { +static const struct OamData gUnknown_82604AC = { .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), .priority = 1 }; -const struct OamData gUnknown_82604B4 = { +static const struct OamData gUnknown_82604B4 = { .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), .priority = 1 }; -const struct SpriteTemplate sStatusSummaryBarSpriteTemplates[] = { +static const struct SpriteTemplate sStatusSummaryBarSpriteTemplates[] = { { .tileTag = 55052, .paletteTag = 55056, @@ -399,7 +399,7 @@ const struct SpriteTemplate sStatusSummaryBarSpriteTemplates[] = { } }; -const struct SpriteTemplate sStatusSummaryBallsSpriteTemplates[] = { +static const struct SpriteTemplate sStatusSummaryBallsSpriteTemplates[] = { { .tileTag = 55060, .paletteTag = 55058, @@ -417,7 +417,7 @@ const struct SpriteTemplate sStatusSummaryBallsSpriteTemplates[] = { } }; -void sub_8047B0C(s16 number, u16 *dest, bool8 unk) +static void sub_8047B0C(s16 number, u16 *dest, bool8 unk) { s8 i, j; u8 buff[4]; @@ -491,7 +491,7 @@ void sub_8047B0C(s16 number, u16 *dest, bool8 unk) } } -void sub_8047CAC(s16 num1, s16 num2, u16 *dest) +static void sub_8047CAC(s16 num1, s16 num2, u16 *dest) { dest[4] = 0x1E; sub_8047B0C(num2, &dest[0], FALSE); @@ -605,13 +605,13 @@ u8 CreateSafariPlayerHealthboxSprites(void) return healthboxLeftSpriteId; } -const u8 *GetHealthboxElementGfxPtr(u8 elementId) +static const u8 *GetHealthboxElementGfxPtr(u8 elementId) { return gHealthboxElementsGfxTable[elementId]; } // Syncs the position of healthbar accordingly with the healthbox. -void SpriteCB_HealthBar(struct Sprite *sprite) +static void SpriteCB_HealthBar(struct Sprite *sprite) { u8 r5 = sprite->data[5]; @@ -635,7 +635,7 @@ void SpriteCB_HealthBar(struct Sprite *sprite) sprite->pos2.y = gSprites[r5].pos2.y; } -void SpriteCB_HealthBoxOther(struct Sprite *sprite) +static void SpriteCB_HealthBoxOther(struct Sprite *sprite) { u8 healthboxMainSpriteId = sprite->hOther_HealthBoxSpriteId; @@ -669,7 +669,7 @@ void SetHealthboxSpriteVisible(u8 healthboxSpriteId) gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = FALSE; } -void UpdateSpritePos(u8 spriteId, s16 x, s16 y) +static void UpdateSpritePos(u8 spriteId, s16 x, s16 y) { gSprites[spriteId].pos1.x = x; gSprites[spriteId].pos1.y = y; @@ -736,7 +736,7 @@ void InitBattlerHealthboxCoords(u8 battler) UpdateSpritePos(gHealthboxSpriteIds[battler], x, y); } -void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) +static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) { u32 windowId, spriteTileNum; u8 *windowTileData; @@ -774,7 +774,7 @@ void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) RemoveWindowOnHealthbox(windowId); } -const u8 gUnknown_826052C[20] = __("{COLOR 01}{HIGHLIGHT 02}"); +static const u8 gUnknown_826052C[20] = __("{COLOR 01}{HIGHLIGHT 02}"); void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent) { @@ -849,9 +849,9 @@ void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent) } } -const u8 gUnknown_8260540[] = _("/"); +static const u8 gUnknown_8260540[] = _("/"); -void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent) +static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent) { u32 windowId, spriteTileNum; u8 *windowTileData; @@ -914,7 +914,7 @@ void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrC } // Prints mon's nature, catch and flee rate. Probably used to test pokeblock-related features. -void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon) +static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon) { u8 text[20]; s32 j, spriteTileNum; @@ -1053,7 +1053,7 @@ void SwapHpBarsWithHpText(void) #define tData15 data[15] #ifdef NONMATCHING -u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart) +static u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart) { bool8 isOpponent; s8 sp14; @@ -1890,7 +1890,7 @@ void Task_HidePartyStatusSummary(u8 taskId) } } -void sub_8049388(u8 taskId) +static void sub_8049388(u8 taskId) { if ((gTasks[taskId].data[11]++ % 2) == 0) { @@ -1903,7 +1903,7 @@ void sub_8049388(u8 taskId) gTasks[taskId].func = sub_80493E4; } -void sub_80493E4(u8 taskId) +static void sub_80493E4(u8 taskId) { u8 ballIconSpriteIds[PARTY_SIZE]; s32 i; @@ -1930,7 +1930,7 @@ void sub_80493E4(u8 taskId) } } -void sub_804948C(u8 taskId) +static void sub_804948C(u8 taskId) { u8 ballIconSpriteIds[PARTY_SIZE]; s32 i; @@ -1967,13 +1967,13 @@ void sub_804948C(u8 taskId) #undef tIsBattleStart #undef tData15 -void SpriteCB_StatusSummaryBar(struct Sprite *sprite) +static void SpriteCB_StatusSummaryBar(struct Sprite *sprite) { if (sprite->pos2.x != 0) sprite->pos2.x += sprite->data[0]; } -void sub_8049568(struct Sprite *sprite) +static void sub_8049568(struct Sprite *sprite) { sprite->data[1] += 32; if (sprite->data[0] > 0) @@ -1983,7 +1983,7 @@ void sub_8049568(struct Sprite *sprite) sprite->data[1] &= 0xF; } -void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite) +static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite) { u8 var1; u16 var2; @@ -2028,7 +2028,7 @@ void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite) } } -void sub_8049630(struct Sprite *sprite) +static void sub_8049630(struct Sprite *sprite) { u8 var1; u16 var2; @@ -2054,7 +2054,7 @@ void sub_8049630(struct Sprite *sprite) } } -void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite *sprite) +static void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite *sprite) { u8 barSpriteId = sprite->data[0]; @@ -2062,7 +2062,7 @@ void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite *sprite) sprite->pos2.y = gSprites[barSpriteId].pos2.y; } -const u8 gUnknown_8260556[] = _("{HIGHLIGHT 02}"); +static const u8 gUnknown_8260556[] = _("{HIGHLIGHT 02}"); void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon) { @@ -2166,7 +2166,7 @@ enum PAL_STATUS_BRN }; -const u16 sStatusIconColors[] = { +static const u16 sStatusIconColors[] = { [PAL_STATUS_PSN] = RGB(24, 12, 24), [PAL_STATUS_PAR] = RGB(23, 23, 3), [PAL_STATUS_SLP] = RGB(20, 20, 17), @@ -2174,7 +2174,7 @@ const u16 sStatusIconColors[] = { [PAL_STATUS_BRN] = RGB(28, 14, 10) }; -void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) +static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) { s32 i; u8 battlerId, healthBarSpriteId; @@ -2255,7 +2255,7 @@ void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) TryAddPokeballIconToHealthbox(healthboxSpriteId, FALSE); } -u8 GetStatusIconForBattlerId(u8 statusElementId, u8 battlerId) +static u8 GetStatusIconForBattlerId(u8 statusElementId, u8 battlerId) { u8 ret = statusElementId; @@ -2315,7 +2315,7 @@ u8 GetStatusIconForBattlerId(u8 statusElementId, u8 battlerId) return ret; } -void UpdateSafariBallsTextOnHealthbox(u8 healthboxSpriteId) +static void UpdateSafariBallsTextOnHealthbox(u8 healthboxSpriteId) { u32 windowId, spriteTileNum; u8 *windowTileData; @@ -2327,7 +2327,7 @@ void UpdateSafariBallsTextOnHealthbox(u8 healthboxSpriteId) RemoveWindowOnHealthbox(windowId); } -void UpdateLeftNoOfBallsTextOnHealthbox(u8 healthboxSpriteId) +static void UpdateLeftNoOfBallsTextOnHealthbox(u8 healthboxSpriteId) { u8 text[16]; u8 *txtPtr; @@ -2456,7 +2456,7 @@ s32 MoveBattleBar(u8 battlerId, u8 healthboxSpriteId, u8 whichBar, u8 unused) return currentBarValue; } -void MoveBattleBarGraphically(u8 battlerId, u8 whichBar) +static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar) { u8 array[8]; u8 filledPixelsCount, level; @@ -2514,7 +2514,7 @@ void MoveBattleBarGraphically(u8 battlerId, u8 whichBar) break; } } -s32 CalcNewBarValue(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 scale, u16 toAdd) +static s32 CalcNewBarValue(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 scale, u16 toAdd) { s32 ret, newValue; scale *= 8; @@ -2593,7 +2593,7 @@ s32 CalcNewBarValue(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValu return ret; } -u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *arg4, u8 scale) +static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *arg4, u8 scale) { u8 pixels, filledPixels, totalPixels; u8 i; @@ -2642,7 +2642,7 @@ u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currV } // These functions seem as if they were made for testing the health bar. -s16 sub_804A460(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y) +static s16 sub_804A460(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y) { s16 ret; @@ -2656,7 +2656,7 @@ s16 sub_804A460(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y) return ret; } -s16 sub_804A4C8(struct TestingBar *barInfo, s32 *currValue) +static s16 sub_804A4C8(struct TestingBar *barInfo, s32 *currValue) { s16 ret; @@ -2668,12 +2668,12 @@ s16 sub_804A4C8(struct TestingBar *barInfo, s32 *currValue) return ret; } -void sub_804A4F0(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y) +static void sub_804A4F0(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y) { sub_804A510(barInfo, currValue, bg, x, y); } -void sub_804A510(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y) +static void sub_804A510(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y) { u8 spC[B_HEALTHBAR_PIXELS / 8]; u16 tiles[B_HEALTHBAR_PIXELS / 8]; @@ -2692,7 +2692,7 @@ void sub_804A510(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y) CopyToBgTilemapBufferRect_ChangePalette(bg, tiles, x, y, 6, 1, 17); } -u8 GetScaledExpFraction(s32 oldValue, s32 receivedValue, s32 maxValue, u8 scale) +static u8 GetScaledExpFraction(s32 oldValue, s32 receivedValue, s32 maxValue, u8 scale) { s32 newVal, result; s8 oldToMax, newToMax; @@ -2746,7 +2746,7 @@ u8 GetHPBarLevel(s16 hp, s16 maxhp) return result; } -const struct WindowTemplate sHealthboxWindowTemplate = { +static const struct WindowTemplate sHealthboxWindowTemplate = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 0, @@ -2757,7 +2757,7 @@ const struct WindowTemplate sHealthboxWindowTemplate = { }; -u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 *windowId) +static u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 *windowId) { u16 winId; u8 color[3]; @@ -2776,12 +2776,12 @@ u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 *w return (u8*)(GetWindowAttribute(winId, WINDOW_TILE_DATA)); } -void RemoveWindowOnHealthbox(u32 windowId) +static void RemoveWindowOnHealthbox(u32 windowId) { RemoveWindow(windowId); } -void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 windowWidth) +static void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 windowWidth) { CpuCopy32(windowTileData + 256, dest + 256, windowWidth * TILE_SIZE_4BPP); // + 256 as that prevents the top 4 blank rows of sHealthboxWindowTemplate from being copied @@ -2796,7 +2796,7 @@ void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 windowWidth) } } -void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth) +static void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth) { CpuCopy32(windowTileData, dest, windowWidth * TILE_SIZE_4BPP); CpuCopy32(windowTileData + 256, dest + 256, windowWidth * TILE_SIZE_4BPP); -- cgit v1.2.3 From 9c6eba2249b8bafc277b01deb94124c6639c54b0 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 12 Jan 2020 14:30:11 -0500 Subject: Address review comments --- src/battle_interface.c | 25 +++++++++++-------------- src/script_pokemon_util_80A0058.c | 4 ++-- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/battle_interface.c b/src/battle_interface.c index 1ad2fa7fe..6d16c0902 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -39,7 +39,7 @@ struct TestingBar enum { // Corresponds to gHealthboxElementsGfxTable (and the tables after it) in graphics.c // These are indexes into the tables, which are filled with 8x8 square pixel data. - HEALTHBOX_GFX_0, //hp bar [black section] + HEALTHBOX_GFX_0, //hp bar [black section] HEALTHBOX_GFX_1, //hp bar "H" HEALTHBOX_GFX_2, //hp bar "P" HEALTHBOX_GFX_HP_BAR_GREEN, //hp bar [0 pixels] @@ -526,13 +526,13 @@ u8 CreateBattlerHealthboxSprites(u8 a) if (!IsDoubleBattle()) { - if (GetBattlerSide(a) == 0) + if (GetBattlerSide(a) == B_SIDE_PLAYER) { healthboxLeftSpriteId = CreateSprite(&sHealthboxPlayerSpriteTemplates[0], 240, 160, 1); healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxPlayerSpriteTemplates[0], 240, 160, 1); - gSprites[healthboxLeftSpriteId].oam.shape = 0; - gSprites[healthboxRightSpriteId].oam.shape = 0; + gSprites[healthboxLeftSpriteId].oam.shape = SPRITE_SHAPE(64x64); + gSprites[healthboxRightSpriteId].oam.shape = SPRITE_SHAPE(64x64); gSprites[healthboxRightSpriteId].oam.tileNum += 64; } else @@ -550,7 +550,7 @@ u8 CreateBattlerHealthboxSprites(u8 a) } else { - if (GetBattlerSide(a) == 0) + if (GetBattlerSide(a) == B_SIDE_PLAYER) { healthboxLeftSpriteId = CreateSprite(&sHealthboxPlayerSpriteTemplates[GetBattlerPosition(a) / 2], 240, 160, 1); healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxPlayerSpriteTemplates[GetBattlerPosition(a) / 2], 240, 160, 1); @@ -576,7 +576,7 @@ u8 CreateBattlerHealthboxSprites(u8 a) healthbarSpriteId = CreateSpriteAtEnd(&gUnknown_82602F8[gBattlerPositions[a]], 140, 60, 0); sprite = &gSprites[healthbarSpriteId]; SetSubspriteTables(sprite, &gUnknown_82603C4[GetBattlerSide(a)]); - sprite->subspriteMode = 2; + sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; sprite->oam.priority = 1; CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), OBJ_VRAM0 + sprite->oam.tileNum * 32, 64); @@ -596,8 +596,8 @@ u8 CreateSafariPlayerHealthboxSprites(void) u8 healthboxLeftSpriteId = CreateSprite(&sHealthboxSafariSpriteTemplate, 240, 160, 1); u8 healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxSafariSpriteTemplate, 240, 160, 1); - gSprites[healthboxLeftSpriteId].oam.shape = ST_OAM_SQUARE; - gSprites[healthboxRightSpriteId].oam.shape = ST_OAM_SQUARE; + gSprites[healthboxLeftSpriteId].oam.shape = SPRITE_SHAPE(64x64); + gSprites[healthboxRightSpriteId].oam.shape = SPRITE_SHAPE(64x64); gSprites[healthboxRightSpriteId].oam.tileNum += 0x40; gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId; gSprites[healthboxRightSpriteId].hBar_HealthBoxSpriteId = healthboxLeftSpriteId; @@ -774,14 +774,12 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) RemoveWindowOnHealthbox(windowId); } -static const u8 gUnknown_826052C[20] = __("{COLOR 01}{HIGHLIGHT 02}"); - void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent) { u32 windowId, spriteTileNum; u8 *windowTileData; u8 *strptr; - register void *objVram; + void *objVram; if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER && !IsDoubleBattle()) { @@ -810,7 +808,7 @@ void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent) { u8 battler; - u8 text[20]; memcpy(text, gUnknown_826052C, sizeof(gUnknown_826052C)); + u8 text[20] = __("{COLOR 01}{HIGHLIGHT 02}"); battler = gSprites[healthboxSpriteId].hMain_Battler; if (IsDoubleBattle() == TRUE || GetBattlerSide(battler) == B_SIDE_OPPONENT) { @@ -916,12 +914,11 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 // Prints mon's nature, catch and flee rate. Probably used to test pokeblock-related features. static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon) { - u8 text[20]; + u8 text[20] = __("{COLOR 01}{HIGHLIGHT 02}"); s32 j, spriteTileNum; u8 *barFontGfx; u8 i, var, nature, healthBarSpriteId; - memcpy(text, gUnknown_826052C, sizeof(gUnknown_826052C)); barFontGfx = &gMonSpritesGfxPtr->barFontGfx[0x520 + (GetBattlerPosition(gSprites[healthboxSpriteId].hMain_Battler) * 384)]; var = 5; nature = GetNature(mon); diff --git a/src/script_pokemon_util_80A0058.c b/src/script_pokemon_util_80A0058.c index 14f5d490f..6477f4a4d 100644 --- a/src/script_pokemon_util_80A0058.c +++ b/src/script_pokemon_util_80A0058.c @@ -77,7 +77,7 @@ u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 u u8 ScriptGiveEgg(u16 species) { struct Pokemon *mon = AllocZeroed(sizeof(struct Pokemon)); - u8 isEgg; + bool8 isEgg; bool8 sentToPc; CreateEgg(mon, species, TRUE); @@ -208,7 +208,7 @@ void ReducePlayerPartyToThree(void) CpuFill32(0, gPlayerParty, sizeof gPlayerParty); - // overwrite the first 4 with the order copied to. + // overwrite the first 3 with the order copied to. for (i = 0; i < 3; i++) gPlayerParty[i] = party[i]; -- cgit v1.2.3 From 034f597482adb0ec1bf4bb6b766dbad587eac588 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 12 Jan 2020 14:34:54 -0500 Subject: Address review comments, 2 --- include/script_pokemon_util.h | 11 ++ include/script_pokemon_util_80A0058.h | 11 -- ld_script.txt | 2 +- src/battle_setup.c | 2 +- src/battle_tower.c | 2 +- src/post_battle_event_funcs.c | 2 +- src/scrcmd.c | 2 +- src/script_pokemon_util.c | 217 ++++++++++++++++++++++++++++++++++ src/script_pokemon_util_80A0058.c | 217 ---------------------------------- 9 files changed, 233 insertions(+), 233 deletions(-) create mode 100644 include/script_pokemon_util.h delete mode 100644 include/script_pokemon_util_80A0058.h create mode 100644 src/script_pokemon_util.c delete mode 100644 src/script_pokemon_util_80A0058.c diff --git a/include/script_pokemon_util.h b/include/script_pokemon_util.h new file mode 100644 index 000000000..f02193538 --- /dev/null +++ b/include/script_pokemon_util.h @@ -0,0 +1,11 @@ +#ifndef GUARD_SCRIPT_POKEMON_UTIL_80A0058_H +#define GUARD_SCRIPT_POKEMON_UTIL_80A0058_H + +bool8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unk1, u32 unk2, u8 unk3); +bool8 ScriptGiveEgg(u16 species); +void ScriptSetMonMoveSlot(u8 partyIdx, u16 move, u8 slot); +void HealPlayerParty(void); +void ReducePlayerPartyToThree(void); +void CreateScriptedWildMon(u16 species, u8 level, u16 item); + +#endif //GUARD_SCRIPT_POKEMON_UTIL_80A0058_H diff --git a/include/script_pokemon_util_80A0058.h b/include/script_pokemon_util_80A0058.h deleted file mode 100644 index f02193538..000000000 --- a/include/script_pokemon_util_80A0058.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef GUARD_SCRIPT_POKEMON_UTIL_80A0058_H -#define GUARD_SCRIPT_POKEMON_UTIL_80A0058_H - -bool8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unk1, u32 unk2, u8 unk3); -bool8 ScriptGiveEgg(u16 species); -void ScriptSetMonMoveSlot(u8 partyIdx, u16 move, u8 slot); -void HealPlayerParty(void); -void ReducePlayerPartyToThree(void); -void CreateScriptedWildMon(u16 species, u8 level, u16 item); - -#endif //GUARD_SCRIPT_POKEMON_UTIL_80A0058_H diff --git a/ld_script.txt b/ld_script.txt index 6b2a3fe23..2544f8d42 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -145,7 +145,7 @@ SECTIONS { src/script_menu.o(.text); asm/naming_screen.o(.text); src/money.o(.text); - src/script_pokemon_util_80A0058.o(.text); + src/script_pokemon_util.o(.text); src/field_poison.o(.text); src/pokemon_size_record.o(.text); src/pc_screen_effect.o(.text); diff --git a/src/battle_setup.c b/src/battle_setup.c index dee0c492b..056fe9273 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -9,7 +9,7 @@ #include "safari_zone.h" #include "quest_log.h" #include "script.h" -#include "script_pokemon_util_80A0058.h" +#include "script_pokemon_util.h" #include "strings.h" #include "string_util.h" #include "event_data.h" diff --git a/src/battle_tower.c b/src/battle_tower.c index c8098abf4..fb22d4fd1 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -18,7 +18,7 @@ #include "new_game.h" #include "save.h" #include "item.h" -#include "script_pokemon_util_80A0058.h" +#include "script_pokemon_util.h" #include "constants/species.h" #include "constants/items.h" #include "constants/moves.h" diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c index 1e61b9b77..112889710 100644 --- a/src/post_battle_event_funcs.c +++ b/src/post_battle_event_funcs.c @@ -1,5 +1,5 @@ #include "global.h" -#include "script_pokemon_util_80A0058.h" +#include "script_pokemon_util.h" #include "event_data.h" #include "credits.h" #include "overworld.h" diff --git a/src/scrcmd.c b/src/scrcmd.c index 6d2b1f430..4eaea9cef 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -27,7 +27,7 @@ #include "data.h" #include "field_specials.h" #include "constants/items.h" -#include "script_pokemon_util_80A0058.h" +#include "script_pokemon_util.h" #include "pokemon_storage_system.h" #include "party_menu.h" #include "money.h" diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c new file mode 100644 index 000000000..4069f09fa --- /dev/null +++ b/src/script_pokemon_util.c @@ -0,0 +1,217 @@ +#include "global.h" +#include "battle.h" +#include "berry.h" +#include "daycare.h" +#include "event_data.h" +#include "event_object_movement.h" +#include "load_save.h" +#include "malloc.h" +#include "overworld.h" +#include "party_menu.h" +#include "pokedex.h" +#include "script_pokemon_util.h" +#include "constants/items.h" +#include "constants/species.h" + +static void CB2_ReturnFromChooseHalfParty(void); +static void CB2_ReturnFromChooseBattleTowerParty(void); + +void HealPlayerParty(void) +{ + u8 i, j; + u8 ppBonuses; + u8 arg[4]; + + // restore HP. + for(i = 0; i < gPlayerPartyCount; i++) + { + u16 maxHP = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); + arg[0] = maxHP; + arg[1] = maxHP >> 8; + SetMonData(&gPlayerParty[i], MON_DATA_HP, arg); + ppBonuses = GetMonData(&gPlayerParty[i], MON_DATA_PP_BONUSES); + + // restore PP. + for(j = 0; j < MAX_MON_MOVES; j++) + { + arg[0] = CalculatePPWithBonus(GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j), ppBonuses, j); + SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, arg); + } + + // since status is u32, the four 0 assignments here are probably for safety to prevent undefined data from reaching SetMonData. + arg[0] = 0; + arg[1] = 0; + arg[2] = 0; + arg[3] = 0; + SetMonData(&gPlayerParty[i], MON_DATA_STATUS, arg); + } +} + +u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3) +{ + u16 nationalDexNum; + int sentToPc; + u8 heldItem[2]; + struct Pokemon *mon = AllocZeroed(sizeof(struct Pokemon)); + + CreateMon(mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0); + heldItem[0] = item; + heldItem[1] = item >> 8; + SetMonData(mon, MON_DATA_HELD_ITEM, heldItem); + sentToPc = GiveMonToPlayer(mon); + nationalDexNum = SpeciesToNationalPokedexNum(species); + + switch(sentToPc) + { + case MON_GIVEN_TO_PARTY: + case MON_GIVEN_TO_PC: + GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN); + GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT); + break; + } + + Free(mon); + return sentToPc; +} + +u8 ScriptGiveEgg(u16 species) +{ + struct Pokemon *mon = AllocZeroed(sizeof(struct Pokemon)); + bool8 isEgg; + bool8 sentToPc; + + CreateEgg(mon, species, TRUE); + isEgg = TRUE; + SetMonData(mon, MON_DATA_IS_EGG, &isEgg); + + sentToPc = GiveMonToPlayer(mon); + Free(mon); + return sentToPc; +} + +void HasEnoughMonsForDoubleBattle(void) +{ + switch (GetMonsStateToDoubles()) + { + case PLAYER_HAS_TWO_USABLE_MONS: + gSpecialVar_Result = PLAYER_HAS_TWO_USABLE_MONS; + break; + case PLAYER_HAS_ONE_MON: + gSpecialVar_Result = PLAYER_HAS_ONE_MON; + break; + case PLAYER_HAS_ONE_USABLE_MON: + gSpecialVar_Result = PLAYER_HAS_ONE_USABLE_MON; + break; + } +} + +static bool8 CheckPartyMonHasHeldItem(u16 item) +{ + int i; + + for(i = 0; i < PARTY_SIZE; i++) + { + u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item) + return TRUE; + } + return FALSE; +} + +bool8 GetNameOfEnigmaBerryInPlayerParty(void) +{ + bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY); + if (hasItem == TRUE) + GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1); + + return hasItem; +} + +void CreateScriptedWildMon(u16 species, u8 level, u16 item) +{ + u8 heldItem[2]; + + ZeroEnemyPartyMons(); + CreateMon(&gEnemyParty[0], species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0); + if (item) + { + heldItem[0] = item; + heldItem[1] = item >> 8; + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem); + } +} + +void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot) +{ + if (monIndex > PARTY_SIZE) + monIndex = gPlayerPartyCount - 1; + + SetMonMoveSlot(&gPlayerParty[monIndex], move, slot); +} + +// Note: When control returns to the event script, gSpecialVar_Result will be +// TRUE if the party selection was successful. +void ChooseHalfPartyForBattle(void) +{ + gMain.savedCallback = CB2_ReturnFromChooseHalfParty; +// VarSet(VAR_FRONTIER_FACILITY, FACILITY_MULTI_OR_EREADER); + InitChooseHalfPartyForBattle(0); +} + +static void CB2_ReturnFromChooseHalfParty(void) +{ + switch (gSelectedOrderFromParty[0]) + { + case 0: + gSpecialVar_Result = FALSE; + break; + default: + gSpecialVar_Result = TRUE; + break; + } + + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); +} + +void ChooseBattleTowerPlayerParty(void) +{ + gMain.savedCallback = CB2_ReturnFromChooseBattleTowerParty; + InitChooseHalfPartyForBattle(1); +} + +static void CB2_ReturnFromChooseBattleTowerParty(void) +{ + switch (gSelectedOrderFromParty[0]) + { + case 0: + LoadPlayerParty(); + gSpecialVar_Result = FALSE; + break; + default: + ReducePlayerPartyToThree(); + gSpecialVar_Result = TRUE; + break; + } + + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); +} + +void ReducePlayerPartyToThree(void) +{ + struct Pokemon * party = AllocZeroed(3 * sizeof(struct Pokemon)); + int i; + + // copy the selected pokemon according to the order. + for (i = 0; i < 3; i++) + if (gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop + party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal + + CpuFill32(0, gPlayerParty, sizeof gPlayerParty); + + // overwrite the first 3 with the order copied to. + for (i = 0; i < 3; i++) + gPlayerParty[i] = party[i]; + + CalculatePlayerPartyCount(); + Free(party); +} diff --git a/src/script_pokemon_util_80A0058.c b/src/script_pokemon_util_80A0058.c deleted file mode 100644 index 6477f4a4d..000000000 --- a/src/script_pokemon_util_80A0058.c +++ /dev/null @@ -1,217 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "berry.h" -#include "daycare.h" -#include "event_data.h" -#include "event_object_movement.h" -#include "load_save.h" -#include "malloc.h" -#include "overworld.h" -#include "party_menu.h" -#include "pokedex.h" -#include "script_pokemon_util_80A0058.h" -#include "constants/items.h" -#include "constants/species.h" - -static void CB2_ReturnFromChooseHalfParty(void); -static void CB2_ReturnFromChooseBattleTowerParty(void); - -void HealPlayerParty(void) -{ - u8 i, j; - u8 ppBonuses; - u8 arg[4]; - - // restore HP. - for(i = 0; i < gPlayerPartyCount; i++) - { - u16 maxHP = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); - arg[0] = maxHP; - arg[1] = maxHP >> 8; - SetMonData(&gPlayerParty[i], MON_DATA_HP, arg); - ppBonuses = GetMonData(&gPlayerParty[i], MON_DATA_PP_BONUSES); - - // restore PP. - for(j = 0; j < MAX_MON_MOVES; j++) - { - arg[0] = CalculatePPWithBonus(GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j), ppBonuses, j); - SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, arg); - } - - // since status is u32, the four 0 assignments here are probably for safety to prevent undefined data from reaching SetMonData. - arg[0] = 0; - arg[1] = 0; - arg[2] = 0; - arg[3] = 0; - SetMonData(&gPlayerParty[i], MON_DATA_STATUS, arg); - } -} - -u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3) -{ - u16 nationalDexNum; - int sentToPc; - u8 heldItem[2]; - struct Pokemon *mon = AllocZeroed(sizeof(struct Pokemon)); - - CreateMon(mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0); - heldItem[0] = item; - heldItem[1] = item >> 8; - SetMonData(mon, MON_DATA_HELD_ITEM, heldItem); - sentToPc = GiveMonToPlayer(mon); - nationalDexNum = SpeciesToNationalPokedexNum(species); - - switch(sentToPc) - { - case 0: - case 1: - GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN); - GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT); - break; - } - - Free(mon); - return sentToPc; -} - -u8 ScriptGiveEgg(u16 species) -{ - struct Pokemon *mon = AllocZeroed(sizeof(struct Pokemon)); - bool8 isEgg; - bool8 sentToPc; - - CreateEgg(mon, species, TRUE); - isEgg = TRUE; - SetMonData(mon, MON_DATA_IS_EGG, &isEgg); - - sentToPc = GiveMonToPlayer(mon); - Free(mon); - return sentToPc; -} - -void HasEnoughMonsForDoubleBattle(void) -{ - switch (GetMonsStateToDoubles()) - { - case PLAYER_HAS_TWO_USABLE_MONS: - gSpecialVar_Result = PLAYER_HAS_TWO_USABLE_MONS; - break; - case PLAYER_HAS_ONE_MON: - gSpecialVar_Result = PLAYER_HAS_ONE_MON; - break; - case PLAYER_HAS_ONE_USABLE_MON: - gSpecialVar_Result = PLAYER_HAS_ONE_USABLE_MON; - break; - } -} - -static bool8 CheckPartyMonHasHeldItem(u16 item) -{ - int i; - - for(i = 0; i < PARTY_SIZE; i++) - { - u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); - if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item) - return TRUE; - } - return FALSE; -} - -bool8 GetNameOfEnigmaBerryInPlayerParty(void) -{ - bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY); - if (hasItem == TRUE) - GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1); - - return hasItem; -} - -void CreateScriptedWildMon(u16 species, u8 level, u16 item) -{ - u8 heldItem[2]; - - ZeroEnemyPartyMons(); - CreateMon(&gEnemyParty[0], species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0); - if (item) - { - heldItem[0] = item; - heldItem[1] = item >> 8; - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem); - } -} - -void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot) -{ - if (monIndex > PARTY_SIZE) - monIndex = gPlayerPartyCount - 1; - - SetMonMoveSlot(&gPlayerParty[monIndex], move, slot); -} - -// Note: When control returns to the event script, gSpecialVar_Result will be -// TRUE if the party selection was successful. -void ChooseHalfPartyForBattle(void) -{ - gMain.savedCallback = CB2_ReturnFromChooseHalfParty; -// VarSet(VAR_FRONTIER_FACILITY, FACILITY_MULTI_OR_EREADER); - InitChooseHalfPartyForBattle(0); -} - -static void CB2_ReturnFromChooseHalfParty(void) -{ - switch (gSelectedOrderFromParty[0]) - { - case 0: - gSpecialVar_Result = FALSE; - break; - default: - gSpecialVar_Result = TRUE; - break; - } - - SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); -} - -void ChooseBattleTowerPlayerParty(void) -{ - gMain.savedCallback = CB2_ReturnFromChooseBattleTowerParty; - InitChooseHalfPartyForBattle(1); -} - -static void CB2_ReturnFromChooseBattleTowerParty(void) -{ - switch (gSelectedOrderFromParty[0]) - { - case 0: - LoadPlayerParty(); - gSpecialVar_Result = FALSE; - break; - default: - ReducePlayerPartyToThree(); - gSpecialVar_Result = TRUE; - break; - } - - SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); -} - -void ReducePlayerPartyToThree(void) -{ - struct Pokemon * party = AllocZeroed(3 * sizeof(struct Pokemon)); - int i; - - // copy the selected pokemon according to the order. - for (i = 0; i < 3; i++) - if (gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop - party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal - - CpuFill32(0, gPlayerParty, sizeof gPlayerParty); - - // overwrite the first 3 with the order copied to. - for (i = 0; i < 3; i++) - gPlayerParty[i] = party[i]; - - CalculatePlayerPartyCount(); - Free(party); -} -- cgit v1.2.3 From 483613e128d8dc5b419ea9ff83c92aa2e4e55042 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 12 Jan 2020 14:45:53 -0500 Subject: Fix header guard --- include/script_pokemon_util.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/script_pokemon_util.h b/include/script_pokemon_util.h index f02193538..5f7dc4306 100644 --- a/include/script_pokemon_util.h +++ b/include/script_pokemon_util.h @@ -1,5 +1,5 @@ -#ifndef GUARD_SCRIPT_POKEMON_UTIL_80A0058_H -#define GUARD_SCRIPT_POKEMON_UTIL_80A0058_H +#ifndef GUARD_SCRIPT_POKEMON_UTIL_H +#define GUARD_SCRIPT_POKEMON_UTIL_H bool8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unk1, u32 unk2, u8 unk3); bool8 ScriptGiveEgg(u16 species); @@ -8,4 +8,4 @@ void HealPlayerParty(void); void ReducePlayerPartyToThree(void); void CreateScriptedWildMon(u16 species, u8 level, u16 item); -#endif //GUARD_SCRIPT_POKEMON_UTIL_80A0058_H +#endif //GUARD_SCRIPT_POKEMON_UTIL_H -- cgit v1.2.3