diff options
author | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-06-05 08:19:12 +0800 |
---|---|---|
committer | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-06-05 08:19:12 +0800 |
commit | e07151b34621ba17904871b17e2be8638b584d14 (patch) | |
tree | c90f232d5fb8c23774a167f5908fcc65873bf0c0 | |
parent | a9c9388cdd51216bdf5a5db125eaab0fc3163c67 (diff) |
1 failed attempt + many more functions
-rw-r--r-- | asm/teachy_tv.s | 514 | ||||
-rw-r--r-- | 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 |