From 9e222f63ad6046f89cd0fa8e21c25f6f42219faf Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 30 Jun 2020 08:17:54 +1000 Subject: [PATCH] Decompile modelSetAnimSpeed --- src/game/chr/chraction.c | 30 ++++++++++++------------- src/game/game_0b63b0.c | 2 +- src/game/game_113220.c | 4 ++-- src/include/lib/lib_1a500.h | 2 +- src/include/types.h | 8 +++---- src/lib/lib_1a500.c | 44 ++++++++++++++----------------------- 6 files changed, 40 insertions(+), 50 deletions(-) diff --git a/src/game/chr/chraction.c b/src/game/chr/chraction.c index 2589b7e91..766ed3836 100644 --- a/src/game/chr/chraction.c +++ b/src/game/chr/chraction.c @@ -9341,7 +9341,7 @@ void chrGoPosChooseAnimation(struct chrdata *chr) modelSetAnimation(chr->model, anim, flip, 0, sp64, sp60); if (animspeed > 0) { - func0001deb0(chr->model, animspeed, startframe); + modelSetAnimSpeed(chr->model, animspeed, startframe); } } } @@ -13192,7 +13192,7 @@ void chrTickDie(struct chrdata *chr) if (modelGetCurAnimFrame(model) >= func0001d1a0(model)) { if (CHRRACE(chr) == RACE_HUMAN && modelGetAnimNum(model) == ANIM_DEATH_STOMACH_LONG) { modelSetAnimation(model, ANIM_003C, !modelIsFlipped(model), 50, 0.3, animGetNumFrames(ANIM_003C) - 51.0f); - func0001deb0(model, 0.5, animGetNumFrames(ANIM_003C) - 51.0f); + modelSetAnimSpeed(model, 0.5, animGetNumFrames(ANIM_003C) - 51.0f); return; } @@ -18429,13 +18429,13 @@ glabel var7f1a918c /* f042420: 4406b000 */ mfc1 $a2,$f22 /* f042424: 4405c000 */ mfc1 $a1,$f24 /* f042428: 4406b000 */ mfc1 $a2,$f22 -/* f04242c: 0c0077ac */ jal func0001deb0 +/* f04242c: 0c0077ac */ jal modelSetAnimSpeed /* f042430: 02602025 */ or $a0,$s3,$zero /* f042434: 10000070 */ b .L0f0425f8 /* f042438: 26310001 */ addiu $s1,$s1,0x1 /* f04243c: 4406b000 */ mfc1 $a2,$f22 .L0f042440: -/* f042440: 0c0077ac */ jal func0001deb0 +/* f042440: 0c0077ac */ jal modelSetAnimSpeed /* f042444: 34a5cccd */ ori $a1,$a1,0xcccd /* f042448: 3c0e800a */ lui $t6,%hi(g_Vars+0x38) /* f04244c: 8dce9ff8 */ lw $t6,%lo(g_Vars+0x38)($t6) @@ -18446,14 +18446,14 @@ glabel var7f1a918c /* f042460: 4405c000 */ mfc1 $a1,$f24 .L0f042464: /* f042464: 4406b000 */ mfc1 $a2,$f22 -/* f042468: 0c0077ac */ jal func0001deb0 +/* f042468: 0c0077ac */ jal modelSetAnimSpeed /* f04246c: 02602025 */ or $a0,$s3,$zero /* f042470: 10000061 */ b .L0f0425f8 /* f042474: 26310001 */ addiu $s1,$s1,0x1 .L0f042478: /* f042478: 4405c000 */ mfc1 $a1,$f24 /* f04247c: 4406b000 */ mfc1 $a2,$f22 -/* f042480: 0c0077ac */ jal func0001deb0 +/* f042480: 0c0077ac */ jal modelSetAnimSpeed /* f042484: 02602025 */ or $a0,$s3,$zero /* f042488: 1000005b */ b .L0f0425f8 /* f04248c: 26310001 */ addiu $s1,$s1,0x1 @@ -18474,7 +18474,7 @@ glabel var7f1a918c /* f0424c0: 02002025 */ or $a0,$s0,$zero /* f0424c4: 44050000 */ mfc1 $a1,$f0 /* f0424c8: 4406b000 */ mfc1 $a2,$f22 -/* f0424cc: 0c0077ac */ jal func0001deb0 +/* f0424cc: 0c0077ac */ jal modelSetAnimSpeed /* f0424d0: 02602025 */ or $a0,$s3,$zero /* f0424d4: 10000048 */ b .L0f0425f8 /* f0424d8: 26310001 */ addiu $s1,$s1,0x1 @@ -18484,7 +18484,7 @@ glabel var7f1a918c /* f0424e4: 34c6cccd */ ori $a2,$a2,0xcccd /* f0424e8: 44050000 */ mfc1 $a1,$f0 /* f0424ec: 4406b000 */ mfc1 $a2,$f22 -/* f0424f0: 0c0077ac */ jal func0001deb0 +/* f0424f0: 0c0077ac */ jal modelSetAnimSpeed /* f0424f4: 02602025 */ or $a0,$s3,$zero /* f0424f8: 1000003f */ b .L0f0425f8 /* f0424fc: 26310001 */ addiu $s1,$s1,0x1 @@ -22638,7 +22638,7 @@ glabel var7f1a927c /* f04654c: 00095d40 */ sll $t3,$t1,0x15 /* f046550: 0562002d */ bltzl $t3,.L0f046608 /* f046554: 8fbf0084 */ lw $ra,0x84($sp) -/* f046558: 0c0077ac */ jal func0001deb0 +/* f046558: 0c0077ac */ jal modelSetAnimSpeed /* f04655c: 8e440020 */ lw $a0,0x20($s2) /* f046560: 10000029 */ b .L0f046608 /* f046564: 8fbf0084 */ lw $ra,0x84($sp) @@ -22656,12 +22656,12 @@ glabel var7f1a927c /* f046590: 3c053f26 */ lui $a1,0x3f26 /* f046594: 34a56666 */ ori $a1,$a1,0x6666 /* f046598: 8e440020 */ lw $a0,0x20($s2) -/* f04659c: 0c0077ac */ jal func0001deb0 +/* f04659c: 0c0077ac */ jal modelSetAnimSpeed /* f0465a0: 3c064200 */ lui $a2,0x4200 /* f0465a4: 10000018 */ b .L0f046608 /* f0465a8: 8fbf0084 */ lw $ra,0x84($sp) .L0f0465ac: -/* f0465ac: 0c0077ac */ jal func0001deb0 +/* f0465ac: 0c0077ac */ jal modelSetAnimSpeed /* f0465b0: 8e440020 */ lw $a0,0x20($s2) /* f0465b4: 10000014 */ b .L0f046608 /* f0465b8: 8fbf0084 */ lw $ra,0x84($sp) @@ -22677,13 +22677,13 @@ glabel var7f1a927c /* f0465dc: 3c053ecc */ lui $a1,0x3ecc /* f0465e0: 4406d000 */ mfc1 $a2,$f26 /* f0465e4: 34a5cccd */ ori $a1,$a1,0xcccd -/* f0465e8: 0c0077ac */ jal func0001deb0 +/* f0465e8: 0c0077ac */ jal modelSetAnimSpeed /* f0465ec: 8e440020 */ lw $a0,0x20($s2) /* f0465f0: 10000005 */ b .L0f046608 /* f0465f4: 8fbf0084 */ lw $ra,0x84($sp) /* f0465f8: 4406d000 */ mfc1 $a2,$f26 .L0f0465fc: -/* f0465fc: 0c0077ac */ jal func0001deb0 +/* f0465fc: 0c0077ac */ jal modelSetAnimSpeed /* f046600: 8e440020 */ lw $a0,0x20($s2) /* f046604: 8fbf0084 */ lw $ra,0x84($sp) .L0f046608: @@ -23548,14 +23548,14 @@ void chrTickSkJump(struct chrdata *chr) switch (chr->act_skjump.state) { case SKJUMPSTATE_TAKEOFF: modelSetAnimation(chr->model, ANIM_SKEDAR_JUMPSTART, 0, 0, -1, 8); - func0001deb0(chr->model, 2.5, 0); + modelSetAnimSpeed(chr->model, 2.5, 0); break; case SKJUMPSTATE_AIRBORNE: { u16 sounds[] = { 0x532, 0x533, 0x534 }; func0f0939f8(NULL, chr->prop, sounds[random() % 3], -1, -1, 0, 0, 0, 0, -1, 0, -1, -1, -1, -1); modelSetAnimation(chr->model, ANIM_SKEDAR_JUMPAIR, 0, 0, -1, 16); - func0001deb0(chr->model, 1, 0); + modelSetAnimSpeed(chr->model, 1, 0); } break; } diff --git a/src/game/game_0b63b0.c b/src/game/game_0b63b0.c index 50ff5faec..e3b0a98e8 100644 --- a/src/game/game_0b63b0.c +++ b/src/game/game_0b63b0.c @@ -15060,7 +15060,7 @@ glabel var7f1ad744 /* f0c3270: 8fa90078 */ lw $t1,0x78($sp) /* f0c3274: 8f240020 */ lw $a0,0x20($t9) /* f0c3278: 44059000 */ mfc1 $a1,$f18 -/* f0c327c: 0c0077ac */ jal func0001deb0 +/* f0c327c: 0c0077ac */ jal modelSetAnimSpeed /* f0c3280: afa80048 */ sw $t0,0x48($sp) /* f0c3284: 8fa80048 */ lw $t0,0x48($sp) .L0f0c3288: diff --git a/src/game/game_113220.c b/src/game/game_113220.c index 5146c0c4b..3c81f45c9 100644 --- a/src/game/game_113220.c +++ b/src/game/game_113220.c @@ -696,7 +696,7 @@ glabel func0f113f10 /* f11406c: 24060000 */ addiu $a2,$zero,0x0 /* f114070: 46046182 */ mul.s $f6,$f12,$f4 /* f114074: 44053000 */ mfc1 $a1,$f6 -/* f114078: 0c0077ac */ jal func0001deb0 +/* f114078: 0c0077ac */ jal modelSetAnimSpeed /* f11407c: 00000000 */ nop /* f114080: 3c08800a */ lui $t0,%hi(g_Vars+0x284) /* f114084: 10000004 */ b .L0f114098 @@ -751,7 +751,7 @@ glabel func0f1140bc void func0f11412c(f32 speed) { - func0001deb0(&g_Vars.currentplayer->model, speed * 0.5f, 0); + modelSetAnimSpeed(&g_Vars.currentplayer->model, speed * 0.5f, 0); } f32 func0f11416c(void) diff --git a/src/include/lib/lib_1a500.h b/src/include/lib/lib_1a500.h index b6704dbb8..68ad13904 100644 --- a/src/include/lib/lib_1a500.h +++ b/src/include/lib/lib_1a500.h @@ -67,7 +67,7 @@ u32 func0001dd90(void); void modelSetAnimLooping(struct model *model, f32 loopframe, f32 loopmerge); void func0001de1c(struct model *model, f32 speed); u32 func0001de98(void); -void func0001deb0(struct model *model, f32 speed, f32 startframe); +void modelSetAnimSpeed(struct model *model, f32 speed, f32 startframe); void func0001df04(struct model *model, f32 arg1, f32 arg2); void func0001dfac(struct model *model, f32 arg1, f32 arg2); void modelSetAnim70(struct model *model, void *callback); diff --git a/src/include/types.h b/src/include/types.h index 1cd492bb2..8e3275ef6 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -119,10 +119,10 @@ struct anim { /*0x16*/ s16 frameb; /*0x18*/ u32 endrame; /*0x1c*/ f32 speed; - /*0x20*/ u32 newspeed; - /*0x24*/ u32 oldspeed; - /*0x28*/ u32 timespeed; - /*0x2c*/ u32 elapsespeed; + /*0x20*/ f32 newspeed; + /*0x24*/ f32 oldspeed; + /*0x28*/ f32 timespeed; + /*0x2c*/ f32 elapsespeed; /*0x30*/ u32 frame2; /*0x34*/ u32 frac2; /*0x38*/ u16 frame2a; diff --git a/src/lib/lib_1a500.c b/src/lib/lib_1a500.c index 7568695b8..b2a9c37c6 100644 --- a/src/lib/lib_1a500.c +++ b/src/lib/lib_1a500.c @@ -4331,32 +4331,22 @@ glabel func0001de98 /* 1deac: 00000000 */ nop ); -GLOBAL_ASM( -glabel func0001deb0 -/* 1deb0: 8c820020 */ lw $v0,0x20($a0) -/* 1deb4: 44857000 */ mtc1 $a1,$f14 -/* 1deb8: 44866000 */ mtc1 $a2,$f12 -/* 1debc: 1040000f */ beqz $v0,.L0001defc -/* 1dec0: 00000000 */ nop -/* 1dec4: 44800000 */ mtc1 $zero,$f0 -/* 1dec8: 00000000 */ nop -/* 1decc: 460c003c */ c.lt.s $f0,$f12 -/* 1ded0: 00000000 */ nop -/* 1ded4: 45020008 */ bc1fl .L0001def8 -/* 1ded8: e44e001c */ swc1 $f14,0x1c($v0) -/* 1dedc: c444001c */ lwc1 $f4,0x1c($v0) -/* 1dee0: e44c0028 */ swc1 $f12,0x28($v0) -/* 1dee4: e44e0020 */ swc1 $f14,0x20($v0) -/* 1dee8: e440002c */ swc1 $f0,0x2c($v0) -/* 1deec: 03e00008 */ jr $ra -/* 1def0: e4440024 */ swc1 $f4,0x24($v0) -/* 1def4: e44e001c */ swc1 $f14,0x1c($v0) -.L0001def8: -/* 1def8: e4400028 */ swc1 $f0,0x28($v0) -.L0001defc: -/* 1defc: 03e00008 */ jr $ra -/* 1df00: 00000000 */ nop -); +void modelSetAnimSpeed(struct model *model, f32 speed, f32 startframe) +{ + struct anim *anim = model->anim; + + if (anim) { + if (startframe > 0) { + anim->timespeed = startframe; + anim->newspeed = speed; + anim->elapsespeed = 0; + anim->oldspeed = anim->speed; + } else { + anim->speed = speed; + anim->timespeed = 0; + } + } +} GLOBAL_ASM( glabel func0001df04 @@ -4398,7 +4388,7 @@ glabel func0001df04 /* 1df88: 460e9103 */ div.s $f4,$f18,$f14 /* 1df8c: 46048080 */ add.s $f2,$f16,$f4 /* 1df90: 44051000 */ mfc1 $a1,$f2 -/* 1df94: 0c0077ac */ jal func0001deb0 +/* 1df94: 0c0077ac */ jal modelSetAnimSpeed /* 1df98: 00000000 */ nop .L0001df9c: /* 1df9c: 8fbf0014 */ lw $ra,0x14($sp)