diff options
-rw-r--r-- | asm/cable_club.s | 2 | ||||
-rw-r--r-- | asm/easy_chat.s | 4 | ||||
-rw-r--r-- | asm/event_data.s | 6 | ||||
-rw-r--r-- | asm/evolution_scene.s | 4 | ||||
-rw-r--r-- | asm/link.s | 384 | ||||
-rw-r--r-- | asm/link_rfu_2.s | 4 | ||||
-rw-r--r-- | asm/main_menu.s | 6 | ||||
-rw-r--r-- | asm/party_menu.s | 2 | ||||
-rw-r--r-- | asm/pokedex_screen.s | 14 | ||||
-rw-r--r-- | asm/save_menu_util.s | 2 | ||||
-rw-r--r-- | asm/trade.s | 2 | ||||
-rw-r--r-- | asm/trainer_card.s | 2 | ||||
-rw-r--r-- | data/data.s | 4 | ||||
-rw-r--r-- | data/map_event_scripts.inc | 2 | ||||
-rw-r--r-- | data/maps/IndigoPlateau_PokemonCenter_1F/scripts.inc | 4 | ||||
-rw-r--r-- | data/maps/OneIsland_PokemonCenter_1F/scripts.inc | 2 | ||||
-rw-r--r-- | data/maps/ThreeIsland_DunsparceTunnel/scripts.inc | 4 | ||||
-rw-r--r-- | data/specials.inc | 4 | ||||
-rw-r--r-- | include/event_data.h | 2 | ||||
-rw-r--r-- | include/librfu.h | 125 | ||||
-rw-r--r-- | include/link_rfu.h | 3 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/link.c | 153 | ||||
-rw-r--r-- | src/pokemon.c | 4 | ||||
-rw-r--r-- | src/prof_pc.c | 2 | ||||
-rw-r--r-- | sym_common.txt | 2 |
26 files changed, 332 insertions, 412 deletions
diff --git a/asm/cable_club.s b/asm/cable_club.s index a20b4310c..4b93df7e4 100644 --- a/asm/cable_club.s +++ b/asm/cable_club.s @@ -2087,7 +2087,7 @@ _080817C0: bl sub_8057F34 ldr r0, _080817DC @ =gSpecialVar_0x8005 ldrb r0, [r0] - bl sub_80096F8 + bl SetLocalLinkPlayerId movs r0, 0x2 strh r0, [r5, 0x8] b _08081820 diff --git a/asm/easy_chat.s b/asm/easy_chat.s index 604929f1f..7019ae3c0 100644 --- a/asm/easy_chat.s +++ b/asm/easy_chat.s @@ -797,7 +797,7 @@ _080BDCA4: .4byte 0x0000ffff thumb_func_start sub_80BDCA8 sub_80BDCA8: @ 80BDCA8 push {lr} - bl sub_806E25C + bl IsNationalPokedexEnabled lsls r0, 24 lsrs r0, 24 pop {r1} @@ -1116,7 +1116,7 @@ _080BDEB2: movs r0, 0x13 strh r0, [r3] _080BDF0C: - bl sub_806E25C + bl IsNationalPokedexEnabled cmp r0, 0 beq _080BDF2A ldr r0, _080BDF30 @ =gUnknown_20399BC diff --git a/asm/event_data.s b/asm/event_data.s index 690134c27..e219a7ed9 100644 --- a/asm/event_data.s +++ b/asm/event_data.s @@ -193,8 +193,8 @@ _0806E254: .4byte gSaveBlock2Ptr _0806E258: .4byte 0x00006258 thumb_func_end EnableNationalPokedex - thumb_func_start sub_806E25C -sub_806E25C: @ 806E25C + thumb_func_start IsNationalPokedexEnabled +IsNationalPokedexEnabled: @ 806E25C push {lr} ldr r0, _0806E288 @ =gSaveBlock2Ptr ldr r0, [r0] @@ -224,7 +224,7 @@ _0806E294: _0806E296: pop {r1} bx r1 - thumb_func_end sub_806E25C + thumb_func_end IsNationalPokedexEnabled thumb_func_start sub_806E29C sub_806E29C: @ 806E29C diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s index d88145fde..1ffe9b0db 100644 --- a/asm/evolution_scene.s +++ b/asm/evolution_scene.s @@ -1321,7 +1321,7 @@ sub_80CE8DC: @ 80CE8DC ldr r0, _080CE940 @ =gPlayerParty adds r1, r0 mov r9, r1 - bl sub_806E25C + bl IsNationalPokedexEnabled mov r10, r4 cmp r0, 0 bne _080CE948 @@ -2736,7 +2736,7 @@ sub_80CF53C: @ 80CF53C ldr r0, _080CF5C0 @ =gPlayerParty adds r1, r0 mov r8, r1 - bl sub_806E25C + bl IsNationalPokedexEnabled cmp r0, 0 bne _080CF598 movs r1, 0x8 diff --git a/asm/link.s b/asm/link.s index 80b4f5f6a..b5eefe73e 100644 --- a/asm/link.s +++ b/asm/link.s @@ -5,368 +5,6 @@ .text - thumb_func_start sub_8009480 -sub_8009480: @ 8009480 - push {lr} - ldr r0, _08009494 @ =gUnknown_203ADFA - ldrb r0, [r0] - subs r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08009498 - movs r0, 0 - b _080094CE - .align 2, 0 -_08009494: .4byte gUnknown_203ADFA -_08009498: - bl sub_800B1F4 - bl sub_80F86F4 - movs r0, 0x1 - bl sub_80FB128 - bl sub_80FD3A4 - ldr r1, _080094C0 @ =0x00008001 - cmp r0, r1 - beq _080094C4 - bl sub_800B210 - bl CloseLink - bl RestoreSerialTimer3IntrHandlers - movs r0, 0 - b _080094CE - .align 2, 0 -_080094C0: .4byte 0x00008001 -_080094C4: - bl rfu_REQ_stopMode - bl rfu_waitREQComplete - movs r0, 0x1 -_080094CE: - pop {r1} - bx r1 - thumb_func_end sub_8009480 - - thumb_func_start sub_80094D4 -sub_80094D4: @ 80094D4 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - pop {r0} - bx r0 - thumb_func_end sub_80094D4 - - thumb_func_start sub_80094E4 -sub_80094E4: @ 80094E4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r5, r0, 0 - ldr r4, [sp, 0x18] - lsls r5, 24 - lsrs r5, 24 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - lsls r2, 24 - lsrs r6, r2, 24 - lsls r3, 24 - lsrs r7, r3, 24 - lsls r4, 16 - lsrs r4, 16 - ldr r0, _08009540 @ =gUnknown_8232578 - lsls r1, r5, 4 - movs r2, 0x20 - bl LoadPalette - ldr r3, _08009544 @ =0x040000d4 - ldr r0, _08009548 @ =gUnknown_8232598 - str r0, [r3] - lsls r2, r7, 14 - lsls r0, r4, 5 - movs r1, 0xC0 - lsls r1, 19 - adds r0, r1 - adds r2, r0 - str r2, [r3, 0x4] - ldr r0, _0800954C @ =0x80001000 - str r0, [r3, 0x8] - ldr r0, [r3, 0x8] - ldr r0, _08009550 @ =gUnknown_3003F70 - str r6, [r0] - str r5, [r0, 0x4] - str r4, [r0, 0x8] - mov r0, r8 - cmp r0, 0x2 - beq _0800956E - cmp r0, 0x2 - bgt _08009554 - cmp r0, 0x1 - beq _0800955C - b _08009590 - .align 2, 0 -_08009540: .4byte gUnknown_8232578 -_08009544: .4byte 0x040000d4 -_08009548: .4byte gUnknown_8232598 -_0800954C: .4byte 0x80001000 -_08009550: .4byte gUnknown_3003F70 -_08009554: - mov r0, r8 - cmp r0, 0x3 - beq _08009580 - b _08009590 -_0800955C: - lsls r1, r6, 8 - movs r0, 0x1 - orrs r1, r0 - lsls r0, r7, 2 - orrs r1, r0 - movs r0, 0xA - bl SetGpuReg - b _08009590 -_0800956E: - lsls r1, r6, 8 - movs r0, 0x1 - orrs r1, r0 - lsls r0, r7, 2 - orrs r1, r0 - movs r0, 0xC - bl SetGpuReg - b _08009590 -_08009580: - lsls r1, r6, 8 - movs r0, 0x1 - orrs r1, r0 - lsls r0, r7, 2 - orrs r1, r0 - movs r0, 0xE - bl SetGpuReg -_08009590: - mov r0, r8 - lsls r4, r0, 2 - adds r0, r4, 0 - adds r0, 0x10 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl SetGpuReg - adds r4, 0x12 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - movs r1, 0 - bl SetGpuReg - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80094E4 - - thumb_func_start sub_80095BC -sub_80095BC: @ 80095BC - push {r4-r6,lr} - mov r6, r8 - push {r6} - mov r8, r0 - adds r6, r1, 0 - adds r4, r2, 0 - adds r5, r3, 0 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r6, 24 - lsrs r6, 24 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - ldr r0, _08009628 @ =gUnknown_8232578 - mov r2, r8 - lsls r1, r2, 4 - movs r2, 0x20 - bl LoadPalette - ldr r2, _0800962C @ =0x040000d4 - ldr r0, _08009630 @ =gUnknown_8232598 - str r0, [r2] - lsls r0, r5, 14 - movs r1, 0xC0 - lsls r1, 19 - adds r0, r1 - str r0, [r2, 0x4] - ldr r0, _08009634 @ =0x80001000 - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - ldr r0, _08009638 @ =gUnknown_3003F70 - str r4, [r0] - mov r1, r8 - str r1, [r0, 0x4] - movs r1, 0 - str r1, [r0, 0x8] - ldr r0, _0800963C @ =gBGControlRegOffsets - adds r6, r0 - ldrb r0, [r6] - lsls r4, 8 - lsls r5, 2 - orrs r4, r5 - adds r1, r4, 0 - bl SetGpuReg - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08009628: .4byte gUnknown_8232578 -_0800962C: .4byte 0x040000d4 -_08009630: .4byte gUnknown_8232598 -_08009634: .4byte 0x80001000 -_08009638: .4byte gUnknown_3003F70 -_0800963C: .4byte gBGControlRegOffsets - thumb_func_end sub_80095BC - - thumb_func_start sub_8009640 -sub_8009640: @ 8009640 - push {r4,lr} - sub sp, 0x4 - bl ResetSpriteData - bl FreeAllSpritePalettes - bl ResetTasks - ldr r0, _080096D4 @ =sub_800978C - bl SetVBlankCallback - bl ResetBlockSend - ldr r1, _080096D8 @ =gLinkType - ldr r2, _080096DC @ =0x00001111 - adds r0, r2, 0 - strh r0, [r1] - bl OpenLink - ldr r0, _080096E0 @ =gMain - ldrh r0, [r0, 0x24] - bl SeedRng - movs r4, 0 -_08009670: - bl Random - ldr r1, _080096E4 @ =gSaveBlock2Ptr - ldr r1, [r1] - adds r1, 0xA - adds r1, r4 - strb r0, [r1] - adds r4, 0x1 - cmp r4, 0x3 - ble _08009670 - movs r4, 0 - str r4, [sp] - movs r0, 0 - movs r1, 0x2 - movs r2, 0x4 - movs r3, 0 - bl sub_80094E4 - movs r1, 0xAA - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - ldr r0, _080096E8 @ =sub_80094D4 - movs r1, 0 - bl CreateTask - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - ldr r0, _080096EC @ =gUnknown_3000E58 - str r4, [r0] - bl sub_8009708 - ldr r0, _080096F0 @ =task00_link_test - movs r1, 0 - bl CreateTask - ldr r0, _080096F4 @ =c2_08009A8C - bl SetMainCallback2 - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080096D4: .4byte sub_800978C -_080096D8: .4byte gLinkType -_080096DC: .4byte 0x00001111 -_080096E0: .4byte gMain -_080096E4: .4byte gSaveBlock2Ptr -_080096E8: .4byte sub_80094D4 -_080096EC: .4byte gUnknown_3000E58 -_080096F0: .4byte task00_link_test -_080096F4: .4byte c2_08009A8C - thumb_func_end sub_8009640 - - thumb_func_start sub_80096F8 -sub_80096F8: @ 80096F8 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08009704 @ =gLocalLinkPlayer - strh r0, [r1, 0x18] - bx lr - .align 2, 0 -_08009704: .4byte gLocalLinkPlayer - thumb_func_end sub_80096F8 - - thumb_func_start sub_8009708 -sub_8009708: @ 8009708 - push {r4,r5,lr} - ldr r5, _08009774 @ =gLocalLinkPlayer - ldr r4, _08009778 @ =gSaveBlock2Ptr - ldr r1, [r4] - ldrb r2, [r1, 0xA] - ldrb r0, [r1, 0xB] - lsls r0, 8 - orrs r2, r0 - ldrb r0, [r1, 0xC] - lsls r0, 16 - orrs r2, r0 - ldrb r0, [r1, 0xD] - lsls r0, 24 - orrs r2, r0 - str r2, [r5, 0x4] - adds r0, r5, 0 - adds r0, 0x8 - bl StringCopy - ldr r0, [r4] - ldrb r0, [r0, 0x8] - strb r0, [r5, 0x13] - ldr r0, _0800977C @ =gLinkType - ldrh r0, [r0] - str r0, [r5, 0x14] - ldr r0, _08009780 @ =gGameLanguage - ldrb r0, [r0] - strh r0, [r5, 0x1A] - ldr r0, _08009784 @ =gGameVersion - ldrb r0, [r0] - movs r2, 0x80 - lsls r2, 7 - adds r1, r2, 0 - adds r0, r1 - strh r0, [r5] - movs r0, 0x80 - lsls r0, 8 - strh r0, [r5, 0x2] - bl sub_806E25C - strb r0, [r5, 0x10] - ldr r0, _08009788 @ =0x00000844 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _0800976E - ldrb r0, [r5, 0x10] - movs r1, 0x10 - orrs r0, r1 - strb r0, [r5, 0x10] -_0800976E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08009774: .4byte gLocalLinkPlayer -_08009778: .4byte gSaveBlock2Ptr -_0800977C: .4byte gLinkType -_08009780: .4byte gGameLanguage -_08009784: .4byte gGameVersion -_08009788: .4byte 0x00000844 - thumb_func_end sub_8009708 - thumb_func_start sub_800978C sub_800978C: @ 800978C push {lr} @@ -736,8 +374,8 @@ _08009A84: .4byte gLinkVSyncDisabled _08009A88: .4byte gUnknown_3003F80 thumb_func_end LinkTestProcessKeyInput - thumb_func_start c2_08009A8C -c2_08009A8C: @ 8009A8C + thumb_func_start CB2_LinkTest +CB2_LinkTest: @ 8009A8C push {lr} bl LinkTestProcessKeyInput movs r0, 0x1 @@ -750,7 +388,7 @@ c2_08009A8C: @ 8009A8C bl UpdatePaletteFade pop {r0} bx r0 - thumb_func_end c2_08009A8C + thumb_func_end CB2_LinkTest thumb_func_start LinkMain2 LinkMain2: @ 8009AB0 @@ -956,7 +594,7 @@ _08009C2C: _08009C30: .4byte 0x0000cafe _08009C34: .4byte 0x0000cccc _08009C38: - bl sub_8009708 + bl InitLocalLinkPlayer ldr r0, _08009C7C @ =gUnknown_3003E70 adds r2, r0, 0 adds r2, 0x10 @@ -2326,7 +1964,7 @@ PrintHexDigit: @ 800A614 lsls r1, 24 lsrs r1, 24 lsls r2, 24 - ldr r4, _0800A648 @ =gUnknown_3003F70 + ldr r4, _0800A648 @ =gLinkTestBGInfo ldr r3, [r4] lsls r3, 11 movs r5, 0xC0 @@ -2347,7 +1985,7 @@ PrintHexDigit: @ 800A614 pop {r0} bx r0 .align 2, 0 -_0800A648: .4byte gUnknown_3003F70 +_0800A648: .4byte gLinkTestBGInfo thumb_func_end PrintHexDigit thumb_func_start sub_800A64C @@ -2358,7 +1996,7 @@ sub_800A64C: @ 800A64C lsls r1, 24 lsrs r1, 24 lsls r2, 24 - ldr r4, _0800A680 @ =gUnknown_3003F70 + ldr r4, _0800A680 @ =gLinkTestBGInfo ldr r3, [r4] lsls r3, 11 movs r5, 0xC0 @@ -2378,7 +2016,7 @@ sub_800A64C: @ 800A64C pop {r0} bx r0 .align 2, 0 -_0800A680: .4byte gUnknown_3003F70 +_0800A680: .4byte gLinkTestBGInfo thumb_func_end sub_800A64C thumb_func_start sub_800A684 @@ -3315,7 +2953,7 @@ _0800AD30: ldr r1, _0800AE0C @ =gSoftResetDisabled movs r0, 0 strb r0, [r1] - ldr r0, _0800AE10 @ =sub_80094D4 + ldr r0, _0800AE10 @ =Task_DestroySelf movs r1, 0 bl CreateTask bl StopMapMusic @@ -3345,7 +2983,7 @@ _0800AE00: .4byte gUnknown_2022860 _0800AE04: .4byte gUnknown_82345F0 _0800AE08: .4byte gTMCaseMainWindowPalette _0800AE0C: .4byte gSoftResetDisabled -_0800AE10: .4byte sub_80094D4 +_0800AE10: .4byte Task_DestroySelf _0800AE14: .4byte gMain _0800AE18: .4byte sub_800AF2C thumb_func_end c2_800ACD4 @@ -3679,7 +3317,7 @@ _0800B0B0: .4byte gUnknown_3003EAC thumb_func_start sub_800B0B4 sub_800B0B4: @ 800B0B4 push {r4-r6,lr} - bl sub_8009708 + bl InitLocalLinkPlayer ldr r1, _0800B100 @ =gUnknown_3003E70 adds r2, r1, 0 adds r2, 0x10 diff --git a/asm/link_rfu_2.s b/asm/link_rfu_2.s index d4934caa9..316b994a0 100644 --- a/asm/link_rfu_2.s +++ b/asm/link_rfu_2.s @@ -6866,7 +6866,7 @@ sub_80FBA78: @ 80FBA78 bl ResetPaletteFade ldr r0, _080FBAF4 @ =sub_80FBA64 bl SetVBlankCallback - bl sub_8009480 + bl IsWirelessAdapterConnected lsls r0, 24 cmp r0, 0 beq _080FBAEC @@ -9184,7 +9184,7 @@ _080FCB88: ands r4, r1 orrs r4, r0 strb r4, [r7] - bl sub_806E25C + bl IsNationalPokedexEnabled ands r0, r6 ldrb r1, [r7, 0x1] ands r5, r1 diff --git a/asm/main_menu.s b/asm/main_menu.s index fed088ff3..76c9f8838 100644 --- a/asm/main_menu.s +++ b/asm/main_menu.s @@ -948,7 +948,7 @@ _0800CAEE: movs r0, 0 b _0800CB22 _0800CAF2: - bl sub_8009480 + bl IsWirelessAdapterConnected lsls r0, 24 lsrs r5, r0, 24 cmp r5, 0 @@ -1227,7 +1227,7 @@ sub_800CCF8: @ 800CCF8 beq _0800CD44 movs r0, 0x5 bl PlaySE - bl sub_8009480 + bl IsWirelessAdapterConnected movs r0, 0x1 negs r0, r0 movs r1, 0 @@ -1500,7 +1500,7 @@ sub_800CF3C: @ 800CF3C lsrs r0, 24 cmp r0, 0x1 bne _0800CFAE - bl sub_806E25C + bl IsNationalPokedexEnabled cmp r0, 0 beq _0800CF64 movs r0, 0x1 diff --git a/asm/party_menu.s b/asm/party_menu.s index 44a250e82..899e8e7ea 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -16284,7 +16284,7 @@ _08126C20: .4byte 0x0000ffff thumb_func_start sub_8126C24 sub_8126C24: @ 8126C24 push {lr} - bl sub_806E25C + bl IsNationalPokedexEnabled cmp r0, 0 bne _08126C60 ldr r0, _08126C54 @ =gUnknown_203B0A0 diff --git a/asm/pokedex_screen.s b/asm/pokedex_screen.s index 2f0682c94..b0b53da55 100644 --- a/asm/pokedex_screen.s +++ b/asm/pokedex_screen.s @@ -49,7 +49,7 @@ sub_810250C: @ 810250C mov r6, r8 push {r6} sub sp, 0xC - bl sub_806E25C + bl IsNationalPokedexEnabled lsls r0, 24 lsrs r6, r0, 24 bl m4aSoundVSyncOff @@ -594,7 +594,7 @@ _081029D0: adds r1, 0x62 movs r2, 0 bl ListMenuGetScrollAndRow - bl sub_806E25C + bl IsNationalPokedexEnabled cmp r0, 0 beq _081029F4 ldr r0, _081029F0 @ =gUnknown_84520E4 @@ -915,7 +915,7 @@ sub_8102C28: @ 8102C28 bl AddWindow ldr r1, [r7] strb r0, [r1, 0x16] - bl sub_806E25C + bl IsNationalPokedexEnabled adds r5, r0, 0 cmp r5, 0 bne _08102C9E @@ -1904,7 +1904,7 @@ sub_8103518: @ 8103518 sub sp, 0x4 lsls r0, 24 lsrs r4, r0, 24 - bl sub_806E25C + bl IsNationalPokedexEnabled movs r1, 0x97 str r1, [sp] cmp r0, 0 @@ -5594,7 +5594,7 @@ sub_81052D0: @ 81052D0 sub sp, 0x8 lsls r0, 24 lsrs r6, r0, 24 - bl sub_806E25C + bl IsNationalPokedexEnabled cmp r0, 0 beq _081052E8 ldr r0, _081052E4 @ =gUnknown_84406E0 @@ -8137,7 +8137,7 @@ sub_8106810: @ 8106810 push {r4,lr} lsls r0, 16 lsrs r4, r0, 16 - bl sub_806E25C + bl IsNationalPokedexEnabled cmp r0, 0x1 beq _08106830 adds r0, r4, 0 @@ -8609,7 +8609,7 @@ sub_8106B60: @ 8106B60 movs r1, 0x3 movs r2, 0x1 bl sub_8104AB0 - bl sub_806E25C + bl IsNationalPokedexEnabled cmp r0, 0 bne _08106BA4 adds r0, r5, 0 diff --git a/asm/save_menu_util.s b/asm/save_menu_util.s index 2d2866914..1cb9d85a3 100644 --- a/asm/save_menu_util.s +++ b/asm/save_menu_util.s @@ -55,7 +55,7 @@ _080F8024: .align 2, 0 _080F8030: .4byte gSaveBlock2Ptr _080F8034: - bl sub_806E25C + bl IsNationalPokedexEnabled cmp r0, 0 beq _080F8044 movs r0, 0x1 diff --git a/asm/trade.s b/asm/trade.s index 42097bd3e..4c3932ef1 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -6443,7 +6443,7 @@ _0804FA2C: cmp r5, r7 blt _0804FA2C _0804FA4E: - bl sub_806E25C + bl IsNationalPokedexEnabled mov r1, r9 lsls r4, r1, 2 cmp r0, 0 diff --git a/asm/trainer_card.s b/asm/trainer_card.s index 787a9748a..9a28cbc5e 100644 --- a/asm/trainer_card.s +++ b/asm/trainer_card.s @@ -2039,7 +2039,7 @@ _0808A0DC: .4byte gUnknown_8419CE7 thumb_func_start sub_808A0E0 sub_808A0E0: @ 808A0E0 push {lr} - bl sub_806E25C + bl IsNationalPokedexEnabled cmp r0, 0 bne _0808A0F2 movs r0, 0x1 diff --git a/data/data.s b/data/data.s index eb755739a..018135521 100644 --- a/data/data.s +++ b/data/data.s @@ -19,10 +19,10 @@ gWirelessLinkDisplayBin:: @ 823238C .incbin "graphics/interface/wireless_link_display.bin.lz" .align 2 -gUnknown_8232578:: @ 8232578 +gLinkTestDigitsPal:: @ 8232578 .incbin "baserom.gba", 0x232578, 0x20 -gUnknown_8232598:: @ 8232598 +gLinkTestDigitsGfx:: @ 8232598 .incbin "baserom.gba", 0x232598, 0x2000 gUnknown_8234598:: @ 8234598 diff --git a/data/map_event_scripts.inc b/data/map_event_scripts.inc index c333c6336..d485777f3 100644 --- a/data/map_event_scripts.inc +++ b/data/map_event_scripts.inc @@ -1492,7 +1492,7 @@ EventScript_1A651A:: @ 81A651A clearflag FLAG_0x09D call EventScript_1A6551 special sub_81130A8 - specialvar VAR_RESULT, sub_806E25C + specialvar VAR_RESULT, IsNationalPokedexEnabled compare_var_to_value VAR_RESULT, 0 call_if 1, EventScript_1A653B call EventScript_1A6541 diff --git a/data/maps/IndigoPlateau_PokemonCenter_1F/scripts.inc b/data/maps/IndigoPlateau_PokemonCenter_1F/scripts.inc index 7dae5f353..048ca96d6 100644 --- a/data/maps/IndigoPlateau_PokemonCenter_1F/scripts.inc +++ b/data/maps/IndigoPlateau_PokemonCenter_1F/scripts.inc @@ -5,7 +5,7 @@ IndigoPlateau_PokemonCenter_1F_MapScripts:: @ 816EA5A IndigoPlateau_PokemonCenter_1F_MapScript1_16EA65:: @ 816EA65 setrespawn SPAWN_INDIGO_PLATEAU - specialvar VAR_RESULT, sub_806E25C + specialvar VAR_RESULT, IsNationalPokedexEnabled compare_var_to_value VAR_RESULT, 1 call_if 1, EventScript_16EA79 end @@ -19,7 +19,7 @@ EventScript_16EA79:: @ 816EA79 IndigoPlateau_PokemonCenter_1F_EventScript_16EA8A:: @ 816EA8A lock faceplayer - specialvar VAR_RESULT, sub_806E25C + specialvar VAR_RESULT, IsNationalPokedexEnabled compare_var_to_value VAR_RESULT, 1 goto_if_eq EventScript_16EAA6 msgbox gUnknown_819A8D8 diff --git a/data/maps/OneIsland_PokemonCenter_1F/scripts.inc b/data/maps/OneIsland_PokemonCenter_1F/scripts.inc index 7a1941f72..83a42e67d 100644 --- a/data/maps/OneIsland_PokemonCenter_1F/scripts.inc +++ b/data/maps/OneIsland_PokemonCenter_1F/scripts.inc @@ -220,7 +220,7 @@ OneIsland_PokemonCenter_1F_EventScript_170EC5:: @ 8170EC5 goto_if_eq EventScript_171044 compare_var_to_value VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 4 goto_if_eq EventScript_1710F2 - specialvar VAR_RESULT, sub_806E25C + specialvar VAR_RESULT, IsNationalPokedexEnabled compare_var_to_value VAR_RESULT, 1 goto_if_eq EventScript_1710FC compare_var_to_value VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 3 diff --git a/data/maps/ThreeIsland_DunsparceTunnel/scripts.inc b/data/maps/ThreeIsland_DunsparceTunnel/scripts.inc index 9fc141070..7cdedc60c 100644 --- a/data/maps/ThreeIsland_DunsparceTunnel/scripts.inc +++ b/data/maps/ThreeIsland_DunsparceTunnel/scripts.inc @@ -4,7 +4,7 @@ ThreeIsland_DunsparceTunnel_MapScripts:: @ 8164D26 ThreeIsland_DunsparceTunnel_MapScript1_164D2C:: @ 8164D2C setworldmapflag FLAG_WORLD_MAP_THREE_ISLAND_DUNSPARCE_TUNNEL - specialvar VAR_RESULT, sub_806E25C + specialvar VAR_RESULT, IsNationalPokedexEnabled copyvar VAR_0x8008, VAR_RESULT compare_var_to_value VAR_0x8008, 1 call_if 1, EventScript_164D50 @@ -26,7 +26,7 @@ ThreeIsland_DunsparceTunnel_EventScript_164D60:: @ 8164D60 faceplayer checkflag FLAG_0x2E2 goto_if_eq EventScript_164DC2 - specialvar VAR_RESULT, sub_806E25C + specialvar VAR_RESULT, IsNationalPokedexEnabled compare_var_to_value VAR_RESULT, 1 goto_if_eq EventScript_164D90 msgbox gUnknown_817D13B diff --git a/data/specials.inc b/data/specials.inc index c99d484d4..5e9a3aeae 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -371,7 +371,7 @@ gSpecials:: @ 815FD60 def_special sub_80CC2BC def_special sub_80CC3CC def_special sub_80CC524 - def_special sub_8009480 + def_special IsWirelessAdapterConnected def_special sub_8115A24 def_special BerryBlenderLinkJoinGroup def_special UnionRoomSpecial @@ -412,7 +412,7 @@ gSpecials:: @ 815FD60 def_special sub_812B35C def_special Special_SSAnneDepartureCutscene def_special sub_8149A18 - def_special sub_806E25C + def_special IsNationalPokedexEnabled def_special sub_815D9E8 def_special sub_814B504 def_special sub_80CC8CC diff --git a/include/event_data.h b/include/event_data.h index 013579ab5..97f7e8eda 100644 --- a/include/event_data.h +++ b/include/event_data.h @@ -36,7 +36,7 @@ bool32 sub_806E2BC(void); void sub_806E6FC(void); void sub_806E2D0(void); void sub_806E370(void); -bool32 sub_806E25C(void); +bool32 IsNationalPokedexEnabled(void); extern u16 gSpecialVar_0x8000; extern u16 gSpecialVar_0x8001; diff --git a/include/librfu.h b/include/librfu.h index 90f69cb5a..d107894dd 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -1,3 +1,6 @@ +#ifndef GUARD_LIBRFU_H +#define GUARD_LIBRFU_H + #include "main.h" enum @@ -130,6 +133,128 @@ struct RfuIntrStruct u8 block2[0x30]; }; +struct RfuUnk1 +{ + 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; +}; + +struct RfuUnk2 +{ + 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]; +}; + +struct RfuUnk3 +{ + u32 unk_0; + u32 unk_4; + u8 unk_8[0xD4]; + u32 unk_dc; +}; + +struct RfuUnk5Sub +{ + u16 unk_00; + u8 unk_02; + u16 unk_04; + struct UnkLinkRfuStruct_02022B14 unk_06; + u8 fill_13[1]; + u8 playerName[PLAYER_NAME_LENGTH + 1]; +}; + +struct RfuUnk5 +{ + 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]; +}; + extern struct RfuStruct *gRfuState; +extern struct RfuUnk5 *gUnknown_03007890; +extern u32 *gUnknown_03007894; +extern struct RfuUnk3* gUnknown_03007898; +extern struct RfuUnk2* gUnknown_03007880[4]; +extern struct RfuUnk1* gUnknown_03007870[4]; +extern void* sub_82E53F4; +extern 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); +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); +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_startSearchChild(void); +void rfu_REQ_pollSearchChild(void); +void rfu_REQ_endSearchChild(void); +void rfu_REQ_startSearchParent(void); +void rfu_REQ_pollSearchParent(void); +void rfu_REQ_endSearchParent(void); +void rfu_REQ_startConnectParent(u16); +void rfu_REQ_pollConnectParent(void); +void rfu_REQ_endConnectParent(void); +void rfu_REQ_CHILD_startConnectRecovery(u8); +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); +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); +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); +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); +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); + +#endif // GUARD_LIBRFU_H diff --git a/include/link_rfu.h b/include/link_rfu.h index 928ae380e..e7fa2a848 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -19,5 +19,8 @@ void MEvent_CreateTask_Leader(u8); void sub_80F9E2C(void * data); u8 sub_8116DE0(void); void sub_80FBB4C(void); +void sub_80F86F4(void); +void sub_80FB128(bool32 a0); +u32 sub_80FD3A4(void); #endif //GUARD_LINK_RFU_H diff --git a/ld_script.txt b/ld_script.txt index a65474cd5..433528ed4 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -60,6 +60,7 @@ SECTIONS { src/text.o(.text); src/sprite.o(.text); src/string_util.o(.text); + src/link.o(.text); asm/link.o(.text); src/multiboot.o(.text); asm/main_menu.o(.text); diff --git a/src/link.c b/src/link.c new file mode 100644 index 000000000..f63b2fcd7 --- /dev/null +++ b/src/link.c @@ -0,0 +1,153 @@ +#include "global.h" +#include "palette.h" +#include "gpu_regs.h" +#include "link.h" +#include "quest_log.h" +#include "link_rfu.h" +#include "librfu.h" +#include "random.h" +#include "task.h" +#include "event_data.h" +#include "string_util.h" + +struct BlockTransfer +{ + u16 pos; + u16 size; + const u8 *src; + bool8 active; + u8 multiplayerId; +}; + +struct LinkTestBGInfo +{ + u32 screenBaseBlock; + u32 paletteNum; + u32 dummy_8; + u32 dummy_C; +}; + +u32 gUnknown_3000E58; + +struct LinkTestBGInfo gLinkTestBGInfo; + +EWRAM_DATA struct LinkPlayer gLocalLinkPlayer = {}; + +void sub_800B210(void); +void InitLocalLinkPlayer(void); +void sub_800978C(void); +void ResetBlockSend(void); +void task00_link_test(u8 taskId); +void CB2_LinkTest(void); + +extern const u16 gLinkTestDigitsPal[0x20]; +extern const u16 gLinkTestDigitsGfx[0x1000]; +extern const u8 gBGControlRegOffsets[]; + +bool8 IsWirelessAdapterConnected(void) +{ + if (gUnknown_203ADFA == 2 || gUnknown_203ADFA == 3) + return FALSE; + + sub_800B1F4(); + sub_80F86F4(); + sub_80FB128(1); + if (sub_80FD3A4() == 0x8001) + { + rfu_REQ_stopMode(); + rfu_waitREQComplete(); + return TRUE; + } + sub_800B210(); + CloseLink(); + RestoreSerialTimer3IntrHandlers(); + return FALSE; +} + +void Task_DestroySelf(u8 taskId) +{ + DestroyTask(taskId); +} + +void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock, u16 a4) +{ + LoadPalette(gLinkTestDigitsPal, paletteNum * 16, 0x20); + DmaCopy16(3, gLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock) + (16 * a4), sizeof gLinkTestDigitsGfx); + gLinkTestBGInfo.screenBaseBlock = screenBaseBlock; + gLinkTestBGInfo.paletteNum = paletteNum; + gLinkTestBGInfo.dummy_8 = a4; + switch (bgNum) + { + case 1: + SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_PRIORITY(1) | BGCNT_CHARBASE(charBaseBlock)); + break; + case 2: + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_PRIORITY(1) | BGCNT_CHARBASE(charBaseBlock)); + break; + case 3: + SetGpuReg(REG_OFFSET_BG3CNT, BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_PRIORITY(1) | BGCNT_CHARBASE(charBaseBlock)); + break; + } + SetGpuReg(REG_OFFSET_BG0HOFS + bgNum * 4, 0); + SetGpuReg(REG_OFFSET_BG0VOFS + bgNum * 4, 0); +} + +void sub_80095BC(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock) +{ + LoadPalette(gLinkTestDigitsPal, paletteNum * 16, 0x20); + DmaCopy16(3, gLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock), sizeof gLinkTestDigitsGfx); + gLinkTestBGInfo.screenBaseBlock = screenBaseBlock; + gLinkTestBGInfo.paletteNum = paletteNum; + gLinkTestBGInfo.dummy_8 = 0; + SetGpuReg(gBGControlRegOffsets[bgNum], BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_CHARBASE(charBaseBlock)); +} + +void LinkTestScreen(void) +{ + int i; + + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + SetVBlankCallback(sub_800978C); + ResetBlockSend(); + gLinkType = 0x1111; + OpenLink(); + SeedRng(gMain.vblankCounter2); + for (i = 0; i < MAX_LINK_PLAYERS; i++) + { + gSaveBlock2Ptr->playerTrainerId[i] = Random() % 256; + } + InitLinkTestBG(0, 2, 4, 0, 0); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); + CreateTask(Task_DestroySelf, 0); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + gUnknown_3000E58 = 0; + InitLocalLinkPlayer(); + CreateTask(task00_link_test, 0); + SetMainCallback2(CB2_LinkTest); +} + +void SetLocalLinkPlayerId(u8 playerId) +{ + gLocalLinkPlayer.id = playerId; +} + +void InitLocalLinkPlayer(void) +{ + gLocalLinkPlayer.trainerId = gSaveBlock2Ptr->playerTrainerId[0] | (gSaveBlock2Ptr->playerTrainerId[1] << 8) | (gSaveBlock2Ptr->playerTrainerId[2] << 16) | (gSaveBlock2Ptr->playerTrainerId[3] << 24); + StringCopy(gLocalLinkPlayer.name, gSaveBlock2Ptr->playerName); + gLocalLinkPlayer.gender = gSaveBlock2Ptr->playerGender; + gLocalLinkPlayer.linkType = gLinkType; + gLocalLinkPlayer.language = gGameLanguage; + gLocalLinkPlayer.version = gGameVersion + 0x4000; + gLocalLinkPlayer.lp_field_2 = 0x8000; + gLocalLinkPlayer.name[8] = IsNationalPokedexEnabled(); + if (FlagGet(FLAG_0x844)) + { + gLocalLinkPlayer.name[8] |= 0x10; + } +} diff --git a/src/pokemon.c b/src/pokemon.c index 152e8e1df..4685dcbcd 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -4961,7 +4961,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem) if (gEvolutionTable[species][i].param == heldItem) { targetSpecies = gEvolutionTable[species][i].targetSpecies; - if (sub_806E25C() || targetSpecies <= 151) + if (IsNationalPokedexEnabled() || targetSpecies <= 151) { heldItem = 0; SetMonData(mon, MON_DATA_HELD_ITEM, &heldItem); @@ -5629,7 +5629,7 @@ u16 sub_8043F90(u16 species) { species = SpeciesToNationalPokedexNum(species); - if (!sub_806E25C() && species > 151) + if (!IsNationalPokedexEnabled() && species > 151) return 0xFFFF; return species; } diff --git a/src/prof_pc.c b/src/prof_pc.c index 35566e714..aeabc8644 100644 --- a/src/prof_pc.c +++ b/src/prof_pc.c @@ -33,7 +33,7 @@ u16 Special_GetPokedexCount(void) gSpecialVar_0x8005 = GetNationalPokedexCount(0); gSpecialVar_0x8006 = GetNationalPokedexCount(1); } - return sub_806E25C(); + return IsNationalPokedexEnabled(); } const u8 * sub_80CA424(u16 count) diff --git a/sym_common.txt b/sym_common.txt index a5c25be05..b2c86b705 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -75,7 +75,7 @@ gUnknown_3003F60: @ 3003F60 gReceivedRemoteLinkPlayers: @ 3003F64 .space 0xC -gUnknown_3003F70: @ 3003F70 +gLinkTestBGInfo: @ 3003F70 .space 0x10 gUnknown_3003F80: @ 3003F80 |