diff options
-rw-r--r-- | asm/field_map_obj.s | 6 | ||||
-rw-r--r-- | asm/naming_screen.s | 2 | ||||
-rw-r--r-- | asm/overworld.s | 2 | ||||
-rw-r--r-- | asm/shop.s | 2 | ||||
-rw-r--r-- | asm/teachy_tv.s | 213 | ||||
-rw-r--r-- | include/field_map_obj.h | 2 | ||||
-rw-r--r-- | include/menu_indicators.h | 4 | ||||
-rw-r--r-- | src/fame_checker.c | 2 | ||||
-rw-r--r-- | src/mevent_8145654.c | 4 | ||||
-rw-r--r-- | 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); +} + |