summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/field_map_obj.s6
-rw-r--r--asm/naming_screen.s2
-rw-r--r--asm/overworld.s2
-rw-r--r--asm/shop.s2
-rw-r--r--asm/teachy_tv.s213
-rw-r--r--include/field_map_obj.h2
-rw-r--r--include/menu_indicators.h4
-rw-r--r--src/fame_checker.c2
-rw-r--r--src/mevent_8145654.c4
-rw-r--r--src/teachy_tv.c98
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);
+}
+