From 55406f92fd5cc6e97866dfb9982f15d41e8b83be Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sat, 1 Jun 2019 16:07:06 +0800 Subject: teachy_tv and minor update to match DizzyEgg's struct def --- asm/berry_pouch.s | 4 +- asm/item_menu.s | 4 +- asm/item_pc.s | 4 +- asm/menu_helpers.s | 14 +- asm/party_menu.s | 4 +- asm/shop.s | 2 +- asm/teachy_tv.s | 408 ++---------------------------------------------- include/fame_checker.h | 2 +- include/list_menu.h | 6 +- include/menu_helpers.h | 4 +- ld_script.txt | 1 + src/fame_checker.c | 16 +- src/mystery_gift_menu.c | 2 +- src/teachy_tv.c | 217 +++++++++++++++++++++++++ src/tm_case.c | 12 +- sym_ewram.txt | 5 +- 16 files changed, 272 insertions(+), 433 deletions(-) create mode 100644 src/teachy_tv.c diff --git a/asm/berry_pouch.s b/asm/berry_pouch.s index 762938e3c..9e53e6624 100644 --- a/asm/berry_pouch.s +++ b/asm/berry_pouch.s @@ -183,7 +183,7 @@ _0813CE84: .4byte _0813CFB0 .4byte _0813CFBE _0813CED0: - bl sub_80BF768 + bl VblankHblankHandlerSetZero bl clear_scheduled_bg_copies_to_vram b _0813CFD2 _0813CEDA: @@ -386,7 +386,7 @@ _0813D078: .4byte gUnknown_203F370 thumb_func_start sub_813D07C sub_813D07C: @ 813D07C push {r4,lr} - bl sub_80BF7C8 + bl InitBgReg ldr r4, _0813D0DC @ =gUnknown_203F36C ldr r0, [r4] adds r0, 0xC diff --git a/asm/item_menu.s b/asm/item_menu.s index 46891fe94..3a665b61e 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -253,7 +253,7 @@ _08107F60: .4byte _081080D8 .4byte _081080DE _08107FB0: - bl sub_80BF768 + bl VblankHblankHandlerSetZero bl clear_scheduled_bg_copies_to_vram b _08108104 _08107FBA: @@ -520,7 +520,7 @@ _081081CC: .4byte gUnknown_203AD1C thumb_func_start sub_81081D0 sub_81081D0: @ 81081D0 push {r4,r5,lr} - bl sub_80BF7C8 + bl InitBgReg ldr r5, _08108230 @ =gUnknown_203AD14 movs r4, 0x80 lsls r4, 4 diff --git a/asm/item_pc.s b/asm/item_pc.s index e7a9f8ee5..aab19813a 100644 --- a/asm/item_pc.s +++ b/asm/item_pc.s @@ -158,7 +158,7 @@ _0810D4E8: .4byte _0810D630 .4byte _0810D668 _0810D53C: - bl sub_80BF768 + bl VblankHblankHandlerSetZero bl clear_scheduled_bg_copies_to_vram b _0810D674 _0810D546: @@ -389,7 +389,7 @@ _0810D718: .4byte gUnknown_203ADCC thumb_func_start sub_810D71C sub_810D71C: @ 810D71C push {r4,r5,lr} - bl sub_80BF7C8 + bl InitBgReg ldr r5, _0810D77C @ =gUnknown_203ADC0 movs r4, 0x80 lsls r4, 4 diff --git a/asm/menu_helpers.s b/asm/menu_helpers.s index 792bed5cf..ad020b660 100644 --- a/asm/menu_helpers.s +++ b/asm/menu_helpers.s @@ -418,8 +418,8 @@ _080BF764: bx r1 thumb_func_end sub_80BF748 - thumb_func_start sub_80BF768 -sub_80BF768: @ 80BF768 + thumb_func_start VblankHblankHandlerSetZero +VblankHblankHandlerSetZero: @ 80BF768 push {lr} movs r0, 0 bl SetVBlankCallback @@ -427,13 +427,13 @@ sub_80BF768: @ 80BF768 bl SetHBlankCallback pop {r0} bx r0 - thumb_func_end sub_80BF768 + thumb_func_end VblankHblankHandlerSetZero thumb_func_start sub_80BF77C sub_80BF77C: @ 80BF77C push {r4,lr} sub sp, 0xC - bl sub_80BF7C8 + bl InitBgReg mov r1, sp movs r0, 0 strh r0, [r1] @@ -465,8 +465,8 @@ _080BF7C0: .4byte 0x05000100 _080BF7C4: .4byte 0x01000200 thumb_func_end sub_80BF77C - thumb_func_start sub_80BF7C8 -sub_80BF7C8: @ 80BF7C8 + thumb_func_start InitBgReg +InitBgReg: @ 80BF7C8 push {lr} movs r0, 0 movs r1, 0 @@ -517,7 +517,7 @@ sub_80BF7C8: @ 80BF7C8 bl ChangeBgY pop {r0} bx r0 - thumb_func_end sub_80BF7C8 + thumb_func_end InitBgReg thumb_func_start sub_80BF848 sub_80BF848: @ 80BF848 diff --git a/asm/party_menu.s b/asm/party_menu.s index 2aaa52985..13ca24a2f 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -276,7 +276,7 @@ _0811EC24: .4byte _0811EDD0 .4byte _0811EDDE _0811EC80: - bl sub_80BF768 + bl VblankHblankHandlerSetZero bl sub_80BF77C bl clear_scheduled_bg_copies_to_vram b _0811EDFC @@ -565,7 +565,7 @@ _0811EEC8: .4byte gUnknown_203B0B8 thumb_func_start sub_811EECC sub_811EECC: @ 811EECC push {r4,r5,lr} - bl sub_80BF7C8 + bl InitBgReg ldr r5, _0811EF34 @ =gUnknown_203B0BC movs r4, 0x80 lsls r4, 4 diff --git a/asm/shop.s b/asm/shop.s index 525fbbc45..0cbaf1206 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -515,7 +515,7 @@ _0809AEA0: .4byte gTasks _0809AEA4: .4byte sub_809AE00 _0809AEA8: .4byte sub_809ADE4 _0809AEAC: - bl sub_80BF768 + bl VblankHblankHandlerSetZero str r4, [sp, 0x8] movs r1, 0xE0 lsls r1, 19 diff --git a/asm/teachy_tv.s b/asm/teachy_tv.s index 482b5da60..8320d951c 100644 --- a/asm/teachy_tv.s +++ b/asm/teachy_tv.s @@ -5,382 +5,6 @@ .text - thumb_func_start sub_815AB94 -sub_815AB94: @ 815AB94 - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl do_scheduled_bg_tilemap_copies_to_vram - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_815AB94 - - thumb_func_start sub_815ABB0 -sub_815ABB0: @ 815ABB0 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_815ABB0 - - thumb_func_start sub_815ABC4 -sub_815ABC4: @ 815ABC4 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - adds r2, r0, 0 - ldr r3, _0815ABF4 @ =gTeachyTV_StaticResources - movs r4, 0 - strb r2, [r3, 0x4] - str r1, [r3] - cmp r2, 0 - bne _0815ABE0 - movs r0, 0 - strh r4, [r3, 0x6] - strh r4, [r3, 0x8] - strb r0, [r3, 0x5] -_0815ABE0: - cmp r2, 0x1 - bne _0815ABE6 - strb r4, [r3, 0x4] -_0815ABE6: - ldr r0, _0815ABF8 @ =sub_815AC2C - bl SetMainCallback2 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815ABF4: .4byte gTeachyTV_StaticResources -_0815ABF8: .4byte sub_815AC2C - thumb_func_end sub_815ABC4 - - thumb_func_start CB2_ReturnToTeachyTV -CB2_ReturnToTeachyTV: @ 815ABFC - push {lr} - ldr r1, _0815AC10 @ =gTeachyTV_StaticResources - ldrb r0, [r1, 0x4] - cmp r0, 0x1 - bne _0815AC14 - ldr r1, [r1] - movs r0, 0x1 - bl sub_815ABC4 - b _0815AC1C - .align 2, 0 -_0815AC10: .4byte gTeachyTV_StaticResources -_0815AC14: - ldr r1, [r1] - movs r0, 0x2 - bl sub_815ABC4 -_0815AC1C: - pop {r0} - bx r0 - thumb_func_end CB2_ReturnToTeachyTV - - thumb_func_start sub_815AC20 -sub_815AC20: @ 815AC20 - ldr r1, _0815AC28 @ =gTeachyTV_StaticResources - movs r0, 0x1 - strb r0, [r1, 0x4] - bx lr - .align 2, 0 -_0815AC28: .4byte gTeachyTV_StaticResources - thumb_func_end sub_815AC20 - - thumb_func_start sub_815AC2C -sub_815AC2C: @ 815AC2C - push {r4-r6,lr} - sub sp, 0x4 - ldr r0, _0815AC44 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r6, r0, r1 - ldrb r5, [r6] - cmp r5, 0 - beq _0815AC48 - cmp r5, 0x1 - beq _0815AC9C - b _0815AD6E - .align 2, 0 -_0815AC44: .4byte gMain -_0815AC48: - ldr r4, _0815AC90 @ =gUnknown_203F450 - ldr r0, _0815AC94 @ =0x00004008 - bl AllocZeroed - str r0, [r4] - str r5, [r0] - ldr r1, _0815AC98 @ =0x00004006 - adds r0, r1 - strb r5, [r0] - ldr r0, [r4] - adds r1, 0x1 - adds r0, r1 - movs r1, 0xFF - strb r1, [r0] - bl sub_80BF768 - bl clear_scheduled_bg_copies_to_vram - bl ScanlineEffect_Stop - bl FreeAllSpritePalettes - bl ResetPaletteFade - bl ResetSpriteData - bl ResetTasks - bl sub_815AD88 - bl sub_815AE38 - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] - b _0815AD6E - .align 2, 0 -_0815AC90: .4byte gUnknown_203F450 -_0815AC94: .4byte 0x00004008 -_0815AC98: .4byte 0x00004006 -_0815AC9C: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0815AD6E - bl sub_815AEB8 - bl sub_815AFEC - ldr r0, _0815ACE0 @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x4] - cmp r0, 0x2 - bne _0815ACEC - ldr r0, _0815ACE4 @ =sub_815BA54 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r5, r0, 24 - bl sub_815B014 - ldr r2, _0815ACE8 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r2 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0xA] - adds r0, r5, 0 - bl sub_815B118 - b _0815AD26 - .align 2, 0 -_0815ACE0: .4byte gTeachyTV_StaticResources -_0815ACE4: .4byte sub_815BA54 -_0815ACE8: .4byte gTasks -_0815ACEC: - ldr r0, _0815AD78 @ =sub_815B2C0 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r5, r0, 24 - bl sub_815AEE8 - ldr r1, _0815AD7C @ =gTasks - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - adds r4, r1 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x8] - bl sub_815B014 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0xA] - bl sub_815AF5C - movs r0, 0xAD - lsls r0, 1 - bl PlayNewMapMusic - bl sub_815B094 -_0815AD26: - movs r0, 0 - bl schedule_bg_copy_tilemap_to_vram - movs r0, 0x1 - bl schedule_bg_copy_tilemap_to_vram - movs r0, 0x2 - bl schedule_bg_copy_tilemap_to_vram - movs r0, 0x3 - bl schedule_bg_copy_tilemap_to_vram - movs r0, 0x9 - bl sub_812B1E0 - 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, _0815AD80 @ =sub_815ABB0 - bl SetVBlankCallback - ldr r0, _0815AD84 @ =sub_815AB94 - bl SetMainCallback2 -_0815AD6E: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0815AD78: .4byte sub_815B2C0 -_0815AD7C: .4byte gTasks -_0815AD80: .4byte sub_815ABB0 -_0815AD84: .4byte sub_815AB94 - thumb_func_end sub_815AC2C - - thumb_func_start sub_815AD88 -sub_815AD88: @ 815AD88 - push {r4,lr} - bl sub_80BF7C8 - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _0815AE20 @ =gUnknown_84792E0 - movs r0, 0 - movs r2, 0x4 - bl InitBgsFromTemplates - ldr r4, _0815AE24 @ =gUnknown_203F450 - ldr r1, [r4] - adds r1, 0x4 - movs r0, 0x1 - bl SetBgTilemapBuffer - ldr r1, [r4] - ldr r0, _0815AE28 @ =0x00001004 - adds r1, r0 - movs r0, 0x2 - bl SetBgTilemapBuffer - ldr r1, [r4] - ldr r0, _0815AE2C @ =0x00002004 - adds r1, r0 - movs r0, 0x3 - bl SetBgTilemapBuffer - movs r1, 0xC1 - lsls r1, 6 - movs r0, 0 - bl SetGpuReg - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x3 - bl ShowBg - movs r1, 0x80 - lsls r1, 5 - movs r0, 0x3 - movs r2, 0x2 - bl ChangeBgX - movs r1, 0xA0 - lsls r1, 6 - movs r0, 0x3 - movs r2, 0x1 - bl ChangeBgY - ldr r0, [r4] - ldr r1, _0815AE30 @ =0x00004004 - adds r0, r1 - movs r1, 0 - strb r1, [r0] - ldr r0, [r4] - ldr r1, _0815AE34 @ =0x00004005 - adds r0, r1 - movs r1, 0x3 - strb r1, [r0] - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815AE20: .4byte gUnknown_84792E0 -_0815AE24: .4byte gUnknown_203F450 -_0815AE28: .4byte 0x00001004 -_0815AE2C: .4byte 0x00002004 -_0815AE30: .4byte 0x00004004 -_0815AE34: .4byte 0x00004005 - thumb_func_end sub_815AD88 - - thumb_func_start sub_815AE38 -sub_815AE38: @ 815AE38 - push {r4,lr} - sub sp, 0x8 - movs r4, 0 - add r0, sp, 0x4 - strh r4, [r0] - bl reset_temp_tile_data_buffers - ldr r1, _0815AE98 @ =gUnknown_8E86240 - str r4, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - ldr r0, _0815AE9C @ =gUnknown_8E86BE8 - ldr r4, _0815AEA0 @ =gUnknown_203F450 - ldr r1, [r4] - adds r1, 0x4 - bl LZDecompressWram - ldr r0, _0815AEA4 @ =gUnknown_8E86D6C - ldr r1, [r4] - ldr r2, _0815AEA8 @ =0x00003004 - adds r1, r2 - bl LZDecompressWram - ldr r0, _0815AEAC @ =gUnknown_8E86F98 - movs r1, 0 - movs r2, 0x80 - bl LoadCompressedPalette - add r0, sp, 0x4 - movs r1, 0 - movs r2, 0x2 - bl LoadPalette - ldr r0, _0815AEB0 @ =gUnknown_83A5348 - bl LoadSpritePalette - ldr r0, [r4] - ldr r1, _0815AEB4 @ =0x00002004 - adds r0, r1 - bl sub_815BD80 - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815AE98: .4byte gUnknown_8E86240 -_0815AE9C: .4byte gUnknown_8E86BE8 -_0815AEA0: .4byte gUnknown_203F450 -_0815AEA4: .4byte gUnknown_8E86D6C -_0815AEA8: .4byte 0x00003004 -_0815AEAC: .4byte gUnknown_8E86F98 -_0815AEB0: .4byte gUnknown_83A5348 -_0815AEB4: .4byte 0x00002004 - thumb_func_end sub_815AE38 - - thumb_func_start sub_815AEB8 -sub_815AEB8: @ 815AEB8 - push {lr} - ldr r0, _0815AEE4 @ =gUnknown_84792F0 - bl InitWindows - bl DeactivateAllTextPrinters - movs r0, 0 - movs r1, 0xCC - bl FillWindowPixelBuffer - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x2 - bl CopyWindowToVram - pop {r0} - bx r0 - .align 2, 0 -_0815AEE4: .4byte gUnknown_84792F0 - thumb_func_end sub_815AEB8 - thumb_func_start sub_815AEE8 sub_815AEE8: @ 815AEE8 push {r4,r5,lr} @@ -459,7 +83,7 @@ _0815AF7C: .4byte gUnknown_203F450 _0815AF80: .4byte 0x00004007 _0815AF84: ldr r0, _0815AF9C @ =gUnknown_8479380 - ldr r1, _0815AFA0 @ =gUnknown_203F44A + ldr r1, _0815AFA0 @ =gTeachyTV_StaticResources+6 bl AddScrollIndicatorArrowPair ldr r1, _0815AFA4 @ =gUnknown_203F450 ldr r1, [r1] @@ -471,7 +95,7 @@ _0815AF96: bx r0 .align 2, 0 _0815AF9C: .4byte gUnknown_8479380 -_0815AFA0: .4byte gUnknown_203F44A +_0815AFA0: .4byte gTeachyTV_StaticResources+6 _0815AFA4: .4byte gUnknown_203F450 _0815AFA8: .4byte 0x00004007 thumb_func_end sub_815AF5C @@ -515,8 +139,8 @@ _0815AFE8: bx r0 thumb_func_end sub_815AFD8 - thumb_func_start sub_815AFEC -sub_815AFEC: @ 815AFEC + thumb_func_start TeachyTvInitIo +TeachyTvInitIo: @ 815AFEC push {lr} movs r0, 0x48 movs r1, 0x3F @@ -532,10 +156,10 @@ sub_815AFEC: @ 815AFEC bl SetGpuReg pop {r0} bx r0 - thumb_func_end sub_815AFEC + thumb_func_end TeachyTvInitIo - thumb_func_start sub_815B014 -sub_815B014: @ 815B014 + thumb_func_start TeachyTvSetupObj +TeachyTvSetupObj: @ 815B014 push {lr} sub sp, 0x4 ldr r1, _0815B054 @ =SpriteCallbackDummy @@ -570,7 +194,7 @@ sub_815B014: @ 815B014 .align 2, 0 _0815B054: .4byte SpriteCallbackDummy _0815B058: .4byte gSprites - thumb_func_end sub_815B014 + thumb_func_end TeachyTvSetupObj thumb_func_start sub_815B05C sub_815B05C: @ 815B05C @@ -673,8 +297,8 @@ _0815B0DE: _0815B114: .4byte 0x0000301f thumb_func_end sub_815B0CC - thumb_func_start sub_815B118 -sub_815B118: @ 815B118 + thumb_func_start TeachyTvConfigRboxAndObj +TeachyTvConfigRboxAndObj: @ 815B118 push {r4-r7,lr} sub sp, 0x4 lsls r0, 24 @@ -761,7 +385,7 @@ _0815B1B8: pop {r4-r7} pop {r0} bx r0 - thumb_func_end sub_815B118 + thumb_func_end TeachyTvConfigRboxAndObj thumb_func_start sub_815B1DC sub_815B1DC: @ 815B1DC @@ -903,7 +527,7 @@ sub_815B2C0: @ 815B2C0 bl ListMenuHandleInput adds r5, r0, 0 ldrb r0, [r6] - ldr r4, _0815B324 @ =gUnknown_203F44A + ldr r4, _0815B324 @ =gTeachyTV_StaticResources+6 adds r2, r4, 0x2 adds r1, r4, 0 bl get_coro_args_x18_x1A @@ -930,7 +554,7 @@ _0815B30A: .align 2, 0 _0815B31C: .4byte gTasks+0x8 _0815B320: .4byte gPaletteFade -_0815B324: .4byte gUnknown_203F44A +_0815B324: .4byte gTeachyTV_StaticResources+6 _0815B328: .4byte gMain _0815B32C: .4byte UseFameCheckerFromMenu _0815B330: @@ -1854,8 +1478,8 @@ _0815BA4E: bx r0 thumb_func_end sub_815BA30 - thumb_func_start sub_815BA54 -sub_815BA54: @ 815BA54 + thumb_func_start TeachyTvTaskFunction +TeachyTvTaskFunction: @ 815BA54 push {r4,lr} lsls r0, 24 lsrs r0, 24 @@ -1891,7 +1515,7 @@ _0815BA90: .4byte gPaletteFade _0815BA94: .4byte gUnknown_8479390 _0815BA98: .4byte gTeachyTV_StaticResources _0815BA9C: .4byte sub_815B4EC - thumb_func_end sub_815BA54 + thumb_func_end TeachyTvTaskFunction thumb_func_start sub_815BAA0 sub_815BAA0: @ 815BAA0 diff --git a/include/fame_checker.h b/include/fame_checker.h index 257431d8b..af705e34f 100644 --- a/include/fame_checker.h +++ b/include/fame_checker.h @@ -41,7 +41,7 @@ extern u8 gIconDescriptionBoxIsOpen; void ResetFameChecker(void); void FullyUnlockFameChecker(void); -void UseFameChecker(MainCallback savedCallback); +void UseFameChecker(void (*)()); void SetFlavorTextFlagFromSpecialVars(void); void UpdatePickStateFromSpecialVar8005(void); diff --git a/include/list_menu.h b/include/list_menu.h index 8ff65da0b..1c632e89c 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -9,8 +9,8 @@ struct ListMenuItem { - const u8 *unk_00; - s32 unk_04; + const u8 *name; + s32 id; }; struct ListMenu; @@ -43,7 +43,7 @@ struct ListMenu { u16 selectedRow; u8 unk_1C; u8 unk_1D; - u8 unk_1E; + u8 taskId; u8 unk_1F; }; diff --git a/include/menu_helpers.h b/include/menu_helpers.h index e27fb4e5d..892636ba0 100644 --- a/include/menu_helpers.h +++ b/include/menu_helpers.h @@ -20,8 +20,8 @@ void sub_8121F68(u8 taskId, const struct YesNoFuncTable *data); bool8 sub_81221AC(void); bool8 sub_80BF72C(void); bool8 sub_80BF708(void); -void sub_80BF768(void); -void sub_80BF7C8(void); +void VblankHblankHandlerSetZero(void); +void InitBgReg(void); u8 sub_80BF8E4(void); u8 sub_80BF848(s16 * a0, u16 a1); void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 arg2, u8 arg3, u8 fontId, u8 textSpeed, const u8 *string, void *taskFunc); diff --git a/ld_script.txt b/ld_script.txt index 4b7fafa2e..698d33a63 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -260,6 +260,7 @@ SECTIONS { src/unk_8159F40.o(.text); src/dodrio_berry_picking_2.o(.text); asm/dodrio_berry_picking_2.o(.text); + src/teachy_tv.o(.text); asm/teachy_tv.o(.text); asm/ereader_helpers.o(.text); src/unk_815C980.o(.text); diff --git a/src/fame_checker.c b/src/fame_checker.c index 795863aca..4b9feb45b 100644 --- a/src/fame_checker.c +++ b/src/fame_checker.c @@ -1341,14 +1341,14 @@ static void FC_DoMoveCursor(s32 itemIndex, bool8 onInit) u16 who; get_coro_args_x18_x1A(sFameCheckerData->listMenuTaskId, &listY, &cursorY); who = listY + cursorY; - AddTextPrinterParametrized2(FCWINDOWID_LIST, 2, 8, 14 * cursorY + 4, 0, 0, &sTextColor_Green, 0, sListMenuItems[itemIndex].unk_00); + AddTextPrinterParametrized2(FCWINDOWID_LIST, 2, 8, 14 * cursorY + 4, 0, 0, &sTextColor_Green, 0, sListMenuItems[itemIndex].name); if (!onInit) { if (listY < sFameCheckerData->listMenuTopIdx2) sFameCheckerData->listMenuDrawnSelIdx++; else if (listY > sFameCheckerData->listMenuTopIdx2 && who != sFameCheckerData->numUnlockedPersons - 1) sFameCheckerData->listMenuDrawnSelIdx--; - AddTextPrinterParametrized2(FCWINDOWID_LIST, 2, 8, 14 * sFameCheckerData->listMenuDrawnSelIdx + 4, 0, 0, &sTextColor_DkGrey, 0, sListMenuItems[sFameCheckerData->listMenuCurIdx].unk_00); + AddTextPrinterParametrized2(FCWINDOWID_LIST, 2, 8, 14 * sFameCheckerData->listMenuDrawnSelIdx + 4, 0, 0, &sTextColor_DkGrey, 0, sListMenuItems[sFameCheckerData->listMenuCurIdx].name); } sFameCheckerData->listMenuCurIdx = itemIndex; @@ -1368,20 +1368,20 @@ static u8 FC_PopulateListMenu(void) { if (sTrainerIdxs[fameCheckerIdx] < FC_NONTRAINER_START) { - sListMenuItems[nitems].unk_00 = gTrainers[sTrainerIdxs[fameCheckerIdx]].trainerName; - sListMenuItems[nitems].unk_04 = nitems; + sListMenuItems[nitems].name = gTrainers[sTrainerIdxs[fameCheckerIdx]].trainerName; + sListMenuItems[nitems].id = nitems; } else { - sListMenuItems[nitems].unk_00 = sNonTrainerNamePointers[sTrainerIdxs[fameCheckerIdx] - FC_NONTRAINER_START]; - sListMenuItems[nitems].unk_04 = nitems; + sListMenuItems[nitems].name = sNonTrainerNamePointers[sTrainerIdxs[fameCheckerIdx] - FC_NONTRAINER_START]; + sListMenuItems[nitems].id = nitems; } sFameCheckerData->unlockedPersons[nitems] = fameCheckerIdx; nitems++; } } - sListMenuItems[nitems].unk_00 = gFameCheckerText_Cancel; - sListMenuItems[nitems].unk_04 = nitems; + sListMenuItems[nitems].name = gFameCheckerText_Cancel; + sListMenuItems[nitems].id = nitems; sFameCheckerData->unlockedPersons[nitems] = 0xFF; nitems++; gFameChecker_ListMenuTemplate.totalItems = nitems; diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index 1ec4e6157..e91e97624 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -703,7 +703,7 @@ u32 MysteryGift_HandleThreeOptionMenu(u8 * unused0, u16 * unused1, u8 whichMenu) width = 0; for (i = 0; i < listMenuTemplate.totalItems; i++) { - u32 curWidth = GetStringWidth(2, listMenuTemplate.items[i].unk_00, listMenuTemplate.lettersSpacing); + u32 curWidth = GetStringWidth(2, listMenuTemplate.items[i].name, listMenuTemplate.lettersSpacing); if (curWidth > width) width = curWidth; } diff --git a/src/teachy_tv.c b/src/teachy_tv.c new file mode 100644 index 000000000..2c34b731b --- /dev/null +++ b/src/teachy_tv.c @@ -0,0 +1,217 @@ +#include "main.h" +#include "global.h" +#include "task.h" +#include "menu.h" +#include "palette.h" +#include "sprite.h" +#include "menu_helpers.h" +#include "sound.h" +#include "malloc.h" +#include "sprite.h" +#include "scanline_effect.h" +#include "bg.h" +#include "gpu_regs.h" +#include "decompress.h" +#include "window.h" +#include "list_menu.h" +#include "item.h" +#include "constants/songs.h" +#include "constants/items.h" + +typedef struct { + void (*callback)(); + u8 mode; + u8 param1; + u16 param2; + u16 param3; + u8 param4; + u8 filler; +} TeachyTv_s; + +extern TeachyTv_s gTeachyTV_StaticResources; +extern void * gUnknown_203F450; +void C2TeachyTv(); +void C2TeachyTvMainCallback(); +void VblankHandlerTeachyTv(); +void sub_815ABC4(u8 mode, void (*cb)()); +void CB2_ReturnToTeachyTV(); +extern void sub_815AC20(); +void TeachyTvCreateAndRenderRbox(); +extern void TeachyTvInitIo(); +extern u8 TeachyTvSetupObj(); +extern void TeachyTvConfigRboxAndObj(u8); +extern u8 sub_815AEE8(); +extern void sub_815AF5C(); +extern void sub_815B094(); +void TeachyTvSetupBg(); +void TeachyTvLoadGraphic(); +extern void TeachyTvTaskFunction(u8); +extern void sub_815B2C0(u8); +extern void VblankHblankHandlerSetZero(); +extern void sub_812B1E0(u16); +extern struct BgTemplate gUnknown_84792E0; +extern void *gUnknown_203F450; // tilemap pointer location +extern u8 gUnknown_8E86240; // tilemap +extern u8 gUnknown_8E86BE8; +extern u8 gUnknown_8E86D6C; +extern u8 gUnknown_8E86F98; // pal +extern struct SpritePalette gUnknown_83A5348; +extern void sub_815BD80(void *); +typedef struct Task Task; +extern struct WindowTemplate gUnknown_84792F0; + + +void C2TeachyTv() +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + do_scheduled_bg_tilemap_copies_to_vram(); + UpdatePaletteFade(); +} + +void VblankHandlerTeachyTv() +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_815ABC4(u8 mode, void (*cb)()) +{ + // JZW: I'm sorry, but otherwise I can't make it match baserom + TeachyTv_s *v3 = &gTeachyTV_StaticResources; + u16 v4 = 0; + v3->mode = mode; + v3->callback = cb; + if(!mode) { + v3->param2 = v4; + v3->param3 = v4; + v3->param1 = 0; + } + if(mode == 1) + v3->mode = 0; + SetMainCallback2(C2TeachyTvMainCallback); +} + +void CB2_ReturnToTeachyTV() +{ + if(gTeachyTV_StaticResources.mode == 1) + sub_815ABC4(1,gTeachyTV_StaticResources.callback); + else + sub_815ABC4(2,gTeachyTV_StaticResources.callback); +} + +void sub_815AC20() +{ + gTeachyTV_StaticResources.mode = 1; +} + +void C2TeachyTvMainCallback() +{ + int state; + void *mallocPtr; + int taskId; + Task *taskAddr; + u8 **v4; + u32 x; + + state = gMain.state; + if ( state == 0 ) + goto section_0; + else if ( state == 1 ) + goto section_1; + else + return; + section_0: + v4 = (u8 **)&gUnknown_203F450; + (*v4) = (u8*)AllocZeroed(0x4008u); + *(u32*)gUnknown_203F450 = (u32)state; + *((u8*)gUnknown_203F450 + 0x4006) = state; + *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; + VblankHblankHandlerSetZero(); + clear_scheduled_bg_copies_to_vram(); + ScanlineEffect_Stop(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + TeachyTvSetupBg(); + TeachyTvLoadGraphic(); + ++gMain.state; + return; + section_1: + if( free_temp_tile_data_buffers_if_possible() == 1 ) + return; + TeachyTvCreateAndRenderRbox(); + TeachyTvInitIo(); + if ( gTeachyTV_StaticResources.mode == 2 ) + { + taskId = CreateTask(TeachyTvTaskFunction, 0); + gTasks[taskId].data[1] = TeachyTvSetupObj(); + TeachyTvConfigRboxAndObj(taskId); + } + else + { + taskId = CreateTask(sub_815B2C0, 0); + x = (u32)sub_815AEE8(); + gTasks[taskId].data[0] = (x << 24) >> 24; + gTasks[taskId].data[1] = TeachyTvSetupObj(); + sub_815AF5C(); + PlayNewMapMusic(BGM_FRLG_TEACHY_TV); + sub_815B094(); + } + schedule_bg_copy_tilemap_to_vram(0); + schedule_bg_copy_tilemap_to_vram(1u); + schedule_bg_copy_tilemap_to_vram(2u); + schedule_bg_copy_tilemap_to_vram(3u); + sub_812B1E0(9); // help system something + BlendPalettes(0xFFFFFFFF, 0x10u, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10u, 0, 0); + SetVBlankCallback(VblankHandlerTeachyTv); + SetMainCallback2(C2TeachyTv); +} + +void TeachyTvSetupBg() +{ + InitBgReg(); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, &gUnknown_84792E0, 4u); + SetBgTilemapBuffer(1u, (u8 *)gUnknown_203F450 + 4); + SetBgTilemapBuffer(2u, (u8 *)gUnknown_203F450 + 0x1004); + SetBgTilemapBuffer(3u, (u8 *)gUnknown_203F450 + 0x2004); + SetGpuReg(0, 0x3040u); + ShowBg(0); + ShowBg(1u); + ShowBg(2u); + ShowBg(3u); + ChangeBgX(3u, 0x1000u, 2u); + ChangeBgY(3u, 0x2800u, 1u); + *((u8 *)gUnknown_203F450 + 0x4004) = 0; + *((u8 *)gUnknown_203F450 + 0x4005) = 3; + SetGpuReg(0x50u, 0); +} + +void TeachyTvLoadGraphic() +{ + u16 src; + src = 0; + reset_temp_tile_data_buffers(); + decompress_and_copy_tile_data_to_vram(1u, &gUnknown_8E86240, 0, 0, 0); + LZDecompressWram((u8 *)&gUnknown_8E86BE8, (*(u8 **)&gUnknown_203F450) + 4); + LZDecompressWram((u8 *)&gUnknown_8E86D6C, (*(u8 **)&gUnknown_203F450) + 0x3004); + LoadCompressedPalette(&gUnknown_8E86F98, 0, 0x80u); + LoadPalette(&src, 0, 2u); + LoadSpritePalette((struct SpritePalette *)&gUnknown_83A5348); + sub_815BD80((u8 *)gUnknown_203F450 + 0x2004); +} + +void TeachyTvCreateAndRenderRbox() +{ + InitWindows(&gUnknown_84792F0); + DeactivateAllTextPrinters(); + FillWindowPixelBuffer(0, 0xCCu); + PutWindowTilemap(0); + PutWindowTilemap(1u); + CopyWindowToVram(0, 2u); +} \ No newline at end of file diff --git a/src/tm_case.c b/src/tm_case.c index 177d3320f..80fa29c5f 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -321,7 +321,7 @@ static bool8 DoSetUpTMCaseUI(void) switch (gMain.state) { case 0: - sub_80BF768(); + VblankHblankHandlerSetZero(); clear_scheduled_bg_copies_to_vram(); gMain.state++; break; @@ -426,7 +426,7 @@ static void ResetBufferPointers_NoFree(void) static void LoadBGTemplates(void) { void ** ptr; - sub_80BF7C8(); + InitBgReg(); ptr = &sTilemapBuffer; *ptr = AllocZeroed(0x800); ResetBgsAndClearDma3BusyFlags(0); @@ -496,11 +496,11 @@ static void InitTMCaseListMenuItems(void) for (i = 0; i < sTMCaseDynamicResources->numTMs; i++) { GetTMNumberAndMoveString(sListMenuStringsBuffer[i], pocket->itemSlots[i].itemId); - sListMenuItemsBuffer[i].unk_00 = sListMenuStringsBuffer[i]; - sListMenuItemsBuffer[i].unk_04 = i; + sListMenuItemsBuffer[i].name = sListMenuStringsBuffer[i]; + sListMenuItemsBuffer[i].id = i; } - sListMenuItemsBuffer[i].unk_00 = gText_Close; - sListMenuItemsBuffer[i].unk_04 = -2; + sListMenuItemsBuffer[i].name = gText_Close; + sListMenuItemsBuffer[i].id = -2; gMultiuseListMenuTemplate.items = sListMenuItemsBuffer; gMultiuseListMenuTemplate.totalItems = sTMCaseDynamicResources->numTMs + 1; gMultiuseListMenuTemplate.windowId = 0; diff --git a/sym_ewram.txt b/sym_ewram.txt index a5151ebc0..609f7ec6c 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1639,10 +1639,7 @@ gUnknown_203F440: @ 203F440 .space 0x4 gTeachyTV_StaticResources: @ 203F444 - .space 0x6 - -gUnknown_203F44A: @ 203F44A - .space 0x6 + .space 12 gUnknown_203F450: @ 203F450 .space 0x4 -- cgit v1.2.3 From f7a81f2aa757fedc861d94deb363e1e3c460e5d3 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sun, 2 Jun 2019 07:01:19 +0800 Subject: sub_815AEE8 --- asm/teachy_tv.s | 64 ++++----------------------------------------------------- src/teachy_tv.c | 39 ++++++++++++++++++++++++++++------- src/vs_seeker.c | 37 +++++++++++++++++---------------- 3 files changed, 55 insertions(+), 85 deletions(-) diff --git a/asm/teachy_tv.s b/asm/teachy_tv.s index 8320d951c..a9dd793ab 100644 --- a/asm/teachy_tv.s +++ b/asm/teachy_tv.s @@ -5,62 +5,6 @@ .text - thumb_func_start sub_815AEE8 -sub_815AEE8: @ 815AEE8 - push {r4,r5,lr} - ldr r4, _0815AF48 @ =gMultiuseListMenuTemplate - adds r1, r4, 0 - ldr r0, _0815AF4C @ =gUnknown_8479368 - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - movs r0, 0x1 - strb r0, [r4, 0x10] - ldr r0, _0815AF50 @ =sub_815AFD8 - str r0, [r4, 0x4] - movs r0, 0xB6 - lsls r0, 1 - movs r1, 0x1 - bl CheckBagHasItem - lsls r0, 24 - cmp r0, 0 - bne _0815AF30 - ldr r0, _0815AF54 @ =gUnknown_8479340 - str r0, [r4] - movs r0, 0x5 - strh r0, [r4, 0xC] - strh r0, [r4, 0xE] - ldrb r2, [r4, 0x14] - lsls r1, r2, 28 - lsrs r1, 28 - adds r1, 0x8 - movs r0, 0xF - ands r1, r0 - movs r0, 0x10 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, 0x14] -_0815AF30: - ldr r0, _0815AF58 @ =gTeachyTV_StaticResources - ldrh r1, [r0, 0x6] - ldrh r2, [r0, 0x8] - adds r0, r4, 0 - bl ListMenuInit - lsls r0, 24 - lsrs r0, 24 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0815AF48: .4byte gMultiuseListMenuTemplate -_0815AF4C: .4byte gUnknown_8479368 -_0815AF50: .4byte sub_815AFD8 -_0815AF54: .4byte gUnknown_8479340 -_0815AF58: .4byte gTeachyTV_StaticResources - thumb_func_end sub_815AEE8 - thumb_func_start sub_815AF5C sub_815AF5C: @ 815AF5C push {lr} @@ -125,8 +69,8 @@ _0815AFD0: .4byte gUnknown_203F450 _0815AFD4: .4byte 0x00004007 thumb_func_end sub_815AFAC - thumb_func_start sub_815AFD8 -sub_815AFD8: @ 815AFD8 + thumb_func_start TeachyTvAudioByInput +TeachyTvAudioByInput: @ 815AFD8 push {lr} lsls r1, 24 lsrs r1, 24 @@ -137,7 +81,7 @@ sub_815AFD8: @ 815AFD8 _0815AFE8: pop {r0} bx r0 - thumb_func_end sub_815AFD8 + thumb_func_end TeachyTvAudioByInput thumb_func_start TeachyTvInitIo TeachyTvInitIo: @ 815AFEC @@ -1365,7 +1309,7 @@ _0815B94C: movs r4, 0 strh r4, [r5, 0x4] strh r4, [r5, 0x6] - bl sub_815AEE8 + bl TeachyTvSetupWindow lsls r0, 24 lsrs r0, 24 strh r0, [r5] diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 2c34b731b..c20e7b419 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -22,8 +22,8 @@ typedef struct { void (*callback)(); u8 mode; u8 param1; - u16 param2; - u16 param3; + u16 scrollOffset; + u16 selectedRow; u8 param4; u8 filler; } TeachyTv_s; @@ -40,7 +40,7 @@ void TeachyTvCreateAndRenderRbox(); extern void TeachyTvInitIo(); extern u8 TeachyTvSetupObj(); extern void TeachyTvConfigRboxAndObj(u8); -extern u8 sub_815AEE8(); +u8 TeachyTvSetupWindow(); extern void sub_815AF5C(); extern void sub_815B094(); void TeachyTvSetupBg(); @@ -79,14 +79,13 @@ void VblankHandlerTeachyTv() void sub_815ABC4(u8 mode, void (*cb)()) { - // JZW: I'm sorry, but otherwise I can't make it match baserom TeachyTv_s *v3 = &gTeachyTV_StaticResources; u16 v4 = 0; v3->mode = mode; v3->callback = cb; if(!mode) { - v3->param2 = v4; - v3->param3 = v4; + v3->scrollOffset = v4; + v3->selectedRow = v4; v3->param1 = 0; } if(mode == 1) @@ -117,6 +116,7 @@ void C2TeachyTvMainCallback() u32 x; state = gMain.state; + // tried several ways to reproduce the control flow, but all failed. Now using goto if ( state == 0 ) goto section_0; else if ( state == 1 ) @@ -154,7 +154,7 @@ void C2TeachyTvMainCallback() else { taskId = CreateTask(sub_815B2C0, 0); - x = (u32)sub_815AEE8(); + x = (u32)TeachyTvSetupWindow(); gTasks[taskId].data[0] = (x << 24) >> 24; gTasks[taskId].data[1] = TeachyTvSetupObj(); sub_815AF5C(); @@ -214,4 +214,29 @@ void TeachyTvCreateAndRenderRbox() PutWindowTilemap(0); PutWindowTilemap(1u); CopyWindowToVram(0, 2u); +} + +extern struct ListMenuTemplate gUnknown_8479368; +extern struct ListMenuItem gUnknown_8479340; +extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); +extern void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); + +u8 TeachyTvSetupWindow() +{ + int hasItem; + gMultiuseListMenuTemplate = gUnknown_8479368; + gMultiuseListMenuTemplate.windowId = 1; + gMultiuseListMenuTemplate.moveCursorFunc = TeachyTvAudioByInput; + hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1u); + if ( !(v0 << 24) ) + { + gMultiuseListMenuTemplate.items = &gUnknown_8479340; + gMultiuseListMenuTemplate.totalItems = 5; + gMultiuseListMenuTemplate.maxShowed = 5; + gMultiuseListMenuTemplate.upText_Y = (gMultiuseListMenuTemplate.upText_Y + 8) & 0xF; + } + return ListMenuInit( + &gMultiuseListMenuTemplate, + gTeachyTV_StaticResources.scrollOffset, + gTeachyTV_StaticResources.selectedRow); } \ No newline at end of file diff --git a/src/vs_seeker.c b/src/vs_seeker.c index bd5b9c7ea..bd19d96ff 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -24,6 +24,8 @@ #include "unk_810c3a4.h" #include "constants/movement_commands.h" #include "vs_seeker.h" +#include "item.h" +#include "constants/items.h" typedef enum { @@ -635,6 +637,7 @@ void sub_810C444(void) #ifdef NONMATCHING bool8 sub_810C4EC(void) { + s8 mask; if (CheckBagHasItem(ITEM_VS_SEEKER, 1) == TRUE) { if ((gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF) < 100) @@ -643,25 +646,23 @@ bool8 sub_810C4EC(void) if (FlagGet(0x801) == TRUE) { - u16 x; - do { - x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF; - } while (0); - if (x < 100) - { - x++; - gSaveBlock1Ptr->trainerRematchStepCounter = ((u16)(x << 8)) | (gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF); - } - do { - x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF; - } while (0); - if (x == 100) - { - FlagClear(0x801); - sub_810C640(); - sub_810D0D0(); - return TRUE; + register u8 x,y; + x = gSaveBlock1Ptr->trainerRematchStepCounter >> 8; + if (x > 99) { + mask = -1; + goto section_1; } + y = ((u8)x + 1); + gSaveBlock1Ptr->trainerRematchStepCounter = (((gSaveBlock1Ptr->trainerRematchStepCounter) & (u8)0xFFFFFFFF) | (y << 8)); + section_1: + x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & mask; + if (x == 100) + { + FlagClear(0x801); + sub_810C640(); + sub_810D0D0(); + return TRUE; + } } return FALSE; -- cgit v1.2.3 From 0a13397b8586bb4147d9e35c80a3c5aebff41d5b Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sun, 2 Jun 2019 15:25:04 +0800 Subject: some more functions --- asm/field_map_obj.s | 6 +- asm/naming_screen.s | 2 +- asm/overworld.s | 2 +- asm/shop.s | 2 +- asm/teachy_tv.s | 213 ++-------------------------------------------- include/field_map_obj.h | 2 +- include/menu_indicators.h | 4 +- src/fame_checker.c | 2 +- src/mevent_8145654.c | 4 +- src/teachy_tv.c | 98 ++++++++++++++++++--- 10 files changed, 108 insertions(+), 227 deletions(-) diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s index 145521094..ec60cc8c9 100644 --- a/asm/field_map_obj.s +++ b/asm/field_map_obj.s @@ -1550,8 +1550,8 @@ MakeObjectTemplateFromFieldObjectTemplate: @ 805E960 bx r0 thumb_func_end MakeObjectTemplateFromFieldObjectTemplate - thumb_func_start AddPseudoFieldObject -AddPseudoFieldObject: @ 805E978 + thumb_func_start AddPseudoEventObject +AddPseudoEventObject: @ 805E978 push {r4-r6,lr} sub sp, 0x1C ldr r4, [sp, 0x2C] @@ -1612,7 +1612,7 @@ _0805E9E4: .align 2, 0 _0805E9F0: .4byte 0x0000ffff _0805E9F4: .4byte gSprites - thumb_func_end AddPseudoFieldObject + thumb_func_end AddPseudoEventObject thumb_func_start sprite_new sprite_new: @ 805E9F8 diff --git a/asm/naming_screen.s b/asm/naming_screen.s index 01217d92f..f91b0f2b5 100644 --- a/asm/naming_screen.s +++ b/asm/naming_screen.s @@ -2789,7 +2789,7 @@ sub_809EF54: @ 809EF54 str r2, [sp] movs r2, 0x38 movs r3, 0x25 - bl AddPseudoFieldObject + bl AddPseudoEventObject adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 diff --git a/asm/overworld.s b/asm/overworld.s index 103ed2c46..87f146d39 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -7888,7 +7888,7 @@ _080588C6: movs r2, 0 str r2, [sp] movs r3, 0 - bl AddPseudoFieldObject + bl AddPseudoEventObject strb r0, [r4, 0x4] ldrb r1, [r4, 0x4] lsls r0, r1, 4 diff --git a/asm/shop.s b/asm/shop.s index 0cbaf1206..2dfc294a3 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -2017,7 +2017,7 @@ _0809BA56: str r0, [sp] adds r0, r4, 0 ldr r1, _0809BAF4 @ =SpriteCallbackDummy - bl AddPseudoFieldObject + bl AddPseudoEventObject lsls r0, 24 lsrs r0, 24 lsls r2, r0, 4 diff --git a/asm/teachy_tv.s b/asm/teachy_tv.s index a9dd793ab..cd74baad3 100644 --- a/asm/teachy_tv.s +++ b/asm/teachy_tv.s @@ -5,201 +5,6 @@ .text - thumb_func_start sub_815AF5C -sub_815AF5C: @ 815AF5C - push {lr} - movs r0, 0xB6 - lsls r0, 1 - movs r1, 0x1 - bl CheckBagHasItem - lsls r0, 24 - cmp r0, 0 - bne _0815AF84 - ldr r0, _0815AF7C @ =gUnknown_203F450 - ldr r0, [r0] - ldr r1, _0815AF80 @ =0x00004007 - adds r0, r1 - movs r1, 0xFF - strb r1, [r0] - b _0815AF96 - .align 2, 0 -_0815AF7C: .4byte gUnknown_203F450 -_0815AF80: .4byte 0x00004007 -_0815AF84: - ldr r0, _0815AF9C @ =gUnknown_8479380 - ldr r1, _0815AFA0 @ =gTeachyTV_StaticResources+6 - bl AddScrollIndicatorArrowPair - ldr r1, _0815AFA4 @ =gUnknown_203F450 - ldr r1, [r1] - ldr r2, _0815AFA8 @ =0x00004007 - adds r1, r2 - strb r0, [r1] -_0815AF96: - pop {r0} - bx r0 - .align 2, 0 -_0815AF9C: .4byte gUnknown_8479380 -_0815AFA0: .4byte gTeachyTV_StaticResources+6 -_0815AFA4: .4byte gUnknown_203F450 -_0815AFA8: .4byte 0x00004007 - thumb_func_end sub_815AF5C - - thumb_func_start sub_815AFAC -sub_815AFAC: @ 815AFAC - push {r4,lr} - ldr r4, _0815AFD0 @ =gUnknown_203F450 - ldr r0, [r4] - ldr r2, _0815AFD4 @ =0x00004007 - adds r1, r0, r2 - ldrb r0, [r1] - cmp r0, 0xFF - beq _0815AFCA - bl RemoveScrollIndicatorArrowPair - ldr r0, [r4] - ldr r1, _0815AFD4 @ =0x00004007 - adds r0, r1 - movs r1, 0xFF - strb r1, [r0] -_0815AFCA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815AFD0: .4byte gUnknown_203F450 -_0815AFD4: .4byte 0x00004007 - thumb_func_end sub_815AFAC - - thumb_func_start TeachyTvAudioByInput -TeachyTvAudioByInput: @ 815AFD8 - push {lr} - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0x1 - beq _0815AFE8 - movs r0, 0x5 - bl PlaySE -_0815AFE8: - pop {r0} - bx r0 - thumb_func_end TeachyTvAudioByInput - - thumb_func_start TeachyTvInitIo -TeachyTvInitIo: @ 815AFEC - push {lr} - movs r0, 0x48 - movs r1, 0x3F - bl SetGpuReg - movs r0, 0x4A - movs r1, 0x1F - bl SetGpuReg - movs r0, 0x50 - movs r1, 0xCC - bl SetGpuReg - movs r0, 0x54 - movs r1, 0x5 - bl SetGpuReg - pop {r0} - bx r0 - thumb_func_end TeachyTvInitIo - - thumb_func_start TeachyTvSetupObj -TeachyTvSetupObj: @ 815B014 - push {lr} - sub sp, 0x4 - ldr r1, _0815B054 @ =SpriteCallbackDummy - movs r0, 0x8 - str r0, [sp] - movs r0, 0x5A - movs r2, 0 - movs r3, 0 - bl AddPseudoFieldObject - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0815B058 @ =gSprites - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r1 - ldrb r3, [r2, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r3 - movs r3, 0x8 - orrs r1, r3 - strb r1, [r2, 0x5] - adds r2, 0x3E - ldrb r1, [r2] - movs r3, 0x4 - orrs r1, r3 - strb r1, [r2] - add sp, 0x4 - pop {r1} - bx r1 - .align 2, 0 -_0815B054: .4byte SpriteCallbackDummy -_0815B058: .4byte gSprites - thumb_func_end TeachyTvSetupObj - - thumb_func_start sub_815B05C -sub_815B05C: @ 815B05C - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r3, 24 - lsrs r3, 24 - ldr r5, _0815B090 @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r0, r5 - strh r1, [r0, 0x24] - strh r2, [r0, 0x26] - adds r4, r0, 0 - adds r4, 0x3E - ldrb r2, [r4] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - strb r1, [r4] - adds r1, r3, 0 - bl StartSpriteAnim - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0815B090: .4byte gSprites - thumb_func_end sub_815B05C - - thumb_func_start sub_815B094 -sub_815B094: @ 815B094 - push {lr} - ldr r1, _0815B0AC @ =0x00000c64 - movs r0, 0x44 - bl SetGpuReg - ldr r1, _0815B0B0 @ =0x00001cd4 - movs r0, 0x40 - bl SetGpuReg - pop {r0} - bx r0 - .align 2, 0 -_0815B0AC: .4byte 0x00000c64 -_0815B0B0: .4byte 0x00001cd4 - thumb_func_end sub_815B094 - - thumb_func_start sub_815B0B4 -sub_815B0B4: @ 815B0B4 - push {lr} - movs r0, 0x44 - movs r1, 0 - bl SetGpuReg - movs r0, 0x40 - movs r1, 0 - bl SetGpuReg - pop {r0} - bx r0 - thumb_func_end sub_815B0B4 - thumb_func_start sub_815B0CC sub_815B0CC: @ 815B0CC push {r4-r7,lr} @@ -261,7 +66,7 @@ TeachyTvConfigRboxAndObj: @ 815B118 adds r7, r0, r1 movs r0, 0x1 bl ClearWindowTilemap - bl sub_815B0B4 + bl TeachyTvClearWindowRegs ldr r0, _0815B198 @ =gTeachyTV_StaticResources ldrb r0, [r0, 0x5] cmp r0, 0 @@ -272,7 +77,7 @@ TeachyTvConfigRboxAndObj: @ 815B118 movs r1, 0x78 movs r2, 0x38 movs r3, 0 - bl sub_815B05C + bl TeachyTvSetSpriteCoordsAndSwitchFrame movs r4, 0xC0 lsls r4, 6 movs r0, 0x3 @@ -311,7 +116,7 @@ _0815B1A8: movs r1, 0x78 movs r2, 0x38 movs r3, 0 - bl sub_815B05C + bl TeachyTvSetSpriteCoordsAndSwitchFrame _0815B1B8: movs r0, 0 strh r0, [r5, 0x8] @@ -517,12 +322,12 @@ _0815B33E: adds r1, r2, 0x6 adds r2, 0x8 bl DestroyListMenu - bl sub_815B0B4 + bl TeachyTvClearWindowRegs movs r0, 0x1 bl ClearWindowTilemap movs r0, 0 bl schedule_bg_copy_tilemap_to_vram - bl sub_815AFAC + bl TeachyTvRemoveScrollIndicatorArrowPair strh r4, [r6, 0x6] strh r4, [r6, 0x4] ldr r1, _0815B384 @ =gTasks @@ -578,7 +383,7 @@ sub_815B38C: @ 815B38C movs r1, 0x8 movs r2, 0x38 movs r3, 0x7 - bl sub_815B05C + bl TeachyTvSetSpriteCoordsAndSwitchFrame movs r0, 0x2 bl schedule_bg_copy_tilemap_to_vram movs r0, 0 @@ -752,7 +557,7 @@ sub_815B4EC: @ 815B4EC movs r1, 0 movs r2, 0 movs r3, 0 - bl sub_815B05C + bl TeachyTvSetSpriteCoordsAndSwitchFrame movs r0, 0 movs r1, 0xCC bl FillWindowPixelBuffer @@ -1320,8 +1125,8 @@ _0815B94C: str r1, [r0] movs r0, 0 bl PutWindowTilemap - bl sub_815AF5C - bl sub_815B094 + bl TeachyTvSetupScrollIndicatorArrowPair + bl TeachyTvSetWindowRegs movs r0, 0 bl schedule_bg_copy_tilemap_to_vram movs r0, 0x3 diff --git a/include/field_map_obj.h b/include/field_map_obj.h index 69e3419de..590b54ce3 100644 --- a/include/field_map_obj.h +++ b/include/field_map_obj.h @@ -46,7 +46,7 @@ void FieldObjectClearAnim(struct MapObject *); void FieldObjectClearAnimIfSpecialAnimActive(struct MapObject *); void SpawnFieldObjectsInView(s16, s16); u8 sprite_new(u8, u8, s16, s16, u8, u8); -u8 AddPseudoFieldObject(u16, void (*)(struct Sprite *), s16, s16, u8); +u8 AddPseudoEventObject(u16, void (*)(struct Sprite *), s16, s16, u8); u8 show_sprite(u8, u8, u8); u8 SpawnSpecialFieldObjectParametrized(u8, u8, u8, s16, s16, u8); u8 SpawnSpecialFieldObject(struct MapObjectTemplate *); diff --git a/include/menu_indicators.h b/include/menu_indicators.h index f195ceb6d..f65e3f2ac 100644 --- a/include/menu_indicators.h +++ b/include/menu_indicators.h @@ -7,7 +7,7 @@ // Exported RAM declarations -struct ScrollIndicatorArrowPairTemplate +struct ScrollArrowsTemplate { u8 unk_00; u8 unk_01; @@ -25,7 +25,7 @@ struct ScrollIndicatorArrowPairTemplate // Exported ROM declarations u8 AddScrollIndicatorArrowPairParametrized(u8, u8, u8, u8, s32, u16, u16, u16 *); -u8 AddScrollIndicatorArrowPair(const struct ScrollIndicatorArrowPairTemplate * template, u16 * a1); +u8 AddScrollIndicatorArrowPair(const struct ScrollArrowsTemplate * template, u16 * a1); void RemoveScrollIndicatorArrowPair(u8); #endif //GUARD_MENU_INDICATORS_H diff --git a/src/fame_checker.c b/src/fame_checker.c index 4b9feb45b..aff9733e9 100644 --- a/src/fame_checker.c +++ b/src/fame_checker.c @@ -1400,7 +1400,7 @@ static void FC_PutWindowTilemapAndCopyWindowToVramMode3_2(u8 windowId) static void FC_CreateScrollIndicatorArrowPair(void) { - struct ScrollIndicatorArrowPairTemplate template = { + struct ScrollArrowsTemplate template = { 2, 40, 26, diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index af3024bff..00936f9f1 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -460,7 +460,7 @@ struct UnkStruct_203F3CC /*01cc*/ u8 filler_01CC[2]; /*01ce*/ u8 unk_01CE[41]; /*01f7*/ u8 unk_01F7[10][41]; - /*0394*/ struct ScrollIndicatorArrowPairTemplate unk_0394; + /*0394*/ struct ScrollArrowsTemplate unk_0394; /*03a4*/ u8 buffer_03A4[0x1000]; }; @@ -478,7 +478,7 @@ const struct WindowTemplate gUnknown_8468040[] = { {0, 1, 0, 28, 3, 15, 0x000}, {2, 1, 3, 28, 20, 15, 0x000} }; -const struct ScrollIndicatorArrowPairTemplate gUnknown_8468050 = { +const struct ScrollArrowsTemplate gUnknown_8468050 = { 0x02, 0xe8, 0x18, 0x03, 0xe8, 0x98, 0x0000, 0x0002, 0x1000, 0x1000, 0x0, 0x000 }; diff --git a/src/teachy_tv.c b/src/teachy_tv.c index c20e7b419..c62b6d6f1 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -15,6 +15,8 @@ #include "window.h" #include "list_menu.h" #include "item.h" +#include "menu_indicators.h" +#include "field_map_obj.h" #include "constants/songs.h" #include "constants/items.h" @@ -37,12 +39,12 @@ void sub_815ABC4(u8 mode, void (*cb)()); void CB2_ReturnToTeachyTV(); extern void sub_815AC20(); void TeachyTvCreateAndRenderRbox(); -extern void TeachyTvInitIo(); -extern u8 TeachyTvSetupObj(); +void TeachyTvInitIo(); +u8 TeachyTvSetupObjEventAndOam(); extern void TeachyTvConfigRboxAndObj(u8); u8 TeachyTvSetupWindow(); -extern void sub_815AF5C(); -extern void sub_815B094(); +void TeachyTvSetupScrollIndicatorArrowPair(); +void TeachyTvSetWindowRegs(); void TeachyTvSetupBg(); void TeachyTvLoadGraphic(); extern void TeachyTvTaskFunction(u8); @@ -148,7 +150,7 @@ void C2TeachyTvMainCallback() if ( gTeachyTV_StaticResources.mode == 2 ) { taskId = CreateTask(TeachyTvTaskFunction, 0); - gTasks[taskId].data[1] = TeachyTvSetupObj(); + gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); TeachyTvConfigRboxAndObj(taskId); } else @@ -156,10 +158,10 @@ void C2TeachyTvMainCallback() taskId = CreateTask(sub_815B2C0, 0); x = (u32)TeachyTvSetupWindow(); gTasks[taskId].data[0] = (x << 24) >> 24; - gTasks[taskId].data[1] = TeachyTvSetupObj(); - sub_815AF5C(); + gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); + TeachyTvSetupScrollIndicatorArrowPair(); PlayNewMapMusic(BGM_FRLG_TEACHY_TV); - sub_815B094(); + TeachyTvSetWindowRegs(); } schedule_bg_copy_tilemap_to_vram(0); schedule_bg_copy_tilemap_to_vram(1u); @@ -219,7 +221,7 @@ void TeachyTvCreateAndRenderRbox() extern struct ListMenuTemplate gUnknown_8479368; extern struct ListMenuItem gUnknown_8479340; extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); -extern void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); +void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); u8 TeachyTvSetupWindow() { @@ -228,7 +230,7 @@ u8 TeachyTvSetupWindow() gMultiuseListMenuTemplate.windowId = 1; gMultiuseListMenuTemplate.moveCursorFunc = TeachyTvAudioByInput; hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1u); - if ( !(v0 << 24) ) + if ( !(hasItem << 24) ) { gMultiuseListMenuTemplate.items = &gUnknown_8479340; gMultiuseListMenuTemplate.totalItems = 5; @@ -239,4 +241,78 @@ u8 TeachyTvSetupWindow() &gMultiuseListMenuTemplate, gTeachyTV_StaticResources.scrollOffset, gTeachyTV_StaticResources.selectedRow); -} \ No newline at end of file +} + +extern const struct ScrollArrowsTemplate gUnknown_8479380; + +void TeachyTvSetupScrollIndicatorArrowPair() +{ + int hasItem; + hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1u); + if ( ! hasItem << 24 ) { + u8 * temp = (u8 *)gUnknown_203F450; + *((u8 *)temp + 0x4007) = 0xFF; + } + + else { + u8 *temp, res; + res = AddScrollIndicatorArrowPair( + &gUnknown_8479380, + &(gTeachyTV_StaticResources.scrollOffset)); + temp = (u8 *)gUnknown_203F450; + *((u8 *)temp + 0x4007) = res; + } +} + +void TeachyTvRemoveScrollIndicatorArrowPair() +{ + u8 *temp = ((u8*)gUnknown_203F450 + 0x4007); + if ( *temp != 0xFF ) + { + RemoveScrollIndicatorArrowPair(*temp); + *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; + } +} + +void TeachyTvAudioByInput(s32 notUsed, bool8 play, struct ListMenu *notUsedAlt) +{ + if ( play != 1 ) + PlaySE(SE_SELECT); +} + +void TeachyTvInitIo() +{ + SetGpuReg(0x48u, 0x3Fu); + SetGpuReg(0x4Au, 0x1Fu); + SetGpuReg(0x50u, 0xCCu); + SetGpuReg(0x54u, 5u); +} + +u8 TeachyTvSetupObjEventAndOam() +{ + u8 temp = AddPseudoEventObject(90, SpriteCallbackDummy, 0, 0, 8); + gSprites[temp].oam.priority = 2; + gSprites[temp].invisible = 1; + return temp; +} + +void TeachyTvSetSpriteCoordsAndSwitchFrame(u8 objId, u16 x, u16 y, u8 frame) +{ + gSprites[objId].pos2.x = x; + gSprites[objId].pos2.y = y; + gSprites[objId].invisible = 0; + StartSpriteAnim(&gSprites[objId], frame); +} + +void TeachyTvSetWindowRegs() +{ + SetGpuReg(0x44u, 0xC64u); + SetGpuReg(0x40u, 0x1CD4u); +} + +void TeachyTvClearWindowRegs() +{ + SetGpuReg(0x44u, 0); + SetGpuReg(0x40u, 0); +} + -- cgit v1.2.3 From 49a1de36d38b41b0f3f7c443acc636281314b749 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 3 Jun 2019 03:19:15 +0800 Subject: sub_815B0CC and rollback of failed attempt to make it compilable --- asm/item_menu.s | 8 ++++---- asm/party_menu.s | 4 ++-- asm/teachy_tv.s | 55 +++++++---------------------------------------------- include/teachy_tv.h | 2 +- src/teachy_tv.c | 36 +++++++++++++++++++++++++++++++---- src/tm_case.c | 2 +- src/vs_seeker.c | 37 ++++++++++++++++++----------------- 7 files changed, 65 insertions(+), 79 deletions(-) diff --git a/asm/item_menu.s b/asm/item_menu.s index 3a665b61e..c81730a55 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -6342,11 +6342,11 @@ sub_810B108: @ 810B108 beq _0810B160 cmp r4, 0x8 beq _0810B16C - ldr r2, _0810B15C @ =CB2_ReturnToTeachyTV + ldr r2, _0810B15C @ =sub_815ABFC adds r0, r4, 0 b _0810B170 .align 2, 0 -_0810B15C: .4byte CB2_ReturnToTeachyTV +_0810B15C: .4byte sub_815ABFC _0810B160: ldr r2, _0810B168 @ =sub_8030AEC movs r0, 0x7 @@ -6386,7 +6386,7 @@ _0810B19C: bl sub_815AC20 ldr r0, _0810B1C4 @ =gUnknown_203AD10 ldr r1, [r0] - ldr r0, _0810B1C8 @ =CB2_ReturnToTeachyTV + ldr r0, _0810B1C8 @ =sub_815ABFC str r0, [r1] ldr r1, _0810B1CC @ =gTasks lsls r0, r4, 2 @@ -6402,7 +6402,7 @@ _0810B1BC: bx r1 .align 2, 0 _0810B1C4: .4byte gUnknown_203AD10 -_0810B1C8: .4byte CB2_ReturnToTeachyTV +_0810B1C8: .4byte sub_815ABFC _0810B1CC: .4byte gTasks _0810B1D0: .4byte sub_810B070 thumb_func_end sub_810B180 diff --git a/asm/party_menu.s b/asm/party_menu.s index 13ca24a2f..eab7c9455 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -4879,12 +4879,12 @@ sub_8120FB0: @ 8120FB0 bl FreeRestoreBattleData bl LoadPlayerParty bl sub_815AC20 - ldr r0, _08120FC8 @ =CB2_ReturnToTeachyTV + ldr r0, _08120FC8 @ =sub_815ABFC bl SetMainCallback2 pop {r0} bx r0 .align 2, 0 -_08120FC8: .4byte CB2_ReturnToTeachyTV +_08120FC8: .4byte sub_815ABFC thumb_func_end sub_8120FB0 thumb_func_start sub_8120FCC diff --git a/asm/teachy_tv.s b/asm/teachy_tv.s index cd74baad3..46824b53b 100644 --- a/asm/teachy_tv.s +++ b/asm/teachy_tv.s @@ -5,49 +5,8 @@ .text - thumb_func_start sub_815B0CC -sub_815B0CC: @ 815B0CC - push {r4-r7,lr} - movs r0, 0x2 - bl GetBgTilemapBuffer - adds r7, r0, 0 - movs r0, 0x1 -_0815B0D8: - movs r4, 0x2 - lsls r5, r0, 5 - adds r6, r0, 0x1 -_0815B0DE: - bl Random - adds r2, r5, r4 - lsls r2, 1 - adds r2, r7 - movs r1, 0x3 - ands r1, r0 - lsls r1, 10 - ldr r3, _0815B114 @ =0x0000301f - adds r0, r3, 0 - adds r1, r0 - strh r1, [r2] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x1B - bls _0815B0DE - lsls r0, r6, 24 - lsrs r0, 24 - cmp r0, 0xC - bls _0815B0D8 - movs r0, 0x2 - bl schedule_bg_copy_tilemap_to_vram - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815B114: .4byte 0x0000301f - thumb_func_end sub_815B0CC - - thumb_func_start TeachyTvConfigRboxAndObj -TeachyTvConfigRboxAndObj: @ 815B118 + thumb_func_start TeachyTvSetupPostBattleWindowAndObj +TeachyTvSetupPostBattleWindowAndObj: @ 815B118 push {r4-r7,lr} sub sp, 0x4 lsls r0, 24 @@ -134,7 +93,7 @@ _0815B1B8: pop {r4-r7} pop {r0} bx r0 - thumb_func_end TeachyTvConfigRboxAndObj + thumb_func_end TeachyTvSetupPostBattleWindowAndObj thumb_func_start sub_815B1DC sub_815B1DC: @ 815B1DC @@ -265,7 +224,7 @@ sub_815B2C0: @ 815B2C0 lsls r0, 3 ldr r1, _0815B31C @ =gTasks+0x8 adds r6, r0, r1 - bl sub_815B0CC + bl TeachyTvBg2AnimController ldr r0, _0815B320 @ =gPaletteFade ldrb r1, [r0, 0x7] movs r0, 0x80 @@ -358,7 +317,7 @@ sub_815B38C: @ 815B38C lsls r1, 3 ldr r0, _0815B3F8 @ =gTasks+0x8 adds r4, r1, r0 - bl sub_815B0CC + bl TeachyTvBg2AnimController ldrh r0, [r4, 0x4] adds r0, 0x1 strh r0, [r4, 0x4] @@ -1103,7 +1062,7 @@ sub_815B92C: @ 815B92C lsls r0, 1 bl PlayNewMapMusic _0815B94C: - bl sub_815B0CC + bl TeachyTvBg2AnimController ldrh r0, [r5, 0x4] adds r0, 0x1 strh r0, [r5, 0x4] @@ -1630,7 +1589,7 @@ _0815BD70: lsls r0, 1 bl PlayNewMapMusic _0815BD78: - bl CB2_ReturnToTeachyTV + bl sub_815ABFC pop {r0} bx r0 thumb_func_end sub_815BD58 diff --git a/include/teachy_tv.h b/include/teachy_tv.h index 374780c04..382ad117d 100644 --- a/include/teachy_tv.h +++ b/include/teachy_tv.h @@ -1,7 +1,7 @@ #ifndef GUARD_TEACHY_TV_H #define GUARD_TEACHY_TV_H -void CB2_ReturnToTeachyTV(void); +void sub_815ABFC(void); void sub_815AC20(void); #endif //GUARD_TEACHY_TV_H diff --git a/src/teachy_tv.c b/src/teachy_tv.c index c62b6d6f1..60b182575 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -17,6 +17,7 @@ #include "item.h" #include "menu_indicators.h" #include "field_map_obj.h" +#include "random.h" #include "constants/songs.h" #include "constants/items.h" @@ -36,12 +37,12 @@ void C2TeachyTv(); void C2TeachyTvMainCallback(); void VblankHandlerTeachyTv(); void sub_815ABC4(u8 mode, void (*cb)()); -void CB2_ReturnToTeachyTV(); +void sub_815ABFC(); extern void sub_815AC20(); void TeachyTvCreateAndRenderRbox(); void TeachyTvInitIo(); u8 TeachyTvSetupObjEventAndOam(); -extern void TeachyTvConfigRboxAndObj(u8); +extern void TeachyTvSetupPostBattleWindowAndObj(u8); u8 TeachyTvSetupWindow(); void TeachyTvSetupScrollIndicatorArrowPair(); void TeachyTvSetWindowRegs(); @@ -95,7 +96,7 @@ void sub_815ABC4(u8 mode, void (*cb)()) SetMainCallback2(C2TeachyTvMainCallback); } -void CB2_ReturnToTeachyTV() +void sub_815ABFC() { if(gTeachyTV_StaticResources.mode == 1) sub_815ABC4(1,gTeachyTV_StaticResources.callback); @@ -151,7 +152,7 @@ void C2TeachyTvMainCallback() { taskId = CreateTask(TeachyTvTaskFunction, 0); gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); - TeachyTvConfigRboxAndObj(taskId); + TeachyTvSetupPostBattleWindowAndObj(taskId); } else { @@ -316,3 +317,30 @@ void TeachyTvClearWindowRegs() SetGpuReg(0x40u, 0); } +void TeachyTvBg2AnimController() +{ + u16 *tilemapBuffer; + u8 counter; + u32 offset2; + u32 offset; + u32 counter2; + + tilemapBuffer = (u16 *)GetBgTilemapBuffer(2u); + counter = 1; + do + { + offset2 = 2; + offset = 0x20 * counter; + counter2 = counter + 1; + do + { + tilemapBuffer[offset + offset2] = ((Random() & 3) << 10) + 0x301F; + offset2 = (offset2 + 1) << 0x18 >> 0x18; + } + while ( offset2 <= 0x1B ); + counter = counter2; + } + while ( counter2 << 0x18 >> 0x18 <= 0xCu ); + schedule_bg_copy_tilemap_to_vram(2u); +} + diff --git a/src/tm_case.c b/src/tm_case.c index 80fa29c5f..ce31e79c3 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -1147,7 +1147,7 @@ void PokeDude_InitTMCase(void) AddBagItem(ITEM_TM03, 1); AddBagItem(ITEM_TM09, 1); AddBagItem(ITEM_TM35, 1); - InitTMCase(4, CB2_ReturnToTeachyTV, 0); + InitTMCase(4, sub_815ABFC, 0); } static void Task_TMCaseDude1(u8 taskId) diff --git a/src/vs_seeker.c b/src/vs_seeker.c index bd19d96ff..bd5b9c7ea 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -24,8 +24,6 @@ #include "unk_810c3a4.h" #include "constants/movement_commands.h" #include "vs_seeker.h" -#include "item.h" -#include "constants/items.h" typedef enum { @@ -637,7 +635,6 @@ void sub_810C444(void) #ifdef NONMATCHING bool8 sub_810C4EC(void) { - s8 mask; if (CheckBagHasItem(ITEM_VS_SEEKER, 1) == TRUE) { if ((gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF) < 100) @@ -646,23 +643,25 @@ bool8 sub_810C4EC(void) if (FlagGet(0x801) == TRUE) { - register u8 x,y; - x = gSaveBlock1Ptr->trainerRematchStepCounter >> 8; - if (x > 99) { - mask = -1; - goto section_1; + u16 x; + do { + x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF; + } while (0); + if (x < 100) + { + x++; + gSaveBlock1Ptr->trainerRematchStepCounter = ((u16)(x << 8)) | (gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF); + } + do { + x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF; + } while (0); + if (x == 100) + { + FlagClear(0x801); + sub_810C640(); + sub_810D0D0(); + return TRUE; } - y = ((u8)x + 1); - gSaveBlock1Ptr->trainerRematchStepCounter = (((gSaveBlock1Ptr->trainerRematchStepCounter) & (u8)0xFFFFFFFF) | (y << 8)); - section_1: - x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & mask; - if (x == 100) - { - FlagClear(0x801); - sub_810C640(); - sub_810D0D0(); - return TRUE; - } } return FALSE; -- cgit v1.2.3 From b6a166c45960e1963bf508f83b9da1a8d6a71df4 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 4 Jun 2019 00:00:21 +0800 Subject: more symbol name fixes --- asm/.fuse_hidden00001c3c00000003 | 2244 ++++++++++++++++++++++++++++++++++++++ asm/.fuse_hidden00001c3c00000005 | 2244 ++++++++++++++++++++++++++++++++++++++ asm/berry_pouch.s | 2 +- asm/field_specials.s | 2 +- asm/item_menu.s | 14 +- asm/item_pc.s | 6 +- asm/learn_move.s | 2 +- asm/list_menu.s | 6 +- asm/player_pc.s | 2 +- asm/pokedex_screen.s | 12 +- asm/shop.s | 2 +- asm/teachy_tv.s | 8 +- include/global.fieldmap.h | 4 +- include/list_menu.h | 2 +- src/.fuse_hidden00001c3f00000004 | 346 ++++++ src/fame_checker.c | 6 +- src/teachy_tv.c | 10 +- src/tm_case.c | 2 +- 18 files changed, 4874 insertions(+), 40 deletions(-) create mode 100644 asm/.fuse_hidden00001c3c00000003 create mode 100644 asm/.fuse_hidden00001c3c00000005 create mode 100644 src/.fuse_hidden00001c3f00000004 diff --git a/asm/.fuse_hidden00001c3c00000003 b/asm/.fuse_hidden00001c3c00000003 new file mode 100644 index 000000000..a97657691 --- /dev/null +++ b/asm/.fuse_hidden00001c3c00000003 @@ -0,0 +1,2244 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start TeachyTvConfigRboxAndObj +TeachyTvConfigRboxAndObj: @ 815B118 + push {r4-r7,lr} + sub sp, 0x4 + lsls r0, 24 + lsrs r6, r0, 24 + lsls r0, r6, 2 + adds r0, r6 + lsls r0, 3 + ldr r1, _0815B190 @ =gTasks+0x8 + adds r5, r0, r1 + movs r0, 0x2 + ldrsh r1, [r5, r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, _0815B194 @ =gSprites + adds r7, r0, r1 + movs r0, 0x1 + bl ClearWindowTilemap + bl TeachyTvClearWindowRegs + ldr r0, _0815B198 @ =gTeachyTV_StaticResources + ldrb r0, [r0, 0x5] + cmp r0, 0 + blt _0815B1B8 + cmp r0, 0x3 + bgt _0815B1A8 + ldrb r0, [r5, 0x2] + movs r1, 0x78 + movs r2, 0x38 + movs r3, 0 + bl TeachyTvSetSpriteCoordsAndSwitchFrame + movs r4, 0xC0 + lsls r4, 6 + movs r0, 0x3 + adds r1, r4, 0 + movs r2, 0x1 + bl ChangeBgX + movs r0, 0x3 + adds r1, r4, 0 + movs r2, 0x2 + bl ChangeBgY + ldr r2, _0815B19C @ =gUnknown_203F450 + ldr r1, [r2] + ldr r0, _0815B1A0 @ =0x00004004 + adds r1, r0 + ldrb r0, [r1] + adds r0, 0x3 + strb r0, [r1] + ldr r1, [r2] + ldr r0, _0815B1A4 @ =0x00004005 + adds r1, r0 + ldrb r0, [r1] + subs r0, 0x3 + strb r0, [r1] + b _0815B1B8 + .align 2, 0 +_0815B190: .4byte gTasks+0x8 +_0815B194: .4byte gSprites +_0815B198: .4byte gTeachyTV_StaticResources +_0815B19C: .4byte gUnknown_203F450 +_0815B1A0: .4byte 0x00004004 +_0815B1A4: .4byte 0x00004005 +_0815B1A8: + cmp r0, 0x5 + bgt _0815B1B8 + ldrb r0, [r5, 0x2] + movs r1, 0x78 + movs r2, 0x38 + movs r3, 0 + bl TeachyTvSetSpriteCoordsAndSwitchFrame +_0815B1B8: + movs r0, 0 + strh r0, [r5, 0x8] + strh r0, [r5, 0xA] + movs r0, 0x24 + ldrsh r1, [r7, r0] + movs r0, 0x26 + ldrsh r2, [r7, r0] + movs r0, 0x1 + str r0, [sp] + adds r0, r6, 0 + movs r3, 0 + bl sub_815BAA0 + add sp, 0x4 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end TeachyTvConfigRboxAndObj + + thumb_func_start sub_815B1DC +sub_815B1DC: @ 815B1DC + push {r4,lr} + sub sp, 0x10 + adds r4, r0, 0 + ldr r2, _0815B21C @ =gTextFlags + ldrb r1, [r2] + movs r0, 0x5 + negs r0, r0 + ands r0, r1 + strb r0, [r2] + bl GetTextSpeedSetting + adds r3, r0, 0 + lsls r3, 24 + lsrs r3, 24 + movs r0, 0 + str r0, [sp] + movs r0, 0x1 + str r0, [sp, 0x4] + movs r0, 0xC + str r0, [sp, 0x8] + movs r0, 0x3 + str r0, [sp, 0xC] + movs r0, 0 + movs r1, 0x4 + adds r2, r4, 0 + bl AddTextPrinterParametrized + add sp, 0x10 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B21C: .4byte gTextFlags + thumb_func_end sub_815B1DC + + thumb_func_start sub_815B220 +sub_815B220: @ 815B220 + push {r4,lr} + ldr r4, _0815B238 @ =gUnknown_203F450 + ldr r0, [r4] + bl Free + movs r0, 0 + str r0, [r4] + bl FreeAllWindowBuffers + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B238: .4byte gUnknown_203F450 + thumb_func_end sub_815B220 + + thumb_func_start sub_815B23C +sub_815B23C: @ 815B23C + push {r4,lr} + sub sp, 0x4 + adds r4, r0, 0 + lsls r4, 24 + lsrs r4, 24 + movs r0, 0x1 + negs r0, r0 + movs r1, 0 + str r1, [sp] + movs r2, 0 + movs r3, 0x10 + bl BeginNormalPaletteFade + ldr r1, _0815B26C @ =gTasks + lsls r0, r4, 2 + adds r0, r4 + lsls r0, 3 + adds r0, r1 + ldr r1, _0815B270 @ =sub_815B274 + str r1, [r0] + add sp, 0x4 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B26C: .4byte gTasks +_0815B270: .4byte sub_815B274 + thumb_func_end sub_815B23C + + thumb_func_start sub_815B274 +sub_815B274: @ 815B274 + push {r4,lr} + lsls r0, 24 + lsrs r4, r0, 24 + ldr r0, _0815B298 @ =gPaletteFade + ldrb r1, [r0, 0x7] + movs r0, 0x80 + ands r0, r1 + cmp r0, 0 + bne _0815B2B6 + ldr r0, _0815B29C @ =gUnknown_203F450 + ldr r0, [r0] + ldr r0, [r0] + cmp r0, 0 + beq _0815B2A0 + bl SetMainCallback2 + b _0815B2AC + .align 2, 0 +_0815B298: .4byte gPaletteFade +_0815B29C: .4byte gUnknown_203F450 +_0815B2A0: + bl sub_8055DC4 + ldr r0, _0815B2BC @ =gTeachyTV_StaticResources + ldr r0, [r0] + bl SetMainCallback2 +_0815B2AC: + bl sub_815B220 + adds r0, r4, 0 + bl DestroyTask +_0815B2B6: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B2BC: .4byte gTeachyTV_StaticResources + thumb_func_end sub_815B274 + + thumb_func_start sub_815B2C0 +sub_815B2C0: @ 815B2C0 + push {r4-r7,lr} + lsls r0, 24 + lsrs r7, r0, 24 + lsls r0, r7, 2 + adds r0, r7 + lsls r0, 3 + ldr r1, _0815B31C @ =gTasks+0x8 + adds r6, r0, r1 + bl TeachyTvBg2AnimController + ldr r0, _0815B320 @ =gPaletteFade + ldrb r1, [r0, 0x7] + movs r0, 0x80 + ands r0, r1 + cmp r0, 0 + bne _0815B37A + ldrb r0, [r6] + bl ListMenuHandleInput + adds r5, r0, 0 + ldrb r0, [r6] + ldr r4, _0815B324 @ =gTeachyTV_StaticResources+6 + adds r2, r4, 0x2 + adds r1, r4, 0 + bl ListMenuGetScrollAndRow + ldr r0, _0815B328 @ =gMain + ldrh r1, [r0, 0x2E] + movs r0, 0x4 + ands r0, r1 + cmp r0, 0 + beq _0815B30A + subs r0, r4, 0x6 + ldr r1, [r0] + ldr r0, _0815B32C @ =UseFameCheckerFromMenu + cmp r1, r0 + bne _0815B330 +_0815B30A: + movs r0, 0x2 + negs r0, r0 + cmp r5, r0 + beq _0815B330 + adds r0, 0x1 + cmp r5, r0 + bne _0815B33E + b _0815B37A + .align 2, 0 +_0815B31C: .4byte gTasks+0x8 +_0815B320: .4byte gPaletteFade +_0815B324: .4byte gTeachyTV_StaticResources+6 +_0815B328: .4byte gMain +_0815B32C: .4byte UseFameCheckerFromMenu +_0815B330: + movs r0, 0x5 + bl PlaySE + adds r0, r7, 0 + bl sub_815B23C + b _0815B37A +_0815B33E: + movs r0, 0x5 + bl PlaySE + ldr r2, _0815B380 @ =gTeachyTV_StaticResources + movs r4, 0 + strb r5, [r2, 0x5] + ldrb r0, [r6] + adds r1, r2, 0x6 + adds r2, 0x8 + bl DestroyListMenu + bl TeachyTvClearWindowRegs + movs r0, 0x1 + bl ClearWindowTilemap + movs r0, 0 + bl schedule_bg_copy_tilemap_to_vram + bl TeachyTvRemoveScrollIndicatorArrowPair + strh r4, [r6, 0x6] + strh r4, [r6, 0x4] + ldr r1, _0815B384 @ =gTasks + lsls r0, r7, 2 + adds r0, r7 + lsls r0, 3 + adds r0, r1 + ldr r1, _0815B388 @ =sub_815B4EC + str r1, [r0] +_0815B37A: + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_0815B380: .4byte gTeachyTV_StaticResources +_0815B384: .4byte gTasks +_0815B388: .4byte sub_815B4EC + thumb_func_end sub_815B2C0 + + thumb_func_start sub_815B38C +sub_815B38C: @ 815B38C + push {r4,lr} + sub sp, 0xC + lsls r0, 24 + lsrs r0, 24 + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + ldr r0, _0815B3F8 @ =gTasks+0x8 + adds r4, r1, r0 + bl TeachyTvBg2AnimController + ldrh r0, [r4, 0x4] + adds r0, 0x1 + strh r0, [r4, 0x4] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x3F + ble _0815B3F0 + ldr r0, _0815B3FC @ =gUnknown_203F450 + ldr r1, [r0] + ldr r0, _0815B400 @ =0x00003004 + adds r1, r0 + movs r0, 0x20 + str r0, [sp] + str r0, [sp, 0x4] + movs r0, 0x11 + str r0, [sp, 0x8] + movs r0, 0x2 + movs r2, 0 + movs r3, 0 + bl CopyToBgTilemapBufferRect_ChangePalette + ldrb r0, [r4, 0x2] + movs r1, 0x8 + movs r2, 0x38 + movs r3, 0x7 + bl TeachyTvSetSpriteCoordsAndSwitchFrame + movs r0, 0x2 + bl schedule_bg_copy_tilemap_to_vram + movs r0, 0 + strh r0, [r4, 0x4] + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] + movs r0, 0x88 + lsls r0, 1 + bl PlayNewMapMusic +_0815B3F0: + add sp, 0xC + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B3F8: .4byte gTasks+0x8 +_0815B3FC: .4byte gUnknown_203F450 +_0815B400: .4byte 0x00003004 + thumb_func_end sub_815B38C + + thumb_func_start sub_815B404 +sub_815B404: @ 815B404 + push {r4,lr} + sub sp, 0x8 + lsls r0, 24 + lsrs r0, 24 + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + ldr r0, _0815B450 @ =gTasks+0x8 + adds r4, r1, r0 + ldrh r0, [r4, 0x4] + adds r0, 0x1 + strh r0, [r4, 0x4] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x86 + bne _0815B448 + movs r0, 0x1A + str r0, [sp] + movs r0, 0xC + str r0, [sp, 0x4] + movs r0, 0x2 + movs r1, 0 + movs r2, 0x2 + movs r3, 0x1 + bl FillBgTilemapBufferRect_Palette0 + movs r0, 0x2 + bl schedule_bg_copy_tilemap_to_vram + movs r0, 0 + strh r0, [r4, 0x4] + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] +_0815B448: + add sp, 0x8 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B450: .4byte gTasks+0x8 + thumb_func_end sub_815B404 + + thumb_func_start sub_815B454 +sub_815B454: @ 815B454 + push {r4,lr} + lsls r0, 24 + lsrs r0, 24 + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + ldr r0, _0815B484 @ =gTasks+0x8 + adds r4, r1, r0 + movs r0, 0x2 + ldrsh r1, [r4, r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, _0815B488 @ =gSprites + adds r1, r0, r1 + ldrh r2, [r4, 0x4] + movs r3, 0x4 + ldrsh r0, [r4, r3] + cmp r0, 0x23 + beq _0815B48C + adds r0, r2, 0x1 + strh r0, [r4, 0x4] + b _0815B4B8 + .align 2, 0 +_0815B484: .4byte gTasks+0x8 +_0815B488: .4byte gSprites +_0815B48C: + ldrh r2, [r1, 0x24] + movs r3, 0x24 + ldrsh r0, [r1, r3] + cmp r0, 0x78 + bne _0815B4B4 + adds r0, r1, 0 + movs r1, 0 + bl StartSpriteAnim + ldr r0, _0815B4B0 @ =gUnknown_841B83D + bl sub_815B1DC + movs r0, 0 + strh r0, [r4, 0x4] + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] + b _0815B4B8 + .align 2, 0 +_0815B4B0: .4byte gUnknown_841B83D +_0815B4B4: + adds r0, r2, 0x1 + strh r0, [r1, 0x24] +_0815B4B8: + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_815B454 + + thumb_func_start sub_815B4C0 +sub_815B4C0: @ 815B4C0 + push {r4,lr} + lsls r0, 24 + lsrs r0, 24 + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + ldr r0, _0815B4E8 @ =gTasks+0x8 + adds r4, r1, r0 + movs r0, 0 + bl sub_80BF518 + lsls r0, 16 + cmp r0, 0 + bne _0815B4E2 + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] +_0815B4E2: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B4E8: .4byte gTasks+0x8 + thumb_func_end sub_815B4C0 + + thumb_func_start sub_815B4EC +sub_815B4EC: @ 815B4EC + push {r4-r7,lr} + lsls r0, 24 + lsrs r2, r0, 24 + lsls r0, r2, 2 + adds r0, r2 + lsls r6, r0, 3 + ldr r7, _0815B548 @ =gTasks+0x8 + adds r5, r6, r7 + ldr r0, _0815B54C @ =gMain + ldrh r1, [r0, 0x2E] + movs r0, 0x2 + ands r0, r1 + cmp r0, 0 + beq _0815B55C + ldr r0, _0815B550 @ =gUnknown_203F450 + ldr r0, [r0] + ldr r1, _0815B554 @ =0x00004006 + adds r0, r1 + movs r4, 0 + movs r1, 0x1 + strb r1, [r0] + ldrb r0, [r5, 0x2] + movs r1, 0 + movs r2, 0 + movs r3, 0 + bl TeachyTvSetSpriteCoordsAndSwitchFrame + movs r0, 0 + movs r1, 0xCC + bl FillWindowPixelBuffer + movs r0, 0 + movs r1, 0x2 + bl CopyWindowToVram + bl sub_815B908 + strh r4, [r5, 0x4] + strh r4, [r5, 0x6] + adds r0, r7, 0 + subs r0, 0x8 + adds r0, r6, r0 + ldr r1, _0815B558 @ =sub_815B92C + str r1, [r0] + b _0815B578 + .align 2, 0 +_0815B548: .4byte gTasks+0x8 +_0815B54C: .4byte gMain +_0815B550: .4byte gUnknown_203F450 +_0815B554: .4byte 0x00004006 +_0815B558: .4byte sub_815B92C +_0815B55C: + ldr r1, _0815B580 @ =gUnknown_8479548 + ldr r0, _0815B584 @ =gTeachyTV_StaticResources + ldrb r0, [r0, 0x5] + lsls r0, 2 + adds r0, r1 + ldr r1, [r0] + movs r3, 0x6 + ldrsh r0, [r5, r3] + lsls r0, 2 + adds r0, r1 + ldr r1, [r0] + adds r0, r2, 0 + bl _call_via_r1 +_0815B578: + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_0815B580: .4byte gUnknown_8479548 +_0815B584: .4byte gTeachyTV_StaticResources + thumb_func_end sub_815B4EC + + thumb_func_start sub_815B588 +sub_815B588: @ 815B588 + push {r4,lr} + lsls r0, 24 + lsrs r0, 24 + lsls r4, r0, 2 + adds r4, r0 + lsls r4, 3 + ldr r0, _0815B5B4 @ =gTasks+0x8 + adds r4, r0 + ldr r1, _0815B5B8 @ =gUnknown_8479560 + ldr r0, _0815B5BC @ =gTeachyTV_StaticResources + ldrb r0, [r0, 0x5] + lsls r0, 2 + adds r0, r1 + ldr r0, [r0] + bl sub_815B1DC + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B5B4: .4byte gTasks+0x8 +_0815B5B8: .4byte gUnknown_8479560 +_0815B5BC: .4byte gTeachyTV_StaticResources + thumb_func_end sub_815B588 + + thumb_func_start sub_815B5C0 +sub_815B5C0: @ 815B5C0 + push {r4,lr} + lsls r0, 24 + lsrs r0, 24 + lsls r4, r0, 2 + adds r4, r0 + lsls r4, 3 + ldr r0, _0815B5EC @ =gTasks+0x8 + adds r4, r0 + ldr r1, _0815B5F0 @ =gUnknown_8479578 + ldr r0, _0815B5F4 @ =gTeachyTV_StaticResources + ldrb r0, [r0, 0x5] + lsls r0, 2 + adds r0, r1 + ldr r0, [r0] + bl sub_815B1DC + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B5EC: .4byte gTasks+0x8 +_0815B5F0: .4byte gUnknown_8479578 +_0815B5F4: .4byte gTeachyTV_StaticResources + thumb_func_end sub_815B5C0 + + thumb_func_start sub_815B5F8 +sub_815B5F8: @ 815B5F8 + push {r4,lr} + lsls r0, 24 + lsrs r0, 24 + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + ldr r0, _0815B620 @ =gTasks+0x8 + adds r4, r1, r0 + movs r0, 0 + bl sub_80BF518 + lsls r0, 16 + cmp r0, 0 + bne _0815B61A + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] +_0815B61A: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B620: .4byte gTasks+0x8 + thumb_func_end sub_815B5F8 + + thumb_func_start sub_815B624 +sub_815B624: @ 815B624 + push {r4,lr} + lsls r0, 24 + lsrs r0, 24 + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + ldr r0, _0815B65C @ =gTasks+0x8 + adds r4, r1, r0 + ldr r0, _0815B660 @ =gMain + ldrh r1, [r0, 0x2E] + movs r0, 0x3 + ands r0, r1 + cmp r0, 0 + beq _0815B656 + movs r0, 0 + movs r1, 0xCC + bl FillWindowPixelBuffer + movs r0, 0 + movs r1, 0x2 + bl CopyWindowToVram + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] +_0815B656: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B65C: .4byte gTasks+0x8 +_0815B660: .4byte gMain + thumb_func_end sub_815B624 + + thumb_func_start sub_815B664 +sub_815B664: @ 815B664 + push {r4,lr} + lsls r0, 24 + lsrs r0, 24 + lsls r4, r0, 2 + adds r4, r0 + lsls r4, 3 + ldr r0, _0815B6A0 @ =gTasks+0x8 + adds r4, r0 + movs r0, 0x2 + ldrsh r1, [r4, r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, _0815B6A4 @ =gSprites + adds r0, r1 + movs r1, 0x5 + bl StartSpriteAnim + movs r0, 0 + strh r0, [r4, 0x4] + strh r0, [r4, 0x8] + movs r0, 0x1 + strh r0, [r4, 0xA] + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B6A0: .4byte gTasks+0x8 +_0815B6A4: .4byte gSprites + thumb_func_end sub_815B664 + + thumb_func_start sub_815B6A8 +sub_815B6A8: @ 815B6A8 + push {r4-r6,lr} + sub sp, 0x4 + lsls r0, 24 + lsrs r5, r0, 24 + lsls r0, r5, 2 + adds r0, r5 + lsls r0, 3 + ldr r1, _0815B730 @ =gTasks+0x8 + adds r4, r0, r1 + movs r0, 0x2 + ldrsh r1, [r4, r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, _0815B734 @ =gSprites + adds r6, r0, r1 + movs r1, 0x80 + lsls r1, 1 + movs r0, 0x3 + movs r2, 0x2 + bl ChangeBgY + ldrh r0, [r4, 0x4] + adds r0, 0x1 + strh r0, [r4, 0x4] + movs r3, 0xF + ands r3, r0 + cmp r3, 0 + bne _0815B702 + ldr r0, _0815B738 @ =gUnknown_203F450 + ldr r1, [r0] + ldr r2, _0815B73C @ =0x00004005 + adds r1, r2 + ldrb r0, [r1] + subs r0, 0x1 + strb r0, [r1] + movs r0, 0x24 + ldrsh r1, [r6, r0] + movs r0, 0x26 + ldrsh r2, [r6, r0] + str r3, [sp] + adds r0, r5, 0 + movs r3, 0 + bl sub_815BAA0 +_0815B702: + movs r1, 0x4 + ldrsh r0, [r4, r1] + cmp r0, 0x30 + bne _0815B726 + movs r1, 0 + strh r1, [r4, 0x4] + movs r2, 0x1 + negs r2, r2 + adds r0, r2, 0 + strh r0, [r4, 0x8] + strh r1, [r4, 0xA] + adds r0, r6, 0 + movs r1, 0x7 + bl StartSpriteAnim + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] +_0815B726: + add sp, 0x4 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_0815B730: .4byte gTasks+0x8 +_0815B734: .4byte gSprites +_0815B738: .4byte gUnknown_203F450 +_0815B73C: .4byte 0x00004005 + thumb_func_end sub_815B6A8 + + thumb_func_start sub_815B740 +sub_815B740: @ 815B740 + push {r4-r6,lr} + sub sp, 0x4 + lsls r0, 24 + lsrs r0, 24 + adds r5, r0, 0 + lsls r0, r5, 2 + adds r0, r5 + lsls r0, 3 + ldr r1, _0815B7D4 @ =gTasks+0x8 + adds r4, r0, r1 + movs r0, 0x2 + ldrsh r1, [r4, r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, _0815B7D8 @ =gSprites + adds r6, r0, r1 + movs r1, 0x80 + lsls r1, 1 + movs r0, 0x3 + movs r2, 0x1 + bl ChangeBgX + ldrh r0, [r4, 0x4] + adds r0, 0x1 + strh r0, [r4, 0x4] + movs r2, 0xF + ands r0, r2 + cmp r0, 0 + bne _0815B78A + ldr r0, _0815B7DC @ =gUnknown_203F450 + ldr r1, [r0] + ldr r3, _0815B7E0 @ =0x00004004 + adds r1, r3 + ldrb r0, [r1] + adds r0, 0x1 + strb r0, [r1] +_0815B78A: + movs r1, 0x4 + ldrsh r0, [r4, r1] + adds r0, 0x8 + ands r0, r2 + cmp r0, 0 + bne _0815B7AC + ldrh r1, [r6, 0x24] + adds r1, 0x8 + lsls r1, 16 + asrs r1, 16 + movs r3, 0x26 + ldrsh r2, [r6, r3] + str r0, [sp] + adds r0, r5, 0 + movs r3, 0 + bl sub_815BAA0 +_0815B7AC: + movs r1, 0x4 + ldrsh r0, [r4, r1] + cmp r0, 0x30 + bne _0815B7CA + movs r0, 0 + strh r0, [r4, 0x4] + strh r0, [r4, 0x8] + strh r0, [r4, 0xA] + adds r0, r6, 0 + movs r1, 0x3 + bl StartSpriteAnim + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] +_0815B7CA: + add sp, 0x4 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_0815B7D4: .4byte gTasks+0x8 +_0815B7D8: .4byte gSprites +_0815B7DC: .4byte gUnknown_203F450 +_0815B7E0: .4byte 0x00004004 + thumb_func_end sub_815B740 + + thumb_func_start sub_815B7E4 +sub_815B7E4: @ 815B7E4 + push {r4-r6,lr} + sub sp, 0x4 + adds r6, r0, 0 + lsls r6, 24 + lsrs r6, 24 + lsls r5, r6, 2 + adds r5, r6 + lsls r5, 3 + ldr r0, _0815B838 @ =gTasks+0x8 + adds r5, r0 + movs r1, 0x2 + ldrsh r0, [r5, r1] + lsls r4, r0, 4 + adds r4, r0 + lsls r4, 2 + ldr r0, _0815B83C @ =gSprites + adds r4, r0 + adds r0, r4, 0 + movs r1, 0x6 + bl StartSpriteAnim + ldrh r0, [r5, 0x6] + adds r0, 0x1 + strh r0, [r5, 0x6] + movs r0, 0 + strh r0, [r5, 0x8] + strh r0, [r5, 0xA] + movs r0, 0x24 + ldrsh r1, [r4, r0] + movs r0, 0x26 + ldrsh r2, [r4, r0] + movs r0, 0 + str r0, [sp] + adds r0, r6, 0 + movs r3, 0 + bl sub_815BAA0 + add sp, 0x4 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_0815B838: .4byte gTasks+0x8 +_0815B83C: .4byte gSprites + thumb_func_end sub_815B7E4 + + thumb_func_start sub_815B840 +sub_815B840: @ 815B840 + push {r4-r6,lr} + sub sp, 0x4 + lsls r0, 24 + lsrs r3, r0, 24 + lsls r0, r3, 2 + adds r0, r3 + lsls r0, 3 + ldr r1, _0815B890 @ =gTasks+0x8 + adds r5, r0, r1 + movs r0, 0x2 + ldrsh r1, [r5, r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, _0815B894 @ =gSprites + adds r4, r0, r1 + ldrh r1, [r4, 0x24] + movs r0, 0xF + ands r0, r1 + cmp r0, 0 + bne _0815B87E + subs r1, 0x8 + lsls r1, 16 + asrs r1, 16 + movs r6, 0x26 + ldrsh r2, [r4, r6] + str r0, [sp] + adds r0, r3, 0 + movs r3, 0 + bl sub_815BAA0 +_0815B87E: + ldrh r1, [r4, 0x24] + movs r2, 0x24 + ldrsh r0, [r4, r2] + cmp r0, 0x8 + bne _0815B898 + ldrh r0, [r5, 0x6] + adds r0, 0x1 + strh r0, [r5, 0x6] + b _0815B89C + .align 2, 0 +_0815B890: .4byte gTasks+0x8 +_0815B894: .4byte gSprites +_0815B898: + subs r0, r1, 0x1 + strh r0, [r4, 0x24] +_0815B89C: + add sp, 0x4 + pop {r4-r6} + pop {r0} + bx r0 + thumb_func_end sub_815B840 + + thumb_func_start sub_815B8A4 +sub_815B8A4: @ 815B8A4 + push {r4,lr} + sub sp, 0xC + lsls r0, 24 + lsrs r0, 24 + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + ldr r0, _0815B900 @ =gTasks+0x8 + adds r4, r1, r0 + movs r1, 0x4 + ldrsh r0, [r4, r1] + cmp r0, 0 + bne _0815B8DC + ldr r1, _0815B904 @ =gUnknown_8479590 + movs r0, 0x8 + str r0, [sp] + movs r0, 0x2 + str r0, [sp, 0x4] + movs r0, 0x11 + str r0, [sp, 0x8] + movs r0, 0x1 + movs r2, 0x14 + movs r3, 0xA + bl CopyToBgTilemapBufferRect_ChangePalette + movs r0, 0x1 + bl schedule_bg_copy_tilemap_to_vram +_0815B8DC: + ldrh r0, [r4, 0x4] + adds r0, 0x1 + strh r0, [r4, 0x4] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x7E + ble _0815B8F8 + bl sub_815B908 + movs r0, 0 + strh r0, [r4, 0x4] + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] +_0815B8F8: + add sp, 0xC + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B900: .4byte gTasks+0x8 +_0815B904: .4byte gUnknown_8479590 + thumb_func_end sub_815B8A4 + + thumb_func_start sub_815B908 +sub_815B908: @ 815B908 + push {lr} + sub sp, 0x8 + movs r0, 0x8 + str r0, [sp] + movs r0, 0x2 + str r0, [sp, 0x4] + movs r0, 0x1 + movs r1, 0 + movs r2, 0x14 + movs r3, 0xA + bl FillBgTilemapBufferRect_Palette0 + movs r0, 0x1 + bl schedule_bg_copy_tilemap_to_vram + add sp, 0x8 + pop {r0} + bx r0 + thumb_func_end sub_815B908 + + thumb_func_start sub_815B92C +sub_815B92C: @ 815B92C + push {r4-r7,lr} + lsls r0, 24 + lsrs r0, 24 + lsls r1, r0, 2 + adds r1, r0 + lsls r6, r1, 3 + ldr r7, _0815B9DC @ =gTasks+0x8 + adds r5, r6, r7 + movs r1, 0x4 + ldrsh r0, [r5, r1] + cmp r0, 0 + bne _0815B94C + movs r0, 0xAD + lsls r0, 1 + bl PlayNewMapMusic +_0815B94C: + bl TeachyTvBg2AnimController + ldrh r0, [r5, 0x4] + adds r0, 0x1 + strh r0, [r5, 0x4] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x3F + ble _0815B9D4 + movs r4, 0 + strh r4, [r5, 0x4] + strh r4, [r5, 0x6] + bl TeachyTvSetupWindow + lsls r0, 24 + lsrs r0, 24 + strh r0, [r5] + adds r0, r7, 0 + subs r0, 0x8 + adds r0, r6, r0 + ldr r1, _0815B9E0 @ =sub_815B2C0 + str r1, [r0] + movs r0, 0 + bl PutWindowTilemap + bl TeachyTvSetupScrollIndicatorArrowPair + bl TeachyTvSetWindowRegs + movs r0, 0 + bl schedule_bg_copy_tilemap_to_vram + movs r0, 0x3 + movs r1, 0 + movs r2, 0 + bl ChangeBgX + movs r0, 0x3 + movs r1, 0 + movs r2, 0 + bl ChangeBgY + movs r1, 0x80 + lsls r1, 5 + movs r0, 0x3 + movs r2, 0x2 + bl ChangeBgX + movs r1, 0xA0 + lsls r1, 6 + movs r0, 0x3 + movs r2, 0x1 + bl ChangeBgY + ldr r2, _0815B9E4 @ =gUnknown_203F450 + ldr r0, [r2] + ldr r1, _0815B9E8 @ =0x00004004 + adds r0, r1 + strb r4, [r0] + ldr r0, [r2] + adds r1, 0x1 + adds r0, r1 + movs r1, 0x3 + strb r1, [r0] + ldr r0, [r2] + ldr r1, _0815B9EC @ =0x00004006 + adds r0, r1 + strb r4, [r0] +_0815B9D4: + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_0815B9DC: .4byte gTasks+0x8 +_0815B9E0: .4byte sub_815B2C0 +_0815B9E4: .4byte gUnknown_203F450 +_0815B9E8: .4byte 0x00004004 +_0815B9EC: .4byte 0x00004006 + thumb_func_end sub_815B92C + + thumb_func_start sub_815B9F0 +sub_815B9F0: @ 815B9F0 + push {lr} + lsls r0, 24 + lsrs r1, r0, 24 + adds r2, r1, 0 + ldr r0, _0815BA0C @ =gTeachyTV_StaticResources + ldrb r0, [r0, 0x5] + cmp r0, 0 + blt _0815BA22 + cmp r0, 0x3 + bgt _0815BA10 + adds r0, r1, 0 + bl sub_815BC90 + b _0815BA22 + .align 2, 0 +_0815BA0C: .4byte gTeachyTV_StaticResources +_0815BA10: + cmp r0, 0x5 + bgt _0815BA22 + ldr r0, _0815BA28 @ =gUnknown_203F450 + ldr r1, [r0] + ldr r0, _0815BA2C @ =sub_815BA30 + str r0, [r1] + adds r0, r2, 0 + bl sub_815B23C +_0815BA22: + pop {r0} + bx r0 + .align 2, 0 +_0815BA28: .4byte gUnknown_203F450 +_0815BA2C: .4byte sub_815BA30 + thumb_func_end sub_815B9F0 + + thumb_func_start sub_815BA30 +sub_815BA30: @ 815BA30 + push {lr} + ldr r0, _0815BA44 @ =gTeachyTV_StaticResources + ldrb r0, [r0, 0x5] + cmp r0, 0x4 + bne _0815BA48 + movs r0, 0xA + bl sub_810B108 + b _0815BA4E + .align 2, 0 +_0815BA44: .4byte gTeachyTV_StaticResources +_0815BA48: + movs r0, 0x9 + bl sub_810B108 +_0815BA4E: + pop {r0} + bx r0 + thumb_func_end sub_815BA30 + + thumb_func_start TeachyTvTaskFunction +TeachyTvTaskFunction: @ 815BA54 + push {r4,lr} + lsls r0, 24 + lsrs r0, 24 + lsls r1, r0, 2 + adds r1, r0 + lsls r2, r1, 3 + ldr r4, _0815BA8C @ =gTasks+0x8 + adds r3, r2, r4 + ldr r0, _0815BA90 @ =gPaletteFade + ldrb r1, [r0, 0x7] + movs r0, 0x80 + ands r0, r1 + cmp r0, 0 + bne _0815BA86 + ldr r1, _0815BA94 @ =gUnknown_8479390 + ldr r0, _0815BA98 @ =gTeachyTV_StaticResources + ldrb r0, [r0, 0x5] + adds r0, r1 + ldrb r0, [r0] + strh r0, [r3, 0x6] + adds r0, r4, 0 + subs r0, 0x8 + adds r0, r2, r0 + ldr r1, _0815BA9C @ =sub_815B4EC + str r1, [r0] +_0815BA86: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815BA8C: .4byte gTasks+0x8 +_0815BA90: .4byte gPaletteFade +_0815BA94: .4byte gUnknown_8479390 +_0815BA98: .4byte gTeachyTV_StaticResources +_0815BA9C: .4byte sub_815B4EC + thumb_func_end TeachyTvTaskFunction + + thumb_func_start sub_815BAA0 +sub_815BAA0: @ 815BAA0 + push {r4-r7,lr} + mov r7, r9 + mov r6, r8 + push {r6,r7} + ldr r4, [sp, 0x1C] + lsls r0, 24 + lsrs r0, 24 + mov r9, r0 + lsls r1, 16 + lsrs r6, r1, 16 + lsls r2, 16 + lsrs r1, r2, 16 + lsls r3, 24 + lsrs r7, r3, 24 + lsls r4, 24 + lsrs r4, 24 + mov r8, r4 + ldr r0, _0815BB34 @ =gUnknown_203F450 + ldr r0, [r0] + ldr r2, _0815BB38 @ =0x00004006 + adds r0, r2 + ldrb r0, [r0] + cmp r0, 0x1 + beq _0815BB5C + lsls r0, r6, 16 + ldr r2, _0815BB3C @ =0xfff00000 + adds r0, r2 + asrs r0, 16 + lsls r1, 16 + asrs r5, r1, 16 + adds r1, r5, 0 + bl sub_815BC40 + lsls r0, 24 + cmp r0, 0 + beq _0815BB5C + ldr r0, _0815BB40 @ =gUnknown_83A0010 + ldr r0, [r0, 0x10] + movs r1, 0 + movs r2, 0 + adds r3, r7, 0 + bl CreateSprite + lsls r0, 24 + lsrs r0, 24 + lsls r1, r0, 4 + adds r1, r0 + lsls r1, 2 + ldr r0, _0815BB44 @ =gSprites + adds r4, r1, r0 + strh r6, [r4, 0x24] + adds r0, r5, 0 + adds r0, 0x8 + strh r0, [r4, 0x26] + ldr r0, _0815BB48 @ =sub_815BB6C + str r0, [r4, 0x1C] + mov r0, r9 + strh r0, [r4, 0x2E] + mov r2, r8 + cmp r2, 0x1 + bne _0815BB4C + adds r0, r4, 0 + movs r1, 0x4 + bl SeekSpriteAnim + ldrb r0, [r4, 0x5] + movs r1, 0xD + negs r1, r1 + ands r1, r0 + movs r0, 0x8 + orrs r1, r0 + strb r1, [r4, 0x5] + b _0815BB5C + .align 2, 0 +_0815BB34: .4byte gUnknown_203F450 +_0815BB38: .4byte 0x00004006 +_0815BB3C: .4byte 0xfff00000 +_0815BB40: .4byte gUnknown_83A0010 +_0815BB44: .4byte gSprites +_0815BB48: .4byte sub_815BB6C +_0815BB4C: + ldr r1, _0815BB68 @ =gUnknown_84795B8 + adds r0, r4, 0 + bl SetSubspriteTables + adds r1, r4, 0 + adds r1, 0x42 + movs r0, 0x40 + strb r0, [r1] +_0815BB5C: + pop {r3,r4} + mov r8, r3 + mov r9, r4 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_0815BB68: .4byte gUnknown_84795B8 + thumb_func_end sub_815BAA0 + + thumb_func_start sub_815BB6C +sub_815BB6C: @ 815BB6C + push {r4,r5,lr} + adds r3, r0, 0 + movs r0, 0x2E + ldrsh r1, [r3, r0] + lsls r0, r1, 2 + adds r0, r1 + lsls r0, 3 + ldr r1, _0815BBA4 @ =gTasks+0x8 + adds r4, r0, r1 + movs r2, 0x2 + ldrsh r1, [r4, r2] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, _0815BBA8 @ =gSprites + adds r5, r0, r1 + ldr r0, _0815BBAC @ =gUnknown_203F450 + ldr r0, [r0] + ldr r1, _0815BBB0 @ =0x00004006 + adds r0, r1 + ldrb r0, [r0] + cmp r0, 0x1 + bne _0815BBB4 + adds r0, r3, 0 + bl DestroySprite + b _0815BC3A + .align 2, 0 +_0815BBA4: .4byte gTasks+0x8 +_0815BBA8: .4byte gSprites +_0815BBAC: .4byte gUnknown_203F450 +_0815BBB0: .4byte 0x00004006 +_0815BBB4: + adds r0, r3, 0 + adds r0, 0x2B + ldrb r0, [r0] + cmp r0, 0 + bne _0815BBD2 + adds r2, r3, 0 + adds r2, 0x42 + ldrb r0, [r2] + movs r1, 0x40 + negs r1, r1 + ands r1, r0 + movs r0, 0x1 + orrs r1, r0 + strb r1, [r2] + b _0815BBE0 +_0815BBD2: + adds r2, r3, 0 + adds r2, 0x42 + ldrb r1, [r2] + movs r0, 0x40 + negs r0, r0 + ands r0, r1 + strb r0, [r2] +_0815BBE0: + ldrh r0, [r4, 0x8] + ldrh r2, [r3, 0x24] + adds r0, r2 + strh r0, [r3, 0x24] + ldrh r0, [r4, 0xA] + ldrh r1, [r3, 0x26] + adds r0, r1 + strh r0, [r3, 0x26] + adds r0, r3, 0 + adds r0, 0x3F + ldrb r1, [r0] + movs r0, 0x10 + ands r0, r1 + cmp r0, 0 + beq _0815BC3A + adds r1, r3, 0 + adds r1, 0x43 + movs r0, 0 + strb r0, [r1] + ldrh r1, [r3, 0x24] + ldrh r0, [r5, 0x24] + subs r1, r0 + ldrh r0, [r3, 0x26] + ldrh r2, [r5, 0x26] + subs r0, r2 + lsls r0, 16 + lsrs r0, 16 + lsls r1, 16 + movs r2, 0xF0 + lsls r2, 12 + adds r1, r2 + lsrs r1, 16 + cmp r1, 0x1E + bhi _0815BC34 + lsls r0, 16 + asrs r1, r0, 16 + movs r0, 0x10 + negs r0, r0 + cmp r1, r0 + ble _0815BC34 + cmp r1, 0x17 + ble _0815BC3A +_0815BC34: + adds r0, r3, 0 + bl DestroySprite +_0815BC3A: + pop {r4,r5} + pop {r0} + bx r0 + thumb_func_end sub_815BB6C + + thumb_func_start sub_815BC40 +sub_815BC40: @ 815BC40 + push {r4,r5,lr} + lsls r1, 16 + lsrs r1, 16 + lsls r4, r0, 16 + cmp r4, 0 + blt _0815BC52 + lsls r1, 16 + cmp r1, 0 + bge _0815BC56 +_0815BC52: + movs r0, 0 + b _0815BC78 +_0815BC56: + ldr r3, _0815BC80 @ =gUnknown_84795C8 + ldr r0, _0815BC84 @ =gUnknown_203F450 + ldr r2, [r0] + ldr r5, _0815BC88 @ =0x00004005 + adds r0, r2, r5 + asrs r1, 20 + ldrb r0, [r0] + adds r1, r0 + lsls r1, 4 + ldr r0, _0815BC8C @ =0x00004004 + adds r2, r0 + asrs r0, r4, 20 + ldrb r2, [r2] + adds r0, r2 + adds r1, r0 + adds r1, r3 + ldrb r0, [r1] +_0815BC78: + pop {r4,r5} + pop {r1} + bx r1 + .align 2, 0 +_0815BC80: .4byte gUnknown_84795C8 +_0815BC84: .4byte gUnknown_203F450 +_0815BC88: .4byte 0x00004005 +_0815BC8C: .4byte 0x00004004 + thumb_func_end sub_815BC40 + + thumb_func_start sub_815BC90 +sub_815BC90: @ 815BC90 + push {r4-r6,lr} + lsls r0, 24 + lsrs r6, r0, 24 + lsls r0, r6, 2 + adds r0, r6 + lsls r0, 3 + ldr r1, _0815BCCC @ =gTasks+0x8 + adds r5, r0, r1 + bl sub_815B220 + ldr r1, _0815BCD0 @ =gSpecialVar_0x8004 + ldr r4, _0815BCD4 @ =gTeachyTV_StaticResources + ldrb r0, [r4, 0x5] + strh r0, [r1] + ldr r1, _0815BCD8 @ =gMain + ldr r0, _0815BCDC @ =sub_815BD58 + str r0, [r1, 0x8] + bl SavePlayerParty + bl sub_8159F40 + movs r0, 0 + bl PlayMapChosenOrBattleBGM + ldrb r0, [r4, 0x5] + cmp r0, 0 + bne _0815BCE0 + movs r0, 0x9 + b _0815BCE2 + .align 2, 0 +_0815BCCC: .4byte gTasks+0x8 +_0815BCD0: .4byte gSpecialVar_0x8004 +_0815BCD4: .4byte gTeachyTV_StaticResources +_0815BCD8: .4byte gMain +_0815BCDC: .4byte sub_815BD58 +_0815BCE0: + movs r0, 0x8 +_0815BCE2: + strh r0, [r5, 0xC] + movs r0, 0 + strh r0, [r5, 0xE] + ldr r1, _0815BCFC @ =gTasks + lsls r0, r6, 2 + adds r0, r6 + lsls r0, 3 + adds r0, r1 + ldr r1, _0815BD00 @ =sub_815BD04 + str r1, [r0] + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_0815BCFC: .4byte gTasks +_0815BD00: .4byte sub_815BD04 + thumb_func_end sub_815BC90 + + thumb_func_start sub_815BD04 +sub_815BD04: @ 815BD04 + push {r4,r5,lr} + lsls r0, 24 + lsrs r5, r0, 24 + lsls r0, r5, 2 + adds r0, r5 + lsls r0, 3 + ldr r1, _0815BD24 @ =gTasks+0x8 + adds r4, r0, r1 + movs r1, 0xE + ldrsh r0, [r4, r1] + cmp r0, 0 + beq _0815BD28 + cmp r0, 0x1 + beq _0815BD36 + b _0815BD4C + .align 2, 0 +_0815BD24: .4byte gTasks+0x8 +_0815BD28: + ldrb r0, [r4, 0xC] + bl sub_80D08B8 + ldrh r0, [r4, 0xE] + adds r0, 0x1 + strh r0, [r4, 0xE] + b _0815BD4C +_0815BD36: + bl sub_80D08F8 + lsls r0, 24 + cmp r0, 0 + beq _0815BD4C + ldr r0, _0815BD54 @ =sub_800FD9C + bl SetMainCallback2 + adds r0, r5, 0 + bl DestroyTask +_0815BD4C: + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_0815BD54: .4byte sub_800FD9C + thumb_func_end sub_815BD04 + + thumb_func_start sub_815BD58 +sub_815BD58: @ 815BD58 + push {lr} + bl LoadPlayerParty + ldr r0, _0815BD6C @ =gUnknown_2023E8A + ldrb r0, [r0] + cmp r0, 0x3 + bne _0815BD70 + bl sub_815AC20 + b _0815BD78 + .align 2, 0 +_0815BD6C: .4byte gUnknown_2023E8A +_0815BD70: + movs r0, 0x88 + lsls r0, 1 + bl PlayNewMapMusic +_0815BD78: + bl CB2_ReturnToTeachyTV + pop {r0} + bx r0 + thumb_func_end sub_815BD58 + + thumb_func_start sub_815BD80 +sub_815BD80: @ 815BD80 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x1C + str r0, [sp, 0x4] + movs r0, 0 + str r0, [sp, 0x10] + ldr r1, _0815BE1C @ =Route1_Layout + mov r8, r1 + movs r0, 0x80 + lsls r0, 4 + bl AllocZeroed + adds r6, r0, 0 + movs r0, 0x80 + lsls r0, 8 + bl AllocZeroed + str r0, [sp, 0x8] + movs r0, 0x10 + bl Alloc + str r0, [sp, 0xC] + movs r1, 0xFF + movs r2, 0x10 + bl memset + mov r2, r8 + ldr r0, [r2, 0x10] + movs r2, 0xA0 + lsls r2, 2 + ldr r1, [sp, 0x8] + bl sub_815BF48 + mov r3, r8 + ldr r0, [r3, 0x14] + ldr r2, [sp, 0x8] + movs r3, 0xA0 + lsls r3, 7 + adds r1, r2, r3 + movs r2, 0xC0 + lsls r2, 1 + bl sub_815BF48 + movs r4, 0 +_0815BDDE: + movs r2, 0 + adds r0, r4, 0x6 + str r0, [sp, 0x18] + lsls r1, r4, 4 + mov r10, r1 + lsls r3, r4, 6 + mov r9, r3 + adds r4, 0x1 + str r4, [sp, 0x14] +_0815BDF0: + mov r1, r8 + ldr r0, [r1] + ldr r3, [sp, 0x18] + muls r0, r3 + ldr r1, [r1, 0xC] + adds r0, r2, r0 + lsls r0, 1 + adds r0, r1 + ldrh r1, [r0, 0x10] + ldr r3, _0815BE20 @ =0x000003ff + adds r0, r3, 0 + adds r4, r0, 0 + ands r4, r1 + movs r3, 0 + mov r0, r10 + adds r1, r0, r2 + lsls r5, r2, 1 + adds r7, r2, 0x1 + cmp r3, r1 + bge _0815BE3C + ldrh r0, [r6] + b _0815BE34 + .align 2, 0 +_0815BE1C: .4byte Route1_Layout +_0815BE20: .4byte 0x000003ff +_0815BE24: + adds r0, r3, 0x1 + lsls r0, 16 + lsrs r3, r0, 16 + cmp r3, r1 + bge _0815BE3C + lsls r0, r3, 1 + adds r0, r6 + ldrh r0, [r0] +_0815BE34: + cmp r0, 0 + beq _0815BE46 + cmp r0, r4 + bne _0815BE24 +_0815BE3C: + lsls r0, r3, 1 + adds r0, r6 + ldrh r0, [r0] + cmp r0, 0 + bne _0815BE56 +_0815BE46: + lsls r0, r3, 1 + adds r0, r6 + strh r4, [r0] + ldr r0, [sp, 0x10] + adds r0, 0x1 + lsls r0, 16 + lsrs r0, 16 + str r0, [sp, 0x10] +_0815BE56: + mov r2, r9 + adds r1, r2, r5 + lsls r1, 1 + ldr r0, [sp, 0x4] + adds r1, r0, r1 + str r3, [sp] + mov r0, r8 + ldr r2, [sp, 0xC] + adds r3, r4, 0 + bl sub_815BF70 + lsls r0, r7, 16 + lsrs r2, r0, 16 + cmp r2, 0xF + bls _0815BDF0 + ldr r1, [sp, 0x14] + lsls r0, r1, 16 + lsrs r4, r0, 16 + cmp r4, 0x8 + bls _0815BDDE + ldr r2, [sp, 0x10] + lsls r0, r2, 7 + bl Alloc + adds r7, r0, 0 + movs r0, 0x80 + bl Alloc + adds r5, r0, 0 + movs r4, 0 + ldr r3, [sp, 0x10] + lsls r3, 23 + mov r9, r3 + ldr r0, [sp, 0x10] + cmp r4, r0 + bcs _0815BF00 + ldr r1, _0815BECC @ =0x0000027f + mov r10, r1 +_0815BEA2: + adds r0, r5, 0 + movs r1, 0 + movs r2, 0x80 + bl memset + lsls r0, r4, 1 + adds r1, r0, r6 + ldrh r0, [r1] + cmp r0, r10 + bhi _0815BED0 + mov r2, r8 + ldr r0, [r2, 0x10] + ldrh r1, [r1] + lsls r1, 4 + ldr r0, [r0, 0xC] + adds r0, r1 + adds r1, r5, 0 + ldr r2, [sp, 0x8] + bl sub_815BFF0 + b _0815BEE8 + .align 2, 0 +_0815BECC: .4byte 0x0000027f +_0815BED0: + mov r3, r8 + ldr r0, [r3, 0x14] + ldrh r1, [r1] + ldr r2, _0815BF44 @ =0xfffffd80 + adds r1, r2 + lsls r1, 4 + ldr r0, [r0, 0xC] + adds r0, r1 + adds r1, r5, 0 + ldr r2, [sp, 0x8] + bl sub_815BFF0 +_0815BEE8: + lsls r1, r4, 7 + adds r1, r7, r1 + adds r0, r5, 0 + movs r2, 0x20 + bl CpuFastSet + adds r0, r4, 0x1 + lsls r0, 16 + lsrs r4, r0, 16 + ldr r3, [sp, 0x10] + cmp r4, r3 + bcc _0815BEA2 +_0815BF00: + mov r0, r9 + lsrs r2, r0, 16 + movs r0, 0x3 + adds r1, r7, 0 + movs r3, 0 + bl LoadBgTiles + mov r0, r8 + ldr r1, [sp, 0xC] + bl sub_815C230 + adds r0, r5, 0 + bl Free + adds r0, r7, 0 + bl Free + ldr r0, [sp, 0xC] + bl Free + ldr r0, [sp, 0x8] + bl Free + adds r0, r6, 0 + bl Free + add sp, 0x1C + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_0815BF44: .4byte 0xfffffd80 + thumb_func_end sub_815BD80 + + thumb_func_start sub_815BF48 +sub_815BF48: @ 815BF48 + push {lr} + adds r3, r0, 0 + lsls r2, 16 + lsrs r2, 16 + cmp r3, 0 + beq _0815BF6A + ldrb r0, [r3] + cmp r0, 0 + bne _0815BF64 + ldr r0, [r3, 0x4] + lsls r2, 3 + bl CpuFastSet + b _0815BF6A +_0815BF64: + ldr r0, [r3, 0x4] + bl LZDecompressWram +_0815BF6A: + pop {r0} + bx r0 + thumb_func_end sub_815BF48 + + thumb_func_start sub_815BF70 +sub_815BF70: @ 815BF70 + push {r4-r7,lr} + adds r5, r0, 0 + adds r7, r1, 0 + adds r6, r2, 0 + ldr r0, [sp, 0x14] + lsls r3, 16 + lsrs r1, r3, 16 + lsls r0, 16 + lsrs r4, r0, 16 + ldr r0, _0815BF8C @ =0x0000027f + cmp r1, r0 + bhi _0815BF90 + ldr r0, [r5, 0x10] + b _0815BF96 + .align 2, 0 +_0815BF8C: .4byte 0x0000027f +_0815BF90: + ldr r0, [r5, 0x14] + ldr r2, _0815BFEC @ =0xfffffd80 + adds r1, r2 +_0815BF96: + lsls r1, 4 + ldr r0, [r0, 0xC] + adds r5, r0, r1 + ldrh r1, [r5] + adds r0, r6, 0 + bl sub_815C1F0 + lsls r0, 12 + lsls r4, 2 + adds r0, r4 + strh r0, [r7] + ldrh r1, [r5, 0x2] + adds r0, r6, 0 + bl sub_815C1F0 + lsls r0, 12 + adds r0, r4 + adds r0, 0x1 + strh r0, [r7, 0x2] + ldrh r1, [r5, 0x4] + adds r0, r6, 0 + bl sub_815C1F0 + adds r1, r7, 0 + adds r1, 0x40 + lsls r0, 12 + adds r0, r4 + adds r0, 0x2 + strh r0, [r1] + ldrh r1, [r5, 0x6] + adds r0, r6, 0 + bl sub_815C1F0 + adds r1, r7, 0 + adds r1, 0x42 + lsls r0, 12 + adds r0, r4 + adds r0, 0x3 + strh r0, [r1] + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_0815BFEC: .4byte 0xfffffd80 + thumb_func_end sub_815BF70 + + thumb_func_start sub_815BFF0 +sub_815BFF0: @ 815BFF0 + push {r4-r6,lr} + mov r6, r10 + mov r5, r9 + mov r4, r8 + push {r4-r6} + mov r8, r0 + mov r9, r1 + adds r5, r2, 0 + ldrh r2, [r0] + ldr r4, _0815C0D0 @ =0x000003ff + adds r1, r4, 0 + ands r1, r2 + lsls r1, 5 + adds r1, r5, r1 + lsrs r2, 10 + movs r6, 0x3 + ands r2, r6 + mov r0, r9 + bl sub_815C0D4 + mov r0, r8 + ldrh r2, [r0, 0x8] + adds r1, r4, 0 + ands r1, r2 + lsls r1, 5 + adds r1, r5, r1 + lsrs r2, 10 + ands r2, r6 + mov r0, r9 + bl sub_815C0D4 + movs r0, 0x20 + add r0, r9 + mov r10, r0 + mov r0, r8 + ldrh r2, [r0, 0x2] + adds r1, r4, 0 + ands r1, r2 + lsls r1, 5 + adds r1, r5, r1 + lsrs r2, 10 + ands r2, r6 + mov r0, r10 + bl sub_815C0D4 + mov r0, r8 + ldrh r2, [r0, 0xA] + adds r1, r4, 0 + ands r1, r2 + lsls r1, 5 + adds r1, r5, r1 + lsrs r2, 10 + ands r2, r6 + mov r0, r10 + bl sub_815C0D4 + movs r0, 0x40 + add r0, r9 + mov r10, r0 + mov r0, r8 + ldrh r2, [r0, 0x4] + adds r1, r4, 0 + ands r1, r2 + lsls r1, 5 + adds r1, r5, r1 + lsrs r2, 10 + ands r2, r6 + mov r0, r10 + bl sub_815C0D4 + mov r0, r8 + ldrh r2, [r0, 0xC] + adds r1, r4, 0 + ands r1, r2 + lsls r1, 5 + adds r1, r5, r1 + lsrs r2, 10 + ands r2, r6 + mov r0, r10 + bl sub_815C0D4 + movs r0, 0x60 + add r9, r0 + mov r0, r8 + ldrh r2, [r0, 0x6] + adds r1, r4, 0 + ands r1, r2 + lsls r1, 5 + adds r1, r5, r1 + lsrs r2, 10 + ands r2, r6 + mov r0, r9 + bl sub_815C0D4 + mov r0, r8 + ldrh r2, [r0, 0xE] + ands r4, r2 + lsls r4, 5 + adds r5, r4 + lsrs r2, 10 + ands r2, r6 + mov r0, r9 + adds r1, r5, 0 + bl sub_815C0D4 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_0815C0D0: .4byte 0x000003ff + thumb_func_end sub_815BFF0 + + thumb_func_start sub_815C0D4 +sub_815C0D4: @ 815C0D4 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x4 + mov r9, r0 + adds r4, r1, 0 + lsls r2, 24 + lsrs r2, 24 + mov r10, r2 + movs r0, 0x20 + bl AllocZeroed + adds r6, r0, 0 + movs r0, 0x20 + bl AllocZeroed + str r0, [sp] + adds r0, r4, 0 + adds r1, r6, 0 + movs r2, 0x8 + bl CpuFastSet + movs r0, 0x1 + mov r1, r10 + ands r0, r1 + cmp r0, 0 + beq _0815C15A + movs r5, 0 + movs r7, 0xF + mov r12, r7 + movs r0, 0xF0 + mov r8, r0 +_0815C118: + movs r3, 0 + lsls r4, r5, 2 +_0815C11C: + subs r0, r3, 0x3 + subs r0, r4, r0 + adds r0, r6, r0 + ldrb r1, [r0] + adds r2, r4, r3 + ldr r7, [sp] + adds r2, r7, r2 + adds r0, r1, 0 + mov r7, r12 + ands r0, r7 + lsls r0, 4 + mov r7, r8 + ands r1, r7 + lsrs r1, 4 + adds r0, r1 + strb r0, [r2] + adds r0, r3, 0x1 + lsls r0, 24 + lsrs r3, r0, 24 + cmp r3, 0x3 + bls _0815C11C + adds r0, r5, 0x1 + lsls r0, 24 + lsrs r5, r0, 24 + cmp r5, 0x7 + bls _0815C118 + ldr r0, [sp] + adds r1, r6, 0 + movs r2, 0x8 + bl CpuFastSet +_0815C15A: + movs r0, 0x2 + mov r1, r10 + ands r0, r1 + cmp r0, 0 + beq _0815C18E + movs r5, 0 +_0815C166: + lsls r0, r5, 2 + ldr r7, [sp] + adds r0, r7 + movs r1, 0x7 + subs r1, r5 + lsls r1, 2 + adds r1, r6 + movs r2, 0x4 + bl memcpy + adds r0, r5, 0x1 + lsls r0, 24 + lsrs r5, r0, 24 + cmp r5, 0x7 + bls _0815C166 + ldr r0, [sp] + adds r1, r6, 0 + movs r2, 0x8 + bl CpuFastSet +_0815C18E: + movs r5, 0 + movs r0, 0xF0 + mov r8, r0 + movs r1, 0xF + mov r12, r1 +_0815C198: + adds r4, r6, r5 + ldrb r0, [r4] + mov r3, r8 + ands r3, r0 + cmp r3, 0 + beq _0815C1B2 + mov r7, r9 + adds r2, r7, r5 + ldrb r1, [r2] + mov r0, r12 + ands r0, r1 + adds r0, r3 + strb r0, [r2] +_0815C1B2: + ldrb r0, [r4] + mov r3, r12 + ands r3, r0 + cmp r3, 0 + beq _0815C1CA + mov r0, r9 + adds r2, r0, r5 + ldrb r1, [r2] + mov r0, r8 + ands r0, r1 + adds r0, r3 + strb r0, [r2] +_0815C1CA: + adds r0, r5, 0x1 + lsls r0, 24 + lsrs r5, r0, 24 + cmp r5, 0x1F + bls _0815C198 + ldr r0, [sp] + bl Free + adds r0, r6, 0 + bl Free + 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_815C0D4 + + thumb_func_start sub_815C1F0 +sub_815C1F0: @ 815C1F0 + push {r4,lr} + adds r4, r0, 0 + lsls r1, 16 + lsrs r1, 28 + movs r3, 0 + ldrb r0, [r4] + cmp r0, r1 + beq _0815C220 + cmp r0, 0xFF + bne _0815C208 + strb r1, [r4] + b _0815C220 +_0815C208: + adds r0, r3, 0x1 + lsls r0, 16 + lsrs r3, r0, 16 + cmp r3, 0xF + bhi _0815C220 + adds r2, r4, r3 + ldrb r0, [r2] + cmp r0, r1 + beq _0815C220 + cmp r0, 0xFF + bne _0815C208 + strb r1, [r2] +_0815C220: + movs r0, 0xF + subs r0, r3 + lsls r0, 16 + lsrs r0, 16 + pop {r4} + pop {r1} + bx r1 + thumb_func_end sub_815C1F0 + + thumb_func_start sub_815C230 +sub_815C230: @ 815C230 + push {r4-r6,lr} + adds r6, r0, 0 + adds r5, r1, 0 + movs r4, 0 + ldrb r0, [r5] + cmp r0, 0xFF + beq _0815C274 +_0815C23E: + adds r1, r5, r4 + ldrb r0, [r1] + cmp r0, 0x6 + bls _0815C24A + ldr r0, [r6, 0x14] + b _0815C24C +_0815C24A: + ldr r0, [r6, 0x10] +_0815C24C: + ldrb r1, [r1] + lsls r1, 5 + ldr r0, [r0, 0x8] + adds r0, r1 + movs r1, 0xF + subs r1, r4 + lsls r1, 20 + lsrs r1, 16 + movs r2, 0x20 + bl LoadPalette + adds r0, r4, 0x1 + lsls r0, 24 + lsrs r4, r0, 24 + cmp r4, 0xF + bhi _0815C274 + adds r0, r5, r4 + ldrb r0, [r0] + cmp r0, 0xFF + bne _0815C23E +_0815C274: + pop {r4-r6} + pop {r0} + bx r0 + thumb_func_end sub_815C230 + + .align 2, 0 @ Don't pad with nop. diff --git a/asm/.fuse_hidden00001c3c00000005 b/asm/.fuse_hidden00001c3c00000005 new file mode 100644 index 000000000..2aff48af5 --- /dev/null +++ b/asm/.fuse_hidden00001c3c00000005 @@ -0,0 +1,2244 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start TeachyTvConfigRboxAndObj +TeachyTvConfigRboxAndObj: @ 815B118 + push {r4-r7,lr} + sub sp, 0x4 + lsls r0, 24 + lsrs r6, r0, 24 + lsls r0, r6, 2 + adds r0, r6 + lsls r0, 3 + ldr r1, _0815B190 @ =gTasks+0x8 + adds r5, r0, r1 + movs r0, 0x2 + ldrsh r1, [r5, r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, _0815B194 @ =gSprites + adds r7, r0, r1 + movs r0, 0x1 + bl ClearWindowTilemap + bl TeachyTvClearWindowRegs + ldr r0, _0815B198 @ =gTeachyTV_StaticResources + ldrb r0, [r0, 0x5] + cmp r0, 0 + blt _0815B1B8 + cmp r0, 0x3 + bgt _0815B1A8 + ldrb r0, [r5, 0x2] + movs r1, 0x78 + movs r2, 0x38 + movs r3, 0 + bl TeachyTvSetSpriteCoordsAndSwitchFrame + movs r4, 0xC0 + lsls r4, 6 + movs r0, 0x3 + adds r1, r4, 0 + movs r2, 0x1 + bl ChangeBgX + movs r0, 0x3 + adds r1, r4, 0 + movs r2, 0x2 + bl ChangeBgY + ldr r2, _0815B19C @ =gUnknown_203F450 + ldr r1, [r2] + ldr r0, _0815B1A0 @ =0x00004004 + adds r1, r0 + ldrb r0, [r1] + adds r0, 0x3 + strb r0, [r1] + ldr r1, [r2] + ldr r0, _0815B1A4 @ =0x00004005 + adds r1, r0 + ldrb r0, [r1] + subs r0, 0x3 + strb r0, [r1] + b _0815B1B8 + .align 2, 0 +_0815B190: .4byte gTasks+0x8 +_0815B194: .4byte gSprites +_0815B198: .4byte gTeachyTV_StaticResources +_0815B19C: .4byte gUnknown_203F450 +_0815B1A0: .4byte 0x00004004 +_0815B1A4: .4byte 0x00004005 +_0815B1A8: + cmp r0, 0x5 + bgt _0815B1B8 + ldrb r0, [r5, 0x2] + movs r1, 0x78 + movs r2, 0x38 + movs r3, 0 + bl TeachyTvSetSpriteCoordsAndSwitchFrame +_0815B1B8: + movs r0, 0 + strh r0, [r5, 0x8] + strh r0, [r5, 0xA] + movs r0, 0x24 + ldrsh r1, [r7, r0] + movs r0, 0x26 + ldrsh r2, [r7, r0] + movs r0, 0x1 + str r0, [sp] + adds r0, r6, 0 + movs r3, 0 + bl sub_815BAA0 + add sp, 0x4 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end TeachyTvConfigRboxAndObj + + thumb_func_start sub_815B1DC +sub_815B1DC: @ 815B1DC + push {r4,lr} + sub sp, 0x10 + adds r4, r0, 0 + ldr r2, _0815B21C @ =gTextFlags + ldrb r1, [r2] + movs r0, 0x5 + negs r0, r0 + ands r0, r1 + strb r0, [r2] + bl GetTextSpeedSetting + adds r3, r0, 0 + lsls r3, 24 + lsrs r3, 24 + movs r0, 0 + str r0, [sp] + movs r0, 0x1 + str r0, [sp, 0x4] + movs r0, 0xC + str r0, [sp, 0x8] + movs r0, 0x3 + str r0, [sp, 0xC] + movs r0, 0 + movs r1, 0x4 + adds r2, r4, 0 + bl AddTextPrinterParametrized + add sp, 0x10 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B21C: .4byte gTextFlags + thumb_func_end sub_815B1DC + + thumb_func_start sub_815B220 +sub_815B220: @ 815B220 + push {r4,lr} + ldr r4, _0815B238 @ =gUnknown_203F450 + ldr r0, [r4] + bl Free + movs r0, 0 + str r0, [r4] + bl FreeAllWindowBuffers + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B238: .4byte gUnknown_203F450 + thumb_func_end sub_815B220 + + thumb_func_start sub_815B23C +sub_815B23C: @ 815B23C + push {r4,lr} + sub sp, 0x4 + adds r4, r0, 0 + lsls r4, 24 + lsrs r4, 24 + movs r0, 0x1 + negs r0, r0 + movs r1, 0 + str r1, [sp] + movs r2, 0 + movs r3, 0x10 + bl BeginNormalPaletteFade + ldr r1, _0815B26C @ =gTasks + lsls r0, r4, 2 + adds r0, r4 + lsls r0, 3 + adds r0, r1 + ldr r1, _0815B270 @ =sub_815B274 + str r1, [r0] + add sp, 0x4 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B26C: .4byte gTasks +_0815B270: .4byte sub_815B274 + thumb_func_end sub_815B23C + + thumb_func_start sub_815B274 +sub_815B274: @ 815B274 + push {r4,lr} + lsls r0, 24 + lsrs r4, r0, 24 + ldr r0, _0815B298 @ =gPaletteFade + ldrb r1, [r0, 0x7] + movs r0, 0x80 + ands r0, r1 + cmp r0, 0 + bne _0815B2B6 + ldr r0, _0815B29C @ =gUnknown_203F450 + ldr r0, [r0] + ldr r0, [r0] + cmp r0, 0 + beq _0815B2A0 + bl SetMainCallback2 + b _0815B2AC + .align 2, 0 +_0815B298: .4byte gPaletteFade +_0815B29C: .4byte gUnknown_203F450 +_0815B2A0: + bl sub_8055DC4 + ldr r0, _0815B2BC @ =gTeachyTV_StaticResources + ldr r0, [r0] + bl SetMainCallback2 +_0815B2AC: + bl sub_815B220 + adds r0, r4, 0 + bl DestroyTask +_0815B2B6: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B2BC: .4byte gTeachyTV_StaticResources + thumb_func_end sub_815B274 + + thumb_func_start sub_815B2C0 +sub_815B2C0: @ 815B2C0 + push {r4-r7,lr} + lsls r0, 24 + lsrs r7, r0, 24 + lsls r0, r7, 2 + adds r0, r7 + lsls r0, 3 + ldr r1, _0815B31C @ =gTasks+0x8 + adds r6, r0, r1 + bl TeachyTvBg2AnimController + ldr r0, _0815B320 @ =gPaletteFade + ldrb r1, [r0, 0x7] + movs r0, 0x80 + ands r0, r1 + cmp r0, 0 + bne _0815B37A + ldrb r0, [r6] + bl ListMenuHandleInput + adds r5, r0, 0 + ldrb r0, [r6] + ldr r4, _0815B324 @ =gTeachyTV_StaticResources+6 + adds r2, r4, 0x2 + adds r1, r4, 0 + bl get_coro_args_x18_x1A + ldr r0, _0815B328 @ =gMain + ldrh r1, [r0, 0x2E] + movs r0, 0x4 + ands r0, r1 + cmp r0, 0 + beq _0815B30A + subs r0, r4, 0x6 + ldr r1, [r0] + ldr r0, _0815B32C @ =UseFameCheckerFromMenu + cmp r1, r0 + bne _0815B330 +_0815B30A: + movs r0, 0x2 + negs r0, r0 + cmp r5, r0 + beq _0815B330 + adds r0, 0x1 + cmp r5, r0 + bne _0815B33E + b _0815B37A + .align 2, 0 +_0815B31C: .4byte gTasks+0x8 +_0815B320: .4byte gPaletteFade +_0815B324: .4byte gTeachyTV_StaticResources+6 +_0815B328: .4byte gMain +_0815B32C: .4byte UseFameCheckerFromMenu +_0815B330: + movs r0, 0x5 + bl PlaySE + adds r0, r7, 0 + bl sub_815B23C + b _0815B37A +_0815B33E: + movs r0, 0x5 + bl PlaySE + ldr r2, _0815B380 @ =gTeachyTV_StaticResources + movs r4, 0 + strb r5, [r2, 0x5] + ldrb r0, [r6] + adds r1, r2, 0x6 + adds r2, 0x8 + bl DestroyListMenu + bl TeachyTvClearWindowRegs + movs r0, 0x1 + bl ClearWindowTilemap + movs r0, 0 + bl schedule_bg_copy_tilemap_to_vram + bl TeachyTvRemoveScrollIndicatorArrowPair + strh r4, [r6, 0x6] + strh r4, [r6, 0x4] + ldr r1, _0815B384 @ =gTasks + lsls r0, r7, 2 + adds r0, r7 + lsls r0, 3 + adds r0, r1 + ldr r1, _0815B388 @ =sub_815B4EC + str r1, [r0] +_0815B37A: + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_0815B380: .4byte gTeachyTV_StaticResources +_0815B384: .4byte gTasks +_0815B388: .4byte sub_815B4EC + thumb_func_end sub_815B2C0 + + thumb_func_start sub_815B38C +sub_815B38C: @ 815B38C + push {r4,lr} + sub sp, 0xC + lsls r0, 24 + lsrs r0, 24 + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + ldr r0, _0815B3F8 @ =gTasks+0x8 + adds r4, r1, r0 + bl TeachyTvBg2AnimController + ldrh r0, [r4, 0x4] + adds r0, 0x1 + strh r0, [r4, 0x4] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x3F + ble _0815B3F0 + ldr r0, _0815B3FC @ =gUnknown_203F450 + ldr r1, [r0] + ldr r0, _0815B400 @ =0x00003004 + adds r1, r0 + movs r0, 0x20 + str r0, [sp] + str r0, [sp, 0x4] + movs r0, 0x11 + str r0, [sp, 0x8] + movs r0, 0x2 + movs r2, 0 + movs r3, 0 + bl CopyToBgTilemapBufferRect_ChangePalette + ldrb r0, [r4, 0x2] + movs r1, 0x8 + movs r2, 0x38 + movs r3, 0x7 + bl TeachyTvSetSpriteCoordsAndSwitchFrame + movs r0, 0x2 + bl schedule_bg_copy_tilemap_to_vram + movs r0, 0 + strh r0, [r4, 0x4] + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] + movs r0, 0x88 + lsls r0, 1 + bl PlayNewMapMusic +_0815B3F0: + add sp, 0xC + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B3F8: .4byte gTasks+0x8 +_0815B3FC: .4byte gUnknown_203F450 +_0815B400: .4byte 0x00003004 + thumb_func_end sub_815B38C + + thumb_func_start sub_815B404 +sub_815B404: @ 815B404 + push {r4,lr} + sub sp, 0x8 + lsls r0, 24 + lsrs r0, 24 + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + ldr r0, _0815B450 @ =gTasks+0x8 + adds r4, r1, r0 + ldrh r0, [r4, 0x4] + adds r0, 0x1 + strh r0, [r4, 0x4] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x86 + bne _0815B448 + movs r0, 0x1A + str r0, [sp] + movs r0, 0xC + str r0, [sp, 0x4] + movs r0, 0x2 + movs r1, 0 + movs r2, 0x2 + movs r3, 0x1 + bl FillBgTilemapBufferRect_Palette0 + movs r0, 0x2 + bl schedule_bg_copy_tilemap_to_vram + movs r0, 0 + strh r0, [r4, 0x4] + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] +_0815B448: + add sp, 0x8 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B450: .4byte gTasks+0x8 + thumb_func_end sub_815B404 + + thumb_func_start sub_815B454 +sub_815B454: @ 815B454 + push {r4,lr} + lsls r0, 24 + lsrs r0, 24 + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + ldr r0, _0815B484 @ =gTasks+0x8 + adds r4, r1, r0 + movs r0, 0x2 + ldrsh r1, [r4, r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, _0815B488 @ =gSprites + adds r1, r0, r1 + ldrh r2, [r4, 0x4] + movs r3, 0x4 + ldrsh r0, [r4, r3] + cmp r0, 0x23 + beq _0815B48C + adds r0, r2, 0x1 + strh r0, [r4, 0x4] + b _0815B4B8 + .align 2, 0 +_0815B484: .4byte gTasks+0x8 +_0815B488: .4byte gSprites +_0815B48C: + ldrh r2, [r1, 0x24] + movs r3, 0x24 + ldrsh r0, [r1, r3] + cmp r0, 0x78 + bne _0815B4B4 + adds r0, r1, 0 + movs r1, 0 + bl StartSpriteAnim + ldr r0, _0815B4B0 @ =gUnknown_841B83D + bl sub_815B1DC + movs r0, 0 + strh r0, [r4, 0x4] + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] + b _0815B4B8 + .align 2, 0 +_0815B4B0: .4byte gUnknown_841B83D +_0815B4B4: + adds r0, r2, 0x1 + strh r0, [r1, 0x24] +_0815B4B8: + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_815B454 + + thumb_func_start sub_815B4C0 +sub_815B4C0: @ 815B4C0 + push {r4,lr} + lsls r0, 24 + lsrs r0, 24 + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + ldr r0, _0815B4E8 @ =gTasks+0x8 + adds r4, r1, r0 + movs r0, 0 + bl sub_80BF518 + lsls r0, 16 + cmp r0, 0 + bne _0815B4E2 + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] +_0815B4E2: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B4E8: .4byte gTasks+0x8 + thumb_func_end sub_815B4C0 + + thumb_func_start sub_815B4EC +sub_815B4EC: @ 815B4EC + push {r4-r7,lr} + lsls r0, 24 + lsrs r2, r0, 24 + lsls r0, r2, 2 + adds r0, r2 + lsls r6, r0, 3 + ldr r7, _0815B548 @ =gTasks+0x8 + adds r5, r6, r7 + ldr r0, _0815B54C @ =gMain + ldrh r1, [r0, 0x2E] + movs r0, 0x2 + ands r0, r1 + cmp r0, 0 + beq _0815B55C + ldr r0, _0815B550 @ =gUnknown_203F450 + ldr r0, [r0] + ldr r1, _0815B554 @ =0x00004006 + adds r0, r1 + movs r4, 0 + movs r1, 0x1 + strb r1, [r0] + ldrb r0, [r5, 0x2] + movs r1, 0 + movs r2, 0 + movs r3, 0 + bl TeachyTvSetSpriteCoordsAndSwitchFrame + movs r0, 0 + movs r1, 0xCC + bl FillWindowPixelBuffer + movs r0, 0 + movs r1, 0x2 + bl CopyWindowToVram + bl sub_815B908 + strh r4, [r5, 0x4] + strh r4, [r5, 0x6] + adds r0, r7, 0 + subs r0, 0x8 + adds r0, r6, r0 + ldr r1, _0815B558 @ =sub_815B92C + str r1, [r0] + b _0815B578 + .align 2, 0 +_0815B548: .4byte gTasks+0x8 +_0815B54C: .4byte gMain +_0815B550: .4byte gUnknown_203F450 +_0815B554: .4byte 0x00004006 +_0815B558: .4byte sub_815B92C +_0815B55C: + ldr r1, _0815B580 @ =gUnknown_8479548 + ldr r0, _0815B584 @ =gTeachyTV_StaticResources + ldrb r0, [r0, 0x5] + lsls r0, 2 + adds r0, r1 + ldr r1, [r0] + movs r3, 0x6 + ldrsh r0, [r5, r3] + lsls r0, 2 + adds r0, r1 + ldr r1, [r0] + adds r0, r2, 0 + bl _call_via_r1 +_0815B578: + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_0815B580: .4byte gUnknown_8479548 +_0815B584: .4byte gTeachyTV_StaticResources + thumb_func_end sub_815B4EC + + thumb_func_start sub_815B588 +sub_815B588: @ 815B588 + push {r4,lr} + lsls r0, 24 + lsrs r0, 24 + lsls r4, r0, 2 + adds r4, r0 + lsls r4, 3 + ldr r0, _0815B5B4 @ =gTasks+0x8 + adds r4, r0 + ldr r1, _0815B5B8 @ =gUnknown_8479560 + ldr r0, _0815B5BC @ =gTeachyTV_StaticResources + ldrb r0, [r0, 0x5] + lsls r0, 2 + adds r0, r1 + ldr r0, [r0] + bl sub_815B1DC + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B5B4: .4byte gTasks+0x8 +_0815B5B8: .4byte gUnknown_8479560 +_0815B5BC: .4byte gTeachyTV_StaticResources + thumb_func_end sub_815B588 + + thumb_func_start sub_815B5C0 +sub_815B5C0: @ 815B5C0 + push {r4,lr} + lsls r0, 24 + lsrs r0, 24 + lsls r4, r0, 2 + adds r4, r0 + lsls r4, 3 + ldr r0, _0815B5EC @ =gTasks+0x8 + adds r4, r0 + ldr r1, _0815B5F0 @ =gUnknown_8479578 + ldr r0, _0815B5F4 @ =gTeachyTV_StaticResources + ldrb r0, [r0, 0x5] + lsls r0, 2 + adds r0, r1 + ldr r0, [r0] + bl sub_815B1DC + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B5EC: .4byte gTasks+0x8 +_0815B5F0: .4byte gUnknown_8479578 +_0815B5F4: .4byte gTeachyTV_StaticResources + thumb_func_end sub_815B5C0 + + thumb_func_start sub_815B5F8 +sub_815B5F8: @ 815B5F8 + push {r4,lr} + lsls r0, 24 + lsrs r0, 24 + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + ldr r0, _0815B620 @ =gTasks+0x8 + adds r4, r1, r0 + movs r0, 0 + bl sub_80BF518 + lsls r0, 16 + cmp r0, 0 + bne _0815B61A + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] +_0815B61A: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B620: .4byte gTasks+0x8 + thumb_func_end sub_815B5F8 + + thumb_func_start sub_815B624 +sub_815B624: @ 815B624 + push {r4,lr} + lsls r0, 24 + lsrs r0, 24 + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + ldr r0, _0815B65C @ =gTasks+0x8 + adds r4, r1, r0 + ldr r0, _0815B660 @ =gMain + ldrh r1, [r0, 0x2E] + movs r0, 0x3 + ands r0, r1 + cmp r0, 0 + beq _0815B656 + movs r0, 0 + movs r1, 0xCC + bl FillWindowPixelBuffer + movs r0, 0 + movs r1, 0x2 + bl CopyWindowToVram + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] +_0815B656: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B65C: .4byte gTasks+0x8 +_0815B660: .4byte gMain + thumb_func_end sub_815B624 + + thumb_func_start sub_815B664 +sub_815B664: @ 815B664 + push {r4,lr} + lsls r0, 24 + lsrs r0, 24 + lsls r4, r0, 2 + adds r4, r0 + lsls r4, 3 + ldr r0, _0815B6A0 @ =gTasks+0x8 + adds r4, r0 + movs r0, 0x2 + ldrsh r1, [r4, r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, _0815B6A4 @ =gSprites + adds r0, r1 + movs r1, 0x5 + bl StartSpriteAnim + movs r0, 0 + strh r0, [r4, 0x4] + strh r0, [r4, 0x8] + movs r0, 0x1 + strh r0, [r4, 0xA] + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B6A0: .4byte gTasks+0x8 +_0815B6A4: .4byte gSprites + thumb_func_end sub_815B664 + + thumb_func_start sub_815B6A8 +sub_815B6A8: @ 815B6A8 + push {r4-r6,lr} + sub sp, 0x4 + lsls r0, 24 + lsrs r5, r0, 24 + lsls r0, r5, 2 + adds r0, r5 + lsls r0, 3 + ldr r1, _0815B730 @ =gTasks+0x8 + adds r4, r0, r1 + movs r0, 0x2 + ldrsh r1, [r4, r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, _0815B734 @ =gSprites + adds r6, r0, r1 + movs r1, 0x80 + lsls r1, 1 + movs r0, 0x3 + movs r2, 0x2 + bl ChangeBgY + ldrh r0, [r4, 0x4] + adds r0, 0x1 + strh r0, [r4, 0x4] + movs r3, 0xF + ands r3, r0 + cmp r3, 0 + bne _0815B702 + ldr r0, _0815B738 @ =gUnknown_203F450 + ldr r1, [r0] + ldr r2, _0815B73C @ =0x00004005 + adds r1, r2 + ldrb r0, [r1] + subs r0, 0x1 + strb r0, [r1] + movs r0, 0x24 + ldrsh r1, [r6, r0] + movs r0, 0x26 + ldrsh r2, [r6, r0] + str r3, [sp] + adds r0, r5, 0 + movs r3, 0 + bl sub_815BAA0 +_0815B702: + movs r1, 0x4 + ldrsh r0, [r4, r1] + cmp r0, 0x30 + bne _0815B726 + movs r1, 0 + strh r1, [r4, 0x4] + movs r2, 0x1 + negs r2, r2 + adds r0, r2, 0 + strh r0, [r4, 0x8] + strh r1, [r4, 0xA] + adds r0, r6, 0 + movs r1, 0x7 + bl StartSpriteAnim + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] +_0815B726: + add sp, 0x4 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_0815B730: .4byte gTasks+0x8 +_0815B734: .4byte gSprites +_0815B738: .4byte gUnknown_203F450 +_0815B73C: .4byte 0x00004005 + thumb_func_end sub_815B6A8 + + thumb_func_start sub_815B740 +sub_815B740: @ 815B740 + push {r4-r6,lr} + sub sp, 0x4 + lsls r0, 24 + lsrs r0, 24 + adds r5, r0, 0 + lsls r0, r5, 2 + adds r0, r5 + lsls r0, 3 + ldr r1, _0815B7D4 @ =gTasks+0x8 + adds r4, r0, r1 + movs r0, 0x2 + ldrsh r1, [r4, r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, _0815B7D8 @ =gSprites + adds r6, r0, r1 + movs r1, 0x80 + lsls r1, 1 + movs r0, 0x3 + movs r2, 0x1 + bl ChangeBgX + ldrh r0, [r4, 0x4] + adds r0, 0x1 + strh r0, [r4, 0x4] + movs r2, 0xF + ands r0, r2 + cmp r0, 0 + bne _0815B78A + ldr r0, _0815B7DC @ =gUnknown_203F450 + ldr r1, [r0] + ldr r3, _0815B7E0 @ =0x00004004 + adds r1, r3 + ldrb r0, [r1] + adds r0, 0x1 + strb r0, [r1] +_0815B78A: + movs r1, 0x4 + ldrsh r0, [r4, r1] + adds r0, 0x8 + ands r0, r2 + cmp r0, 0 + bne _0815B7AC + ldrh r1, [r6, 0x24] + adds r1, 0x8 + lsls r1, 16 + asrs r1, 16 + movs r3, 0x26 + ldrsh r2, [r6, r3] + str r0, [sp] + adds r0, r5, 0 + movs r3, 0 + bl sub_815BAA0 +_0815B7AC: + movs r1, 0x4 + ldrsh r0, [r4, r1] + cmp r0, 0x30 + bne _0815B7CA + movs r0, 0 + strh r0, [r4, 0x4] + strh r0, [r4, 0x8] + strh r0, [r4, 0xA] + adds r0, r6, 0 + movs r1, 0x3 + bl StartSpriteAnim + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] +_0815B7CA: + add sp, 0x4 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_0815B7D4: .4byte gTasks+0x8 +_0815B7D8: .4byte gSprites +_0815B7DC: .4byte gUnknown_203F450 +_0815B7E0: .4byte 0x00004004 + thumb_func_end sub_815B740 + + thumb_func_start sub_815B7E4 +sub_815B7E4: @ 815B7E4 + push {r4-r6,lr} + sub sp, 0x4 + adds r6, r0, 0 + lsls r6, 24 + lsrs r6, 24 + lsls r5, r6, 2 + adds r5, r6 + lsls r5, 3 + ldr r0, _0815B838 @ =gTasks+0x8 + adds r5, r0 + movs r1, 0x2 + ldrsh r0, [r5, r1] + lsls r4, r0, 4 + adds r4, r0 + lsls r4, 2 + ldr r0, _0815B83C @ =gSprites + adds r4, r0 + adds r0, r4, 0 + movs r1, 0x6 + bl StartSpriteAnim + ldrh r0, [r5, 0x6] + adds r0, 0x1 + strh r0, [r5, 0x6] + movs r0, 0 + strh r0, [r5, 0x8] + strh r0, [r5, 0xA] + movs r0, 0x24 + ldrsh r1, [r4, r0] + movs r0, 0x26 + ldrsh r2, [r4, r0] + movs r0, 0 + str r0, [sp] + adds r0, r6, 0 + movs r3, 0 + bl sub_815BAA0 + add sp, 0x4 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_0815B838: .4byte gTasks+0x8 +_0815B83C: .4byte gSprites + thumb_func_end sub_815B7E4 + + thumb_func_start sub_815B840 +sub_815B840: @ 815B840 + push {r4-r6,lr} + sub sp, 0x4 + lsls r0, 24 + lsrs r3, r0, 24 + lsls r0, r3, 2 + adds r0, r3 + lsls r0, 3 + ldr r1, _0815B890 @ =gTasks+0x8 + adds r5, r0, r1 + movs r0, 0x2 + ldrsh r1, [r5, r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, _0815B894 @ =gSprites + adds r4, r0, r1 + ldrh r1, [r4, 0x24] + movs r0, 0xF + ands r0, r1 + cmp r0, 0 + bne _0815B87E + subs r1, 0x8 + lsls r1, 16 + asrs r1, 16 + movs r6, 0x26 + ldrsh r2, [r4, r6] + str r0, [sp] + adds r0, r3, 0 + movs r3, 0 + bl sub_815BAA0 +_0815B87E: + ldrh r1, [r4, 0x24] + movs r2, 0x24 + ldrsh r0, [r4, r2] + cmp r0, 0x8 + bne _0815B898 + ldrh r0, [r5, 0x6] + adds r0, 0x1 + strh r0, [r5, 0x6] + b _0815B89C + .align 2, 0 +_0815B890: .4byte gTasks+0x8 +_0815B894: .4byte gSprites +_0815B898: + subs r0, r1, 0x1 + strh r0, [r4, 0x24] +_0815B89C: + add sp, 0x4 + pop {r4-r6} + pop {r0} + bx r0 + thumb_func_end sub_815B840 + + thumb_func_start sub_815B8A4 +sub_815B8A4: @ 815B8A4 + push {r4,lr} + sub sp, 0xC + lsls r0, 24 + lsrs r0, 24 + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + ldr r0, _0815B900 @ =gTasks+0x8 + adds r4, r1, r0 + movs r1, 0x4 + ldrsh r0, [r4, r1] + cmp r0, 0 + bne _0815B8DC + ldr r1, _0815B904 @ =gUnknown_8479590 + movs r0, 0x8 + str r0, [sp] + movs r0, 0x2 + str r0, [sp, 0x4] + movs r0, 0x11 + str r0, [sp, 0x8] + movs r0, 0x1 + movs r2, 0x14 + movs r3, 0xA + bl CopyToBgTilemapBufferRect_ChangePalette + movs r0, 0x1 + bl schedule_bg_copy_tilemap_to_vram +_0815B8DC: + ldrh r0, [r4, 0x4] + adds r0, 0x1 + strh r0, [r4, 0x4] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x7E + ble _0815B8F8 + bl sub_815B908 + movs r0, 0 + strh r0, [r4, 0x4] + ldrh r0, [r4, 0x6] + adds r0, 0x1 + strh r0, [r4, 0x6] +_0815B8F8: + add sp, 0xC + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815B900: .4byte gTasks+0x8 +_0815B904: .4byte gUnknown_8479590 + thumb_func_end sub_815B8A4 + + thumb_func_start sub_815B908 +sub_815B908: @ 815B908 + push {lr} + sub sp, 0x8 + movs r0, 0x8 + str r0, [sp] + movs r0, 0x2 + str r0, [sp, 0x4] + movs r0, 0x1 + movs r1, 0 + movs r2, 0x14 + movs r3, 0xA + bl FillBgTilemapBufferRect_Palette0 + movs r0, 0x1 + bl schedule_bg_copy_tilemap_to_vram + add sp, 0x8 + pop {r0} + bx r0 + thumb_func_end sub_815B908 + + thumb_func_start sub_815B92C +sub_815B92C: @ 815B92C + push {r4-r7,lr} + lsls r0, 24 + lsrs r0, 24 + lsls r1, r0, 2 + adds r1, r0 + lsls r6, r1, 3 + ldr r7, _0815B9DC @ =gTasks+0x8 + adds r5, r6, r7 + movs r1, 0x4 + ldrsh r0, [r5, r1] + cmp r0, 0 + bne _0815B94C + movs r0, 0xAD + lsls r0, 1 + bl PlayNewMapMusic +_0815B94C: + bl TeachyTvBg2AnimController + ldrh r0, [r5, 0x4] + adds r0, 0x1 + strh r0, [r5, 0x4] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x3F + ble _0815B9D4 + movs r4, 0 + strh r4, [r5, 0x4] + strh r4, [r5, 0x6] + bl TeachyTvSetupWindow + lsls r0, 24 + lsrs r0, 24 + strh r0, [r5] + adds r0, r7, 0 + subs r0, 0x8 + adds r0, r6, r0 + ldr r1, _0815B9E0 @ =sub_815B2C0 + str r1, [r0] + movs r0, 0 + bl PutWindowTilemap + bl TeachyTvSetupScrollIndicatorArrowPair + bl TeachyTvSetWindowRegs + movs r0, 0 + bl schedule_bg_copy_tilemap_to_vram + movs r0, 0x3 + movs r1, 0 + movs r2, 0 + bl ChangeBgX + movs r0, 0x3 + movs r1, 0 + movs r2, 0 + bl ChangeBgY + movs r1, 0x80 + lsls r1, 5 + movs r0, 0x3 + movs r2, 0x2 + bl ChangeBgX + movs r1, 0xA0 + lsls r1, 6 + movs r0, 0x3 + movs r2, 0x1 + bl ChangeBgY + ldr r2, _0815B9E4 @ =gUnknown_203F450 + ldr r0, [r2] + ldr r1, _0815B9E8 @ =0x00004004 + adds r0, r1 + strb r4, [r0] + ldr r0, [r2] + adds r1, 0x1 + adds r0, r1 + movs r1, 0x3 + strb r1, [r0] + ldr r0, [r2] + ldr r1, _0815B9EC @ =0x00004006 + adds r0, r1 + strb r4, [r0] +_0815B9D4: + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_0815B9DC: .4byte gTasks+0x8 +_0815B9E0: .4byte sub_815B2C0 +_0815B9E4: .4byte gUnknown_203F450 +_0815B9E8: .4byte 0x00004004 +_0815B9EC: .4byte 0x00004006 + thumb_func_end sub_815B92C + + thumb_func_start sub_815B9F0 +sub_815B9F0: @ 815B9F0 + push {lr} + lsls r0, 24 + lsrs r1, r0, 24 + adds r2, r1, 0 + ldr r0, _0815BA0C @ =gTeachyTV_StaticResources + ldrb r0, [r0, 0x5] + cmp r0, 0 + blt _0815BA22 + cmp r0, 0x3 + bgt _0815BA10 + adds r0, r1, 0 + bl sub_815BC90 + b _0815BA22 + .align 2, 0 +_0815BA0C: .4byte gTeachyTV_StaticResources +_0815BA10: + cmp r0, 0x5 + bgt _0815BA22 + ldr r0, _0815BA28 @ =gUnknown_203F450 + ldr r1, [r0] + ldr r0, _0815BA2C @ =sub_815BA30 + str r0, [r1] + adds r0, r2, 0 + bl sub_815B23C +_0815BA22: + pop {r0} + bx r0 + .align 2, 0 +_0815BA28: .4byte gUnknown_203F450 +_0815BA2C: .4byte sub_815BA30 + thumb_func_end sub_815B9F0 + + thumb_func_start sub_815BA30 +sub_815BA30: @ 815BA30 + push {lr} + ldr r0, _0815BA44 @ =gTeachyTV_StaticResources + ldrb r0, [r0, 0x5] + cmp r0, 0x4 + bne _0815BA48 + movs r0, 0xA + bl sub_810B108 + b _0815BA4E + .align 2, 0 +_0815BA44: .4byte gTeachyTV_StaticResources +_0815BA48: + movs r0, 0x9 + bl sub_810B108 +_0815BA4E: + pop {r0} + bx r0 + thumb_func_end sub_815BA30 + + thumb_func_start TeachyTvTaskFunction +TeachyTvTaskFunction: @ 815BA54 + push {r4,lr} + lsls r0, 24 + lsrs r0, 24 + lsls r1, r0, 2 + adds r1, r0 + lsls r2, r1, 3 + ldr r4, _0815BA8C @ =gTasks+0x8 + adds r3, r2, r4 + ldr r0, _0815BA90 @ =gPaletteFade + ldrb r1, [r0, 0x7] + movs r0, 0x80 + ands r0, r1 + cmp r0, 0 + bne _0815BA86 + ldr r1, _0815BA94 @ =gUnknown_8479390 + ldr r0, _0815BA98 @ =gTeachyTV_StaticResources + ldrb r0, [r0, 0x5] + adds r0, r1 + ldrb r0, [r0] + strh r0, [r3, 0x6] + adds r0, r4, 0 + subs r0, 0x8 + adds r0, r2, r0 + ldr r1, _0815BA9C @ =sub_815B4EC + str r1, [r0] +_0815BA86: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0815BA8C: .4byte gTasks+0x8 +_0815BA90: .4byte gPaletteFade +_0815BA94: .4byte gUnknown_8479390 +_0815BA98: .4byte gTeachyTV_StaticResources +_0815BA9C: .4byte sub_815B4EC + thumb_func_end TeachyTvTaskFunction + + thumb_func_start sub_815BAA0 +sub_815BAA0: @ 815BAA0 + push {r4-r7,lr} + mov r7, r9 + mov r6, r8 + push {r6,r7} + ldr r4, [sp, 0x1C] + lsls r0, 24 + lsrs r0, 24 + mov r9, r0 + lsls r1, 16 + lsrs r6, r1, 16 + lsls r2, 16 + lsrs r1, r2, 16 + lsls r3, 24 + lsrs r7, r3, 24 + lsls r4, 24 + lsrs r4, 24 + mov r8, r4 + ldr r0, _0815BB34 @ =gUnknown_203F450 + ldr r0, [r0] + ldr r2, _0815BB38 @ =0x00004006 + adds r0, r2 + ldrb r0, [r0] + cmp r0, 0x1 + beq _0815BB5C + lsls r0, r6, 16 + ldr r2, _0815BB3C @ =0xfff00000 + adds r0, r2 + asrs r0, 16 + lsls r1, 16 + asrs r5, r1, 16 + adds r1, r5, 0 + bl sub_815BC40 + lsls r0, 24 + cmp r0, 0 + beq _0815BB5C + ldr r0, _0815BB40 @ =gUnknown_83A0010 + ldr r0, [r0, 0x10] + movs r1, 0 + movs r2, 0 + adds r3, r7, 0 + bl CreateSprite + lsls r0, 24 + lsrs r0, 24 + lsls r1, r0, 4 + adds r1, r0 + lsls r1, 2 + ldr r0, _0815BB44 @ =gSprites + adds r4, r1, r0 + strh r6, [r4, 0x24] + adds r0, r5, 0 + adds r0, 0x8 + strh r0, [r4, 0x26] + ldr r0, _0815BB48 @ =sub_815BB6C + str r0, [r4, 0x1C] + mov r0, r9 + strh r0, [r4, 0x2E] + mov r2, r8 + cmp r2, 0x1 + bne _0815BB4C + adds r0, r4, 0 + movs r1, 0x4 + bl SeekSpriteAnim + ldrb r0, [r4, 0x5] + movs r1, 0xD + negs r1, r1 + ands r1, r0 + movs r0, 0x8 + orrs r1, r0 + strb r1, [r4, 0x5] + b _0815BB5C + .align 2, 0 +_0815BB34: .4byte gUnknown_203F450 +_0815BB38: .4byte 0x00004006 +_0815BB3C: .4byte 0xfff00000 +_0815BB40: .4byte gUnknown_83A0010 +_0815BB44: .4byte gSprites +_0815BB48: .4byte sub_815BB6C +_0815BB4C: + ldr r1, _0815BB68 @ =gUnknown_84795B8 + adds r0, r4, 0 + bl SetSubspriteTables + adds r1, r4, 0 + adds r1, 0x42 + movs r0, 0x40 + strb r0, [r1] +_0815BB5C: + pop {r3,r4} + mov r8, r3 + mov r9, r4 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_0815BB68: .4byte gUnknown_84795B8 + thumb_func_end sub_815BAA0 + + thumb_func_start sub_815BB6C +sub_815BB6C: @ 815BB6C + push {r4,r5,lr} + adds r3, r0, 0 + movs r0, 0x2E + ldrsh r1, [r3, r0] + lsls r0, r1, 2 + adds r0, r1 + lsls r0, 3 + ldr r1, _0815BBA4 @ =gTasks+0x8 + adds r4, r0, r1 + movs r2, 0x2 + ldrsh r1, [r4, r2] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, _0815BBA8 @ =gSprites + adds r5, r0, r1 + ldr r0, _0815BBAC @ =gUnknown_203F450 + ldr r0, [r0] + ldr r1, _0815BBB0 @ =0x00004006 + adds r0, r1 + ldrb r0, [r0] + cmp r0, 0x1 + bne _0815BBB4 + adds r0, r3, 0 + bl DestroySprite + b _0815BC3A + .align 2, 0 +_0815BBA4: .4byte gTasks+0x8 +_0815BBA8: .4byte gSprites +_0815BBAC: .4byte gUnknown_203F450 +_0815BBB0: .4byte 0x00004006 +_0815BBB4: + adds r0, r3, 0 + adds r0, 0x2B + ldrb r0, [r0] + cmp r0, 0 + bne _0815BBD2 + adds r2, r3, 0 + adds r2, 0x42 + ldrb r0, [r2] + movs r1, 0x40 + negs r1, r1 + ands r1, r0 + movs r0, 0x1 + orrs r1, r0 + strb r1, [r2] + b _0815BBE0 +_0815BBD2: + adds r2, r3, 0 + adds r2, 0x42 + ldrb r1, [r2] + movs r0, 0x40 + negs r0, r0 + ands r0, r1 + strb r0, [r2] +_0815BBE0: + ldrh r0, [r4, 0x8] + ldrh r2, [r3, 0x24] + adds r0, r2 + strh r0, [r3, 0x24] + ldrh r0, [r4, 0xA] + ldrh r1, [r3, 0x26] + adds r0, r1 + strh r0, [r3, 0x26] + adds r0, r3, 0 + adds r0, 0x3F + ldrb r1, [r0] + movs r0, 0x10 + ands r0, r1 + cmp r0, 0 + beq _0815BC3A + adds r1, r3, 0 + adds r1, 0x43 + movs r0, 0 + strb r0, [r1] + ldrh r1, [r3, 0x24] + ldrh r0, [r5, 0x24] + subs r1, r0 + ldrh r0, [r3, 0x26] + ldrh r2, [r5, 0x26] + subs r0, r2 + lsls r0, 16 + lsrs r0, 16 + lsls r1, 16 + movs r2, 0xF0 + lsls r2, 12 + adds r1, r2 + lsrs r1, 16 + cmp r1, 0x1E + bhi _0815BC34 + lsls r0, 16 + asrs r1, r0, 16 + movs r0, 0x10 + negs r0, r0 + cmp r1, r0 + ble _0815BC34 + cmp r1, 0x17 + ble _0815BC3A +_0815BC34: + adds r0, r3, 0 + bl DestroySprite +_0815BC3A: + pop {r4,r5} + pop {r0} + bx r0 + thumb_func_end sub_815BB6C + + thumb_func_start sub_815BC40 +sub_815BC40: @ 815BC40 + push {r4,r5,lr} + lsls r1, 16 + lsrs r1, 16 + lsls r4, r0, 16 + cmp r4, 0 + blt _0815BC52 + lsls r1, 16 + cmp r1, 0 + bge _0815BC56 +_0815BC52: + movs r0, 0 + b _0815BC78 +_0815BC56: + ldr r3, _0815BC80 @ =gUnknown_84795C8 + ldr r0, _0815BC84 @ =gUnknown_203F450 + ldr r2, [r0] + ldr r5, _0815BC88 @ =0x00004005 + adds r0, r2, r5 + asrs r1, 20 + ldrb r0, [r0] + adds r1, r0 + lsls r1, 4 + ldr r0, _0815BC8C @ =0x00004004 + adds r2, r0 + asrs r0, r4, 20 + ldrb r2, [r2] + adds r0, r2 + adds r1, r0 + adds r1, r3 + ldrb r0, [r1] +_0815BC78: + pop {r4,r5} + pop {r1} + bx r1 + .align 2, 0 +_0815BC80: .4byte gUnknown_84795C8 +_0815BC84: .4byte gUnknown_203F450 +_0815BC88: .4byte 0x00004005 +_0815BC8C: .4byte 0x00004004 + thumb_func_end sub_815BC40 + + thumb_func_start sub_815BC90 +sub_815BC90: @ 815BC90 + push {r4-r6,lr} + lsls r0, 24 + lsrs r6, r0, 24 + lsls r0, r6, 2 + adds r0, r6 + lsls r0, 3 + ldr r1, _0815BCCC @ =gTasks+0x8 + adds r5, r0, r1 + bl sub_815B220 + ldr r1, _0815BCD0 @ =gSpecialVar_0x8004 + ldr r4, _0815BCD4 @ =gTeachyTV_StaticResources + ldrb r0, [r4, 0x5] + strh r0, [r1] + ldr r1, _0815BCD8 @ =gMain + ldr r0, _0815BCDC @ =sub_815BD58 + str r0, [r1, 0x8] + bl SavePlayerParty + bl sub_8159F40 + movs r0, 0 + bl PlayMapChosenOrBattleBGM + ldrb r0, [r4, 0x5] + cmp r0, 0 + bne _0815BCE0 + movs r0, 0x9 + b _0815BCE2 + .align 2, 0 +_0815BCCC: .4byte gTasks+0x8 +_0815BCD0: .4byte gSpecialVar_0x8004 +_0815BCD4: .4byte gTeachyTV_StaticResources +_0815BCD8: .4byte gMain +_0815BCDC: .4byte sub_815BD58 +_0815BCE0: + movs r0, 0x8 +_0815BCE2: + strh r0, [r5, 0xC] + movs r0, 0 + strh r0, [r5, 0xE] + ldr r1, _0815BCFC @ =gTasks + lsls r0, r6, 2 + adds r0, r6 + lsls r0, 3 + adds r0, r1 + ldr r1, _0815BD00 @ =sub_815BD04 + str r1, [r0] + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_0815BCFC: .4byte gTasks +_0815BD00: .4byte sub_815BD04 + thumb_func_end sub_815BC90 + + thumb_func_start sub_815BD04 +sub_815BD04: @ 815BD04 + push {r4,r5,lr} + lsls r0, 24 + lsrs r5, r0, 24 + lsls r0, r5, 2 + adds r0, r5 + lsls r0, 3 + ldr r1, _0815BD24 @ =gTasks+0x8 + adds r4, r0, r1 + movs r1, 0xE + ldrsh r0, [r4, r1] + cmp r0, 0 + beq _0815BD28 + cmp r0, 0x1 + beq _0815BD36 + b _0815BD4C + .align 2, 0 +_0815BD24: .4byte gTasks+0x8 +_0815BD28: + ldrb r0, [r4, 0xC] + bl sub_80D08B8 + ldrh r0, [r4, 0xE] + adds r0, 0x1 + strh r0, [r4, 0xE] + b _0815BD4C +_0815BD36: + bl sub_80D08F8 + lsls r0, 24 + cmp r0, 0 + beq _0815BD4C + ldr r0, _0815BD54 @ =sub_800FD9C + bl SetMainCallback2 + adds r0, r5, 0 + bl DestroyTask +_0815BD4C: + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_0815BD54: .4byte sub_800FD9C + thumb_func_end sub_815BD04 + + thumb_func_start sub_815BD58 +sub_815BD58: @ 815BD58 + push {lr} + bl LoadPlayerParty + ldr r0, _0815BD6C @ =gUnknown_2023E8A + ldrb r0, [r0] + cmp r0, 0x3 + bne _0815BD70 + bl sub_815AC20 + b _0815BD78 + .align 2, 0 +_0815BD6C: .4byte gUnknown_2023E8A +_0815BD70: + movs r0, 0x88 + lsls r0, 1 + bl PlayNewMapMusic +_0815BD78: + bl CB2_ReturnToTeachyTV + pop {r0} + bx r0 + thumb_func_end sub_815BD58 + + thumb_func_start sub_815BD80 +sub_815BD80: @ 815BD80 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x1C + str r0, [sp, 0x4] + movs r0, 0 + str r0, [sp, 0x10] + ldr r1, _0815BE1C @ =Route1_Layout + mov r8, r1 + movs r0, 0x80 + lsls r0, 4 + bl AllocZeroed + adds r6, r0, 0 + movs r0, 0x80 + lsls r0, 8 + bl AllocZeroed + str r0, [sp, 0x8] + movs r0, 0x10 + bl Alloc + str r0, [sp, 0xC] + movs r1, 0xFF + movs r2, 0x10 + bl memset + mov r2, r8 + ldr r0, [r2, 0x10] + movs r2, 0xA0 + lsls r2, 2 + ldr r1, [sp, 0x8] + bl sub_815BF48 + mov r3, r8 + ldr r0, [r3, 0x14] + ldr r2, [sp, 0x8] + movs r3, 0xA0 + lsls r3, 7 + adds r1, r2, r3 + movs r2, 0xC0 + lsls r2, 1 + bl sub_815BF48 + movs r4, 0 +_0815BDDE: + movs r2, 0 + adds r0, r4, 0x6 + str r0, [sp, 0x18] + lsls r1, r4, 4 + mov r10, r1 + lsls r3, r4, 6 + mov r9, r3 + adds r4, 0x1 + str r4, [sp, 0x14] +_0815BDF0: + mov r1, r8 + ldr r0, [r1] + ldr r3, [sp, 0x18] + muls r0, r3 + ldr r1, [r1, 0xC] + adds r0, r2, r0 + lsls r0, 1 + adds r0, r1 + ldrh r1, [r0, 0x10] + ldr r3, _0815BE20 @ =0x000003ff + adds r0, r3, 0 + adds r4, r0, 0 + ands r4, r1 + movs r3, 0 + mov r0, r10 + adds r1, r0, r2 + lsls r5, r2, 1 + adds r7, r2, 0x1 + cmp r3, r1 + bge _0815BE3C + ldrh r0, [r6] + b _0815BE34 + .align 2, 0 +_0815BE1C: .4byte Route1_Layout +_0815BE20: .4byte 0x000003ff +_0815BE24: + adds r0, r3, 0x1 + lsls r0, 16 + lsrs r3, r0, 16 + cmp r3, r1 + bge _0815BE3C + lsls r0, r3, 1 + adds r0, r6 + ldrh r0, [r0] +_0815BE34: + cmp r0, 0 + beq _0815BE46 + cmp r0, r4 + bne _0815BE24 +_0815BE3C: + lsls r0, r3, 1 + adds r0, r6 + ldrh r0, [r0] + cmp r0, 0 + bne _0815BE56 +_0815BE46: + lsls r0, r3, 1 + adds r0, r6 + strh r4, [r0] + ldr r0, [sp, 0x10] + adds r0, 0x1 + lsls r0, 16 + lsrs r0, 16 + str r0, [sp, 0x10] +_0815BE56: + mov r2, r9 + adds r1, r2, r5 + lsls r1, 1 + ldr r0, [sp, 0x4] + adds r1, r0, r1 + str r3, [sp] + mov r0, r8 + ldr r2, [sp, 0xC] + adds r3, r4, 0 + bl sub_815BF70 + lsls r0, r7, 16 + lsrs r2, r0, 16 + cmp r2, 0xF + bls _0815BDF0 + ldr r1, [sp, 0x14] + lsls r0, r1, 16 + lsrs r4, r0, 16 + cmp r4, 0x8 + bls _0815BDDE + ldr r2, [sp, 0x10] + lsls r0, r2, 7 + bl Alloc + adds r7, r0, 0 + movs r0, 0x80 + bl Alloc + adds r5, r0, 0 + movs r4, 0 + ldr r3, [sp, 0x10] + lsls r3, 23 + mov r9, r3 + ldr r0, [sp, 0x10] + cmp r4, r0 + bcs _0815BF00 + ldr r1, _0815BECC @ =0x0000027f + mov r10, r1 +_0815BEA2: + adds r0, r5, 0 + movs r1, 0 + movs r2, 0x80 + bl memset + lsls r0, r4, 1 + adds r1, r0, r6 + ldrh r0, [r1] + cmp r0, r10 + bhi _0815BED0 + mov r2, r8 + ldr r0, [r2, 0x10] + ldrh r1, [r1] + lsls r1, 4 + ldr r0, [r0, 0xC] + adds r0, r1 + adds r1, r5, 0 + ldr r2, [sp, 0x8] + bl sub_815BFF0 + b _0815BEE8 + .align 2, 0 +_0815BECC: .4byte 0x0000027f +_0815BED0: + mov r3, r8 + ldr r0, [r3, 0x14] + ldrh r1, [r1] + ldr r2, _0815BF44 @ =0xfffffd80 + adds r1, r2 + lsls r1, 4 + ldr r0, [r0, 0xC] + adds r0, r1 + adds r1, r5, 0 + ldr r2, [sp, 0x8] + bl sub_815BFF0 +_0815BEE8: + lsls r1, r4, 7 + adds r1, r7, r1 + adds r0, r5, 0 + movs r2, 0x20 + bl CpuFastSet + adds r0, r4, 0x1 + lsls r0, 16 + lsrs r4, r0, 16 + ldr r3, [sp, 0x10] + cmp r4, r3 + bcc _0815BEA2 +_0815BF00: + mov r0, r9 + lsrs r2, r0, 16 + movs r0, 0x3 + adds r1, r7, 0 + movs r3, 0 + bl LoadBgTiles + mov r0, r8 + ldr r1, [sp, 0xC] + bl sub_815C230 + adds r0, r5, 0 + bl Free + adds r0, r7, 0 + bl Free + ldr r0, [sp, 0xC] + bl Free + ldr r0, [sp, 0x8] + bl Free + adds r0, r6, 0 + bl Free + add sp, 0x1C + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_0815BF44: .4byte 0xfffffd80 + thumb_func_end sub_815BD80 + + thumb_func_start sub_815BF48 +sub_815BF48: @ 815BF48 + push {lr} + adds r3, r0, 0 + lsls r2, 16 + lsrs r2, 16 + cmp r3, 0 + beq _0815BF6A + ldrb r0, [r3] + cmp r0, 0 + bne _0815BF64 + ldr r0, [r3, 0x4] + lsls r2, 3 + bl CpuFastSet + b _0815BF6A +_0815BF64: + ldr r0, [r3, 0x4] + bl LZDecompressWram +_0815BF6A: + pop {r0} + bx r0 + thumb_func_end sub_815BF48 + + thumb_func_start sub_815BF70 +sub_815BF70: @ 815BF70 + push {r4-r7,lr} + adds r5, r0, 0 + adds r7, r1, 0 + adds r6, r2, 0 + ldr r0, [sp, 0x14] + lsls r3, 16 + lsrs r1, r3, 16 + lsls r0, 16 + lsrs r4, r0, 16 + ldr r0, _0815BF8C @ =0x0000027f + cmp r1, r0 + bhi _0815BF90 + ldr r0, [r5, 0x10] + b _0815BF96 + .align 2, 0 +_0815BF8C: .4byte 0x0000027f +_0815BF90: + ldr r0, [r5, 0x14] + ldr r2, _0815BFEC @ =0xfffffd80 + adds r1, r2 +_0815BF96: + lsls r1, 4 + ldr r0, [r0, 0xC] + adds r5, r0, r1 + ldrh r1, [r5] + adds r0, r6, 0 + bl sub_815C1F0 + lsls r0, 12 + lsls r4, 2 + adds r0, r4 + strh r0, [r7] + ldrh r1, [r5, 0x2] + adds r0, r6, 0 + bl sub_815C1F0 + lsls r0, 12 + adds r0, r4 + adds r0, 0x1 + strh r0, [r7, 0x2] + ldrh r1, [r5, 0x4] + adds r0, r6, 0 + bl sub_815C1F0 + adds r1, r7, 0 + adds r1, 0x40 + lsls r0, 12 + adds r0, r4 + adds r0, 0x2 + strh r0, [r1] + ldrh r1, [r5, 0x6] + adds r0, r6, 0 + bl sub_815C1F0 + adds r1, r7, 0 + adds r1, 0x42 + lsls r0, 12 + adds r0, r4 + adds r0, 0x3 + strh r0, [r1] + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_0815BFEC: .4byte 0xfffffd80 + thumb_func_end sub_815BF70 + + thumb_func_start sub_815BFF0 +sub_815BFF0: @ 815BFF0 + push {r4-r6,lr} + mov r6, r10 + mov r5, r9 + mov r4, r8 + push {r4-r6} + mov r8, r0 + mov r9, r1 + adds r5, r2, 0 + ldrh r2, [r0] + ldr r4, _0815C0D0 @ =0x000003ff + adds r1, r4, 0 + ands r1, r2 + lsls r1, 5 + adds r1, r5, r1 + lsrs r2, 10 + movs r6, 0x3 + ands r2, r6 + mov r0, r9 + bl sub_815C0D4 + mov r0, r8 + ldrh r2, [r0, 0x8] + adds r1, r4, 0 + ands r1, r2 + lsls r1, 5 + adds r1, r5, r1 + lsrs r2, 10 + ands r2, r6 + mov r0, r9 + bl sub_815C0D4 + movs r0, 0x20 + add r0, r9 + mov r10, r0 + mov r0, r8 + ldrh r2, [r0, 0x2] + adds r1, r4, 0 + ands r1, r2 + lsls r1, 5 + adds r1, r5, r1 + lsrs r2, 10 + ands r2, r6 + mov r0, r10 + bl sub_815C0D4 + mov r0, r8 + ldrh r2, [r0, 0xA] + adds r1, r4, 0 + ands r1, r2 + lsls r1, 5 + adds r1, r5, r1 + lsrs r2, 10 + ands r2, r6 + mov r0, r10 + bl sub_815C0D4 + movs r0, 0x40 + add r0, r9 + mov r10, r0 + mov r0, r8 + ldrh r2, [r0, 0x4] + adds r1, r4, 0 + ands r1, r2 + lsls r1, 5 + adds r1, r5, r1 + lsrs r2, 10 + ands r2, r6 + mov r0, r10 + bl sub_815C0D4 + mov r0, r8 + ldrh r2, [r0, 0xC] + adds r1, r4, 0 + ands r1, r2 + lsls r1, 5 + adds r1, r5, r1 + lsrs r2, 10 + ands r2, r6 + mov r0, r10 + bl sub_815C0D4 + movs r0, 0x60 + add r9, r0 + mov r0, r8 + ldrh r2, [r0, 0x6] + adds r1, r4, 0 + ands r1, r2 + lsls r1, 5 + adds r1, r5, r1 + lsrs r2, 10 + ands r2, r6 + mov r0, r9 + bl sub_815C0D4 + mov r0, r8 + ldrh r2, [r0, 0xE] + ands r4, r2 + lsls r4, 5 + adds r5, r4 + lsrs r2, 10 + ands r2, r6 + mov r0, r9 + adds r1, r5, 0 + bl sub_815C0D4 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_0815C0D0: .4byte 0x000003ff + thumb_func_end sub_815BFF0 + + thumb_func_start sub_815C0D4 +sub_815C0D4: @ 815C0D4 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x4 + mov r9, r0 + adds r4, r1, 0 + lsls r2, 24 + lsrs r2, 24 + mov r10, r2 + movs r0, 0x20 + bl AllocZeroed + adds r6, r0, 0 + movs r0, 0x20 + bl AllocZeroed + str r0, [sp] + adds r0, r4, 0 + adds r1, r6, 0 + movs r2, 0x8 + bl CpuFastSet + movs r0, 0x1 + mov r1, r10 + ands r0, r1 + cmp r0, 0 + beq _0815C15A + movs r5, 0 + movs r7, 0xF + mov r12, r7 + movs r0, 0xF0 + mov r8, r0 +_0815C118: + movs r3, 0 + lsls r4, r5, 2 +_0815C11C: + subs r0, r3, 0x3 + subs r0, r4, r0 + adds r0, r6, r0 + ldrb r1, [r0] + adds r2, r4, r3 + ldr r7, [sp] + adds r2, r7, r2 + adds r0, r1, 0 + mov r7, r12 + ands r0, r7 + lsls r0, 4 + mov r7, r8 + ands r1, r7 + lsrs r1, 4 + adds r0, r1 + strb r0, [r2] + adds r0, r3, 0x1 + lsls r0, 24 + lsrs r3, r0, 24 + cmp r3, 0x3 + bls _0815C11C + adds r0, r5, 0x1 + lsls r0, 24 + lsrs r5, r0, 24 + cmp r5, 0x7 + bls _0815C118 + ldr r0, [sp] + adds r1, r6, 0 + movs r2, 0x8 + bl CpuFastSet +_0815C15A: + movs r0, 0x2 + mov r1, r10 + ands r0, r1 + cmp r0, 0 + beq _0815C18E + movs r5, 0 +_0815C166: + lsls r0, r5, 2 + ldr r7, [sp] + adds r0, r7 + movs r1, 0x7 + subs r1, r5 + lsls r1, 2 + adds r1, r6 + movs r2, 0x4 + bl memcpy + adds r0, r5, 0x1 + lsls r0, 24 + lsrs r5, r0, 24 + cmp r5, 0x7 + bls _0815C166 + ldr r0, [sp] + adds r1, r6, 0 + movs r2, 0x8 + bl CpuFastSet +_0815C18E: + movs r5, 0 + movs r0, 0xF0 + mov r8, r0 + movs r1, 0xF + mov r12, r1 +_0815C198: + adds r4, r6, r5 + ldrb r0, [r4] + mov r3, r8 + ands r3, r0 + cmp r3, 0 + beq _0815C1B2 + mov r7, r9 + adds r2, r7, r5 + ldrb r1, [r2] + mov r0, r12 + ands r0, r1 + adds r0, r3 + strb r0, [r2] +_0815C1B2: + ldrb r0, [r4] + mov r3, r12 + ands r3, r0 + cmp r3, 0 + beq _0815C1CA + mov r0, r9 + adds r2, r0, r5 + ldrb r1, [r2] + mov r0, r8 + ands r0, r1 + adds r0, r3 + strb r0, [r2] +_0815C1CA: + adds r0, r5, 0x1 + lsls r0, 24 + lsrs r5, r0, 24 + cmp r5, 0x1F + bls _0815C198 + ldr r0, [sp] + bl Free + adds r0, r6, 0 + bl Free + 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_815C0D4 + + thumb_func_start sub_815C1F0 +sub_815C1F0: @ 815C1F0 + push {r4,lr} + adds r4, r0, 0 + lsls r1, 16 + lsrs r1, 28 + movs r3, 0 + ldrb r0, [r4] + cmp r0, r1 + beq _0815C220 + cmp r0, 0xFF + bne _0815C208 + strb r1, [r4] + b _0815C220 +_0815C208: + adds r0, r3, 0x1 + lsls r0, 16 + lsrs r3, r0, 16 + cmp r3, 0xF + bhi _0815C220 + adds r2, r4, r3 + ldrb r0, [r2] + cmp r0, r1 + beq _0815C220 + cmp r0, 0xFF + bne _0815C208 + strb r1, [r2] +_0815C220: + movs r0, 0xF + subs r0, r3 + lsls r0, 16 + lsrs r0, 16 + pop {r4} + pop {r1} + bx r1 + thumb_func_end sub_815C1F0 + + thumb_func_start sub_815C230 +sub_815C230: @ 815C230 + push {r4-r6,lr} + adds r6, r0, 0 + adds r5, r1, 0 + movs r4, 0 + ldrb r0, [r5] + cmp r0, 0xFF + beq _0815C274 +_0815C23E: + adds r1, r5, r4 + ldrb r0, [r1] + cmp r0, 0x6 + bls _0815C24A + ldr r0, [r6, 0x14] + b _0815C24C +_0815C24A: + ldr r0, [r6, 0x10] +_0815C24C: + ldrb r1, [r1] + lsls r1, 5 + ldr r0, [r0, 0x8] + adds r0, r1 + movs r1, 0xF + subs r1, r4 + lsls r1, 20 + lsrs r1, 16 + movs r2, 0x20 + bl LoadPalette + adds r0, r4, 0x1 + lsls r0, 24 + lsrs r4, r0, 24 + cmp r4, 0xF + bhi _0815C274 + adds r0, r5, r4 + ldrb r0, [r0] + cmp r0, 0xFF + bne _0815C23E +_0815C274: + pop {r4-r6} + pop {r0} + bx r0 + thumb_func_end sub_815C230 + + .align 2, 0 @ Don't pad with nop. diff --git a/asm/berry_pouch.s b/asm/berry_pouch.s index 9e53e6624..8cad42ba7 100644 --- a/asm/berry_pouch.s +++ b/asm/berry_pouch.s @@ -1694,7 +1694,7 @@ _0813DA9E: ldr r4, _0813DAE0 @ =gUnknown_203F37A subs r2, r4, 0x2 adds r1, r4, 0 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow ldr r0, _0813DAE4 @ =gMain ldrh r1, [r0, 0x2E] movs r0, 0x4 diff --git a/asm/field_specials.s b/asm/field_specials.s index d98798352..475153ce6 100644 --- a/asm/field_specials.s +++ b/asm/field_specials.s @@ -2753,7 +2753,7 @@ sub_80CBADC: @ 80CBADC ldr r4, _080CBB20 @ =gUnknown_3005378 adds r1, r4, 0 movs r2, 0 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow ldr r1, _080CBB24 @ =gUnknown_2039A18 ldrh r0, [r4] strh r0, [r1] diff --git a/asm/item_menu.s b/asm/item_menu.s index c81730a55..b9f3a6a19 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -2313,7 +2313,7 @@ _08108FA0: adds r4, 0x2 mov r1, sp adds r2, r4, 0 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow mov r0, sp ldrh r1, [r0] ldrh r0, [r4] @@ -2353,7 +2353,7 @@ _08108FE4: adds r3, r5, 0 adds r3, 0x8 adds r2, r3 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow movs r0, 0x2 negs r0, r0 cmp r4, r0 @@ -2830,7 +2830,7 @@ sub_81093B8: @ 81093B8 mov r2, sp adds r2, 0x16 add r1, sp, 0x14 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow mov r2, r8 ldrb r0, [r2] movs r1, 0x10 @@ -2942,7 +2942,7 @@ sub_81094B0: @ 81094B0 adds r1, r2, r1 adds r3, 0x8 adds r2, r3 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow ldrb r0, [r4] bl ListMenuGetYCoordForPrintingArrowCursor adds r1, r0, 0 @@ -2967,7 +2967,7 @@ sub_81094B0: @ 81094B0 adds r4, 0x2 mov r1, sp adds r2, r4, 0 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow mov r0, sp ldrh r1, [r0] ldrh r0, [r4] @@ -3001,7 +3001,7 @@ _08109558: adds r4, 0x2 mov r1, sp adds r2, r4, 0 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow mov r0, sp ldrh r1, [r0] ldrh r0, [r4] @@ -4573,7 +4573,7 @@ sub_810A288: @ 810A288 adds r6, 0x2 mov r1, sp adds r2, r6, 0 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow mov r0, sp ldrh r0, [r0] ldrh r1, [r6] diff --git a/asm/item_pc.s b/asm/item_pc.s index aab19813a..714d5b853 100644 --- a/asm/item_pc.s +++ b/asm/item_pc.s @@ -1403,7 +1403,7 @@ sub_810DEA0: @ 810DEA0 adds r4, 0x2 mov r1, sp adds r2, r4, 0 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow mov r0, sp ldrh r1, [r0] ldrh r0, [r4] @@ -1436,7 +1436,7 @@ _0810DF20: ldrb r0, [r6] ldr r1, _0810DF44 @ =gUnknown_203ADD0 adds r2, r1, 0x2 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow movs r0, 0x2 negs r0, r0 cmp r4, r0 @@ -1630,7 +1630,7 @@ sub_810E0B4: @ 810E0B4 ldr r7, _0810E120 @ =gUnknown_203ADD0 adds r2, r7, 0x2 adds r1, r7, 0 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow movs r5, 0x20 negs r5, r5 ldrb r0, [r4] diff --git a/asm/learn_move.s b/asm/learn_move.s index 92f6abfea..ddc063348 100644 --- a/asm/learn_move.s +++ b/asm/learn_move.s @@ -736,7 +736,7 @@ _080E4C7E: adds r1, r2, r3 ldr r6, _080E4CD4 @ =0x00000a6a adds r2, r6 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow bl FreeAllWindowBuffers ldr r0, _080E4CD8 @ =gPlayerParty ldr r5, [r7] diff --git a/asm/list_menu.s b/asm/list_menu.s index 4615e249b..5dab81d29 100644 --- a/asm/list_menu.s +++ b/asm/list_menu.s @@ -563,8 +563,8 @@ _081072CA: _081072D0: .4byte gTasks+0x8 thumb_func_end sub_81072AC - thumb_func_start get_coro_args_x18_x1A -get_coro_args_x18_x1A: @ 81072D4 + thumb_func_start ListMenuGetScrollAndRow +ListMenuGetScrollAndRow: @ 81072D4 push {lr} adds r3, r1, 0 lsls r0, 24 @@ -588,7 +588,7 @@ _081072F6: bx r0 .align 2, 0 _081072FC: .4byte gTasks+0x8 - thumb_func_end get_coro_args_x18_x1A + thumb_func_end ListMenuGetScrollAndRow thumb_func_start ListMenuGetYCoordForPrintingArrowCursor ListMenuGetYCoordForPrintingArrowCursor: @ 8107300 diff --git a/asm/player_pc.s b/asm/player_pc.s index b5149a435..cb6c9f9d0 100644 --- a/asm/player_pc.s +++ b/asm/player_pc.s @@ -1142,7 +1142,7 @@ sub_80EBF40: @ 80EBF40 mov r8, r1 adds r1, r7, 0 mov r2, r8 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow movs r0, 0x2 negs r0, r0 cmp r6, r0 diff --git a/asm/pokedex_screen.s b/asm/pokedex_screen.s index 24094d9af..09ec6cb62 100644 --- a/asm/pokedex_screen.s +++ b/asm/pokedex_screen.s @@ -593,7 +593,7 @@ _081029D0: ldrb r0, [r1, 0x17] adds r1, 0x62 movs r2, 0 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow bl sub_806E25C cmp r0, 0 beq _081029F4 @@ -627,7 +627,7 @@ _08102A14: ldrb r0, [r1, 0x17] adds r1, 0x62 movs r2, 0 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow ldr r0, _08102A4C @ =gMain ldrh r1, [r0, 0x2E] movs r3, 0x1 @@ -1367,7 +1367,7 @@ _0810307C: ldrb r0, [r1, 0x17] adds r1, 0x62 movs r2, 0 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow bl sub_81039F0 ldr r1, [r4] adds r1, 0x60 @@ -1385,7 +1385,7 @@ _08103098: ldrb r0, [r1, 0x17] adds r1, 0x62 movs r2, 0 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow ldr r0, _081030F0 @ =gMain ldrh r1, [r0, 0x2E] movs r3, 0x1 @@ -1687,7 +1687,7 @@ _08103344: ldrb r0, [r1, 0x17] adds r1, 0x62 movs r2, 0 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow bl sub_81039F0 ldr r1, [r4] adds r1, 0x60 @@ -1706,7 +1706,7 @@ _08103362: ldrb r0, [r1, 0x17] adds r1, 0x62 movs r2, 0 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow ldr r0, _081033C4 @ =gMain ldrh r1, [r0, 0x2E] movs r2, 0x1 diff --git a/asm/shop.s b/asm/shop.s index 2dfc294a3..539e02b55 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -2170,7 +2170,7 @@ sub_809BBC0: @ 809BBC0 ldr r7, _0809BC08 @ =gUnknown_2039942 subs r2, r7, 0x2 adds r1, r7, 0 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow movs r0, 0x2 negs r0, r0 cmp r4, r0 diff --git a/asm/teachy_tv.s b/asm/teachy_tv.s index 46824b53b..f12a91885 100644 --- a/asm/teachy_tv.s +++ b/asm/teachy_tv.s @@ -238,7 +238,7 @@ sub_815B2C0: @ 815B2C0 ldr r4, _0815B324 @ =gTeachyTV_StaticResources+6 adds r2, r4, 0x2 adds r1, r4, 0 - bl get_coro_args_x18_x1A + bl ListMenuGetScrollAndRow ldr r0, _0815B328 @ =gMain ldrh r1, [r0, 0x2E] movs r0, 0x4 @@ -1186,8 +1186,8 @@ _0815BA4E: bx r0 thumb_func_end sub_815BA30 - thumb_func_start TeachyTvTaskFunction -TeachyTvTaskFunction: @ 815BA54 + thumb_func_start TeachyTvPostBattleFadeControl +TeachyTvPostBattleFadeControl: @ 815BA54 push {r4,lr} lsls r0, 24 lsrs r0, 24 @@ -1223,7 +1223,7 @@ _0815BA90: .4byte gPaletteFade _0815BA94: .4byte gUnknown_8479390 _0815BA98: .4byte gTeachyTV_StaticResources _0815BA9C: .4byte sub_815B4EC - thumb_func_end TeachyTvTaskFunction + thumb_func_end TeachyTvPostBattleFadeControl thumb_func_start sub_815BAA0 sub_815BAA0: @ 815BAA0 diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index a14905cc2..3623737ea 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -51,8 +51,8 @@ struct Tileset /*0x04*/ void *tiles; /*0x08*/ void *palettes; /*0x0c*/ void *metatiles; - /*0x14*/ TilesetCB callback; - /*0x10*/ void *metatileAttributes; + /*0x10*/ TilesetCB callback; + /*0x14*/ void *metatileAttributes; }; struct MapData diff --git a/include/list_menu.h b/include/list_menu.h index 1c632e89c..1aae55c82 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -54,7 +54,7 @@ extern struct ListMenuTemplate gMultiuseListMenuTemplate; u8 ListMenuInit(struct ListMenuTemplate *template, u16 a1, u16 a2); s32 ListMenuHandleInput(u8 id); -void get_coro_args_x18_x1A(u8 a0, u16 *a1, u16 *a2); +void ListMenuGetScrollAndRow(u8 a0, u16 *a1, u16 *a2); void sub_81AE6C8(u8 a0, u16 *a1, u16 *a2); void DestroyListMenu(u8, u16 *, u16 *); u16 ListMenuGetYCoordForPrintingArrowCursor(u8); diff --git a/src/.fuse_hidden00001c3f00000004 b/src/.fuse_hidden00001c3f00000004 new file mode 100644 index 000000000..8c91f0f46 --- /dev/null +++ b/src/.fuse_hidden00001c3f00000004 @@ -0,0 +1,346 @@ +#include "main.h" +#include "global.h" +#include "task.h" +#include "menu.h" +#include "palette.h" +#include "sprite.h" +#include "menu_helpers.h" +#include "sound.h" +#include "malloc.h" +#include "sprite.h" +#include "scanline_effect.h" +#include "bg.h" +#include "gpu_regs.h" +#include "decompress.h" +#include "window.h" +#include "list_menu.h" +#include "item.h" +#include "menu_indicators.h" +#include "field_map_obj.h" +#include "random.h" +#include "constants/songs.h" +#include "constants/items.h" + +typedef struct { + void (*callback)(); + u8 mode; + u8 param1; + u16 scrollOffset; + u16 selectedRow; + u8 param4; + u8 filler; +} TeachyTv_s; + +extern TeachyTv_s gTeachyTV_StaticResources; +extern void * gUnknown_203F450; +void C2TeachyTv(); +void C2TeachyTvMainCallback(); +void VblankHandlerTeachyTv(); +void sub_815ABC4(u8 mode, void (*cb)()); +void CB2_ReturnToTeachyTV(); +extern void sub_815AC20(); +void TeachyTvCreateAndRenderRbox(); +void TeachyTvInitIo(); +u8 TeachyTvSetupObjEventAndOam(); +extern void TeachyTvConfigRboxAndObj(u8); +u8 TeachyTvSetupWindow(); +void TeachyTvSetupScrollIndicatorArrowPair(); +void TeachyTvSetWindowRegs(); +void TeachyTvSetupBg(); +void TeachyTvLoadGraphic(); +extern void TeachyTvTaskFunction(u8); +extern void sub_815B2C0(u8); +extern void VblankHblankHandlerSetZero(); +extern void sub_812B1E0(u16); +extern struct BgTemplate gUnknown_84792E0; +extern void *gUnknown_203F450; // tilemap pointer location +extern u8 gUnknown_8E86240; // tilemap +extern u8 gUnknown_8E86BE8; +extern u8 gUnknown_8E86D6C; +extern u8 gUnknown_8E86F98; // pal +extern struct SpritePalette gUnknown_83A5348; +extern void sub_815BD80(void *); +typedef struct Task Task; +extern struct WindowTemplate gUnknown_84792F0; + + +void C2TeachyTv() +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + do_scheduled_bg_tilemap_copies_to_vram(); + UpdatePaletteFade(); +} + +void VblankHandlerTeachyTv() +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_815ABC4(u8 mode, void (*cb)()) +{ + TeachyTv_s *v3 = &gTeachyTV_StaticResources; + u16 v4 = 0; + v3->mode = mode; + v3->callback = cb; + if(!mode) { + v3->scrollOffset = v4; + v3->selectedRow = v4; + v3->param1 = 0; + } + if(mode == 1) + v3->mode = 0; + SetMainCallback2(C2TeachyTvMainCallback); +} + +void CB2_ReturnToTeachyTV() +{ + if(gTeachyTV_StaticResources.mode == 1) + sub_815ABC4(1,gTeachyTV_StaticResources.callback); + else + sub_815ABC4(2,gTeachyTV_StaticResources.callback); +} + +void sub_815AC20() +{ + gTeachyTV_StaticResources.mode = 1; +} + +void C2TeachyTvMainCallback() +{ + int state; + void *mallocPtr; + int taskId; + Task *taskAddr; + u8 **v4; + u32 x; + + state = gMain.state; + // tried several ways to reproduce the control flow, but all failed. Now using goto + if ( state == 0 ) + goto section_0; + else if ( state == 1 ) + goto section_1; + else + return; + section_0: + v4 = (u8 **)&gUnknown_203F450; + (*v4) = (u8*)AllocZeroed(0x4008u); + *(u32*)gUnknown_203F450 = (u32)state; + *((u8*)gUnknown_203F450 + 0x4006) = state; + *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; + VblankHblankHandlerSetZero(); + clear_scheduled_bg_copies_to_vram(); + ScanlineEffect_Stop(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + TeachyTvSetupBg(); + TeachyTvLoadGraphic(); + ++gMain.state; + return; + section_1: + if( free_temp_tile_data_buffers_if_possible() == 1 ) + return; + TeachyTvCreateAndRenderRbox(); + TeachyTvInitIo(); + if ( gTeachyTV_StaticResources.mode == 2 ) + { + taskId = CreateTask(TeachyTvTaskFunction, 0); + gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); + TeachyTvConfigRboxAndObj(taskId); + } + else + { + taskId = CreateTask(sub_815B2C0, 0); + x = (u32)TeachyTvSetupWindow(); + gTasks[taskId].data[0] = (x << 24) >> 24; + gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); + TeachyTvSetupScrollIndicatorArrowPair(); + PlayNewMapMusic(BGM_FRLG_TEACHY_TV); + TeachyTvSetWindowRegs(); + } + schedule_bg_copy_tilemap_to_vram(0); + schedule_bg_copy_tilemap_to_vram(1u); + schedule_bg_copy_tilemap_to_vram(2u); + schedule_bg_copy_tilemap_to_vram(3u); + sub_812B1E0(9); // help system something + BlendPalettes(0xFFFFFFFF, 0x10u, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10u, 0, 0); + SetVBlankCallback(VblankHandlerTeachyTv); + SetMainCallback2(C2TeachyTv); +} + +void TeachyTvSetupBg() +{ + InitBgReg(); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, &gUnknown_84792E0, 4u); + SetBgTilemapBuffer(1u, (u8 *)gUnknown_203F450 + 4); + SetBgTilemapBuffer(2u, (u8 *)gUnknown_203F450 + 0x1004); + SetBgTilemapBuffer(3u, (u8 *)gUnknown_203F450 + 0x2004); + SetGpuReg(0, 0x3040u); + ShowBg(0); + ShowBg(1u); + ShowBg(2u); + ShowBg(3u); + ChangeBgX(3u, 0x1000u, 2u); + ChangeBgY(3u, 0x2800u, 1u); + *((u8 *)gUnknown_203F450 + 0x4004) = 0; + *((u8 *)gUnknown_203F450 + 0x4005) = 3; + SetGpuReg(0x50u, 0); +} + +void TeachyTvLoadGraphic() +{ + u16 src; + src = 0; + reset_temp_tile_data_buffers(); + decompress_and_copy_tile_data_to_vram(1u, &gUnknown_8E86240, 0, 0, 0); + LZDecompressWram((u8 *)&gUnknown_8E86BE8, (*(u8 **)&gUnknown_203F450) + 4); + LZDecompressWram((u8 *)&gUnknown_8E86D6C, (*(u8 **)&gUnknown_203F450) + 0x3004); + LoadCompressedPalette(&gUnknown_8E86F98, 0, 0x80u); + LoadPalette(&src, 0, 2u); + LoadSpritePalette((struct SpritePalette *)&gUnknown_83A5348); + sub_815BD80((u8 *)gUnknown_203F450 + 0x2004); +} + +void TeachyTvCreateAndRenderRbox() +{ + InitWindows(&gUnknown_84792F0); + DeactivateAllTextPrinters(); + FillWindowPixelBuffer(0, 0xCCu); + PutWindowTilemap(0); + PutWindowTilemap(1u); + CopyWindowToVram(0, 2u); +} + +extern struct ListMenuTemplate gUnknown_8479368; +extern struct ListMenuItem gUnknown_8479340; +extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); +void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); + +u8 TeachyTvSetupWindow() +{ + int hasItem; + gMultiuseListMenuTemplate = gUnknown_8479368; + gMultiuseListMenuTemplate.windowId = 1; + gMultiuseListMenuTemplate.moveCursorFunc = TeachyTvAudioByInput; + hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1u); + if ( !(hasItem << 24) ) + { + gMultiuseListMenuTemplate.items = &gUnknown_8479340; + gMultiuseListMenuTemplate.totalItems = 5; + gMultiuseListMenuTemplate.maxShowed = 5; + gMultiuseListMenuTemplate.upText_Y = (gMultiuseListMenuTemplate.upText_Y + 8) & 0xF; + } + return ListMenuInit( + &gMultiuseListMenuTemplate, + gTeachyTV_StaticResources.scrollOffset, + gTeachyTV_StaticResources.selectedRow); +} + +extern const struct ScrollArrowsTemplate gUnknown_8479380; + +void TeachyTvSetupScrollIndicatorArrowPair() +{ + int hasItem; + hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1u); + if ( ! hasItem << 24 ) { + u8 * temp = (u8 *)gUnknown_203F450; + *((u8 *)temp + 0x4007) = 0xFF; + } + + else { + u8 *temp, res; + res = AddScrollIndicatorArrowPair( + &gUnknown_8479380, + &(gTeachyTV_StaticResources.scrollOffset)); + temp = (u8 *)gUnknown_203F450; + *((u8 *)temp + 0x4007) = res; + } +} + +void TeachyTvRemoveScrollIndicatorArrowPair() +{ + u8 *temp = ((u8*)gUnknown_203F450 + 0x4007); + if ( *temp != 0xFF ) + { + RemoveScrollIndicatorArrowPair(*temp); + *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; + } +} + +void TeachyTvAudioByInput(s32 notUsed, bool8 play, struct ListMenu *notUsedAlt) +{ + if ( play != 1 ) + PlaySE(SE_SELECT); +} + +void TeachyTvInitIo() +{ + SetGpuReg(0x48u, 0x3Fu); + SetGpuReg(0x4Au, 0x1Fu); + SetGpuReg(0x50u, 0xCCu); + SetGpuReg(0x54u, 5u); +} + +u8 TeachyTvSetupObjEventAndOam() +{ + u8 temp = AddPseudoEventObject(90, SpriteCallbackDummy, 0, 0, 8); + gSprites[temp].oam.priority = 2; + gSprites[temp].invisible = 1; + return temp; +} + +void TeachyTvSetSpriteCoordsAndSwitchFrame(u8 objId, u16 x, u16 y, u8 frame) +{ + gSprites[objId].pos2.x = x; + gSprites[objId].pos2.y = y; + gSprites[objId].invisible = 0; + StartSpriteAnim(&gSprites[objId], frame); +} + +void TeachyTvSetWindowRegs() +{ + SetGpuReg(0x44u, 0xC64u); + SetGpuReg(0x40u, 0x1CD4u); +} + +void TeachyTvClearWindowRegs() +{ + SetGpuReg(0x44u, 0); + SetGpuReg(0x40u, 0); +} + +void TeachyTvBg2AnimController() +{ + u16 *tilemapBuffer; + u8 counter; + u32 offset2; + u32 offset; + u32 counter2; + + tilemapBuffer = (u16 *)GetBgTilemapBuffer(2u); + counter = 1; + do + { + offset2 = 2; + offset = 0x20 * counter; + counter2 = counter + 1; + do + { + tilemapBuffer[offset + offset2] = ((Random() & 3) << 10) + 0x301F; + offset2 = (offset2 + 1) << 0x18 >> 0x18; + } + while ( offset2 <= 0x1B ); + counter = counter2; + } + while ( counter2 << 0x18 >> 0x18 <= 0xCu ); + schedule_bg_copy_tilemap_to_vram(2u); +} + diff --git a/src/fame_checker.c b/src/fame_checker.c index aff9733e9..b136ebfa8 100644 --- a/src/fame_checker.c +++ b/src/fame_checker.c @@ -1270,7 +1270,7 @@ static void FC_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list struct Task *task = &gTasks[taskId]; PlaySE(SE_SELECT); task->data[1] = 0; - get_coro_args_x18_x1A(sFameCheckerData->listMenuTaskId, &listMenuTopIdx, NULL); + ListMenuGetScrollAndRow(sFameCheckerData->listMenuTaskId, &listMenuTopIdx, NULL); sFameCheckerData->listMenuTopIdx = listMenuTopIdx; if (itemIndex != sFameCheckerData->numUnlockedPersons - 1) { @@ -1339,7 +1339,7 @@ static void FC_DoMoveCursor(s32 itemIndex, bool8 onInit) u16 listY; u16 cursorY; u16 who; - get_coro_args_x18_x1A(sFameCheckerData->listMenuTaskId, &listY, &cursorY); + ListMenuGetScrollAndRow(sFameCheckerData->listMenuTaskId, &listY, &cursorY); who = listY + cursorY; AddTextPrinterParametrized2(FCWINDOWID_LIST, 2, 8, 14 * cursorY + 4, 0, 0, &sTextColor_Green, 0, sListMenuItems[itemIndex].name); if (!onInit) @@ -1432,7 +1432,7 @@ static void FreeListMenuSelectorArrowPairResources(void) static u16 FameCheckerGetCursorY(void) { u16 listY, cursorY; - get_coro_args_x18_x1A(sFameCheckerData->listMenuTaskId, &listY, &cursorY); + ListMenuGetScrollAndRow(sFameCheckerData->listMenuTaskId, &listY, &cursorY); return listY + cursorY; } diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 60b182575..9e34cdb70 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -18,13 +18,14 @@ #include "menu_indicators.h" #include "field_map_obj.h" #include "random.h" +#include "text.h" #include "constants/songs.h" #include "constants/items.h" typedef struct { void (*callback)(); u8 mode; - u8 param1; + u8 optionChosen; u16 scrollOffset; u16 selectedRow; u8 param4; @@ -48,7 +49,7 @@ void TeachyTvSetupScrollIndicatorArrowPair(); void TeachyTvSetWindowRegs(); void TeachyTvSetupBg(); void TeachyTvLoadGraphic(); -extern void TeachyTvTaskFunction(u8); +extern void TeachyTvPostBattleFadeControl(u8); extern void sub_815B2C0(u8); extern void VblankHblankHandlerSetZero(); extern void sub_812B1E0(u16); @@ -89,7 +90,7 @@ void sub_815ABC4(u8 mode, void (*cb)()) if(!mode) { v3->scrollOffset = v4; v3->selectedRow = v4; - v3->param1 = 0; + v3->optionChosen = 0; } if(mode == 1) v3->mode = 0; @@ -112,7 +113,6 @@ void sub_815AC20() void C2TeachyTvMainCallback() { int state; - void *mallocPtr; int taskId; Task *taskAddr; u8 **v4; @@ -150,7 +150,7 @@ void C2TeachyTvMainCallback() TeachyTvInitIo(); if ( gTeachyTV_StaticResources.mode == 2 ) { - taskId = CreateTask(TeachyTvTaskFunction, 0); + taskId = CreateTask(TeachyTvPostBattleFadeControl, 0); gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); TeachyTvSetupPostBattleWindowAndObj(taskId); } diff --git a/src/tm_case.c b/src/tm_case.c index ce31e79c3..81e0fd371 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -737,7 +737,7 @@ static void Task_TMCaseMain(u8 taskId) if (sub_80BF72C() != TRUE) { input = ListMenuHandleInput(data[0]); - get_coro_args_x18_x1A(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); + ListMenuGetScrollAndRow(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); if (JOY_NEW(SELECT_BUTTON) && sTMCaseStaticResources.unk_05 == 1) { PlaySE(SE_SELECT); -- cgit v1.2.3 From 94091f15894ff2a0a9b2e838aba84ebdc211703c Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 4 Jun 2019 00:01:04 +0800 Subject: --amend --- .gitignore | 1 + asm/.fuse_hidden00001c3c00000003 | 2244 -------------------------------------- asm/.fuse_hidden00001c3c00000005 | 2244 -------------------------------------- src/.fuse_hidden00001c3f00000004 | 346 ------ 4 files changed, 1 insertion(+), 4834 deletions(-) delete mode 100644 asm/.fuse_hidden00001c3c00000003 delete mode 100644 asm/.fuse_hidden00001c3c00000005 delete mode 100644 src/.fuse_hidden00001c3f00000004 diff --git a/.gitignore b/.gitignore index da2cb317c..fdc668785 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,7 @@ ld_script_sapphire.txt *.id2 *.nam *.til +.fuse* *.ld tags types_*.taghl diff --git a/asm/.fuse_hidden00001c3c00000003 b/asm/.fuse_hidden00001c3c00000003 deleted file mode 100644 index a97657691..000000000 --- a/asm/.fuse_hidden00001c3c00000003 +++ /dev/null @@ -1,2244 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start TeachyTvConfigRboxAndObj -TeachyTvConfigRboxAndObj: @ 815B118 - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _0815B190 @ =gTasks+0x8 - adds r5, r0, r1 - movs r0, 0x2 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0815B194 @ =gSprites - adds r7, r0, r1 - movs r0, 0x1 - bl ClearWindowTilemap - bl TeachyTvClearWindowRegs - ldr r0, _0815B198 @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x5] - cmp r0, 0 - blt _0815B1B8 - cmp r0, 0x3 - bgt _0815B1A8 - ldrb r0, [r5, 0x2] - movs r1, 0x78 - movs r2, 0x38 - movs r3, 0 - bl TeachyTvSetSpriteCoordsAndSwitchFrame - movs r4, 0xC0 - lsls r4, 6 - movs r0, 0x3 - adds r1, r4, 0 - movs r2, 0x1 - bl ChangeBgX - movs r0, 0x3 - adds r1, r4, 0 - movs r2, 0x2 - bl ChangeBgY - ldr r2, _0815B19C @ =gUnknown_203F450 - ldr r1, [r2] - ldr r0, _0815B1A0 @ =0x00004004 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x3 - strb r0, [r1] - ldr r1, [r2] - ldr r0, _0815B1A4 @ =0x00004005 - adds r1, r0 - ldrb r0, [r1] - subs r0, 0x3 - strb r0, [r1] - b _0815B1B8 - .align 2, 0 -_0815B190: .4byte gTasks+0x8 -_0815B194: .4byte gSprites -_0815B198: .4byte gTeachyTV_StaticResources -_0815B19C: .4byte gUnknown_203F450 -_0815B1A0: .4byte 0x00004004 -_0815B1A4: .4byte 0x00004005 -_0815B1A8: - cmp r0, 0x5 - bgt _0815B1B8 - ldrb r0, [r5, 0x2] - movs r1, 0x78 - movs r2, 0x38 - movs r3, 0 - bl TeachyTvSetSpriteCoordsAndSwitchFrame -_0815B1B8: - movs r0, 0 - strh r0, [r5, 0x8] - strh r0, [r5, 0xA] - movs r0, 0x24 - ldrsh r1, [r7, r0] - movs r0, 0x26 - ldrsh r2, [r7, r0] - movs r0, 0x1 - str r0, [sp] - adds r0, r6, 0 - movs r3, 0 - bl sub_815BAA0 - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end TeachyTvConfigRboxAndObj - - thumb_func_start sub_815B1DC -sub_815B1DC: @ 815B1DC - push {r4,lr} - sub sp, 0x10 - adds r4, r0, 0 - ldr r2, _0815B21C @ =gTextFlags - ldrb r1, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - bl GetTextSpeedSetting - adds r3, r0, 0 - lsls r3, 24 - lsrs r3, 24 - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - movs r0, 0xC - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x4 - adds r2, r4, 0 - bl AddTextPrinterParametrized - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B21C: .4byte gTextFlags - thumb_func_end sub_815B1DC - - thumb_func_start sub_815B220 -sub_815B220: @ 815B220 - push {r4,lr} - ldr r4, _0815B238 @ =gUnknown_203F450 - ldr r0, [r4] - bl Free - movs r0, 0 - str r0, [r4] - bl FreeAllWindowBuffers - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B238: .4byte gUnknown_203F450 - thumb_func_end sub_815B220 - - thumb_func_start sub_815B23C -sub_815B23C: @ 815B23C - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _0815B26C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0815B270 @ =sub_815B274 - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B26C: .4byte gTasks -_0815B270: .4byte sub_815B274 - thumb_func_end sub_815B23C - - thumb_func_start sub_815B274 -sub_815B274: @ 815B274 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0815B298 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0815B2B6 - ldr r0, _0815B29C @ =gUnknown_203F450 - ldr r0, [r0] - ldr r0, [r0] - cmp r0, 0 - beq _0815B2A0 - bl SetMainCallback2 - b _0815B2AC - .align 2, 0 -_0815B298: .4byte gPaletteFade -_0815B29C: .4byte gUnknown_203F450 -_0815B2A0: - bl sub_8055DC4 - ldr r0, _0815B2BC @ =gTeachyTV_StaticResources - ldr r0, [r0] - bl SetMainCallback2 -_0815B2AC: - bl sub_815B220 - adds r0, r4, 0 - bl DestroyTask -_0815B2B6: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B2BC: .4byte gTeachyTV_StaticResources - thumb_func_end sub_815B274 - - thumb_func_start sub_815B2C0 -sub_815B2C0: @ 815B2C0 - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - ldr r1, _0815B31C @ =gTasks+0x8 - adds r6, r0, r1 - bl TeachyTvBg2AnimController - ldr r0, _0815B320 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0815B37A - ldrb r0, [r6] - bl ListMenuHandleInput - adds r5, r0, 0 - ldrb r0, [r6] - ldr r4, _0815B324 @ =gTeachyTV_StaticResources+6 - adds r2, r4, 0x2 - adds r1, r4, 0 - bl ListMenuGetScrollAndRow - ldr r0, _0815B328 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0815B30A - subs r0, r4, 0x6 - ldr r1, [r0] - ldr r0, _0815B32C @ =UseFameCheckerFromMenu - cmp r1, r0 - bne _0815B330 -_0815B30A: - movs r0, 0x2 - negs r0, r0 - cmp r5, r0 - beq _0815B330 - adds r0, 0x1 - cmp r5, r0 - bne _0815B33E - b _0815B37A - .align 2, 0 -_0815B31C: .4byte gTasks+0x8 -_0815B320: .4byte gPaletteFade -_0815B324: .4byte gTeachyTV_StaticResources+6 -_0815B328: .4byte gMain -_0815B32C: .4byte UseFameCheckerFromMenu -_0815B330: - movs r0, 0x5 - bl PlaySE - adds r0, r7, 0 - bl sub_815B23C - b _0815B37A -_0815B33E: - movs r0, 0x5 - bl PlaySE - ldr r2, _0815B380 @ =gTeachyTV_StaticResources - movs r4, 0 - strb r5, [r2, 0x5] - ldrb r0, [r6] - adds r1, r2, 0x6 - adds r2, 0x8 - bl DestroyListMenu - bl TeachyTvClearWindowRegs - movs r0, 0x1 - bl ClearWindowTilemap - movs r0, 0 - bl schedule_bg_copy_tilemap_to_vram - bl TeachyTvRemoveScrollIndicatorArrowPair - strh r4, [r6, 0x6] - strh r4, [r6, 0x4] - ldr r1, _0815B384 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r1 - ldr r1, _0815B388 @ =sub_815B4EC - str r1, [r0] -_0815B37A: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815B380: .4byte gTeachyTV_StaticResources -_0815B384: .4byte gTasks -_0815B388: .4byte sub_815B4EC - thumb_func_end sub_815B2C0 - - thumb_func_start sub_815B38C -sub_815B38C: @ 815B38C - push {r4,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0815B3F8 @ =gTasks+0x8 - adds r4, r1, r0 - bl TeachyTvBg2AnimController - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3F - ble _0815B3F0 - ldr r0, _0815B3FC @ =gUnknown_203F450 - ldr r1, [r0] - ldr r0, _0815B400 @ =0x00003004 - adds r1, r0 - movs r0, 0x20 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0x11 - str r0, [sp, 0x8] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBufferRect_ChangePalette - ldrb r0, [r4, 0x2] - movs r1, 0x8 - movs r2, 0x38 - movs r3, 0x7 - bl TeachyTvSetSpriteCoordsAndSwitchFrame - movs r0, 0x2 - bl schedule_bg_copy_tilemap_to_vram - movs r0, 0 - strh r0, [r4, 0x4] - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] - movs r0, 0x88 - lsls r0, 1 - bl PlayNewMapMusic -_0815B3F0: - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B3F8: .4byte gTasks+0x8 -_0815B3FC: .4byte gUnknown_203F450 -_0815B400: .4byte 0x00003004 - thumb_func_end sub_815B38C - - thumb_func_start sub_815B404 -sub_815B404: @ 815B404 - push {r4,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0815B450 @ =gTasks+0x8 - adds r4, r1, r0 - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x86 - bne _0815B448 - movs r0, 0x1A - str r0, [sp] - movs r0, 0xC - str r0, [sp, 0x4] - movs r0, 0x2 - movs r1, 0 - movs r2, 0x2 - movs r3, 0x1 - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0x2 - bl schedule_bg_copy_tilemap_to_vram - movs r0, 0 - strh r0, [r4, 0x4] - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0815B448: - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B450: .4byte gTasks+0x8 - thumb_func_end sub_815B404 - - thumb_func_start sub_815B454 -sub_815B454: @ 815B454 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0815B484 @ =gTasks+0x8 - adds r4, r1, r0 - movs r0, 0x2 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0815B488 @ =gSprites - adds r1, r0, r1 - ldrh r2, [r4, 0x4] - movs r3, 0x4 - ldrsh r0, [r4, r3] - cmp r0, 0x23 - beq _0815B48C - adds r0, r2, 0x1 - strh r0, [r4, 0x4] - b _0815B4B8 - .align 2, 0 -_0815B484: .4byte gTasks+0x8 -_0815B488: .4byte gSprites -_0815B48C: - ldrh r2, [r1, 0x24] - movs r3, 0x24 - ldrsh r0, [r1, r3] - cmp r0, 0x78 - bne _0815B4B4 - adds r0, r1, 0 - movs r1, 0 - bl StartSpriteAnim - ldr r0, _0815B4B0 @ =gUnknown_841B83D - bl sub_815B1DC - movs r0, 0 - strh r0, [r4, 0x4] - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] - b _0815B4B8 - .align 2, 0 -_0815B4B0: .4byte gUnknown_841B83D -_0815B4B4: - adds r0, r2, 0x1 - strh r0, [r1, 0x24] -_0815B4B8: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_815B454 - - thumb_func_start sub_815B4C0 -sub_815B4C0: @ 815B4C0 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0815B4E8 @ =gTasks+0x8 - adds r4, r1, r0 - movs r0, 0 - bl sub_80BF518 - lsls r0, 16 - cmp r0, 0 - bne _0815B4E2 - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0815B4E2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B4E8: .4byte gTasks+0x8 - thumb_func_end sub_815B4C0 - - thumb_func_start sub_815B4EC -sub_815B4EC: @ 815B4EC - push {r4-r7,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r6, r0, 3 - ldr r7, _0815B548 @ =gTasks+0x8 - adds r5, r6, r7 - ldr r0, _0815B54C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0815B55C - ldr r0, _0815B550 @ =gUnknown_203F450 - ldr r0, [r0] - ldr r1, _0815B554 @ =0x00004006 - adds r0, r1 - movs r4, 0 - movs r1, 0x1 - strb r1, [r0] - ldrb r0, [r5, 0x2] - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl TeachyTvSetSpriteCoordsAndSwitchFrame - movs r0, 0 - movs r1, 0xCC - bl FillWindowPixelBuffer - movs r0, 0 - movs r1, 0x2 - bl CopyWindowToVram - bl sub_815B908 - strh r4, [r5, 0x4] - strh r4, [r5, 0x6] - adds r0, r7, 0 - subs r0, 0x8 - adds r0, r6, r0 - ldr r1, _0815B558 @ =sub_815B92C - str r1, [r0] - b _0815B578 - .align 2, 0 -_0815B548: .4byte gTasks+0x8 -_0815B54C: .4byte gMain -_0815B550: .4byte gUnknown_203F450 -_0815B554: .4byte 0x00004006 -_0815B558: .4byte sub_815B92C -_0815B55C: - ldr r1, _0815B580 @ =gUnknown_8479548 - ldr r0, _0815B584 @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x5] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - movs r3, 0x6 - ldrsh r0, [r5, r3] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - adds r0, r2, 0 - bl _call_via_r1 -_0815B578: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815B580: .4byte gUnknown_8479548 -_0815B584: .4byte gTeachyTV_StaticResources - thumb_func_end sub_815B4EC - - thumb_func_start sub_815B588 -sub_815B588: @ 815B588 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _0815B5B4 @ =gTasks+0x8 - adds r4, r0 - ldr r1, _0815B5B8 @ =gUnknown_8479560 - ldr r0, _0815B5BC @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x5] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl sub_815B1DC - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B5B4: .4byte gTasks+0x8 -_0815B5B8: .4byte gUnknown_8479560 -_0815B5BC: .4byte gTeachyTV_StaticResources - thumb_func_end sub_815B588 - - thumb_func_start sub_815B5C0 -sub_815B5C0: @ 815B5C0 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _0815B5EC @ =gTasks+0x8 - adds r4, r0 - ldr r1, _0815B5F0 @ =gUnknown_8479578 - ldr r0, _0815B5F4 @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x5] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl sub_815B1DC - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B5EC: .4byte gTasks+0x8 -_0815B5F0: .4byte gUnknown_8479578 -_0815B5F4: .4byte gTeachyTV_StaticResources - thumb_func_end sub_815B5C0 - - thumb_func_start sub_815B5F8 -sub_815B5F8: @ 815B5F8 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0815B620 @ =gTasks+0x8 - adds r4, r1, r0 - movs r0, 0 - bl sub_80BF518 - lsls r0, 16 - cmp r0, 0 - bne _0815B61A - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0815B61A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B620: .4byte gTasks+0x8 - thumb_func_end sub_815B5F8 - - thumb_func_start sub_815B624 -sub_815B624: @ 815B624 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0815B65C @ =gTasks+0x8 - adds r4, r1, r0 - ldr r0, _0815B660 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _0815B656 - movs r0, 0 - movs r1, 0xCC - bl FillWindowPixelBuffer - movs r0, 0 - movs r1, 0x2 - bl CopyWindowToVram - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0815B656: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B65C: .4byte gTasks+0x8 -_0815B660: .4byte gMain - thumb_func_end sub_815B624 - - thumb_func_start sub_815B664 -sub_815B664: @ 815B664 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _0815B6A0 @ =gTasks+0x8 - adds r4, r0 - movs r0, 0x2 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0815B6A4 @ =gSprites - adds r0, r1 - movs r1, 0x5 - bl StartSpriteAnim - movs r0, 0 - strh r0, [r4, 0x4] - strh r0, [r4, 0x8] - movs r0, 0x1 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B6A0: .4byte gTasks+0x8 -_0815B6A4: .4byte gSprites - thumb_func_end sub_815B664 - - thumb_func_start sub_815B6A8 -sub_815B6A8: @ 815B6A8 - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0815B730 @ =gTasks+0x8 - adds r4, r0, r1 - movs r0, 0x2 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0815B734 @ =gSprites - adds r6, r0, r1 - movs r1, 0x80 - lsls r1, 1 - movs r0, 0x3 - movs r2, 0x2 - bl ChangeBgY - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - movs r3, 0xF - ands r3, r0 - cmp r3, 0 - bne _0815B702 - ldr r0, _0815B738 @ =gUnknown_203F450 - ldr r1, [r0] - ldr r2, _0815B73C @ =0x00004005 - adds r1, r2 - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] - movs r0, 0x24 - ldrsh r1, [r6, r0] - movs r0, 0x26 - ldrsh r2, [r6, r0] - str r3, [sp] - adds r0, r5, 0 - movs r3, 0 - bl sub_815BAA0 -_0815B702: - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0x30 - bne _0815B726 - movs r1, 0 - strh r1, [r4, 0x4] - movs r2, 0x1 - negs r2, r2 - adds r0, r2, 0 - strh r0, [r4, 0x8] - strh r1, [r4, 0xA] - adds r0, r6, 0 - movs r1, 0x7 - bl StartSpriteAnim - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0815B726: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0815B730: .4byte gTasks+0x8 -_0815B734: .4byte gSprites -_0815B738: .4byte gUnknown_203F450 -_0815B73C: .4byte 0x00004005 - thumb_func_end sub_815B6A8 - - thumb_func_start sub_815B740 -sub_815B740: @ 815B740 - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0815B7D4 @ =gTasks+0x8 - adds r4, r0, r1 - movs r0, 0x2 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0815B7D8 @ =gSprites - adds r6, r0, r1 - movs r1, 0x80 - lsls r1, 1 - movs r0, 0x3 - movs r2, 0x1 - bl ChangeBgX - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - movs r2, 0xF - ands r0, r2 - cmp r0, 0 - bne _0815B78A - ldr r0, _0815B7DC @ =gUnknown_203F450 - ldr r1, [r0] - ldr r3, _0815B7E0 @ =0x00004004 - adds r1, r3 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_0815B78A: - movs r1, 0x4 - ldrsh r0, [r4, r1] - adds r0, 0x8 - ands r0, r2 - cmp r0, 0 - bne _0815B7AC - ldrh r1, [r6, 0x24] - adds r1, 0x8 - lsls r1, 16 - asrs r1, 16 - movs r3, 0x26 - ldrsh r2, [r6, r3] - str r0, [sp] - adds r0, r5, 0 - movs r3, 0 - bl sub_815BAA0 -_0815B7AC: - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0x30 - bne _0815B7CA - movs r0, 0 - strh r0, [r4, 0x4] - strh r0, [r4, 0x8] - strh r0, [r4, 0xA] - adds r0, r6, 0 - movs r1, 0x3 - bl StartSpriteAnim - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0815B7CA: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0815B7D4: .4byte gTasks+0x8 -_0815B7D8: .4byte gSprites -_0815B7DC: .4byte gUnknown_203F450 -_0815B7E0: .4byte 0x00004004 - thumb_func_end sub_815B740 - - thumb_func_start sub_815B7E4 -sub_815B7E4: @ 815B7E4 - push {r4-r6,lr} - sub sp, 0x4 - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - lsls r5, r6, 2 - adds r5, r6 - lsls r5, 3 - ldr r0, _0815B838 @ =gTasks+0x8 - adds r5, r0 - movs r1, 0x2 - ldrsh r0, [r5, r1] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _0815B83C @ =gSprites - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x6 - bl StartSpriteAnim - ldrh r0, [r5, 0x6] - adds r0, 0x1 - strh r0, [r5, 0x6] - movs r0, 0 - strh r0, [r5, 0x8] - strh r0, [r5, 0xA] - movs r0, 0x24 - ldrsh r1, [r4, r0] - movs r0, 0x26 - ldrsh r2, [r4, r0] - movs r0, 0 - str r0, [sp] - adds r0, r6, 0 - movs r3, 0 - bl sub_815BAA0 - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0815B838: .4byte gTasks+0x8 -_0815B83C: .4byte gSprites - thumb_func_end sub_815B7E4 - - thumb_func_start sub_815B840 -sub_815B840: @ 815B840 - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r3, r0, 24 - lsls r0, r3, 2 - adds r0, r3 - lsls r0, 3 - ldr r1, _0815B890 @ =gTasks+0x8 - adds r5, r0, r1 - movs r0, 0x2 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0815B894 @ =gSprites - adds r4, r0, r1 - ldrh r1, [r4, 0x24] - movs r0, 0xF - ands r0, r1 - cmp r0, 0 - bne _0815B87E - subs r1, 0x8 - lsls r1, 16 - asrs r1, 16 - movs r6, 0x26 - ldrsh r2, [r4, r6] - str r0, [sp] - adds r0, r3, 0 - movs r3, 0 - bl sub_815BAA0 -_0815B87E: - ldrh r1, [r4, 0x24] - movs r2, 0x24 - ldrsh r0, [r4, r2] - cmp r0, 0x8 - bne _0815B898 - ldrh r0, [r5, 0x6] - adds r0, 0x1 - strh r0, [r5, 0x6] - b _0815B89C - .align 2, 0 -_0815B890: .4byte gTasks+0x8 -_0815B894: .4byte gSprites -_0815B898: - subs r0, r1, 0x1 - strh r0, [r4, 0x24] -_0815B89C: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_815B840 - - thumb_func_start sub_815B8A4 -sub_815B8A4: @ 815B8A4 - push {r4,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0815B900 @ =gTasks+0x8 - adds r4, r1, r0 - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0815B8DC - ldr r1, _0815B904 @ =gUnknown_8479590 - movs r0, 0x8 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x11 - str r0, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x14 - movs r3, 0xA - bl CopyToBgTilemapBufferRect_ChangePalette - movs r0, 0x1 - bl schedule_bg_copy_tilemap_to_vram -_0815B8DC: - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x7E - ble _0815B8F8 - bl sub_815B908 - movs r0, 0 - strh r0, [r4, 0x4] - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0815B8F8: - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B900: .4byte gTasks+0x8 -_0815B904: .4byte gUnknown_8479590 - thumb_func_end sub_815B8A4 - - thumb_func_start sub_815B908 -sub_815B908: @ 815B908 - push {lr} - sub sp, 0x8 - movs r0, 0x8 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - movs r1, 0 - movs r2, 0x14 - movs r3, 0xA - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0x1 - bl schedule_bg_copy_tilemap_to_vram - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_815B908 - - thumb_func_start sub_815B92C -sub_815B92C: @ 815B92C - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r6, r1, 3 - ldr r7, _0815B9DC @ =gTasks+0x8 - adds r5, r6, r7 - movs r1, 0x4 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _0815B94C - movs r0, 0xAD - lsls r0, 1 - bl PlayNewMapMusic -_0815B94C: - bl TeachyTvBg2AnimController - ldrh r0, [r5, 0x4] - adds r0, 0x1 - strh r0, [r5, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3F - ble _0815B9D4 - movs r4, 0 - strh r4, [r5, 0x4] - strh r4, [r5, 0x6] - bl TeachyTvSetupWindow - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5] - adds r0, r7, 0 - subs r0, 0x8 - adds r0, r6, r0 - ldr r1, _0815B9E0 @ =sub_815B2C0 - str r1, [r0] - movs r0, 0 - bl PutWindowTilemap - bl TeachyTvSetupScrollIndicatorArrowPair - bl TeachyTvSetWindowRegs - movs r0, 0 - bl schedule_bg_copy_tilemap_to_vram - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r1, 0x80 - lsls r1, 5 - movs r0, 0x3 - movs r2, 0x2 - bl ChangeBgX - movs r1, 0xA0 - lsls r1, 6 - movs r0, 0x3 - movs r2, 0x1 - bl ChangeBgY - ldr r2, _0815B9E4 @ =gUnknown_203F450 - ldr r0, [r2] - ldr r1, _0815B9E8 @ =0x00004004 - adds r0, r1 - strb r4, [r0] - ldr r0, [r2] - adds r1, 0x1 - adds r0, r1 - movs r1, 0x3 - strb r1, [r0] - ldr r0, [r2] - ldr r1, _0815B9EC @ =0x00004006 - adds r0, r1 - strb r4, [r0] -_0815B9D4: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815B9DC: .4byte gTasks+0x8 -_0815B9E0: .4byte sub_815B2C0 -_0815B9E4: .4byte gUnknown_203F450 -_0815B9E8: .4byte 0x00004004 -_0815B9EC: .4byte 0x00004006 - thumb_func_end sub_815B92C - - thumb_func_start sub_815B9F0 -sub_815B9F0: @ 815B9F0 - push {lr} - lsls r0, 24 - lsrs r1, r0, 24 - adds r2, r1, 0 - ldr r0, _0815BA0C @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x5] - cmp r0, 0 - blt _0815BA22 - cmp r0, 0x3 - bgt _0815BA10 - adds r0, r1, 0 - bl sub_815BC90 - b _0815BA22 - .align 2, 0 -_0815BA0C: .4byte gTeachyTV_StaticResources -_0815BA10: - cmp r0, 0x5 - bgt _0815BA22 - ldr r0, _0815BA28 @ =gUnknown_203F450 - ldr r1, [r0] - ldr r0, _0815BA2C @ =sub_815BA30 - str r0, [r1] - adds r0, r2, 0 - bl sub_815B23C -_0815BA22: - pop {r0} - bx r0 - .align 2, 0 -_0815BA28: .4byte gUnknown_203F450 -_0815BA2C: .4byte sub_815BA30 - thumb_func_end sub_815B9F0 - - thumb_func_start sub_815BA30 -sub_815BA30: @ 815BA30 - push {lr} - ldr r0, _0815BA44 @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x5] - cmp r0, 0x4 - bne _0815BA48 - movs r0, 0xA - bl sub_810B108 - b _0815BA4E - .align 2, 0 -_0815BA44: .4byte gTeachyTV_StaticResources -_0815BA48: - movs r0, 0x9 - bl sub_810B108 -_0815BA4E: - pop {r0} - bx r0 - thumb_func_end sub_815BA30 - - thumb_func_start TeachyTvTaskFunction -TeachyTvTaskFunction: @ 815BA54 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r2, r1, 3 - ldr r4, _0815BA8C @ =gTasks+0x8 - adds r3, r2, r4 - ldr r0, _0815BA90 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0815BA86 - ldr r1, _0815BA94 @ =gUnknown_8479390 - ldr r0, _0815BA98 @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x5] - adds r0, r1 - ldrb r0, [r0] - strh r0, [r3, 0x6] - adds r0, r4, 0 - subs r0, 0x8 - adds r0, r2, r0 - ldr r1, _0815BA9C @ =sub_815B4EC - str r1, [r0] -_0815BA86: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815BA8C: .4byte gTasks+0x8 -_0815BA90: .4byte gPaletteFade -_0815BA94: .4byte gUnknown_8479390 -_0815BA98: .4byte gTeachyTV_StaticResources -_0815BA9C: .4byte sub_815B4EC - thumb_func_end TeachyTvTaskFunction - - thumb_func_start sub_815BAA0 -sub_815BAA0: @ 815BAA0 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r4, [sp, 0x1C] - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r1, 16 - lsrs r6, r1, 16 - lsls r2, 16 - lsrs r1, r2, 16 - lsls r3, 24 - lsrs r7, r3, 24 - lsls r4, 24 - lsrs r4, 24 - mov r8, r4 - ldr r0, _0815BB34 @ =gUnknown_203F450 - ldr r0, [r0] - ldr r2, _0815BB38 @ =0x00004006 - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0815BB5C - lsls r0, r6, 16 - ldr r2, _0815BB3C @ =0xfff00000 - adds r0, r2 - asrs r0, 16 - lsls r1, 16 - asrs r5, r1, 16 - adds r1, r5, 0 - bl sub_815BC40 - lsls r0, 24 - cmp r0, 0 - beq _0815BB5C - ldr r0, _0815BB40 @ =gUnknown_83A0010 - ldr r0, [r0, 0x10] - movs r1, 0 - movs r2, 0 - adds r3, r7, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _0815BB44 @ =gSprites - adds r4, r1, r0 - strh r6, [r4, 0x24] - adds r0, r5, 0 - adds r0, 0x8 - strh r0, [r4, 0x26] - ldr r0, _0815BB48 @ =sub_815BB6C - str r0, [r4, 0x1C] - mov r0, r9 - strh r0, [r4, 0x2E] - mov r2, r8 - cmp r2, 0x1 - bne _0815BB4C - adds r0, r4, 0 - movs r1, 0x4 - bl SeekSpriteAnim - ldrb r0, [r4, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r0 - movs r0, 0x8 - orrs r1, r0 - strb r1, [r4, 0x5] - b _0815BB5C - .align 2, 0 -_0815BB34: .4byte gUnknown_203F450 -_0815BB38: .4byte 0x00004006 -_0815BB3C: .4byte 0xfff00000 -_0815BB40: .4byte gUnknown_83A0010 -_0815BB44: .4byte gSprites -_0815BB48: .4byte sub_815BB6C -_0815BB4C: - ldr r1, _0815BB68 @ =gUnknown_84795B8 - adds r0, r4, 0 - bl SetSubspriteTables - adds r1, r4, 0 - adds r1, 0x42 - movs r0, 0x40 - strb r0, [r1] -_0815BB5C: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815BB68: .4byte gUnknown_84795B8 - thumb_func_end sub_815BAA0 - - thumb_func_start sub_815BB6C -sub_815BB6C: @ 815BB6C - push {r4,r5,lr} - adds r3, r0, 0 - movs r0, 0x2E - ldrsh r1, [r3, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - ldr r1, _0815BBA4 @ =gTasks+0x8 - adds r4, r0, r1 - movs r2, 0x2 - ldrsh r1, [r4, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0815BBA8 @ =gSprites - adds r5, r0, r1 - ldr r0, _0815BBAC @ =gUnknown_203F450 - ldr r0, [r0] - ldr r1, _0815BBB0 @ =0x00004006 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - bne _0815BBB4 - adds r0, r3, 0 - bl DestroySprite - b _0815BC3A - .align 2, 0 -_0815BBA4: .4byte gTasks+0x8 -_0815BBA8: .4byte gSprites -_0815BBAC: .4byte gUnknown_203F450 -_0815BBB0: .4byte 0x00004006 -_0815BBB4: - adds r0, r3, 0 - adds r0, 0x2B - ldrb r0, [r0] - cmp r0, 0 - bne _0815BBD2 - adds r2, r3, 0 - adds r2, 0x42 - ldrb r0, [r2] - movs r1, 0x40 - negs r1, r1 - ands r1, r0 - movs r0, 0x1 - orrs r1, r0 - strb r1, [r2] - b _0815BBE0 -_0815BBD2: - adds r2, r3, 0 - adds r2, 0x42 - ldrb r1, [r2] - movs r0, 0x40 - negs r0, r0 - ands r0, r1 - strb r0, [r2] -_0815BBE0: - ldrh r0, [r4, 0x8] - ldrh r2, [r3, 0x24] - adds r0, r2 - strh r0, [r3, 0x24] - ldrh r0, [r4, 0xA] - ldrh r1, [r3, 0x26] - adds r0, r1 - strh r0, [r3, 0x26] - adds r0, r3, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0815BC3A - adds r1, r3, 0 - adds r1, 0x43 - movs r0, 0 - strb r0, [r1] - ldrh r1, [r3, 0x24] - ldrh r0, [r5, 0x24] - subs r1, r0 - ldrh r0, [r3, 0x26] - ldrh r2, [r5, 0x26] - subs r0, r2 - lsls r0, 16 - lsrs r0, 16 - lsls r1, 16 - movs r2, 0xF0 - lsls r2, 12 - adds r1, r2 - lsrs r1, 16 - cmp r1, 0x1E - bhi _0815BC34 - lsls r0, 16 - asrs r1, r0, 16 - movs r0, 0x10 - negs r0, r0 - cmp r1, r0 - ble _0815BC34 - cmp r1, 0x17 - ble _0815BC3A -_0815BC34: - adds r0, r3, 0 - bl DestroySprite -_0815BC3A: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_815BB6C - - thumb_func_start sub_815BC40 -sub_815BC40: @ 815BC40 - push {r4,r5,lr} - lsls r1, 16 - lsrs r1, 16 - lsls r4, r0, 16 - cmp r4, 0 - blt _0815BC52 - lsls r1, 16 - cmp r1, 0 - bge _0815BC56 -_0815BC52: - movs r0, 0 - b _0815BC78 -_0815BC56: - ldr r3, _0815BC80 @ =gUnknown_84795C8 - ldr r0, _0815BC84 @ =gUnknown_203F450 - ldr r2, [r0] - ldr r5, _0815BC88 @ =0x00004005 - adds r0, r2, r5 - asrs r1, 20 - ldrb r0, [r0] - adds r1, r0 - lsls r1, 4 - ldr r0, _0815BC8C @ =0x00004004 - adds r2, r0 - asrs r0, r4, 20 - ldrb r2, [r2] - adds r0, r2 - adds r1, r0 - adds r1, r3 - ldrb r0, [r1] -_0815BC78: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0815BC80: .4byte gUnknown_84795C8 -_0815BC84: .4byte gUnknown_203F450 -_0815BC88: .4byte 0x00004005 -_0815BC8C: .4byte 0x00004004 - thumb_func_end sub_815BC40 - - thumb_func_start sub_815BC90 -sub_815BC90: @ 815BC90 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _0815BCCC @ =gTasks+0x8 - adds r5, r0, r1 - bl sub_815B220 - ldr r1, _0815BCD0 @ =gSpecialVar_0x8004 - ldr r4, _0815BCD4 @ =gTeachyTV_StaticResources - ldrb r0, [r4, 0x5] - strh r0, [r1] - ldr r1, _0815BCD8 @ =gMain - ldr r0, _0815BCDC @ =sub_815BD58 - str r0, [r1, 0x8] - bl SavePlayerParty - bl sub_8159F40 - movs r0, 0 - bl PlayMapChosenOrBattleBGM - ldrb r0, [r4, 0x5] - cmp r0, 0 - bne _0815BCE0 - movs r0, 0x9 - b _0815BCE2 - .align 2, 0 -_0815BCCC: .4byte gTasks+0x8 -_0815BCD0: .4byte gSpecialVar_0x8004 -_0815BCD4: .4byte gTeachyTV_StaticResources -_0815BCD8: .4byte gMain -_0815BCDC: .4byte sub_815BD58 -_0815BCE0: - movs r0, 0x8 -_0815BCE2: - strh r0, [r5, 0xC] - movs r0, 0 - strh r0, [r5, 0xE] - ldr r1, _0815BCFC @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _0815BD00 @ =sub_815BD04 - str r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0815BCFC: .4byte gTasks -_0815BD00: .4byte sub_815BD04 - thumb_func_end sub_815BC90 - - thumb_func_start sub_815BD04 -sub_815BD04: @ 815BD04 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0815BD24 @ =gTasks+0x8 - adds r4, r0, r1 - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _0815BD28 - cmp r0, 0x1 - beq _0815BD36 - b _0815BD4C - .align 2, 0 -_0815BD24: .4byte gTasks+0x8 -_0815BD28: - ldrb r0, [r4, 0xC] - bl sub_80D08B8 - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - b _0815BD4C -_0815BD36: - bl sub_80D08F8 - lsls r0, 24 - cmp r0, 0 - beq _0815BD4C - ldr r0, _0815BD54 @ =sub_800FD9C - bl SetMainCallback2 - adds r0, r5, 0 - bl DestroyTask -_0815BD4C: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0815BD54: .4byte sub_800FD9C - thumb_func_end sub_815BD04 - - thumb_func_start sub_815BD58 -sub_815BD58: @ 815BD58 - push {lr} - bl LoadPlayerParty - ldr r0, _0815BD6C @ =gUnknown_2023E8A - ldrb r0, [r0] - cmp r0, 0x3 - bne _0815BD70 - bl sub_815AC20 - b _0815BD78 - .align 2, 0 -_0815BD6C: .4byte gUnknown_2023E8A -_0815BD70: - movs r0, 0x88 - lsls r0, 1 - bl PlayNewMapMusic -_0815BD78: - bl CB2_ReturnToTeachyTV - pop {r0} - bx r0 - thumb_func_end sub_815BD58 - - thumb_func_start sub_815BD80 -sub_815BD80: @ 815BD80 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x1C - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x10] - ldr r1, _0815BE1C @ =Route1_Layout - mov r8, r1 - movs r0, 0x80 - lsls r0, 4 - bl AllocZeroed - adds r6, r0, 0 - movs r0, 0x80 - lsls r0, 8 - bl AllocZeroed - str r0, [sp, 0x8] - movs r0, 0x10 - bl Alloc - str r0, [sp, 0xC] - movs r1, 0xFF - movs r2, 0x10 - bl memset - mov r2, r8 - ldr r0, [r2, 0x10] - movs r2, 0xA0 - lsls r2, 2 - ldr r1, [sp, 0x8] - bl sub_815BF48 - mov r3, r8 - ldr r0, [r3, 0x14] - ldr r2, [sp, 0x8] - movs r3, 0xA0 - lsls r3, 7 - adds r1, r2, r3 - movs r2, 0xC0 - lsls r2, 1 - bl sub_815BF48 - movs r4, 0 -_0815BDDE: - movs r2, 0 - adds r0, r4, 0x6 - str r0, [sp, 0x18] - lsls r1, r4, 4 - mov r10, r1 - lsls r3, r4, 6 - mov r9, r3 - adds r4, 0x1 - str r4, [sp, 0x14] -_0815BDF0: - mov r1, r8 - ldr r0, [r1] - ldr r3, [sp, 0x18] - muls r0, r3 - ldr r1, [r1, 0xC] - adds r0, r2, r0 - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0, 0x10] - ldr r3, _0815BE20 @ =0x000003ff - adds r0, r3, 0 - adds r4, r0, 0 - ands r4, r1 - movs r3, 0 - mov r0, r10 - adds r1, r0, r2 - lsls r5, r2, 1 - adds r7, r2, 0x1 - cmp r3, r1 - bge _0815BE3C - ldrh r0, [r6] - b _0815BE34 - .align 2, 0 -_0815BE1C: .4byte Route1_Layout -_0815BE20: .4byte 0x000003ff -_0815BE24: - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, r1 - bge _0815BE3C - lsls r0, r3, 1 - adds r0, r6 - ldrh r0, [r0] -_0815BE34: - cmp r0, 0 - beq _0815BE46 - cmp r0, r4 - bne _0815BE24 -_0815BE3C: - lsls r0, r3, 1 - adds r0, r6 - ldrh r0, [r0] - cmp r0, 0 - bne _0815BE56 -_0815BE46: - lsls r0, r3, 1 - adds r0, r6 - strh r4, [r0] - ldr r0, [sp, 0x10] - adds r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0x10] -_0815BE56: - mov r2, r9 - adds r1, r2, r5 - lsls r1, 1 - ldr r0, [sp, 0x4] - adds r1, r0, r1 - str r3, [sp] - mov r0, r8 - ldr r2, [sp, 0xC] - adds r3, r4, 0 - bl sub_815BF70 - lsls r0, r7, 16 - lsrs r2, r0, 16 - cmp r2, 0xF - bls _0815BDF0 - ldr r1, [sp, 0x14] - lsls r0, r1, 16 - lsrs r4, r0, 16 - cmp r4, 0x8 - bls _0815BDDE - ldr r2, [sp, 0x10] - lsls r0, r2, 7 - bl Alloc - adds r7, r0, 0 - movs r0, 0x80 - bl Alloc - adds r5, r0, 0 - movs r4, 0 - ldr r3, [sp, 0x10] - lsls r3, 23 - mov r9, r3 - ldr r0, [sp, 0x10] - cmp r4, r0 - bcs _0815BF00 - ldr r1, _0815BECC @ =0x0000027f - mov r10, r1 -_0815BEA2: - adds r0, r5, 0 - movs r1, 0 - movs r2, 0x80 - bl memset - lsls r0, r4, 1 - adds r1, r0, r6 - ldrh r0, [r1] - cmp r0, r10 - bhi _0815BED0 - mov r2, r8 - ldr r0, [r2, 0x10] - ldrh r1, [r1] - lsls r1, 4 - ldr r0, [r0, 0xC] - adds r0, r1 - adds r1, r5, 0 - ldr r2, [sp, 0x8] - bl sub_815BFF0 - b _0815BEE8 - .align 2, 0 -_0815BECC: .4byte 0x0000027f -_0815BED0: - mov r3, r8 - ldr r0, [r3, 0x14] - ldrh r1, [r1] - ldr r2, _0815BF44 @ =0xfffffd80 - adds r1, r2 - lsls r1, 4 - ldr r0, [r0, 0xC] - adds r0, r1 - adds r1, r5, 0 - ldr r2, [sp, 0x8] - bl sub_815BFF0 -_0815BEE8: - lsls r1, r4, 7 - adds r1, r7, r1 - adds r0, r5, 0 - movs r2, 0x20 - bl CpuFastSet - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - ldr r3, [sp, 0x10] - cmp r4, r3 - bcc _0815BEA2 -_0815BF00: - mov r0, r9 - lsrs r2, r0, 16 - movs r0, 0x3 - adds r1, r7, 0 - movs r3, 0 - bl LoadBgTiles - mov r0, r8 - ldr r1, [sp, 0xC] - bl sub_815C230 - adds r0, r5, 0 - bl Free - adds r0, r7, 0 - bl Free - ldr r0, [sp, 0xC] - bl Free - ldr r0, [sp, 0x8] - bl Free - adds r0, r6, 0 - bl Free - add sp, 0x1C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815BF44: .4byte 0xfffffd80 - thumb_func_end sub_815BD80 - - thumb_func_start sub_815BF48 -sub_815BF48: @ 815BF48 - push {lr} - adds r3, r0, 0 - lsls r2, 16 - lsrs r2, 16 - cmp r3, 0 - beq _0815BF6A - ldrb r0, [r3] - cmp r0, 0 - bne _0815BF64 - ldr r0, [r3, 0x4] - lsls r2, 3 - bl CpuFastSet - b _0815BF6A -_0815BF64: - ldr r0, [r3, 0x4] - bl LZDecompressWram -_0815BF6A: - pop {r0} - bx r0 - thumb_func_end sub_815BF48 - - thumb_func_start sub_815BF70 -sub_815BF70: @ 815BF70 - push {r4-r7,lr} - adds r5, r0, 0 - adds r7, r1, 0 - adds r6, r2, 0 - ldr r0, [sp, 0x14] - lsls r3, 16 - lsrs r1, r3, 16 - lsls r0, 16 - lsrs r4, r0, 16 - ldr r0, _0815BF8C @ =0x0000027f - cmp r1, r0 - bhi _0815BF90 - ldr r0, [r5, 0x10] - b _0815BF96 - .align 2, 0 -_0815BF8C: .4byte 0x0000027f -_0815BF90: - ldr r0, [r5, 0x14] - ldr r2, _0815BFEC @ =0xfffffd80 - adds r1, r2 -_0815BF96: - lsls r1, 4 - ldr r0, [r0, 0xC] - adds r5, r0, r1 - ldrh r1, [r5] - adds r0, r6, 0 - bl sub_815C1F0 - lsls r0, 12 - lsls r4, 2 - adds r0, r4 - strh r0, [r7] - ldrh r1, [r5, 0x2] - adds r0, r6, 0 - bl sub_815C1F0 - lsls r0, 12 - adds r0, r4 - adds r0, 0x1 - strh r0, [r7, 0x2] - ldrh r1, [r5, 0x4] - adds r0, r6, 0 - bl sub_815C1F0 - adds r1, r7, 0 - adds r1, 0x40 - lsls r0, 12 - adds r0, r4 - adds r0, 0x2 - strh r0, [r1] - ldrh r1, [r5, 0x6] - adds r0, r6, 0 - bl sub_815C1F0 - adds r1, r7, 0 - adds r1, 0x42 - lsls r0, 12 - adds r0, r4 - adds r0, 0x3 - strh r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815BFEC: .4byte 0xfffffd80 - thumb_func_end sub_815BF70 - - thumb_func_start sub_815BFF0 -sub_815BFF0: @ 815BFF0 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - mov r8, r0 - mov r9, r1 - adds r5, r2, 0 - ldrh r2, [r0] - ldr r4, _0815C0D0 @ =0x000003ff - adds r1, r4, 0 - ands r1, r2 - lsls r1, 5 - adds r1, r5, r1 - lsrs r2, 10 - movs r6, 0x3 - ands r2, r6 - mov r0, r9 - bl sub_815C0D4 - mov r0, r8 - ldrh r2, [r0, 0x8] - adds r1, r4, 0 - ands r1, r2 - lsls r1, 5 - adds r1, r5, r1 - lsrs r2, 10 - ands r2, r6 - mov r0, r9 - bl sub_815C0D4 - movs r0, 0x20 - add r0, r9 - mov r10, r0 - mov r0, r8 - ldrh r2, [r0, 0x2] - adds r1, r4, 0 - ands r1, r2 - lsls r1, 5 - adds r1, r5, r1 - lsrs r2, 10 - ands r2, r6 - mov r0, r10 - bl sub_815C0D4 - mov r0, r8 - ldrh r2, [r0, 0xA] - adds r1, r4, 0 - ands r1, r2 - lsls r1, 5 - adds r1, r5, r1 - lsrs r2, 10 - ands r2, r6 - mov r0, r10 - bl sub_815C0D4 - movs r0, 0x40 - add r0, r9 - mov r10, r0 - mov r0, r8 - ldrh r2, [r0, 0x4] - adds r1, r4, 0 - ands r1, r2 - lsls r1, 5 - adds r1, r5, r1 - lsrs r2, 10 - ands r2, r6 - mov r0, r10 - bl sub_815C0D4 - mov r0, r8 - ldrh r2, [r0, 0xC] - adds r1, r4, 0 - ands r1, r2 - lsls r1, 5 - adds r1, r5, r1 - lsrs r2, 10 - ands r2, r6 - mov r0, r10 - bl sub_815C0D4 - movs r0, 0x60 - add r9, r0 - mov r0, r8 - ldrh r2, [r0, 0x6] - adds r1, r4, 0 - ands r1, r2 - lsls r1, 5 - adds r1, r5, r1 - lsrs r2, 10 - ands r2, r6 - mov r0, r9 - bl sub_815C0D4 - mov r0, r8 - ldrh r2, [r0, 0xE] - ands r4, r2 - lsls r4, 5 - adds r5, r4 - lsrs r2, 10 - ands r2, r6 - mov r0, r9 - adds r1, r5, 0 - bl sub_815C0D4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0815C0D0: .4byte 0x000003ff - thumb_func_end sub_815BFF0 - - thumb_func_start sub_815C0D4 -sub_815C0D4: @ 815C0D4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - mov r9, r0 - adds r4, r1, 0 - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - movs r0, 0x20 - bl AllocZeroed - adds r6, r0, 0 - movs r0, 0x20 - bl AllocZeroed - str r0, [sp] - adds r0, r4, 0 - adds r1, r6, 0 - movs r2, 0x8 - bl CpuFastSet - movs r0, 0x1 - mov r1, r10 - ands r0, r1 - cmp r0, 0 - beq _0815C15A - movs r5, 0 - movs r7, 0xF - mov r12, r7 - movs r0, 0xF0 - mov r8, r0 -_0815C118: - movs r3, 0 - lsls r4, r5, 2 -_0815C11C: - subs r0, r3, 0x3 - subs r0, r4, r0 - adds r0, r6, r0 - ldrb r1, [r0] - adds r2, r4, r3 - ldr r7, [sp] - adds r2, r7, r2 - adds r0, r1, 0 - mov r7, r12 - ands r0, r7 - lsls r0, 4 - mov r7, r8 - ands r1, r7 - lsrs r1, 4 - adds r0, r1 - strb r0, [r2] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3 - bls _0815C11C - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x7 - bls _0815C118 - ldr r0, [sp] - adds r1, r6, 0 - movs r2, 0x8 - bl CpuFastSet -_0815C15A: - movs r0, 0x2 - mov r1, r10 - ands r0, r1 - cmp r0, 0 - beq _0815C18E - movs r5, 0 -_0815C166: - lsls r0, r5, 2 - ldr r7, [sp] - adds r0, r7 - movs r1, 0x7 - subs r1, r5 - lsls r1, 2 - adds r1, r6 - movs r2, 0x4 - bl memcpy - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x7 - bls _0815C166 - ldr r0, [sp] - adds r1, r6, 0 - movs r2, 0x8 - bl CpuFastSet -_0815C18E: - movs r5, 0 - movs r0, 0xF0 - mov r8, r0 - movs r1, 0xF - mov r12, r1 -_0815C198: - adds r4, r6, r5 - ldrb r0, [r4] - mov r3, r8 - ands r3, r0 - cmp r3, 0 - beq _0815C1B2 - mov r7, r9 - adds r2, r7, r5 - ldrb r1, [r2] - mov r0, r12 - ands r0, r1 - adds r0, r3 - strb r0, [r2] -_0815C1B2: - ldrb r0, [r4] - mov r3, r12 - ands r3, r0 - cmp r3, 0 - beq _0815C1CA - mov r0, r9 - adds r2, r0, r5 - ldrb r1, [r2] - mov r0, r8 - ands r0, r1 - adds r0, r3 - strb r0, [r2] -_0815C1CA: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x1F - bls _0815C198 - ldr r0, [sp] - bl Free - adds r0, r6, 0 - bl Free - 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_815C0D4 - - thumb_func_start sub_815C1F0 -sub_815C1F0: @ 815C1F0 - push {r4,lr} - adds r4, r0, 0 - lsls r1, 16 - lsrs r1, 28 - movs r3, 0 - ldrb r0, [r4] - cmp r0, r1 - beq _0815C220 - cmp r0, 0xFF - bne _0815C208 - strb r1, [r4] - b _0815C220 -_0815C208: - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0xF - bhi _0815C220 - adds r2, r4, r3 - ldrb r0, [r2] - cmp r0, r1 - beq _0815C220 - cmp r0, 0xFF - bne _0815C208 - strb r1, [r2] -_0815C220: - movs r0, 0xF - subs r0, r3 - lsls r0, 16 - lsrs r0, 16 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_815C1F0 - - thumb_func_start sub_815C230 -sub_815C230: @ 815C230 - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - movs r4, 0 - ldrb r0, [r5] - cmp r0, 0xFF - beq _0815C274 -_0815C23E: - adds r1, r5, r4 - ldrb r0, [r1] - cmp r0, 0x6 - bls _0815C24A - ldr r0, [r6, 0x14] - b _0815C24C -_0815C24A: - ldr r0, [r6, 0x10] -_0815C24C: - ldrb r1, [r1] - lsls r1, 5 - ldr r0, [r0, 0x8] - adds r0, r1 - movs r1, 0xF - subs r1, r4 - lsls r1, 20 - lsrs r1, 16 - movs r2, 0x20 - bl LoadPalette - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xF - bhi _0815C274 - adds r0, r5, r4 - ldrb r0, [r0] - cmp r0, 0xFF - bne _0815C23E -_0815C274: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_815C230 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/.fuse_hidden00001c3c00000005 b/asm/.fuse_hidden00001c3c00000005 deleted file mode 100644 index 2aff48af5..000000000 --- a/asm/.fuse_hidden00001c3c00000005 +++ /dev/null @@ -1,2244 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start TeachyTvConfigRboxAndObj -TeachyTvConfigRboxAndObj: @ 815B118 - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _0815B190 @ =gTasks+0x8 - adds r5, r0, r1 - movs r0, 0x2 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0815B194 @ =gSprites - adds r7, r0, r1 - movs r0, 0x1 - bl ClearWindowTilemap - bl TeachyTvClearWindowRegs - ldr r0, _0815B198 @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x5] - cmp r0, 0 - blt _0815B1B8 - cmp r0, 0x3 - bgt _0815B1A8 - ldrb r0, [r5, 0x2] - movs r1, 0x78 - movs r2, 0x38 - movs r3, 0 - bl TeachyTvSetSpriteCoordsAndSwitchFrame - movs r4, 0xC0 - lsls r4, 6 - movs r0, 0x3 - adds r1, r4, 0 - movs r2, 0x1 - bl ChangeBgX - movs r0, 0x3 - adds r1, r4, 0 - movs r2, 0x2 - bl ChangeBgY - ldr r2, _0815B19C @ =gUnknown_203F450 - ldr r1, [r2] - ldr r0, _0815B1A0 @ =0x00004004 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x3 - strb r0, [r1] - ldr r1, [r2] - ldr r0, _0815B1A4 @ =0x00004005 - adds r1, r0 - ldrb r0, [r1] - subs r0, 0x3 - strb r0, [r1] - b _0815B1B8 - .align 2, 0 -_0815B190: .4byte gTasks+0x8 -_0815B194: .4byte gSprites -_0815B198: .4byte gTeachyTV_StaticResources -_0815B19C: .4byte gUnknown_203F450 -_0815B1A0: .4byte 0x00004004 -_0815B1A4: .4byte 0x00004005 -_0815B1A8: - cmp r0, 0x5 - bgt _0815B1B8 - ldrb r0, [r5, 0x2] - movs r1, 0x78 - movs r2, 0x38 - movs r3, 0 - bl TeachyTvSetSpriteCoordsAndSwitchFrame -_0815B1B8: - movs r0, 0 - strh r0, [r5, 0x8] - strh r0, [r5, 0xA] - movs r0, 0x24 - ldrsh r1, [r7, r0] - movs r0, 0x26 - ldrsh r2, [r7, r0] - movs r0, 0x1 - str r0, [sp] - adds r0, r6, 0 - movs r3, 0 - bl sub_815BAA0 - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end TeachyTvConfigRboxAndObj - - thumb_func_start sub_815B1DC -sub_815B1DC: @ 815B1DC - push {r4,lr} - sub sp, 0x10 - adds r4, r0, 0 - ldr r2, _0815B21C @ =gTextFlags - ldrb r1, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - bl GetTextSpeedSetting - adds r3, r0, 0 - lsls r3, 24 - lsrs r3, 24 - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - movs r0, 0xC - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x4 - adds r2, r4, 0 - bl AddTextPrinterParametrized - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B21C: .4byte gTextFlags - thumb_func_end sub_815B1DC - - thumb_func_start sub_815B220 -sub_815B220: @ 815B220 - push {r4,lr} - ldr r4, _0815B238 @ =gUnknown_203F450 - ldr r0, [r4] - bl Free - movs r0, 0 - str r0, [r4] - bl FreeAllWindowBuffers - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B238: .4byte gUnknown_203F450 - thumb_func_end sub_815B220 - - thumb_func_start sub_815B23C -sub_815B23C: @ 815B23C - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _0815B26C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0815B270 @ =sub_815B274 - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B26C: .4byte gTasks -_0815B270: .4byte sub_815B274 - thumb_func_end sub_815B23C - - thumb_func_start sub_815B274 -sub_815B274: @ 815B274 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0815B298 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0815B2B6 - ldr r0, _0815B29C @ =gUnknown_203F450 - ldr r0, [r0] - ldr r0, [r0] - cmp r0, 0 - beq _0815B2A0 - bl SetMainCallback2 - b _0815B2AC - .align 2, 0 -_0815B298: .4byte gPaletteFade -_0815B29C: .4byte gUnknown_203F450 -_0815B2A0: - bl sub_8055DC4 - ldr r0, _0815B2BC @ =gTeachyTV_StaticResources - ldr r0, [r0] - bl SetMainCallback2 -_0815B2AC: - bl sub_815B220 - adds r0, r4, 0 - bl DestroyTask -_0815B2B6: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B2BC: .4byte gTeachyTV_StaticResources - thumb_func_end sub_815B274 - - thumb_func_start sub_815B2C0 -sub_815B2C0: @ 815B2C0 - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - ldr r1, _0815B31C @ =gTasks+0x8 - adds r6, r0, r1 - bl TeachyTvBg2AnimController - ldr r0, _0815B320 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0815B37A - ldrb r0, [r6] - bl ListMenuHandleInput - adds r5, r0, 0 - ldrb r0, [r6] - ldr r4, _0815B324 @ =gTeachyTV_StaticResources+6 - adds r2, r4, 0x2 - adds r1, r4, 0 - bl get_coro_args_x18_x1A - ldr r0, _0815B328 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0815B30A - subs r0, r4, 0x6 - ldr r1, [r0] - ldr r0, _0815B32C @ =UseFameCheckerFromMenu - cmp r1, r0 - bne _0815B330 -_0815B30A: - movs r0, 0x2 - negs r0, r0 - cmp r5, r0 - beq _0815B330 - adds r0, 0x1 - cmp r5, r0 - bne _0815B33E - b _0815B37A - .align 2, 0 -_0815B31C: .4byte gTasks+0x8 -_0815B320: .4byte gPaletteFade -_0815B324: .4byte gTeachyTV_StaticResources+6 -_0815B328: .4byte gMain -_0815B32C: .4byte UseFameCheckerFromMenu -_0815B330: - movs r0, 0x5 - bl PlaySE - adds r0, r7, 0 - bl sub_815B23C - b _0815B37A -_0815B33E: - movs r0, 0x5 - bl PlaySE - ldr r2, _0815B380 @ =gTeachyTV_StaticResources - movs r4, 0 - strb r5, [r2, 0x5] - ldrb r0, [r6] - adds r1, r2, 0x6 - adds r2, 0x8 - bl DestroyListMenu - bl TeachyTvClearWindowRegs - movs r0, 0x1 - bl ClearWindowTilemap - movs r0, 0 - bl schedule_bg_copy_tilemap_to_vram - bl TeachyTvRemoveScrollIndicatorArrowPair - strh r4, [r6, 0x6] - strh r4, [r6, 0x4] - ldr r1, _0815B384 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r1 - ldr r1, _0815B388 @ =sub_815B4EC - str r1, [r0] -_0815B37A: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815B380: .4byte gTeachyTV_StaticResources -_0815B384: .4byte gTasks -_0815B388: .4byte sub_815B4EC - thumb_func_end sub_815B2C0 - - thumb_func_start sub_815B38C -sub_815B38C: @ 815B38C - push {r4,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0815B3F8 @ =gTasks+0x8 - adds r4, r1, r0 - bl TeachyTvBg2AnimController - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3F - ble _0815B3F0 - ldr r0, _0815B3FC @ =gUnknown_203F450 - ldr r1, [r0] - ldr r0, _0815B400 @ =0x00003004 - adds r1, r0 - movs r0, 0x20 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0x11 - str r0, [sp, 0x8] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBufferRect_ChangePalette - ldrb r0, [r4, 0x2] - movs r1, 0x8 - movs r2, 0x38 - movs r3, 0x7 - bl TeachyTvSetSpriteCoordsAndSwitchFrame - movs r0, 0x2 - bl schedule_bg_copy_tilemap_to_vram - movs r0, 0 - strh r0, [r4, 0x4] - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] - movs r0, 0x88 - lsls r0, 1 - bl PlayNewMapMusic -_0815B3F0: - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B3F8: .4byte gTasks+0x8 -_0815B3FC: .4byte gUnknown_203F450 -_0815B400: .4byte 0x00003004 - thumb_func_end sub_815B38C - - thumb_func_start sub_815B404 -sub_815B404: @ 815B404 - push {r4,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0815B450 @ =gTasks+0x8 - adds r4, r1, r0 - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x86 - bne _0815B448 - movs r0, 0x1A - str r0, [sp] - movs r0, 0xC - str r0, [sp, 0x4] - movs r0, 0x2 - movs r1, 0 - movs r2, 0x2 - movs r3, 0x1 - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0x2 - bl schedule_bg_copy_tilemap_to_vram - movs r0, 0 - strh r0, [r4, 0x4] - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0815B448: - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B450: .4byte gTasks+0x8 - thumb_func_end sub_815B404 - - thumb_func_start sub_815B454 -sub_815B454: @ 815B454 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0815B484 @ =gTasks+0x8 - adds r4, r1, r0 - movs r0, 0x2 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0815B488 @ =gSprites - adds r1, r0, r1 - ldrh r2, [r4, 0x4] - movs r3, 0x4 - ldrsh r0, [r4, r3] - cmp r0, 0x23 - beq _0815B48C - adds r0, r2, 0x1 - strh r0, [r4, 0x4] - b _0815B4B8 - .align 2, 0 -_0815B484: .4byte gTasks+0x8 -_0815B488: .4byte gSprites -_0815B48C: - ldrh r2, [r1, 0x24] - movs r3, 0x24 - ldrsh r0, [r1, r3] - cmp r0, 0x78 - bne _0815B4B4 - adds r0, r1, 0 - movs r1, 0 - bl StartSpriteAnim - ldr r0, _0815B4B0 @ =gUnknown_841B83D - bl sub_815B1DC - movs r0, 0 - strh r0, [r4, 0x4] - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] - b _0815B4B8 - .align 2, 0 -_0815B4B0: .4byte gUnknown_841B83D -_0815B4B4: - adds r0, r2, 0x1 - strh r0, [r1, 0x24] -_0815B4B8: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_815B454 - - thumb_func_start sub_815B4C0 -sub_815B4C0: @ 815B4C0 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0815B4E8 @ =gTasks+0x8 - adds r4, r1, r0 - movs r0, 0 - bl sub_80BF518 - lsls r0, 16 - cmp r0, 0 - bne _0815B4E2 - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0815B4E2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B4E8: .4byte gTasks+0x8 - thumb_func_end sub_815B4C0 - - thumb_func_start sub_815B4EC -sub_815B4EC: @ 815B4EC - push {r4-r7,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r6, r0, 3 - ldr r7, _0815B548 @ =gTasks+0x8 - adds r5, r6, r7 - ldr r0, _0815B54C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0815B55C - ldr r0, _0815B550 @ =gUnknown_203F450 - ldr r0, [r0] - ldr r1, _0815B554 @ =0x00004006 - adds r0, r1 - movs r4, 0 - movs r1, 0x1 - strb r1, [r0] - ldrb r0, [r5, 0x2] - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl TeachyTvSetSpriteCoordsAndSwitchFrame - movs r0, 0 - movs r1, 0xCC - bl FillWindowPixelBuffer - movs r0, 0 - movs r1, 0x2 - bl CopyWindowToVram - bl sub_815B908 - strh r4, [r5, 0x4] - strh r4, [r5, 0x6] - adds r0, r7, 0 - subs r0, 0x8 - adds r0, r6, r0 - ldr r1, _0815B558 @ =sub_815B92C - str r1, [r0] - b _0815B578 - .align 2, 0 -_0815B548: .4byte gTasks+0x8 -_0815B54C: .4byte gMain -_0815B550: .4byte gUnknown_203F450 -_0815B554: .4byte 0x00004006 -_0815B558: .4byte sub_815B92C -_0815B55C: - ldr r1, _0815B580 @ =gUnknown_8479548 - ldr r0, _0815B584 @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x5] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - movs r3, 0x6 - ldrsh r0, [r5, r3] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - adds r0, r2, 0 - bl _call_via_r1 -_0815B578: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815B580: .4byte gUnknown_8479548 -_0815B584: .4byte gTeachyTV_StaticResources - thumb_func_end sub_815B4EC - - thumb_func_start sub_815B588 -sub_815B588: @ 815B588 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _0815B5B4 @ =gTasks+0x8 - adds r4, r0 - ldr r1, _0815B5B8 @ =gUnknown_8479560 - ldr r0, _0815B5BC @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x5] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl sub_815B1DC - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B5B4: .4byte gTasks+0x8 -_0815B5B8: .4byte gUnknown_8479560 -_0815B5BC: .4byte gTeachyTV_StaticResources - thumb_func_end sub_815B588 - - thumb_func_start sub_815B5C0 -sub_815B5C0: @ 815B5C0 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _0815B5EC @ =gTasks+0x8 - adds r4, r0 - ldr r1, _0815B5F0 @ =gUnknown_8479578 - ldr r0, _0815B5F4 @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x5] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl sub_815B1DC - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B5EC: .4byte gTasks+0x8 -_0815B5F0: .4byte gUnknown_8479578 -_0815B5F4: .4byte gTeachyTV_StaticResources - thumb_func_end sub_815B5C0 - - thumb_func_start sub_815B5F8 -sub_815B5F8: @ 815B5F8 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0815B620 @ =gTasks+0x8 - adds r4, r1, r0 - movs r0, 0 - bl sub_80BF518 - lsls r0, 16 - cmp r0, 0 - bne _0815B61A - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0815B61A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B620: .4byte gTasks+0x8 - thumb_func_end sub_815B5F8 - - thumb_func_start sub_815B624 -sub_815B624: @ 815B624 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0815B65C @ =gTasks+0x8 - adds r4, r1, r0 - ldr r0, _0815B660 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _0815B656 - movs r0, 0 - movs r1, 0xCC - bl FillWindowPixelBuffer - movs r0, 0 - movs r1, 0x2 - bl CopyWindowToVram - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0815B656: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B65C: .4byte gTasks+0x8 -_0815B660: .4byte gMain - thumb_func_end sub_815B624 - - thumb_func_start sub_815B664 -sub_815B664: @ 815B664 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _0815B6A0 @ =gTasks+0x8 - adds r4, r0 - movs r0, 0x2 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0815B6A4 @ =gSprites - adds r0, r1 - movs r1, 0x5 - bl StartSpriteAnim - movs r0, 0 - strh r0, [r4, 0x4] - strh r0, [r4, 0x8] - movs r0, 0x1 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B6A0: .4byte gTasks+0x8 -_0815B6A4: .4byte gSprites - thumb_func_end sub_815B664 - - thumb_func_start sub_815B6A8 -sub_815B6A8: @ 815B6A8 - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0815B730 @ =gTasks+0x8 - adds r4, r0, r1 - movs r0, 0x2 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0815B734 @ =gSprites - adds r6, r0, r1 - movs r1, 0x80 - lsls r1, 1 - movs r0, 0x3 - movs r2, 0x2 - bl ChangeBgY - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - movs r3, 0xF - ands r3, r0 - cmp r3, 0 - bne _0815B702 - ldr r0, _0815B738 @ =gUnknown_203F450 - ldr r1, [r0] - ldr r2, _0815B73C @ =0x00004005 - adds r1, r2 - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] - movs r0, 0x24 - ldrsh r1, [r6, r0] - movs r0, 0x26 - ldrsh r2, [r6, r0] - str r3, [sp] - adds r0, r5, 0 - movs r3, 0 - bl sub_815BAA0 -_0815B702: - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0x30 - bne _0815B726 - movs r1, 0 - strh r1, [r4, 0x4] - movs r2, 0x1 - negs r2, r2 - adds r0, r2, 0 - strh r0, [r4, 0x8] - strh r1, [r4, 0xA] - adds r0, r6, 0 - movs r1, 0x7 - bl StartSpriteAnim - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0815B726: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0815B730: .4byte gTasks+0x8 -_0815B734: .4byte gSprites -_0815B738: .4byte gUnknown_203F450 -_0815B73C: .4byte 0x00004005 - thumb_func_end sub_815B6A8 - - thumb_func_start sub_815B740 -sub_815B740: @ 815B740 - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0815B7D4 @ =gTasks+0x8 - adds r4, r0, r1 - movs r0, 0x2 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0815B7D8 @ =gSprites - adds r6, r0, r1 - movs r1, 0x80 - lsls r1, 1 - movs r0, 0x3 - movs r2, 0x1 - bl ChangeBgX - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - movs r2, 0xF - ands r0, r2 - cmp r0, 0 - bne _0815B78A - ldr r0, _0815B7DC @ =gUnknown_203F450 - ldr r1, [r0] - ldr r3, _0815B7E0 @ =0x00004004 - adds r1, r3 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_0815B78A: - movs r1, 0x4 - ldrsh r0, [r4, r1] - adds r0, 0x8 - ands r0, r2 - cmp r0, 0 - bne _0815B7AC - ldrh r1, [r6, 0x24] - adds r1, 0x8 - lsls r1, 16 - asrs r1, 16 - movs r3, 0x26 - ldrsh r2, [r6, r3] - str r0, [sp] - adds r0, r5, 0 - movs r3, 0 - bl sub_815BAA0 -_0815B7AC: - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0x30 - bne _0815B7CA - movs r0, 0 - strh r0, [r4, 0x4] - strh r0, [r4, 0x8] - strh r0, [r4, 0xA] - adds r0, r6, 0 - movs r1, 0x3 - bl StartSpriteAnim - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0815B7CA: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0815B7D4: .4byte gTasks+0x8 -_0815B7D8: .4byte gSprites -_0815B7DC: .4byte gUnknown_203F450 -_0815B7E0: .4byte 0x00004004 - thumb_func_end sub_815B740 - - thumb_func_start sub_815B7E4 -sub_815B7E4: @ 815B7E4 - push {r4-r6,lr} - sub sp, 0x4 - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - lsls r5, r6, 2 - adds r5, r6 - lsls r5, 3 - ldr r0, _0815B838 @ =gTasks+0x8 - adds r5, r0 - movs r1, 0x2 - ldrsh r0, [r5, r1] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _0815B83C @ =gSprites - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x6 - bl StartSpriteAnim - ldrh r0, [r5, 0x6] - adds r0, 0x1 - strh r0, [r5, 0x6] - movs r0, 0 - strh r0, [r5, 0x8] - strh r0, [r5, 0xA] - movs r0, 0x24 - ldrsh r1, [r4, r0] - movs r0, 0x26 - ldrsh r2, [r4, r0] - movs r0, 0 - str r0, [sp] - adds r0, r6, 0 - movs r3, 0 - bl sub_815BAA0 - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0815B838: .4byte gTasks+0x8 -_0815B83C: .4byte gSprites - thumb_func_end sub_815B7E4 - - thumb_func_start sub_815B840 -sub_815B840: @ 815B840 - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r3, r0, 24 - lsls r0, r3, 2 - adds r0, r3 - lsls r0, 3 - ldr r1, _0815B890 @ =gTasks+0x8 - adds r5, r0, r1 - movs r0, 0x2 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0815B894 @ =gSprites - adds r4, r0, r1 - ldrh r1, [r4, 0x24] - movs r0, 0xF - ands r0, r1 - cmp r0, 0 - bne _0815B87E - subs r1, 0x8 - lsls r1, 16 - asrs r1, 16 - movs r6, 0x26 - ldrsh r2, [r4, r6] - str r0, [sp] - adds r0, r3, 0 - movs r3, 0 - bl sub_815BAA0 -_0815B87E: - ldrh r1, [r4, 0x24] - movs r2, 0x24 - ldrsh r0, [r4, r2] - cmp r0, 0x8 - bne _0815B898 - ldrh r0, [r5, 0x6] - adds r0, 0x1 - strh r0, [r5, 0x6] - b _0815B89C - .align 2, 0 -_0815B890: .4byte gTasks+0x8 -_0815B894: .4byte gSprites -_0815B898: - subs r0, r1, 0x1 - strh r0, [r4, 0x24] -_0815B89C: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_815B840 - - thumb_func_start sub_815B8A4 -sub_815B8A4: @ 815B8A4 - push {r4,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0815B900 @ =gTasks+0x8 - adds r4, r1, r0 - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0815B8DC - ldr r1, _0815B904 @ =gUnknown_8479590 - movs r0, 0x8 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x11 - str r0, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x14 - movs r3, 0xA - bl CopyToBgTilemapBufferRect_ChangePalette - movs r0, 0x1 - bl schedule_bg_copy_tilemap_to_vram -_0815B8DC: - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x7E - ble _0815B8F8 - bl sub_815B908 - movs r0, 0 - strh r0, [r4, 0x4] - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0815B8F8: - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B900: .4byte gTasks+0x8 -_0815B904: .4byte gUnknown_8479590 - thumb_func_end sub_815B8A4 - - thumb_func_start sub_815B908 -sub_815B908: @ 815B908 - push {lr} - sub sp, 0x8 - movs r0, 0x8 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - movs r1, 0 - movs r2, 0x14 - movs r3, 0xA - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0x1 - bl schedule_bg_copy_tilemap_to_vram - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_815B908 - - thumb_func_start sub_815B92C -sub_815B92C: @ 815B92C - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r6, r1, 3 - ldr r7, _0815B9DC @ =gTasks+0x8 - adds r5, r6, r7 - movs r1, 0x4 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _0815B94C - movs r0, 0xAD - lsls r0, 1 - bl PlayNewMapMusic -_0815B94C: - bl TeachyTvBg2AnimController - ldrh r0, [r5, 0x4] - adds r0, 0x1 - strh r0, [r5, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3F - ble _0815B9D4 - movs r4, 0 - strh r4, [r5, 0x4] - strh r4, [r5, 0x6] - bl TeachyTvSetupWindow - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5] - adds r0, r7, 0 - subs r0, 0x8 - adds r0, r6, r0 - ldr r1, _0815B9E0 @ =sub_815B2C0 - str r1, [r0] - movs r0, 0 - bl PutWindowTilemap - bl TeachyTvSetupScrollIndicatorArrowPair - bl TeachyTvSetWindowRegs - movs r0, 0 - bl schedule_bg_copy_tilemap_to_vram - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r1, 0x80 - lsls r1, 5 - movs r0, 0x3 - movs r2, 0x2 - bl ChangeBgX - movs r1, 0xA0 - lsls r1, 6 - movs r0, 0x3 - movs r2, 0x1 - bl ChangeBgY - ldr r2, _0815B9E4 @ =gUnknown_203F450 - ldr r0, [r2] - ldr r1, _0815B9E8 @ =0x00004004 - adds r0, r1 - strb r4, [r0] - ldr r0, [r2] - adds r1, 0x1 - adds r0, r1 - movs r1, 0x3 - strb r1, [r0] - ldr r0, [r2] - ldr r1, _0815B9EC @ =0x00004006 - adds r0, r1 - strb r4, [r0] -_0815B9D4: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815B9DC: .4byte gTasks+0x8 -_0815B9E0: .4byte sub_815B2C0 -_0815B9E4: .4byte gUnknown_203F450 -_0815B9E8: .4byte 0x00004004 -_0815B9EC: .4byte 0x00004006 - thumb_func_end sub_815B92C - - thumb_func_start sub_815B9F0 -sub_815B9F0: @ 815B9F0 - push {lr} - lsls r0, 24 - lsrs r1, r0, 24 - adds r2, r1, 0 - ldr r0, _0815BA0C @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x5] - cmp r0, 0 - blt _0815BA22 - cmp r0, 0x3 - bgt _0815BA10 - adds r0, r1, 0 - bl sub_815BC90 - b _0815BA22 - .align 2, 0 -_0815BA0C: .4byte gTeachyTV_StaticResources -_0815BA10: - cmp r0, 0x5 - bgt _0815BA22 - ldr r0, _0815BA28 @ =gUnknown_203F450 - ldr r1, [r0] - ldr r0, _0815BA2C @ =sub_815BA30 - str r0, [r1] - adds r0, r2, 0 - bl sub_815B23C -_0815BA22: - pop {r0} - bx r0 - .align 2, 0 -_0815BA28: .4byte gUnknown_203F450 -_0815BA2C: .4byte sub_815BA30 - thumb_func_end sub_815B9F0 - - thumb_func_start sub_815BA30 -sub_815BA30: @ 815BA30 - push {lr} - ldr r0, _0815BA44 @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x5] - cmp r0, 0x4 - bne _0815BA48 - movs r0, 0xA - bl sub_810B108 - b _0815BA4E - .align 2, 0 -_0815BA44: .4byte gTeachyTV_StaticResources -_0815BA48: - movs r0, 0x9 - bl sub_810B108 -_0815BA4E: - pop {r0} - bx r0 - thumb_func_end sub_815BA30 - - thumb_func_start TeachyTvTaskFunction -TeachyTvTaskFunction: @ 815BA54 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r2, r1, 3 - ldr r4, _0815BA8C @ =gTasks+0x8 - adds r3, r2, r4 - ldr r0, _0815BA90 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0815BA86 - ldr r1, _0815BA94 @ =gUnknown_8479390 - ldr r0, _0815BA98 @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x5] - adds r0, r1 - ldrb r0, [r0] - strh r0, [r3, 0x6] - adds r0, r4, 0 - subs r0, 0x8 - adds r0, r2, r0 - ldr r1, _0815BA9C @ =sub_815B4EC - str r1, [r0] -_0815BA86: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815BA8C: .4byte gTasks+0x8 -_0815BA90: .4byte gPaletteFade -_0815BA94: .4byte gUnknown_8479390 -_0815BA98: .4byte gTeachyTV_StaticResources -_0815BA9C: .4byte sub_815B4EC - thumb_func_end TeachyTvTaskFunction - - thumb_func_start sub_815BAA0 -sub_815BAA0: @ 815BAA0 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r4, [sp, 0x1C] - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r1, 16 - lsrs r6, r1, 16 - lsls r2, 16 - lsrs r1, r2, 16 - lsls r3, 24 - lsrs r7, r3, 24 - lsls r4, 24 - lsrs r4, 24 - mov r8, r4 - ldr r0, _0815BB34 @ =gUnknown_203F450 - ldr r0, [r0] - ldr r2, _0815BB38 @ =0x00004006 - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0815BB5C - lsls r0, r6, 16 - ldr r2, _0815BB3C @ =0xfff00000 - adds r0, r2 - asrs r0, 16 - lsls r1, 16 - asrs r5, r1, 16 - adds r1, r5, 0 - bl sub_815BC40 - lsls r0, 24 - cmp r0, 0 - beq _0815BB5C - ldr r0, _0815BB40 @ =gUnknown_83A0010 - ldr r0, [r0, 0x10] - movs r1, 0 - movs r2, 0 - adds r3, r7, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _0815BB44 @ =gSprites - adds r4, r1, r0 - strh r6, [r4, 0x24] - adds r0, r5, 0 - adds r0, 0x8 - strh r0, [r4, 0x26] - ldr r0, _0815BB48 @ =sub_815BB6C - str r0, [r4, 0x1C] - mov r0, r9 - strh r0, [r4, 0x2E] - mov r2, r8 - cmp r2, 0x1 - bne _0815BB4C - adds r0, r4, 0 - movs r1, 0x4 - bl SeekSpriteAnim - ldrb r0, [r4, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r0 - movs r0, 0x8 - orrs r1, r0 - strb r1, [r4, 0x5] - b _0815BB5C - .align 2, 0 -_0815BB34: .4byte gUnknown_203F450 -_0815BB38: .4byte 0x00004006 -_0815BB3C: .4byte 0xfff00000 -_0815BB40: .4byte gUnknown_83A0010 -_0815BB44: .4byte gSprites -_0815BB48: .4byte sub_815BB6C -_0815BB4C: - ldr r1, _0815BB68 @ =gUnknown_84795B8 - adds r0, r4, 0 - bl SetSubspriteTables - adds r1, r4, 0 - adds r1, 0x42 - movs r0, 0x40 - strb r0, [r1] -_0815BB5C: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815BB68: .4byte gUnknown_84795B8 - thumb_func_end sub_815BAA0 - - thumb_func_start sub_815BB6C -sub_815BB6C: @ 815BB6C - push {r4,r5,lr} - adds r3, r0, 0 - movs r0, 0x2E - ldrsh r1, [r3, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - ldr r1, _0815BBA4 @ =gTasks+0x8 - adds r4, r0, r1 - movs r2, 0x2 - ldrsh r1, [r4, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0815BBA8 @ =gSprites - adds r5, r0, r1 - ldr r0, _0815BBAC @ =gUnknown_203F450 - ldr r0, [r0] - ldr r1, _0815BBB0 @ =0x00004006 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - bne _0815BBB4 - adds r0, r3, 0 - bl DestroySprite - b _0815BC3A - .align 2, 0 -_0815BBA4: .4byte gTasks+0x8 -_0815BBA8: .4byte gSprites -_0815BBAC: .4byte gUnknown_203F450 -_0815BBB0: .4byte 0x00004006 -_0815BBB4: - adds r0, r3, 0 - adds r0, 0x2B - ldrb r0, [r0] - cmp r0, 0 - bne _0815BBD2 - adds r2, r3, 0 - adds r2, 0x42 - ldrb r0, [r2] - movs r1, 0x40 - negs r1, r1 - ands r1, r0 - movs r0, 0x1 - orrs r1, r0 - strb r1, [r2] - b _0815BBE0 -_0815BBD2: - adds r2, r3, 0 - adds r2, 0x42 - ldrb r1, [r2] - movs r0, 0x40 - negs r0, r0 - ands r0, r1 - strb r0, [r2] -_0815BBE0: - ldrh r0, [r4, 0x8] - ldrh r2, [r3, 0x24] - adds r0, r2 - strh r0, [r3, 0x24] - ldrh r0, [r4, 0xA] - ldrh r1, [r3, 0x26] - adds r0, r1 - strh r0, [r3, 0x26] - adds r0, r3, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0815BC3A - adds r1, r3, 0 - adds r1, 0x43 - movs r0, 0 - strb r0, [r1] - ldrh r1, [r3, 0x24] - ldrh r0, [r5, 0x24] - subs r1, r0 - ldrh r0, [r3, 0x26] - ldrh r2, [r5, 0x26] - subs r0, r2 - lsls r0, 16 - lsrs r0, 16 - lsls r1, 16 - movs r2, 0xF0 - lsls r2, 12 - adds r1, r2 - lsrs r1, 16 - cmp r1, 0x1E - bhi _0815BC34 - lsls r0, 16 - asrs r1, r0, 16 - movs r0, 0x10 - negs r0, r0 - cmp r1, r0 - ble _0815BC34 - cmp r1, 0x17 - ble _0815BC3A -_0815BC34: - adds r0, r3, 0 - bl DestroySprite -_0815BC3A: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_815BB6C - - thumb_func_start sub_815BC40 -sub_815BC40: @ 815BC40 - push {r4,r5,lr} - lsls r1, 16 - lsrs r1, 16 - lsls r4, r0, 16 - cmp r4, 0 - blt _0815BC52 - lsls r1, 16 - cmp r1, 0 - bge _0815BC56 -_0815BC52: - movs r0, 0 - b _0815BC78 -_0815BC56: - ldr r3, _0815BC80 @ =gUnknown_84795C8 - ldr r0, _0815BC84 @ =gUnknown_203F450 - ldr r2, [r0] - ldr r5, _0815BC88 @ =0x00004005 - adds r0, r2, r5 - asrs r1, 20 - ldrb r0, [r0] - adds r1, r0 - lsls r1, 4 - ldr r0, _0815BC8C @ =0x00004004 - adds r2, r0 - asrs r0, r4, 20 - ldrb r2, [r2] - adds r0, r2 - adds r1, r0 - adds r1, r3 - ldrb r0, [r1] -_0815BC78: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0815BC80: .4byte gUnknown_84795C8 -_0815BC84: .4byte gUnknown_203F450 -_0815BC88: .4byte 0x00004005 -_0815BC8C: .4byte 0x00004004 - thumb_func_end sub_815BC40 - - thumb_func_start sub_815BC90 -sub_815BC90: @ 815BC90 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _0815BCCC @ =gTasks+0x8 - adds r5, r0, r1 - bl sub_815B220 - ldr r1, _0815BCD0 @ =gSpecialVar_0x8004 - ldr r4, _0815BCD4 @ =gTeachyTV_StaticResources - ldrb r0, [r4, 0x5] - strh r0, [r1] - ldr r1, _0815BCD8 @ =gMain - ldr r0, _0815BCDC @ =sub_815BD58 - str r0, [r1, 0x8] - bl SavePlayerParty - bl sub_8159F40 - movs r0, 0 - bl PlayMapChosenOrBattleBGM - ldrb r0, [r4, 0x5] - cmp r0, 0 - bne _0815BCE0 - movs r0, 0x9 - b _0815BCE2 - .align 2, 0 -_0815BCCC: .4byte gTasks+0x8 -_0815BCD0: .4byte gSpecialVar_0x8004 -_0815BCD4: .4byte gTeachyTV_StaticResources -_0815BCD8: .4byte gMain -_0815BCDC: .4byte sub_815BD58 -_0815BCE0: - movs r0, 0x8 -_0815BCE2: - strh r0, [r5, 0xC] - movs r0, 0 - strh r0, [r5, 0xE] - ldr r1, _0815BCFC @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _0815BD00 @ =sub_815BD04 - str r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0815BCFC: .4byte gTasks -_0815BD00: .4byte sub_815BD04 - thumb_func_end sub_815BC90 - - thumb_func_start sub_815BD04 -sub_815BD04: @ 815BD04 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0815BD24 @ =gTasks+0x8 - adds r4, r0, r1 - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _0815BD28 - cmp r0, 0x1 - beq _0815BD36 - b _0815BD4C - .align 2, 0 -_0815BD24: .4byte gTasks+0x8 -_0815BD28: - ldrb r0, [r4, 0xC] - bl sub_80D08B8 - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - b _0815BD4C -_0815BD36: - bl sub_80D08F8 - lsls r0, 24 - cmp r0, 0 - beq _0815BD4C - ldr r0, _0815BD54 @ =sub_800FD9C - bl SetMainCallback2 - adds r0, r5, 0 - bl DestroyTask -_0815BD4C: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0815BD54: .4byte sub_800FD9C - thumb_func_end sub_815BD04 - - thumb_func_start sub_815BD58 -sub_815BD58: @ 815BD58 - push {lr} - bl LoadPlayerParty - ldr r0, _0815BD6C @ =gUnknown_2023E8A - ldrb r0, [r0] - cmp r0, 0x3 - bne _0815BD70 - bl sub_815AC20 - b _0815BD78 - .align 2, 0 -_0815BD6C: .4byte gUnknown_2023E8A -_0815BD70: - movs r0, 0x88 - lsls r0, 1 - bl PlayNewMapMusic -_0815BD78: - bl CB2_ReturnToTeachyTV - pop {r0} - bx r0 - thumb_func_end sub_815BD58 - - thumb_func_start sub_815BD80 -sub_815BD80: @ 815BD80 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x1C - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x10] - ldr r1, _0815BE1C @ =Route1_Layout - mov r8, r1 - movs r0, 0x80 - lsls r0, 4 - bl AllocZeroed - adds r6, r0, 0 - movs r0, 0x80 - lsls r0, 8 - bl AllocZeroed - str r0, [sp, 0x8] - movs r0, 0x10 - bl Alloc - str r0, [sp, 0xC] - movs r1, 0xFF - movs r2, 0x10 - bl memset - mov r2, r8 - ldr r0, [r2, 0x10] - movs r2, 0xA0 - lsls r2, 2 - ldr r1, [sp, 0x8] - bl sub_815BF48 - mov r3, r8 - ldr r0, [r3, 0x14] - ldr r2, [sp, 0x8] - movs r3, 0xA0 - lsls r3, 7 - adds r1, r2, r3 - movs r2, 0xC0 - lsls r2, 1 - bl sub_815BF48 - movs r4, 0 -_0815BDDE: - movs r2, 0 - adds r0, r4, 0x6 - str r0, [sp, 0x18] - lsls r1, r4, 4 - mov r10, r1 - lsls r3, r4, 6 - mov r9, r3 - adds r4, 0x1 - str r4, [sp, 0x14] -_0815BDF0: - mov r1, r8 - ldr r0, [r1] - ldr r3, [sp, 0x18] - muls r0, r3 - ldr r1, [r1, 0xC] - adds r0, r2, r0 - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0, 0x10] - ldr r3, _0815BE20 @ =0x000003ff - adds r0, r3, 0 - adds r4, r0, 0 - ands r4, r1 - movs r3, 0 - mov r0, r10 - adds r1, r0, r2 - lsls r5, r2, 1 - adds r7, r2, 0x1 - cmp r3, r1 - bge _0815BE3C - ldrh r0, [r6] - b _0815BE34 - .align 2, 0 -_0815BE1C: .4byte Route1_Layout -_0815BE20: .4byte 0x000003ff -_0815BE24: - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, r1 - bge _0815BE3C - lsls r0, r3, 1 - adds r0, r6 - ldrh r0, [r0] -_0815BE34: - cmp r0, 0 - beq _0815BE46 - cmp r0, r4 - bne _0815BE24 -_0815BE3C: - lsls r0, r3, 1 - adds r0, r6 - ldrh r0, [r0] - cmp r0, 0 - bne _0815BE56 -_0815BE46: - lsls r0, r3, 1 - adds r0, r6 - strh r4, [r0] - ldr r0, [sp, 0x10] - adds r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0x10] -_0815BE56: - mov r2, r9 - adds r1, r2, r5 - lsls r1, 1 - ldr r0, [sp, 0x4] - adds r1, r0, r1 - str r3, [sp] - mov r0, r8 - ldr r2, [sp, 0xC] - adds r3, r4, 0 - bl sub_815BF70 - lsls r0, r7, 16 - lsrs r2, r0, 16 - cmp r2, 0xF - bls _0815BDF0 - ldr r1, [sp, 0x14] - lsls r0, r1, 16 - lsrs r4, r0, 16 - cmp r4, 0x8 - bls _0815BDDE - ldr r2, [sp, 0x10] - lsls r0, r2, 7 - bl Alloc - adds r7, r0, 0 - movs r0, 0x80 - bl Alloc - adds r5, r0, 0 - movs r4, 0 - ldr r3, [sp, 0x10] - lsls r3, 23 - mov r9, r3 - ldr r0, [sp, 0x10] - cmp r4, r0 - bcs _0815BF00 - ldr r1, _0815BECC @ =0x0000027f - mov r10, r1 -_0815BEA2: - adds r0, r5, 0 - movs r1, 0 - movs r2, 0x80 - bl memset - lsls r0, r4, 1 - adds r1, r0, r6 - ldrh r0, [r1] - cmp r0, r10 - bhi _0815BED0 - mov r2, r8 - ldr r0, [r2, 0x10] - ldrh r1, [r1] - lsls r1, 4 - ldr r0, [r0, 0xC] - adds r0, r1 - adds r1, r5, 0 - ldr r2, [sp, 0x8] - bl sub_815BFF0 - b _0815BEE8 - .align 2, 0 -_0815BECC: .4byte 0x0000027f -_0815BED0: - mov r3, r8 - ldr r0, [r3, 0x14] - ldrh r1, [r1] - ldr r2, _0815BF44 @ =0xfffffd80 - adds r1, r2 - lsls r1, 4 - ldr r0, [r0, 0xC] - adds r0, r1 - adds r1, r5, 0 - ldr r2, [sp, 0x8] - bl sub_815BFF0 -_0815BEE8: - lsls r1, r4, 7 - adds r1, r7, r1 - adds r0, r5, 0 - movs r2, 0x20 - bl CpuFastSet - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - ldr r3, [sp, 0x10] - cmp r4, r3 - bcc _0815BEA2 -_0815BF00: - mov r0, r9 - lsrs r2, r0, 16 - movs r0, 0x3 - adds r1, r7, 0 - movs r3, 0 - bl LoadBgTiles - mov r0, r8 - ldr r1, [sp, 0xC] - bl sub_815C230 - adds r0, r5, 0 - bl Free - adds r0, r7, 0 - bl Free - ldr r0, [sp, 0xC] - bl Free - ldr r0, [sp, 0x8] - bl Free - adds r0, r6, 0 - bl Free - add sp, 0x1C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815BF44: .4byte 0xfffffd80 - thumb_func_end sub_815BD80 - - thumb_func_start sub_815BF48 -sub_815BF48: @ 815BF48 - push {lr} - adds r3, r0, 0 - lsls r2, 16 - lsrs r2, 16 - cmp r3, 0 - beq _0815BF6A - ldrb r0, [r3] - cmp r0, 0 - bne _0815BF64 - ldr r0, [r3, 0x4] - lsls r2, 3 - bl CpuFastSet - b _0815BF6A -_0815BF64: - ldr r0, [r3, 0x4] - bl LZDecompressWram -_0815BF6A: - pop {r0} - bx r0 - thumb_func_end sub_815BF48 - - thumb_func_start sub_815BF70 -sub_815BF70: @ 815BF70 - push {r4-r7,lr} - adds r5, r0, 0 - adds r7, r1, 0 - adds r6, r2, 0 - ldr r0, [sp, 0x14] - lsls r3, 16 - lsrs r1, r3, 16 - lsls r0, 16 - lsrs r4, r0, 16 - ldr r0, _0815BF8C @ =0x0000027f - cmp r1, r0 - bhi _0815BF90 - ldr r0, [r5, 0x10] - b _0815BF96 - .align 2, 0 -_0815BF8C: .4byte 0x0000027f -_0815BF90: - ldr r0, [r5, 0x14] - ldr r2, _0815BFEC @ =0xfffffd80 - adds r1, r2 -_0815BF96: - lsls r1, 4 - ldr r0, [r0, 0xC] - adds r5, r0, r1 - ldrh r1, [r5] - adds r0, r6, 0 - bl sub_815C1F0 - lsls r0, 12 - lsls r4, 2 - adds r0, r4 - strh r0, [r7] - ldrh r1, [r5, 0x2] - adds r0, r6, 0 - bl sub_815C1F0 - lsls r0, 12 - adds r0, r4 - adds r0, 0x1 - strh r0, [r7, 0x2] - ldrh r1, [r5, 0x4] - adds r0, r6, 0 - bl sub_815C1F0 - adds r1, r7, 0 - adds r1, 0x40 - lsls r0, 12 - adds r0, r4 - adds r0, 0x2 - strh r0, [r1] - ldrh r1, [r5, 0x6] - adds r0, r6, 0 - bl sub_815C1F0 - adds r1, r7, 0 - adds r1, 0x42 - lsls r0, 12 - adds r0, r4 - adds r0, 0x3 - strh r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815BFEC: .4byte 0xfffffd80 - thumb_func_end sub_815BF70 - - thumb_func_start sub_815BFF0 -sub_815BFF0: @ 815BFF0 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - mov r8, r0 - mov r9, r1 - adds r5, r2, 0 - ldrh r2, [r0] - ldr r4, _0815C0D0 @ =0x000003ff - adds r1, r4, 0 - ands r1, r2 - lsls r1, 5 - adds r1, r5, r1 - lsrs r2, 10 - movs r6, 0x3 - ands r2, r6 - mov r0, r9 - bl sub_815C0D4 - mov r0, r8 - ldrh r2, [r0, 0x8] - adds r1, r4, 0 - ands r1, r2 - lsls r1, 5 - adds r1, r5, r1 - lsrs r2, 10 - ands r2, r6 - mov r0, r9 - bl sub_815C0D4 - movs r0, 0x20 - add r0, r9 - mov r10, r0 - mov r0, r8 - ldrh r2, [r0, 0x2] - adds r1, r4, 0 - ands r1, r2 - lsls r1, 5 - adds r1, r5, r1 - lsrs r2, 10 - ands r2, r6 - mov r0, r10 - bl sub_815C0D4 - mov r0, r8 - ldrh r2, [r0, 0xA] - adds r1, r4, 0 - ands r1, r2 - lsls r1, 5 - adds r1, r5, r1 - lsrs r2, 10 - ands r2, r6 - mov r0, r10 - bl sub_815C0D4 - movs r0, 0x40 - add r0, r9 - mov r10, r0 - mov r0, r8 - ldrh r2, [r0, 0x4] - adds r1, r4, 0 - ands r1, r2 - lsls r1, 5 - adds r1, r5, r1 - lsrs r2, 10 - ands r2, r6 - mov r0, r10 - bl sub_815C0D4 - mov r0, r8 - ldrh r2, [r0, 0xC] - adds r1, r4, 0 - ands r1, r2 - lsls r1, 5 - adds r1, r5, r1 - lsrs r2, 10 - ands r2, r6 - mov r0, r10 - bl sub_815C0D4 - movs r0, 0x60 - add r9, r0 - mov r0, r8 - ldrh r2, [r0, 0x6] - adds r1, r4, 0 - ands r1, r2 - lsls r1, 5 - adds r1, r5, r1 - lsrs r2, 10 - ands r2, r6 - mov r0, r9 - bl sub_815C0D4 - mov r0, r8 - ldrh r2, [r0, 0xE] - ands r4, r2 - lsls r4, 5 - adds r5, r4 - lsrs r2, 10 - ands r2, r6 - mov r0, r9 - adds r1, r5, 0 - bl sub_815C0D4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0815C0D0: .4byte 0x000003ff - thumb_func_end sub_815BFF0 - - thumb_func_start sub_815C0D4 -sub_815C0D4: @ 815C0D4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - mov r9, r0 - adds r4, r1, 0 - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - movs r0, 0x20 - bl AllocZeroed - adds r6, r0, 0 - movs r0, 0x20 - bl AllocZeroed - str r0, [sp] - adds r0, r4, 0 - adds r1, r6, 0 - movs r2, 0x8 - bl CpuFastSet - movs r0, 0x1 - mov r1, r10 - ands r0, r1 - cmp r0, 0 - beq _0815C15A - movs r5, 0 - movs r7, 0xF - mov r12, r7 - movs r0, 0xF0 - mov r8, r0 -_0815C118: - movs r3, 0 - lsls r4, r5, 2 -_0815C11C: - subs r0, r3, 0x3 - subs r0, r4, r0 - adds r0, r6, r0 - ldrb r1, [r0] - adds r2, r4, r3 - ldr r7, [sp] - adds r2, r7, r2 - adds r0, r1, 0 - mov r7, r12 - ands r0, r7 - lsls r0, 4 - mov r7, r8 - ands r1, r7 - lsrs r1, 4 - adds r0, r1 - strb r0, [r2] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3 - bls _0815C11C - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x7 - bls _0815C118 - ldr r0, [sp] - adds r1, r6, 0 - movs r2, 0x8 - bl CpuFastSet -_0815C15A: - movs r0, 0x2 - mov r1, r10 - ands r0, r1 - cmp r0, 0 - beq _0815C18E - movs r5, 0 -_0815C166: - lsls r0, r5, 2 - ldr r7, [sp] - adds r0, r7 - movs r1, 0x7 - subs r1, r5 - lsls r1, 2 - adds r1, r6 - movs r2, 0x4 - bl memcpy - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x7 - bls _0815C166 - ldr r0, [sp] - adds r1, r6, 0 - movs r2, 0x8 - bl CpuFastSet -_0815C18E: - movs r5, 0 - movs r0, 0xF0 - mov r8, r0 - movs r1, 0xF - mov r12, r1 -_0815C198: - adds r4, r6, r5 - ldrb r0, [r4] - mov r3, r8 - ands r3, r0 - cmp r3, 0 - beq _0815C1B2 - mov r7, r9 - adds r2, r7, r5 - ldrb r1, [r2] - mov r0, r12 - ands r0, r1 - adds r0, r3 - strb r0, [r2] -_0815C1B2: - ldrb r0, [r4] - mov r3, r12 - ands r3, r0 - cmp r3, 0 - beq _0815C1CA - mov r0, r9 - adds r2, r0, r5 - ldrb r1, [r2] - mov r0, r8 - ands r0, r1 - adds r0, r3 - strb r0, [r2] -_0815C1CA: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x1F - bls _0815C198 - ldr r0, [sp] - bl Free - adds r0, r6, 0 - bl Free - 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_815C0D4 - - thumb_func_start sub_815C1F0 -sub_815C1F0: @ 815C1F0 - push {r4,lr} - adds r4, r0, 0 - lsls r1, 16 - lsrs r1, 28 - movs r3, 0 - ldrb r0, [r4] - cmp r0, r1 - beq _0815C220 - cmp r0, 0xFF - bne _0815C208 - strb r1, [r4] - b _0815C220 -_0815C208: - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0xF - bhi _0815C220 - adds r2, r4, r3 - ldrb r0, [r2] - cmp r0, r1 - beq _0815C220 - cmp r0, 0xFF - bne _0815C208 - strb r1, [r2] -_0815C220: - movs r0, 0xF - subs r0, r3 - lsls r0, 16 - lsrs r0, 16 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_815C1F0 - - thumb_func_start sub_815C230 -sub_815C230: @ 815C230 - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - movs r4, 0 - ldrb r0, [r5] - cmp r0, 0xFF - beq _0815C274 -_0815C23E: - adds r1, r5, r4 - ldrb r0, [r1] - cmp r0, 0x6 - bls _0815C24A - ldr r0, [r6, 0x14] - b _0815C24C -_0815C24A: - ldr r0, [r6, 0x10] -_0815C24C: - ldrb r1, [r1] - lsls r1, 5 - ldr r0, [r0, 0x8] - adds r0, r1 - movs r1, 0xF - subs r1, r4 - lsls r1, 20 - lsrs r1, 16 - movs r2, 0x20 - bl LoadPalette - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xF - bhi _0815C274 - adds r0, r5, r4 - ldrb r0, [r0] - cmp r0, 0xFF - bne _0815C23E -_0815C274: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_815C230 - - .align 2, 0 @ Don't pad with nop. diff --git a/src/.fuse_hidden00001c3f00000004 b/src/.fuse_hidden00001c3f00000004 deleted file mode 100644 index 8c91f0f46..000000000 --- a/src/.fuse_hidden00001c3f00000004 +++ /dev/null @@ -1,346 +0,0 @@ -#include "main.h" -#include "global.h" -#include "task.h" -#include "menu.h" -#include "palette.h" -#include "sprite.h" -#include "menu_helpers.h" -#include "sound.h" -#include "malloc.h" -#include "sprite.h" -#include "scanline_effect.h" -#include "bg.h" -#include "gpu_regs.h" -#include "decompress.h" -#include "window.h" -#include "list_menu.h" -#include "item.h" -#include "menu_indicators.h" -#include "field_map_obj.h" -#include "random.h" -#include "constants/songs.h" -#include "constants/items.h" - -typedef struct { - void (*callback)(); - u8 mode; - u8 param1; - u16 scrollOffset; - u16 selectedRow; - u8 param4; - u8 filler; -} TeachyTv_s; - -extern TeachyTv_s gTeachyTV_StaticResources; -extern void * gUnknown_203F450; -void C2TeachyTv(); -void C2TeachyTvMainCallback(); -void VblankHandlerTeachyTv(); -void sub_815ABC4(u8 mode, void (*cb)()); -void CB2_ReturnToTeachyTV(); -extern void sub_815AC20(); -void TeachyTvCreateAndRenderRbox(); -void TeachyTvInitIo(); -u8 TeachyTvSetupObjEventAndOam(); -extern void TeachyTvConfigRboxAndObj(u8); -u8 TeachyTvSetupWindow(); -void TeachyTvSetupScrollIndicatorArrowPair(); -void TeachyTvSetWindowRegs(); -void TeachyTvSetupBg(); -void TeachyTvLoadGraphic(); -extern void TeachyTvTaskFunction(u8); -extern void sub_815B2C0(u8); -extern void VblankHblankHandlerSetZero(); -extern void sub_812B1E0(u16); -extern struct BgTemplate gUnknown_84792E0; -extern void *gUnknown_203F450; // tilemap pointer location -extern u8 gUnknown_8E86240; // tilemap -extern u8 gUnknown_8E86BE8; -extern u8 gUnknown_8E86D6C; -extern u8 gUnknown_8E86F98; // pal -extern struct SpritePalette gUnknown_83A5348; -extern void sub_815BD80(void *); -typedef struct Task Task; -extern struct WindowTemplate gUnknown_84792F0; - - -void C2TeachyTv() -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - do_scheduled_bg_tilemap_copies_to_vram(); - UpdatePaletteFade(); -} - -void VblankHandlerTeachyTv() -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -void sub_815ABC4(u8 mode, void (*cb)()) -{ - TeachyTv_s *v3 = &gTeachyTV_StaticResources; - u16 v4 = 0; - v3->mode = mode; - v3->callback = cb; - if(!mode) { - v3->scrollOffset = v4; - v3->selectedRow = v4; - v3->param1 = 0; - } - if(mode == 1) - v3->mode = 0; - SetMainCallback2(C2TeachyTvMainCallback); -} - -void CB2_ReturnToTeachyTV() -{ - if(gTeachyTV_StaticResources.mode == 1) - sub_815ABC4(1,gTeachyTV_StaticResources.callback); - else - sub_815ABC4(2,gTeachyTV_StaticResources.callback); -} - -void sub_815AC20() -{ - gTeachyTV_StaticResources.mode = 1; -} - -void C2TeachyTvMainCallback() -{ - int state; - void *mallocPtr; - int taskId; - Task *taskAddr; - u8 **v4; - u32 x; - - state = gMain.state; - // tried several ways to reproduce the control flow, but all failed. Now using goto - if ( state == 0 ) - goto section_0; - else if ( state == 1 ) - goto section_1; - else - return; - section_0: - v4 = (u8 **)&gUnknown_203F450; - (*v4) = (u8*)AllocZeroed(0x4008u); - *(u32*)gUnknown_203F450 = (u32)state; - *((u8*)gUnknown_203F450 + 0x4006) = state; - *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; - VblankHblankHandlerSetZero(); - clear_scheduled_bg_copies_to_vram(); - ScanlineEffect_Stop(); - FreeAllSpritePalettes(); - ResetPaletteFade(); - ResetSpriteData(); - ResetTasks(); - TeachyTvSetupBg(); - TeachyTvLoadGraphic(); - ++gMain.state; - return; - section_1: - if( free_temp_tile_data_buffers_if_possible() == 1 ) - return; - TeachyTvCreateAndRenderRbox(); - TeachyTvInitIo(); - if ( gTeachyTV_StaticResources.mode == 2 ) - { - taskId = CreateTask(TeachyTvTaskFunction, 0); - gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); - TeachyTvConfigRboxAndObj(taskId); - } - else - { - taskId = CreateTask(sub_815B2C0, 0); - x = (u32)TeachyTvSetupWindow(); - gTasks[taskId].data[0] = (x << 24) >> 24; - gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); - TeachyTvSetupScrollIndicatorArrowPair(); - PlayNewMapMusic(BGM_FRLG_TEACHY_TV); - TeachyTvSetWindowRegs(); - } - schedule_bg_copy_tilemap_to_vram(0); - schedule_bg_copy_tilemap_to_vram(1u); - schedule_bg_copy_tilemap_to_vram(2u); - schedule_bg_copy_tilemap_to_vram(3u); - sub_812B1E0(9); // help system something - BlendPalettes(0xFFFFFFFF, 0x10u, 0); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10u, 0, 0); - SetVBlankCallback(VblankHandlerTeachyTv); - SetMainCallback2(C2TeachyTv); -} - -void TeachyTvSetupBg() -{ - InitBgReg(); - ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, &gUnknown_84792E0, 4u); - SetBgTilemapBuffer(1u, (u8 *)gUnknown_203F450 + 4); - SetBgTilemapBuffer(2u, (u8 *)gUnknown_203F450 + 0x1004); - SetBgTilemapBuffer(3u, (u8 *)gUnknown_203F450 + 0x2004); - SetGpuReg(0, 0x3040u); - ShowBg(0); - ShowBg(1u); - ShowBg(2u); - ShowBg(3u); - ChangeBgX(3u, 0x1000u, 2u); - ChangeBgY(3u, 0x2800u, 1u); - *((u8 *)gUnknown_203F450 + 0x4004) = 0; - *((u8 *)gUnknown_203F450 + 0x4005) = 3; - SetGpuReg(0x50u, 0); -} - -void TeachyTvLoadGraphic() -{ - u16 src; - src = 0; - reset_temp_tile_data_buffers(); - decompress_and_copy_tile_data_to_vram(1u, &gUnknown_8E86240, 0, 0, 0); - LZDecompressWram((u8 *)&gUnknown_8E86BE8, (*(u8 **)&gUnknown_203F450) + 4); - LZDecompressWram((u8 *)&gUnknown_8E86D6C, (*(u8 **)&gUnknown_203F450) + 0x3004); - LoadCompressedPalette(&gUnknown_8E86F98, 0, 0x80u); - LoadPalette(&src, 0, 2u); - LoadSpritePalette((struct SpritePalette *)&gUnknown_83A5348); - sub_815BD80((u8 *)gUnknown_203F450 + 0x2004); -} - -void TeachyTvCreateAndRenderRbox() -{ - InitWindows(&gUnknown_84792F0); - DeactivateAllTextPrinters(); - FillWindowPixelBuffer(0, 0xCCu); - PutWindowTilemap(0); - PutWindowTilemap(1u); - CopyWindowToVram(0, 2u); -} - -extern struct ListMenuTemplate gUnknown_8479368; -extern struct ListMenuItem gUnknown_8479340; -extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); -void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); - -u8 TeachyTvSetupWindow() -{ - int hasItem; - gMultiuseListMenuTemplate = gUnknown_8479368; - gMultiuseListMenuTemplate.windowId = 1; - gMultiuseListMenuTemplate.moveCursorFunc = TeachyTvAudioByInput; - hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1u); - if ( !(hasItem << 24) ) - { - gMultiuseListMenuTemplate.items = &gUnknown_8479340; - gMultiuseListMenuTemplate.totalItems = 5; - gMultiuseListMenuTemplate.maxShowed = 5; - gMultiuseListMenuTemplate.upText_Y = (gMultiuseListMenuTemplate.upText_Y + 8) & 0xF; - } - return ListMenuInit( - &gMultiuseListMenuTemplate, - gTeachyTV_StaticResources.scrollOffset, - gTeachyTV_StaticResources.selectedRow); -} - -extern const struct ScrollArrowsTemplate gUnknown_8479380; - -void TeachyTvSetupScrollIndicatorArrowPair() -{ - int hasItem; - hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1u); - if ( ! hasItem << 24 ) { - u8 * temp = (u8 *)gUnknown_203F450; - *((u8 *)temp + 0x4007) = 0xFF; - } - - else { - u8 *temp, res; - res = AddScrollIndicatorArrowPair( - &gUnknown_8479380, - &(gTeachyTV_StaticResources.scrollOffset)); - temp = (u8 *)gUnknown_203F450; - *((u8 *)temp + 0x4007) = res; - } -} - -void TeachyTvRemoveScrollIndicatorArrowPair() -{ - u8 *temp = ((u8*)gUnknown_203F450 + 0x4007); - if ( *temp != 0xFF ) - { - RemoveScrollIndicatorArrowPair(*temp); - *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; - } -} - -void TeachyTvAudioByInput(s32 notUsed, bool8 play, struct ListMenu *notUsedAlt) -{ - if ( play != 1 ) - PlaySE(SE_SELECT); -} - -void TeachyTvInitIo() -{ - SetGpuReg(0x48u, 0x3Fu); - SetGpuReg(0x4Au, 0x1Fu); - SetGpuReg(0x50u, 0xCCu); - SetGpuReg(0x54u, 5u); -} - -u8 TeachyTvSetupObjEventAndOam() -{ - u8 temp = AddPseudoEventObject(90, SpriteCallbackDummy, 0, 0, 8); - gSprites[temp].oam.priority = 2; - gSprites[temp].invisible = 1; - return temp; -} - -void TeachyTvSetSpriteCoordsAndSwitchFrame(u8 objId, u16 x, u16 y, u8 frame) -{ - gSprites[objId].pos2.x = x; - gSprites[objId].pos2.y = y; - gSprites[objId].invisible = 0; - StartSpriteAnim(&gSprites[objId], frame); -} - -void TeachyTvSetWindowRegs() -{ - SetGpuReg(0x44u, 0xC64u); - SetGpuReg(0x40u, 0x1CD4u); -} - -void TeachyTvClearWindowRegs() -{ - SetGpuReg(0x44u, 0); - SetGpuReg(0x40u, 0); -} - -void TeachyTvBg2AnimController() -{ - u16 *tilemapBuffer; - u8 counter; - u32 offset2; - u32 offset; - u32 counter2; - - tilemapBuffer = (u16 *)GetBgTilemapBuffer(2u); - counter = 1; - do - { - offset2 = 2; - offset = 0x20 * counter; - counter2 = counter + 1; - do - { - tilemapBuffer[offset + offset2] = ((Random() & 3) << 10) + 0x301F; - offset2 = (offset2 + 1) << 0x18 >> 0x18; - } - while ( offset2 <= 0x1B ); - counter = counter2; - } - while ( counter2 << 0x18 >> 0x18 <= 0xCu ); - schedule_bg_copy_tilemap_to_vram(2u); -} - -- cgit v1.2.3 From 9949dcf0e5266017ae4213e043f5e3662d482be9 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 4 Jun 2019 02:45:51 +0800 Subject: fix compile --- data/graphics.s | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/data/graphics.s b/data/graphics.s index 804d42745..284539152 100644 --- a/data/graphics.s +++ b/data/graphics.s @@ -11896,7 +11896,7 @@ gFile_graphics_pokemon_back_pics_unown_b_back_pic:: @ 8E3B884 .align 2 gFile_graphics_pokemon_icons_unown_B_icon:: @ 8E3BA88 - .incbin "graphics/pokemon/unown/B/icon.4bpp" + .incbin "graphics/pokemon/unown/b/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_c_still_front_pic:: @ 8E3BE88 @@ -11908,7 +11908,7 @@ gFile_graphics_pokemon_back_pics_unown_c_back_pic:: @ 8E3C09C .align 2 gFile_graphics_pokemon_icons_unown_C_icon:: @ 8E3C348 - .incbin "graphics/pokemon/unown/C/icon.4bpp" + .incbin "graphics/pokemon/unown/c/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_d_still_front_pic:: @ 8E3C748 @@ -11920,7 +11920,7 @@ gFile_graphics_pokemon_back_pics_unown_d_back_pic:: @ 8E3C940 .align 2 gFile_graphics_pokemon_icons_unown_D_icon:: @ 8E3CB98 - .incbin "graphics/pokemon/unown/D/icon.4bpp" + .incbin "graphics/pokemon/unown/d/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_e_still_front_pic:: @ 8E3CF98 @@ -11932,7 +11932,7 @@ gFile_graphics_pokemon_back_pics_unown_e_back_pic:: @ 8E3D150 .align 2 gFile_graphics_pokemon_icons_unown_E_icon:: @ 8E3D350 - .incbin "graphics/pokemon/unown/E/icon.4bpp" + .incbin "graphics/pokemon/unown/e/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_f_still_front_pic:: @ 8E3D750 @@ -11944,7 +11944,7 @@ gFile_graphics_pokemon_back_pics_unown_f_back_pic:: @ 8E3D944 .align 2 gFile_graphics_pokemon_icons_unown_F_icon:: @ 8E3DB60 - .incbin "graphics/pokemon/unown/F/icon.4bpp" + .incbin "graphics/pokemon/unown/f/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_g_still_front_pic:: @ 8E3DF60 @@ -11956,7 +11956,7 @@ gFile_graphics_pokemon_back_pics_unown_g_back_pic:: @ 8E3E13C .align 2 gFile_graphics_pokemon_icons_unown_G_icon:: @ 8E3E388 - .incbin "graphics/pokemon/unown/G/icon.4bpp" + .incbin "graphics/pokemon/unown/g/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_h_still_front_pic:: @ 8E3E788 @@ -11968,7 +11968,7 @@ gFile_graphics_pokemon_back_pics_unown_h_back_pic:: @ 8E3E9CC .align 2 gFile_graphics_pokemon_icons_unown_H_icon:: @ 8E3EC90 - .incbin "graphics/pokemon/unown/H/icon.4bpp" + .incbin "graphics/pokemon/unown/h/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_i_still_front_pic:: @ 8E3F090 @@ -11980,7 +11980,7 @@ gFile_graphics_pokemon_back_pics_unown_i_back_pic:: @ 8E3F228 .align 2 gFile_graphics_pokemon_icons_unown_I_icon:: @ 8E3F3D0 - .incbin "graphics/pokemon/unown/I/icon.4bpp" + .incbin "graphics/pokemon/unown/i/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_j_still_front_pic:: @ 8E3F7D0 @@ -11992,7 +11992,7 @@ gFile_graphics_pokemon_back_pics_unown_j_back_pic:: @ 8E3F994 .align 2 gFile_graphics_pokemon_icons_unown_J_icon:: @ 8E3FB7C - .incbin "graphics/pokemon/unown/J/icon.4bpp" + .incbin "graphics/pokemon/unown/j/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_k_still_front_pic:: @ 8E3FF7C @@ -12004,7 +12004,7 @@ gFile_graphics_pokemon_back_pics_unown_k_back_pic:: @ 8E4014C .align 2 gFile_graphics_pokemon_icons_unown_K_icon:: @ 8E40344 - .incbin "graphics/pokemon/unown/K/icon.4bpp" + .incbin "graphics/pokemon/unown/k/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_l_still_front_pic:: @ 8E40744 @@ -12016,7 +12016,7 @@ gFile_graphics_pokemon_back_pics_unown_l_back_pic:: @ 8E408F4 .align 2 gFile_graphics_pokemon_icons_unown_L_icon:: @ 8E40AC8 - .incbin "graphics/pokemon/unown/L/icon.4bpp" + .incbin "graphics/pokemon/unown/l/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_m_still_front_pic:: @ 8E40EC8 @@ -12028,7 +12028,7 @@ gFile_graphics_pokemon_back_pics_unown_m_back_pic:: @ 8E410EC .align 2 gFile_graphics_pokemon_icons_unown_M_icon:: @ 8E41394 - .incbin "graphics/pokemon/unown/M/icon.4bpp" + .incbin "graphics/pokemon/unown/m/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_n_still_front_pic:: @ 8E41794 @@ -12040,7 +12040,7 @@ gFile_graphics_pokemon_back_pics_unown_n_back_pic:: @ 8E4198C .align 2 gFile_graphics_pokemon_icons_unown_N_icon:: @ 8E41BF8 - .incbin "graphics/pokemon/unown/N/icon.4bpp" + .incbin "graphics/pokemon/unown/n/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_o_still_front_pic:: @ 8E41FF8 @@ -12052,7 +12052,7 @@ gFile_graphics_pokemon_back_pics_unown_o_back_pic:: @ 8E42230 .align 2 gFile_graphics_pokemon_icons_unown_O_icon:: @ 8E424F0 - .incbin "graphics/pokemon/unown/O/icon.4bpp" + .incbin "graphics/pokemon/unown/o/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_p_still_front_pic:: @ 8E428F0 @@ -12064,7 +12064,7 @@ gFile_graphics_pokemon_back_pics_unown_p_back_pic:: @ 8E42A90 .align 2 gFile_graphics_pokemon_icons_unown_P_icon:: @ 8E42C54 - .incbin "graphics/pokemon/unown/P/icon.4bpp" + .incbin "graphics/pokemon/unown/p/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_q_still_front_pic:: @ 8E43054 @@ -12076,7 +12076,7 @@ gFile_graphics_pokemon_back_pics_unown_q_back_pic:: @ 8E43208 .align 2 gFile_graphics_pokemon_icons_unown_Q_icon:: @ 8E433D4 - .incbin "graphics/pokemon/unown/Q/icon.4bpp" + .incbin "graphics/pokemon/unown/q/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_r_still_front_pic:: @ 8E437D4 @@ -12088,7 +12088,7 @@ gFile_graphics_pokemon_back_pics_unown_r_back_pic:: @ 8E43978 .align 2 gFile_graphics_pokemon_icons_unown_R_icon:: @ 8E43B40 - .incbin "graphics/pokemon/unown/R/icon.4bpp" + .incbin "graphics/pokemon/unown/r/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_s_still_front_pic:: @ 8E43F40 @@ -12100,7 +12100,7 @@ gFile_graphics_pokemon_back_pics_unown_s_back_pic:: @ 8E44128 .align 2 gFile_graphics_pokemon_icons_unown_S_icon:: @ 8E4437C - .incbin "graphics/pokemon/unown/S/icon.4bpp" + .incbin "graphics/pokemon/unown/s/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_t_still_front_pic:: @ 8E4477C @@ -12112,7 +12112,7 @@ gFile_graphics_pokemon_back_pics_unown_t_back_pic:: @ 8E4492C .align 2 gFile_graphics_pokemon_icons_unown_T_icon:: @ 8E44AE0 - .incbin "graphics/pokemon/unown/T/icon.4bpp" + .incbin "graphics/pokemon/unown/t/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_u_still_front_pic:: @ 8E44EE0 @@ -12124,7 +12124,7 @@ gFile_graphics_pokemon_back_pics_unown_u_back_pic:: @ 8E450F8 .align 2 gFile_graphics_pokemon_icons_unown_U_icon:: @ 8E4534C - .incbin "graphics/pokemon/unown/U/icon.4bpp" + .incbin "graphics/pokemon/unown/u/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_v_still_front_pic:: @ 8E4574C @@ -12136,7 +12136,7 @@ gFile_graphics_pokemon_back_pics_unown_v_back_pic:: @ 8E45930 .align 2 gFile_graphics_pokemon_icons_unown_V_icon:: @ 8E45B60 - .incbin "graphics/pokemon/unown/V/icon.4bpp" + .incbin "graphics/pokemon/unown/v/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_w_still_front_pic:: @ 8E45F60 @@ -12148,7 +12148,7 @@ gFile_graphics_pokemon_back_pics_unown_w_back_pic:: @ 8E46134 .align 2 gFile_graphics_pokemon_icons_unown_W_icon:: @ 8E46338 - .incbin "graphics/pokemon/unown/W/icon.4bpp" + .incbin "graphics/pokemon/unown/w/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_x_still_front_pic:: @ 8E46738 @@ -12160,7 +12160,7 @@ gFile_graphics_pokemon_back_pics_unown_x_back_pic:: @ 8E468FC .align 2 gFile_graphics_pokemon_icons_unown_X_icon:: @ 8E46AEC - .incbin "graphics/pokemon/unown/X/icon.4bpp" + .incbin "graphics/pokemon/unown/x/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_y_still_front_pic:: @ 8E46EEC @@ -12172,7 +12172,7 @@ gFile_graphics_pokemon_back_pics_unown_y_back_pic:: @ 8E470C4 .align 2 gFile_graphics_pokemon_icons_unown_Y_icon:: @ 8E472B8 - .incbin "graphics/pokemon/unown/Y/icon.4bpp" + .incbin "graphics/pokemon/unown/y/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_z_still_front_pic:: @ 8E476B8 @@ -12184,7 +12184,7 @@ gFile_graphics_pokemon_back_pics_unown_z_back_pic:: @ 8E47868 .align 2 gFile_graphics_pokemon_icons_unown_Z_icon:: @ 8E47A44 - .incbin "graphics/pokemon/unown/Z/icon.4bpp" + .incbin "graphics/pokemon/unown/z/icon.4bpp" .align 2 gFile_graphics_pokemon_front_pics_unown_exclamation_mark_still_front_pic:: @ 8E47E44 -- cgit v1.2.3 From f9f66ddeb428857f3e7c3d920fcce807948ef8ab Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 4 Jun 2019 06:28:00 +0800 Subject: sub_815B118 --- asm/teachy_tv.s | 104 ++++---------------------------------------------------- src/teachy_tv.c | 31 ++++++++++++++++- 2 files changed, 37 insertions(+), 98 deletions(-) diff --git a/asm/teachy_tv.s b/asm/teachy_tv.s index f19915d6e..53ca52ccb 100644 --- a/asm/teachy_tv.s +++ b/asm/teachy_tv.s @@ -5,96 +5,6 @@ .text - thumb_func_start TeachyTvSetupPostBattleWindowAndObj -TeachyTvSetupPostBattleWindowAndObj: @ 815B118 - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _0815B190 @ =gTasks+0x8 - adds r5, r0, r1 - movs r0, 0x2 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0815B194 @ =gSprites - adds r7, r0, r1 - movs r0, 0x1 - bl ClearWindowTilemap - bl TeachyTvClearWindowRegs - ldr r0, _0815B198 @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x5] - cmp r0, 0 - blt _0815B1B8 - cmp r0, 0x3 - bgt _0815B1A8 - ldrb r0, [r5, 0x2] - movs r1, 0x78 - movs r2, 0x38 - movs r3, 0 - bl TeachyTvSetSpriteCoordsAndSwitchFrame - movs r4, 0xC0 - lsls r4, 6 - movs r0, 0x3 - adds r1, r4, 0 - movs r2, 0x1 - bl ChangeBgX - movs r0, 0x3 - adds r1, r4, 0 - movs r2, 0x2 - bl ChangeBgY - ldr r2, _0815B19C @ =gUnknown_203F450 - ldr r1, [r2] - ldr r0, _0815B1A0 @ =0x00004004 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x3 - strb r0, [r1] - ldr r1, [r2] - ldr r0, _0815B1A4 @ =0x00004005 - adds r1, r0 - ldrb r0, [r1] - subs r0, 0x3 - strb r0, [r1] - b _0815B1B8 - .align 2, 0 -_0815B190: .4byte gTasks+0x8 -_0815B194: .4byte gSprites -_0815B198: .4byte gTeachyTV_StaticResources -_0815B19C: .4byte gUnknown_203F450 -_0815B1A0: .4byte 0x00004004 -_0815B1A4: .4byte 0x00004005 -_0815B1A8: - cmp r0, 0x5 - bgt _0815B1B8 - ldrb r0, [r5, 0x2] - movs r1, 0x78 - movs r2, 0x38 - movs r3, 0 - bl TeachyTvSetSpriteCoordsAndSwitchFrame -_0815B1B8: - movs r0, 0 - strh r0, [r5, 0x8] - strh r0, [r5, 0xA] - movs r0, 0x24 - ldrsh r1, [r7, r0] - movs r0, 0x26 - ldrsh r2, [r7, r0] - movs r0, 0x1 - str r0, [sp] - adds r0, r6, 0 - movs r3, 0 - bl sub_815BAA0 - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end TeachyTvSetupPostBattleWindowAndObj - thumb_func_start sub_815B1DC sub_815B1DC: @ 815B1DC push {r4,lr} @@ -758,7 +668,7 @@ sub_815B6A8: @ 815B6A8 str r3, [sp] adds r0, r5, 0 movs r3, 0 - bl sub_815BAA0 + bl TeachyTvGrassAnimationMain _0815B702: movs r1, 0x4 ldrsh r0, [r4, r1] @@ -843,7 +753,7 @@ _0815B78A: str r0, [sp] adds r0, r5, 0 movs r3, 0 - bl sub_815BAA0 + bl TeachyTvGrassAnimationMain _0815B7AC: movs r1, 0x4 ldrsh r0, [r4, r1] @@ -907,7 +817,7 @@ sub_815B7E4: @ 815B7E4 str r0, [sp] adds r0, r6, 0 movs r3, 0 - bl sub_815BAA0 + bl TeachyTvGrassAnimationMain add sp, 0x4 pop {r4-r6} pop {r0} @@ -948,7 +858,7 @@ sub_815B840: @ 815B840 str r0, [sp] adds r0, r3, 0 movs r3, 0 - bl sub_815BAA0 + bl TeachyTvGrassAnimationMain _0815B87E: ldrh r1, [r4, 0x24] movs r2, 0x24 @@ -1225,8 +1135,8 @@ _0815BA98: .4byte gTeachyTV_StaticResources _0815BA9C: .4byte sub_815B4EC thumb_func_end TeachyTvPostBattleFadeControl - thumb_func_start sub_815BAA0 -sub_815BAA0: @ 815BAA0 + thumb_func_start TeachyTvGrassAnimationMain +TeachyTvGrassAnimationMain: @ 815BAA0 push {r4-r7,lr} mov r7, r9 mov r6, r8 @@ -1321,7 +1231,7 @@ _0815BB5C: bx r0 .align 2, 0 _0815BB68: .4byte gUnknown_84795B8 - thumb_func_end sub_815BAA0 + thumb_func_end TeachyTvGrassAnimationMain thumb_func_start sub_815BB6C sub_815BB6C: @ 815BB6C diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 750aa0dfb..48b72c995 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -43,7 +43,7 @@ extern void sub_815AC20(); void TeachyTvCreateAndRenderRbox(); void TeachyTvInitIo(); u8 TeachyTvSetupObjEventAndOam(); -extern void TeachyTvSetupPostBattleWindowAndObj(u8); +void TeachyTvSetupPostBattleWindowAndObj(u8); u8 TeachyTvSetupWindow(); void TeachyTvSetupScrollIndicatorArrowPair(); void TeachyTvSetWindowRegs(); @@ -344,3 +344,32 @@ void TeachyTvBg2AnimController() schedule_bg_copy_tilemap_to_vram(2u); } +extern void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); + +void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) +{ + u16 *v2 = gTasks[taskId].data; + int v1 = ((s16 *)v2)[1]; + struct Sprite *v3 = &gSprites[v1]; + int op; + + ClearWindowTilemap(1u); + TeachyTvClearWindowRegs(); + op = gTeachyTV_StaticResources.optionChosen; + if ( op >= 0 ) { + if ( op <= 3 ) + { + TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0); + ChangeBgX(3u, 0x3000u, 1u); + ChangeBgY(3u, 0x3000u, 2u); + *((u8 *)gUnknown_203F450 + 0x4004) += 3; + *((u8 *)gUnknown_203F450 + 0x4005) -= 3; + } + else if ( op <= 5 ) + TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0); + } + + v2[4] = 0; + v2[5] = 0; + TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 1u); +} \ No newline at end of file -- cgit v1.2.3 From a9c9388cdd51216bdf5a5db125eaab0fc3163c67 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 4 Jun 2019 13:45:58 +0800 Subject: killed by large function --- asm/teachy_tv.s | 155 +++++++------------------------------------------------- src/teachy_tv.c | 66 +++++++++++++++++++----- 2 files changed, 72 insertions(+), 149 deletions(-) diff --git a/asm/teachy_tv.s b/asm/teachy_tv.s index 53ca52ccb..1d00e57cf 100644 --- a/asm/teachy_tv.s +++ b/asm/teachy_tv.s @@ -5,127 +5,8 @@ .text - thumb_func_start sub_815B1DC -sub_815B1DC: @ 815B1DC - push {r4,lr} - sub sp, 0x10 - adds r4, r0, 0 - ldr r2, _0815B21C @ =gTextFlags - ldrb r1, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - bl GetTextSpeedSetting - adds r3, r0, 0 - lsls r3, 24 - lsrs r3, 24 - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - movs r0, 0xC - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x4 - adds r2, r4, 0 - bl AddTextPrinterParameterized2 - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B21C: .4byte gTextFlags - thumb_func_end sub_815B1DC - - thumb_func_start sub_815B220 -sub_815B220: @ 815B220 - push {r4,lr} - ldr r4, _0815B238 @ =gUnknown_203F450 - ldr r0, [r4] - bl Free - movs r0, 0 - str r0, [r4] - bl FreeAllWindowBuffers - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B238: .4byte gUnknown_203F450 - thumb_func_end sub_815B220 - - thumb_func_start sub_815B23C -sub_815B23C: @ 815B23C - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _0815B26C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0815B270 @ =sub_815B274 - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B26C: .4byte gTasks -_0815B270: .4byte sub_815B274 - thumb_func_end sub_815B23C - - thumb_func_start sub_815B274 -sub_815B274: @ 815B274 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0815B298 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0815B2B6 - ldr r0, _0815B29C @ =gUnknown_203F450 - ldr r0, [r0] - ldr r0, [r0] - cmp r0, 0 - beq _0815B2A0 - bl SetMainCallback2 - b _0815B2AC - .align 2, 0 -_0815B298: .4byte gPaletteFade -_0815B29C: .4byte gUnknown_203F450 -_0815B2A0: - bl sub_8055DC4 - ldr r0, _0815B2BC @ =gTeachyTV_StaticResources - ldr r0, [r0] - bl SetMainCallback2 -_0815B2AC: - bl sub_815B220 - adds r0, r4, 0 - bl DestroyTask -_0815B2B6: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B2BC: .4byte gTeachyTV_StaticResources - thumb_func_end sub_815B274 - - thumb_func_start sub_815B2C0 -sub_815B2C0: @ 815B2C0 + thumb_func_start TeachyTvOptionListController +TeachyTvOptionListController: @ 815B2C0 push {r4-r7,lr} lsls r0, 24 lsrs r7, r0, 24 @@ -179,7 +60,7 @@ _0815B330: movs r0, 0x5 bl PlaySE adds r0, r7, 0 - bl sub_815B23C + bl TeachyTvQuitBeginFade b _0815B37A _0815B33E: movs r0, 0x5 @@ -204,7 +85,7 @@ _0815B33E: adds r0, r7 lsls r0, 3 adds r0, r1 - ldr r1, _0815B388 @ =sub_815B4EC + ldr r1, _0815B388 @ =TeachyTvRenderMsgAndSwitchClusterFuncs str r1, [r0] _0815B37A: pop {r4-r7} @@ -213,8 +94,8 @@ _0815B37A: .align 2, 0 _0815B380: .4byte gTeachyTV_StaticResources _0815B384: .4byte gTasks -_0815B388: .4byte sub_815B4EC - thumb_func_end sub_815B2C0 +_0815B388: .4byte TeachyTvRenderMsgAndSwitchClusterFuncs + thumb_func_end TeachyTvOptionListController thumb_func_start sub_815B38C sub_815B38C: @ 815B38C @@ -355,7 +236,7 @@ _0815B48C: movs r1, 0 bl StartSpriteAnim ldr r0, _0815B4B0 @ =gUnknown_841B83D - bl sub_815B1DC + bl TeachyTvInitTextPrinter movs r0, 0 strh r0, [r4, 0x4] ldrh r0, [r4, 0x6] @@ -399,8 +280,8 @@ _0815B4E2: _0815B4E8: .4byte gTasks+0x8 thumb_func_end sub_815B4C0 - thumb_func_start sub_815B4EC -sub_815B4EC: @ 815B4EC + thumb_func_start TeachyTvRenderMsgAndSwitchClusterFuncs +TeachyTvRenderMsgAndSwitchClusterFuncs: @ 815B4EC push {r4-r7,lr} lsls r0, 24 lsrs r2, r0, 24 @@ -469,7 +350,7 @@ _0815B578: .align 2, 0 _0815B580: .4byte gUnknown_8479548 _0815B584: .4byte gTeachyTV_StaticResources - thumb_func_end sub_815B4EC + thumb_func_end TeachyTvRenderMsgAndSwitchClusterFuncs thumb_func_start sub_815B588 sub_815B588: @ 815B588 @@ -487,7 +368,7 @@ sub_815B588: @ 815B588 lsls r0, 2 adds r0, r1 ldr r0, [r0] - bl sub_815B1DC + bl TeachyTvInitTextPrinter ldrh r0, [r4, 0x6] adds r0, 0x1 strh r0, [r4, 0x6] @@ -516,7 +397,7 @@ sub_815B5C0: @ 815B5C0 lsls r0, 2 adds r0, r1 ldr r0, [r0] - bl sub_815B1DC + bl TeachyTvInitTextPrinter ldrh r0, [r4, 0x6] adds r0, 0x1 strh r0, [r4, 0x6] @@ -990,7 +871,7 @@ _0815B94C: adds r0, r7, 0 subs r0, 0x8 adds r0, r6, r0 - ldr r1, _0815B9E0 @ =sub_815B2C0 + ldr r1, _0815B9E0 @ =TeachyTvOptionListController str r1, [r0] movs r0, 0 bl PutWindowTilemap @@ -1036,7 +917,7 @@ _0815B9D4: bx r0 .align 2, 0 _0815B9DC: .4byte gTasks+0x8 -_0815B9E0: .4byte sub_815B2C0 +_0815B9E0: .4byte TeachyTvOptionListController _0815B9E4: .4byte gUnknown_203F450 _0815B9E8: .4byte 0x00004004 _0815B9EC: .4byte 0x00004006 @@ -1067,7 +948,7 @@ _0815BA10: ldr r0, _0815BA2C @ =sub_815BA30 str r0, [r1] adds r0, r2, 0 - bl sub_815B23C + bl TeachyTvQuitBeginFade _0815BA22: pop {r0} bx r0 @@ -1121,7 +1002,7 @@ TeachyTvPostBattleFadeControl: @ 815BA54 adds r0, r4, 0 subs r0, 0x8 adds r0, r2, r0 - ldr r1, _0815BA9C @ =sub_815B4EC + ldr r1, _0815BA9C @ =TeachyTvRenderMsgAndSwitchClusterFuncs str r1, [r0] _0815BA86: pop {r4} @@ -1132,7 +1013,7 @@ _0815BA8C: .4byte gTasks+0x8 _0815BA90: .4byte gPaletteFade _0815BA94: .4byte gUnknown_8479390 _0815BA98: .4byte gTeachyTV_StaticResources -_0815BA9C: .4byte sub_815B4EC +_0815BA9C: .4byte TeachyTvRenderMsgAndSwitchClusterFuncs thumb_func_end TeachyTvPostBattleFadeControl thumb_func_start TeachyTvGrassAnimationMain @@ -1395,7 +1276,7 @@ sub_815BC90: @ 815BC90 lsls r0, 3 ldr r1, _0815BCCC @ =gTasks+0x8 adds r5, r0, r1 - bl sub_815B220 + bl TeachyTvFree ldr r1, _0815BCD0 @ =gSpecialVar_0x8004 ldr r4, _0815BCD4 @ =gTeachyTV_StaticResources ldrb r0, [r4, 0x5] diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 48b72c995..f70f1d130 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -5,6 +5,7 @@ #include "palette.h" #include "sprite.h" #include "menu_helpers.h" +#include "new_menu_helpers.h" #include "sound.h" #include "malloc.h" #include "sprite.h" @@ -14,6 +15,7 @@ #include "decompress.h" #include "window.h" #include "list_menu.h" +#include "item_menu.h" #include "item.h" #include "menu_indicators.h" #include "field_map_obj.h" @@ -50,7 +52,7 @@ void TeachyTvSetWindowRegs(); void TeachyTvSetupBg(); void TeachyTvLoadGraphic(); extern void TeachyTvPostBattleFadeControl(u8); -extern void sub_815B2C0(u8); +extern void TeachyTvOptionListController(u8); extern void VblankHblankHandlerSetZero(); extern void sub_812B1E0(u16); extern struct BgTemplate gUnknown_84792E0; @@ -63,6 +65,15 @@ extern struct SpritePalette gUnknown_83A5348; extern void sub_815BD80(void *); typedef struct Task Task; extern struct WindowTemplate gUnknown_84792F0; +extern void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId); +extern struct ListMenuTemplate gUnknown_8479368; +extern struct ListMenuItem gUnknown_8479340; +extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); +void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); +extern void sub_8055DC4(); +extern void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); +extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; +extern void TeachyTvQuitFadeControlAndTaskDel(u8 taskId); void C2TeachyTv() @@ -156,7 +167,7 @@ void C2TeachyTvMainCallback() } else { - taskId = CreateTask(sub_815B2C0, 0); + taskId = CreateTask(TeachyTvOptionListController, 0); x = (u32)TeachyTvSetupWindow(); gTasks[taskId].data[0] = (x << 24) >> 24; gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); @@ -219,11 +230,6 @@ void TeachyTvCreateAndRenderRbox() CopyWindowToVram(0, 2u); } -extern struct ListMenuTemplate gUnknown_8479368; -extern struct ListMenuItem gUnknown_8479340; -extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); -void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); - u8 TeachyTvSetupWindow() { int hasItem; @@ -244,8 +250,6 @@ u8 TeachyTvSetupWindow() gTeachyTV_StaticResources.selectedRow); } -extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; - void TeachyTvSetupScrollIndicatorArrowPair() { int hasItem; @@ -344,8 +348,6 @@ void TeachyTvBg2AnimController() schedule_bg_copy_tilemap_to_vram(2u); } -extern void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); - void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) { u16 *v2 = gTasks[taskId].data; @@ -372,4 +374,44 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) v2[4] = 0; v2[5] = 0; TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 1u); -} \ No newline at end of file +} + +void TeachyTvInitTextPrinter(char *text) +{ + u8 spd; + gTextFlags.autoScroll = 0; + spd = GetTextSpeedSetting(); + AddTextPrinterParameterized2(0, 4u, (const u8 *)text, spd, 0, 1u, 0xCu, 3u); +} + +void TeachyTvFree() +{ + Free(gUnknown_203F450); + gUnknown_203F450 = NULL; + FreeAllWindowBuffers(); +} + +void TeachyTvQuitBeginFade(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10u, 0); + gTasks[taskId].func = TeachyTvQuitFadeControlAndTaskDel; +} + +void TeachyTvQuitFadeControlAndTaskDel(u8 taskId) +{ + if ( !(gPaletteFade.active) ) + { + if ( *(u32 *)gUnknown_203F450 ) + { + SetMainCallback2(*(void (**)())gUnknown_203F450); + } + else + { + sub_8055DC4(); + SetMainCallback2((void (*)())gTeachyTV_StaticResources.callback); + } + TeachyTvFree(); + DestroyTask(taskId); + } +} + -- cgit v1.2.3 From e07151b34621ba17904871b17e2be8638b584d14 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Wed, 5 Jun 2019 08:19:12 +0800 Subject: 1 failed attempt + many more functions --- asm/teachy_tv.s | 514 +------------------------------------------------------- src/teachy_tv.c | 297 +++++++++++++++++++++++++++++++- 2 files changed, 295 insertions(+), 516 deletions(-) diff --git a/asm/teachy_tv.s b/asm/teachy_tv.s index 1d00e57cf..1098956c0 100644 --- a/asm/teachy_tv.s +++ b/asm/teachy_tv.s @@ -5,506 +5,6 @@ .text - thumb_func_start TeachyTvOptionListController -TeachyTvOptionListController: @ 815B2C0 - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - ldr r1, _0815B31C @ =gTasks+0x8 - adds r6, r0, r1 - bl TeachyTvBg2AnimController - ldr r0, _0815B320 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0815B37A - ldrb r0, [r6] - bl ListMenuHandleInput - adds r5, r0, 0 - ldrb r0, [r6] - ldr r4, _0815B324 @ =gTeachyTV_StaticResources+6 - adds r2, r4, 0x2 - adds r1, r4, 0 - bl ListMenuGetScrollAndRow - ldr r0, _0815B328 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0815B30A - subs r0, r4, 0x6 - ldr r1, [r0] - ldr r0, _0815B32C @ =UseFameCheckerFromMenu - cmp r1, r0 - bne _0815B330 -_0815B30A: - movs r0, 0x2 - negs r0, r0 - cmp r5, r0 - beq _0815B330 - adds r0, 0x1 - cmp r5, r0 - bne _0815B33E - b _0815B37A - .align 2, 0 -_0815B31C: .4byte gTasks+0x8 -_0815B320: .4byte gPaletteFade -_0815B324: .4byte gTeachyTV_StaticResources+6 -_0815B328: .4byte gMain -_0815B32C: .4byte UseFameCheckerFromMenu -_0815B330: - movs r0, 0x5 - bl PlaySE - adds r0, r7, 0 - bl TeachyTvQuitBeginFade - b _0815B37A -_0815B33E: - movs r0, 0x5 - bl PlaySE - ldr r2, _0815B380 @ =gTeachyTV_StaticResources - movs r4, 0 - strb r5, [r2, 0x5] - ldrb r0, [r6] - adds r1, r2, 0x6 - adds r2, 0x8 - bl DestroyListMenu - bl TeachyTvClearWindowRegs - movs r0, 0x1 - bl ClearWindowTilemap - movs r0, 0 - bl schedule_bg_copy_tilemap_to_vram - bl TeachyTvRemoveScrollIndicatorArrowPair - strh r4, [r6, 0x6] - strh r4, [r6, 0x4] - ldr r1, _0815B384 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r1 - ldr r1, _0815B388 @ =TeachyTvRenderMsgAndSwitchClusterFuncs - str r1, [r0] -_0815B37A: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815B380: .4byte gTeachyTV_StaticResources -_0815B384: .4byte gTasks -_0815B388: .4byte TeachyTvRenderMsgAndSwitchClusterFuncs - thumb_func_end TeachyTvOptionListController - - thumb_func_start sub_815B38C -sub_815B38C: @ 815B38C - push {r4,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0815B3F8 @ =gTasks+0x8 - adds r4, r1, r0 - bl TeachyTvBg2AnimController - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3F - ble _0815B3F0 - ldr r0, _0815B3FC @ =gUnknown_203F450 - ldr r1, [r0] - ldr r0, _0815B400 @ =0x00003004 - adds r1, r0 - movs r0, 0x20 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0x11 - str r0, [sp, 0x8] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBufferRect_ChangePalette - ldrb r0, [r4, 0x2] - movs r1, 0x8 - movs r2, 0x38 - movs r3, 0x7 - bl TeachyTvSetSpriteCoordsAndSwitchFrame - movs r0, 0x2 - bl schedule_bg_copy_tilemap_to_vram - movs r0, 0 - strh r0, [r4, 0x4] - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] - movs r0, 0x88 - lsls r0, 1 - bl PlayNewMapMusic -_0815B3F0: - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B3F8: .4byte gTasks+0x8 -_0815B3FC: .4byte gUnknown_203F450 -_0815B400: .4byte 0x00003004 - thumb_func_end sub_815B38C - - thumb_func_start sub_815B404 -sub_815B404: @ 815B404 - push {r4,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0815B450 @ =gTasks+0x8 - adds r4, r1, r0 - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x86 - bne _0815B448 - movs r0, 0x1A - str r0, [sp] - movs r0, 0xC - str r0, [sp, 0x4] - movs r0, 0x2 - movs r1, 0 - movs r2, 0x2 - movs r3, 0x1 - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0x2 - bl schedule_bg_copy_tilemap_to_vram - movs r0, 0 - strh r0, [r4, 0x4] - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0815B448: - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B450: .4byte gTasks+0x8 - thumb_func_end sub_815B404 - - thumb_func_start sub_815B454 -sub_815B454: @ 815B454 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0815B484 @ =gTasks+0x8 - adds r4, r1, r0 - movs r0, 0x2 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0815B488 @ =gSprites - adds r1, r0, r1 - ldrh r2, [r4, 0x4] - movs r3, 0x4 - ldrsh r0, [r4, r3] - cmp r0, 0x23 - beq _0815B48C - adds r0, r2, 0x1 - strh r0, [r4, 0x4] - b _0815B4B8 - .align 2, 0 -_0815B484: .4byte gTasks+0x8 -_0815B488: .4byte gSprites -_0815B48C: - ldrh r2, [r1, 0x24] - movs r3, 0x24 - ldrsh r0, [r1, r3] - cmp r0, 0x78 - bne _0815B4B4 - adds r0, r1, 0 - movs r1, 0 - bl StartSpriteAnim - ldr r0, _0815B4B0 @ =gUnknown_841B83D - bl TeachyTvInitTextPrinter - movs r0, 0 - strh r0, [r4, 0x4] - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] - b _0815B4B8 - .align 2, 0 -_0815B4B0: .4byte gUnknown_841B83D -_0815B4B4: - adds r0, r2, 0x1 - strh r0, [r1, 0x24] -_0815B4B8: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_815B454 - - thumb_func_start sub_815B4C0 -sub_815B4C0: @ 815B4C0 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0815B4E8 @ =gTasks+0x8 - adds r4, r1, r0 - movs r0, 0 - bl sub_80BF518 - lsls r0, 16 - cmp r0, 0 - bne _0815B4E2 - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0815B4E2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B4E8: .4byte gTasks+0x8 - thumb_func_end sub_815B4C0 - - thumb_func_start TeachyTvRenderMsgAndSwitchClusterFuncs -TeachyTvRenderMsgAndSwitchClusterFuncs: @ 815B4EC - push {r4-r7,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r6, r0, 3 - ldr r7, _0815B548 @ =gTasks+0x8 - adds r5, r6, r7 - ldr r0, _0815B54C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0815B55C - ldr r0, _0815B550 @ =gUnknown_203F450 - ldr r0, [r0] - ldr r1, _0815B554 @ =0x00004006 - adds r0, r1 - movs r4, 0 - movs r1, 0x1 - strb r1, [r0] - ldrb r0, [r5, 0x2] - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl TeachyTvSetSpriteCoordsAndSwitchFrame - movs r0, 0 - movs r1, 0xCC - bl FillWindowPixelBuffer - movs r0, 0 - movs r1, 0x2 - bl CopyWindowToVram - bl sub_815B908 - strh r4, [r5, 0x4] - strh r4, [r5, 0x6] - adds r0, r7, 0 - subs r0, 0x8 - adds r0, r6, r0 - ldr r1, _0815B558 @ =sub_815B92C - str r1, [r0] - b _0815B578 - .align 2, 0 -_0815B548: .4byte gTasks+0x8 -_0815B54C: .4byte gMain -_0815B550: .4byte gUnknown_203F450 -_0815B554: .4byte 0x00004006 -_0815B558: .4byte sub_815B92C -_0815B55C: - ldr r1, _0815B580 @ =gUnknown_8479548 - ldr r0, _0815B584 @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x5] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - movs r3, 0x6 - ldrsh r0, [r5, r3] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - adds r0, r2, 0 - bl _call_via_r1 -_0815B578: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815B580: .4byte gUnknown_8479548 -_0815B584: .4byte gTeachyTV_StaticResources - thumb_func_end TeachyTvRenderMsgAndSwitchClusterFuncs - - thumb_func_start sub_815B588 -sub_815B588: @ 815B588 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _0815B5B4 @ =gTasks+0x8 - adds r4, r0 - ldr r1, _0815B5B8 @ =gUnknown_8479560 - ldr r0, _0815B5BC @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x5] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl TeachyTvInitTextPrinter - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B5B4: .4byte gTasks+0x8 -_0815B5B8: .4byte gUnknown_8479560 -_0815B5BC: .4byte gTeachyTV_StaticResources - thumb_func_end sub_815B588 - - thumb_func_start sub_815B5C0 -sub_815B5C0: @ 815B5C0 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _0815B5EC @ =gTasks+0x8 - adds r4, r0 - ldr r1, _0815B5F0 @ =gUnknown_8479578 - ldr r0, _0815B5F4 @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x5] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl TeachyTvInitTextPrinter - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B5EC: .4byte gTasks+0x8 -_0815B5F0: .4byte gUnknown_8479578 -_0815B5F4: .4byte gTeachyTV_StaticResources - thumb_func_end sub_815B5C0 - - thumb_func_start sub_815B5F8 -sub_815B5F8: @ 815B5F8 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0815B620 @ =gTasks+0x8 - adds r4, r1, r0 - movs r0, 0 - bl sub_80BF518 - lsls r0, 16 - cmp r0, 0 - bne _0815B61A - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0815B61A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B620: .4byte gTasks+0x8 - thumb_func_end sub_815B5F8 - - thumb_func_start sub_815B624 -sub_815B624: @ 815B624 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0815B65C @ =gTasks+0x8 - adds r4, r1, r0 - ldr r0, _0815B660 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _0815B656 - movs r0, 0 - movs r1, 0xCC - bl FillWindowPixelBuffer - movs r0, 0 - movs r1, 0x2 - bl CopyWindowToVram - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0815B656: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B65C: .4byte gTasks+0x8 -_0815B660: .4byte gMain - thumb_func_end sub_815B624 - - thumb_func_start sub_815B664 -sub_815B664: @ 815B664 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _0815B6A0 @ =gTasks+0x8 - adds r4, r0 - movs r0, 0x2 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0815B6A4 @ =gSprites - adds r0, r1 - movs r1, 0x5 - bl StartSpriteAnim - movs r0, 0 - strh r0, [r4, 0x4] - strh r0, [r4, 0x8] - movs r0, 0x1 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B6A0: .4byte gTasks+0x8 -_0815B6A4: .4byte gSprites - thumb_func_end sub_815B664 - thumb_func_start sub_815B6A8 sub_815B6A8: @ 815B6A8 push {r4-r6,lr} @@ -799,7 +299,7 @@ _0815B8DC: asrs r0, 16 cmp r0, 0x7E ble _0815B8F8 - bl sub_815B908 + bl TeachyTvClearBg1EndGraphicalText movs r0, 0 strh r0, [r4, 0x4] ldrh r0, [r4, 0x6] @@ -815,8 +315,8 @@ _0815B900: .4byte gTasks+0x8 _0815B904: .4byte gUnknown_8479590 thumb_func_end sub_815B8A4 - thumb_func_start sub_815B908 -sub_815B908: @ 815B908 + thumb_func_start TeachyTvClearBg1EndGraphicalText +TeachyTvClearBg1EndGraphicalText: @ 815B908 push {lr} sub sp, 0x8 movs r0, 0x8 @@ -833,10 +333,10 @@ sub_815B908: @ 815B908 add sp, 0x8 pop {r0} bx r0 - thumb_func_end sub_815B908 + thumb_func_end TeachyTvClearBg1EndGraphicalText - thumb_func_start sub_815B92C -sub_815B92C: @ 815B92C + thumb_func_start TeachyTvBackToOptionList +TeachyTvBackToOptionList: @ 815B92C push {r4-r7,lr} lsls r0, 24 lsrs r0, 24 @@ -921,7 +421,7 @@ _0815B9E0: .4byte TeachyTvOptionListController _0815B9E4: .4byte gUnknown_203F450 _0815B9E8: .4byte 0x00004004 _0815B9EC: .4byte 0x00004006 - thumb_func_end sub_815B92C + thumb_func_end TeachyTvBackToOptionList thumb_func_start sub_815B9F0 sub_815B9F0: @ 815B9F0 diff --git a/src/teachy_tv.c b/src/teachy_tv.c index f70f1d130..3549ec9b0 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -41,7 +41,7 @@ void C2TeachyTvMainCallback(); void VblankHandlerTeachyTv(); void sub_815ABC4(u8 mode, void (*cb)()); void sub_815ABFC(); -extern void sub_815AC20(); +void sub_815AC20(); void TeachyTvCreateAndRenderRbox(); void TeachyTvInitIo(); u8 TeachyTvSetupObjEventAndOam(); @@ -51,8 +51,8 @@ void TeachyTvSetupScrollIndicatorArrowPair(); void TeachyTvSetWindowRegs(); void TeachyTvSetupBg(); void TeachyTvLoadGraphic(); -extern void TeachyTvPostBattleFadeControl(u8); -extern void TeachyTvOptionListController(u8); +void TeachyTvPostBattleFadeControl(u8); +void TeachyTvOptionListController(u8); extern void VblankHblankHandlerSetZero(); extern void sub_812B1E0(u16); extern struct BgTemplate gUnknown_84792E0; @@ -65,7 +65,7 @@ extern struct SpritePalette gUnknown_83A5348; extern void sub_815BD80(void *); typedef struct Task Task; extern struct WindowTemplate gUnknown_84792F0; -extern void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId); +void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId); extern struct ListMenuTemplate gUnknown_8479368; extern struct ListMenuItem gUnknown_8479340; extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); @@ -73,8 +73,15 @@ void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); extern void sub_8055DC4(); extern void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; -extern void TeachyTvQuitFadeControlAndTaskDel(u8 taskId); - +void TeachyTvQuitFadeControlAndTaskDel(u8 taskId); +extern char gUnknown_841B83D; +extern bool16 sub_80BF518(u8 textPrinterId); +extern void _call_via_r1(s32 arg, void *func); +extern void (**gUnknown_8479548)(u8); +extern void TeachyTvClearBg1EndGraphicalText(); +extern void TeachyTvBackToOptionList(u8 taskId); +extern char * gUnknown_8479560; +extern char * gUnknown_8479578; void C2TeachyTv() { @@ -98,7 +105,8 @@ void sub_815ABC4(u8 mode, void (*cb)()) u16 v4 = 0; v3->mode = mode; v3->callback = cb; - if(!mode) { + if(!mode) + { v3->scrollOffset = v4; v3->selectedRow = v4; v3->optionChosen = 0; @@ -254,7 +262,8 @@ void TeachyTvSetupScrollIndicatorArrowPair() { int hasItem; hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1u); - if ( ! hasItem << 24 ) { + if ( ! hasItem << 24 ) + { u8 * temp = (u8 *)gUnknown_203F450; *((u8 *)temp + 0x4007) = 0xFF; } @@ -358,7 +367,8 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) ClearWindowTilemap(1u); TeachyTvClearWindowRegs(); op = gTeachyTV_StaticResources.optionChosen; - if ( op >= 0 ) { + if ( op >= 0 ) + { if ( op <= 3 ) { TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0); @@ -415,3 +425,272 @@ void TeachyTvQuitFadeControlAndTaskDel(u8 taskId) } } +#ifdef NONMATCHING +void TeachyTvOptionListController(u8 taskId) +{ + char *v2; + s32 v3; + + v2 = (char *)gTasks[taskId].data; + TeachyTvBg2AnimController(); + if ( !(gPaletteFade.active) ) + { + v3 = ListMenuHandleInput(*v2); + ListMenuGetScrollAndRow(*v2, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); + if ( ((gMain.newKeys) & 4 && (gTeachyTV_StaticResources.callback != UseFameCheckerFromMenu)) + || (v3 == -2) ) + { + PlaySE(SE_SELECT); + TeachyTvQuitBeginFade(taskId); + } + else if ( v3 != -1 ) + { + PlaySE(SE_SELECT); + gTeachyTV_StaticResources.optionChosen = v3; + DestroyListMenu(*v2, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); + TeachyTvClearWindowRegs(); + ClearWindowTilemap(1u); + schedule_bg_copy_tilemap_to_vram(0); + TeachyTvRemoveScrollIndicatorArrowPair(); + *((u16 *)v2 + 3) = 0; + *((u16 *)v2 + 2) = 0; + gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs; + } + } +} + +#else +__attribute__((naked)) +void TeachyTvOptionListController(u8 taskId) +{ + asm_unified("\n\ + push {r4-r7,lr}\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + lsls r0, r7, 2\n\ + adds r0, r7\n\ + lsls r0, 3\n\ + ldr r1, _0815B31C @ =gTasks+0x8\n\ + adds r6, r0, r1\n\ + bl TeachyTvBg2AnimController\n\ + ldr r0, _0815B320 @ =gPaletteFade\n\ + ldrb r1, [r0, 0x7]\n\ + movs r0, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0815B37A\n\ + ldrb r0, [r6]\n\ + bl ListMenuHandleInput\n\ + adds r5, r0, 0\n\ + ldrb r0, [r6]\n\ + ldr r4, _0815B324 @ =gTeachyTV_StaticResources+6\n\ + adds r2, r4, 0x2\n\ + adds r1, r4, 0\n\ + bl ListMenuGetScrollAndRow\n\ + ldr r0, _0815B328 @ =gMain\n\ + ldrh r1, [r0, 0x2E]\n\ + movs r0, 0x4\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0815B30A\n\ + subs r0, r4, 0x6\n\ + ldr r1, [r0]\n\ + ldr r0, _0815B32C @ =UseFameCheckerFromMenu\n\ + cmp r1, r0\n\ + bne _0815B330\n\ +_0815B30A:\n\ + movs r0, 0x2\n\ + negs r0, r0\n\ + cmp r5, r0\n\ + beq _0815B330\n\ + adds r0, 0x1\n\ + cmp r5, r0\n\ + bne _0815B33E\n\ + b _0815B37A\n\ + .align 2, 0\n\ +_0815B31C: .4byte gTasks+0x8\n\ +_0815B320: .4byte gPaletteFade\n\ +_0815B324: .4byte gTeachyTV_StaticResources+6\n\ +_0815B328: .4byte gMain\n\ +_0815B32C: .4byte UseFameCheckerFromMenu\n\ +_0815B330:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + adds r0, r7, 0\n\ + bl TeachyTvQuitBeginFade\n\ + b _0815B37A\n\ +_0815B33E:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + ldr r2, _0815B380 @ =gTeachyTV_StaticResources\n\ + movs r4, 0\n\ + strb r5, [r2, 0x5]\n\ + ldrb r0, [r6]\n\ + adds r1, r2, 0x6\n\ + adds r2, 0x8\n\ + bl DestroyListMenu\n\ + bl TeachyTvClearWindowRegs\n\ + movs r0, 0x1\n\ + bl ClearWindowTilemap\n\ + movs r0, 0\n\ + bl schedule_bg_copy_tilemap_to_vram\n\ + bl TeachyTvRemoveScrollIndicatorArrowPair\n\ + strh r4, [r6, 0x6]\n\ + strh r4, [r6, 0x4]\n\ + ldr r1, _0815B384 @ =gTasks\n\ + lsls r0, r7, 2\n\ + adds r0, r7\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + ldr r1, _0815B388 @ =TeachyTvRenderMsgAndSwitchClusterFuncs\n\ + str r1, [r0]\n\ +_0815B37A:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0815B380: .4byte gTeachyTV_StaticResources\n\ +_0815B384: .4byte gTasks\n\ +_0815B388: .4byte TeachyTvRenderMsgAndSwitchClusterFuncs\n\ + "); +} +#endif + +void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId) +{ + u16 *data; + u32 counter; + + data = (u16 *)gTasks[taskId].data; + TeachyTvBg2AnimController(); + counter = data[2] + 1; + data[2] = counter; + if ( (s16)counter > 63 ) + { + CopyToBgTilemapBufferRect_ChangePalette(2u, (u8 *)gUnknown_203F450 + 0x3004, 0, 0, 0x20u, 0x20u, 0x11u); + TeachyTvSetSpriteCoordsAndSwitchFrame(((u8*)data)[2], 8, 0x38, 7u); + schedule_bg_copy_tilemap_to_vram(2u); + data[2] = 0; + ++data[3]; + PlayNewMapMusic(BGM_FRLG_FOLLOW_ME); + } +} + +void TeachyTvClusFuncClearBg2TeachyTvGraphic(u8 taskId) +{ + u16 *data; + u32 counter; + + data = (u16*)gTasks[taskId].data; + counter = data[2] + 1; + data[2] = counter; + if ( (s16)counter == 134 ) + { + FillBgTilemapBufferRect_Palette0(2u, 0, 2u, 1u, 0x1Au, 0xCu); + schedule_bg_copy_tilemap_to_vram(2u); + data[2] = 0; + ++data[3]; + } +} + +void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId) +{ + s16 *data; + struct Sprite * spriteAddr; + + data = gTasks[taskId].data; + spriteAddr = &gSprites[data[1]]; + if ( data[2] != 35 ) + ++data[2]; + else { + if ( spriteAddr->pos2.x == 0x78 ) + { + StartSpriteAnim(&gSprites[data[1]], 0); + TeachyTvInitTextPrinter(&gUnknown_841B83D); + data[2] = 0; + ++data[3]; + } + else + ++spriteAddr->pos2.x; + } +} + +void TeachyTvClusFuncIdleIfTextPrinterIsActive(u8 taskId) +{ + u16* data = (u16 *)gTasks[taskId].data; + if ( !(sub_80BF518(0) << 16) ) + ++data[3]; +} + +void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) +{ + u16 *data; + data = gTasks[taskId].data; + if ( gMain.newKeys & 2 ) + { + char *offset = ((char *)gUnknown_203F450 + 0x4006); + u32 v4 = 0; + offset[0] = 1; + TeachyTvSetSpriteCoordsAndSwitchFrame(*((char *)data + 2), 0, 0, 0); + FillWindowPixelBuffer(0, 0xCCu); + CopyWindowToVram(0, 2u); + TeachyTvClearBg1EndGraphicalText(); + data[2] = v4; + data[3] = v4; + gTasks[taskId].func = TeachyTvBackToOptionList; + } + else + { + void (***array)(u8) = &gUnknown_8479548; + void (**cluster)(u8) = array[(u8)gTeachyTV_StaticResources.optionChosen]; + _call_via_r1( + taskId, + cluster[(s16)data[3]]); + } +} + +void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) +{ + u16 *data = (u16 *)gTasks[taskId].data; + char ** texts = &gUnknown_8479560; + TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); + ++data[3]; +} + +void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) +{ + u16 *data = (u16 *)gTasks[taskId].data; + char ** texts = &gUnknown_8479578; + TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); + ++data[3]; +} + +void TeachyTvClusFuncIdleIfTextPrinterIsActive2(u8 taskId) +{ + u16* data = (u16 *)gTasks[taskId].data; + if ( !(sub_80BF518(0) << 16) ) + ++data[3]; +} + +void TeachyTvClusFuncEraseTextWindowIfKeyPressed(u8 taskId) +{ + u16 *data; + data = (u16 *)gTasks[taskId].data; + if ( gMain.newKeys & 3 ) + { + FillWindowPixelBuffer(0, 0xCCu); + CopyWindowToVram(0, 2u); + ++data[3]; + } +} + +void TeachyTvClusFuncStartAnimNpcWalkIntoGrass(u8 taskId) +{ + u16 *data; + data = (u16 *)gTasks[taskId].data; + StartSpriteAnim(&gSprites[(s16)data[1]], 5u); + data[2] = 0; + data[4] = 0; + data[5] = 1; + ++data[3]; +} \ No newline at end of file -- cgit v1.2.3 From 82e763455c9f173c1baf1b008f87156736cf39f3 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Wed, 5 Jun 2019 11:13:47 +0800 Subject: 4 movement functions --- asm/teachy_tv.s | 258 ------------------------------------ src/teachy_tv.c | 395 ++++++++++++++++++++++++++++++++++---------------------- 2 files changed, 240 insertions(+), 413 deletions(-) diff --git a/asm/teachy_tv.s b/asm/teachy_tv.s index 1098956c0..215a87e67 100644 --- a/asm/teachy_tv.s +++ b/asm/teachy_tv.s @@ -5,264 +5,6 @@ .text - thumb_func_start sub_815B6A8 -sub_815B6A8: @ 815B6A8 - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0815B730 @ =gTasks+0x8 - adds r4, r0, r1 - movs r0, 0x2 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0815B734 @ =gSprites - adds r6, r0, r1 - movs r1, 0x80 - lsls r1, 1 - movs r0, 0x3 - movs r2, 0x2 - bl ChangeBgY - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - movs r3, 0xF - ands r3, r0 - cmp r3, 0 - bne _0815B702 - ldr r0, _0815B738 @ =gUnknown_203F450 - ldr r1, [r0] - ldr r2, _0815B73C @ =0x00004005 - adds r1, r2 - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] - movs r0, 0x24 - ldrsh r1, [r6, r0] - movs r0, 0x26 - ldrsh r2, [r6, r0] - str r3, [sp] - adds r0, r5, 0 - movs r3, 0 - bl TeachyTvGrassAnimationMain -_0815B702: - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0x30 - bne _0815B726 - movs r1, 0 - strh r1, [r4, 0x4] - movs r2, 0x1 - negs r2, r2 - adds r0, r2, 0 - strh r0, [r4, 0x8] - strh r1, [r4, 0xA] - adds r0, r6, 0 - movs r1, 0x7 - bl StartSpriteAnim - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0815B726: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0815B730: .4byte gTasks+0x8 -_0815B734: .4byte gSprites -_0815B738: .4byte gUnknown_203F450 -_0815B73C: .4byte 0x00004005 - thumb_func_end sub_815B6A8 - - thumb_func_start sub_815B740 -sub_815B740: @ 815B740 - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0815B7D4 @ =gTasks+0x8 - adds r4, r0, r1 - movs r0, 0x2 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0815B7D8 @ =gSprites - adds r6, r0, r1 - movs r1, 0x80 - lsls r1, 1 - movs r0, 0x3 - movs r2, 0x1 - bl ChangeBgX - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - movs r2, 0xF - ands r0, r2 - cmp r0, 0 - bne _0815B78A - ldr r0, _0815B7DC @ =gUnknown_203F450 - ldr r1, [r0] - ldr r3, _0815B7E0 @ =0x00004004 - adds r1, r3 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_0815B78A: - movs r1, 0x4 - ldrsh r0, [r4, r1] - adds r0, 0x8 - ands r0, r2 - cmp r0, 0 - bne _0815B7AC - ldrh r1, [r6, 0x24] - adds r1, 0x8 - lsls r1, 16 - asrs r1, 16 - movs r3, 0x26 - ldrsh r2, [r6, r3] - str r0, [sp] - adds r0, r5, 0 - movs r3, 0 - bl TeachyTvGrassAnimationMain -_0815B7AC: - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0x30 - bne _0815B7CA - movs r0, 0 - strh r0, [r4, 0x4] - strh r0, [r4, 0x8] - strh r0, [r4, 0xA] - adds r0, r6, 0 - movs r1, 0x3 - bl StartSpriteAnim - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0815B7CA: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0815B7D4: .4byte gTasks+0x8 -_0815B7D8: .4byte gSprites -_0815B7DC: .4byte gUnknown_203F450 -_0815B7E0: .4byte 0x00004004 - thumb_func_end sub_815B740 - - thumb_func_start sub_815B7E4 -sub_815B7E4: @ 815B7E4 - push {r4-r6,lr} - sub sp, 0x4 - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - lsls r5, r6, 2 - adds r5, r6 - lsls r5, 3 - ldr r0, _0815B838 @ =gTasks+0x8 - adds r5, r0 - movs r1, 0x2 - ldrsh r0, [r5, r1] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _0815B83C @ =gSprites - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x6 - bl StartSpriteAnim - ldrh r0, [r5, 0x6] - adds r0, 0x1 - strh r0, [r5, 0x6] - movs r0, 0 - strh r0, [r5, 0x8] - strh r0, [r5, 0xA] - movs r0, 0x24 - ldrsh r1, [r4, r0] - movs r0, 0x26 - ldrsh r2, [r4, r0] - movs r0, 0 - str r0, [sp] - adds r0, r6, 0 - movs r3, 0 - bl TeachyTvGrassAnimationMain - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0815B838: .4byte gTasks+0x8 -_0815B83C: .4byte gSprites - thumb_func_end sub_815B7E4 - - thumb_func_start sub_815B840 -sub_815B840: @ 815B840 - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r3, r0, 24 - lsls r0, r3, 2 - adds r0, r3 - lsls r0, 3 - ldr r1, _0815B890 @ =gTasks+0x8 - adds r5, r0, r1 - movs r0, 0x2 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0815B894 @ =gSprites - adds r4, r0, r1 - ldrh r1, [r4, 0x24] - movs r0, 0xF - ands r0, r1 - cmp r0, 0 - bne _0815B87E - subs r1, 0x8 - lsls r1, 16 - asrs r1, 16 - movs r6, 0x26 - ldrsh r2, [r4, r6] - str r0, [sp] - adds r0, r3, 0 - movs r3, 0 - bl TeachyTvGrassAnimationMain -_0815B87E: - ldrh r1, [r4, 0x24] - movs r2, 0x24 - ldrsh r0, [r4, r2] - cmp r0, 0x8 - bne _0815B898 - ldrh r0, [r5, 0x6] - adds r0, 0x1 - strh r0, [r5, 0x6] - b _0815B89C - .align 2, 0 -_0815B890: .4byte gTasks+0x8 -_0815B894: .4byte gSprites -_0815B898: - subs r0, r1, 0x1 - strh r0, [r4, 0x24] -_0815B89C: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_815B840 - thumb_func_start sub_815B8A4 sub_815B8A4: @ 815B8A4 push {r4,lr} diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 3549ec9b0..e14e61f82 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -24,6 +24,8 @@ #include "constants/songs.h" #include "constants/items.h" +typedef struct Task Task; + typedef struct { void (*callback)(); u8 mode; @@ -36,6 +38,22 @@ typedef struct { extern TeachyTv_s gTeachyTV_StaticResources; extern void * gUnknown_203F450; +extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; +extern char gUnknown_841B83D; +extern struct BgTemplate gUnknown_84792E0; +extern struct SpritePalette gUnknown_83A5348; +extern void (**gUnknown_8479548)(u8); +extern char * gUnknown_8479560; +extern char * gUnknown_8479578; +extern void *gUnknown_203F450; // tilemap pointer location +extern u8 gUnknown_8E86240; // tilemap +extern u8 gUnknown_8E86BE8; +extern u8 gUnknown_8E86D6C; +extern u8 gUnknown_8E86F98; // pal +extern struct ListMenuTemplate gUnknown_8479368; +extern struct ListMenuItem gUnknown_8479340; +extern struct WindowTemplate gUnknown_84792F0; + void C2TeachyTv(); void C2TeachyTvMainCallback(); void VblankHandlerTeachyTv(); @@ -53,35 +71,20 @@ void TeachyTvSetupBg(); void TeachyTvLoadGraphic(); void TeachyTvPostBattleFadeControl(u8); void TeachyTvOptionListController(u8); +void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); +void TeachyTvQuitFadeControlAndTaskDel(u8 taskId); +void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId); + extern void VblankHblankHandlerSetZero(); extern void sub_812B1E0(u16); -extern struct BgTemplate gUnknown_84792E0; -extern void *gUnknown_203F450; // tilemap pointer location -extern u8 gUnknown_8E86240; // tilemap -extern u8 gUnknown_8E86BE8; -extern u8 gUnknown_8E86D6C; -extern u8 gUnknown_8E86F98; // pal -extern struct SpritePalette gUnknown_83A5348; extern void sub_815BD80(void *); -typedef struct Task Task; -extern struct WindowTemplate gUnknown_84792F0; -void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId); -extern struct ListMenuTemplate gUnknown_8479368; -extern struct ListMenuItem gUnknown_8479340; extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); -void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); extern void sub_8055DC4(); extern void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); -extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; -void TeachyTvQuitFadeControlAndTaskDel(u8 taskId); -extern char gUnknown_841B83D; extern bool16 sub_80BF518(u8 textPrinterId); extern void _call_via_r1(s32 arg, void *func); -extern void (**gUnknown_8479548)(u8); extern void TeachyTvClearBg1EndGraphicalText(); extern void TeachyTvBackToOptionList(u8 taskId); -extern char * gUnknown_8479560; -extern char * gUnknown_8479578; void C2TeachyTv() { @@ -140,58 +143,58 @@ void C2TeachyTvMainCallback() state = gMain.state; // tried several ways to reproduce the control flow, but all failed. Now using goto if ( state == 0 ) - goto section_0; + goto RESETANDLOAD; else if ( state == 1 ) - goto section_1; + goto SETDMATOVRAM; else return; - section_0: - v4 = (u8 **)&gUnknown_203F450; - (*v4) = (u8*)AllocZeroed(0x4008u); - *(u32*)gUnknown_203F450 = (u32)state; - *((u8*)gUnknown_203F450 + 0x4006) = state; - *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; - VblankHblankHandlerSetZero(); - clear_scheduled_bg_copies_to_vram(); - ScanlineEffect_Stop(); - FreeAllSpritePalettes(); - ResetPaletteFade(); - ResetSpriteData(); - ResetTasks(); - TeachyTvSetupBg(); - TeachyTvLoadGraphic(); - ++gMain.state; +RESETANDLOAD: + v4 = (u8 **)&gUnknown_203F450; + (*v4) = (u8*)AllocZeroed(0x4008u); + *(u32*)gUnknown_203F450 = (u32)state; + *((u8*)gUnknown_203F450 + 0x4006) = state; + *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; + VblankHblankHandlerSetZero(); + clear_scheduled_bg_copies_to_vram(); + ScanlineEffect_Stop(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + TeachyTvSetupBg(); + TeachyTvLoadGraphic(); + ++gMain.state; + return; +SETDMATOVRAM: + if( free_temp_tile_data_buffers_if_possible() == 1 ) return; - section_1: - if( free_temp_tile_data_buffers_if_possible() == 1 ) - return; - TeachyTvCreateAndRenderRbox(); - TeachyTvInitIo(); - if ( gTeachyTV_StaticResources.mode == 2 ) - { - taskId = CreateTask(TeachyTvPostBattleFadeControl, 0); - gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); - TeachyTvSetupPostBattleWindowAndObj(taskId); - } - else - { - taskId = CreateTask(TeachyTvOptionListController, 0); - x = (u32)TeachyTvSetupWindow(); - gTasks[taskId].data[0] = (x << 24) >> 24; - gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); - TeachyTvSetupScrollIndicatorArrowPair(); - PlayNewMapMusic(BGM_FRLG_TEACHY_TV); - TeachyTvSetWindowRegs(); - } - schedule_bg_copy_tilemap_to_vram(0); - schedule_bg_copy_tilemap_to_vram(1u); - schedule_bg_copy_tilemap_to_vram(2u); - schedule_bg_copy_tilemap_to_vram(3u); - sub_812B1E0(9); // help system something - BlendPalettes(0xFFFFFFFF, 0x10u, 0); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10u, 0, 0); - SetVBlankCallback(VblankHandlerTeachyTv); - SetMainCallback2(C2TeachyTv); + TeachyTvCreateAndRenderRbox(); + TeachyTvInitIo(); + if ( gTeachyTV_StaticResources.mode == 2 ) + { + taskId = CreateTask(TeachyTvPostBattleFadeControl, 0); + gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); + TeachyTvSetupPostBattleWindowAndObj(taskId); + } + else + { + taskId = CreateTask(TeachyTvOptionListController, 0); + x = (u32)TeachyTvSetupWindow(); + gTasks[taskId].data[0] = (x << 24) >> 24; + gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); + TeachyTvSetupScrollIndicatorArrowPair(); + PlayNewMapMusic(BGM_FRLG_TEACHY_TV); + TeachyTvSetWindowRegs(); + } + schedule_bg_copy_tilemap_to_vram(0); + schedule_bg_copy_tilemap_to_vram(1u); + schedule_bg_copy_tilemap_to_vram(2u); + schedule_bg_copy_tilemap_to_vram(3u); + sub_812B1E0(9); // help system something + BlendPalettes(0xFFFFFFFF, 0x10u, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10u, 0, 0); + SetVBlankCallback(VblankHandlerTeachyTv); + SetMainCallback2(C2TeachyTv); } void TeachyTvSetupBg() @@ -464,94 +467,94 @@ __attribute__((naked)) void TeachyTvOptionListController(u8 taskId) { asm_unified("\n\ - push {r4-r7,lr}\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - lsls r0, r7, 2\n\ - adds r0, r7\n\ - lsls r0, 3\n\ - ldr r1, _0815B31C @ =gTasks+0x8\n\ - adds r6, r0, r1\n\ - bl TeachyTvBg2AnimController\n\ - ldr r0, _0815B320 @ =gPaletteFade\n\ - ldrb r1, [r0, 0x7]\n\ - movs r0, 0x80\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0815B37A\n\ - ldrb r0, [r6]\n\ - bl ListMenuHandleInput\n\ - adds r5, r0, 0\n\ - ldrb r0, [r6]\n\ - ldr r4, _0815B324 @ =gTeachyTV_StaticResources+6\n\ - adds r2, r4, 0x2\n\ - adds r1, r4, 0\n\ - bl ListMenuGetScrollAndRow\n\ - ldr r0, _0815B328 @ =gMain\n\ - ldrh r1, [r0, 0x2E]\n\ - movs r0, 0x4\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0815B30A\n\ - subs r0, r4, 0x6\n\ - ldr r1, [r0]\n\ - ldr r0, _0815B32C @ =UseFameCheckerFromMenu\n\ - cmp r1, r0\n\ - bne _0815B330\n\ -_0815B30A:\n\ - movs r0, 0x2\n\ - negs r0, r0\n\ - cmp r5, r0\n\ - beq _0815B330\n\ - adds r0, 0x1\n\ - cmp r5, r0\n\ - bne _0815B33E\n\ - b _0815B37A\n\ - .align 2, 0\n\ -_0815B31C: .4byte gTasks+0x8\n\ -_0815B320: .4byte gPaletteFade\n\ -_0815B324: .4byte gTeachyTV_StaticResources+6\n\ -_0815B328: .4byte gMain\n\ -_0815B32C: .4byte UseFameCheckerFromMenu\n\ -_0815B330:\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - adds r0, r7, 0\n\ - bl TeachyTvQuitBeginFade\n\ - b _0815B37A\n\ -_0815B33E:\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - ldr r2, _0815B380 @ =gTeachyTV_StaticResources\n\ - movs r4, 0\n\ - strb r5, [r2, 0x5]\n\ - ldrb r0, [r6]\n\ - adds r1, r2, 0x6\n\ - adds r2, 0x8\n\ - bl DestroyListMenu\n\ - bl TeachyTvClearWindowRegs\n\ - movs r0, 0x1\n\ - bl ClearWindowTilemap\n\ - movs r0, 0\n\ - bl schedule_bg_copy_tilemap_to_vram\n\ - bl TeachyTvRemoveScrollIndicatorArrowPair\n\ - strh r4, [r6, 0x6]\n\ - strh r4, [r6, 0x4]\n\ - ldr r1, _0815B384 @ =gTasks\n\ - lsls r0, r7, 2\n\ - adds r0, r7\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - ldr r1, _0815B388 @ =TeachyTvRenderMsgAndSwitchClusterFuncs\n\ - str r1, [r0]\n\ -_0815B37A:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0815B380: .4byte gTeachyTV_StaticResources\n\ -_0815B384: .4byte gTasks\n\ -_0815B388: .4byte TeachyTvRenderMsgAndSwitchClusterFuncs\n\ + push {r4-r7,lr}\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + lsls r0, r7, 2\n\ + adds r0, r7\n\ + lsls r0, 3\n\ + ldr r1, _0815B31C @ =gTasks+0x8\n\ + adds r6, r0, r1\n\ + bl TeachyTvBg2AnimController\n\ + ldr r0, _0815B320 @ =gPaletteFade\n\ + ldrb r1, [r0, 0x7]\n\ + movs r0, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0815B37A\n\ + ldrb r0, [r6]\n\ + bl ListMenuHandleInput\n\ + adds r5, r0, 0\n\ + ldrb r0, [r6]\n\ + ldr r4, _0815B324 @ =gTeachyTV_StaticResources+6\n\ + adds r2, r4, 0x2\n\ + adds r1, r4, 0\n\ + bl ListMenuGetScrollAndRow\n\ + ldr r0, _0815B328 @ =gMain\n\ + ldrh r1, [r0, 0x2E]\n\ + movs r0, 0x4\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0815B30A\n\ + subs r0, r4, 0x6\n\ + ldr r1, [r0]\n\ + ldr r0, _0815B32C @ =UseFameCheckerFromMenu\n\ + cmp r1, r0\n\ + bne _0815B330\n\ + _0815B30A:\n\ + movs r0, 0x2\n\ + negs r0, r0\n\ + cmp r5, r0\n\ + beq _0815B330\n\ + adds r0, 0x1\n\ + cmp r5, r0\n\ + bne _0815B33E\n\ + b _0815B37A\n\ + .align 2, 0\n\ + _0815B31C: .4byte gTasks+0x8\n\ + _0815B320: .4byte gPaletteFade\n\ + _0815B324: .4byte gTeachyTV_StaticResources+6\n\ + _0815B328: .4byte gMain\n\ + _0815B32C: .4byte UseFameCheckerFromMenu\n\ + _0815B330:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + adds r0, r7, 0\n\ + bl TeachyTvQuitBeginFade\n\ + b _0815B37A\n\ + _0815B33E:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + ldr r2, _0815B380 @ =gTeachyTV_StaticResources\n\ + movs r4, 0\n\ + strb r5, [r2, 0x5]\n\ + ldrb r0, [r6]\n\ + adds r1, r2, 0x6\n\ + adds r2, 0x8\n\ + bl DestroyListMenu\n\ + bl TeachyTvClearWindowRegs\n\ + movs r0, 0x1\n\ + bl ClearWindowTilemap\n\ + movs r0, 0\n\ + bl schedule_bg_copy_tilemap_to_vram\n\ + bl TeachyTvRemoveScrollIndicatorArrowPair\n\ + strh r4, [r6, 0x6]\n\ + strh r4, [r6, 0x4]\n\ + ldr r1, _0815B384 @ =gTasks\n\ + lsls r0, r7, 2\n\ + adds r0, r7\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + ldr r1, _0815B388 @ =TeachyTvRenderMsgAndSwitchClusterFuncs\n\ + str r1, [r0]\n\ + _0815B37A:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ + _0815B380: .4byte gTeachyTV_StaticResources\n\ + _0815B384: .4byte gTasks\n\ + _0815B388: .4byte TeachyTvRenderMsgAndSwitchClusterFuncs\n\ "); } #endif @@ -693,4 +696,86 @@ void TeachyTvClusFuncStartAnimNpcWalkIntoGrass(u8 taskId) data[4] = 0; data[5] = 1; ++data[3]; +} + +void TeachyTvClusFuncDudeMoveUp(u8 taskId) +{ + s16 *data; + struct Sprite *v3; + int temp; + int v4; + + data = gTasks[taskId].data; + v3 = &gSprites[data[1]]; + ChangeBgY(3u, 0x100u, 2u); + v4 = (u16)data[2] + 1; + ((u16*)data)[2] = v4; + if ( !( v4 % 16 ) ) + { + --((u8*)gUnknown_203F450)[0x4005]; + TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 0); + } + if ( data[2] == 0x30 ) + { + data[2] = 0; + data[4] = -1; + data[5] = 0; + StartSpriteAnim(v3, 7u); + ++data[3]; + } +} + +void TeachyTvClusFuncDudeMoveRight(u8 taskId) +{ + u16 *data; + struct Sprite *v3; + int v4; + + data = (u16 *)gTasks[taskId].data; + v3 = &gSprites[(s16)data[1]]; + ChangeBgX(3u, 0x100u, 1u); + v4 = data[2] + 1; + data[2] = v4; + if ( !(v4 & 0xF) ) + ++((u8*)gUnknown_203F450)[0x4004]; + if ( !((((s16*)data)[2] + 8) & 0xF) ) + TeachyTvGrassAnimationMain(taskId, v3->pos2.x + 8, v3->pos2.y, 0, 0); + if ( (s16)data[2] == 0x30 ) + { + data[2] = 0; + data[4] = 0; + data[5] = 0; + StartSpriteAnim(v3, 3u); + ++data[3]; + } +} + +void TeachyTvClusFuncDudeTurnLeft(u8 taskId) +{ + s16 *data; + struct Sprite *v3; + + data = gTasks[taskId].data; + v3 = &gSprites[data[1]]; + StartSpriteAnim(v3, 6u); + ++(u16)data[3]; + data[4] = 0; + data[5] = 0; + TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 0); +} + +void TeachyTvClusFuncDudeMoveLeft(u8 taskId) +{ + s16 *data; + struct Sprite *v2; + + data = gTasks[taskId].data; + v2 = &gSprites[data[1]]; + + if ( !(v2->pos2.x & 0xF) ) + TeachyTvGrassAnimationMain(taskId, v2->pos2.x - 8, v2->pos2.y, 0, 0); + if ( v2->pos2.x == 8 ) + ++(u16)data[3]; + else + --v2->pos2.x; } \ No newline at end of file -- cgit v1.2.3 From 1ffb8f667ca0408a84e79203146bc20b2b6e0412 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Wed, 5 Jun 2019 11:26:58 +0800 Subject: sub_815B908 --- asm/teachy_tv.s | 72 --------------------------------------------------------- src/teachy_tv.c | 30 +++++++++++++++++++++++- 2 files changed, 29 insertions(+), 73 deletions(-) diff --git a/asm/teachy_tv.s b/asm/teachy_tv.s index 215a87e67..6efed0c4d 100644 --- a/asm/teachy_tv.s +++ b/asm/teachy_tv.s @@ -5,78 +5,6 @@ .text - thumb_func_start sub_815B8A4 -sub_815B8A4: @ 815B8A4 - push {r4,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0815B900 @ =gTasks+0x8 - adds r4, r1, r0 - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0815B8DC - ldr r1, _0815B904 @ =gUnknown_8479590 - movs r0, 0x8 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x11 - str r0, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x14 - movs r3, 0xA - bl CopyToBgTilemapBufferRect_ChangePalette - movs r0, 0x1 - bl schedule_bg_copy_tilemap_to_vram -_0815B8DC: - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x7E - ble _0815B8F8 - bl TeachyTvClearBg1EndGraphicalText - movs r0, 0 - strh r0, [r4, 0x4] - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0815B8F8: - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815B900: .4byte gTasks+0x8 -_0815B904: .4byte gUnknown_8479590 - thumb_func_end sub_815B8A4 - - thumb_func_start TeachyTvClearBg1EndGraphicalText -TeachyTvClearBg1EndGraphicalText: @ 815B908 - push {lr} - sub sp, 0x8 - movs r0, 0x8 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - movs r1, 0 - movs r2, 0x14 - movs r3, 0xA - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0x1 - bl schedule_bg_copy_tilemap_to_vram - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end TeachyTvClearBg1EndGraphicalText - thumb_func_start TeachyTvBackToOptionList TeachyTvBackToOptionList: @ 815B92C push {r4-r7,lr} diff --git a/src/teachy_tv.c b/src/teachy_tv.c index e14e61f82..0513360cb 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -53,6 +53,7 @@ extern u8 gUnknown_8E86F98; // pal extern struct ListMenuTemplate gUnknown_8479368; extern struct ListMenuItem gUnknown_8479340; extern struct WindowTemplate gUnknown_84792F0; +extern u8 gUnknown_8479590; void C2TeachyTv(); void C2TeachyTvMainCallback(); @@ -74,6 +75,7 @@ void TeachyTvOptionListController(u8); void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); void TeachyTvQuitFadeControlAndTaskDel(u8 taskId); void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId); +void TeachyTvClearBg1EndGraphicalText(); extern void VblankHblankHandlerSetZero(); extern void sub_812B1E0(u16); @@ -83,7 +85,6 @@ extern void sub_8055DC4(); extern void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); extern bool16 sub_80BF518(u8 textPrinterId); extern void _call_via_r1(s32 arg, void *func); -extern void TeachyTvClearBg1EndGraphicalText(); extern void TeachyTvBackToOptionList(u8 taskId); void C2TeachyTv() @@ -778,4 +779,31 @@ void TeachyTvClusFuncDudeMoveLeft(u8 taskId) ++(u16)data[3]; else --v2->pos2.x; +} + +void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) +{ + s16 *data; + int temp; + + data = gTasks[taskId].data; + if ( !data[2] ) + { + CopyToBgTilemapBufferRect_ChangePalette(1u, &gUnknown_8479590, 0x14u, 0xAu, 8u, 2u, 0x11u); + schedule_bg_copy_tilemap_to_vram(1u); + } + temp = (u16)data[2] + 1; + data[2] = temp; + if ( (s16)temp > 126 ) + { + TeachyTvClearBg1EndGraphicalText(); + (u16)data[2] = 0; + ++(u16)data[3]; + } +} + +void TeachyTvClearBg1EndGraphicalText() +{ + FillBgTilemapBufferRect_Palette0(1u, 0, 0x14u, 0xAu, 8u, 2u); + schedule_bg_copy_tilemap_to_vram(1u); } \ No newline at end of file -- cgit v1.2.3 From 66b8dafbfce85a5976f97db464c5001a4347a8fb Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Wed, 5 Jun 2019 13:25:28 +0800 Subject: small functions --- asm/teachy_tv.s | 187 +------------------------------------------------------- src/teachy_tv.c | 94 +++++++++++++++++++++++++--- 2 files changed, 87 insertions(+), 194 deletions(-) diff --git a/asm/teachy_tv.s b/asm/teachy_tv.s index 6efed0c4d..52d3683c2 100644 --- a/asm/teachy_tv.s +++ b/asm/teachy_tv.s @@ -5,187 +5,6 @@ .text - thumb_func_start TeachyTvBackToOptionList -TeachyTvBackToOptionList: @ 815B92C - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r6, r1, 3 - ldr r7, _0815B9DC @ =gTasks+0x8 - adds r5, r6, r7 - movs r1, 0x4 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _0815B94C - movs r0, 0xAD - lsls r0, 1 - bl PlayNewMapMusic -_0815B94C: - bl TeachyTvBg2AnimController - ldrh r0, [r5, 0x4] - adds r0, 0x1 - strh r0, [r5, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3F - ble _0815B9D4 - movs r4, 0 - strh r4, [r5, 0x4] - strh r4, [r5, 0x6] - bl TeachyTvSetupWindow - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5] - adds r0, r7, 0 - subs r0, 0x8 - adds r0, r6, r0 - ldr r1, _0815B9E0 @ =TeachyTvOptionListController - str r1, [r0] - movs r0, 0 - bl PutWindowTilemap - bl TeachyTvSetupScrollIndicatorArrowPair - bl TeachyTvSetWindowRegs - movs r0, 0 - bl schedule_bg_copy_tilemap_to_vram - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r1, 0x80 - lsls r1, 5 - movs r0, 0x3 - movs r2, 0x2 - bl ChangeBgX - movs r1, 0xA0 - lsls r1, 6 - movs r0, 0x3 - movs r2, 0x1 - bl ChangeBgY - ldr r2, _0815B9E4 @ =gUnknown_203F450 - ldr r0, [r2] - ldr r1, _0815B9E8 @ =0x00004004 - adds r0, r1 - strb r4, [r0] - ldr r0, [r2] - adds r1, 0x1 - adds r0, r1 - movs r1, 0x3 - strb r1, [r0] - ldr r0, [r2] - ldr r1, _0815B9EC @ =0x00004006 - adds r0, r1 - strb r4, [r0] -_0815B9D4: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815B9DC: .4byte gTasks+0x8 -_0815B9E0: .4byte TeachyTvOptionListController -_0815B9E4: .4byte gUnknown_203F450 -_0815B9E8: .4byte 0x00004004 -_0815B9EC: .4byte 0x00004006 - thumb_func_end TeachyTvBackToOptionList - - thumb_func_start sub_815B9F0 -sub_815B9F0: @ 815B9F0 - push {lr} - lsls r0, 24 - lsrs r1, r0, 24 - adds r2, r1, 0 - ldr r0, _0815BA0C @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x5] - cmp r0, 0 - blt _0815BA22 - cmp r0, 0x3 - bgt _0815BA10 - adds r0, r1, 0 - bl sub_815BC90 - b _0815BA22 - .align 2, 0 -_0815BA0C: .4byte gTeachyTV_StaticResources -_0815BA10: - cmp r0, 0x5 - bgt _0815BA22 - ldr r0, _0815BA28 @ =gUnknown_203F450 - ldr r1, [r0] - ldr r0, _0815BA2C @ =sub_815BA30 - str r0, [r1] - adds r0, r2, 0 - bl TeachyTvQuitBeginFade -_0815BA22: - pop {r0} - bx r0 - .align 2, 0 -_0815BA28: .4byte gUnknown_203F450 -_0815BA2C: .4byte sub_815BA30 - thumb_func_end sub_815B9F0 - - thumb_func_start sub_815BA30 -sub_815BA30: @ 815BA30 - push {lr} - ldr r0, _0815BA44 @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x5] - cmp r0, 0x4 - bne _0815BA48 - movs r0, 0xA - bl sub_810B108 - b _0815BA4E - .align 2, 0 -_0815BA44: .4byte gTeachyTV_StaticResources -_0815BA48: - movs r0, 0x9 - bl sub_810B108 -_0815BA4E: - pop {r0} - bx r0 - thumb_func_end sub_815BA30 - - thumb_func_start TeachyTvPostBattleFadeControl -TeachyTvPostBattleFadeControl: @ 815BA54 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r2, r1, 3 - ldr r4, _0815BA8C @ =gTasks+0x8 - adds r3, r2, r4 - ldr r0, _0815BA90 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0815BA86 - ldr r1, _0815BA94 @ =gUnknown_8479390 - ldr r0, _0815BA98 @ =gTeachyTV_StaticResources - ldrb r0, [r0, 0x5] - adds r0, r1 - ldrb r0, [r0] - strh r0, [r3, 0x6] - adds r0, r4, 0 - subs r0, 0x8 - adds r0, r2, r0 - ldr r1, _0815BA9C @ =TeachyTvRenderMsgAndSwitchClusterFuncs - str r1, [r0] -_0815BA86: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815BA8C: .4byte gTasks+0x8 -_0815BA90: .4byte gPaletteFade -_0815BA94: .4byte gUnknown_8479390 -_0815BA98: .4byte gTeachyTV_StaticResources -_0815BA9C: .4byte TeachyTvRenderMsgAndSwitchClusterFuncs - thumb_func_end TeachyTvPostBattleFadeControl - thumb_func_start TeachyTvGrassAnimationMain TeachyTvGrassAnimationMain: @ 815BAA0 push {r4-r7,lr} @@ -436,8 +255,8 @@ _0815BC88: .4byte 0x00004005 _0815BC8C: .4byte 0x00004004 thumb_func_end sub_815BC40 - thumb_func_start sub_815BC90 -sub_815BC90: @ 815BC90 + thumb_func_start TeachyTvPrepBattle +TeachyTvPrepBattle: @ 815BC90 push {r4-r6,lr} lsls r0, 24 lsrs r6, r0, 24 @@ -488,7 +307,7 @@ _0815BCE2: .align 2, 0 _0815BCFC: .4byte gTasks _0815BD00: .4byte sub_815BD04 - thumb_func_end sub_815BC90 + thumb_func_end TeachyTvPrepBattle thumb_func_start sub_815BD04 sub_815BD04: @ 815BD04 diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 0513360cb..d274e18ec 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -45,15 +45,16 @@ extern struct SpritePalette gUnknown_83A5348; extern void (**gUnknown_8479548)(u8); extern char * gUnknown_8479560; extern char * gUnknown_8479578; -extern void *gUnknown_203F450; // tilemap pointer location -extern u8 gUnknown_8E86240; // tilemap +extern void *gUnknown_203F450; +extern u8 gUnknown_8E86240; extern u8 gUnknown_8E86BE8; extern u8 gUnknown_8E86D6C; -extern u8 gUnknown_8E86F98; // pal +extern u8 gUnknown_8E86F98; extern struct ListMenuTemplate gUnknown_8479368; extern struct ListMenuItem gUnknown_8479340; extern struct WindowTemplate gUnknown_84792F0; extern u8 gUnknown_8479590; +extern u8 gUnknown_8479390; void C2TeachyTv(); void C2TeachyTvMainCallback(); @@ -75,17 +76,21 @@ void TeachyTvOptionListController(u8); void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); void TeachyTvQuitFadeControlAndTaskDel(u8 taskId); void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId); -void TeachyTvClearBg1EndGraphicalText(); +void TeachyTvClearBg1EndGraphicText(); +void TeachyTvBackToOptionList(u8 taskId); +void TeachyTvSetupBagItemsByOptionChosen(); +void TeachyTvPrepBattle(u8 taskId); +void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); extern void VblankHblankHandlerSetZero(); extern void sub_812B1E0(u16); extern void sub_815BD80(void *); extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); extern void sub_8055DC4(); -extern void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); extern bool16 sub_80BF518(u8 textPrinterId); extern void _call_via_r1(s32 arg, void *func); -extern void TeachyTvBackToOptionList(u8 taskId); +extern void sub_810B108(u8); + void C2TeachyTv() { @@ -638,7 +643,7 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) TeachyTvSetSpriteCoordsAndSwitchFrame(*((char *)data + 2), 0, 0, 0); FillWindowPixelBuffer(0, 0xCCu); CopyWindowToVram(0, 2u); - TeachyTvClearBg1EndGraphicalText(); + TeachyTvClearBg1EndGraphicText(); data[2] = v4; data[3] = v4; gTasks[taskId].func = TeachyTvBackToOptionList; @@ -796,14 +801,83 @@ void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) data[2] = temp; if ( (s16)temp > 126 ) { - TeachyTvClearBg1EndGraphicalText(); + TeachyTvClearBg1EndGraphicText(); (u16)data[2] = 0; ++(u16)data[3]; } } -void TeachyTvClearBg1EndGraphicalText() +void TeachyTvClearBg1EndGraphicText() { FillBgTilemapBufferRect_Palette0(1u, 0, 0x14u, 0xAu, 8u, 2u); schedule_bg_copy_tilemap_to_vram(1u); -} \ No newline at end of file +} + +void TeachyTvBackToOptionList(u8 taskId) +{ + s16 *data; + s32 temp; + + data = gTasks[taskId].data; + if ( !data[2] ) + PlayNewMapMusic(BGM_FRLG_TEACHY_TV); + TeachyTvBg2AnimController(); + temp = (u16)data[2] + 1; + data[2] = temp; + if ( (s16)temp > 0x3F ) + { + data[2] = 0; + data[3] = 0; + *data = TeachyTvSetupWindow(); + gTasks[taskId].func = TeachyTvOptionListController; + PutWindowTilemap(0); + TeachyTvSetupScrollIndicatorArrowPair(); + TeachyTvSetWindowRegs(); + schedule_bg_copy_tilemap_to_vram(0); + ChangeBgX(3u, 0, 0); + ChangeBgY(3u, 0, 0); + ChangeBgX(3u, 0x1000u, 2u); + ChangeBgY(3u, 0x2800u, 1u); + ((u8*)gUnknown_203F450)[0x4004] = 0; + ((u8*)gUnknown_203F450)[0x4005] = 3; + ((u8*)gUnknown_203F450)[0x4006] = 0; + } +} + +void TeachyTvChainTaskBattleOrFadeByOptionChosen(u8 taskId) +{ + int op = gTeachyTV_StaticResources.optionChosen; + if( op < 0 ) + return; + if ( op <= 3 ) + { + TeachyTvPrepBattle(taskId); + + } + else if ( op <= 5 ) + { + *((void(**)())gUnknown_203F450) = TeachyTvSetupBagItemsByOptionChosen; + TeachyTvQuitBeginFade(taskId); + } +} + +void TeachyTvSetupBagItemsByOptionChosen() +{ + if ( gTeachyTV_StaticResources.optionChosen == 4 ) + sub_810B108(0xAu); + else + sub_810B108(9u); +} + +void TeachyTvPostBattleFadeControl(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if ( !(gPaletteFade.active) ) + { + u8* funcIdx = &gUnknown_8479390; + int arg = funcIdx[gTeachyTV_StaticResources.optionChosen]; + data[3] = arg; + gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs; + } +} + -- cgit v1.2.3 From 39e7cab3680376153b094c390e96f62ba9ec0539 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Wed, 5 Jun 2019 14:51:58 +0800 Subject: grass anim main function down --- asm/teachy_tv.s | 116 +++++--------------------------------------------------- src/teachy_tv.c | 45 +++++++++++++++++++++- 2 files changed, 52 insertions(+), 109 deletions(-) diff --git a/asm/teachy_tv.s b/asm/teachy_tv.s index 52d3683c2..4150dfd0f 100644 --- a/asm/teachy_tv.s +++ b/asm/teachy_tv.s @@ -5,106 +5,8 @@ .text - thumb_func_start TeachyTvGrassAnimationMain -TeachyTvGrassAnimationMain: @ 815BAA0 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r4, [sp, 0x1C] - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r1, 16 - lsrs r6, r1, 16 - lsls r2, 16 - lsrs r1, r2, 16 - lsls r3, 24 - lsrs r7, r3, 24 - lsls r4, 24 - lsrs r4, 24 - mov r8, r4 - ldr r0, _0815BB34 @ =gUnknown_203F450 - ldr r0, [r0] - ldr r2, _0815BB38 @ =0x00004006 - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0815BB5C - lsls r0, r6, 16 - ldr r2, _0815BB3C @ =0xfff00000 - adds r0, r2 - asrs r0, 16 - lsls r1, 16 - asrs r5, r1, 16 - adds r1, r5, 0 - bl sub_815BC40 - lsls r0, 24 - cmp r0, 0 - beq _0815BB5C - ldr r0, _0815BB40 @ =gUnknown_83A0010 - ldr r0, [r0, 0x10] - movs r1, 0 - movs r2, 0 - adds r3, r7, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _0815BB44 @ =gSprites - adds r4, r1, r0 - strh r6, [r4, 0x24] - adds r0, r5, 0 - adds r0, 0x8 - strh r0, [r4, 0x26] - ldr r0, _0815BB48 @ =sub_815BB6C - str r0, [r4, 0x1C] - mov r0, r9 - strh r0, [r4, 0x2E] - mov r2, r8 - cmp r2, 0x1 - bne _0815BB4C - adds r0, r4, 0 - movs r1, 0x4 - bl SeekSpriteAnim - ldrb r0, [r4, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r0 - movs r0, 0x8 - orrs r1, r0 - strb r1, [r4, 0x5] - b _0815BB5C - .align 2, 0 -_0815BB34: .4byte gUnknown_203F450 -_0815BB38: .4byte 0x00004006 -_0815BB3C: .4byte 0xfff00000 -_0815BB40: .4byte gUnknown_83A0010 -_0815BB44: .4byte gSprites -_0815BB48: .4byte sub_815BB6C -_0815BB4C: - ldr r1, _0815BB68 @ =gUnknown_84795B8 - adds r0, r4, 0 - bl SetSubspriteTables - adds r1, r4, 0 - adds r1, 0x42 - movs r0, 0x40 - strb r0, [r1] -_0815BB5C: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815BB68: .4byte gUnknown_84795B8 - thumb_func_end TeachyTvGrassAnimationMain - - thumb_func_start sub_815BB6C -sub_815BB6C: @ 815BB6C + thumb_func_start TeachyTvGrassAnimationObjCallback +TeachyTvGrassAnimationObjCallback: @ 815BB6C push {r4,r5,lr} adds r3, r0, 0 movs r0, 0x2E @@ -210,10 +112,10 @@ _0815BC3A: pop {r4,r5} pop {r0} bx r0 - thumb_func_end sub_815BB6C + thumb_func_end TeachyTvGrassAnimationObjCallback - thumb_func_start sub_815BC40 -sub_815BC40: @ 815BC40 + thumb_func_start TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj +TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj: @ 815BC40 push {r4,r5,lr} lsls r1, 16 lsrs r1, 16 @@ -253,7 +155,7 @@ _0815BC80: .4byte gUnknown_84795C8 _0815BC84: .4byte gUnknown_203F450 _0815BC88: .4byte 0x00004005 _0815BC8C: .4byte 0x00004004 - thumb_func_end sub_815BC40 + thumb_func_end TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj thumb_func_start TeachyTvPrepBattle TeachyTvPrepBattle: @ 815BC90 @@ -374,8 +276,8 @@ _0815BD78: bx r0 thumb_func_end sub_815BD58 - thumb_func_start sub_815BD80 -sub_815BD80: @ 815BD80 + thumb_func_start TeachyTvLoadBg3Map +TeachyTvLoadBg3Map: @ 815BD80 push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -594,7 +496,7 @@ _0815BF00: bx r0 .align 2, 0 _0815BF44: .4byte 0xfffffd80 - thumb_func_end sub_815BD80 + thumb_func_end TeachyTvLoadBg3Map thumb_func_start sub_815BF48 sub_815BF48: @ 815BF48 diff --git a/src/teachy_tv.c b/src/teachy_tv.c index d274e18ec..56c9e25cf 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -55,6 +55,8 @@ extern struct ListMenuItem gUnknown_8479340; extern struct WindowTemplate gUnknown_84792F0; extern u8 gUnknown_8479590; extern u8 gUnknown_8479390; +extern struct SubspriteTable gUnknown_84795B8; +extern struct SpriteTemplate *gUnknown_83A0010; void C2TeachyTv(); void C2TeachyTvMainCallback(); @@ -81,10 +83,12 @@ void TeachyTvBackToOptionList(u8 taskId); void TeachyTvSetupBagItemsByOptionChosen(); void TeachyTvPrepBattle(u8 taskId); void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); +void TeachyTvLoadBg3Map(void *); +u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y); +void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite); extern void VblankHblankHandlerSetZero(); extern void sub_812B1E0(u16); -extern void sub_815BD80(void *); extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); extern void sub_8055DC4(); extern bool16 sub_80BF518(u8 textPrinterId); @@ -234,7 +238,7 @@ void TeachyTvLoadGraphic() LoadCompressedPalette(&gUnknown_8E86F98, 0, 0x80u); LoadPalette(&src, 0, 2u); LoadSpritePalette((struct SpritePalette *)&gUnknown_83A5348); - sub_815BD80((u8 *)gUnknown_203F450 + 0x2004); + TeachyTvLoadBg3Map((u8 *)gUnknown_203F450 + 0x2004); } void TeachyTvCreateAndRenderRbox() @@ -881,3 +885,40 @@ void TeachyTvPostBattleFadeControl(u8 taskId) } } +void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode) +{ + u8 subprio; + int res; + struct Sprite *obj; + int objId; + struct SpriteTemplate **objTemAddr; + + subprio = subpriority; + if ( ((u8*)gUnknown_203F450)[0x4006] != 1 ) + { + res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj( + (u32)((x << 16) - 0x100000) >> 16, + y); + if ( res << 24 ) + { + objTemAddr = &gUnknown_83A0010; + objId = CreateSprite(*(objTemAddr+4), 0, 0, subprio); + obj = gSprites + objId; + obj->pos2.x = x; + obj->pos2.y = y + 8; + obj->callback = TeachyTvGrassAnimationObjCallback; + obj->data[0] = taskId; + if ( mode == 1 ) + { + SeekSpriteAnim(obj, 4u); + obj->oam.priority = 2; + } + else + { + SetSubspriteTables(obj, &gUnknown_84795B8); + obj->subspriteTableNum = 0; + obj->subspriteMode = 1; + } + } + } +} \ No newline at end of file -- cgit v1.2.3 From a827ac6c8f37fd7a8a5f8850ab54f386dcafcc88 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Thu, 6 Jun 2019 01:40:11 +0800 Subject: map functions are coming --- asm/teachy_tv.s | 271 -------------------------------------------------------- src/teachy_tv.c | 134 ++++++++++++++++++++++++---- 2 files changed, 119 insertions(+), 286 deletions(-) diff --git a/asm/teachy_tv.s b/asm/teachy_tv.s index 4150dfd0f..06d27a3da 100644 --- a/asm/teachy_tv.s +++ b/asm/teachy_tv.s @@ -5,277 +5,6 @@ .text - thumb_func_start TeachyTvGrassAnimationObjCallback -TeachyTvGrassAnimationObjCallback: @ 815BB6C - push {r4,r5,lr} - adds r3, r0, 0 - movs r0, 0x2E - ldrsh r1, [r3, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - ldr r1, _0815BBA4 @ =gTasks+0x8 - adds r4, r0, r1 - movs r2, 0x2 - ldrsh r1, [r4, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0815BBA8 @ =gSprites - adds r5, r0, r1 - ldr r0, _0815BBAC @ =gUnknown_203F450 - ldr r0, [r0] - ldr r1, _0815BBB0 @ =0x00004006 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - bne _0815BBB4 - adds r0, r3, 0 - bl DestroySprite - b _0815BC3A - .align 2, 0 -_0815BBA4: .4byte gTasks+0x8 -_0815BBA8: .4byte gSprites -_0815BBAC: .4byte gUnknown_203F450 -_0815BBB0: .4byte 0x00004006 -_0815BBB4: - adds r0, r3, 0 - adds r0, 0x2B - ldrb r0, [r0] - cmp r0, 0 - bne _0815BBD2 - adds r2, r3, 0 - adds r2, 0x42 - ldrb r0, [r2] - movs r1, 0x40 - negs r1, r1 - ands r1, r0 - movs r0, 0x1 - orrs r1, r0 - strb r1, [r2] - b _0815BBE0 -_0815BBD2: - adds r2, r3, 0 - adds r2, 0x42 - ldrb r1, [r2] - movs r0, 0x40 - negs r0, r0 - ands r0, r1 - strb r0, [r2] -_0815BBE0: - ldrh r0, [r4, 0x8] - ldrh r2, [r3, 0x24] - adds r0, r2 - strh r0, [r3, 0x24] - ldrh r0, [r4, 0xA] - ldrh r1, [r3, 0x26] - adds r0, r1 - strh r0, [r3, 0x26] - adds r0, r3, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0815BC3A - adds r1, r3, 0 - adds r1, 0x43 - movs r0, 0 - strb r0, [r1] - ldrh r1, [r3, 0x24] - ldrh r0, [r5, 0x24] - subs r1, r0 - ldrh r0, [r3, 0x26] - ldrh r2, [r5, 0x26] - subs r0, r2 - lsls r0, 16 - lsrs r0, 16 - lsls r1, 16 - movs r2, 0xF0 - lsls r2, 12 - adds r1, r2 - lsrs r1, 16 - cmp r1, 0x1E - bhi _0815BC34 - lsls r0, 16 - asrs r1, r0, 16 - movs r0, 0x10 - negs r0, r0 - cmp r1, r0 - ble _0815BC34 - cmp r1, 0x17 - ble _0815BC3A -_0815BC34: - adds r0, r3, 0 - bl DestroySprite -_0815BC3A: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end TeachyTvGrassAnimationObjCallback - - thumb_func_start TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj -TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj: @ 815BC40 - push {r4,r5,lr} - lsls r1, 16 - lsrs r1, 16 - lsls r4, r0, 16 - cmp r4, 0 - blt _0815BC52 - lsls r1, 16 - cmp r1, 0 - bge _0815BC56 -_0815BC52: - movs r0, 0 - b _0815BC78 -_0815BC56: - ldr r3, _0815BC80 @ =gUnknown_84795C8 - ldr r0, _0815BC84 @ =gUnknown_203F450 - ldr r2, [r0] - ldr r5, _0815BC88 @ =0x00004005 - adds r0, r2, r5 - asrs r1, 20 - ldrb r0, [r0] - adds r1, r0 - lsls r1, 4 - ldr r0, _0815BC8C @ =0x00004004 - adds r2, r0 - asrs r0, r4, 20 - ldrb r2, [r2] - adds r0, r2 - adds r1, r0 - adds r1, r3 - ldrb r0, [r1] -_0815BC78: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0815BC80: .4byte gUnknown_84795C8 -_0815BC84: .4byte gUnknown_203F450 -_0815BC88: .4byte 0x00004005 -_0815BC8C: .4byte 0x00004004 - thumb_func_end TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj - - thumb_func_start TeachyTvPrepBattle -TeachyTvPrepBattle: @ 815BC90 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _0815BCCC @ =gTasks+0x8 - adds r5, r0, r1 - bl TeachyTvFree - ldr r1, _0815BCD0 @ =gSpecialVar_0x8004 - ldr r4, _0815BCD4 @ =gTeachyTV_StaticResources - ldrb r0, [r4, 0x5] - strh r0, [r1] - ldr r1, _0815BCD8 @ =gMain - ldr r0, _0815BCDC @ =sub_815BD58 - str r0, [r1, 0x8] - bl SavePlayerParty - bl sub_8159F40 - movs r0, 0 - bl PlayMapChosenOrBattleBGM - ldrb r0, [r4, 0x5] - cmp r0, 0 - bne _0815BCE0 - movs r0, 0x9 - b _0815BCE2 - .align 2, 0 -_0815BCCC: .4byte gTasks+0x8 -_0815BCD0: .4byte gSpecialVar_0x8004 -_0815BCD4: .4byte gTeachyTV_StaticResources -_0815BCD8: .4byte gMain -_0815BCDC: .4byte sub_815BD58 -_0815BCE0: - movs r0, 0x8 -_0815BCE2: - strh r0, [r5, 0xC] - movs r0, 0 - strh r0, [r5, 0xE] - ldr r1, _0815BCFC @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _0815BD00 @ =sub_815BD04 - str r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0815BCFC: .4byte gTasks -_0815BD00: .4byte sub_815BD04 - thumb_func_end TeachyTvPrepBattle - - thumb_func_start sub_815BD04 -sub_815BD04: @ 815BD04 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0815BD24 @ =gTasks+0x8 - adds r4, r0, r1 - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _0815BD28 - cmp r0, 0x1 - beq _0815BD36 - b _0815BD4C - .align 2, 0 -_0815BD24: .4byte gTasks+0x8 -_0815BD28: - ldrb r0, [r4, 0xC] - bl sub_80D08B8 - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - b _0815BD4C -_0815BD36: - bl sub_80D08F8 - lsls r0, 24 - cmp r0, 0 - beq _0815BD4C - ldr r0, _0815BD54 @ =sub_800FD9C - bl SetMainCallback2 - adds r0, r5, 0 - bl DestroyTask -_0815BD4C: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0815BD54: .4byte sub_800FD9C - thumb_func_end sub_815BD04 - - thumb_func_start sub_815BD58 -sub_815BD58: @ 815BD58 - push {lr} - bl LoadPlayerParty - ldr r0, _0815BD6C @ =gUnknown_2023E8A - ldrb r0, [r0] - cmp r0, 0x3 - bne _0815BD70 - bl sub_815AC20 - b _0815BD78 - .align 2, 0 -_0815BD6C: .4byte gUnknown_2023E8A -_0815BD70: - movs r0, 0x88 - lsls r0, 1 - bl PlayNewMapMusic -_0815BD78: - bl sub_815ABFC - pop {r0} - bx r0 - thumb_func_end sub_815BD58 - thumb_func_start TeachyTvLoadBg3Map TeachyTvLoadBg3Map: @ 815BD80 push {r4-r7,lr} diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 56c9e25cf..00df2807e 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -23,17 +23,20 @@ #include "text.h" #include "constants/songs.h" #include "constants/items.h" +#include "event_data.h" +#include "load_save.h" +#include "battle_transition.h" +#include "battle_2.h" +#include "battle.h" typedef struct Task Task; - typedef struct { void (*callback)(); u8 mode; u8 optionChosen; u16 scrollOffset; u16 selectedRow; - u8 param4; - u8 filler; + u16 filler; } TeachyTv_s; extern TeachyTv_s gTeachyTV_StaticResources; @@ -57,10 +60,11 @@ extern u8 gUnknown_8479590; extern u8 gUnknown_8479390; extern struct SubspriteTable gUnknown_84795B8; extern struct SpriteTemplate *gUnknown_83A0010; +extern u8 gUnknown_84795C8; -void C2TeachyTv(); -void C2TeachyTvMainCallback(); -void VblankHandlerTeachyTv(); +void TeachyTvCallback(); +void TeachyTvMainCallback(); +void TeachyTvVblankHandler(); void sub_815ABC4(u8 mode, void (*cb)()); void sub_815ABFC(); void sub_815AC20(); @@ -86,6 +90,8 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m void TeachyTvLoadBg3Map(void *); u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y); void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite); +void TeachyTvRestorePlayerPartyCallback(); +void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId); extern void VblankHblankHandlerSetZero(); extern void sub_812B1E0(u16); @@ -94,9 +100,9 @@ extern void sub_8055DC4(); extern bool16 sub_80BF518(u8 textPrinterId); extern void _call_via_r1(s32 arg, void *func); extern void sub_810B108(u8); +extern void sub_8159F40(); - -void C2TeachyTv() +void TeachyTvCallback() { RunTasks(); AnimateSprites(); @@ -105,7 +111,7 @@ void C2TeachyTv() UpdatePaletteFade(); } -void VblankHandlerTeachyTv() +void TeachyTvVblankHandler() { LoadOam(); ProcessSpriteCopyRequests(); @@ -126,7 +132,7 @@ void sub_815ABC4(u8 mode, void (*cb)()) } if(mode == 1) v3->mode = 0; - SetMainCallback2(C2TeachyTvMainCallback); + SetMainCallback2(TeachyTvMainCallback); } void sub_815ABFC() @@ -142,7 +148,7 @@ void sub_815AC20() gTeachyTV_StaticResources.mode = 1; } -void C2TeachyTvMainCallback() +void TeachyTvMainCallback() { int state; int taskId; @@ -151,7 +157,6 @@ void C2TeachyTvMainCallback() u32 x; state = gMain.state; - // tried several ways to reproduce the control flow, but all failed. Now using goto if ( state == 0 ) goto RESETANDLOAD; else if ( state == 1 ) @@ -203,8 +208,8 @@ SETDMATOVRAM: sub_812B1E0(9); // help system something BlendPalettes(0xFFFFFFFF, 0x10u, 0); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10u, 0, 0); - SetVBlankCallback(VblankHandlerTeachyTv); - SetMainCallback2(C2TeachyTv); + SetVBlankCallback(TeachyTvVblankHandler); + SetMainCallback2(TeachyTvCallback); } void TeachyTvSetupBg() @@ -921,4 +926,103 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m } } } -} \ No newline at end of file +} + +void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite) +{ + u32 diff1, diff2; + s16 *data = gTasks[sprite->data[0]].data; + struct Sprite *objAddr = &gSprites[data[1]]; + if(((u8*)gUnknown_203F450)[0x4006] == 1) + DestroySprite(sprite); + else { + if(sprite->animCmdIndex == 0) + sprite->subspriteTableNum = 1; + else + sprite->subspriteTableNum = 0; + sprite->pos2.x += (u16)data[4]; + sprite->pos2.y += (u16)data[5]; + if(sprite->animEnded == 0) + return; + sprite->subpriority = 0; + diff1 = (u16)(sprite->pos2.x - objAddr->pos2.x); + diff2 = (u16)(sprite->pos2.y - objAddr->pos2.y); + diff1 = ((diff1 << 0x10)+0xF0000) >> 0x10; + if(diff1 <= 0x1E) + { + if((s16)diff2 > -0x10) + { + if((s16)diff2 <= 0x17) + return; + } + } + DestroySprite(sprite); + } +} + +u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y) +{ + u8 * arr, *ptr; + int a, b; + if( (x < 0) || (y < 0) ) + return 0; + arr = &gUnknown_84795C8; + ptr = gUnknown_203F450; + a = ((y >> 4) + ptr[0x4005]) << 4; + b = ((x >> 4) + ptr[0x4004]); + return arr[a+b]; +} + +void TeachyTvPrepBattle(u8 taskId) +{ + s16 *data; + + taskId = taskId; + data = gTasks[taskId].data; + TeachyTvFree(); + gSpecialVar_0x8004 = gTeachyTV_StaticResources.optionChosen; + gMain.savedCallback = TeachyTvRestorePlayerPartyCallback; + SavePlayerParty(); + sub_8159F40(); + PlayMapChosenOrBattleBGM(MUS_DUMMY); + if ( !gTeachyTV_StaticResources.optionChosen ) + data[6] = 9; + else + data[6] = 8; + data[7] = 0; + gTasks[taskId].func = TeachyTvPreBattleAnimAndSetBattleCallback; +} + +void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId) +{ + s16 *data; + int temp; + + data = gTasks[taskId].data; + switch(data[7]) + { + case 0: + sub_80D08B8(*((u8*)data + 12)); + ++data[7]; + break; + case 1: + temp = sub_80D08F8(); + if ( temp << 24 ) + { + SetMainCallback2(sub_800FD9C); + DestroyTask(taskId); + } + break; + } +} + +void TeachyTvRestorePlayerPartyCallback() +{ + LoadPlayerParty(); + if ( gUnknown_2023E8A == 3 ) + sub_815AC20(); + else + PlayNewMapMusic(BGM_FRLG_FOLLOW_ME); + sub_815ABFC(); +} + -- cgit v1.2.3 From 23a5cf1e90ef2e4422ded89f9ed4e4010ba98c6e Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Thu, 6 Jun 2019 06:38:55 +0800 Subject: 3 fails and 2 are not attempted --- asm/teachy_tv.s | 655 -------------------------------------------------------- ld_script.txt | 1 - src/teachy_tv.c | 603 ++++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 602 insertions(+), 657 deletions(-) delete mode 100644 asm/teachy_tv.s diff --git a/asm/teachy_tv.s b/asm/teachy_tv.s deleted file mode 100644 index 06d27a3da..000000000 --- a/asm/teachy_tv.s +++ /dev/null @@ -1,655 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start TeachyTvLoadBg3Map -TeachyTvLoadBg3Map: @ 815BD80 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x1C - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x10] - ldr r1, _0815BE1C @ =Route1_Layout - mov r8, r1 - movs r0, 0x80 - lsls r0, 4 - bl AllocZeroed - adds r6, r0, 0 - movs r0, 0x80 - lsls r0, 8 - bl AllocZeroed - str r0, [sp, 0x8] - movs r0, 0x10 - bl Alloc - str r0, [sp, 0xC] - movs r1, 0xFF - movs r2, 0x10 - bl memset - mov r2, r8 - ldr r0, [r2, 0x10] - movs r2, 0xA0 - lsls r2, 2 - ldr r1, [sp, 0x8] - bl sub_815BF48 - mov r3, r8 - ldr r0, [r3, 0x14] - ldr r2, [sp, 0x8] - movs r3, 0xA0 - lsls r3, 7 - adds r1, r2, r3 - movs r2, 0xC0 - lsls r2, 1 - bl sub_815BF48 - movs r4, 0 -_0815BDDE: - movs r2, 0 - adds r0, r4, 0x6 - str r0, [sp, 0x18] - lsls r1, r4, 4 - mov r10, r1 - lsls r3, r4, 6 - mov r9, r3 - adds r4, 0x1 - str r4, [sp, 0x14] -_0815BDF0: - mov r1, r8 - ldr r0, [r1] - ldr r3, [sp, 0x18] - muls r0, r3 - ldr r1, [r1, 0xC] - adds r0, r2, r0 - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0, 0x10] - ldr r3, _0815BE20 @ =0x000003ff - adds r0, r3, 0 - adds r4, r0, 0 - ands r4, r1 - movs r3, 0 - mov r0, r10 - adds r1, r0, r2 - lsls r5, r2, 1 - adds r7, r2, 0x1 - cmp r3, r1 - bge _0815BE3C - ldrh r0, [r6] - b _0815BE34 - .align 2, 0 -_0815BE1C: .4byte Route1_Layout -_0815BE20: .4byte 0x000003ff -_0815BE24: - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, r1 - bge _0815BE3C - lsls r0, r3, 1 - adds r0, r6 - ldrh r0, [r0] -_0815BE34: - cmp r0, 0 - beq _0815BE46 - cmp r0, r4 - bne _0815BE24 -_0815BE3C: - lsls r0, r3, 1 - adds r0, r6 - ldrh r0, [r0] - cmp r0, 0 - bne _0815BE56 -_0815BE46: - lsls r0, r3, 1 - adds r0, r6 - strh r4, [r0] - ldr r0, [sp, 0x10] - adds r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0x10] -_0815BE56: - mov r2, r9 - adds r1, r2, r5 - lsls r1, 1 - ldr r0, [sp, 0x4] - adds r1, r0, r1 - str r3, [sp] - mov r0, r8 - ldr r2, [sp, 0xC] - adds r3, r4, 0 - bl sub_815BF70 - lsls r0, r7, 16 - lsrs r2, r0, 16 - cmp r2, 0xF - bls _0815BDF0 - ldr r1, [sp, 0x14] - lsls r0, r1, 16 - lsrs r4, r0, 16 - cmp r4, 0x8 - bls _0815BDDE - ldr r2, [sp, 0x10] - lsls r0, r2, 7 - bl Alloc - adds r7, r0, 0 - movs r0, 0x80 - bl Alloc - adds r5, r0, 0 - movs r4, 0 - ldr r3, [sp, 0x10] - lsls r3, 23 - mov r9, r3 - ldr r0, [sp, 0x10] - cmp r4, r0 - bcs _0815BF00 - ldr r1, _0815BECC @ =0x0000027f - mov r10, r1 -_0815BEA2: - adds r0, r5, 0 - movs r1, 0 - movs r2, 0x80 - bl memset - lsls r0, r4, 1 - adds r1, r0, r6 - ldrh r0, [r1] - cmp r0, r10 - bhi _0815BED0 - mov r2, r8 - ldr r0, [r2, 0x10] - ldrh r1, [r1] - lsls r1, 4 - ldr r0, [r0, 0xC] - adds r0, r1 - adds r1, r5, 0 - ldr r2, [sp, 0x8] - bl sub_815BFF0 - b _0815BEE8 - .align 2, 0 -_0815BECC: .4byte 0x0000027f -_0815BED0: - mov r3, r8 - ldr r0, [r3, 0x14] - ldrh r1, [r1] - ldr r2, _0815BF44 @ =0xfffffd80 - adds r1, r2 - lsls r1, 4 - ldr r0, [r0, 0xC] - adds r0, r1 - adds r1, r5, 0 - ldr r2, [sp, 0x8] - bl sub_815BFF0 -_0815BEE8: - lsls r1, r4, 7 - adds r1, r7, r1 - adds r0, r5, 0 - movs r2, 0x20 - bl CpuFastSet - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - ldr r3, [sp, 0x10] - cmp r4, r3 - bcc _0815BEA2 -_0815BF00: - mov r0, r9 - lsrs r2, r0, 16 - movs r0, 0x3 - adds r1, r7, 0 - movs r3, 0 - bl LoadBgTiles - mov r0, r8 - ldr r1, [sp, 0xC] - bl sub_815C230 - adds r0, r5, 0 - bl Free - adds r0, r7, 0 - bl Free - ldr r0, [sp, 0xC] - bl Free - ldr r0, [sp, 0x8] - bl Free - adds r0, r6, 0 - bl Free - add sp, 0x1C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815BF44: .4byte 0xfffffd80 - thumb_func_end TeachyTvLoadBg3Map - - thumb_func_start sub_815BF48 -sub_815BF48: @ 815BF48 - push {lr} - adds r3, r0, 0 - lsls r2, 16 - lsrs r2, 16 - cmp r3, 0 - beq _0815BF6A - ldrb r0, [r3] - cmp r0, 0 - bne _0815BF64 - ldr r0, [r3, 0x4] - lsls r2, 3 - bl CpuFastSet - b _0815BF6A -_0815BF64: - ldr r0, [r3, 0x4] - bl LZDecompressWram -_0815BF6A: - pop {r0} - bx r0 - thumb_func_end sub_815BF48 - - thumb_func_start sub_815BF70 -sub_815BF70: @ 815BF70 - push {r4-r7,lr} - adds r5, r0, 0 - adds r7, r1, 0 - adds r6, r2, 0 - ldr r0, [sp, 0x14] - lsls r3, 16 - lsrs r1, r3, 16 - lsls r0, 16 - lsrs r4, r0, 16 - ldr r0, _0815BF8C @ =0x0000027f - cmp r1, r0 - bhi _0815BF90 - ldr r0, [r5, 0x10] - b _0815BF96 - .align 2, 0 -_0815BF8C: .4byte 0x0000027f -_0815BF90: - ldr r0, [r5, 0x14] - ldr r2, _0815BFEC @ =0xfffffd80 - adds r1, r2 -_0815BF96: - lsls r1, 4 - ldr r0, [r0, 0xC] - adds r5, r0, r1 - ldrh r1, [r5] - adds r0, r6, 0 - bl sub_815C1F0 - lsls r0, 12 - lsls r4, 2 - adds r0, r4 - strh r0, [r7] - ldrh r1, [r5, 0x2] - adds r0, r6, 0 - bl sub_815C1F0 - lsls r0, 12 - adds r0, r4 - adds r0, 0x1 - strh r0, [r7, 0x2] - ldrh r1, [r5, 0x4] - adds r0, r6, 0 - bl sub_815C1F0 - adds r1, r7, 0 - adds r1, 0x40 - lsls r0, 12 - adds r0, r4 - adds r0, 0x2 - strh r0, [r1] - ldrh r1, [r5, 0x6] - adds r0, r6, 0 - bl sub_815C1F0 - adds r1, r7, 0 - adds r1, 0x42 - lsls r0, 12 - adds r0, r4 - adds r0, 0x3 - strh r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815BFEC: .4byte 0xfffffd80 - thumb_func_end sub_815BF70 - - thumb_func_start sub_815BFF0 -sub_815BFF0: @ 815BFF0 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - mov r8, r0 - mov r9, r1 - adds r5, r2, 0 - ldrh r2, [r0] - ldr r4, _0815C0D0 @ =0x000003ff - adds r1, r4, 0 - ands r1, r2 - lsls r1, 5 - adds r1, r5, r1 - lsrs r2, 10 - movs r6, 0x3 - ands r2, r6 - mov r0, r9 - bl sub_815C0D4 - mov r0, r8 - ldrh r2, [r0, 0x8] - adds r1, r4, 0 - ands r1, r2 - lsls r1, 5 - adds r1, r5, r1 - lsrs r2, 10 - ands r2, r6 - mov r0, r9 - bl sub_815C0D4 - movs r0, 0x20 - add r0, r9 - mov r10, r0 - mov r0, r8 - ldrh r2, [r0, 0x2] - adds r1, r4, 0 - ands r1, r2 - lsls r1, 5 - adds r1, r5, r1 - lsrs r2, 10 - ands r2, r6 - mov r0, r10 - bl sub_815C0D4 - mov r0, r8 - ldrh r2, [r0, 0xA] - adds r1, r4, 0 - ands r1, r2 - lsls r1, 5 - adds r1, r5, r1 - lsrs r2, 10 - ands r2, r6 - mov r0, r10 - bl sub_815C0D4 - movs r0, 0x40 - add r0, r9 - mov r10, r0 - mov r0, r8 - ldrh r2, [r0, 0x4] - adds r1, r4, 0 - ands r1, r2 - lsls r1, 5 - adds r1, r5, r1 - lsrs r2, 10 - ands r2, r6 - mov r0, r10 - bl sub_815C0D4 - mov r0, r8 - ldrh r2, [r0, 0xC] - adds r1, r4, 0 - ands r1, r2 - lsls r1, 5 - adds r1, r5, r1 - lsrs r2, 10 - ands r2, r6 - mov r0, r10 - bl sub_815C0D4 - movs r0, 0x60 - add r9, r0 - mov r0, r8 - ldrh r2, [r0, 0x6] - adds r1, r4, 0 - ands r1, r2 - lsls r1, 5 - adds r1, r5, r1 - lsrs r2, 10 - ands r2, r6 - mov r0, r9 - bl sub_815C0D4 - mov r0, r8 - ldrh r2, [r0, 0xE] - ands r4, r2 - lsls r4, 5 - adds r5, r4 - lsrs r2, 10 - ands r2, r6 - mov r0, r9 - adds r1, r5, 0 - bl sub_815C0D4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0815C0D0: .4byte 0x000003ff - thumb_func_end sub_815BFF0 - - thumb_func_start sub_815C0D4 -sub_815C0D4: @ 815C0D4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - mov r9, r0 - adds r4, r1, 0 - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - movs r0, 0x20 - bl AllocZeroed - adds r6, r0, 0 - movs r0, 0x20 - bl AllocZeroed - str r0, [sp] - adds r0, r4, 0 - adds r1, r6, 0 - movs r2, 0x8 - bl CpuFastSet - movs r0, 0x1 - mov r1, r10 - ands r0, r1 - cmp r0, 0 - beq _0815C15A - movs r5, 0 - movs r7, 0xF - mov r12, r7 - movs r0, 0xF0 - mov r8, r0 -_0815C118: - movs r3, 0 - lsls r4, r5, 2 -_0815C11C: - subs r0, r3, 0x3 - subs r0, r4, r0 - adds r0, r6, r0 - ldrb r1, [r0] - adds r2, r4, r3 - ldr r7, [sp] - adds r2, r7, r2 - adds r0, r1, 0 - mov r7, r12 - ands r0, r7 - lsls r0, 4 - mov r7, r8 - ands r1, r7 - lsrs r1, 4 - adds r0, r1 - strb r0, [r2] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3 - bls _0815C11C - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x7 - bls _0815C118 - ldr r0, [sp] - adds r1, r6, 0 - movs r2, 0x8 - bl CpuFastSet -_0815C15A: - movs r0, 0x2 - mov r1, r10 - ands r0, r1 - cmp r0, 0 - beq _0815C18E - movs r5, 0 -_0815C166: - lsls r0, r5, 2 - ldr r7, [sp] - adds r0, r7 - movs r1, 0x7 - subs r1, r5 - lsls r1, 2 - adds r1, r6 - movs r2, 0x4 - bl memcpy - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x7 - bls _0815C166 - ldr r0, [sp] - adds r1, r6, 0 - movs r2, 0x8 - bl CpuFastSet -_0815C18E: - movs r5, 0 - movs r0, 0xF0 - mov r8, r0 - movs r1, 0xF - mov r12, r1 -_0815C198: - adds r4, r6, r5 - ldrb r0, [r4] - mov r3, r8 - ands r3, r0 - cmp r3, 0 - beq _0815C1B2 - mov r7, r9 - adds r2, r7, r5 - ldrb r1, [r2] - mov r0, r12 - ands r0, r1 - adds r0, r3 - strb r0, [r2] -_0815C1B2: - ldrb r0, [r4] - mov r3, r12 - ands r3, r0 - cmp r3, 0 - beq _0815C1CA - mov r0, r9 - adds r2, r0, r5 - ldrb r1, [r2] - mov r0, r8 - ands r0, r1 - adds r0, r3 - strb r0, [r2] -_0815C1CA: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x1F - bls _0815C198 - ldr r0, [sp] - bl Free - adds r0, r6, 0 - bl Free - 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_815C0D4 - - thumb_func_start sub_815C1F0 -sub_815C1F0: @ 815C1F0 - push {r4,lr} - adds r4, r0, 0 - lsls r1, 16 - lsrs r1, 28 - movs r3, 0 - ldrb r0, [r4] - cmp r0, r1 - beq _0815C220 - cmp r0, 0xFF - bne _0815C208 - strb r1, [r4] - b _0815C220 -_0815C208: - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0xF - bhi _0815C220 - adds r2, r4, r3 - ldrb r0, [r2] - cmp r0, r1 - beq _0815C220 - cmp r0, 0xFF - bne _0815C208 - strb r1, [r2] -_0815C220: - movs r0, 0xF - subs r0, r3 - lsls r0, 16 - lsrs r0, 16 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_815C1F0 - - thumb_func_start sub_815C230 -sub_815C230: @ 815C230 - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - movs r4, 0 - ldrb r0, [r5] - cmp r0, 0xFF - beq _0815C274 -_0815C23E: - adds r1, r5, r4 - ldrb r0, [r1] - cmp r0, 0x6 - bls _0815C24A - ldr r0, [r6, 0x14] - b _0815C24C -_0815C24A: - ldr r0, [r6, 0x10] -_0815C24C: - ldrb r1, [r1] - lsls r1, 5 - ldr r0, [r0, 0x8] - adds r0, r1 - movs r1, 0xF - subs r1, r4 - lsls r1, 20 - lsrs r1, 16 - movs r2, 0x20 - bl LoadPalette - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xF - bhi _0815C274 - adds r0, r5, r4 - ldrb r0, [r0] - cmp r0, 0xFF - bne _0815C23E -_0815C274: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_815C230 - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 838d5f334..db9b37607 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -278,7 +278,6 @@ SECTIONS { src/dodrio_berry_picking_2.o(.text); asm/dodrio_berry_picking_2.o(.text); src/teachy_tv.o(.text); - asm/teachy_tv.o(.text); asm/ereader_helpers.o(.text); src/unk_815C980.o(.text); asm/ss_anne.o(.text); diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 00df2807e..7fd095f1f 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -8,7 +8,6 @@ #include "new_menu_helpers.h" #include "sound.h" #include "malloc.h" -#include "sprite.h" #include "scanline_effect.h" #include "bg.h" #include "gpu_regs.h" @@ -28,6 +27,7 @@ #include "battle_transition.h" #include "battle_2.h" #include "battle.h" +#include "global.fieldmap.h" typedef struct Task Task; typedef struct { @@ -92,6 +92,12 @@ u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y); void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite); void TeachyTvRestorePlayerPartyCallback(); void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId); +void TeachyTvLoadMapTilesetToBuffer(struct Tileset *ts, u8 *dstBuffer, u16 size); +void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1, u8 *palIndexArray, u16 mapEntry, u16 offset); +void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blockBuf, u8 *tileset); +void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile); +u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile); +void TeachyTvLoadMapPalette(struct MapData *mStruct, u8 *palIndexArray); extern void VblankHblankHandlerSetZero(); extern void sub_812B1E0(u16); @@ -1026,3 +1032,598 @@ void TeachyTvRestorePlayerPartyCallback() sub_815ABFC(); } +NAKED +void TeachyTvLoadBg3Map(void *buffer) +{ + asm_unified("\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x1C\n\ + str r0, [sp, 0x4]\n\ + movs r0, 0\n\ + str r0, [sp, 0x10]\n\ + ldr r1, _0815BE1C @ =Route1_Layout\n\ + mov r8, r1\n\ + movs r0, 0x80\n\ + lsls r0, 4\n\ + bl AllocZeroed\n\ + adds r6, r0, 0\n\ + movs r0, 0x80\n\ + lsls r0, 8\n\ + bl AllocZeroed\n\ + str r0, [sp, 0x8]\n\ + movs r0, 0x10\n\ + bl Alloc\n\ + str r0, [sp, 0xC]\n\ + movs r1, 0xFF\n\ + movs r2, 0x10\n\ + bl memset\n\ + mov r2, r8\n\ + ldr r0, [r2, 0x10]\n\ + movs r2, 0xA0\n\ + lsls r2, 2\n\ + ldr r1, [sp, 0x8]\n\ + bl TeachyTvLoadMapTilesetToBuffer\n\ + mov r3, r8\n\ + ldr r0, [r3, 0x14]\n\ + ldr r2, [sp, 0x8]\n\ + movs r3, 0xA0\n\ + lsls r3, 7\n\ + adds r1, r2, r3\n\ + movs r2, 0xC0\n\ + lsls r2, 1\n\ + bl TeachyTvLoadMapTilesetToBuffer\n\ + movs r4, 0\n\ + _0815BDDE:\n\ + movs r2, 0\n\ + adds r0, r4, 0x6\n\ + str r0, [sp, 0x18]\n\ + lsls r1, r4, 4\n\ + mov r10, r1\n\ + lsls r3, r4, 6\n\ + mov r9, r3\n\ + adds r4, 0x1\n\ + str r4, [sp, 0x14]\n\ + _0815BDF0:\n\ + mov r1, r8\n\ + ldr r0, [r1]\n\ + ldr r3, [sp, 0x18]\n\ + muls r0, r3\n\ + ldr r1, [r1, 0xC]\n\ + adds r0, r2, r0\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldrh r1, [r0, 0x10]\n\ + ldr r3, _0815BE20 @ =0x000003ff\n\ + adds r0, r3, 0\n\ + adds r4, r0, 0\n\ + ands r4, r1\n\ + movs r3, 0\n\ + mov r0, r10\n\ + adds r1, r0, r2\n\ + lsls r5, r2, 1\n\ + adds r7, r2, 0x1\n\ + cmp r3, r1\n\ + bge _0815BE3C\n\ + ldrh r0, [r6]\n\ + b _0815BE34\n\ + .align 2, 0\n\ + _0815BE1C: .4byte Route1_Layout\n\ + _0815BE20: .4byte 0x000003ff\n\ + _0815BE24:\n\ + adds r0, r3, 0x1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + cmp r3, r1\n\ + bge _0815BE3C\n\ + lsls r0, r3, 1\n\ + adds r0, r6\n\ + ldrh r0, [r0]\n\ + _0815BE34:\n\ + cmp r0, 0\n\ + beq _0815BE46\n\ + cmp r0, r4\n\ + bne _0815BE24\n\ + _0815BE3C:\n\ + lsls r0, r3, 1\n\ + adds r0, r6\n\ + ldrh r0, [r0]\n\ + cmp r0, 0\n\ + bne _0815BE56\n\ + _0815BE46:\n\ + lsls r0, r3, 1\n\ + adds r0, r6\n\ + strh r4, [r0]\n\ + ldr r0, [sp, 0x10]\n\ + adds r0, 0x1\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0x10]\n\ + _0815BE56:\n\ + mov r2, r9\n\ + adds r1, r2, r5\n\ + lsls r1, 1\n\ + ldr r0, [sp, 0x4]\n\ + adds r1, r0, r1\n\ + str r3, [sp]\n\ + mov r0, r8\n\ + ldr r2, [sp, 0xC]\n\ + adds r3, r4, 0\n\ + bl TeachyTvPushBackNewMapPalIndexArrayEntry\n\ + lsls r0, r7, 16\n\ + lsrs r2, r0, 16\n\ + cmp r2, 0xF\n\ + bls _0815BDF0\n\ + ldr r1, [sp, 0x14]\n\ + lsls r0, r1, 16\n\ + lsrs r4, r0, 16\n\ + cmp r4, 0x8\n\ + bls _0815BDDE\n\ + ldr r2, [sp, 0x10]\n\ + lsls r0, r2, 7\n\ + bl Alloc\n\ + adds r7, r0, 0\n\ + movs r0, 0x80\n\ + bl Alloc\n\ + adds r5, r0, 0\n\ + movs r4, 0\n\ + ldr r3, [sp, 0x10]\n\ + lsls r3, 23\n\ + mov r9, r3\n\ + ldr r0, [sp, 0x10]\n\ + cmp r4, r0\n\ + bcs _0815BF00\n\ + ldr r1, _0815BECC @ =0x0000027f\n\ + mov r10, r1\n\ + _0815BEA2:\n\ + adds r0, r5, 0\n\ + movs r1, 0\n\ + movs r2, 0x80\n\ + bl memset\n\ + lsls r0, r4, 1\n\ + adds r1, r0, r6\n\ + ldrh r0, [r1]\n\ + cmp r0, r10\n\ + bhi _0815BED0\n\ + mov r2, r8\n\ + ldr r0, [r2, 0x10]\n\ + ldrh r1, [r1]\n\ + lsls r1, 4\n\ + ldr r0, [r0, 0xC]\n\ + adds r0, r1\n\ + adds r1, r5, 0\n\ + ldr r2, [sp, 0x8]\n\ + bl TeachyTvComputeMapTilesFromTilesetAndMetaTiles\n\ + b _0815BEE8\n\ + .align 2, 0\n\ + _0815BECC: .4byte 0x0000027f\n\ + _0815BED0:\n\ + mov r3, r8\n\ + ldr r0, [r3, 0x14]\n\ + ldrh r1, [r1]\n\ + ldr r2, _0815BF44 @ =0xfffffd80\n\ + adds r1, r2\n\ + lsls r1, 4\n\ + ldr r0, [r0, 0xC]\n\ + adds r0, r1\n\ + adds r1, r5, 0\n\ + ldr r2, [sp, 0x8]\n\ + bl TeachyTvComputeMapTilesFromTilesetAndMetaTiles\n\ + _0815BEE8:\n\ + lsls r1, r4, 7\n\ + adds r1, r7, r1\n\ + adds r0, r5, 0\n\ + movs r2, 0x20\n\ + bl CpuFastSet\n\ + adds r0, r4, 0x1\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + ldr r3, [sp, 0x10]\n\ + cmp r4, r3\n\ + bcc _0815BEA2\n\ + _0815BF00:\n\ + mov r0, r9\n\ + lsrs r2, r0, 16\n\ + movs r0, 0x3\n\ + adds r1, r7, 0\n\ + movs r3, 0\n\ + bl LoadBgTiles\n\ + mov r0, r8\n\ + ldr r1, [sp, 0xC]\n\ + bl TeachyTvLoadMapPalette\n\ + adds r0, r5, 0\n\ + bl Free\n\ + adds r0, r7, 0\n\ + bl Free\n\ + ldr r0, [sp, 0xC]\n\ + bl Free\n\ + ldr r0, [sp, 0x8]\n\ + bl Free\n\ + adds r0, r6, 0\n\ + bl Free\n\ + add sp, 0x1C\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ + _0815BF44: .4byte 0xfffffd80\n\ + "); +} + +void TeachyTvLoadMapTilesetToBuffer(struct Tileset *ts, u8 *dstBuffer, u16 size) +{ + if ( ts ) + { + if ( !ts->isCompressed ) + CpuFastSet(ts->tiles, dstBuffer, 8 * size); + else + LZDecompressWram(ts->tiles, dstBuffer); + } +} + +#ifdef NONMATCHING +void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1, u8 *palIndexArray, u16 mapEntry, u16 offset) +{ + // weird, seems easy but no match + struct Tileset *ts; + u16 *metaTileEntryAddr; + + int temp = mapEntry; + if ( temp <= 0x27Fu ) + { + ts = mStruct->primaryTileset; + } + else + { + ts = mStruct->secondaryTileset; + temp = mapEntry - 0x280; + } + metaTileEntryAddr = &((u16*)(ts->metatiles))[8 * temp]; + buf1[0] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[0]) << 12) + 4 * offset; + buf1[1] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[1]) << 12) + 4 * offset + 1; + buf1[0x20] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[2]) << 12) + 4 * offset + 2; + buf1[0x21] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[3]) << 12) + 4 * offset + 3; +} +#else +NAKED +void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1, u8 *palIndexArray, u16 mapEntry, u16 offset) +{ + asm_unified("\n\ + push {r4-r7,lr}\n\ + adds r5, r0, 0\n\ + adds r7, r1, 0\n\ + adds r6, r2, 0\n\ + ldr r0, [sp, 0x14]\n\ + lsls r3, 16\n\ + lsrs r1, r3, 16\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + ldr r0, _0815BF8C @ =0x0000027f\n\ + cmp r1, r0\n\ + bhi _0815BF90\n\ + ldr r0, [r5, 0x10]\n\ + b _0815BF96\n\ + .align 2, 0\n\ + _0815BF8C: .4byte 0x0000027f\n\ + _0815BF90:\n\ + ldr r0, [r5, 0x14]\n\ + ldr r2, _0815BFEC @ =0xfffffd80\n\ + adds r1, r2\n\ + _0815BF96:\n\ + lsls r1, 4\n\ + ldr r0, [r0, 0xC]\n\ + adds r5, r0, r1\n\ + ldrh r1, [r5]\n\ + adds r0, r6, 0\n\ + bl TeachyTvComputePalIndexArrayEntryByMetaTile\n\ + lsls r0, 12\n\ + lsls r4, 2\n\ + adds r0, r4\n\ + strh r0, [r7]\n\ + ldrh r1, [r5, 0x2]\n\ + adds r0, r6, 0\n\ + bl TeachyTvComputePalIndexArrayEntryByMetaTile\n\ + lsls r0, 12\n\ + adds r0, r4\n\ + adds r0, 0x1\n\ + strh r0, [r7, 0x2]\n\ + ldrh r1, [r5, 0x4]\n\ + adds r0, r6, 0\n\ + bl TeachyTvComputePalIndexArrayEntryByMetaTile\n\ + adds r1, r7, 0\n\ + adds r1, 0x40\n\ + lsls r0, 12\n\ + adds r0, r4\n\ + adds r0, 0x2\n\ + strh r0, [r1]\n\ + ldrh r1, [r5, 0x6]\n\ + adds r0, r6, 0\n\ + bl TeachyTvComputePalIndexArrayEntryByMetaTile\n\ + adds r1, r7, 0\n\ + adds r1, 0x42\n\ + lsls r0, 12\n\ + adds r0, r4\n\ + adds r0, 0x3\n\ + strh r0, [r1]\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ + _0815BFEC: .4byte 0xfffffd80\n\ + "); +} +#endif + +void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blockBuf, u8 *tileset) +{ + TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles( + blockBuf, + &tileset[0x20 * (*metaTilesArray & 0x3FF)], + (*metaTilesArray >> 10) & 3); + TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf, &tileset[0x20 * (metaTilesArray[4] & 0x3FF)], (metaTilesArray[4] >> 10) & 3); + TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf + 0x20, &tileset[0x20 * (metaTilesArray[1] & 0x3FF)], (metaTilesArray[1] >> 10) & 3); + TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf + 0x20, &tileset[0x20 * (metaTilesArray[5] & 0x3FF)], (metaTilesArray[5] >> 10) & 3); + TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf + 0x40, &tileset[0x20 * (metaTilesArray[2] & 0x3FF)], (metaTilesArray[2] >> 10) & 3); + TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf + 0x40, &tileset[0x20 * (metaTilesArray[6] & 0x3FF)], (metaTilesArray[6] >> 10) & 3); + blockBuf += 0x60; + TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf, &tileset[0x20 * (metaTilesArray[3] & 0x3FF)], (metaTilesArray[3] >> 10) & 3); + TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf, &tileset[0x20 * (metaTilesArray[7] & 0x3FF)], (metaTilesArray[7] >> 10) & 3); +} + +NAKED +void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile) +{ + asm_unified("\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x4\n\ + mov r9, r0\n\ + adds r4, r1, 0\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + mov r10, r2\n\ + movs r0, 0x20\n\ + bl AllocZeroed\n\ + adds r6, r0, 0\n\ + movs r0, 0x20\n\ + bl AllocZeroed\n\ + str r0, [sp]\n\ + adds r0, r4, 0\n\ + adds r1, r6, 0\n\ + movs r2, 0x8\n\ + bl CpuFastSet\n\ + movs r0, 0x1\n\ + mov r1, r10\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0815C15A\n\ + movs r5, 0\n\ + movs r7, 0xF\n\ + mov r12, r7\n\ + movs r0, 0xF0\n\ + mov r8, r0\n\ + _0815C118:\n\ + movs r3, 0\n\ + lsls r4, r5, 2\n\ + _0815C11C:\n\ + subs r0, r3, 0x3\n\ + subs r0, r4, r0\n\ + adds r0, r6, r0\n\ + ldrb r1, [r0]\n\ + adds r2, r4, r3\n\ + ldr r7, [sp]\n\ + adds r2, r7, r2\n\ + adds r0, r1, 0\n\ + mov r7, r12\n\ + ands r0, r7\n\ + lsls r0, 4\n\ + mov r7, r8\n\ + ands r1, r7\n\ + lsrs r1, 4\n\ + adds r0, r1\n\ + strb r0, [r2]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0x3\n\ + bls _0815C11C\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x7\n\ + bls _0815C118\n\ + ldr r0, [sp]\n\ + adds r1, r6, 0\n\ + movs r2, 0x8\n\ + bl CpuFastSet\n\ + _0815C15A:\n\ + movs r0, 0x2\n\ + mov r1, r10\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0815C18E\n\ + movs r5, 0\n\ + _0815C166:\n\ + lsls r0, r5, 2\n\ + ldr r7, [sp]\n\ + adds r0, r7\n\ + movs r1, 0x7\n\ + subs r1, r5\n\ + lsls r1, 2\n\ + adds r1, r6\n\ + movs r2, 0x4\n\ + bl memcpy\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x7\n\ + bls _0815C166\n\ + ldr r0, [sp]\n\ + adds r1, r6, 0\n\ + movs r2, 0x8\n\ + bl CpuFastSet\n\ + _0815C18E:\n\ + movs r5, 0\n\ + movs r0, 0xF0\n\ + mov r8, r0\n\ + movs r1, 0xF\n\ + mov r12, r1\n\ + _0815C198:\n\ + adds r4, r6, r5\n\ + ldrb r0, [r4]\n\ + mov r3, r8\n\ + ands r3, r0\n\ + cmp r3, 0\n\ + beq _0815C1B2\n\ + mov r7, r9\n\ + adds r2, r7, r5\n\ + ldrb r1, [r2]\n\ + mov r0, r12\n\ + ands r0, r1\n\ + adds r0, r3\n\ + strb r0, [r2]\n\ + _0815C1B2:\n\ + ldrb r0, [r4]\n\ + mov r3, r12\n\ + ands r3, r0\n\ + cmp r3, 0\n\ + beq _0815C1CA\n\ + mov r0, r9\n\ + adds r2, r0, r5\n\ + ldrb r1, [r2]\n\ + mov r0, r8\n\ + ands r0, r1\n\ + adds r0, r3\n\ + strb r0, [r2]\n\ + _0815C1CA:\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x1F\n\ + bls _0815C198\n\ + ldr r0, [sp]\n\ + bl Free\n\ + adds r0, r6, 0\n\ + bl Free\n\ + add sp, 0x4\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + "); +} + +u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile) +{ + u32 pal; + u32 counter; + int firstEntry; + int temp; + + pal = (u32)(metaTile << 16) >> 28; + counter = 0; + firstEntry = *palIndexArrayBuf; + if ( firstEntry != pal ) + { + if ( firstEntry == 0xFF ) + { + *palIndexArrayBuf = pal; + } + else + { + while ( 1 ) + { + counter = ((counter + 1) << 0x10) >> 0x10; + if ( counter > 0xF ) + break; + temp = palIndexArrayBuf[counter]; + if ( temp == pal ) + break; + if ( temp == 0xFF ) + { + palIndexArrayBuf[counter] = pal; + break; + } + } + } + } + return (0xF - counter) & 0xFFFF; +} + +#define NONMATCHING +#ifdef NONMATCHING +void TeachyTvLoadMapPalette(struct MapData *mStruct, u8 *palIndexArray) +{ + u8 counter, v3; + struct Tileset *ts; + + for (counter = 0; counter < 0xF && palIndexArray[counter] != 0xFF; counter++) + { + if ( palIndexArray[counter] > 6u ) + ts = mStruct->secondaryTileset; + else + ts = mStruct->primaryTileset; + LoadPalette((u8 *)ts->palettes + 0x20 * palIndexArray[counter], 0x10 * (0xF - counter), 0x20u); + } +} +#else +NAKED +void TeachyTvLoadMapPalette(struct MapData *mStruct, u8 *palIndexArray) +{ + asm_unified("\n\ + push {r4-r6,lr}\n\ + adds r6, r0, 0\n\ + adds r5, r1, 0\n\ + movs r4, 0\n\ + ldrb r0, [r5]\n\ + cmp r0, 0xFF\n\ + beq _0815C274\n\ + _0815C23E:\n\ + adds r1, r5, r4\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x6\n\ + bls _0815C24A\n\ + ldr r0, [r6, 0x14]\n\ + b _0815C24C\n\ + _0815C24A:\n\ + ldr r0, [r6, 0x10]\n\ + _0815C24C:\n\ + ldrb r1, [r1]\n\ + lsls r1, 5\n\ + ldr r0, [r0, 0x8]\n\ + adds r0, r1\n\ + movs r1, 0xF\n\ + subs r1, r4\n\ + lsls r1, 20\n\ + lsrs r1, 16\n\ + movs r2, 0x20\n\ + bl LoadPalette\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0xF\n\ + bhi _0815C274\n\ + adds r0, r5, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xFF\n\ + bne _0815C23E\n\ + _0815C274:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + "); +} +#endif \ No newline at end of file -- cgit v1.2.3 From ea4d62e57a263e40a08aecf0dc91ced2df6927c8 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Thu, 6 Jun 2019 13:44:36 +0800 Subject: 5 functions are still with naked attribute --- src/teachy_tv.c | 184 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 172 insertions(+), 12 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 7fd095f1f..74d76602d 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -61,6 +61,7 @@ extern u8 gUnknown_8479390; extern struct SubspriteTable gUnknown_84795B8; extern struct SpriteTemplate *gUnknown_83A0010; extern u8 gUnknown_84795C8; +extern struct MapData Route1_Layout; void TeachyTvCallback(); void TeachyTvMainCallback(); @@ -484,7 +485,7 @@ void TeachyTvOptionListController(u8 taskId) } #else -__attribute__((naked)) +NAKED void TeachyTvOptionListController(u8 taskId) { asm_unified("\n\ @@ -1032,6 +1033,112 @@ void TeachyTvRestorePlayerPartyCallback() sub_815ABFC(); } +#ifdef NONMATCHING +void TeachyTvLoadBg3Map(void *buffer) +{ + u16 *mapArray; + int v2; + int v3; + int v4; + int v5; + int mapEntry; + int v7; + u16 v8; + int i; + char *MapTileBlockBuf; + void *FourMapTileBlocksTempBuf; + unsigned int j; + u16 *v13; + u8 *v14; + void *tileset; + u8 *palIndexArray; + unsigned int v17; + u32 v18; + int v19; + struct MapData * md; + + md = &Route1_Layout; + v14 = (u8 *)buffer; + v17 = 0; + mapArray = (u16 *)AllocZeroed(0x800u); + tileset = AllocZeroed(0x8000u); + palIndexArray = Alloc(0x10u); + memset(palIndexArray, 0xFFu, 0x10u); + TeachyTvLoadMapTilesetToBuffer(md->primaryTileset, (u8 *)tileset, 0x280u); + TeachyTvLoadMapTilesetToBuffer(md->secondaryTileset, (u8 *)tileset + 0x5000, 0x180u); + v2 = 0; + do + { + v3 = 0; + v19 = v2 + 6; + v4 = 16 * v2; + v5 = v2 << 6; + v18 = v2 + 1; + do + { + mapEntry = md->map[v3 + 24 * v19 + 8] & 0x3FF; + v7 = 0; + v8 = v3 + 1; + if ( v4 + v3 <= 0 ) + { +LABEL_9: + if ( mapArray[v7] ) + goto LABEL_11; + } + else + { + for ( i = *mapArray; i; i = mapArray[v7] ) + { + if ( i == mapEntry ) + goto LABEL_9; + v7 = (u16)(v7 + 1); + if ( v7 >= v4 + v3 ) + goto LABEL_9; + } + } + mapArray[v7] = mapEntry; + v17 = (u16)(v17 + 1); +LABEL_11: + TeachyTvPushBackNewMapPalIndexArrayEntry( + md, + (u16 *)&v14[2 * (v5 + 2 * v3)], + palIndexArray, + mapEntry, + v7); + v3 = v8; + } + while ( (u16)v8 <= 0xFu ); + v2 = v18; + } + while ( (u16)v18 <= 8u ); + MapTileBlockBuf = (char *)Alloc(v17 << 7); + FourMapTileBlocksTempBuf = Alloc(0x80u); + for ( j = 0; j < v17; j = (u16)j + 1 ) + { + memset(FourMapTileBlocksTempBuf, 0, 0x80u); + v13 = &mapArray[j]; + if ( *v13 <= 0x27Fu ) + TeachyTvComputeMapTilesFromTilesetAndMetaTiles( + (u16 *)(16 * *v13 + (u16*)(md->primaryTileset->metatiles)), + (u8 *)FourMapTileBlocksTempBuf, + (u8 *)tileset); + else + TeachyTvComputeMapTilesFromTilesetAndMetaTiles( + (u16 *)(16 * (*v13 - 0x280) + (u16*)(md->secondaryTileset->metatiles)), + (u8 *)FourMapTileBlocksTempBuf, + (u8 *)tileset); + + CpuFastSet(FourMapTileBlocksTempBuf, &MapTileBlockBuf[0x80 * j], 0x20u); + } + LoadBgTiles(3u, MapTileBlockBuf, (u16)v17 << 7, 0); + TeachyTvLoadMapPalette(&Route1_Layout, palIndexArray); + Free(FourMapTileBlocksTempBuf); + Free(MapTileBlockBuf); + Free(palIndexArray); + Free(tileset); + Free(mapArray); +} +#else NAKED void TeachyTvLoadBg3Map(void *buffer) { @@ -1256,6 +1363,7 @@ void TeachyTvLoadBg3Map(void *buffer) _0815BF44: .4byte 0xfffffd80\n\ "); } +#endif void TeachyTvLoadMapTilesetToBuffer(struct Tileset *ts, u8 *dstBuffer, u16 size) { @@ -1271,7 +1379,6 @@ void TeachyTvLoadMapTilesetToBuffer(struct Tileset *ts, u8 *dstBuffer, u16 size) #ifdef NONMATCHING void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1, u8 *palIndexArray, u16 mapEntry, u16 offset) { - // weird, seems easy but no match struct Tileset *ts; u16 *metaTileEntryAddr; @@ -1377,6 +1484,62 @@ void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blo TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf, &tileset[0x20 * (metaTilesArray[7] & 0x3FF)], (metaTilesArray[7] >> 10) & 3); } +#ifdef NONMATCHING +void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile) +{ + u8 *buffer; + u32 counterV7; + u32 counterV8; + vu32 src; + + buffer = (u8 *)AllocZeroed(0x20u); + src = ((u32)AllocZeroed(0x20u)); + CpuFastSet(tileset, buffer, 8u); + if ( metaTile & 1 ) + { + counterV7 = 0; + do + { + counterV8 = 0; + do + { + u32 offset1 = counterV7 << 2; + u32 offset2 = counterV8 - 3; + u32 offset = offset1 - offset2; + u32 value = buffer[offset]; + u32 dstOffset = offset1 + counterV8; + *(u8*)(src + dstOffset) = ((value & 0xF) << 4) + ((value & 0xF0) >> 4); + } + while ( ++(u8)counterV8 <= 3u ); + } + while ( ++(u8)counterV7 <= 7u ); + CpuFastSet((u8*)src, buffer, 8u); + } + if ( metaTile & 2 ) + { + counterV8 = 0; + do + { + memcpy(&((u8*)src)[4 * counterV8], &buffer[4 * (7 - counterV8)], 4u); + counterV8 = (u8)(counterV8 + 1); + } + while ( counterV8 <= 7u ); + CpuFastSet((u8*)src, buffer, 8u); + } + counterV8 = 0; + do + { + if ( buffer[counterV8] & 0xF0 ) + blockBuf[counterV8] = (blockBuf[counterV8] & 0xF) + (buffer[counterV8] & 0xF0); + if ( buffer[counterV8] & 0xF ) + blockBuf[counterV8] = (blockBuf[counterV8] & 0xF0) + (buffer[counterV8] & 0xF); + counterV8 = (u8)(counterV8 + 1); + } + while ( counterV8 <= 0x1Fu ); + Free((u8*)src); + Free(buffer); +} +#else NAKED void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile) { @@ -1525,6 +1688,7 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * bx r0\n\ "); } +#endif u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile) { @@ -1560,23 +1724,19 @@ u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTi } } } - return (0xF - counter) & 0xFFFF; + return (u16)(0xF - counter); } -#define NONMATCHING #ifdef NONMATCHING void TeachyTvLoadMapPalette(struct MapData *mStruct, u8 *palIndexArray) { - u8 counter, v3; + u8 counter; struct Tileset *ts; - for (counter = 0; counter < 0xF && palIndexArray[counter] != 0xFF; counter++) + for (counter = 0; counter < 16 && palIndexArray[counter] != 0xFF; counter++) { - if ( palIndexArray[counter] > 6u ) - ts = mStruct->secondaryTileset; - else - ts = mStruct->primaryTileset; - LoadPalette((u8 *)ts->palettes + 0x20 * palIndexArray[counter], 0x10 * (0xF - counter), 0x20u); + ts = *(palIndexArray + counter) > 6u ? mStruct->secondaryTileset : mStruct->primaryTileset; + LoadPalette((u16 *)ts->palettes + 0x10 * palIndexArray[counter], 0x10 * (0xF - counter), 0x20u); } } #else @@ -1626,4 +1786,4 @@ void TeachyTvLoadMapPalette(struct MapData *mStruct, u8 *palIndexArray) bx r0\n\ "); } -#endif \ No newline at end of file +#endif -- cgit v1.2.3 From 598a2fb60f81a28a165a783a3a2e4e28960b607a Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Thu, 6 Jun 2019 14:04:39 +0800 Subject: var names --- src/teachy_tv.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 74d76602d..0438114ac 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -29,7 +29,6 @@ #include "battle.h" #include "global.fieldmap.h" -typedef struct Task Task; typedef struct { void (*callback)(); u8 mode; @@ -127,18 +126,18 @@ void TeachyTvVblankHandler() void sub_815ABC4(u8 mode, void (*cb)()) { - TeachyTv_s *v3 = &gTeachyTV_StaticResources; + TeachyTv_s *resAddr = &gTeachyTV_StaticResources; u16 v4 = 0; - v3->mode = mode; - v3->callback = cb; + resAddr->mode = mode; + resAddr->callback = cb; if(!mode) { - v3->scrollOffset = v4; - v3->selectedRow = v4; - v3->optionChosen = 0; + resAddr->scrollOffset = v4; + resAddr->selectedRow = v4; + resAddr->optionChosen = 0; } if(mode == 1) - v3->mode = 0; + resAddr->mode = 0; SetMainCallback2(TeachyTvMainCallback); } @@ -159,8 +158,8 @@ void TeachyTvMainCallback() { int state; int taskId; - Task *taskAddr; - u8 **v4; + struct Task *taskAddr; + u8 **memBuf; u32 x; state = gMain.state; @@ -171,8 +170,8 @@ void TeachyTvMainCallback() else return; RESETANDLOAD: - v4 = (u8 **)&gUnknown_203F450; - (*v4) = (u8*)AllocZeroed(0x4008u); + memBuf = (u8 **)&gUnknown_203F450; + (*memBuf) = (u8*)AllocZeroed(0x4008u); *(u32*)gUnknown_203F450 = (u32)state; *((u8*)gUnknown_203F450 + 0x4006) = state; *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; @@ -296,8 +295,8 @@ void TeachyTvSetupScrollIndicatorArrowPair() else { u8 *temp, res; res = AddScrollIndicatorArrowPair( - &gUnknown_8479380, - &(gTeachyTV_StaticResources.scrollOffset)); + &gUnknown_8479380, + &(gTeachyTV_StaticResources.scrollOffset)); temp = (u8 *)gUnknown_203F450; *((u8 *)temp + 0x4007) = res; } -- cgit v1.2.3 From 97f172fde44648e77ffcef3cf03681150b926145 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Fri, 7 Jun 2019 03:03:12 +0800 Subject: syntax --- src/teachy_tv.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 0438114ac..4b389a6c9 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -127,13 +127,13 @@ void TeachyTvVblankHandler() void sub_815ABC4(u8 mode, void (*cb)()) { TeachyTv_s *resAddr = &gTeachyTV_StaticResources; - u16 v4 = 0; + u16 zero = 0; resAddr->mode = mode; resAddr->callback = cb; if(!mode) { - resAddr->scrollOffset = v4; - resAddr->selectedRow = v4; + resAddr->scrollOffset = zero; + resAddr->selectedRow = zero; resAddr->optionChosen = 0; } if(mode == 1) @@ -144,9 +144,9 @@ void sub_815ABC4(u8 mode, void (*cb)()) void sub_815ABFC() { if(gTeachyTV_StaticResources.mode == 1) - sub_815ABC4(1,gTeachyTV_StaticResources.callback); + sub_815ABC4(1, gTeachyTV_StaticResources.callback); else - sub_815ABC4(2,gTeachyTV_StaticResources.callback); + sub_815ABC4(2, gTeachyTV_StaticResources.callback); } void sub_815AC20() @@ -163,7 +163,7 @@ void TeachyTvMainCallback() u32 x; state = gMain.state; - if ( state == 0 ) + if ( !state ) goto RESETANDLOAD; else if ( state == 1 ) goto SETDMATOVRAM; @@ -942,18 +942,18 @@ void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite) if(((u8*)gUnknown_203F450)[0x4006] == 1) DestroySprite(sprite); else { - if(sprite->animCmdIndex == 0) + if(!sprite->animCmdIndex) sprite->subspriteTableNum = 1; else sprite->subspriteTableNum = 0; sprite->pos2.x += (u16)data[4]; sprite->pos2.y += (u16)data[5]; - if(sprite->animEnded == 0) + if(!sprite->animEnded) return; sprite->subpriority = 0; diff1 = (u16)(sprite->pos2.x - objAddr->pos2.x); diff2 = (u16)(sprite->pos2.y - objAddr->pos2.y); - diff1 = ((diff1 << 0x10)+0xF0000) >> 0x10; + diff1 = ((diff1 << 0x10) + 0xF0000) >> 0x10; if(diff1 <= 0x1E) { if((s16)diff2 > -0x10) @@ -1469,10 +1469,7 @@ void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1 void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blockBuf, u8 *tileset) { - TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles( - blockBuf, - &tileset[0x20 * (*metaTilesArray & 0x3FF)], - (*metaTilesArray >> 10) & 3); + TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf, &tileset[0x20 * (*metaTilesArray & 0x3FF)], (*metaTilesArray >> 10) & 3); TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf, &tileset[0x20 * (metaTilesArray[4] & 0x3FF)], (metaTilesArray[4] >> 10) & 3); TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf + 0x20, &tileset[0x20 * (metaTilesArray[1] & 0x3FF)], (metaTilesArray[1] >> 10) & 3); TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf + 0x20, &tileset[0x20 * (metaTilesArray[5] & 0x3FF)], (metaTilesArray[5] >> 10) & 3); -- cgit v1.2.3 From 5110cafe24debb3ca0e1db52a8cd1a8edeb6daac Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Fri, 7 Jun 2019 03:40:49 +0800 Subject: fix header --- include/teachy_tv.h | 5 +++-- src/teachy_tv.c | 4 +--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/include/teachy_tv.h b/include/teachy_tv.h index 382ad117d..29ef726c9 100644 --- a/include/teachy_tv.h +++ b/include/teachy_tv.h @@ -1,7 +1,8 @@ #ifndef GUARD_TEACHY_TV_H #define GUARD_TEACHY_TV_H -void sub_815ABFC(void); -void sub_815AC20(void); +void sub_815ABC4(u8 mode, void (*cb)()); +void sub_815ABFC(); +void sub_815AC20(); #endif //GUARD_TEACHY_TV_H diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 4b389a6c9..8c126805a 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -28,6 +28,7 @@ #include "battle_2.h" #include "battle.h" #include "global.fieldmap.h" +#include "teachy_tv.h" typedef struct { void (*callback)(); @@ -65,9 +66,6 @@ extern struct MapData Route1_Layout; void TeachyTvCallback(); void TeachyTvMainCallback(); void TeachyTvVblankHandler(); -void sub_815ABC4(u8 mode, void (*cb)()); -void sub_815ABFC(); -void sub_815AC20(); void TeachyTvCreateAndRenderRbox(); void TeachyTvInitIo(); u8 TeachyTvSetupObjEventAndOam(); -- cgit v1.2.3 From ec5dd73767f3335098ea4f327a10d2b9405f3788 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sun, 9 Jun 2019 04:37:34 +0800 Subject: goobye, goto! --- src/teachy_tv.c | 118 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 58 insertions(+), 60 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 8c126805a..9e50d2d75 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -63,6 +63,15 @@ extern struct SpriteTemplate *gUnknown_83A0010; extern u8 gUnknown_84795C8; extern struct MapData Route1_Layout; +extern void VblankHblankHandlerSetZero(); +extern void sub_812B1E0(u16); +extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); +extern void sub_8055DC4(); +extern bool16 sub_80BF518(u8 textPrinterId); +extern void _call_via_r1(s32 arg, void *func); +extern void sub_810B108(u8); +extern void sub_8159F40(); + void TeachyTvCallback(); void TeachyTvMainCallback(); void TeachyTvVblankHandler(); @@ -97,15 +106,6 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile); void TeachyTvLoadMapPalette(struct MapData *mStruct, u8 *palIndexArray); -extern void VblankHblankHandlerSetZero(); -extern void sub_812B1E0(u16); -extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); -extern void sub_8055DC4(); -extern bool16 sub_80BF518(u8 textPrinterId); -extern void _call_via_r1(s32 arg, void *func); -extern void sub_810B108(u8); -extern void sub_8159F40(); - void TeachyTvCallback() { RunTasks(); @@ -161,59 +161,57 @@ void TeachyTvMainCallback() u32 x; state = gMain.state; - if ( !state ) - goto RESETANDLOAD; - else if ( state == 1 ) - goto SETDMATOVRAM; - else - return; -RESETANDLOAD: - memBuf = (u8 **)&gUnknown_203F450; - (*memBuf) = (u8*)AllocZeroed(0x4008u); - *(u32*)gUnknown_203F450 = (u32)state; - *((u8*)gUnknown_203F450 + 0x4006) = state; - *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; - VblankHblankHandlerSetZero(); - clear_scheduled_bg_copies_to_vram(); - ScanlineEffect_Stop(); - FreeAllSpritePalettes(); - ResetPaletteFade(); - ResetSpriteData(); - ResetTasks(); - TeachyTvSetupBg(); - TeachyTvLoadGraphic(); - ++gMain.state; - return; -SETDMATOVRAM: - if( free_temp_tile_data_buffers_if_possible() == 1 ) - return; - TeachyTvCreateAndRenderRbox(); - TeachyTvInitIo(); - if ( gTeachyTV_StaticResources.mode == 2 ) + switch(state) { - taskId = CreateTask(TeachyTvPostBattleFadeControl, 0); - gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); - TeachyTvSetupPostBattleWindowAndObj(taskId); - } - else - { - taskId = CreateTask(TeachyTvOptionListController, 0); - x = (u32)TeachyTvSetupWindow(); - gTasks[taskId].data[0] = (x << 24) >> 24; - gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); - TeachyTvSetupScrollIndicatorArrowPair(); - PlayNewMapMusic(BGM_FRLG_TEACHY_TV); - TeachyTvSetWindowRegs(); + case 0: + memBuf = (u8 **)&gUnknown_203F450; + (*memBuf) = (u8*)AllocZeroed(0x4008u); + *(u32*)gUnknown_203F450 = (u32)state; + *((u8*)gUnknown_203F450 + 0x4006) = state; + *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; + VblankHblankHandlerSetZero(); + clear_scheduled_bg_copies_to_vram(); + ScanlineEffect_Stop(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + TeachyTvSetupBg(); + TeachyTvLoadGraphic(); + ++gMain.state; + break; + case 1: + if( free_temp_tile_data_buffers_if_possible() == 1 ) + return; + TeachyTvCreateAndRenderRbox(); + TeachyTvInitIo(); + if ( gTeachyTV_StaticResources.mode == 2 ) + { + taskId = CreateTask(TeachyTvPostBattleFadeControl, 0); + gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); + TeachyTvSetupPostBattleWindowAndObj(taskId); + } + else + { + taskId = CreateTask(TeachyTvOptionListController, 0); + x = (u32)TeachyTvSetupWindow(); + gTasks[taskId].data[0] = (x << 24) >> 24; + gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); + TeachyTvSetupScrollIndicatorArrowPair(); + PlayNewMapMusic(BGM_FRLG_TEACHY_TV); + TeachyTvSetWindowRegs(); + } + schedule_bg_copy_tilemap_to_vram(0); + schedule_bg_copy_tilemap_to_vram(1u); + schedule_bg_copy_tilemap_to_vram(2u); + schedule_bg_copy_tilemap_to_vram(3u); + sub_812B1E0(9); // help system something + BlendPalettes(0xFFFFFFFF, 0x10u, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10u, 0, 0); + SetVBlankCallback(TeachyTvVblankHandler); + SetMainCallback2(TeachyTvCallback); + break; } - schedule_bg_copy_tilemap_to_vram(0); - schedule_bg_copy_tilemap_to_vram(1u); - schedule_bg_copy_tilemap_to_vram(2u); - schedule_bg_copy_tilemap_to_vram(3u); - sub_812B1E0(9); // help system something - BlendPalettes(0xFFFFFFFF, 0x10u, 0); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10u, 0, 0); - SetVBlankCallback(TeachyTvVblankHandler); - SetMainCallback2(TeachyTvCallback); } void TeachyTvSetupBg() -- cgit v1.2.3 From 292b5fecab3a62fc30d8935bed6b2e91f83fbc7b Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sun, 9 Jun 2019 04:52:52 +0800 Subject: io reg names --- src/teachy_tv.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 9e50d2d75..c4e739122 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -222,7 +222,7 @@ void TeachyTvSetupBg() SetBgTilemapBuffer(1u, (u8 *)gUnknown_203F450 + 4); SetBgTilemapBuffer(2u, (u8 *)gUnknown_203F450 + 0x1004); SetBgTilemapBuffer(3u, (u8 *)gUnknown_203F450 + 0x2004); - SetGpuReg(0, 0x3040u); + SetGpuReg(REG_OFFSET_DISPCNT, 0x3040u); ShowBg(0); ShowBg(1u); ShowBg(2u); @@ -231,7 +231,7 @@ void TeachyTvSetupBg() ChangeBgY(3u, 0x2800u, 1u); *((u8 *)gUnknown_203F450 + 0x4004) = 0; *((u8 *)gUnknown_203F450 + 0x4005) = 3; - SetGpuReg(0x50u, 0); + SetGpuReg(REG_OFFSET_BLDCNT, 0); } void TeachyTvLoadGraphic() @@ -316,10 +316,10 @@ void TeachyTvAudioByInput(s32 notUsed, bool8 play, struct ListMenu *notUsedAlt) void TeachyTvInitIo() { - SetGpuReg(0x48u, 0x3Fu); - SetGpuReg(0x4Au, 0x1Fu); - SetGpuReg(0x50u, 0xCCu); - SetGpuReg(0x54u, 5u); + SetGpuReg(REG_OFFSET_WININ, 0x3Fu); + SetGpuReg(REG_OFFSET_WINOUT, 0x1Fu); + SetGpuReg(REG_OFFSET_BLDCNT, 0xCCu); + SetGpuReg(REG_OFFSET_BLDY, 5u); } u8 TeachyTvSetupObjEventAndOam() @@ -340,14 +340,14 @@ void TeachyTvSetSpriteCoordsAndSwitchFrame(u8 objId, u16 x, u16 y, u8 frame) void TeachyTvSetWindowRegs() { - SetGpuReg(0x44u, 0xC64u); - SetGpuReg(0x40u, 0x1CD4u); + SetGpuReg(REG_OFFSET_WIN0V, 0xC64u); + SetGpuReg(REG_OFFSET_WIN0H, 0x1CD4u); } void TeachyTvClearWindowRegs() { - SetGpuReg(0x44u, 0); - SetGpuReg(0x40u, 0); + SetGpuReg(REG_OFFSET_WIN0V, 0); + SetGpuReg(REG_OFFSET_WIN0H, 0); } void TeachyTvBg2AnimController() -- cgit v1.2.3 From 5ec40a2acdc0692f6f3c9e3bbedc8433e9ba87b1 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 02:34:06 +0800 Subject: fixed everything except struct --- src/teachy_tv.c | 381 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 190 insertions(+), 191 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index c4e739122..feb3e3062 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -30,38 +30,38 @@ #include "global.fieldmap.h" #include "teachy_tv.h" -typedef struct { +struct TeachyTvCtrlBlk +{ void (*callback)(); u8 mode; u8 optionChosen; u16 scrollOffset; u16 selectedRow; u16 filler; -} TeachyTv_s; +}; -extern TeachyTv_s gTeachyTV_StaticResources; +extern struct TeachyTvCtrlBlk gTeachyTV_StaticResources; extern void * gUnknown_203F450; extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; -extern char gUnknown_841B83D; -extern struct BgTemplate gUnknown_84792E0; -extern struct SpritePalette gUnknown_83A5348; +extern const char gUnknown_841B83D; +extern const struct BgTemplate gUnknown_84792E0; +extern const struct SpritePalette gUnknown_83A5348; extern void (**gUnknown_8479548)(u8); -extern char * gUnknown_8479560; -extern char * gUnknown_8479578; -extern void *gUnknown_203F450; -extern u8 gUnknown_8E86240; -extern u8 gUnknown_8E86BE8; -extern u8 gUnknown_8E86D6C; -extern u8 gUnknown_8E86F98; -extern struct ListMenuTemplate gUnknown_8479368; -extern struct ListMenuItem gUnknown_8479340; -extern struct WindowTemplate gUnknown_84792F0; -extern u8 gUnknown_8479590; -extern u8 gUnknown_8479390; -extern struct SubspriteTable gUnknown_84795B8; -extern struct SpriteTemplate *gUnknown_83A0010; -extern u8 gUnknown_84795C8; -extern struct MapData Route1_Layout; +extern const char * const gUnknown_8479560; +extern const char * const gUnknown_8479578; +extern const u8 gUnknown_8E86240; +extern const u8 gUnknown_8E86BE8; +extern const u8 gUnknown_8E86D6C; +extern const u8 gUnknown_8E86F98; +extern const struct ListMenuTemplate gUnknown_8479368; +extern const struct ListMenuItem gUnknown_8479340; +extern const struct WindowTemplate gUnknown_84792F0; +extern const u8 gUnknown_8479590; +extern const u8 gUnknown_8479390; +extern const struct SubspriteTable gUnknown_84795B8; +extern const struct SpriteTemplate * const gUnknown_83A0010; +extern const u8 gUnknown_84795C8; +extern const struct MapData Route1_Layout; extern void VblankHblankHandlerSetZero(); extern void sub_812B1E0(u16); @@ -104,7 +104,7 @@ void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1 void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blockBuf, u8 *tileset); void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile); u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile); -void TeachyTvLoadMapPalette(struct MapData *mStruct, u8 *palIndexArray); +void TeachyTvLoadMapPalette(const struct MapData *const mStruct, u8 *palIndexArray); void TeachyTvCallback() { @@ -124,24 +124,24 @@ void TeachyTvVblankHandler() void sub_815ABC4(u8 mode, void (*cb)()) { - TeachyTv_s *resAddr = &gTeachyTV_StaticResources; + struct TeachyTvCtrlBlk *resAddr = &gTeachyTV_StaticResources; u16 zero = 0; resAddr->mode = mode; resAddr->callback = cb; - if(!mode) + if (!mode) { resAddr->scrollOffset = zero; resAddr->selectedRow = zero; resAddr->optionChosen = 0; } - if(mode == 1) + if (mode == 1) resAddr->mode = 0; SetMainCallback2(TeachyTvMainCallback); } void sub_815ABFC() { - if(gTeachyTV_StaticResources.mode == 1) + if (gTeachyTV_StaticResources.mode == 1) sub_815ABC4(1, gTeachyTV_StaticResources.callback); else sub_815ABC4(2, gTeachyTV_StaticResources.callback); @@ -161,11 +161,11 @@ void TeachyTvMainCallback() u32 x; state = gMain.state; - switch(state) + switch (state) { case 0: memBuf = (u8 **)&gUnknown_203F450; - (*memBuf) = (u8*)AllocZeroed(0x4008u); + (*memBuf) = (u8*)AllocZeroed(0x4008); *(u32*)gUnknown_203F450 = (u32)state; *((u8*)gUnknown_203F450 + 0x4006) = state; *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; @@ -181,7 +181,7 @@ void TeachyTvMainCallback() ++gMain.state; break; case 1: - if( free_temp_tile_data_buffers_if_possible() == 1 ) + if ( free_temp_tile_data_buffers_if_possible() == 1 ) return; TeachyTvCreateAndRenderRbox(); TeachyTvInitIo(); @@ -202,12 +202,12 @@ void TeachyTvMainCallback() TeachyTvSetWindowRegs(); } schedule_bg_copy_tilemap_to_vram(0); - schedule_bg_copy_tilemap_to_vram(1u); - schedule_bg_copy_tilemap_to_vram(2u); - schedule_bg_copy_tilemap_to_vram(3u); + schedule_bg_copy_tilemap_to_vram(1); + schedule_bg_copy_tilemap_to_vram(2); + schedule_bg_copy_tilemap_to_vram(3); sub_812B1E0(9); // help system something - BlendPalettes(0xFFFFFFFF, 0x10u, 0); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10u, 0, 0); + BlendPalettes(0xFFFFFFFF, 0x10, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); SetVBlankCallback(TeachyTvVblankHandler); SetMainCallback2(TeachyTvCallback); break; @@ -218,17 +218,17 @@ void TeachyTvSetupBg() { InitBgReg(); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, &gUnknown_84792E0, 4u); - SetBgTilemapBuffer(1u, (u8 *)gUnknown_203F450 + 4); - SetBgTilemapBuffer(2u, (u8 *)gUnknown_203F450 + 0x1004); - SetBgTilemapBuffer(3u, (u8 *)gUnknown_203F450 + 0x2004); - SetGpuReg(REG_OFFSET_DISPCNT, 0x3040u); + InitBgsFromTemplates(0, &gUnknown_84792E0, 4); + SetBgTilemapBuffer(1, (u8 *)gUnknown_203F450 + 4); + SetBgTilemapBuffer(2, (u8 *)gUnknown_203F450 + 0x1004); + SetBgTilemapBuffer(3, (u8 *)gUnknown_203F450 + 0x2004); + SetGpuReg(REG_OFFSET_DISPCNT, 0x3040); ShowBg(0); - ShowBg(1u); - ShowBg(2u); - ShowBg(3u); - ChangeBgX(3u, 0x1000u, 2u); - ChangeBgY(3u, 0x2800u, 1u); + ShowBg(1); + ShowBg(2); + ShowBg(3); + ChangeBgX(3, 0x1000, 2); + ChangeBgY(3, 0x2800, 1); *((u8 *)gUnknown_203F450 + 0x4004) = 0; *((u8 *)gUnknown_203F450 + 0x4005) = 3; SetGpuReg(REG_OFFSET_BLDCNT, 0); @@ -239,12 +239,12 @@ void TeachyTvLoadGraphic() u16 src; src = 0; reset_temp_tile_data_buffers(); - decompress_and_copy_tile_data_to_vram(1u, &gUnknown_8E86240, 0, 0, 0); - LZDecompressWram((u8 *)&gUnknown_8E86BE8, (*(u8 **)&gUnknown_203F450) + 4); - LZDecompressWram((u8 *)&gUnknown_8E86D6C, (*(u8 **)&gUnknown_203F450) + 0x3004); - LoadCompressedPalette(&gUnknown_8E86F98, 0, 0x80u); - LoadPalette(&src, 0, 2u); - LoadSpritePalette((struct SpritePalette *)&gUnknown_83A5348); + decompress_and_copy_tile_data_to_vram(1, &gUnknown_8E86240, 0, 0, 0); + LZDecompressWram(&gUnknown_8E86BE8, (*(u8 **)&gUnknown_203F450) + 0x4); + LZDecompressWram(&gUnknown_8E86D6C, (*(u8 **)&gUnknown_203F450) + 0x3004); + LoadCompressedPalette(&gUnknown_8E86F98, 0, 0x80); + LoadPalette(&src, 0, 2); + LoadSpritePalette(&gUnknown_83A5348); TeachyTvLoadBg3Map((u8 *)gUnknown_203F450 + 0x2004); } @@ -252,10 +252,10 @@ void TeachyTvCreateAndRenderRbox() { InitWindows(&gUnknown_84792F0); DeactivateAllTextPrinters(); - FillWindowPixelBuffer(0, 0xCCu); + FillWindowPixelBuffer(0, 0xCC); PutWindowTilemap(0); - PutWindowTilemap(1u); - CopyWindowToVram(0, 2u); + PutWindowTilemap(1); + CopyWindowToVram(0, 2); } u8 TeachyTvSetupWindow() @@ -264,7 +264,7 @@ u8 TeachyTvSetupWindow() gMultiuseListMenuTemplate = gUnknown_8479368; gMultiuseListMenuTemplate.windowId = 1; gMultiuseListMenuTemplate.moveCursorFunc = TeachyTvAudioByInput; - hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1u); + hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1); if ( !(hasItem << 24) ) { gMultiuseListMenuTemplate.items = &gUnknown_8479340; @@ -281,7 +281,7 @@ u8 TeachyTvSetupWindow() void TeachyTvSetupScrollIndicatorArrowPair() { int hasItem; - hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1u); + hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1); if ( ! hasItem << 24 ) { u8 * temp = (u8 *)gUnknown_203F450; @@ -316,10 +316,10 @@ void TeachyTvAudioByInput(s32 notUsed, bool8 play, struct ListMenu *notUsedAlt) void TeachyTvInitIo() { - SetGpuReg(REG_OFFSET_WININ, 0x3Fu); - SetGpuReg(REG_OFFSET_WINOUT, 0x1Fu); - SetGpuReg(REG_OFFSET_BLDCNT, 0xCCu); - SetGpuReg(REG_OFFSET_BLDY, 5u); + SetGpuReg(REG_OFFSET_WININ, 0x3F); + SetGpuReg(REG_OFFSET_WINOUT, 0x1F); + SetGpuReg(REG_OFFSET_BLDCNT, 0xCC); + SetGpuReg(REG_OFFSET_BLDY, 5); } u8 TeachyTvSetupObjEventAndOam() @@ -340,8 +340,8 @@ void TeachyTvSetSpriteCoordsAndSwitchFrame(u8 objId, u16 x, u16 y, u8 frame) void TeachyTvSetWindowRegs() { - SetGpuReg(REG_OFFSET_WIN0V, 0xC64u); - SetGpuReg(REG_OFFSET_WIN0H, 0x1CD4u); + SetGpuReg(REG_OFFSET_WIN0V, 0xC64); + SetGpuReg(REG_OFFSET_WIN0H, 0x1CD4); } void TeachyTvClearWindowRegs() @@ -353,28 +353,26 @@ void TeachyTvClearWindowRegs() void TeachyTvBg2AnimController() { u16 *tilemapBuffer; - u8 counter; - u32 offset2; - u32 offset; - u32 counter2; + u8 i; + u32 offset, offset2, j; - tilemapBuffer = (u16 *)GetBgTilemapBuffer(2u); - counter = 1; + tilemapBuffer = (u16 *)GetBgTilemapBuffer(2); + i = 1; do { offset2 = 2; - offset = 0x20 * counter; - counter2 = counter + 1; + offset = 0x20 * i; + j = i + 1; do { tilemapBuffer[offset + offset2] = ((Random() & 3) << 10) + 0x301F; offset2 = (offset2 + 1) << 0x18 >> 0x18; } while ( offset2 <= 0x1B ); - counter = counter2; + i = j; } - while ( counter2 << 0x18 >> 0x18 <= 0xCu ); - schedule_bg_copy_tilemap_to_vram(2u); + while ( j << 0x18 >> 0x18 <= 0xC ); + schedule_bg_copy_tilemap_to_vram(2); } void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) @@ -384,7 +382,7 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) struct Sprite *v3 = &gSprites[v1]; int op; - ClearWindowTilemap(1u); + ClearWindowTilemap(1); TeachyTvClearWindowRegs(); op = gTeachyTV_StaticResources.optionChosen; if ( op >= 0 ) @@ -392,8 +390,8 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) if ( op <= 3 ) { TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0); - ChangeBgX(3u, 0x3000u, 1u); - ChangeBgY(3u, 0x3000u, 2u); + ChangeBgX(3, 0x3000, 1); + ChangeBgY(3, 0x3000, 2); *((u8 *)gUnknown_203F450 + 0x4004) += 3; *((u8 *)gUnknown_203F450 + 0x4005) -= 3; } @@ -403,15 +401,15 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) v2[4] = 0; v2[5] = 0; - TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 1u); + TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 1); } -void TeachyTvInitTextPrinter(char *text) +void TeachyTvInitTextPrinter(const char *text) { u8 spd; gTextFlags.autoScroll = 0; spd = GetTextSpeedSetting(); - AddTextPrinterParameterized2(0, 4u, (const u8 *)text, spd, 0, 1u, 0xCu, 3u); + AddTextPrinterParameterized2(0, 4, (const char *)text, spd, 0, 1, 0xC, 3); } void TeachyTvFree() @@ -423,7 +421,7 @@ void TeachyTvFree() void TeachyTvQuitBeginFade(u8 taskId) { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10u, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); gTasks[taskId].func = TeachyTvQuitFadeControlAndTaskDel; } @@ -469,7 +467,7 @@ void TeachyTvOptionListController(u8 taskId) gTeachyTV_StaticResources.optionChosen = v3; DestroyListMenu(*v2, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); TeachyTvClearWindowRegs(); - ClearWindowTilemap(1u); + ClearWindowTilemap(1); schedule_bg_copy_tilemap_to_vram(0); TeachyTvRemoveScrollIndicatorArrowPair(); *((u16 *)v2 + 3) = 0; @@ -587,9 +585,9 @@ void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId) data[2] = counter; if ( (s16)counter > 63 ) { - CopyToBgTilemapBufferRect_ChangePalette(2u, (u8 *)gUnknown_203F450 + 0x3004, 0, 0, 0x20u, 0x20u, 0x11u); - TeachyTvSetSpriteCoordsAndSwitchFrame(((u8*)data)[2], 8, 0x38, 7u); - schedule_bg_copy_tilemap_to_vram(2u); + CopyToBgTilemapBufferRect_ChangePalette(2, (u8 *)gUnknown_203F450 + 0x3004, 0, 0, 0x20, 0x20, 0x11); + TeachyTvSetSpriteCoordsAndSwitchFrame(((u8*)data)[2], 8, 0x38, 7); + schedule_bg_copy_tilemap_to_vram(2); data[2] = 0; ++data[3]; PlayNewMapMusic(BGM_FRLG_FOLLOW_ME); @@ -606,8 +604,8 @@ void TeachyTvClusFuncClearBg2TeachyTvGraphic(u8 taskId) data[2] = counter; if ( (s16)counter == 134 ) { - FillBgTilemapBufferRect_Palette0(2u, 0, 2u, 1u, 0x1Au, 0xCu); - schedule_bg_copy_tilemap_to_vram(2u); + FillBgTilemapBufferRect_Palette0(2, 0, 2, 1, 0x1A, 0xC); + schedule_bg_copy_tilemap_to_vram(2); data[2] = 0; ++data[3]; } @@ -652,8 +650,8 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) u32 v4 = 0; offset[0] = 1; TeachyTvSetSpriteCoordsAndSwitchFrame(*((char *)data + 2), 0, 0, 0); - FillWindowPixelBuffer(0, 0xCCu); - CopyWindowToVram(0, 2u); + FillWindowPixelBuffer(0, 0xCC); + CopyWindowToVram(0, 2); TeachyTvClearBg1EndGraphicText(); data[2] = v4; data[3] = v4; @@ -672,7 +670,7 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) { u16 *data = (u16 *)gTasks[taskId].data; - char ** texts = &gUnknown_8479560; + const char * const* texts = &gUnknown_8479560; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; } @@ -680,7 +678,7 @@ void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) { u16 *data = (u16 *)gTasks[taskId].data; - char ** texts = &gUnknown_8479578; + const char * const* texts = &gUnknown_8479578; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; } @@ -698,8 +696,8 @@ void TeachyTvClusFuncEraseTextWindowIfKeyPressed(u8 taskId) data = (u16 *)gTasks[taskId].data; if ( gMain.newKeys & 3 ) { - FillWindowPixelBuffer(0, 0xCCu); - CopyWindowToVram(0, 2u); + FillWindowPixelBuffer(0, 0xCC); + CopyWindowToVram(0, 2); ++data[3]; } } @@ -708,7 +706,7 @@ void TeachyTvClusFuncStartAnimNpcWalkIntoGrass(u8 taskId) { u16 *data; data = (u16 *)gTasks[taskId].data; - StartSpriteAnim(&gSprites[(s16)data[1]], 5u); + StartSpriteAnim(&gSprites[(s16)data[1]], 5); data[2] = 0; data[4] = 0; data[5] = 1; @@ -718,26 +716,26 @@ void TeachyTvClusFuncStartAnimNpcWalkIntoGrass(u8 taskId) void TeachyTvClusFuncDudeMoveUp(u8 taskId) { s16 *data; - struct Sprite *v3; + struct Sprite *obj; int temp; - int v4; + int counter; data = gTasks[taskId].data; - v3 = &gSprites[data[1]]; - ChangeBgY(3u, 0x100u, 2u); - v4 = (u16)data[2] + 1; - ((u16*)data)[2] = v4; - if ( !( v4 % 16 ) ) + obj = &gSprites[data[1]]; + ChangeBgY(3, 0x100, 2); + counter = (u16)data[2] + 1; + ((u16*)data)[2] = counter; + if ( !( counter % 16 ) ) { --((u8*)gUnknown_203F450)[0x4005]; - TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 0); + TeachyTvGrassAnimationMain(taskId, obj->pos2.x, obj->pos2.y, 0, 0); } if ( data[2] == 0x30 ) { data[2] = 0; data[4] = -1; data[5] = 0; - StartSpriteAnim(v3, 7u); + StartSpriteAnim(obj, 7); ++data[3]; } } @@ -745,24 +743,24 @@ void TeachyTvClusFuncDudeMoveUp(u8 taskId) void TeachyTvClusFuncDudeMoveRight(u8 taskId) { u16 *data; - struct Sprite *v3; - int v4; + struct Sprite *obj; + int counter; data = (u16 *)gTasks[taskId].data; - v3 = &gSprites[(s16)data[1]]; - ChangeBgX(3u, 0x100u, 1u); - v4 = data[2] + 1; - data[2] = v4; - if ( !(v4 & 0xF) ) + obj = &gSprites[(s16)data[1]]; + ChangeBgX(3, 0x100, 1); + counter = data[2] + 1; + data[2] = counter; + if ( !(counter & 0xF) ) ++((u8*)gUnknown_203F450)[0x4004]; if ( !((((s16*)data)[2] + 8) & 0xF) ) - TeachyTvGrassAnimationMain(taskId, v3->pos2.x + 8, v3->pos2.y, 0, 0); + TeachyTvGrassAnimationMain(taskId, obj->pos2.x + 8, obj->pos2.y, 0, 0); if ( (s16)data[2] == 0x30 ) { data[2] = 0; data[4] = 0; data[5] = 0; - StartSpriteAnim(v3, 3u); + StartSpriteAnim(obj, 3); ++data[3]; } } @@ -774,7 +772,7 @@ void TeachyTvClusFuncDudeTurnLeft(u8 taskId) data = gTasks[taskId].data; v3 = &gSprites[data[1]]; - StartSpriteAnim(v3, 6u); + StartSpriteAnim(v3, 6); ++(u16)data[3]; data[4] = 0; data[5] = 0; @@ -805,8 +803,8 @@ void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) data = gTasks[taskId].data; if ( !data[2] ) { - CopyToBgTilemapBufferRect_ChangePalette(1u, &gUnknown_8479590, 0x14u, 0xAu, 8u, 2u, 0x11u); - schedule_bg_copy_tilemap_to_vram(1u); + CopyToBgTilemapBufferRect_ChangePalette(1, &gUnknown_8479590, 0x14, 0xA, 8, 2, 0x11); + schedule_bg_copy_tilemap_to_vram(1); } temp = (u16)data[2] + 1; data[2] = temp; @@ -820,8 +818,8 @@ void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) void TeachyTvClearBg1EndGraphicText() { - FillBgTilemapBufferRect_Palette0(1u, 0, 0x14u, 0xAu, 8u, 2u); - schedule_bg_copy_tilemap_to_vram(1u); + FillBgTilemapBufferRect_Palette0(1, 0, 0x14, 0xA, 8, 2); + schedule_bg_copy_tilemap_to_vram(1); } void TeachyTvBackToOptionList(u8 taskId) @@ -845,10 +843,10 @@ void TeachyTvBackToOptionList(u8 taskId) TeachyTvSetupScrollIndicatorArrowPair(); TeachyTvSetWindowRegs(); schedule_bg_copy_tilemap_to_vram(0); - ChangeBgX(3u, 0, 0); - ChangeBgY(3u, 0, 0); - ChangeBgX(3u, 0x1000u, 2u); - ChangeBgY(3u, 0x2800u, 1u); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + ChangeBgX(3, 0x1000, 2); + ChangeBgY(3, 0x2800, 1); ((u8*)gUnknown_203F450)[0x4004] = 0; ((u8*)gUnknown_203F450)[0x4005] = 3; ((u8*)gUnknown_203F450)[0x4006] = 0; @@ -858,7 +856,7 @@ void TeachyTvBackToOptionList(u8 taskId) void TeachyTvChainTaskBattleOrFadeByOptionChosen(u8 taskId) { int op = gTeachyTV_StaticResources.optionChosen; - if( op < 0 ) + if ( op < 0 ) return; if ( op <= 3 ) { @@ -875,9 +873,9 @@ void TeachyTvChainTaskBattleOrFadeByOptionChosen(u8 taskId) void TeachyTvSetupBagItemsByOptionChosen() { if ( gTeachyTV_StaticResources.optionChosen == 4 ) - sub_810B108(0xAu); + sub_810B108(10); else - sub_810B108(9u); + sub_810B108(9); } void TeachyTvPostBattleFadeControl(u8 taskId) @@ -885,7 +883,7 @@ void TeachyTvPostBattleFadeControl(u8 taskId) s16 *data = gTasks[taskId].data; if ( !(gPaletteFade.active) ) { - u8* funcIdx = &gUnknown_8479390; + const u8* funcIdx = &gUnknown_8479390; int arg = funcIdx[gTeachyTV_StaticResources.optionChosen]; data[3] = arg; gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs; @@ -898,7 +896,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m int res; struct Sprite *obj; int objId; - struct SpriteTemplate **objTemAddr; + const struct SpriteTemplate *const *objTemAddr; subprio = subpriority; if ( ((u8*)gUnknown_203F450)[0x4006] != 1 ) @@ -917,7 +915,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m obj->data[0] = taskId; if ( mode == 1 ) { - SeekSpriteAnim(obj, 4u); + SeekSpriteAnim(obj, 4); obj->oam.priority = 2; } else @@ -935,26 +933,26 @@ void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite) u32 diff1, diff2; s16 *data = gTasks[sprite->data[0]].data; struct Sprite *objAddr = &gSprites[data[1]]; - if(((u8*)gUnknown_203F450)[0x4006] == 1) + if (((u8*)gUnknown_203F450)[0x4006] == 1) DestroySprite(sprite); else { - if(!sprite->animCmdIndex) + if (!sprite->animCmdIndex) sprite->subspriteTableNum = 1; else sprite->subspriteTableNum = 0; sprite->pos2.x += (u16)data[4]; sprite->pos2.y += (u16)data[5]; - if(!sprite->animEnded) + if (!sprite->animEnded) return; sprite->subpriority = 0; diff1 = (u16)(sprite->pos2.x - objAddr->pos2.x); diff2 = (u16)(sprite->pos2.y - objAddr->pos2.y); diff1 = ((diff1 << 0x10) + 0xF0000) >> 0x10; - if(diff1 <= 0x1E) + if (diff1 <= 0x1E) { - if((s16)diff2 > -0x10) + if ((s16)diff2 > -0x10) { - if((s16)diff2 <= 0x17) + if ((s16)diff2 <= 0x17) return; } } @@ -964,15 +962,16 @@ void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite) u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y) { - u8 * arr, *ptr; - int a, b; - if( (x < 0) || (y < 0) ) + const u8 * arr; + u8 *ptr; + int high, low; + if ( (x < 0) || (y < 0) ) return 0; arr = &gUnknown_84795C8; ptr = gUnknown_203F450; - a = ((y >> 4) + ptr[0x4005]) << 4; - b = ((x >> 4) + ptr[0x4004]); - return arr[a+b]; + high = ((y >> 4) + ptr[0x4005]) << 4; + low = ((x >> 4) + ptr[0x4004]); + return arr[high+low]; } void TeachyTvPrepBattle(u8 taskId) @@ -1001,7 +1000,7 @@ void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId) int temp; data = gTasks[taskId].data; - switch(data[7]) + switch (data[7]) { case 0: sub_80D08B8(*((u8*)data + 12)); @@ -1055,12 +1054,12 @@ void TeachyTvLoadBg3Map(void *buffer) md = &Route1_Layout; v14 = (u8 *)buffer; v17 = 0; - mapArray = (u16 *)AllocZeroed(0x800u); - tileset = AllocZeroed(0x8000u); - palIndexArray = Alloc(0x10u); - memset(palIndexArray, 0xFFu, 0x10u); - TeachyTvLoadMapTilesetToBuffer(md->primaryTileset, (u8 *)tileset, 0x280u); - TeachyTvLoadMapTilesetToBuffer(md->secondaryTileset, (u8 *)tileset + 0x5000, 0x180u); + mapArray = (u16 *)AllocZeroed(0x800); + tileset = AllocZeroed(0x8000); + palIndexArray = Alloc(0x10); + memset(palIndexArray, 0xFF, 0x10); + TeachyTvLoadMapTilesetToBuffer(md->primaryTileset, (u8 *)tileset, 0x280); + TeachyTvLoadMapTilesetToBuffer(md->secondaryTileset, (u8 *)tileset + 0x5000, 0x180); v2 = 0; do { @@ -1102,17 +1101,17 @@ LABEL_11: v7); v3 = v8; } - while ( (u16)v8 <= 0xFu ); + while ( (u16)v8 <= 0xF ); v2 = v18; } - while ( (u16)v18 <= 8u ); + while ( (u16)v18 <= 8 ); MapTileBlockBuf = (char *)Alloc(v17 << 7); - FourMapTileBlocksTempBuf = Alloc(0x80u); + FourMapTileBlocksTempBuf = Alloc(0x80); for ( j = 0; j < v17; j = (u16)j + 1 ) { - memset(FourMapTileBlocksTempBuf, 0, 0x80u); + memset(FourMapTileBlocksTempBuf, 0, 0x80); v13 = &mapArray[j]; - if ( *v13 <= 0x27Fu ) + if ( *v13 <= 0x27F ) TeachyTvComputeMapTilesFromTilesetAndMetaTiles( (u16 *)(16 * *v13 + (u16*)(md->primaryTileset->metatiles)), (u8 *)FourMapTileBlocksTempBuf, @@ -1123,9 +1122,9 @@ LABEL_11: (u8 *)FourMapTileBlocksTempBuf, (u8 *)tileset); - CpuFastSet(FourMapTileBlocksTempBuf, &MapTileBlockBuf[0x80 * j], 0x20u); + CpuFastSet(FourMapTileBlocksTempBuf, &MapTileBlockBuf[0x80 * j], 0x20); } - LoadBgTiles(3u, MapTileBlockBuf, (u16)v17 << 7, 0); + LoadBgTiles(3, MapTileBlockBuf, (u16)v17 << 7, 0); TeachyTvLoadMapPalette(&Route1_Layout, palIndexArray); Free(FourMapTileBlocksTempBuf); Free(MapTileBlockBuf); @@ -1378,7 +1377,7 @@ void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1 u16 *metaTileEntryAddr; int temp = mapEntry; - if ( temp <= 0x27Fu ) + if ( temp <= 0x27F ) { ts = mStruct->primaryTileset; } @@ -1480,54 +1479,54 @@ void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blo void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile) { u8 *buffer; - u32 counterV7; - u32 counterV8; + u32 i; + u32 j; vu32 src; - buffer = (u8 *)AllocZeroed(0x20u); - src = ((u32)AllocZeroed(0x20u)); - CpuFastSet(tileset, buffer, 8u); + buffer = (u8 *)AllocZeroed(0x20); + src = ((u32)AllocZeroed(0x20)); + CpuFastSet(tileset, buffer, 8); if ( metaTile & 1 ) { - counterV7 = 0; + i = 0; do { - counterV8 = 0; + j = 0; do { - u32 offset1 = counterV7 << 2; - u32 offset2 = counterV8 - 3; + u32 offset1 = i << 2; + u32 offset2 = j - 3; u32 offset = offset1 - offset2; u32 value = buffer[offset]; - u32 dstOffset = offset1 + counterV8; + u32 dstOffset = offset1 + j; *(u8*)(src + dstOffset) = ((value & 0xF) << 4) + ((value & 0xF0) >> 4); } - while ( ++(u8)counterV8 <= 3u ); + while ( ++(u8)j <= 3 ); } - while ( ++(u8)counterV7 <= 7u ); - CpuFastSet((u8*)src, buffer, 8u); + while ( ++(u8)i <= 7 ); + CpuFastSet((u8*)src, buffer, 8); } if ( metaTile & 2 ) { - counterV8 = 0; + j = 0; do { - memcpy(&((u8*)src)[4 * counterV8], &buffer[4 * (7 - counterV8)], 4u); - counterV8 = (u8)(counterV8 + 1); + memcpy(&((u8*)src)[4 * j], &buffer[4 * (7 - j)], 4); + j = (u8)(j + 1); } - while ( counterV8 <= 7u ); - CpuFastSet((u8*)src, buffer, 8u); + while ( j <= 7 ); + CpuFastSet((u8*)src, buffer, 8); } - counterV8 = 0; + j = 0; do { - if ( buffer[counterV8] & 0xF0 ) - blockBuf[counterV8] = (blockBuf[counterV8] & 0xF) + (buffer[counterV8] & 0xF0); - if ( buffer[counterV8] & 0xF ) - blockBuf[counterV8] = (blockBuf[counterV8] & 0xF0) + (buffer[counterV8] & 0xF); - counterV8 = (u8)(counterV8 + 1); + if ( buffer[j] & 0xF0 ) + blockBuf[j] = (blockBuf[j] & 0xF) + (buffer[j] & 0xF0); + if ( buffer[j] & 0xF ) + blockBuf[j] = (blockBuf[j] & 0xF0) + (buffer[j] & 0xF); + j = (u8)(j + 1); } - while ( counterV8 <= 0x1Fu ); + while ( j <= 0x1F ); Free((u8*)src); Free(buffer); } @@ -1685,12 +1684,12 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile) { u32 pal; - u32 counter; + u32 i; int firstEntry; int temp; pal = (u32)(metaTile << 16) >> 28; - counter = 0; + i = 0; firstEntry = *palIndexArrayBuf; if ( firstEntry != pal ) { @@ -1702,38 +1701,38 @@ u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTi { while ( 1 ) { - counter = ((counter + 1) << 0x10) >> 0x10; - if ( counter > 0xF ) + i = ((i + 1) << 0x10) >> 0x10; + if ( i > 0xF ) break; - temp = palIndexArrayBuf[counter]; + temp = palIndexArrayBuf[i]; if ( temp == pal ) break; if ( temp == 0xFF ) { - palIndexArrayBuf[counter] = pal; + palIndexArrayBuf[i] = pal; break; } } } } - return (u16)(0xF - counter); + return (u16)(0xF - i); } #ifdef NONMATCHING -void TeachyTvLoadMapPalette(struct MapData *mStruct, u8 *palIndexArray) +void TeachyTvLoadMapPalette(const struct MapData * const mStruct, u8 *palIndexArray) { - u8 counter; + u8 i; struct Tileset *ts; - for (counter = 0; counter < 16 && palIndexArray[counter] != 0xFF; counter++) + for (i = 0; i < 16 && palIndexArray[i] != 0xFF; i++) { - ts = *(palIndexArray + counter) > 6u ? mStruct->secondaryTileset : mStruct->primaryTileset; - LoadPalette((u16 *)ts->palettes + 0x10 * palIndexArray[counter], 0x10 * (0xF - counter), 0x20u); + ts = *(palIndexArray + i) > 6 ? mStruct->secondaryTileset : mStruct->primaryTileset; + LoadPalette((u16 *)ts->palettes + 0x10 * palIndexArray[i], 0x10 * (0xF - i), 0x20); } } #else NAKED -void TeachyTvLoadMapPalette(struct MapData *mStruct, u8 *palIndexArray) +void TeachyTvLoadMapPalette(const struct MapData * const mStruct, u8 *palIndexArray) { asm_unified("\n\ push {r4-r6,lr}\n\ -- cgit v1.2.3 From d0315c2f67086f67a8e0af8a7aeefd14eec1baef Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 03:15:40 +0800 Subject: not done, still have to do the struct stuff --- src/teachy_tv.c | 39 +++++++++++++-------------------------- 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index feb3e3062..499253a72 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -319,7 +319,7 @@ void TeachyTvInitIo() SetGpuReg(REG_OFFSET_WININ, 0x3F); SetGpuReg(REG_OFFSET_WINOUT, 0x1F); SetGpuReg(REG_OFFSET_BLDCNT, 0xCC); - SetGpuReg(REG_OFFSET_BLDY, 5); + SetGpuReg(REG_OFFSET_BLDY, 0x5); } u8 TeachyTvSetupObjEventAndOam() @@ -346,8 +346,8 @@ void TeachyTvSetWindowRegs() void TeachyTvClearWindowRegs() { - SetGpuReg(REG_OFFSET_WIN0V, 0); - SetGpuReg(REG_OFFSET_WIN0H, 0); + SetGpuReg(REG_OFFSET_WIN0V, 0x0); + SetGpuReg(REG_OFFSET_WIN0H, 0x0); } void TeachyTvBg2AnimController() @@ -576,14 +576,9 @@ void TeachyTvOptionListController(u8 taskId) void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId) { - u16 *data; - u32 counter; - - data = (u16 *)gTasks[taskId].data; + s16 *data = gTasks[taskId].data; TeachyTvBg2AnimController(); - counter = data[2] + 1; - data[2] = counter; - if ( (s16)counter > 63 ) + if ( ++data[2] > 63 ) { CopyToBgTilemapBufferRect_ChangePalette(2, (u8 *)gUnknown_203F450 + 0x3004, 0, 0, 0x20, 0x20, 0x11); TeachyTvSetSpriteCoordsAndSwitchFrame(((u8*)data)[2], 8, 0x38, 7); @@ -596,13 +591,8 @@ void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId) void TeachyTvClusFuncClearBg2TeachyTvGraphic(u8 taskId) { - u16 *data; - u32 counter; - - data = (u16*)gTasks[taskId].data; - counter = data[2] + 1; - data[2] = counter; - if ( (s16)counter == 134 ) + s16 *data = gTasks[taskId].data; + if ( ++data[2] == 134 ) { FillBgTilemapBufferRect_Palette0(2, 0, 2, 1, 0x1A, 0xC); schedule_bg_copy_tilemap_to_vram(2); @@ -730,7 +720,7 @@ void TeachyTvClusFuncDudeMoveUp(u8 taskId) --((u8*)gUnknown_203F450)[0x4005]; TeachyTvGrassAnimationMain(taskId, obj->pos2.x, obj->pos2.y, 0, 0); } - if ( data[2] == 0x30 ) + if ( data[2] == 48 ) { data[2] = 0; data[4] = -1; @@ -742,20 +732,17 @@ void TeachyTvClusFuncDudeMoveUp(u8 taskId) void TeachyTvClusFuncDudeMoveRight(u8 taskId) { - u16 *data; + s16 *data; struct Sprite *obj; - int counter; data = (u16 *)gTasks[taskId].data; obj = &gSprites[(s16)data[1]]; ChangeBgX(3, 0x100, 1); - counter = data[2] + 1; - data[2] = counter; - if ( !(counter & 0xF) ) + if ( !(++data[2] & 0xF) ) ++((u8*)gUnknown_203F450)[0x4004]; if ( !((((s16*)data)[2] + 8) & 0xF) ) TeachyTvGrassAnimationMain(taskId, obj->pos2.x + 8, obj->pos2.y, 0, 0); - if ( (s16)data[2] == 0x30 ) + if ( data[2] == 0x30 ) { data[2] = 0; data[4] = 0; @@ -843,8 +830,8 @@ void TeachyTvBackToOptionList(u8 taskId) TeachyTvSetupScrollIndicatorArrowPair(); TeachyTvSetWindowRegs(); schedule_bg_copy_tilemap_to_vram(0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); + ChangeBgX(3, 0x0, 0); + ChangeBgY(3, 0x0, 0); ChangeBgX(3, 0x1000, 2); ChangeBgY(3, 0x2800, 1); ((u8*)gUnknown_203F450)[0x4004] = 0; -- cgit v1.2.3 From 0faa768a0971128d40980b47ad1b9e348c3b9558 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 03:55:42 +0800 Subject: now using struct decl --- src/teachy_tv.c | 104 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 56 insertions(+), 48 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 499253a72..7883fb864 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -40,8 +40,21 @@ struct TeachyTvCtrlBlk u16 filler; }; +struct TeachyTvBuf +{ + u32 state; + u8 buffer1[0x1000]; + u8 buffer2[0x1000]; + u8 buffer3[0x1000]; + u8 buffer4[0x1000]; + u8 var_4004; + u8 var_4005; + u8 var_4006; + u8 var_4007; +}; + extern struct TeachyTvCtrlBlk gTeachyTV_StaticResources; -extern void * gUnknown_203F450; +extern struct TeachyTvBuf * gUnknown_203F450; extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; extern const char gUnknown_841B83D; extern const struct BgTemplate gUnknown_84792E0; @@ -157,18 +170,18 @@ void TeachyTvMainCallback() int state; int taskId; struct Task *taskAddr; - u8 **memBuf; + struct TeachyTvBuf **memBuf; u32 x; state = gMain.state; switch (state) { case 0: - memBuf = (u8 **)&gUnknown_203F450; - (*memBuf) = (u8*)AllocZeroed(0x4008); - *(u32*)gUnknown_203F450 = (u32)state; - *((u8*)gUnknown_203F450 + 0x4006) = state; - *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; + memBuf = &gUnknown_203F450; + (*memBuf) = (struct TeachyTvBuf *)AllocZeroed(0x4008); + gUnknown_203F450->state = (u32)state; + gUnknown_203F450->var_4006 = state; + gUnknown_203F450->var_4007 = 0xFF; VblankHblankHandlerSetZero(); clear_scheduled_bg_copies_to_vram(); ScanlineEffect_Stop(); @@ -219,9 +232,9 @@ void TeachyTvSetupBg() InitBgReg(); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, &gUnknown_84792E0, 4); - SetBgTilemapBuffer(1, (u8 *)gUnknown_203F450 + 4); - SetBgTilemapBuffer(2, (u8 *)gUnknown_203F450 + 0x1004); - SetBgTilemapBuffer(3, (u8 *)gUnknown_203F450 + 0x2004); + SetBgTilemapBuffer(1, gUnknown_203F450->buffer1); + SetBgTilemapBuffer(2, gUnknown_203F450->buffer2); + SetBgTilemapBuffer(3, gUnknown_203F450->buffer3); SetGpuReg(REG_OFFSET_DISPCNT, 0x3040); ShowBg(0); ShowBg(1); @@ -229,8 +242,8 @@ void TeachyTvSetupBg() ShowBg(3); ChangeBgX(3, 0x1000, 2); ChangeBgY(3, 0x2800, 1); - *((u8 *)gUnknown_203F450 + 0x4004) = 0; - *((u8 *)gUnknown_203F450 + 0x4005) = 3; + gUnknown_203F450->var_4004 = 0; + gUnknown_203F450->var_4005 = 3; SetGpuReg(REG_OFFSET_BLDCNT, 0); } @@ -240,12 +253,12 @@ void TeachyTvLoadGraphic() src = 0; reset_temp_tile_data_buffers(); decompress_and_copy_tile_data_to_vram(1, &gUnknown_8E86240, 0, 0, 0); - LZDecompressWram(&gUnknown_8E86BE8, (*(u8 **)&gUnknown_203F450) + 0x4); - LZDecompressWram(&gUnknown_8E86D6C, (*(u8 **)&gUnknown_203F450) + 0x3004); + LZDecompressWram(&gUnknown_8E86BE8, gUnknown_203F450->buffer1); + LZDecompressWram(&gUnknown_8E86D6C, gUnknown_203F450->buffer4); LoadCompressedPalette(&gUnknown_8E86F98, 0, 0x80); LoadPalette(&src, 0, 2); LoadSpritePalette(&gUnknown_83A5348); - TeachyTvLoadBg3Map((u8 *)gUnknown_203F450 + 0x2004); + TeachyTvLoadBg3Map(gUnknown_203F450->buffer3); } void TeachyTvCreateAndRenderRbox() @@ -284,27 +297,26 @@ void TeachyTvSetupScrollIndicatorArrowPair() hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1); if ( ! hasItem << 24 ) { - u8 * temp = (u8 *)gUnknown_203F450; - *((u8 *)temp + 0x4007) = 0xFF; + struct TeachyTvBuf * temp = gUnknown_203F450; + temp->var_4007 = 0xFF; } else { - u8 *temp, res; - res = AddScrollIndicatorArrowPair( - &gUnknown_8479380, - &(gTeachyTV_StaticResources.scrollOffset)); - temp = (u8 *)gUnknown_203F450; - *((u8 *)temp + 0x4007) = res; + struct TeachyTvBuf *temp; + u8 res; + res = AddScrollIndicatorArrowPair(&gUnknown_8479380, &(gTeachyTV_StaticResources.scrollOffset)); + temp = gUnknown_203F450; + temp->var_4007 = res; } } void TeachyTvRemoveScrollIndicatorArrowPair() { - u8 *temp = ((u8*)gUnknown_203F450 + 0x4007); + u8 *temp = &(gUnknown_203F450->var_4007); if ( *temp != 0xFF ) { RemoveScrollIndicatorArrowPair(*temp); - *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; + gUnknown_203F450->var_4007 = 0xFF; } } @@ -392,8 +404,8 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0); ChangeBgX(3, 0x3000, 1); ChangeBgY(3, 0x3000, 2); - *((u8 *)gUnknown_203F450 + 0x4004) += 3; - *((u8 *)gUnknown_203F450 + 0x4005) -= 3; + gUnknown_203F450->var_4004 += 3; + gUnknown_203F450->var_4005 -= 3; } else if ( op <= 5 ) TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0); @@ -429,7 +441,7 @@ void TeachyTvQuitFadeControlAndTaskDel(u8 taskId) { if ( !(gPaletteFade.active) ) { - if ( *(u32 *)gUnknown_203F450 ) + if ( gUnknown_203F450->state ) { SetMainCallback2(*(void (**)())gUnknown_203F450); } @@ -580,7 +592,7 @@ void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId) TeachyTvBg2AnimController(); if ( ++data[2] > 63 ) { - CopyToBgTilemapBufferRect_ChangePalette(2, (u8 *)gUnknown_203F450 + 0x3004, 0, 0, 0x20, 0x20, 0x11); + CopyToBgTilemapBufferRect_ChangePalette(2, gUnknown_203F450->buffer4, 0, 0, 0x20, 0x20, 0x11); TeachyTvSetSpriteCoordsAndSwitchFrame(((u8*)data)[2], 8, 0x38, 7); schedule_bg_copy_tilemap_to_vram(2); data[2] = 0; @@ -636,15 +648,15 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) data = gTasks[taskId].data; if ( gMain.newKeys & 2 ) { - char *offset = ((char *)gUnknown_203F450 + 0x4006); - u32 v4 = 0; + u8 *offset = &(gUnknown_203F450->var_4006); + u32 zero = 0; offset[0] = 1; TeachyTvSetSpriteCoordsAndSwitchFrame(*((char *)data + 2), 0, 0, 0); FillWindowPixelBuffer(0, 0xCC); CopyWindowToVram(0, 2); TeachyTvClearBg1EndGraphicText(); - data[2] = v4; - data[3] = v4; + data[2] = zero; + data[3] = zero; gTasks[taskId].func = TeachyTvBackToOptionList; } else @@ -707,17 +719,13 @@ void TeachyTvClusFuncDudeMoveUp(u8 taskId) { s16 *data; struct Sprite *obj; - int temp; - int counter; data = gTasks[taskId].data; obj = &gSprites[data[1]]; ChangeBgY(3, 0x100, 2); - counter = (u16)data[2] + 1; - ((u16*)data)[2] = counter; - if ( !( counter % 16 ) ) + if ( !( ++data[2] & 0xF ) ) { - --((u8*)gUnknown_203F450)[0x4005]; + --gUnknown_203F450->var_4005; TeachyTvGrassAnimationMain(taskId, obj->pos2.x, obj->pos2.y, 0, 0); } if ( data[2] == 48 ) @@ -739,7 +747,7 @@ void TeachyTvClusFuncDudeMoveRight(u8 taskId) obj = &gSprites[(s16)data[1]]; ChangeBgX(3, 0x100, 1); if ( !(++data[2] & 0xF) ) - ++((u8*)gUnknown_203F450)[0x4004]; + ++gUnknown_203F450->var_4004; if ( !((((s16*)data)[2] + 8) & 0xF) ) TeachyTvGrassAnimationMain(taskId, obj->pos2.x + 8, obj->pos2.y, 0, 0); if ( data[2] == 0x30 ) @@ -834,9 +842,9 @@ void TeachyTvBackToOptionList(u8 taskId) ChangeBgY(3, 0x0, 0); ChangeBgX(3, 0x1000, 2); ChangeBgY(3, 0x2800, 1); - ((u8*)gUnknown_203F450)[0x4004] = 0; - ((u8*)gUnknown_203F450)[0x4005] = 3; - ((u8*)gUnknown_203F450)[0x4006] = 0; + gUnknown_203F450->var_4004 = 0; + gUnknown_203F450->var_4005 = 3; + gUnknown_203F450->var_4006 = 0; } } @@ -886,7 +894,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m const struct SpriteTemplate *const *objTemAddr; subprio = subpriority; - if ( ((u8*)gUnknown_203F450)[0x4006] != 1 ) + if ( gUnknown_203F450->var_4006 != 1 ) { res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj( (u32)((x << 16) - 0x100000) >> 16, @@ -920,7 +928,7 @@ void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite) u32 diff1, diff2; s16 *data = gTasks[sprite->data[0]].data; struct Sprite *objAddr = &gSprites[data[1]]; - if (((u8*)gUnknown_203F450)[0x4006] == 1) + if (gUnknown_203F450->var_4006 == 1) DestroySprite(sprite); else { if (!sprite->animCmdIndex) @@ -950,14 +958,14 @@ void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite) u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y) { const u8 * arr; - u8 *ptr; + struct TeachyTvBuf *ptr; int high, low; if ( (x < 0) || (y < 0) ) return 0; arr = &gUnknown_84795C8; ptr = gUnknown_203F450; - high = ((y >> 4) + ptr[0x4005]) << 4; - low = ((x >> 4) + ptr[0x4004]); + high = ((y >> 4) + ptr->var_4005) << 4; + low = ((x >> 4) + ptr->var_4004); return arr[high+low]; } -- cgit v1.2.3 From 4dc1fc8c66cfda1892eb091fbcefa4c98b556127 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 04:10:41 +0800 Subject: sub_815ABC4 --- src/teachy_tv.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 7883fb864..4e6787755 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -137,18 +137,18 @@ void TeachyTvVblankHandler() void sub_815ABC4(u8 mode, void (*cb)()) { - struct TeachyTvCtrlBlk *resAddr = &gTeachyTV_StaticResources; - u16 zero = 0; - resAddr->mode = mode; - resAddr->callback = cb; - if (!mode) + gTeachyTV_StaticResources.mode = mode; + gTeachyTV_StaticResources.callback = cb; + if (mode == 0) { - resAddr->scrollOffset = zero; - resAddr->selectedRow = zero; - resAddr->optionChosen = 0; + gTeachyTV_StaticResources.scrollOffset = 0; + gTeachyTV_StaticResources.selectedRow = 0; + gTeachyTV_StaticResources.optionChosen = 0; } if (mode == 1) - resAddr->mode = 0; + { + gTeachyTV_StaticResources.mode = 0; + } SetMainCallback2(TeachyTvMainCallback); } -- cgit v1.2.3 From f194f18f4c761d119b493d9d34ba2b170706f1a6 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 05:32:23 +0800 Subject: improved --- src/teachy_tv.c | 124 +++++++++++++++++++++++++------------------------------- 1 file changed, 56 insertions(+), 68 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 4e6787755..a7d5b7da0 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -171,7 +171,6 @@ void TeachyTvMainCallback() int taskId; struct Task *taskAddr; struct TeachyTvBuf **memBuf; - u32 x; state = gMain.state; switch (state) @@ -207,8 +206,7 @@ void TeachyTvMainCallback() else { taskId = CreateTask(TeachyTvOptionListController, 0); - x = (u32)TeachyTvSetupWindow(); - gTasks[taskId].data[0] = (x << 24) >> 24; + gTasks[taskId].data[0] = TeachyTvSetupWindow(); gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); TeachyTvSetupScrollIndicatorArrowPair(); PlayNewMapMusic(BGM_FRLG_TEACHY_TV); @@ -277,8 +275,7 @@ u8 TeachyTvSetupWindow() gMultiuseListMenuTemplate = gUnknown_8479368; gMultiuseListMenuTemplate.windowId = 1; gMultiuseListMenuTemplate.moveCursorFunc = TeachyTvAudioByInput; - hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1); - if ( !(hasItem << 24) ) + if (!CheckBagHasItem(ITEM_TM_CASE, 1)) { gMultiuseListMenuTemplate.items = &gUnknown_8479340; gMultiuseListMenuTemplate.totalItems = 5; @@ -294,8 +291,7 @@ u8 TeachyTvSetupWindow() void TeachyTvSetupScrollIndicatorArrowPair() { int hasItem; - hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1); - if ( ! hasItem << 24 ) + if (!CheckBagHasItem(ITEM_TM_CASE, 1)) { struct TeachyTvBuf * temp = gUnknown_203F450; temp->var_4007 = 0xFF; @@ -312,17 +308,16 @@ void TeachyTvSetupScrollIndicatorArrowPair() void TeachyTvRemoveScrollIndicatorArrowPair() { - u8 *temp = &(gUnknown_203F450->var_4007); - if ( *temp != 0xFF ) + if ( gUnknown_203F450->var_4007 != 0xFF ) { - RemoveScrollIndicatorArrowPair(*temp); + RemoveScrollIndicatorArrowPair(gUnknown_203F450->var_4007); gUnknown_203F450->var_4007 = 0xFF; } } void TeachyTvAudioByInput(s32 notUsed, bool8 play, struct ListMenu *notUsedAlt) { - if ( play != 1 ) + if ( play != TRUE ) PlaySE(SE_SELECT); } @@ -365,8 +360,8 @@ void TeachyTvClearWindowRegs() void TeachyTvBg2AnimController() { u16 *tilemapBuffer; - u8 i; - u32 offset, offset2, j; + u8 i, offset2; + u32 j, offset; tilemapBuffer = (u16 *)GetBgTilemapBuffer(2); i = 1; @@ -378,19 +373,19 @@ void TeachyTvBg2AnimController() do { tilemapBuffer[offset + offset2] = ((Random() & 3) << 10) + 0x301F; - offset2 = (offset2 + 1) << 0x18 >> 0x18; + offset2 = (offset2 + 1); } while ( offset2 <= 0x1B ); i = j; } - while ( j << 0x18 >> 0x18 <= 0xC ); + while ( (u8)j <= 0xC ); schedule_bg_copy_tilemap_to_vram(2); } void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) { - u16 *v2 = gTasks[taskId].data; - int v1 = ((s16 *)v2)[1]; + s16 *data = gTasks[taskId].data; + int v1 = (data)[1]; struct Sprite *v3 = &gSprites[v1]; int op; @@ -401,18 +396,18 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) { if ( op <= 3 ) { - TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0); + TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)data)[2], 0x78, 0x38, 0); ChangeBgX(3, 0x3000, 1); ChangeBgY(3, 0x3000, 2); gUnknown_203F450->var_4004 += 3; gUnknown_203F450->var_4005 -= 3; } else if ( op <= 5 ) - TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0); + TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)data)[2], 0x78, 0x38, 0); } - v2[4] = 0; - v2[5] = 0; + data[4] = 0; + data[5] = 0; TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 1); } @@ -458,32 +453,32 @@ void TeachyTvQuitFadeControlAndTaskDel(u8 taskId) #ifdef NONMATCHING void TeachyTvOptionListController(u8 taskId) { - char *v2; - s32 v3; + s16 *data; + s32 res; - v2 = (char *)gTasks[taskId].data; + data = gTasks[taskId].data; TeachyTvBg2AnimController(); if ( !(gPaletteFade.active) ) { - v3 = ListMenuHandleInput(*v2); - ListMenuGetScrollAndRow(*v2, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); + res = ListMenuHandleInput(*data); + ListMenuGetScrollAndRow(*data, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); if ( ((gMain.newKeys) & 4 && (gTeachyTV_StaticResources.callback != UseFameCheckerFromMenu)) - || (v3 == -2) ) + || (res == -2) ) { PlaySE(SE_SELECT); TeachyTvQuitBeginFade(taskId); } - else if ( v3 != -1 ) + else if ( res != -1 ) { PlaySE(SE_SELECT); - gTeachyTV_StaticResources.optionChosen = v3; - DestroyListMenu(*v2, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); + gTeachyTV_StaticResources.optionChosen = res; + DestroyListMenu(*data, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); TeachyTvClearWindowRegs(); ClearWindowTilemap(1); schedule_bg_copy_tilemap_to_vram(0); TeachyTvRemoveScrollIndicatorArrowPair(); - *((u16 *)v2 + 3) = 0; - *((u16 *)v2 + 2) = 0; + data[3] = 0; + data[2] = 0; gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs; } } @@ -637,14 +632,14 @@ void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId) void TeachyTvClusFuncIdleIfTextPrinterIsActive(u8 taskId) { - u16* data = (u16 *)gTasks[taskId].data; - if ( !(sub_80BF518(0) << 16) ) + s16* data = (u16 *)gTasks[taskId].data; + if ( !sub_80BF518(0) ) ++data[3]; } void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) { - u16 *data; + s16 *data; data = gTasks[taskId].data; if ( gMain.newKeys & 2 ) { @@ -663,15 +658,13 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) { void (***array)(u8) = &gUnknown_8479548; void (**cluster)(u8) = array[(u8)gTeachyTV_StaticResources.optionChosen]; - _call_via_r1( - taskId, - cluster[(s16)data[3]]); + cluster[data[3]](taskId); } } void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) { - u16 *data = (u16 *)gTasks[taskId].data; + s16 *data = (u16 *)gTasks[taskId].data; const char * const* texts = &gUnknown_8479560; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; @@ -679,7 +672,7 @@ void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) { - u16 *data = (u16 *)gTasks[taskId].data; + s16 *data = (u16 *)gTasks[taskId].data; const char * const* texts = &gUnknown_8479578; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; @@ -687,16 +680,16 @@ void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) void TeachyTvClusFuncIdleIfTextPrinterIsActive2(u8 taskId) { - u16* data = (u16 *)gTasks[taskId].data; - if ( !(sub_80BF518(0) << 16) ) + s16* data = (u16 *)gTasks[taskId].data; + if ( !sub_80BF518(0) ) ++data[3]; } void TeachyTvClusFuncEraseTextWindowIfKeyPressed(u8 taskId) { - u16 *data; + s16 *data; data = (u16 *)gTasks[taskId].data; - if ( gMain.newKeys & 3 ) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { FillWindowPixelBuffer(0, 0xCC); CopyWindowToVram(0, 2); @@ -706,7 +699,7 @@ void TeachyTvClusFuncEraseTextWindowIfKeyPressed(u8 taskId) void TeachyTvClusFuncStartAnimNpcWalkIntoGrass(u8 taskId) { - u16 *data; + s16 *data; data = (u16 *)gTasks[taskId].data; StartSpriteAnim(&gSprites[(s16)data[1]], 5); data[2] = 0; @@ -748,7 +741,7 @@ void TeachyTvClusFuncDudeMoveRight(u8 taskId) ChangeBgX(3, 0x100, 1); if ( !(++data[2] & 0xF) ) ++gUnknown_203F450->var_4004; - if ( !((((s16*)data)[2] + 8) & 0xF) ) + if ( !((data[2] + 8) & 0xF) ) TeachyTvGrassAnimationMain(taskId, obj->pos2.x + 8, obj->pos2.y, 0, 0); if ( data[2] == 0x30 ) { @@ -768,7 +761,7 @@ void TeachyTvClusFuncDudeTurnLeft(u8 taskId) data = gTasks[taskId].data; v3 = &gSprites[data[1]]; StartSpriteAnim(v3, 6); - ++(u16)data[3]; + ++data[3]; data[4] = 0; data[5] = 0; TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 0); @@ -785,7 +778,7 @@ void TeachyTvClusFuncDudeMoveLeft(u8 taskId) if ( !(v2->pos2.x & 0xF) ) TeachyTvGrassAnimationMain(taskId, v2->pos2.x - 8, v2->pos2.y, 0, 0); if ( v2->pos2.x == 8 ) - ++(u16)data[3]; + ++data[3]; else --v2->pos2.x; } @@ -793,7 +786,6 @@ void TeachyTvClusFuncDudeMoveLeft(u8 taskId) void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) { s16 *data; - int temp; data = gTasks[taskId].data; if ( !data[2] ) @@ -801,13 +793,11 @@ void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) CopyToBgTilemapBufferRect_ChangePalette(1, &gUnknown_8479590, 0x14, 0xA, 8, 2, 0x11); schedule_bg_copy_tilemap_to_vram(1); } - temp = (u16)data[2] + 1; - data[2] = temp; - if ( (s16)temp > 126 ) + if ( ++data[2] > 126 ) { TeachyTvClearBg1EndGraphicText(); - (u16)data[2] = 0; - ++(u16)data[3]; + data[2] = 0; + ++data[3]; } } @@ -820,15 +810,12 @@ void TeachyTvClearBg1EndGraphicText() void TeachyTvBackToOptionList(u8 taskId) { s16 *data; - s32 temp; data = gTasks[taskId].data; if ( !data[2] ) PlayNewMapMusic(BGM_FRLG_TEACHY_TV); TeachyTvBg2AnimController(); - temp = (u16)data[2] + 1; - data[2] = temp; - if ( (s16)temp > 0x3F ) + if ( ++data[2] > 63 ) { data[2] = 0; data[3] = 0; @@ -851,17 +838,18 @@ void TeachyTvBackToOptionList(u8 taskId) void TeachyTvChainTaskBattleOrFadeByOptionChosen(u8 taskId) { int op = gTeachyTV_StaticResources.optionChosen; - if ( op < 0 ) - return; - if ( op <= 3 ) + if ( op >= 0 ) { - TeachyTvPrepBattle(taskId); + if ( op <= 3 ) + { + TeachyTvPrepBattle(taskId); - } - else if ( op <= 5 ) - { - *((void(**)())gUnknown_203F450) = TeachyTvSetupBagItemsByOptionChosen; - TeachyTvQuitBeginFade(taskId); + } + else if ( op <= 5 ) + { + *((void(**)())gUnknown_203F450) = TeachyTvSetupBagItemsByOptionChosen; + TeachyTvQuitBeginFade(taskId); + } } } @@ -897,7 +885,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m if ( gUnknown_203F450->var_4006 != 1 ) { res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj( - (u32)((x << 16) - 0x100000) >> 16, + x - 0x10, y); if ( res << 24 ) { -- cgit v1.2.3 From 4580b3fb33f8ee06b66d24277af21d79a545a53c Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 05:53:49 +0800 Subject: fix TeachyTvOptionListController --- src/teachy_tv.c | 145 +++++++++++--------------------------------------------- 1 file changed, 28 insertions(+), 117 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index a7d5b7da0..9a0d61fa0 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -450,137 +450,48 @@ void TeachyTvQuitFadeControlAndTaskDel(u8 taskId) } } -#ifdef NONMATCHING void TeachyTvOptionListController(u8 taskId) { - s16 *data; - s32 res; + s16 * data = gTasks[taskId].data; + s32 input; - data = gTasks[taskId].data; TeachyTvBg2AnimController(); - if ( !(gPaletteFade.active) ) + if (!gPaletteFade.active) { - res = ListMenuHandleInput(*data); - ListMenuGetScrollAndRow(*data, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); - if ( ((gMain.newKeys) & 4 && (gTeachyTV_StaticResources.callback != UseFameCheckerFromMenu)) - || (res == -2) ) + input = ListMenuHandleInput(data[0]); + ListMenuGetScrollAndRow(data[0], &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); + if ((JOY_NEW(SELECT_BUTTON) && gTeachyTV_StaticResources.callback != UseFameCheckerFromMenu)) { PlaySE(SE_SELECT); TeachyTvQuitBeginFade(taskId); } - else if ( res != -1 ) + else { - PlaySE(SE_SELECT); - gTeachyTV_StaticResources.optionChosen = res; - DestroyListMenu(*data, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); - TeachyTvClearWindowRegs(); - ClearWindowTilemap(1); - schedule_bg_copy_tilemap_to_vram(0); - TeachyTvRemoveScrollIndicatorArrowPair(); - data[3] = 0; - data[2] = 0; - gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs; + switch (input) + { + case -1: + break; + case -2: + PlaySE(SE_SELECT); + TeachyTvQuitBeginFade(taskId); + break; + default: + PlaySE(SE_SELECT); + gTeachyTV_StaticResources.optionChosen = input; + DestroyListMenu(data[0], &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); + TeachyTvClearWindowRegs(); + ClearWindowTilemap(1); + schedule_bg_copy_tilemap_to_vram(0); + TeachyTvRemoveScrollIndicatorArrowPair(); + data[3] = 0; + data[2] = 0; + gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs; + break; + } } } } -#else -NAKED -void TeachyTvOptionListController(u8 taskId) -{ - asm_unified("\n\ - push {r4-r7,lr}\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - lsls r0, r7, 2\n\ - adds r0, r7\n\ - lsls r0, 3\n\ - ldr r1, _0815B31C @ =gTasks+0x8\n\ - adds r6, r0, r1\n\ - bl TeachyTvBg2AnimController\n\ - ldr r0, _0815B320 @ =gPaletteFade\n\ - ldrb r1, [r0, 0x7]\n\ - movs r0, 0x80\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0815B37A\n\ - ldrb r0, [r6]\n\ - bl ListMenuHandleInput\n\ - adds r5, r0, 0\n\ - ldrb r0, [r6]\n\ - ldr r4, _0815B324 @ =gTeachyTV_StaticResources+6\n\ - adds r2, r4, 0x2\n\ - adds r1, r4, 0\n\ - bl ListMenuGetScrollAndRow\n\ - ldr r0, _0815B328 @ =gMain\n\ - ldrh r1, [r0, 0x2E]\n\ - movs r0, 0x4\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0815B30A\n\ - subs r0, r4, 0x6\n\ - ldr r1, [r0]\n\ - ldr r0, _0815B32C @ =UseFameCheckerFromMenu\n\ - cmp r1, r0\n\ - bne _0815B330\n\ - _0815B30A:\n\ - movs r0, 0x2\n\ - negs r0, r0\n\ - cmp r5, r0\n\ - beq _0815B330\n\ - adds r0, 0x1\n\ - cmp r5, r0\n\ - bne _0815B33E\n\ - b _0815B37A\n\ - .align 2, 0\n\ - _0815B31C: .4byte gTasks+0x8\n\ - _0815B320: .4byte gPaletteFade\n\ - _0815B324: .4byte gTeachyTV_StaticResources+6\n\ - _0815B328: .4byte gMain\n\ - _0815B32C: .4byte UseFameCheckerFromMenu\n\ - _0815B330:\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - adds r0, r7, 0\n\ - bl TeachyTvQuitBeginFade\n\ - b _0815B37A\n\ - _0815B33E:\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - ldr r2, _0815B380 @ =gTeachyTV_StaticResources\n\ - movs r4, 0\n\ - strb r5, [r2, 0x5]\n\ - ldrb r0, [r6]\n\ - adds r1, r2, 0x6\n\ - adds r2, 0x8\n\ - bl DestroyListMenu\n\ - bl TeachyTvClearWindowRegs\n\ - movs r0, 0x1\n\ - bl ClearWindowTilemap\n\ - movs r0, 0\n\ - bl schedule_bg_copy_tilemap_to_vram\n\ - bl TeachyTvRemoveScrollIndicatorArrowPair\n\ - strh r4, [r6, 0x6]\n\ - strh r4, [r6, 0x4]\n\ - ldr r1, _0815B384 @ =gTasks\n\ - lsls r0, r7, 2\n\ - adds r0, r7\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - ldr r1, _0815B388 @ =TeachyTvRenderMsgAndSwitchClusterFuncs\n\ - str r1, [r0]\n\ - _0815B37A:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ - _0815B380: .4byte gTeachyTV_StaticResources\n\ - _0815B384: .4byte gTasks\n\ - _0815B388: .4byte TeachyTvRenderMsgAndSwitchClusterFuncs\n\ - "); -} -#endif - void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId) { s16 *data = gTasks[taskId].data; -- cgit v1.2.3 From dcbeca2beb9303e6fd18b77cd8d133ea86686ea1 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 06:00:06 +0800 Subject: fix a type --- src/teachy_tv.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 9a0d61fa0..62d5dc4f6 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -1578,7 +1578,7 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile) { u32 pal; - u32 i; + u16 i; int firstEntry; int temp; @@ -1595,7 +1595,7 @@ u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTi { while ( 1 ) { - i = ((i + 1) << 0x10) >> 0x10; + ++i; if ( i > 0xF ) break; temp = palIndexArrayBuf[i]; @@ -1609,7 +1609,7 @@ u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTi } } } - return (u16)(0xF - i); + return (0xF - i); } #ifdef NONMATCHING -- cgit v1.2.3 From cce7cee9bd710f59e4078dc1e088b5e645514049 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 07:20:37 +0800 Subject: all fixed --- include/teachy_tv.h | 4 +-- src/teachy_tv.c | 96 +++++++++++++++++++++++++---------------------------- 2 files changed, 47 insertions(+), 53 deletions(-) diff --git a/include/teachy_tv.h b/include/teachy_tv.h index 29ef726c9..6f3a25266 100644 --- a/include/teachy_tv.h +++ b/include/teachy_tv.h @@ -2,7 +2,7 @@ #define GUARD_TEACHY_TV_H void sub_815ABC4(u8 mode, void (*cb)()); -void sub_815ABFC(); -void sub_815AC20(); +void sub_815ABFC(void); +void sub_815AC20(void); #endif //GUARD_TEACHY_TV_H diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 62d5dc4f6..632cd5d4f 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -76,41 +76,41 @@ extern const struct SpriteTemplate * const gUnknown_83A0010; extern const u8 gUnknown_84795C8; extern const struct MapData Route1_Layout; -extern void VblankHblankHandlerSetZero(); +extern void VblankHblankHandlerSetZero(void); extern void sub_812B1E0(u16); extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); -extern void sub_8055DC4(); +extern void sub_8055DC4(void); extern bool16 sub_80BF518(u8 textPrinterId); extern void _call_via_r1(s32 arg, void *func); extern void sub_810B108(u8); -extern void sub_8159F40(); - -void TeachyTvCallback(); -void TeachyTvMainCallback(); -void TeachyTvVblankHandler(); -void TeachyTvCreateAndRenderRbox(); -void TeachyTvInitIo(); -u8 TeachyTvSetupObjEventAndOam(); +extern void sub_8159F40(void); + +void TeachyTvCallback(void); +void TeachyTvMainCallback(void); +void TeachyTvVblankHandler(void); +void TeachyTvCreateAndRenderRbox(void); +void TeachyTvInitIo(void); +u8 TeachyTvSetupObjEventAndOam(void); void TeachyTvSetupPostBattleWindowAndObj(u8); -u8 TeachyTvSetupWindow(); -void TeachyTvSetupScrollIndicatorArrowPair(); -void TeachyTvSetWindowRegs(); -void TeachyTvSetupBg(); -void TeachyTvLoadGraphic(); +u8 TeachyTvSetupWindow(void); +void TeachyTvSetupScrollIndicatorArrowPair(void); +void TeachyTvSetWindowRegs(void); +void TeachyTvSetupBg(void); +void TeachyTvLoadGraphic(void); void TeachyTvPostBattleFadeControl(u8); void TeachyTvOptionListController(u8); void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); void TeachyTvQuitFadeControlAndTaskDel(u8 taskId); void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId); -void TeachyTvClearBg1EndGraphicText(); +void TeachyTvClearBg1EndGraphicText(void); void TeachyTvBackToOptionList(u8 taskId); -void TeachyTvSetupBagItemsByOptionChosen(); +void TeachyTvSetupBagItemsByOptionChosen(void); void TeachyTvPrepBattle(u8 taskId); void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); void TeachyTvLoadBg3Map(void *); u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y); void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite); -void TeachyTvRestorePlayerPartyCallback(); +void TeachyTvRestorePlayerPartyCallback(void); void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId); void TeachyTvLoadMapTilesetToBuffer(struct Tileset *ts, u8 *dstBuffer, u16 size); void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1, u8 *palIndexArray, u16 mapEntry, u16 offset); @@ -119,7 +119,7 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile); void TeachyTvLoadMapPalette(const struct MapData *const mStruct, u8 *palIndexArray); -void TeachyTvCallback() +void TeachyTvCallback(void) { RunTasks(); AnimateSprites(); @@ -128,7 +128,7 @@ void TeachyTvCallback() UpdatePaletteFade(); } -void TeachyTvVblankHandler() +void TeachyTvVblankHandler(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -152,7 +152,7 @@ void sub_815ABC4(u8 mode, void (*cb)()) SetMainCallback2(TeachyTvMainCallback); } -void sub_815ABFC() +void sub_815ABFC(void) { if (gTeachyTV_StaticResources.mode == 1) sub_815ABC4(1, gTeachyTV_StaticResources.callback); @@ -160,26 +160,22 @@ void sub_815ABFC() sub_815ABC4(2, gTeachyTV_StaticResources.callback); } -void sub_815AC20() +void sub_815AC20(void) { gTeachyTV_StaticResources.mode = 1; } -void TeachyTvMainCallback() +void TeachyTvMainCallback(void) { - int state; - int taskId; + u8 taskId; struct Task *taskAddr; - struct TeachyTvBuf **memBuf; - state = gMain.state; - switch (state) + switch (gMain.state) { case 0: - memBuf = &gUnknown_203F450; - (*memBuf) = (struct TeachyTvBuf *)AllocZeroed(0x4008); - gUnknown_203F450->state = (u32)state; - gUnknown_203F450->var_4006 = state; + gUnknown_203F450 = AllocZeroed(sizeof(struct TeachyTvBuf)); + gUnknown_203F450->state = 0; + gUnknown_203F450->var_4006 = 0; gUnknown_203F450->var_4007 = 0xFF; VblankHblankHandlerSetZero(); clear_scheduled_bg_copies_to_vram(); @@ -193,7 +189,7 @@ void TeachyTvMainCallback() ++gMain.state; break; case 1: - if ( free_temp_tile_data_buffers_if_possible() == 1 ) + if ( free_temp_tile_data_buffers_if_possible() == TRUE ) return; TeachyTvCreateAndRenderRbox(); TeachyTvInitIo(); @@ -225,7 +221,7 @@ void TeachyTvMainCallback() } } -void TeachyTvSetupBg() +void TeachyTvSetupBg(void) { InitBgReg(); ResetBgsAndClearDma3BusyFlags(0); @@ -245,7 +241,7 @@ void TeachyTvSetupBg() SetGpuReg(REG_OFFSET_BLDCNT, 0); } -void TeachyTvLoadGraphic() +void TeachyTvLoadGraphic(void) { u16 src; src = 0; @@ -259,7 +255,7 @@ void TeachyTvLoadGraphic() TeachyTvLoadBg3Map(gUnknown_203F450->buffer3); } -void TeachyTvCreateAndRenderRbox() +void TeachyTvCreateAndRenderRbox(void) { InitWindows(&gUnknown_84792F0); DeactivateAllTextPrinters(); @@ -269,9 +265,8 @@ void TeachyTvCreateAndRenderRbox() CopyWindowToVram(0, 2); } -u8 TeachyTvSetupWindow() +u8 TeachyTvSetupWindow(void) { - int hasItem; gMultiuseListMenuTemplate = gUnknown_8479368; gMultiuseListMenuTemplate.windowId = 1; gMultiuseListMenuTemplate.moveCursorFunc = TeachyTvAudioByInput; @@ -288,9 +283,8 @@ u8 TeachyTvSetupWindow() gTeachyTV_StaticResources.selectedRow); } -void TeachyTvSetupScrollIndicatorArrowPair() +void TeachyTvSetupScrollIndicatorArrowPair(void) { - int hasItem; if (!CheckBagHasItem(ITEM_TM_CASE, 1)) { struct TeachyTvBuf * temp = gUnknown_203F450; @@ -306,7 +300,7 @@ void TeachyTvSetupScrollIndicatorArrowPair() } } -void TeachyTvRemoveScrollIndicatorArrowPair() +void TeachyTvRemoveScrollIndicatorArrowPair(void) { if ( gUnknown_203F450->var_4007 != 0xFF ) { @@ -321,7 +315,7 @@ void TeachyTvAudioByInput(s32 notUsed, bool8 play, struct ListMenu *notUsedAlt) PlaySE(SE_SELECT); } -void TeachyTvInitIo() +void TeachyTvInitIo(void) { SetGpuReg(REG_OFFSET_WININ, 0x3F); SetGpuReg(REG_OFFSET_WINOUT, 0x1F); @@ -329,7 +323,7 @@ void TeachyTvInitIo() SetGpuReg(REG_OFFSET_BLDY, 0x5); } -u8 TeachyTvSetupObjEventAndOam() +u8 TeachyTvSetupObjEventAndOam(void) { u8 temp = AddPseudoEventObject(90, SpriteCallbackDummy, 0, 0, 8); gSprites[temp].oam.priority = 2; @@ -345,25 +339,25 @@ void TeachyTvSetSpriteCoordsAndSwitchFrame(u8 objId, u16 x, u16 y, u8 frame) StartSpriteAnim(&gSprites[objId], frame); } -void TeachyTvSetWindowRegs() +void TeachyTvSetWindowRegs(void) { SetGpuReg(REG_OFFSET_WIN0V, 0xC64); SetGpuReg(REG_OFFSET_WIN0H, 0x1CD4); } -void TeachyTvClearWindowRegs() +void TeachyTvClearWindowRegs(void) { SetGpuReg(REG_OFFSET_WIN0V, 0x0); SetGpuReg(REG_OFFSET_WIN0H, 0x0); } -void TeachyTvBg2AnimController() +void TeachyTvBg2AnimController(void) { u16 *tilemapBuffer; u8 i, offset2; u32 j, offset; - tilemapBuffer = (u16 *)GetBgTilemapBuffer(2); + tilemapBuffer = GetBgTilemapBuffer(2); i = 1; do { @@ -419,7 +413,7 @@ void TeachyTvInitTextPrinter(const char *text) AddTextPrinterParameterized2(0, 4, (const char *)text, spd, 0, 1, 0xC, 3); } -void TeachyTvFree() +void TeachyTvFree(void) { Free(gUnknown_203F450); gUnknown_203F450 = NULL; @@ -712,7 +706,7 @@ void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) } } -void TeachyTvClearBg1EndGraphicText() +void TeachyTvClearBg1EndGraphicText(void) { FillBgTilemapBufferRect_Palette0(1, 0, 0x14, 0xA, 8, 2); schedule_bg_copy_tilemap_to_vram(1); @@ -764,7 +758,7 @@ void TeachyTvChainTaskBattleOrFadeByOptionChosen(u8 taskId) } } -void TeachyTvSetupBagItemsByOptionChosen() +void TeachyTvSetupBagItemsByOptionChosen(void) { if ( gTeachyTV_StaticResources.optionChosen == 4 ) sub_810B108(10); @@ -911,7 +905,7 @@ void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId) } } -void TeachyTvRestorePlayerPartyCallback() +void TeachyTvRestorePlayerPartyCallback(void) { LoadPlayerParty(); if ( gUnknown_2023E8A == 3 ) -- cgit v1.2.3 From b44bd642b889de26f944dbe8bc8c8acdf0adf273 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 08:22:56 +0800 Subject: more fix --- asm/item_menu.s | 8 +- asm/party_menu.s | 4 +- include/teachy_tv.h | 2 +- src/teachy_tv.c | 205 +++++++++++++++++++++++----------------------------- src/tm_case.c | 2 +- 5 files changed, 98 insertions(+), 123 deletions(-) diff --git a/asm/item_menu.s b/asm/item_menu.s index edb342d6b..b3169cdc3 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -6342,11 +6342,11 @@ sub_810B108: @ 810B108 beq _0810B160 cmp r4, 0x8 beq _0810B16C - ldr r2, _0810B15C @ =sub_815ABFC + ldr r2, _0810B15C @ =CB2_ReturnToTeachyTV adds r0, r4, 0 b _0810B170 .align 2, 0 -_0810B15C: .4byte sub_815ABFC +_0810B15C: .4byte CB2_ReturnToTeachyTV _0810B160: ldr r2, _0810B168 @ =sub_8030AEC movs r0, 0x7 @@ -6386,7 +6386,7 @@ _0810B19C: bl sub_815AC20 ldr r0, _0810B1C4 @ =gUnknown_203AD10 ldr r1, [r0] - ldr r0, _0810B1C8 @ =sub_815ABFC + ldr r0, _0810B1C8 @ =CB2_ReturnToTeachyTV str r0, [r1] ldr r1, _0810B1CC @ =gTasks lsls r0, r4, 2 @@ -6402,7 +6402,7 @@ _0810B1BC: bx r1 .align 2, 0 _0810B1C4: .4byte gUnknown_203AD10 -_0810B1C8: .4byte sub_815ABFC +_0810B1C8: .4byte CB2_ReturnToTeachyTV _0810B1CC: .4byte gTasks _0810B1D0: .4byte sub_810B070 thumb_func_end sub_810B180 diff --git a/asm/party_menu.s b/asm/party_menu.s index 89feaa035..2ce165ef2 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -4879,12 +4879,12 @@ sub_8120FB0: @ 8120FB0 bl FreeRestoreBattleData bl LoadPlayerParty bl sub_815AC20 - ldr r0, _08120FC8 @ =sub_815ABFC + ldr r0, _08120FC8 @ =CB2_ReturnToTeachyTV bl SetMainCallback2 pop {r0} bx r0 .align 2, 0 -_08120FC8: .4byte sub_815ABFC +_08120FC8: .4byte CB2_ReturnToTeachyTV thumb_func_end sub_8120FB0 thumb_func_start sub_8120FCC diff --git a/include/teachy_tv.h b/include/teachy_tv.h index 6f3a25266..f3b9eb565 100644 --- a/include/teachy_tv.h +++ b/include/teachy_tv.h @@ -2,7 +2,7 @@ #define GUARD_TEACHY_TV_H void sub_815ABC4(u8 mode, void (*cb)()); -void sub_815ABFC(void); +void CB2_ReturnToTeachyTV(void); void sub_815AC20(void); #endif //GUARD_TEACHY_TV_H diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 632cd5d4f..ddc7b6d1a 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -53,15 +53,15 @@ struct TeachyTvBuf u8 var_4007; }; -extern struct TeachyTvCtrlBlk gTeachyTV_StaticResources; +EWRAM_DATA struct TeachyTvCtrlBlk gTeachyTV_StaticResources = {0}; extern struct TeachyTvBuf * gUnknown_203F450; extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; -extern const char gUnknown_841B83D; +extern const u8 gUnknown_841B83D; extern const struct BgTemplate gUnknown_84792E0; extern const struct SpritePalette gUnknown_83A5348; extern void (**gUnknown_8479548)(u8); -extern const char * const gUnknown_8479560; -extern const char * const gUnknown_8479578; +extern const u8 * const gUnknown_8479560; +extern const u8 * const gUnknown_8479578; extern const u8 gUnknown_8E86240; extern const u8 gUnknown_8E86BE8; extern const u8 gUnknown_8E86D6C; @@ -76,12 +76,9 @@ extern const struct SpriteTemplate * const gUnknown_83A0010; extern const u8 gUnknown_84795C8; extern const struct MapData Route1_Layout; -extern void VblankHblankHandlerSetZero(void); extern void sub_812B1E0(u16); -extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); extern void sub_8055DC4(void); extern bool16 sub_80BF518(u8 textPrinterId); -extern void _call_via_r1(s32 arg, void *func); extern void sub_810B108(u8); extern void sub_8159F40(void); @@ -152,7 +149,7 @@ void sub_815ABC4(u8 mode, void (*cb)()) SetMainCallback2(TeachyTvMainCallback); } -void sub_815ABFC(void) +void CB2_ReturnToTeachyTV(void) { if (gTeachyTV_StaticResources.mode == 1) sub_815ABC4(1, gTeachyTV_StaticResources.callback); @@ -189,11 +186,11 @@ void TeachyTvMainCallback(void) ++gMain.state; break; case 1: - if ( free_temp_tile_data_buffers_if_possible() == TRUE ) + if (free_temp_tile_data_buffers_if_possible() == TRUE) return; TeachyTvCreateAndRenderRbox(); TeachyTvInitIo(); - if ( gTeachyTV_StaticResources.mode == 2 ) + if (gTeachyTV_StaticResources.mode == 2) { taskId = CreateTask(TeachyTvPostBattleFadeControl, 0); gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); @@ -302,7 +299,7 @@ void TeachyTvSetupScrollIndicatorArrowPair(void) void TeachyTvRemoveScrollIndicatorArrowPair(void) { - if ( gUnknown_203F450->var_4007 != 0xFF ) + if (gUnknown_203F450->var_4007 != 0xFF) { RemoveScrollIndicatorArrowPair(gUnknown_203F450->var_4007); gUnknown_203F450->var_4007 = 0xFF; @@ -311,7 +308,7 @@ void TeachyTvRemoveScrollIndicatorArrowPair(void) void TeachyTvAudioByInput(s32 notUsed, bool8 play, struct ListMenu *notUsedAlt) { - if ( play != TRUE ) + if (play != TRUE) PlaySE(SE_SELECT); } @@ -353,26 +350,16 @@ void TeachyTvClearWindowRegs(void) void TeachyTvBg2AnimController(void) { - u16 *tilemapBuffer; - u8 i, offset2; - u32 j, offset; - - tilemapBuffer = GetBgTilemapBuffer(2); - i = 1; - do + u16 * tilemapBuffer = GetBgTilemapBuffer(2); + u8 i; + u8 j; + for (i = 1; i < 13; i++) { - offset2 = 2; - offset = 0x20 * i; - j = i + 1; - do + for (j = 2; j < 28; j++) { - tilemapBuffer[offset + offset2] = ((Random() & 3) << 10) + 0x301F; - offset2 = (offset2 + 1); + tilemapBuffer[32 * i + j] = ((Random() & 3) << 10) + 0x301F; } - while ( offset2 <= 0x1B ); - i = j; } - while ( (u8)j <= 0xC ); schedule_bg_copy_tilemap_to_vram(2); } @@ -386,9 +373,9 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) ClearWindowTilemap(1); TeachyTvClearWindowRegs(); op = gTeachyTV_StaticResources.optionChosen; - if ( op >= 0 ) + if (op >= 0) { - if ( op <= 3 ) + if (op <= 3) { TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)data)[2], 0x78, 0x38, 0); ChangeBgX(3, 0x3000, 1); @@ -396,7 +383,7 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) gUnknown_203F450->var_4004 += 3; gUnknown_203F450->var_4005 -= 3; } - else if ( op <= 5 ) + else if (op <= 5) TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)data)[2], 0x78, 0x38, 0); } @@ -428,9 +415,9 @@ void TeachyTvQuitBeginFade(u8 taskId) void TeachyTvQuitFadeControlAndTaskDel(u8 taskId) { - if ( !(gPaletteFade.active) ) + if (!(gPaletteFade.active)) { - if ( gUnknown_203F450->state ) + if (gUnknown_203F450->state) { SetMainCallback2(*(void (**)())gUnknown_203F450); } @@ -490,7 +477,7 @@ void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId) { s16 *data = gTasks[taskId].data; TeachyTvBg2AnimController(); - if ( ++data[2] > 63 ) + if (++data[2] > 63) { CopyToBgTilemapBufferRect_ChangePalette(2, gUnknown_203F450->buffer4, 0, 0, 0x20, 0x20, 0x11); TeachyTvSetSpriteCoordsAndSwitchFrame(((u8*)data)[2], 8, 0x38, 7); @@ -504,7 +491,7 @@ void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId) void TeachyTvClusFuncClearBg2TeachyTvGraphic(u8 taskId) { s16 *data = gTasks[taskId].data; - if ( ++data[2] == 134 ) + if (++data[2] == 134) { FillBgTilemapBufferRect_Palette0(2, 0, 2, 1, 0x1A, 0xC); schedule_bg_copy_tilemap_to_vram(2); @@ -520,10 +507,10 @@ void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId) data = gTasks[taskId].data; spriteAddr = &gSprites[data[1]]; - if ( data[2] != 35 ) + if (data[2] != 35) ++data[2]; else { - if ( spriteAddr->pos2.x == 0x78 ) + if (spriteAddr->pos2.x == 0x78) { StartSpriteAnim(&gSprites[data[1]], 0); TeachyTvInitTextPrinter(&gUnknown_841B83D); @@ -538,7 +525,7 @@ void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId) void TeachyTvClusFuncIdleIfTextPrinterIsActive(u8 taskId) { s16* data = (u16 *)gTasks[taskId].data; - if ( !sub_80BF518(0) ) + if (!sub_80BF518(0)) ++data[3]; } @@ -546,7 +533,7 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) { s16 *data; data = gTasks[taskId].data; - if ( gMain.newKeys & 2 ) + if (JOY_NEW(B_BUTTON)) { u8 *offset = &(gUnknown_203F450->var_4006); u32 zero = 0; @@ -570,15 +557,15 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) { s16 *data = (u16 *)gTasks[taskId].data; - const char * const* texts = &gUnknown_8479560; + const u8 * const* texts = &gUnknown_8479560; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; } void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) { - s16 *data = (u16 *)gTasks[taskId].data; - const char * const* texts = &gUnknown_8479578; + s16 *data = gTasks[taskId].data; + const u8 * const* texts = &gUnknown_8479578; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; } @@ -586,7 +573,7 @@ void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) void TeachyTvClusFuncIdleIfTextPrinterIsActive2(u8 taskId) { s16* data = (u16 *)gTasks[taskId].data; - if ( !sub_80BF518(0) ) + if (!sub_80BF518(0)) ++data[3]; } @@ -604,8 +591,7 @@ void TeachyTvClusFuncEraseTextWindowIfKeyPressed(u8 taskId) void TeachyTvClusFuncStartAnimNpcWalkIntoGrass(u8 taskId) { - s16 *data; - data = (u16 *)gTasks[taskId].data; + s16 *data = gTasks[taskId].data; StartSpriteAnim(&gSprites[(s16)data[1]], 5); data[2] = 0; data[4] = 0; @@ -621,12 +607,12 @@ void TeachyTvClusFuncDudeMoveUp(u8 taskId) data = gTasks[taskId].data; obj = &gSprites[data[1]]; ChangeBgY(3, 0x100, 2); - if ( !( ++data[2] & 0xF ) ) + if (!(++data[2] & 0xF)) { --gUnknown_203F450->var_4005; TeachyTvGrassAnimationMain(taskId, obj->pos2.x, obj->pos2.y, 0, 0); } - if ( data[2] == 48 ) + if (data[2] == 48) { data[2] = 0; data[4] = -1; @@ -641,14 +627,14 @@ void TeachyTvClusFuncDudeMoveRight(u8 taskId) s16 *data; struct Sprite *obj; - data = (u16 *)gTasks[taskId].data; - obj = &gSprites[(s16)data[1]]; + data = gTasks[taskId].data; + obj = &gSprites[data[1]]; ChangeBgX(3, 0x100, 1); - if ( !(++data[2] & 0xF) ) + if (!(++data[2] & 0xF)) ++gUnknown_203F450->var_4004; - if ( !((data[2] + 8) & 0xF) ) + if (!((data[2] + 8) & 0xF)) TeachyTvGrassAnimationMain(taskId, obj->pos2.x + 8, obj->pos2.y, 0, 0); - if ( data[2] == 0x30 ) + if (data[2] == 0x30) { data[2] = 0; data[4] = 0; @@ -660,10 +646,8 @@ void TeachyTvClusFuncDudeMoveRight(u8 taskId) void TeachyTvClusFuncDudeTurnLeft(u8 taskId) { - s16 *data; struct Sprite *v3; - - data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; v3 = &gSprites[data[1]]; StartSpriteAnim(v3, 6); ++data[3]; @@ -680,9 +664,9 @@ void TeachyTvClusFuncDudeMoveLeft(u8 taskId) data = gTasks[taskId].data; v2 = &gSprites[data[1]]; - if ( !(v2->pos2.x & 0xF) ) + if (!(v2->pos2.x & 0xF)) TeachyTvGrassAnimationMain(taskId, v2->pos2.x - 8, v2->pos2.y, 0, 0); - if ( v2->pos2.x == 8 ) + if (v2->pos2.x == 8) ++data[3]; else --v2->pos2.x; @@ -693,12 +677,12 @@ void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) s16 *data; data = gTasks[taskId].data; - if ( !data[2] ) + if (!data[2]) { CopyToBgTilemapBufferRect_ChangePalette(1, &gUnknown_8479590, 0x14, 0xA, 8, 2, 0x11); schedule_bg_copy_tilemap_to_vram(1); } - if ( ++data[2] > 126 ) + if (++data[2] > 126) { TeachyTvClearBg1EndGraphicText(); data[2] = 0; @@ -717,14 +701,14 @@ void TeachyTvBackToOptionList(u8 taskId) s16 *data; data = gTasks[taskId].data; - if ( !data[2] ) + if (data[2] == 0) PlayNewMapMusic(BGM_FRLG_TEACHY_TV); TeachyTvBg2AnimController(); - if ( ++data[2] > 63 ) + if (++data[2] > 63) { data[2] = 0; data[3] = 0; - *data = TeachyTvSetupWindow(); + data[0] = TeachyTvSetupWindow(); gTasks[taskId].func = TeachyTvOptionListController; PutWindowTilemap(0); TeachyTvSetupScrollIndicatorArrowPair(); @@ -743,14 +727,14 @@ void TeachyTvBackToOptionList(u8 taskId) void TeachyTvChainTaskBattleOrFadeByOptionChosen(u8 taskId) { int op = gTeachyTV_StaticResources.optionChosen; - if ( op >= 0 ) + if (op >= 0) { - if ( op <= 3 ) + if (op <= 3) { TeachyTvPrepBattle(taskId); } - else if ( op <= 5 ) + else if (op <= 5) { *((void(**)())gUnknown_203F450) = TeachyTvSetupBagItemsByOptionChosen; TeachyTvQuitBeginFade(taskId); @@ -760,7 +744,7 @@ void TeachyTvChainTaskBattleOrFadeByOptionChosen(u8 taskId) void TeachyTvSetupBagItemsByOptionChosen(void) { - if ( gTeachyTV_StaticResources.optionChosen == 4 ) + if (gTeachyTV_StaticResources.optionChosen == 4) sub_810B108(10); else sub_810B108(9); @@ -769,7 +753,7 @@ void TeachyTvSetupBagItemsByOptionChosen(void) void TeachyTvPostBattleFadeControl(u8 taskId) { s16 *data = gTasks[taskId].data; - if ( !(gPaletteFade.active) ) + if (!(gPaletteFade.active)) { const u8* funcIdx = &gUnknown_8479390; int arg = funcIdx[gTeachyTV_StaticResources.optionChosen]; @@ -787,12 +771,12 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m const struct SpriteTemplate *const *objTemAddr; subprio = subpriority; - if ( gUnknown_203F450->var_4006 != 1 ) + if (gUnknown_203F450->var_4006 != 1) { res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj( x - 0x10, y); - if ( res << 24 ) + if (res << 24) { objTemAddr = &gUnknown_83A0010; objId = CreateSprite(*(objTemAddr+4), 0, 0, subprio); @@ -801,7 +785,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m obj->pos2.y = y + 8; obj->callback = TeachyTvGrassAnimationObjCallback; obj->data[0] = taskId; - if ( mode == 1 ) + if (mode == 1) { SeekSpriteAnim(obj, 4); obj->oam.priority = 2; @@ -853,12 +837,11 @@ u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y) const u8 * arr; struct TeachyTvBuf *ptr; int high, low; - if ( (x < 0) || (y < 0) ) + if ((x < 0) || (y < 0)) return 0; arr = &gUnknown_84795C8; - ptr = gUnknown_203F450; - high = ((y >> 4) + ptr->var_4005) << 4; - low = ((x >> 4) + ptr->var_4004); + high = ((y >> 4) + gUnknown_203F450->var_4005) << 4; + low = ((x >> 4) + gUnknown_203F450->var_4004); return arr[high+low]; } @@ -874,7 +857,7 @@ void TeachyTvPrepBattle(u8 taskId) SavePlayerParty(); sub_8159F40(); PlayMapChosenOrBattleBGM(MUS_DUMMY); - if ( !gTeachyTV_StaticResources.optionChosen ) + if (!gTeachyTV_StaticResources.optionChosen) data[6] = 9; else data[6] = 8; @@ -884,19 +867,15 @@ void TeachyTvPrepBattle(u8 taskId) void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId) { - s16 *data; - int temp; - - data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; switch (data[7]) { case 0: - sub_80D08B8(*((u8*)data + 12)); + sub_80D08B8(data[6]); ++data[7]; break; case 1: - temp = sub_80D08F8(); - if ( temp << 24 ) + if (sub_80D08F8() << 24) { SetMainCallback2(sub_800FD9C); DestroyTask(taskId); @@ -908,11 +887,11 @@ void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId) void TeachyTvRestorePlayerPartyCallback(void) { LoadPlayerParty(); - if ( gUnknown_2023E8A == 3 ) + if (gUnknown_2023E8A == 3) sub_815AC20(); else PlayNewMapMusic(BGM_FRLG_FOLLOW_ME); - sub_815ABFC(); + CB2_ReturnToTeachyTV(); } #ifdef NONMATCHING @@ -961,20 +940,20 @@ void TeachyTvLoadBg3Map(void *buffer) mapEntry = md->map[v3 + 24 * v19 + 8] & 0x3FF; v7 = 0; v8 = v3 + 1; - if ( v4 + v3 <= 0 ) + if (v4 + v3 <= 0) { LABEL_9: - if ( mapArray[v7] ) + if (mapArray[v7]) goto LABEL_11; } else { - for ( i = *mapArray; i; i = mapArray[v7] ) + for (i = *mapArray; i; i = mapArray[v7]) { - if ( i == mapEntry ) + if (i == mapEntry) goto LABEL_9; v7 = (u16)(v7 + 1); - if ( v7 >= v4 + v3 ) + if (v7 >= v4 + v3) goto LABEL_9; } } @@ -989,17 +968,17 @@ LABEL_11: v7); v3 = v8; } - while ( (u16)v8 <= 0xF ); + while ((u16)v8 <= 0xF); v2 = v18; } - while ( (u16)v18 <= 8 ); + while ((u16)v18 <= 8); MapTileBlockBuf = (char *)Alloc(v17 << 7); FourMapTileBlocksTempBuf = Alloc(0x80); - for ( j = 0; j < v17; j = (u16)j + 1 ) + for (j = 0; j < v17; j = (u16)j + 1) { memset(FourMapTileBlocksTempBuf, 0, 0x80); v13 = &mapArray[j]; - if ( *v13 <= 0x27F ) + if (*v13 <= 0x27F) TeachyTvComputeMapTilesFromTilesetAndMetaTiles( (u16 *)(16 * *v13 + (u16*)(md->primaryTileset->metatiles)), (u8 *)FourMapTileBlocksTempBuf, @@ -1249,9 +1228,9 @@ void TeachyTvLoadBg3Map(void *buffer) void TeachyTvLoadMapTilesetToBuffer(struct Tileset *ts, u8 *dstBuffer, u16 size) { - if ( ts ) + if (ts) { - if ( !ts->isCompressed ) + if (!ts->isCompressed) CpuFastSet(ts->tiles, dstBuffer, 8 * size); else LZDecompressWram(ts->tiles, dstBuffer); @@ -1265,7 +1244,7 @@ void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1 u16 *metaTileEntryAddr; int temp = mapEntry; - if ( temp <= 0x27F ) + if (temp <= 0x27F) { ts = mStruct->primaryTileset; } @@ -1374,13 +1353,11 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * buffer = (u8 *)AllocZeroed(0x20); src = ((u32)AllocZeroed(0x20)); CpuFastSet(tileset, buffer, 8); - if ( metaTile & 1 ) + if (metaTile & 1) { - i = 0; - do + for (i=0; i<8; ++i) { - j = 0; - do + for (j=0; j<4; ++j) { u32 offset1 = i << 2; u32 offset2 = j - 3; @@ -1389,12 +1366,10 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * u32 dstOffset = offset1 + j; *(u8*)(src + dstOffset) = ((value & 0xF) << 4) + ((value & 0xF0) >> 4); } - while ( ++(u8)j <= 3 ); } - while ( ++(u8)i <= 7 ); CpuFastSet((u8*)src, buffer, 8); } - if ( metaTile & 2 ) + if (metaTile & 2) { j = 0; do @@ -1402,19 +1377,19 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * memcpy(&((u8*)src)[4 * j], &buffer[4 * (7 - j)], 4); j = (u8)(j + 1); } - while ( j <= 7 ); + while (j <= 7); CpuFastSet((u8*)src, buffer, 8); } j = 0; do { - if ( buffer[j] & 0xF0 ) + if (buffer[j] & 0xF0) blockBuf[j] = (blockBuf[j] & 0xF) + (buffer[j] & 0xF0); - if ( buffer[j] & 0xF ) + if (buffer[j] & 0xF) blockBuf[j] = (blockBuf[j] & 0xF0) + (buffer[j] & 0xF); j = (u8)(j + 1); } - while ( j <= 0x1F ); + while (j <= 0x1F); Free((u8*)src); Free(buffer); } @@ -1576,26 +1551,26 @@ u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTi int firstEntry; int temp; - pal = (u32)(metaTile << 16) >> 28; + pal = metaTile >> 12; i = 0; firstEntry = *palIndexArrayBuf; - if ( firstEntry != pal ) + if (firstEntry != pal) { - if ( firstEntry == 0xFF ) + if (firstEntry == 0xFF) { *palIndexArrayBuf = pal; } else { - while ( 1 ) + while (1) { ++i; - if ( i > 0xF ) + if (i > 0xF) break; temp = palIndexArrayBuf[i]; - if ( temp == pal ) + if (temp == pal) break; - if ( temp == 0xFF ) + if (temp == 0xFF) { palIndexArrayBuf[i] = pal; break; diff --git a/src/tm_case.c b/src/tm_case.c index fdcc66a7e..a436269f3 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -1147,7 +1147,7 @@ void PokeDude_InitTMCase(void) AddBagItem(ITEM_TM03, 1); AddBagItem(ITEM_TM09, 1); AddBagItem(ITEM_TM35, 1); - InitTMCase(4, sub_815ABFC, 0); + InitTMCase(4, CB2_ReturnToTeachyTV, 0); } static void Task_TMCaseDude1(u8 taskId) -- cgit v1.2.3 From a8f6aeb05dfee07903c3ab48403121e07c8189e4 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 08:30:52 +0800 Subject: more fixes --- src/teachy_tv.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index ddc7b6d1a..fa5962e8e 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -502,10 +502,8 @@ void TeachyTvClusFuncClearBg2TeachyTvGraphic(u8 taskId) void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId) { - s16 *data; struct Sprite * spriteAddr; - - data = gTasks[taskId].data; + s16 * data = gTasks[taskId].data; spriteAddr = &gSprites[data[1]]; if (data[2] != 35) ++data[2]; @@ -531,8 +529,7 @@ void TeachyTvClusFuncIdleIfTextPrinterIsActive(u8 taskId) void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) { - s16 *data; - data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (JOY_NEW(B_BUTTON)) { u8 *offset = &(gUnknown_203F450->var_4006); @@ -556,7 +553,7 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) { - s16 *data = (u16 *)gTasks[taskId].data; + s16 *data = gTasks[taskId].data; const u8 * const* texts = &gUnknown_8479560; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; -- cgit v1.2.3 From f32fdd0bff856e82519b98075d96ac3c500e5a54 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 08:33:58 +0800 Subject: consistency --- src/teachy_tv.c | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index fa5962e8e..d687ff7c8 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -240,8 +240,7 @@ void TeachyTvSetupBg(void) void TeachyTvLoadGraphic(void) { - u16 src; - src = 0; + u16 src = 0; reset_temp_tile_data_buffers(); decompress_and_copy_tile_data_to_vram(1, &gUnknown_8E86240, 0, 0, 0); LZDecompressWram(&gUnknown_8E86BE8, gUnknown_203F450->buffer1); @@ -351,8 +350,7 @@ void TeachyTvClearWindowRegs(void) void TeachyTvBg2AnimController(void) { u16 * tilemapBuffer = GetBgTilemapBuffer(2); - u8 i; - u8 j; + u8 i, j; for (i = 1; i < 13; i++) { for (j = 2; j < 28; j++) @@ -366,7 +364,7 @@ void TeachyTvBg2AnimController(void) void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) { s16 *data = gTasks[taskId].data; - int v1 = (data)[1]; + int v1 = data[1]; struct Sprite *v3 = &gSprites[v1]; int op; @@ -671,9 +669,7 @@ void TeachyTvClusFuncDudeMoveLeft(u8 taskId) void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) { - s16 *data; - - data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (!data[2]) { CopyToBgTilemapBufferRect_ChangePalette(1, &gUnknown_8479590, 0x14, 0xA, 8, 2, 0x11); @@ -695,9 +691,7 @@ void TeachyTvClearBg1EndGraphicText(void) void TeachyTvBackToOptionList(u8 taskId) { - s16 *data; - - data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (data[2] == 0) PlayNewMapMusic(BGM_FRLG_TEACHY_TV); TeachyTvBg2AnimController(); @@ -1239,8 +1233,8 @@ void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1 { struct Tileset *ts; u16 *metaTileEntryAddr; - int temp = mapEntry; + if (temp <= 0x27F) { ts = mStruct->primaryTileset; @@ -1342,12 +1336,10 @@ void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blo #ifdef NONMATCHING void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile) { - u8 *buffer; u32 i; u32 j; vu32 src; - - buffer = (u8 *)AllocZeroed(0x20); + u8* buffer = (u8 *)AllocZeroed(0x20); src = ((u32)AllocZeroed(0x20)); CpuFastSet(tileset, buffer, 8); if (metaTile & 1) @@ -1543,12 +1535,10 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile) { - u32 pal; u16 i; int firstEntry; int temp; - - pal = metaTile >> 12; + u32 pal = metaTile >> 12; i = 0; firstEntry = *palIndexArrayBuf; if (firstEntry != pal) -- cgit v1.2.3 From 1345bffa2226d6174076338ccbab0dbce04cd082 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 08:36:36 +0800 Subject: more consistency --- src/teachy_tv.c | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index d687ff7c8..f1d0b2749 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -289,8 +289,7 @@ void TeachyTvSetupScrollIndicatorArrowPair(void) else { struct TeachyTvBuf *temp; - u8 res; - res = AddScrollIndicatorArrowPair(&gUnknown_8479380, &(gTeachyTV_StaticResources.scrollOffset)); + u8 res = AddScrollIndicatorArrowPair(&gUnknown_8479380, &(gTeachyTV_StaticResources.scrollOffset)); temp = gUnknown_203F450; temp->var_4007 = res; } @@ -500,9 +499,8 @@ void TeachyTvClusFuncClearBg2TeachyTvGraphic(u8 taskId) void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId) { - struct Sprite * spriteAddr; s16 * data = gTasks[taskId].data; - spriteAddr = &gSprites[data[1]]; + struct Sprite * priteAddr = &gSprites[data[1]]; if (data[2] != 35) ++data[2]; else { @@ -619,11 +617,8 @@ void TeachyTvClusFuncDudeMoveUp(u8 taskId) void TeachyTvClusFuncDudeMoveRight(u8 taskId) { - s16 *data; - struct Sprite *obj; - - data = gTasks[taskId].data; - obj = &gSprites[data[1]]; + s16 *data = gTasks[taskId].data; + struct Sprite *obj = &gSprites[data[1]]; ChangeBgX(3, 0x100, 1); if (!(++data[2] & 0xF)) ++gUnknown_203F450->var_4004; @@ -641,9 +636,9 @@ void TeachyTvClusFuncDudeMoveRight(u8 taskId) void TeachyTvClusFuncDudeTurnLeft(u8 taskId) { - struct Sprite *v3; + s16 *data = gTasks[taskId].data; - v3 = &gSprites[data[1]]; + struct Sprite *v3 = &gSprites[data[1]]; StartSpriteAnim(v3, 6); ++data[3]; data[4] = 0; @@ -653,11 +648,8 @@ void TeachyTvClusFuncDudeTurnLeft(u8 taskId) void TeachyTvClusFuncDudeMoveLeft(u8 taskId) { - s16 *data; - struct Sprite *v2; - - data = gTasks[taskId].data; - v2 = &gSprites[data[1]]; + s16 *data = gTasks[taskId].data; + struct Sprite *v2 = &gSprites[data[1]]; if (!(v2->pos2.x & 0xF)) TeachyTvGrassAnimationMain(taskId, v2->pos2.x - 8, v2->pos2.y, 0, 0); -- cgit v1.2.3 From 12191612cd7a050283e37278fac1c02a2ef3776d Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 09:03:39 +0800 Subject: TeachyTvLoadMapPalette and fixes --- include/help_system.h | 1 + include/item_menu.h | 1 + include/menu_helpers.h | 1 + include/overworld.h | 1 + include/unk_8159F40.h | 1 + src/teachy_tv.c | 105 +++++++++++++------------------------------------ 6 files changed, 32 insertions(+), 78 deletions(-) diff --git a/include/help_system.h b/include/help_system.h index 6398d306b..97acec45e 100644 --- a/include/help_system.h +++ b/include/help_system.h @@ -5,6 +5,7 @@ extern bool8 gUnknown_3005ECC; +void sub_812B1E0(u16); void sub_812B484(void); void HelpSystem_SetSomeVariable2(u8); void sub_812B478(void); diff --git a/include/item_menu.h b/include/item_menu.h index efd0066ed..2801a5001 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -25,6 +25,7 @@ extern u16 gSpecialVar_ItemId; void sub_81AAC50(void); void sub_81AAC70(void); void sub_8108CF0(void); +void sub_810B108(u8); void UseFameCheckerFromMenu(void); #endif //GUARD_ITEM_MENU_H diff --git a/include/menu_helpers.h b/include/menu_helpers.h index 892636ba0..f8b57034a 100644 --- a/include/menu_helpers.h +++ b/include/menu_helpers.h @@ -18,6 +18,7 @@ void sub_812225C(u16 *, u16 *, u8, u8); void sub_8122298(u16 *, u16 *, u8, u8, u8); void sub_8121F68(u8 taskId, const struct YesNoFuncTable *data); bool8 sub_81221AC(void); +bool16 sub_80BF518(u8 textPrinterId); bool8 sub_80BF72C(void); bool8 sub_80BF708(void); void VblankHblankHandlerSetZero(void); diff --git a/include/overworld.h b/include/overworld.h index 5c4235b8c..a3fe1161f 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -109,6 +109,7 @@ void Overworld_ResetStateAfterTeleport(void); void Overworld_FadeOutMapMusic(void); void sub_805671C(void); +void sub_8055DC4(void); bool8 sub_8055FC4(void); #endif //GUARD_ROM4_H diff --git a/include/unk_8159F40.h b/include/unk_8159F40.h index f0e85d416..7f6a98c3a 100644 --- a/include/unk_8159F40.h +++ b/include/unk_8159F40.h @@ -3,6 +3,7 @@ #include "global.h" +void sub_8159F40(void); void sub_815A008(struct QuestLog *); void sub_815A1F8(struct QuestLog *, struct MapObjectTemplate *); diff --git a/src/teachy_tv.c b/src/teachy_tv.c index f1d0b2749..28f4fbe8e 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -29,6 +29,9 @@ #include "battle.h" #include "global.fieldmap.h" #include "teachy_tv.h" +#include "help_system.h" +#include "overworld.h" +#include "unk_8159F40.h" struct TeachyTvCtrlBlk { @@ -54,7 +57,7 @@ struct TeachyTvBuf }; EWRAM_DATA struct TeachyTvCtrlBlk gTeachyTV_StaticResources = {0}; -extern struct TeachyTvBuf * gUnknown_203F450; +EWRAM_DATA struct TeachyTvBuf * gUnknown_203F450; extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; extern const u8 gUnknown_841B83D; extern const struct BgTemplate gUnknown_84792E0; @@ -69,19 +72,13 @@ extern const u8 gUnknown_8E86F98; extern const struct ListMenuTemplate gUnknown_8479368; extern const struct ListMenuItem gUnknown_8479340; extern const struct WindowTemplate gUnknown_84792F0; -extern const u8 gUnknown_8479590; -extern const u8 gUnknown_8479390; +extern const u16 gUnknown_8479590[]; +extern const u8 gUnknown_8479390[]; extern const struct SubspriteTable gUnknown_84795B8; extern const struct SpriteTemplate * const gUnknown_83A0010; -extern const u8 gUnknown_84795C8; +extern const u8 gUnknown_84795C8[]; extern const struct MapData Route1_Layout; -extern void sub_812B1E0(u16); -extern void sub_8055DC4(void); -extern bool16 sub_80BF518(u8 textPrinterId); -extern void sub_810B108(u8); -extern void sub_8159F40(void); - void TeachyTvCallback(void); void TeachyTvMainCallback(void); void TeachyTvVblankHandler(void); @@ -114,7 +111,7 @@ void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1 void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blockBuf, u8 *tileset); void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile); u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile); -void TeachyTvLoadMapPalette(const struct MapData *const mStruct, u8 *palIndexArray); +void TeachyTvLoadMapPalette(const struct MapData * mStruct, const u8 *palIndexArray); void TeachyTvCallback(void) { @@ -288,10 +285,8 @@ void TeachyTvSetupScrollIndicatorArrowPair(void) } else { - struct TeachyTvBuf *temp; u8 res = AddScrollIndicatorArrowPair(&gUnknown_8479380, &(gTeachyTV_StaticResources.scrollOffset)); - temp = gUnknown_203F450; - temp->var_4007 = res; + gUnknown_203F450->var_4007 = res; } } @@ -500,7 +495,7 @@ void TeachyTvClusFuncClearBg2TeachyTvGraphic(u8 taskId) void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId) { s16 * data = gTasks[taskId].data; - struct Sprite * priteAddr = &gSprites[data[1]]; + struct Sprite * spriteAddr = &gSprites[data[1]]; if (data[2] != 35) ++data[2]; else { @@ -518,7 +513,7 @@ void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId) void TeachyTvClusFuncIdleIfTextPrinterIsActive(u8 taskId) { - s16* data = (u16 *)gTasks[taskId].data; + s16* data = gTasks[taskId].data; if (!sub_80BF518(0)) ++data[3]; } @@ -572,8 +567,7 @@ void TeachyTvClusFuncIdleIfTextPrinterIsActive2(u8 taskId) void TeachyTvClusFuncEraseTextWindowIfKeyPressed(u8 taskId) { - s16 *data; - data = (u16 *)gTasks[taskId].data; + s16 *data = (u16 *)gTasks[taskId].data; if (JOY_NEW(A_BUTTON | B_BUTTON)) { FillWindowPixelBuffer(0, 0xCC); @@ -664,7 +658,7 @@ void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) s16 *data = gTasks[taskId].data; if (!data[2]) { - CopyToBgTilemapBufferRect_ChangePalette(1, &gUnknown_8479590, 0x14, 0xA, 8, 2, 0x11); + CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_8479590, 0x14, 0xA, 8, 2, 0x11); schedule_bg_copy_tilemap_to_vram(1); } if (++data[2] > 126) @@ -738,7 +732,7 @@ void TeachyTvPostBattleFadeControl(u8 taskId) s16 *data = gTasks[taskId].data; if (!(gPaletteFade.active)) { - const u8* funcIdx = &gUnknown_8479390; + const u8* funcIdx = gUnknown_8479390; int arg = funcIdx[gTeachyTV_StaticResources.optionChosen]; data[3] = arg; gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs; @@ -756,9 +750,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m subprio = subpriority; if (gUnknown_203F450->var_4006 != 1) { - res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj( - x - 0x10, - y); + res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(x - 0x10, y); if (res << 24) { objTemAddr = &gUnknown_83A0010; @@ -822,7 +814,7 @@ u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y) int high, low; if ((x < 0) || (y < 0)) return 0; - arr = &gUnknown_84795C8; + arr = gUnknown_84795C8; high = ((y >> 4) + gUnknown_203F450->var_4005) << 4; low = ((x >> 4) + gUnknown_203F450->var_4004); return arr[high+low]; @@ -1560,63 +1552,20 @@ u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTi return (0xF - i); } -#ifdef NONMATCHING -void TeachyTvLoadMapPalette(const struct MapData * const mStruct, u8 *palIndexArray) +void TeachyTvLoadMapPalette(const struct MapData * mStruct, const u8 * palIndexArray) { u8 i; - struct Tileset *ts; + const struct Tileset * ts; + u16 * dest; - for (i = 0; i < 16 && palIndexArray[i] != 0xFF; i++) + for (i = 0; i < 16; i++) { - ts = *(palIndexArray + i) > 6 ? mStruct->secondaryTileset : mStruct->primaryTileset; - LoadPalette((u16 *)ts->palettes + 0x10 * palIndexArray[i], 0x10 * (0xF - i), 0x20); + if (palIndexArray[i] == 0xFF) + break; + if (palIndexArray[i] > 6) + dest = (u16 *)mStruct->secondaryTileset->palettes + 0x10 * palIndexArray[i]; + else + dest = (u16 *)mStruct->primaryTileset->palettes + 0x10 * palIndexArray[i]; + LoadPalette(dest, 0x10 * (15 - i), 0x20); } } -#else -NAKED -void TeachyTvLoadMapPalette(const struct MapData * const mStruct, u8 *palIndexArray) -{ - asm_unified("\n\ - push {r4-r6,lr}\n\ - adds r6, r0, 0\n\ - adds r5, r1, 0\n\ - movs r4, 0\n\ - ldrb r0, [r5]\n\ - cmp r0, 0xFF\n\ - beq _0815C274\n\ - _0815C23E:\n\ - adds r1, r5, r4\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x6\n\ - bls _0815C24A\n\ - ldr r0, [r6, 0x14]\n\ - b _0815C24C\n\ - _0815C24A:\n\ - ldr r0, [r6, 0x10]\n\ - _0815C24C:\n\ - ldrb r1, [r1]\n\ - lsls r1, 5\n\ - ldr r0, [r0, 0x8]\n\ - adds r0, r1\n\ - movs r1, 0xF\n\ - subs r1, r4\n\ - lsls r1, 20\n\ - lsrs r1, 16\n\ - movs r2, 0x20\n\ - bl LoadPalette\n\ - adds r0, r4, 0x1\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r4, 0xF\n\ - bhi _0815C274\n\ - adds r0, r5, r4\n\ - ldrb r0, [r0]\n\ - cmp r0, 0xFF\n\ - bne _0815C23E\n\ - _0815C274:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - "); -} -#endif -- cgit v1.2.3 From b9dd482ec957ea0a1ee73d1b22354fc10a143789 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 09:17:07 +0800 Subject: fixed array decl --- src/teachy_tv.c | 54 +++++++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 28f4fbe8e..609c470bc 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -57,25 +57,25 @@ struct TeachyTvBuf }; EWRAM_DATA struct TeachyTvCtrlBlk gTeachyTV_StaticResources = {0}; -EWRAM_DATA struct TeachyTvBuf * gUnknown_203F450; +EWRAM_DATA struct TeachyTvBuf * gUnknown_203F450 = NULL; extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; -extern const u8 gUnknown_841B83D; -extern const struct BgTemplate gUnknown_84792E0; +extern const u8 gUnknown_841B83D[]; +extern const struct BgTemplate gUnknown_84792E0[]; extern const struct SpritePalette gUnknown_83A5348; -extern void (**gUnknown_8479548)(u8); -extern const u8 * const gUnknown_8479560; -extern const u8 * const gUnknown_8479578; -extern const u8 gUnknown_8E86240; -extern const u8 gUnknown_8E86BE8; -extern const u8 gUnknown_8E86D6C; -extern const u8 gUnknown_8E86F98; +extern void (**gUnknown_8479548[])(u8); +extern const u8 * const gUnknown_8479560[]; +extern const u8 * const gUnknown_8479578[]; +extern const u8 gUnknown_8E86240[]; +extern const u8 gUnknown_8E86BE8[]; +extern const u8 gUnknown_8E86D6C[]; +extern const u8 gUnknown_8E86F98[]; extern const struct ListMenuTemplate gUnknown_8479368; -extern const struct ListMenuItem gUnknown_8479340; -extern const struct WindowTemplate gUnknown_84792F0; +extern const struct ListMenuItem gUnknown_8479340[]; +extern const struct WindowTemplate gUnknown_84792F0[]; extern const u16 gUnknown_8479590[]; extern const u8 gUnknown_8479390[]; -extern const struct SubspriteTable gUnknown_84795B8; -extern const struct SpriteTemplate * const gUnknown_83A0010; +extern const struct SubspriteTable gUnknown_84795B8[]; +extern const struct SpriteTemplate * const gUnknown_83A0010[]; extern const u8 gUnknown_84795C8[]; extern const struct MapData Route1_Layout; @@ -219,7 +219,7 @@ void TeachyTvSetupBg(void) { InitBgReg(); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, &gUnknown_84792E0, 4); + InitBgsFromTemplates(0, gUnknown_84792E0, 4); SetBgTilemapBuffer(1, gUnknown_203F450->buffer1); SetBgTilemapBuffer(2, gUnknown_203F450->buffer2); SetBgTilemapBuffer(3, gUnknown_203F450->buffer3); @@ -239,10 +239,10 @@ void TeachyTvLoadGraphic(void) { u16 src = 0; reset_temp_tile_data_buffers(); - decompress_and_copy_tile_data_to_vram(1, &gUnknown_8E86240, 0, 0, 0); - LZDecompressWram(&gUnknown_8E86BE8, gUnknown_203F450->buffer1); - LZDecompressWram(&gUnknown_8E86D6C, gUnknown_203F450->buffer4); - LoadCompressedPalette(&gUnknown_8E86F98, 0, 0x80); + decompress_and_copy_tile_data_to_vram(1, gUnknown_8E86240, 0, 0, 0); + LZDecompressWram(gUnknown_8E86BE8, gUnknown_203F450->buffer1); + LZDecompressWram(gUnknown_8E86D6C, gUnknown_203F450->buffer4); + LoadCompressedPalette(gUnknown_8E86F98, 0, 0x80); LoadPalette(&src, 0, 2); LoadSpritePalette(&gUnknown_83A5348); TeachyTvLoadBg3Map(gUnknown_203F450->buffer3); @@ -250,7 +250,7 @@ void TeachyTvLoadGraphic(void) void TeachyTvCreateAndRenderRbox(void) { - InitWindows(&gUnknown_84792F0); + InitWindows(gUnknown_84792F0); DeactivateAllTextPrinters(); FillWindowPixelBuffer(0, 0xCC); PutWindowTilemap(0); @@ -265,7 +265,7 @@ u8 TeachyTvSetupWindow(void) gMultiuseListMenuTemplate.moveCursorFunc = TeachyTvAudioByInput; if (!CheckBagHasItem(ITEM_TM_CASE, 1)) { - gMultiuseListMenuTemplate.items = &gUnknown_8479340; + gMultiuseListMenuTemplate.items = gUnknown_8479340; gMultiuseListMenuTemplate.totalItems = 5; gMultiuseListMenuTemplate.maxShowed = 5; gMultiuseListMenuTemplate.upText_Y = (gMultiuseListMenuTemplate.upText_Y + 8) & 0xF; @@ -502,7 +502,7 @@ void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId) if (spriteAddr->pos2.x == 0x78) { StartSpriteAnim(&gSprites[data[1]], 0); - TeachyTvInitTextPrinter(&gUnknown_841B83D); + TeachyTvInitTextPrinter(gUnknown_841B83D); data[2] = 0; ++data[3]; } @@ -536,7 +536,7 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) } else { - void (***array)(u8) = &gUnknown_8479548; + void (***array)(u8) = gUnknown_8479548; void (**cluster)(u8) = array[(u8)gTeachyTV_StaticResources.optionChosen]; cluster[data[3]](taskId); } @@ -545,7 +545,7 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) { s16 *data = gTasks[taskId].data; - const u8 * const* texts = &gUnknown_8479560; + const u8 * const* texts = gUnknown_8479560; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; } @@ -553,7 +553,7 @@ void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) { s16 *data = gTasks[taskId].data; - const u8 * const* texts = &gUnknown_8479578; + const u8 * const* texts = gUnknown_8479578; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; } @@ -753,7 +753,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(x - 0x10, y); if (res << 24) { - objTemAddr = &gUnknown_83A0010; + objTemAddr = gUnknown_83A0010; objId = CreateSprite(*(objTemAddr+4), 0, 0, subprio); obj = gSprites + objId; obj->pos2.x = x; @@ -767,7 +767,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m } else { - SetSubspriteTables(obj, &gUnknown_84795B8); + SetSubspriteTables(obj, gUnknown_84795B8); obj->subspriteTableNum = 0; obj->subspriteMode = 1; } -- cgit v1.2.3 From 35c14911478ce0b963376fc4c82cedfb5b5614a4 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 12:44:12 +0800 Subject: sub_815C0D4 finished --- src/teachy_tv.c | 225 +++++++------------------------------------------------- 1 file changed, 28 insertions(+), 197 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 609c470bc..6c0df1edc 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -472,7 +472,7 @@ void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId) if (++data[2] > 63) { CopyToBgTilemapBufferRect_ChangePalette(2, gUnknown_203F450->buffer4, 0, 0, 0x20, 0x20, 0x11); - TeachyTvSetSpriteCoordsAndSwitchFrame(((u8*)data)[2], 8, 0x38, 7); + TeachyTvSetSpriteCoordsAndSwitchFrame(((u8 *)data)[2], 8, 0x38, 7); schedule_bg_copy_tilemap_to_vram(2); data[2] = 0; ++data[3]; @@ -513,7 +513,7 @@ void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId) void TeachyTvClusFuncIdleIfTextPrinterIsActive(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (!sub_80BF518(0)) ++data[3]; } @@ -560,7 +560,7 @@ void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) void TeachyTvClusFuncIdleIfTextPrinterIsActive2(u8 taskId) { - s16* data = (u16 *)gTasks[taskId].data; + s16 *data = (u16 *)gTasks[taskId].data; if (!sub_80BF518(0)) ++data[3]; } @@ -732,7 +732,7 @@ void TeachyTvPostBattleFadeControl(u8 taskId) s16 *data = gTasks[taskId].data; if (!(gPaletteFade.active)) { - const u8* funcIdx = gUnknown_8479390; + const u8 *funcIdx = gUnknown_8479390; int arg = funcIdx[gTeachyTV_StaticResources.optionChosen]; data[3] = arg; gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs; @@ -751,7 +751,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m if (gUnknown_203F450->var_4006 != 1) { res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(x - 0x10, y); - if (res << 24) + if (res) { objTemAddr = gUnknown_83A0010; objId = CreateSprite(*(objTemAddr+4), 0, 0, subprio); @@ -777,8 +777,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite) { - u32 diff1, diff2; - s16 *data = gTasks[sprite->data[0]].data; + s16 diff1, diff2, *data = gTasks[sprite->data[0]].data; struct Sprite *objAddr = &gSprites[data[1]]; if (gUnknown_203F450->var_4006 == 1) DestroySprite(sprite); @@ -794,12 +793,12 @@ void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite) sprite->subpriority = 0; diff1 = (u16)(sprite->pos2.x - objAddr->pos2.x); diff2 = (u16)(sprite->pos2.y - objAddr->pos2.y); - diff1 = ((diff1 << 0x10) + 0xF0000) >> 0x10; - if (diff1 <= 0x1E) + diff1 += 0xF; + if ((u16)diff1 <= 0x1E) { - if ((s16)diff2 > -0x10) + if (diff2 > -0x10) { - if ((s16)diff2 <= 0x17) + if (diff2 <= 0x17) return; } } @@ -850,7 +849,7 @@ void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId) ++data[7]; break; case 1: - if (sub_80D08F8() << 24) + if (sub_80D08F8()) { SetMainCallback2(sub_800FD9C); DestroyTask(taskId); @@ -1317,205 +1316,40 @@ void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blo TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf, &tileset[0x20 * (metaTilesArray[7] & 0x3FF)], (metaTilesArray[7] >> 10) & 3); } -#ifdef NONMATCHING void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile) { - u32 i; - u32 j; - vu32 src; - u8* buffer = (u8 *)AllocZeroed(0x20); - src = ((u32)AllocZeroed(0x20)); + u8 i, j, * src, *buffer = (u8 *)AllocZeroed(0x20); + src = AllocZeroed(0x20); CpuFastSet(tileset, buffer, 8); if (metaTile & 1) { - for (i=0; i<8; ++i) + for (i = 0; i < 8; ++i) { - for (j=0; j<4; ++j) + for (j = 0; j < 4; ++j) { - u32 offset1 = i << 2; u32 offset2 = j - 3; - u32 offset = offset1 - offset2; - u32 value = buffer[offset]; - u32 dstOffset = offset1 + j; - *(u8*)(src + dstOffset) = ((value & 0xF) << 4) + ((value & 0xF0) >> 4); + u8 value = buffer[(i << 2) - offset2]; + src[(i << 2) + j] = ((value & 0xF) << 4) + ((value & 0xF0) >> 4); } } - CpuFastSet((u8*)src, buffer, 8); + CpuFastSet(src, buffer, 8); } if (metaTile & 2) { - j = 0; - do - { - memcpy(&((u8*)src)[4 * j], &buffer[4 * (7 - j)], 4); - j = (u8)(j + 1); - } - while (j <= 7); - CpuFastSet((u8*)src, buffer, 8); + for (i = 0; i < 8; ++i) + memcpy(&src[4 * i], &buffer[4 * (7 - i)], 4); + CpuFastSet(src, buffer, 8); } - j = 0; - do + for (i = 0; i < 32; ++i) { - if (buffer[j] & 0xF0) - blockBuf[j] = (blockBuf[j] & 0xF) + (buffer[j] & 0xF0); - if (buffer[j] & 0xF) - blockBuf[j] = (blockBuf[j] & 0xF0) + (buffer[j] & 0xF); - j = (u8)(j + 1); + if (buffer[i] & 0xF0) + blockBuf[i] = (blockBuf[i] & 0xF) + (buffer[i] & 0xF0); + if (buffer[i] & 0xF) + blockBuf[i] = (blockBuf[i] & 0xF0) + (buffer[i] & 0xF); } - while (j <= 0x1F); - Free((u8*)src); + Free(src); Free(buffer); } -#else -NAKED -void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile) -{ - asm_unified("\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x4\n\ - mov r9, r0\n\ - adds r4, r1, 0\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - mov r10, r2\n\ - movs r0, 0x20\n\ - bl AllocZeroed\n\ - adds r6, r0, 0\n\ - movs r0, 0x20\n\ - bl AllocZeroed\n\ - str r0, [sp]\n\ - adds r0, r4, 0\n\ - adds r1, r6, 0\n\ - movs r2, 0x8\n\ - bl CpuFastSet\n\ - movs r0, 0x1\n\ - mov r1, r10\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0815C15A\n\ - movs r5, 0\n\ - movs r7, 0xF\n\ - mov r12, r7\n\ - movs r0, 0xF0\n\ - mov r8, r0\n\ - _0815C118:\n\ - movs r3, 0\n\ - lsls r4, r5, 2\n\ - _0815C11C:\n\ - subs r0, r3, 0x3\n\ - subs r0, r4, r0\n\ - adds r0, r6, r0\n\ - ldrb r1, [r0]\n\ - adds r2, r4, r3\n\ - ldr r7, [sp]\n\ - adds r2, r7, r2\n\ - adds r0, r1, 0\n\ - mov r7, r12\n\ - ands r0, r7\n\ - lsls r0, 4\n\ - mov r7, r8\n\ - ands r1, r7\n\ - lsrs r1, 4\n\ - adds r0, r1\n\ - strb r0, [r2]\n\ - adds r0, r3, 0x1\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - cmp r3, 0x3\n\ - bls _0815C11C\n\ - adds r0, r5, 0x1\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - cmp r5, 0x7\n\ - bls _0815C118\n\ - ldr r0, [sp]\n\ - adds r1, r6, 0\n\ - movs r2, 0x8\n\ - bl CpuFastSet\n\ - _0815C15A:\n\ - movs r0, 0x2\n\ - mov r1, r10\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0815C18E\n\ - movs r5, 0\n\ - _0815C166:\n\ - lsls r0, r5, 2\n\ - ldr r7, [sp]\n\ - adds r0, r7\n\ - movs r1, 0x7\n\ - subs r1, r5\n\ - lsls r1, 2\n\ - adds r1, r6\n\ - movs r2, 0x4\n\ - bl memcpy\n\ - adds r0, r5, 0x1\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - cmp r5, 0x7\n\ - bls _0815C166\n\ - ldr r0, [sp]\n\ - adds r1, r6, 0\n\ - movs r2, 0x8\n\ - bl CpuFastSet\n\ - _0815C18E:\n\ - movs r5, 0\n\ - movs r0, 0xF0\n\ - mov r8, r0\n\ - movs r1, 0xF\n\ - mov r12, r1\n\ - _0815C198:\n\ - adds r4, r6, r5\n\ - ldrb r0, [r4]\n\ - mov r3, r8\n\ - ands r3, r0\n\ - cmp r3, 0\n\ - beq _0815C1B2\n\ - mov r7, r9\n\ - adds r2, r7, r5\n\ - ldrb r1, [r2]\n\ - mov r0, r12\n\ - ands r0, r1\n\ - adds r0, r3\n\ - strb r0, [r2]\n\ - _0815C1B2:\n\ - ldrb r0, [r4]\n\ - mov r3, r12\n\ - ands r3, r0\n\ - cmp r3, 0\n\ - beq _0815C1CA\n\ - mov r0, r9\n\ - adds r2, r0, r5\n\ - ldrb r1, [r2]\n\ - mov r0, r8\n\ - ands r0, r1\n\ - adds r0, r3\n\ - strb r0, [r2]\n\ - _0815C1CA:\n\ - adds r0, r5, 0x1\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - cmp r5, 0x1F\n\ - bls _0815C198\n\ - ldr r0, [sp]\n\ - bl Free\n\ - adds r0, r6, 0\n\ - bl Free\n\ - add sp, 0x4\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - "); -} -#endif u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile) { @@ -1533,11 +1367,8 @@ u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTi } else { - while (1) + while (++i < 16) { - ++i; - if (i > 0xF) - break; temp = palIndexArrayBuf[i]; if (temp == pal) break; -- cgit v1.2.3 From 19f89762cf4c1d34b716428dfacd2168a979fe3c Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 16:56:12 +0800 Subject: data decomp --- data/data_83FECCC.s | 23 ++- data/data_8471F00.s | 41 ----- ld_script.txt | 1 + src/coins.c | 2 +- src/teachy_tv.c | 469 +++++++++++++++++++++++++++++++++++++++++++++++----- 5 files changed, 456 insertions(+), 80 deletions(-) diff --git a/data/data_83FECCC.s b/data/data_83FECCC.s index edddda0ab..52af8de8a 100644 --- a/data/data_83FECCC.s +++ b/data/data_83FECCC.s @@ -1903,7 +1903,28 @@ gUnknown_841B76B:: @ 841B76B .incbin "baserom.gba", 0x41B76B, 0xE gUnknown_841B779:: @ 841B779 - .incbin "baserom.gba", 0x41B779, 0xC4 + .incbin "baserom.gba", 0x41B779, 0x2B + +gUnknown_841B7A4:: @ 841B7A4 + .string "Teach me how to battle.$" + +gUnknown_841B7BC:: @ 841B7BC + .string "What are status problems?$" + +gUnknown_841B7D6:: @ 841B7D6 + .string "What are type matchups?$" + +gUnknown_841B7EE:: @ 841B7EE + .string "I want to catch POKéMON.$" + +gUnknown_841B807:: @ 841B807 + .string "Teach me about TMs.$" + +gUnknown_841B81B:: @ 841B81B + .string "How do I register an item?$" + +gUnknown_841B836:: @ 841B836 + .string "CANCEL$" gUnknown_841B83D:: @ 841B83D .string "Hey, all you TRAINERS out there!\n" diff --git a/data/data_8471F00.s b/data/data_8471F00.s index e8b51cf69..672a9178e 100644 --- a/data/data_8471F00.s +++ b/data/data_8471F00.s @@ -215,47 +215,6 @@ gUnknown_84791E8:: @ 84791E8 gUnknown_84792D0:: @ 84792D0 .incbin "baserom.gba", 0x4792D0, 0x10 -gUnknown_84792E0:: @ 84792E0 - .incbin "baserom.gba", 0x4792E0, 0x10 - -gUnknown_84792F0:: @ 84792F0 - .incbin "baserom.gba", 0x4792F0, 0x50 - -gUnknown_8479340:: @ 8479340 - .incbin "baserom.gba", 0x479340, 0x28 - -gUnknown_8479368:: @ 8479368 - .incbin "baserom.gba", 0x479368, 0x18 - -gUnknown_8479380:: @ 8479380 - .incbin "baserom.gba", 0x479380, 0x10 - -gUnknown_8479390:: @ 8479390 - .incbin "baserom.gba", 0x479390, 0x1B8 - -gUnknown_8479548:: @ 8479548 - .incbin "baserom.gba", 0x479548, 0x18 - -gUnknown_8479560:: @ 8479560 - .4byte gUnknown_841B8BF - .4byte gUnknown_841BB40 - .4byte gUnknown_841BE76 - .4byte gUnknown_841C23B - .4byte gUnknown_841C459 - .4byte gUnknown_841C82A - -gUnknown_8479578:: @ 8479578 - .incbin "baserom.gba", 0x479578, 0x18 - -gUnknown_8479590:: @ 8479590 - .incbin "baserom.gba", 0x479590, 0x28 - -gUnknown_84795B8:: @ 84795B8 - .incbin "baserom.gba", 0x4795B8, 0x10 - -gUnknown_84795C8:: @ 84795C8 - .incbin "baserom.gba", 0x4795C8, 0x90 - .section .rodata.8479668 .align 2 diff --git a/ld_script.txt b/ld_script.txt index db9b37607..d264549b7 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -450,6 +450,7 @@ SECTIONS { src/text_window_graphics.o(.rodata); src/quest_log_8150454.o(.rodata); data/data_8471F00.o(.rodata); + src/teachy_tv.o(.rodata); src/unk_815C980.o(.rodata); data/data_8471F00.o(.rodata.8479668); src/trainer_tower.o(.rodata); diff --git a/src/coins.c b/src/coins.c index 08646e2f9..e97928df7 100644 --- a/src/coins.c +++ b/src/coins.c @@ -3,8 +3,8 @@ #include "text.h" #include "menu.h" #include "text_window.h" +#include "strings.h" -extern const u8 gText_Coins[]; extern const u8 gUnknown_8417C2D[]; EWRAM_DATA static u8 sCoinsWindowId = 0; diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 6c0df1edc..6f1fcef3c 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -1,5 +1,4 @@ #include "main.h" -#include "global.h" #include "task.h" #include "menu.h" #include "palette.h" @@ -58,27 +57,30 @@ struct TeachyTvBuf EWRAM_DATA struct TeachyTvCtrlBlk gTeachyTV_StaticResources = {0}; EWRAM_DATA struct TeachyTvBuf * gUnknown_203F450 = NULL; -extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; -extern const u8 gUnknown_841B83D[]; -extern const struct BgTemplate gUnknown_84792E0[]; extern const struct SpritePalette gUnknown_83A5348; -extern void (**gUnknown_8479548[])(u8); -extern const u8 * const gUnknown_8479560[]; -extern const u8 * const gUnknown_8479578[]; +extern const struct SpriteTemplate * const gUnknown_83A0010[]; +extern const struct MapData Route1_Layout; +extern const u8 gUnknown_841B7A4[], gUnknown_841B7BC[], gUnknown_841B7D6[], gUnknown_841B7EE[], gUnknown_841B807[], gUnknown_841B81B[], gUnknown_841B836[], gUnknown_841B83D[], gUnknown_841B8BF[], gUnknown_841BB40[], gUnknown_841BE76[], gUnknown_841C23B[], gUnknown_841C459[], gUnknown_841C82A[], gUnknown_841BA41[], gUnknown_841BD10[], gUnknown_841C0AF[], gUnknown_841C384[], gUnknown_841C7B4[], gUnknown_841C994[]; extern const u8 gUnknown_8E86240[]; extern const u8 gUnknown_8E86BE8[]; extern const u8 gUnknown_8E86D6C[]; extern const u8 gUnknown_8E86F98[]; -extern const struct ListMenuTemplate gUnknown_8479368; -extern const struct ListMenuItem gUnknown_8479340[]; -extern const struct WindowTemplate gUnknown_84792F0[]; -extern const u16 gUnknown_8479590[]; -extern const u8 gUnknown_8479390[]; -extern const struct SubspriteTable gUnknown_84795B8[]; -extern const struct SpriteTemplate * const gUnknown_83A0010[]; -extern const u8 gUnknown_84795C8[]; -extern const struct MapData Route1_Layout; +void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId); +void TeachyTvClusFuncClearBg2TeachyTvGraphic(u8 taskId); +void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId); +void TeachyTvClusFuncIdleIfTextPrinterIsActive(u8 taskId); +void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId); +void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId); +void TeachyTvClusFuncIdleIfTextPrinterIsActive2(u8 taskId); +void TeachyTvClusFuncEraseTextWindowIfKeyPressed(u8 taskId); +void TeachyTvClusFuncStartAnimNpcWalkIntoGrass(u8 taskId); +void TeachyTvClusFuncDudeMoveUp(u8 taskId); +void TeachyTvClusFuncDudeMoveRight(u8 taskId); +void TeachyTvClusFuncDudeTurnLeft(u8 taskId); +void TeachyTvClusFuncDudeMoveLeft(u8 taskId); +void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId); +void TeachyTvClusFuncTaskBattleOrFadeByOptionChosen(u8 taskId); void TeachyTvCallback(void); void TeachyTvMainCallback(void); void TeachyTvVblankHandler(void); @@ -113,6 +115,399 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile); void TeachyTvLoadMapPalette(const struct MapData * mStruct, const u8 *palIndexArray); +const struct BgTemplate gTeachyTvBgTemplateArray[] = +{ + { + .bg = 0x0, + .charBaseIndex = 0x0, + .mapBaseIndex = 0x1F, + .screenSize = 0x0, + .paletteMode = 0x0, + .priority = 0x1, + .baseTile = 0x0, + }, + { + .bg = 0x1, + .charBaseIndex = 0x0, + .mapBaseIndex = 0x1E, + .screenSize = 0x0, + .paletteMode = 0x0, + .priority = 0x0, + .baseTile = 0x0, + }, + { + .bg = 0x2, + .charBaseIndex = 0x0, + .mapBaseIndex = 0x1D, + .screenSize = 0x0, + .paletteMode = 0x0, + .priority = 0x2, + .baseTile = 0x0, + }, + { + .bg = 0x3, + .charBaseIndex = 0x2, + .mapBaseIndex = 0x1C, + .screenSize = 0x0, + .paletteMode = 0x0, + .priority = 0x3, + .baseTile = 0x0, + }, +}; + +const struct WindowTemplate gTeachyTvWindowTemplateArray[] = +{ + { + .bg = 0x1, + .tilemapLeft = 0x2, + .tilemapTop = 0xF, + .width = 0x1A, + .height = 0x4, + .paletteNum = 0x3, + .baseBlock = 0xEA, + }, + { + .bg = 0x0, + .tilemapLeft = 0x4, + .tilemapTop = 0x1, + .width = 0x16, + .height = 0xC, + .paletteNum = 0x3, + .baseBlock = 0x152, + }, + { + .bg = 0xFF, + .tilemapLeft = 0x0, + .tilemapTop = 0x0, + .width = 0x0, + .height = 0x0, + .paletteNum = 0x0, + .baseBlock = 0x0, + }, +}; + +const struct ListMenuItem gTeachyTvListMenuItemArray[] = +{ + { + .unk_00 = gUnknown_841B7A4, + .unk_04 = 0, + }, + { + .unk_00 = gUnknown_841B7BC, + .unk_04 = 1, + }, + { + .unk_00 = gUnknown_841B7D6, + .unk_04 = 2, + }, + { + .unk_00 = gUnknown_841B7EE, + .unk_04 = 3, + }, + { + .unk_00 = gUnknown_841B807, + .unk_04 = 4, + }, + { + .unk_00 = gUnknown_841B81B, + .unk_04 = 5, + }, + + { + .unk_00 = gUnknown_841B836, + .unk_04 = -2, + }, +}; + +const struct ListMenuItem gTeachyTvListMenuItemArray2[] = +{ + { + .unk_00 = gUnknown_841B7A4, + .unk_04 = 0, + }, + { + .unk_00 = gUnknown_841B7BC, + .unk_04 = 1, + }, + { + .unk_00 = gUnknown_841B7D6, + .unk_04 = 2, + }, + { + .unk_00 = gUnknown_841B7EE, + .unk_04 = 3, + }, + { + .unk_00 = gUnknown_841B836, + .unk_04 = -2, + }, +}; + +const struct ListMenuTemplate gTeachyTvListMenuTemplateArray = +{ + .items = gTeachyTvListMenuItemArray, + .moveCursorFunc = NULL, + .itemPrintFunc = NULL, + .totalItems = 0x7, + .maxShowed = 0x6, + .windowId = 0x0, + .header_X = 0x0, + .item_X = 0x8, + .cursor_X = 0x0, + .upText_Y = 0x6, + .cursorPal = 0x1, + .fillValue = 0x0, + .cursorShadowPal = 0x2, + .lettersSpacing = 0x0, + .itemVerticalPadding = 0x0, + .scrollMultiple = 0x1, + .fontId = 0x2, + .cursorKind = 0x0, +}; + +const struct ScrollIndicatorArrowPairTemplate gTeachyTvScrollIndicatorArrowPairTemplateArray = +{ + .unk_00 = 0x2, + .unk_01 = 0x78, + .unk_02 = 0xC, + .unk_03 = 0x3, + .unk_04 = 0x78, + .unk_05 = 0x64, + .unk_06 = 0x0, + .unk_08 = 0x1, + .unk_0a = 0x800, + .unk_0c = 0x800, + .unk_0e_0 = 0x0, + .unk_0e_4 = 0x0, +}; + +const u8 gTeachyTvSwitchFuncArray[] = +{ + 0xC, 0xC, 0xC, 0xC, 0x9, 0x9, 0x0, 0x0, +}; + +void (* const gTeachyTvFuncCluster0[])(u8) = +{ + TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos, + TeachyTvClusFuncClearBg2TeachyTvGraphic, + TeachyTvClusFuncNpcMoveAndSetupTextPrinter, + TeachyTvClusFuncIdleIfTextPrinterIsActive, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncStartAnimNpcWalkIntoGrass, + TeachyTvClusFuncDudeMoveUp, + TeachyTvClusFuncDudeMoveRight, + TeachyTvClusFuncTaskBattleOrFadeByOptionChosen, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncDudeTurnLeft, + TeachyTvClusFuncDudeMoveLeft, + TeachyTvClusFuncRenderAndRemoveBg1EndGraphic, + TeachyTvBackToOptionList, +}; + +void (* const gTeachyTvFuncCluster1[])(u8) = +{ + TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos, + TeachyTvClusFuncClearBg2TeachyTvGraphic, + TeachyTvClusFuncNpcMoveAndSetupTextPrinter, + TeachyTvClusFuncIdleIfTextPrinterIsActive, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncStartAnimNpcWalkIntoGrass, + TeachyTvClusFuncDudeMoveUp, + TeachyTvClusFuncDudeMoveRight, + TeachyTvClusFuncTaskBattleOrFadeByOptionChosen, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncDudeTurnLeft, + TeachyTvClusFuncDudeMoveLeft, + TeachyTvClusFuncRenderAndRemoveBg1EndGraphic, + TeachyTvBackToOptionList, +}; + +void (* const gTeachyTvFuncCluster2[])(u8) = +{ + TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos, + TeachyTvClusFuncClearBg2TeachyTvGraphic, + TeachyTvClusFuncNpcMoveAndSetupTextPrinter, + TeachyTvClusFuncIdleIfTextPrinterIsActive, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncStartAnimNpcWalkIntoGrass, + TeachyTvClusFuncDudeMoveUp, + TeachyTvClusFuncDudeMoveRight, + TeachyTvClusFuncTaskBattleOrFadeByOptionChosen, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncDudeTurnLeft, + TeachyTvClusFuncDudeMoveLeft, + TeachyTvClusFuncRenderAndRemoveBg1EndGraphic, + TeachyTvBackToOptionList, +}; + +void (* const gTeachyTvFuncCluster3[])(u8) = +{ + TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos, + TeachyTvClusFuncClearBg2TeachyTvGraphic, + TeachyTvClusFuncNpcMoveAndSetupTextPrinter, + TeachyTvClusFuncIdleIfTextPrinterIsActive, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncStartAnimNpcWalkIntoGrass, + TeachyTvClusFuncDudeMoveUp, + TeachyTvClusFuncDudeMoveRight, + TeachyTvClusFuncTaskBattleOrFadeByOptionChosen, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncDudeTurnLeft, + TeachyTvClusFuncDudeMoveLeft, + TeachyTvClusFuncRenderAndRemoveBg1EndGraphic, + TeachyTvBackToOptionList, +}; + +void (* const gTeachyTvFuncCluster4[])(u8) = +{ + TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos, + TeachyTvClusFuncClearBg2TeachyTvGraphic, + TeachyTvClusFuncNpcMoveAndSetupTextPrinter, + TeachyTvClusFuncIdleIfTextPrinterIsActive, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncTaskBattleOrFadeByOptionChosen, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncDudeTurnLeft, + TeachyTvClusFuncDudeMoveLeft, + TeachyTvClusFuncRenderAndRemoveBg1EndGraphic, + TeachyTvBackToOptionList, +}; + +void (* const gTeachyTvFuncCluster5[])(u8) = +{ + TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos, + TeachyTvClusFuncClearBg2TeachyTvGraphic, + TeachyTvClusFuncNpcMoveAndSetupTextPrinter, + TeachyTvClusFuncIdleIfTextPrinterIsActive, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncTaskBattleOrFadeByOptionChosen, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncDudeTurnLeft, + TeachyTvClusFuncDudeMoveLeft, + TeachyTvClusFuncRenderAndRemoveBg1EndGraphic, + TeachyTvBackToOptionList, +}; + +void (* const * const gTeachyTvFuncClusterArray[])(u8) = +{ + gTeachyTvFuncCluster0, + gTeachyTvFuncCluster1, + gTeachyTvFuncCluster2, + gTeachyTvFuncCluster3, + gTeachyTvFuncCluster4, + gTeachyTvFuncCluster5, +}; + +const u8 * const gTeachyTvTextArray1[] = +{ + gUnknown_841B8BF, + gUnknown_841BB40, + gUnknown_841BE76, + gUnknown_841C23B, + gUnknown_841C459, + gUnknown_841C82A, +}; + +const u8 * const gTeachyTvTextArray2[] = +{ + gUnknown_841BA41, + gUnknown_841BD10, + gUnknown_841C0AF, + gUnknown_841C384, + gUnknown_841C7B4, + gUnknown_841C994, +}; + +const u16 gUnknown_8479590[] = +{ + 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, + 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, +}; + +const struct Subsprite gTeachyTvSubspriteArray[] = +{ + { + .x = -0x8, + .y = -0x8, + .shape = 0x1, + .size = 0x0, + .tileOffset = 0x0, + .priority = 0x3, + }, + { + .x = -0x8, + .y = 0x0, + .shape = 0x1, + .size = 0x0, + .tileOffset = 0x2, + .priority = 0x2, + }, +}; + +const struct SubspriteTable gTeachyTvSubspriteTableArray[] = +{ + { + .subspriteCount = 0, + .subsprites = NULL, + }, + { + .subspriteCount = 2, + .subsprites = gTeachyTvSubspriteArray, + }, +}; + +const u8 gTeachyTvGrassAnimArray[] = +{ + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 0, 0, +}; + void TeachyTvCallback(void) { RunTasks(); @@ -219,7 +614,7 @@ void TeachyTvSetupBg(void) { InitBgReg(); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_84792E0, 4); + InitBgsFromTemplates(0, gTeachyTvBgTemplateArray, 4); SetBgTilemapBuffer(1, gUnknown_203F450->buffer1); SetBgTilemapBuffer(2, gUnknown_203F450->buffer2); SetBgTilemapBuffer(3, gUnknown_203F450->buffer3); @@ -250,7 +645,7 @@ void TeachyTvLoadGraphic(void) void TeachyTvCreateAndRenderRbox(void) { - InitWindows(gUnknown_84792F0); + InitWindows(gTeachyTvWindowTemplateArray); DeactivateAllTextPrinters(); FillWindowPixelBuffer(0, 0xCC); PutWindowTilemap(0); @@ -260,12 +655,12 @@ void TeachyTvCreateAndRenderRbox(void) u8 TeachyTvSetupWindow(void) { - gMultiuseListMenuTemplate = gUnknown_8479368; + gMultiuseListMenuTemplate = gTeachyTvListMenuTemplateArray; gMultiuseListMenuTemplate.windowId = 1; gMultiuseListMenuTemplate.moveCursorFunc = TeachyTvAudioByInput; if (!CheckBagHasItem(ITEM_TM_CASE, 1)) { - gMultiuseListMenuTemplate.items = gUnknown_8479340; + gMultiuseListMenuTemplate.items = gTeachyTvListMenuItemArray2; gMultiuseListMenuTemplate.totalItems = 5; gMultiuseListMenuTemplate.maxShowed = 5; gMultiuseListMenuTemplate.upText_Y = (gMultiuseListMenuTemplate.upText_Y + 8) & 0xF; @@ -285,7 +680,7 @@ void TeachyTvSetupScrollIndicatorArrowPair(void) } else { - u8 res = AddScrollIndicatorArrowPair(&gUnknown_8479380, &(gTeachyTV_StaticResources.scrollOffset)); + u8 res = AddScrollIndicatorArrowPair(&gTeachyTvScrollIndicatorArrowPairTemplateArray, &(gTeachyTV_StaticResources.scrollOffset)); gUnknown_203F450->var_4007 = res; } } @@ -315,10 +710,10 @@ void TeachyTvInitIo(void) u8 TeachyTvSetupObjEventAndOam(void) { - u8 temp = AddPseudoEventObject(90, SpriteCallbackDummy, 0, 0, 8); - gSprites[temp].oam.priority = 2; - gSprites[temp].invisible = 1; - return temp; + u8 objId = AddPseudoEventObject(90, SpriteCallbackDummy, 0, 0, 8); + gSprites[objId].oam.priority = 2; + gSprites[objId].invisible = 1; + return objId; } void TeachyTvSetSpriteCoordsAndSwitchFrame(u8 objId, u16 x, u16 y, u8 frame) @@ -536,8 +931,8 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) } else { - void (***array)(u8) = gUnknown_8479548; - void (**cluster)(u8) = array[(u8)gTeachyTV_StaticResources.optionChosen]; + void (* const * const *array)(u8) = gTeachyTvFuncClusterArray; + void (* const * const cluster)(u8) = array[(u8)gTeachyTV_StaticResources.optionChosen]; cluster[data[3]](taskId); } } @@ -545,7 +940,7 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) { s16 *data = gTasks[taskId].data; - const u8 * const* texts = gUnknown_8479560; + const u8 * const* texts = gTeachyTvTextArray1; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; } @@ -553,7 +948,7 @@ void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) { s16 *data = gTasks[taskId].data; - const u8 * const* texts = gUnknown_8479578; + const u8 * const* texts = gTeachyTvTextArray2; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; } @@ -701,7 +1096,7 @@ void TeachyTvBackToOptionList(u8 taskId) } } -void TeachyTvChainTaskBattleOrFadeByOptionChosen(u8 taskId) +void TeachyTvClusFuncTaskBattleOrFadeByOptionChosen(u8 taskId) { int op = gTeachyTV_StaticResources.optionChosen; if (op >= 0) @@ -732,7 +1127,7 @@ void TeachyTvPostBattleFadeControl(u8 taskId) s16 *data = gTasks[taskId].data; if (!(gPaletteFade.active)) { - const u8 *funcIdx = gUnknown_8479390; + const u8 *funcIdx = gTeachyTvSwitchFuncArray; int arg = funcIdx[gTeachyTV_StaticResources.optionChosen]; data[3] = arg; gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs; @@ -767,7 +1162,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m } else { - SetSubspriteTables(obj, gUnknown_84795B8); + SetSubspriteTables(obj, gTeachyTvSubspriteTableArray); obj->subspriteTableNum = 0; obj->subspriteMode = 1; } @@ -813,7 +1208,7 @@ u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y) int high, low; if ((x < 0) || (y < 0)) return 0; - arr = gUnknown_84795C8; + arr = gTeachyTvGrassAnimArray; high = ((y >> 4) + gUnknown_203F450->var_4005) << 4; low = ((x >> 4) + gUnknown_203F450->var_4004); return arr[high+low]; @@ -1230,8 +1625,8 @@ void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1 metaTileEntryAddr = &((u16*)(ts->metatiles))[8 * temp]; buf1[0] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[0]) << 12) + 4 * offset; buf1[1] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[1]) << 12) + 4 * offset + 1; - buf1[0x20] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[2]) << 12) + 4 * offset + 2; - buf1[0x21] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[3]) << 12) + 4 * offset + 3; + buf1[32] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[2]) << 12) + 4 * offset + 2; + buf1[33] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[3]) << 12) + 4 * offset + 3; } #else NAKED @@ -1327,8 +1722,8 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * { for (j = 0; j < 4; ++j) { - u32 offset2 = j - 3; - u8 value = buffer[(i << 2) - offset2]; + u32 offset = j - 3; + u8 value = buffer[(i << 2) - offset]; src[(i << 2) + j] = ((value & 0xF) << 4) + ((value & 0xF0) >> 4); } } -- cgit v1.2.3 From 20a09555eac362113abe831dd6b3973b480f56e9 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 11 Jun 2019 05:20:42 +0800 Subject: fixed lots of stuff --- include/fame_checker.h | 2 +- include/field_map_obj.h | 4 +- include/fieldmap.h | 1 + include/graphics.h | 7 ++ include/list_menu.h | 4 +- include/main.h | 2 - include/sprite.h | 2 + include/strings.h | 23 ++++- src/fame_checker.c | 16 ++-- src/mystery_gift_menu.c | 2 +- src/teachy_tv.c | 242 +++++++++++++++++++++++------------------------- src/tm_case.c | 8 +- 12 files changed, 167 insertions(+), 146 deletions(-) diff --git a/include/fame_checker.h b/include/fame_checker.h index af705e34f..257431d8b 100644 --- a/include/fame_checker.h +++ b/include/fame_checker.h @@ -41,7 +41,7 @@ extern u8 gIconDescriptionBoxIsOpen; void ResetFameChecker(void); void FullyUnlockFameChecker(void); -void UseFameChecker(void (*)()); +void UseFameChecker(MainCallback savedCallback); void SetFlavorTextFlagFromSpecialVars(void); void UpdatePickStateFromSpecialVar8005(void); diff --git a/include/field_map_obj.h b/include/field_map_obj.h index d67fc476c..27a7f23d7 100644 --- a/include/field_map_obj.h +++ b/include/field_map_obj.h @@ -46,7 +46,7 @@ void FieldObjectClearAnim(struct MapObject *); void FieldObjectClearAnimIfSpecialAnimActive(struct MapObject *); void SpawnFieldObjectsInView(s16, s16); u8 sprite_new(u8, u8, s16, s16, u8, u8); -u8 AddPseudoEventObject(u16, void (*)(struct Sprite *), s16, s16, u8); +u8 AddPseudoEventObject(u16, SpriteCallback, s16, s16, u8); u8 show_sprite(u8, u8, u8); u8 SpawnSpecialFieldObjectParameterized(u8, u8, u8, s16, s16, u8); u8 SpawnSpecialFieldObject(struct MapObjectTemplate *); @@ -92,5 +92,7 @@ void npc_paltag_set_load(u8 mode); // Exported data declarations extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[]; +extern const struct SpritePalette gUnknown_83A5348; +extern const struct SpriteTemplate * const gUnknown_83A0010[]; #endif //GUARD_FIELD_MAP_OBJ_H diff --git a/include/fieldmap.h b/include/fieldmap.h index 537626edc..9903962a1 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -12,6 +12,7 @@ #define VIRTUAL_MAP_SIZE 0x2800 extern struct BackupMapData VMap; +extern const struct MapData Route1_Layout; u32 MapGridGetMetatileIdAt(int, int); u32 MapGridGetMetatileBehaviorAt(int, int); diff --git a/include/graphics.h b/include/graphics.h index 04d05da2b..f48f7f8ca 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -160,6 +160,7 @@ extern const u32 gTMCase_TMSpriteGfx[]; extern const u32 gUnknown_8E84F20[]; extern const u32 gUnknown_8E85068[]; extern const u8 gUnknown_8E99118[]; +extern const u16 gTMCaseMainWindowPalette[]; // egg_hatch extern const u32 gBattleTextboxTiles[]; @@ -168,4 +169,10 @@ extern const u32 gBattleTextboxPalette[]; extern const u32 gTradeGba2_Pal[]; extern const u32 gTradeGba_Gfx[]; +// teachy_tv +extern const u8 gUnknown_8E86240[]; +extern const u8 gUnknown_8E86BE8[]; +extern const u8 gUnknown_8E86D6C[]; +extern const u8 gUnknown_8E86F98[]; + #endif //GUARD_GRAPHICS_H diff --git a/include/list_menu.h b/include/list_menu.h index fe42651b6..79dc3ec3f 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -9,8 +9,8 @@ struct ListMenuItem { - const u8 *unk_00; - s32 unk_04; + const u8 *label; + s32 index; }; struct ListMenu; diff --git a/include/main.h b/include/main.h index 6e9d2a25d..a250475cb 100644 --- a/include/main.h +++ b/include/main.h @@ -3,8 +3,6 @@ #include "global.h" -#include "global.h" - typedef void (*MainCallback)(void); typedef void (*IntrCallback)(void); typedef void (*IntrFunc)(void); diff --git a/include/sprite.h b/include/sprite.h index bc47f7100..fb0f710e8 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -232,6 +232,8 @@ struct OamMatrix s16 d; }; +typedef void (*SpriteCallback)(struct Sprite *); + extern const struct OamData gDummyOamData; extern const union AnimCmd *const gDummySpriteAnimTable[]; extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[]; diff --git a/include/strings.h b/include/strings.h index 6af1b0d69..51aeb376a 100644 --- a/include/strings.h +++ b/include/strings.h @@ -113,6 +113,27 @@ extern const u8 gText_ICanPayThisMuch_WouldThatBeOkay[]; extern const u8 gText_TurnedOverItemsWorthYen[]; extern const u8 gPokeDudeText_TMTypes[]; extern const u8 gPokeDudeText_ReadTMDescription[]; -extern const u16 gTMCaseMainWindowPalette[]; + +// teachy_tv +extern const u8 gUnknown_841B7A4[]; +extern const u8 gUnknown_841B7BC[]; +extern const u8 gUnknown_841B7D6[]; +extern const u8 gUnknown_841B7EE[]; +extern const u8 gUnknown_841B807[]; +extern const u8 gUnknown_841B81B[]; +extern const u8 gUnknown_841B836[]; +extern const u8 gUnknown_841B83D[]; +extern const u8 gUnknown_841B8BF[]; +extern const u8 gUnknown_841BB40[]; +extern const u8 gUnknown_841BE76[]; +extern const u8 gUnknown_841C23B[]; +extern const u8 gUnknown_841C459[]; +extern const u8 gUnknown_841C82A[]; +extern const u8 gUnknown_841BA41[]; +extern const u8 gUnknown_841BD10[]; +extern const u8 gUnknown_841C0AF[]; +extern const u8 gUnknown_841C384[]; +extern const u8 gUnknown_841C7B4[]; +extern const u8 gUnknown_841C994[]; #endif //GUARD_STRINGS_H diff --git a/src/fame_checker.c b/src/fame_checker.c index 740c9b9cf..75b61ce53 100644 --- a/src/fame_checker.c +++ b/src/fame_checker.c @@ -1341,14 +1341,14 @@ static void FC_DoMoveCursor(s32 itemIndex, bool8 onInit) u16 who; ListMenuGetScrollAndRow(sFameCheckerData->listMenuTaskId, &listY, &cursorY); who = listY + cursorY; - AddTextPrinterParameterized4(FCWINDOWID_LIST, 2, 8, 14 * cursorY + 4, 0, 0, &sTextColor_Green, 0, sListMenuItems[itemIndex].unk_00); + AddTextPrinterParameterized4(FCWINDOWID_LIST, 2, 8, 14 * cursorY + 4, 0, 0, &sTextColor_Green, 0, sListMenuItems[itemIndex].label); if (!onInit) { if (listY < sFameCheckerData->listMenuTopIdx2) sFameCheckerData->listMenuDrawnSelIdx++; else if (listY > sFameCheckerData->listMenuTopIdx2 && who != sFameCheckerData->numUnlockedPersons - 1) sFameCheckerData->listMenuDrawnSelIdx--; - AddTextPrinterParameterized4(FCWINDOWID_LIST, 2, 8, 14 * sFameCheckerData->listMenuDrawnSelIdx + 4, 0, 0, &sTextColor_DkGrey, 0, sListMenuItems[sFameCheckerData->listMenuCurIdx].unk_00); + AddTextPrinterParameterized4(FCWINDOWID_LIST, 2, 8, 14 * sFameCheckerData->listMenuDrawnSelIdx + 4, 0, 0, &sTextColor_DkGrey, 0, sListMenuItems[sFameCheckerData->listMenuCurIdx].label); } sFameCheckerData->listMenuCurIdx = itemIndex; @@ -1368,20 +1368,20 @@ static u8 FC_PopulateListMenu(void) { if (sTrainerIdxs[fameCheckerIdx] < FC_NONTRAINER_START) { - sListMenuItems[nitems].unk_00 = gTrainers[sTrainerIdxs[fameCheckerIdx]].trainerName; - sListMenuItems[nitems].unk_04 = nitems; + sListMenuItems[nitems].label = gTrainers[sTrainerIdxs[fameCheckerIdx]].trainerName; + sListMenuItems[nitems].index = nitems; } else { - sListMenuItems[nitems].unk_00 = sNonTrainerNamePointers[sTrainerIdxs[fameCheckerIdx] - FC_NONTRAINER_START]; - sListMenuItems[nitems].unk_04 = nitems; + sListMenuItems[nitems].label = sNonTrainerNamePointers[sTrainerIdxs[fameCheckerIdx] - FC_NONTRAINER_START]; + sListMenuItems[nitems].index = nitems; } sFameCheckerData->unlockedPersons[nitems] = fameCheckerIdx; nitems++; } } - sListMenuItems[nitems].unk_00 = gFameCheckerText_Cancel; - sListMenuItems[nitems].unk_04 = nitems; + sListMenuItems[nitems].label = gFameCheckerText_Cancel; + sListMenuItems[nitems].index = nitems; sFameCheckerData->unlockedPersons[nitems] = 0xFF; nitems++; gFameChecker_ListMenuTemplate.totalItems = nitems; diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index 16e01f362..9ff96eb23 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -703,7 +703,7 @@ u32 MysteryGift_HandleThreeOptionMenu(u8 * unused0, u16 * unused1, u8 whichMenu) width = 0; for (i = 0; i < listMenuTemplate.totalItems; i++) { - u32 curWidth = GetStringWidth(2, listMenuTemplate.items[i].unk_00, listMenuTemplate.lettersSpacing); + u32 curWidth = GetStringWidth(2, listMenuTemplate.items[i].label, listMenuTemplate.lettersSpacing); if (curWidth > width) width = curWidth; } diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 6f1fcef3c..368508b77 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -1,4 +1,3 @@ -#include "main.h" #include "task.h" #include "menu.h" #include "palette.h" @@ -31,6 +30,9 @@ #include "help_system.h" #include "overworld.h" #include "unk_8159F40.h" +#include "graphics.h" +#include "fieldmap.h" +#include "strings.h" struct TeachyTvCtrlBlk { @@ -57,14 +59,6 @@ struct TeachyTvBuf EWRAM_DATA struct TeachyTvCtrlBlk gTeachyTV_StaticResources = {0}; EWRAM_DATA struct TeachyTvBuf * gUnknown_203F450 = NULL; -extern const struct SpritePalette gUnknown_83A5348; -extern const struct SpriteTemplate * const gUnknown_83A0010[]; -extern const struct MapData Route1_Layout; -extern const u8 gUnknown_841B7A4[], gUnknown_841B7BC[], gUnknown_841B7D6[], gUnknown_841B7EE[], gUnknown_841B807[], gUnknown_841B81B[], gUnknown_841B836[], gUnknown_841B83D[], gUnknown_841B8BF[], gUnknown_841BB40[], gUnknown_841BE76[], gUnknown_841C23B[], gUnknown_841C459[], gUnknown_841C82A[], gUnknown_841BA41[], gUnknown_841BD10[], gUnknown_841C0AF[], gUnknown_841C384[], gUnknown_841C7B4[], gUnknown_841C994[]; -extern const u8 gUnknown_8E86240[]; -extern const u8 gUnknown_8E86BE8[]; -extern const u8 gUnknown_8E86D6C[]; -extern const u8 gUnknown_8E86F98[]; void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId); void TeachyTvClusFuncClearBg2TeachyTvGraphic(u8 taskId); @@ -189,57 +183,57 @@ const struct WindowTemplate gTeachyTvWindowTemplateArray[] = const struct ListMenuItem gTeachyTvListMenuItemArray[] = { { - .unk_00 = gUnknown_841B7A4, - .unk_04 = 0, + .label = gUnknown_841B7A4, + .index = 0, }, { - .unk_00 = gUnknown_841B7BC, - .unk_04 = 1, + .label = gUnknown_841B7BC, + .index = 1, }, { - .unk_00 = gUnknown_841B7D6, - .unk_04 = 2, + .label = gUnknown_841B7D6, + .index = 2, }, { - .unk_00 = gUnknown_841B7EE, - .unk_04 = 3, + .label = gUnknown_841B7EE, + .index = 3, }, { - .unk_00 = gUnknown_841B807, - .unk_04 = 4, + .label = gUnknown_841B807, + .index = 4, }, { - .unk_00 = gUnknown_841B81B, - .unk_04 = 5, + .label = gUnknown_841B81B, + .index = 5, }, { - .unk_00 = gUnknown_841B836, - .unk_04 = -2, + .label = gUnknown_841B836, + .index = -2, }, }; const struct ListMenuItem gTeachyTvListMenuItemArray2[] = { { - .unk_00 = gUnknown_841B7A4, - .unk_04 = 0, + .label = gUnknown_841B7A4, + .index = 0, }, { - .unk_00 = gUnknown_841B7BC, - .unk_04 = 1, + .label = gUnknown_841B7BC, + .index = 1, }, { - .unk_00 = gUnknown_841B7D6, - .unk_04 = 2, + .label = gUnknown_841B7D6, + .index = 2, }, { - .unk_00 = gUnknown_841B7EE, - .unk_04 = 3, + .label = gUnknown_841B7EE, + .index = 3, }, { - .unk_00 = gUnknown_841B836, - .unk_04 = -2, + .label = gUnknown_841B836, + .index = -2, }, }; @@ -428,86 +422,6 @@ void (* const * const gTeachyTvFuncClusterArray[])(u8) = gTeachyTvFuncCluster5, }; -const u8 * const gTeachyTvTextArray1[] = -{ - gUnknown_841B8BF, - gUnknown_841BB40, - gUnknown_841BE76, - gUnknown_841C23B, - gUnknown_841C459, - gUnknown_841C82A, -}; - -const u8 * const gTeachyTvTextArray2[] = -{ - gUnknown_841BA41, - gUnknown_841BD10, - gUnknown_841C0AF, - gUnknown_841C384, - gUnknown_841C7B4, - gUnknown_841C994, -}; - -const u16 gUnknown_8479590[] = -{ - 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, - 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, -}; - -const struct Subsprite gTeachyTvSubspriteArray[] = -{ - { - .x = -0x8, - .y = -0x8, - .shape = 0x1, - .size = 0x0, - .tileOffset = 0x0, - .priority = 0x3, - }, - { - .x = -0x8, - .y = 0x0, - .shape = 0x1, - .size = 0x0, - .tileOffset = 0x2, - .priority = 0x2, - }, -}; - -const struct SubspriteTable gTeachyTvSubspriteTableArray[] = -{ - { - .subspriteCount = 0, - .subsprites = NULL, - }, - { - .subspriteCount = 2, - .subsprites = gTeachyTvSubspriteArray, - }, -}; - -const u8 gTeachyTvGrassAnimArray[] = -{ - 0, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 1, 1, 1, 0, 0, -}; - void TeachyTvCallback(void) { RunTasks(); @@ -754,7 +668,7 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) { s16 *data = gTasks[taskId].data; int v1 = data[1]; - struct Sprite *v3 = &gSprites[v1]; + struct Sprite *objAddr = &gSprites[v1]; int op; ClearWindowTilemap(1); @@ -776,7 +690,7 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) data[4] = 0; data[5] = 0; - TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 1); + TeachyTvGrassAnimationMain(taskId, objAddr->pos2.x, objAddr->pos2.y, 0, 1); } void TeachyTvInitTextPrinter(const char *text) @@ -811,7 +725,7 @@ void TeachyTvQuitFadeControlAndTaskDel(u8 taskId) else { sub_8055DC4(); - SetMainCallback2((void (*)())gTeachyTV_StaticResources.callback); + SetMainCallback2(gTeachyTV_StaticResources.callback); } TeachyTvFree(); DestroyTask(taskId); @@ -940,7 +854,15 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) { s16 *data = gTasks[taskId].data; - const u8 * const* texts = gTeachyTvTextArray1; + const u8 * const *texts = (const u8 *const []) + { + gUnknown_841B8BF, + gUnknown_841BB40, + gUnknown_841BE76, + gUnknown_841C23B, + gUnknown_841C459, + gUnknown_841C82A, + }; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; } @@ -948,11 +870,79 @@ void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) { s16 *data = gTasks[taskId].data; - const u8 * const* texts = gTeachyTvTextArray2; + const u8 * const *texts = (const u8 *const []) + { + gUnknown_841BA41, + gUnknown_841BD10, + gUnknown_841C0AF, + gUnknown_841C384, + gUnknown_841C7B4, + gUnknown_841C994, + }; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; } +const u16 gUnknown_8479590[] = +{ + 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, + 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, +}; + +const struct Subsprite gTeachyTvSubspriteArray[] = +{ + { + .x = -0x8, + .y = -0x8, + .shape = 0x1, + .size = 0x0, + .tileOffset = 0x0, + .priority = 0x3, + }, + { + .x = -0x8, + .y = 0x0, + .shape = 0x1, + .size = 0x0, + .tileOffset = 0x2, + .priority = 0x2, + }, +}; + +const struct SubspriteTable gTeachyTvSubspriteTableArray[] = +{ + { + .subspriteCount = 0, + .subsprites = NULL, + }, + { + .subspriteCount = 2, + .subsprites = gTeachyTvSubspriteArray, + }, +}; + +const u8 gTeachyTvGrassAnimArray[] = +{ + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 0, 0, +}; + void TeachyTvClusFuncIdleIfTextPrinterIsActive2(u8 taskId) { s16 *data = (u16 *)gTasks[taskId].data; @@ -1027,25 +1017,25 @@ void TeachyTvClusFuncDudeTurnLeft(u8 taskId) { s16 *data = gTasks[taskId].data; - struct Sprite *v3 = &gSprites[data[1]]; - StartSpriteAnim(v3, 6); + struct Sprite *objAddr = &gSprites[data[1]]; + StartSpriteAnim(objAddr, 6); ++data[3]; data[4] = 0; data[5] = 0; - TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 0); + TeachyTvGrassAnimationMain(taskId, objAddr->pos2.x, objAddr->pos2.y, 0, 0); } void TeachyTvClusFuncDudeMoveLeft(u8 taskId) { s16 *data = gTasks[taskId].data; - struct Sprite *v2 = &gSprites[data[1]]; + struct Sprite *objAddr = &gSprites[data[1]]; - if (!(v2->pos2.x & 0xF)) - TeachyTvGrassAnimationMain(taskId, v2->pos2.x - 8, v2->pos2.y, 0, 0); - if (v2->pos2.x == 8) + if (!(objAddr->pos2.x & 0xF)) + TeachyTvGrassAnimationMain(taskId, objAddr->pos2.x - 8, objAddr->pos2.y, 0, 0); + if (objAddr->pos2.x == 8) ++data[3]; else - --v2->pos2.x; + --objAddr->pos2.x; } void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) diff --git a/src/tm_case.c b/src/tm_case.c index a436269f3..026ba95a7 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -496,11 +496,11 @@ static void InitTMCaseListMenuItems(void) for (i = 0; i < sTMCaseDynamicResources->numTMs; i++) { GetTMNumberAndMoveString(sListMenuStringsBuffer[i], pocket->itemSlots[i].itemId); - sListMenuItemsBuffer[i].unk_00 = sListMenuStringsBuffer[i]; - sListMenuItemsBuffer[i].unk_04 = i; + sListMenuItemsBuffer[i].label = sListMenuStringsBuffer[i]; + sListMenuItemsBuffer[i].index = i; } - sListMenuItemsBuffer[i].unk_00 = gText_Close; - sListMenuItemsBuffer[i].unk_04 = -2; + sListMenuItemsBuffer[i].label = gText_Close; + sListMenuItemsBuffer[i].index = -2; gMultiuseListMenuTemplate.items = sListMenuItemsBuffer; gMultiuseListMenuTemplate.totalItems = sTMCaseDynamicResources->numTMs + 1; gMultiuseListMenuTemplate.windowId = 0; -- cgit v1.2.3 From c28365392e7f5f3f2101f48fd8b43d22f496fd1d Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 11 Jun 2019 05:44:21 +0800 Subject: struct ScrollArrowsTemplate --- include/menu_indicators.h | 27 +++++++++++++-------------- src/fame_checker.c | 7 +++---- src/mevent_8145654.c | 8 ++++---- src/teachy_tv.c | 27 +++++++++++++-------------- 4 files changed, 33 insertions(+), 36 deletions(-) diff --git a/include/menu_indicators.h b/include/menu_indicators.h index 8c669aeef..76f25224c 100644 --- a/include/menu_indicators.h +++ b/include/menu_indicators.h @@ -7,25 +7,24 @@ // Exported RAM declarations -struct ScrollIndicatorArrowPairTemplate +struct ScrollArrowsTemplate { - u8 unk_00; - u8 unk_01; - u8 unk_02; - u8 unk_03; - u8 unk_04; - u8 unk_05; - u16 unk_06; - u16 unk_08; - u16 unk_0a; - u16 unk_0c; - u16 unk_0e_0:4; - u16 unk_0e_4:12; + u8 firstArrowType; + u8 firstX; + u8 firstY; + u8 secondArrowType; + u8 secondX; + u8 secondY; + u16 fullyUpThreshold; + u16 fullyDownThreshold; + u16 tileTag; + u16 palTag; + u8 palNum; }; // Exported ROM declarations u8 AddScrollIndicatorArrowPairParameterized(u8, u8, u8, u8, s32, u16, u16, u16 *); -u8 AddScrollIndicatorArrowPair(const struct ScrollIndicatorArrowPairTemplate * template, u16 * a1); +u8 AddScrollIndicatorArrowPair(const struct ScrollArrowsTemplate * template, u16 * a1); void RemoveScrollIndicatorArrowPair(u8); #endif //GUARD_MENU_INDICATORS_H diff --git a/src/fame_checker.c b/src/fame_checker.c index 75b61ce53..b2ee17c93 100644 --- a/src/fame_checker.c +++ b/src/fame_checker.c @@ -1400,7 +1400,7 @@ static void FC_PutWindowTilemapAndCopyWindowToVramMode3_2(u8 windowId) static void FC_CreateScrollIndicatorArrowPair(void) { - struct ScrollIndicatorArrowPairTemplate template = { + struct ScrollArrowsTemplate template = { 2, 40, 26, @@ -1412,13 +1412,12 @@ static void FC_CreateScrollIndicatorArrowPair(void) SPRITETAG_SCROLL_INDICATORS, 0xFFFF, 1, - 0 }; if (sFameCheckerData->numUnlockedPersons > 5) { - template.unk_06 = 0; - template.unk_08 = sFameCheckerData->numUnlockedPersons - 5; + template.fullyUpThreshold = 0; + template.fullyDownThreshold = sFameCheckerData->numUnlockedPersons - 5; sFameCheckerData->scrollIndicatorPairTaskId = AddScrollIndicatorArrowPair(&template, &sFameCheckerData->listMenuTopIdx); } } diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index 3e484bd56..034a07679 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -460,7 +460,7 @@ struct UnkStruct_203F3CC /*01cc*/ u8 filler_01CC[2]; /*01ce*/ u8 unk_01CE[41]; /*01f7*/ u8 unk_01F7[10][41]; - /*0394*/ struct ScrollIndicatorArrowPairTemplate unk_0394; + /*0394*/ struct ScrollArrowsTemplate unk_0394; /*03a4*/ u8 buffer_03A4[0x1000]; }; @@ -478,9 +478,9 @@ const struct WindowTemplate gUnknown_8468040[] = { {0, 1, 0, 28, 3, 15, 0x000}, {2, 1, 3, 28, 20, 15, 0x000} }; -const struct ScrollIndicatorArrowPairTemplate gUnknown_8468050 = { +const struct ScrollArrowsTemplate gUnknown_8468050 = { 0x02, 0xe8, 0x18, 0x03, 0xe8, 0x98, - 0x0000, 0x0002, 0x1000, 0x1000, 0x0, 0x000 + 0x0000, 0x0002, 0x1000, 0x1000, 0x0, }; const u16 gUnknown_8468060[] = INCBIN_U16("data/graphics/mevent/pal_468060.gbapal"); @@ -743,7 +743,7 @@ void sub_8146980(void) ++gUnknown_203F3CC->unk_01C4; } gUnknown_203F3CC->unk_0394 = gUnknown_8468050; - gUnknown_203F3CC->unk_0394.unk_08 = gUnknown_203F3CC->unk_01C4; + gUnknown_203F3CC->unk_0394.fullyDownThreshold = gUnknown_203F3CC->unk_01C4; } void sub_8146A30(void) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 368508b77..c04fade26 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -259,20 +259,19 @@ const struct ListMenuTemplate gTeachyTvListMenuTemplateArray = .cursorKind = 0x0, }; -const struct ScrollIndicatorArrowPairTemplate gTeachyTvScrollIndicatorArrowPairTemplateArray = -{ - .unk_00 = 0x2, - .unk_01 = 0x78, - .unk_02 = 0xC, - .unk_03 = 0x3, - .unk_04 = 0x78, - .unk_05 = 0x64, - .unk_06 = 0x0, - .unk_08 = 0x1, - .unk_0a = 0x800, - .unk_0c = 0x800, - .unk_0e_0 = 0x0, - .unk_0e_4 = 0x0, +const struct ScrollArrowsTemplate gTeachyTvScrollIndicatorArrowPairTemplateArray = +{ + .firstArrowType = 0x2, + .firstX = 0x78, + .firstY = 0xC, + .secondArrowType = 0x3, + .secondX = 0x78, + .secondY = 0x64, + .fullyUpThreshold = 0x0, + .fullyDownThreshold = 0x1, + .tileTag = 0x800, + .palTag = 0x800, + .palNum = 0x0, }; const u8 gTeachyTvSwitchFuncArray[] = -- cgit v1.2.3 From 33530548d6bd9cb8b424a59891f26e255e4647fa Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 11 Jun 2019 06:23:09 +0800 Subject: TeachyTvPushBackNewMapPalIndexArrayEntry --- src/teachy_tv.c | 84 +-------------------------------------------------------- 1 file changed, 1 insertion(+), 83 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index c04fade26..94e1fc409 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -1595,97 +1595,15 @@ void TeachyTvLoadMapTilesetToBuffer(struct Tileset *ts, u8 *dstBuffer, u16 size) } } -#ifdef NONMATCHING void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1, u8 *palIndexArray, u16 mapEntry, u16 offset) { struct Tileset *ts; - u16 *metaTileEntryAddr; - int temp = mapEntry; - - if (temp <= 0x27F) - { - ts = mStruct->primaryTileset; - } - else - { - ts = mStruct->secondaryTileset; - temp = mapEntry - 0x280; - } - metaTileEntryAddr = &((u16*)(ts->metatiles))[8 * temp]; + u16 * metaTileEntryAddr = mapEntry <= 0x27F ? &((u16*)(mStruct->primaryTileset->metatiles))[8 * mapEntry] : &((u16*)(mStruct->secondaryTileset->metatiles))[8 * (mapEntry - 0x280)]; buf1[0] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[0]) << 12) + 4 * offset; buf1[1] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[1]) << 12) + 4 * offset + 1; buf1[32] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[2]) << 12) + 4 * offset + 2; buf1[33] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[3]) << 12) + 4 * offset + 3; } -#else -NAKED -void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1, u8 *palIndexArray, u16 mapEntry, u16 offset) -{ - asm_unified("\n\ - push {r4-r7,lr}\n\ - adds r5, r0, 0\n\ - adds r7, r1, 0\n\ - adds r6, r2, 0\n\ - ldr r0, [sp, 0x14]\n\ - lsls r3, 16\n\ - lsrs r1, r3, 16\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - ldr r0, _0815BF8C @ =0x0000027f\n\ - cmp r1, r0\n\ - bhi _0815BF90\n\ - ldr r0, [r5, 0x10]\n\ - b _0815BF96\n\ - .align 2, 0\n\ - _0815BF8C: .4byte 0x0000027f\n\ - _0815BF90:\n\ - ldr r0, [r5, 0x14]\n\ - ldr r2, _0815BFEC @ =0xfffffd80\n\ - adds r1, r2\n\ - _0815BF96:\n\ - lsls r1, 4\n\ - ldr r0, [r0, 0xC]\n\ - adds r5, r0, r1\n\ - ldrh r1, [r5]\n\ - adds r0, r6, 0\n\ - bl TeachyTvComputePalIndexArrayEntryByMetaTile\n\ - lsls r0, 12\n\ - lsls r4, 2\n\ - adds r0, r4\n\ - strh r0, [r7]\n\ - ldrh r1, [r5, 0x2]\n\ - adds r0, r6, 0\n\ - bl TeachyTvComputePalIndexArrayEntryByMetaTile\n\ - lsls r0, 12\n\ - adds r0, r4\n\ - adds r0, 0x1\n\ - strh r0, [r7, 0x2]\n\ - ldrh r1, [r5, 0x4]\n\ - adds r0, r6, 0\n\ - bl TeachyTvComputePalIndexArrayEntryByMetaTile\n\ - adds r1, r7, 0\n\ - adds r1, 0x40\n\ - lsls r0, 12\n\ - adds r0, r4\n\ - adds r0, 0x2\n\ - strh r0, [r1]\n\ - ldrh r1, [r5, 0x6]\n\ - adds r0, r6, 0\n\ - bl TeachyTvComputePalIndexArrayEntryByMetaTile\n\ - adds r1, r7, 0\n\ - adds r1, 0x42\n\ - lsls r0, 12\n\ - adds r0, r4\n\ - adds r0, 0x3\n\ - strh r0, [r1]\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ - _0815BFEC: .4byte 0xfffffd80\n\ - "); -} -#endif void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blockBuf, u8 *tileset) { -- cgit v1.2.3 From 7d8272749feaf89f972eb0789389fd5ab7f57ae6 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 11 Jun 2019 06:24:49 +0800 Subject: quick fix --- src/teachy_tv.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 94e1fc409..dd5356670 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -1597,7 +1597,6 @@ void TeachyTvLoadMapTilesetToBuffer(struct Tileset *ts, u8 *dstBuffer, u16 size) void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1, u8 *palIndexArray, u16 mapEntry, u16 offset) { - struct Tileset *ts; u16 * metaTileEntryAddr = mapEntry <= 0x27F ? &((u16*)(mStruct->primaryTileset->metatiles))[8 * mapEntry] : &((u16*)(mStruct->secondaryTileset->metatiles))[8 * (mapEntry - 0x280)]; buf1[0] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[0]) << 12) + 4 * offset; buf1[1] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[1]) << 12) + 4 * offset + 1; -- cgit v1.2.3 From e87ae0c76d63b9806712a74d07b87801861efc4e Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 11 Jun 2019 06:33:55 +0800 Subject: more consistency --- src/teachy_tv.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index dd5356670..0b6907186 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -972,11 +972,8 @@ void TeachyTvClusFuncStartAnimNpcWalkIntoGrass(u8 taskId) void TeachyTvClusFuncDudeMoveUp(u8 taskId) { - s16 *data; - struct Sprite *obj; - - data = gTasks[taskId].data; - obj = &gSprites[data[1]]; + s16 *data = gTasks[taskId].data; + struct Sprite *obj = &gSprites[data[1]]; ChangeBgY(3, 0x100, 2); if (!(++data[2] & 0xF)) { @@ -1125,13 +1122,12 @@ void TeachyTvPostBattleFadeControl(u8 taskId) void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode) { - u8 subprio; int res; struct Sprite *obj; int objId; const struct SpriteTemplate *const *objTemAddr; - subprio = subpriority; + u8 subprio = subpriority; if (gUnknown_203F450->var_4006 != 1) { res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(x - 0x10, y); @@ -1205,10 +1201,7 @@ u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y) void TeachyTvPrepBattle(u8 taskId) { - s16 *data; - - taskId = taskId; - data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; TeachyTvFree(); gSpecialVar_0x8004 = gTeachyTV_StaticResources.optionChosen; gMain.savedCallback = TeachyTvRestorePlayerPartyCallback; -- cgit v1.2.3 From 191f3f783fb9472403537d08c914c03422c1a831 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 11 Jun 2019 07:24:12 +0800 Subject: savedCallback field --- src/teachy_tv.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 0b6907186..ae1e8086a 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -46,7 +46,7 @@ struct TeachyTvCtrlBlk struct TeachyTvBuf { - u32 state; + MainCallback savedCallback; u8 buffer1[0x1000]; u8 buffer2[0x1000]; u8 buffer3[0x1000]; @@ -476,7 +476,7 @@ void TeachyTvMainCallback(void) { case 0: gUnknown_203F450 = AllocZeroed(sizeof(struct TeachyTvBuf)); - gUnknown_203F450->state = 0; + gUnknown_203F450->savedCallback = NULL; gUnknown_203F450->var_4006 = 0; gUnknown_203F450->var_4007 = 0xFF; VblankHblankHandlerSetZero(); @@ -717,9 +717,9 @@ void TeachyTvQuitFadeControlAndTaskDel(u8 taskId) { if (!(gPaletteFade.active)) { - if (gUnknown_203F450->state) + if (gUnknown_203F450->savedCallback != NULL) { - SetMainCallback2(*(void (**)())gUnknown_203F450); + SetMainCallback2(gUnknown_203F450->savedCallback); } else { @@ -1094,7 +1094,7 @@ void TeachyTvClusFuncTaskBattleOrFadeByOptionChosen(u8 taskId) } else if (op <= 5) { - *((void(**)())gUnknown_203F450) = TeachyTvSetupBagItemsByOptionChosen; + gUnknown_203F450->savedCallback = TeachyTvSetupBagItemsByOptionChosen; TeachyTvQuitBeginFade(taskId); } } -- cgit v1.2.3 From 3530d21a10332ac613a5ffbb61eb11cf9e1ffba9 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 11 Jun 2019 07:30:51 +0800 Subject: control block callback field --- src/teachy_tv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index ae1e8086a..843d229ce 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -36,7 +36,7 @@ struct TeachyTvCtrlBlk { - void (*callback)(); + MainCallback callback; u8 mode; u8 optionChosen; u16 scrollOffset; -- cgit v1.2.3 From 731b5e103a535086ebf99a2c3a032a7b0e30e74f Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 11 Jun 2019 07:34:22 +0800 Subject: DUMMY_WIN_TEMPLATE --- src/teachy_tv.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 843d229ce..ca2e509a7 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -169,15 +169,7 @@ const struct WindowTemplate gTeachyTvWindowTemplateArray[] = .paletteNum = 0x3, .baseBlock = 0x152, }, - { - .bg = 0xFF, - .tilemapLeft = 0x0, - .tilemapTop = 0x0, - .width = 0x0, - .height = 0x0, - .paletteNum = 0x0, - .baseBlock = 0x0, - }, + DUMMY_WIN_TEMPLATE, }; const struct ListMenuItem gTeachyTvListMenuItemArray[] = -- cgit v1.2.3