4 movement functions

This commit is contained in:
jiangzhengwenjz
2019-06-05 11:13:47 +08:00
parent e07151b346
commit 82e763455c
2 changed files with 240 additions and 413 deletions
-258
View File
@@ -5,264 +5,6 @@
.text .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 thumb_func_start sub_815B8A4
sub_815B8A4: @ 815B8A4 sub_815B8A4: @ 815B8A4
push {r4,lr} push {r4,lr}
+240 -155
View File
@@ -24,6 +24,8 @@
#include "constants/songs.h" #include "constants/songs.h"
#include "constants/items.h" #include "constants/items.h"
typedef struct Task Task;
typedef struct { typedef struct {
void (*callback)(); void (*callback)();
u8 mode; u8 mode;
@@ -36,6 +38,22 @@ typedef struct {
extern TeachyTv_s gTeachyTV_StaticResources; extern TeachyTv_s gTeachyTV_StaticResources;
extern void * gUnknown_203F450; 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 C2TeachyTv();
void C2TeachyTvMainCallback(); void C2TeachyTvMainCallback();
void VblankHandlerTeachyTv(); void VblankHandlerTeachyTv();
@@ -53,35 +71,20 @@ void TeachyTvSetupBg();
void TeachyTvLoadGraphic(); void TeachyTvLoadGraphic();
void TeachyTvPostBattleFadeControl(u8); void TeachyTvPostBattleFadeControl(u8);
void TeachyTvOptionListController(u8); void TeachyTvOptionListController(u8);
void TeachyTvAudioByInput(s32, bool8, struct ListMenu *);
void TeachyTvQuitFadeControlAndTaskDel(u8 taskId);
void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId);
extern void VblankHblankHandlerSetZero(); extern void VblankHblankHandlerSetZero();
extern void sub_812B1E0(u16); 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 *); 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); extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow);
void TeachyTvAudioByInput(s32, bool8, struct ListMenu *);
extern void sub_8055DC4(); extern void sub_8055DC4();
extern void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); 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 bool16 sub_80BF518(u8 textPrinterId);
extern void _call_via_r1(s32 arg, void *func); extern void _call_via_r1(s32 arg, void *func);
extern void (**gUnknown_8479548)(u8);
extern void TeachyTvClearBg1EndGraphicalText(); extern void TeachyTvClearBg1EndGraphicalText();
extern void TeachyTvBackToOptionList(u8 taskId); extern void TeachyTvBackToOptionList(u8 taskId);
extern char * gUnknown_8479560;
extern char * gUnknown_8479578;
void C2TeachyTv() void C2TeachyTv()
{ {
@@ -140,58 +143,58 @@ void C2TeachyTvMainCallback()
state = gMain.state; state = gMain.state;
// tried several ways to reproduce the control flow, but all failed. Now using goto // tried several ways to reproduce the control flow, but all failed. Now using goto
if ( state == 0 ) if ( state == 0 )
goto section_0; goto RESETANDLOAD;
else if ( state == 1 ) else if ( state == 1 )
goto section_1; goto SETDMATOVRAM;
else else
return; return;
section_0: RESETANDLOAD:
v4 = (u8 **)&gUnknown_203F450; v4 = (u8 **)&gUnknown_203F450;
(*v4) = (u8*)AllocZeroed(0x4008u); (*v4) = (u8*)AllocZeroed(0x4008u);
*(u32*)gUnknown_203F450 = (u32)state; *(u32*)gUnknown_203F450 = (u32)state;
*((u8*)gUnknown_203F450 + 0x4006) = state; *((u8*)gUnknown_203F450 + 0x4006) = state;
*((u8*)gUnknown_203F450 + 0x4007) = 0xFF; *((u8*)gUnknown_203F450 + 0x4007) = 0xFF;
VblankHblankHandlerSetZero(); VblankHblankHandlerSetZero();
clear_scheduled_bg_copies_to_vram(); clear_scheduled_bg_copies_to_vram();
ScanlineEffect_Stop(); ScanlineEffect_Stop();
FreeAllSpritePalettes(); FreeAllSpritePalettes();
ResetPaletteFade(); ResetPaletteFade();
ResetSpriteData(); ResetSpriteData();
ResetTasks(); ResetTasks();
TeachyTvSetupBg(); TeachyTvSetupBg();
TeachyTvLoadGraphic(); TeachyTvLoadGraphic();
++gMain.state; ++gMain.state;
return;
SETDMATOVRAM:
if( free_temp_tile_data_buffers_if_possible() == 1 )
return; return;
section_1: TeachyTvCreateAndRenderRbox();
if( free_temp_tile_data_buffers_if_possible() == 1 ) TeachyTvInitIo();
return; if ( gTeachyTV_StaticResources.mode == 2 )
TeachyTvCreateAndRenderRbox(); {
TeachyTvInitIo(); taskId = CreateTask(TeachyTvPostBattleFadeControl, 0);
if ( gTeachyTV_StaticResources.mode == 2 ) gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam();
{ TeachyTvSetupPostBattleWindowAndObj(taskId);
taskId = CreateTask(TeachyTvPostBattleFadeControl, 0); }
gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); else
TeachyTvSetupPostBattleWindowAndObj(taskId); {
} taskId = CreateTask(TeachyTvOptionListController, 0);
else x = (u32)TeachyTvSetupWindow();
{ gTasks[taskId].data[0] = (x << 24) >> 24;
taskId = CreateTask(TeachyTvOptionListController, 0); gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam();
x = (u32)TeachyTvSetupWindow(); TeachyTvSetupScrollIndicatorArrowPair();
gTasks[taskId].data[0] = (x << 24) >> 24; PlayNewMapMusic(BGM_FRLG_TEACHY_TV);
gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); TeachyTvSetWindowRegs();
TeachyTvSetupScrollIndicatorArrowPair(); }
PlayNewMapMusic(BGM_FRLG_TEACHY_TV); schedule_bg_copy_tilemap_to_vram(0);
TeachyTvSetWindowRegs(); schedule_bg_copy_tilemap_to_vram(1u);
} schedule_bg_copy_tilemap_to_vram(2u);
schedule_bg_copy_tilemap_to_vram(0); schedule_bg_copy_tilemap_to_vram(3u);
schedule_bg_copy_tilemap_to_vram(1u); sub_812B1E0(9); // help system something
schedule_bg_copy_tilemap_to_vram(2u); BlendPalettes(0xFFFFFFFF, 0x10u, 0);
schedule_bg_copy_tilemap_to_vram(3u); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10u, 0, 0);
sub_812B1E0(9); // help system something SetVBlankCallback(VblankHandlerTeachyTv);
BlendPalettes(0xFFFFFFFF, 0x10u, 0); SetMainCallback2(C2TeachyTv);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10u, 0, 0);
SetVBlankCallback(VblankHandlerTeachyTv);
SetMainCallback2(C2TeachyTv);
} }
void TeachyTvSetupBg() void TeachyTvSetupBg()
@@ -464,94 +467,94 @@ __attribute__((naked))
void TeachyTvOptionListController(u8 taskId) void TeachyTvOptionListController(u8 taskId)
{ {
asm_unified("\n\ asm_unified("\n\
push {r4-r7,lr}\n\ push {r4-r7,lr}\n\
lsls r0, 24\n\ lsls r0, 24\n\
lsrs r7, r0, 24\n\ lsrs r7, r0, 24\n\
lsls r0, r7, 2\n\ lsls r0, r7, 2\n\
adds r0, r7\n\ adds r0, r7\n\
lsls r0, 3\n\ lsls r0, 3\n\
ldr r1, _0815B31C @ =gTasks+0x8\n\ ldr r1, _0815B31C @ =gTasks+0x8\n\
adds r6, r0, r1\n\ adds r6, r0, r1\n\
bl TeachyTvBg2AnimController\n\ bl TeachyTvBg2AnimController\n\
ldr r0, _0815B320 @ =gPaletteFade\n\ ldr r0, _0815B320 @ =gPaletteFade\n\
ldrb r1, [r0, 0x7]\n\ ldrb r1, [r0, 0x7]\n\
movs r0, 0x80\n\ movs r0, 0x80\n\
ands r0, r1\n\ ands r0, r1\n\
cmp r0, 0\n\ cmp r0, 0\n\
bne _0815B37A\n\ bne _0815B37A\n\
ldrb r0, [r6]\n\ ldrb r0, [r6]\n\
bl ListMenuHandleInput\n\ bl ListMenuHandleInput\n\
adds r5, r0, 0\n\ adds r5, r0, 0\n\
ldrb r0, [r6]\n\ ldrb r0, [r6]\n\
ldr r4, _0815B324 @ =gTeachyTV_StaticResources+6\n\ ldr r4, _0815B324 @ =gTeachyTV_StaticResources+6\n\
adds r2, r4, 0x2\n\ adds r2, r4, 0x2\n\
adds r1, r4, 0\n\ adds r1, r4, 0\n\
bl ListMenuGetScrollAndRow\n\ bl ListMenuGetScrollAndRow\n\
ldr r0, _0815B328 @ =gMain\n\ ldr r0, _0815B328 @ =gMain\n\
ldrh r1, [r0, 0x2E]\n\ ldrh r1, [r0, 0x2E]\n\
movs r0, 0x4\n\ movs r0, 0x4\n\
ands r0, r1\n\ ands r0, r1\n\
cmp r0, 0\n\ cmp r0, 0\n\
beq _0815B30A\n\ beq _0815B30A\n\
subs r0, r4, 0x6\n\ subs r0, r4, 0x6\n\
ldr r1, [r0]\n\ ldr r1, [r0]\n\
ldr r0, _0815B32C @ =UseFameCheckerFromMenu\n\ ldr r0, _0815B32C @ =UseFameCheckerFromMenu\n\
cmp r1, r0\n\ cmp r1, r0\n\
bne _0815B330\n\ bne _0815B330\n\
_0815B30A:\n\ _0815B30A:\n\
movs r0, 0x2\n\ movs r0, 0x2\n\
negs r0, r0\n\ negs r0, r0\n\
cmp r5, r0\n\ cmp r5, r0\n\
beq _0815B330\n\ beq _0815B330\n\
adds r0, 0x1\n\ adds r0, 0x1\n\
cmp r5, r0\n\ cmp r5, r0\n\
bne _0815B33E\n\ bne _0815B33E\n\
b _0815B37A\n\ b _0815B37A\n\
.align 2, 0\n\ .align 2, 0\n\
_0815B31C: .4byte gTasks+0x8\n\ _0815B31C: .4byte gTasks+0x8\n\
_0815B320: .4byte gPaletteFade\n\ _0815B320: .4byte gPaletteFade\n\
_0815B324: .4byte gTeachyTV_StaticResources+6\n\ _0815B324: .4byte gTeachyTV_StaticResources+6\n\
_0815B328: .4byte gMain\n\ _0815B328: .4byte gMain\n\
_0815B32C: .4byte UseFameCheckerFromMenu\n\ _0815B32C: .4byte UseFameCheckerFromMenu\n\
_0815B330:\n\ _0815B330:\n\
movs r0, 0x5\n\ movs r0, 0x5\n\
bl PlaySE\n\ bl PlaySE\n\
adds r0, r7, 0\n\ adds r0, r7, 0\n\
bl TeachyTvQuitBeginFade\n\ bl TeachyTvQuitBeginFade\n\
b _0815B37A\n\ b _0815B37A\n\
_0815B33E:\n\ _0815B33E:\n\
movs r0, 0x5\n\ movs r0, 0x5\n\
bl PlaySE\n\ bl PlaySE\n\
ldr r2, _0815B380 @ =gTeachyTV_StaticResources\n\ ldr r2, _0815B380 @ =gTeachyTV_StaticResources\n\
movs r4, 0\n\ movs r4, 0\n\
strb r5, [r2, 0x5]\n\ strb r5, [r2, 0x5]\n\
ldrb r0, [r6]\n\ ldrb r0, [r6]\n\
adds r1, r2, 0x6\n\ adds r1, r2, 0x6\n\
adds r2, 0x8\n\ adds r2, 0x8\n\
bl DestroyListMenu\n\ bl DestroyListMenu\n\
bl TeachyTvClearWindowRegs\n\ bl TeachyTvClearWindowRegs\n\
movs r0, 0x1\n\ movs r0, 0x1\n\
bl ClearWindowTilemap\n\ bl ClearWindowTilemap\n\
movs r0, 0\n\ movs r0, 0\n\
bl schedule_bg_copy_tilemap_to_vram\n\ bl schedule_bg_copy_tilemap_to_vram\n\
bl TeachyTvRemoveScrollIndicatorArrowPair\n\ bl TeachyTvRemoveScrollIndicatorArrowPair\n\
strh r4, [r6, 0x6]\n\ strh r4, [r6, 0x6]\n\
strh r4, [r6, 0x4]\n\ strh r4, [r6, 0x4]\n\
ldr r1, _0815B384 @ =gTasks\n\ ldr r1, _0815B384 @ =gTasks\n\
lsls r0, r7, 2\n\ lsls r0, r7, 2\n\
adds r0, r7\n\ adds r0, r7\n\
lsls r0, 3\n\ lsls r0, 3\n\
adds r0, r1\n\ adds r0, r1\n\
ldr r1, _0815B388 @ =TeachyTvRenderMsgAndSwitchClusterFuncs\n\ ldr r1, _0815B388 @ =TeachyTvRenderMsgAndSwitchClusterFuncs\n\
str r1, [r0]\n\ str r1, [r0]\n\
_0815B37A:\n\ _0815B37A:\n\
pop {r4-r7}\n\ pop {r4-r7}\n\
pop {r0}\n\ pop {r0}\n\
bx r0\n\ bx r0\n\
.align 2, 0\n\ .align 2, 0\n\
_0815B380: .4byte gTeachyTV_StaticResources\n\ _0815B380: .4byte gTeachyTV_StaticResources\n\
_0815B384: .4byte gTasks\n\ _0815B384: .4byte gTasks\n\
_0815B388: .4byte TeachyTvRenderMsgAndSwitchClusterFuncs\n\ _0815B388: .4byte TeachyTvRenderMsgAndSwitchClusterFuncs\n\
"); ");
} }
#endif #endif
@@ -694,3 +697,85 @@ void TeachyTvClusFuncStartAnimNpcWalkIntoGrass(u8 taskId)
data[5] = 1; data[5] = 1;
++data[3]; ++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;
}