From c18580f58f467c66ea71e24aa7da37ed7052736b Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sun, 5 Apr 2020 13:02:15 +1000 Subject: [PATCH] Decompile func0f0969d0 --- src/game/game_0969d0.c | 79 +++++++++------------------------- src/include/game/game_096890.h | 2 +- src/include/game/game_0969d0.h | 2 +- 3 files changed, 23 insertions(+), 60 deletions(-) diff --git a/src/game/game_0969d0.c b/src/game/game_0969d0.c index c1dc8ac2c..8bf5848ee 100644 --- a/src/game/game_0969d0.c +++ b/src/game/game_0969d0.c @@ -11,68 +11,31 @@ #include "gvars/gvars.h" #include "types.h" -const u32 var7f1ab850[] = {0x46fffe00}; -const u32 var7f1ab854[] = {0x40490fdb}; -const u32 var7f1ab858[] = {0x477fff00}; -const u32 var7f1ab85c[] = {0x46fffe00}; -const u32 var7f1ab860[] = {0x40490fdb}; -const u32 var7f1ab864[] = {0x477fff00}; -const u32 var7f1ab868[] = {0x00000000}; -const u32 var7f1ab86c[] = {0x00000000}; +f32 func0f0969d0(f32 value) +{ + s16 intval; -GLOBAL_ASM( -glabel func0f0969d0 -/* f0969d0: 3c013f80 */ lui $at,0x3f80 -/* f0969d4: 44812000 */ mtc1 $at,$f4 -/* f0969d8: 27bdffe8 */ addiu $sp,$sp,-24 -/* f0969dc: afbf0014 */ sw $ra,0x14($sp) -/* f0969e0: 460c203e */ c.le.s $f4,$f12 -/* f0969e4: 3c01bf80 */ lui $at,0xbf80 -/* f0969e8: 45020004 */ bc1fl .L0f0969fc -/* f0969ec: 44813000 */ mtc1 $at,$f6 -/* f0969f0: 10000010 */ beqz $zero,.L0f096a34 -/* f0969f4: 24047fff */ addiu $a0,$zero,0x7fff -/* f0969f8: 44813000 */ mtc1 $at,$f6 -.L0f0969fc: -/* f0969fc: 3c017f1b */ lui $at,%hi(var7f1ab850) -/* f096a00: 4606603e */ c.le.s $f12,$f6 -/* f096a04: 00000000 */ sll $zero,$zero,0x0 -/* f096a08: 45000003 */ bc1f .L0f096a18 -/* f096a0c: 00000000 */ sll $zero,$zero,0x0 -/* f096a10: 10000008 */ beqz $zero,.L0f096a34 -/* f096a14: 24048001 */ addiu $a0,$zero,-32767 -.L0f096a18: -/* f096a18: c428b850 */ lwc1 $f8,%lo(var7f1ab850)($at) -/* f096a1c: 46086282 */ mul.s $f10,$f12,$f8 -/* f096a20: 4600540d */ trunc.w.s $f16,$f10 -/* f096a24: 44048000 */ mfc1 $a0,$f16 -/* f096a28: 00000000 */ sll $zero,$zero,0x0 -/* f096a2c: 00047c00 */ sll $t7,$a0,0x10 -/* f096a30: 000f2403 */ sra $a0,$t7,0x10 -.L0f096a34: -/* f096a34: 0fc25a44 */ jal func0f096910 -/* f096a38: 00000000 */ sll $zero,$zero,0x0 -/* f096a3c: 44829000 */ mtc1 $v0,$f18 -/* f096a40: 3c014f80 */ lui $at,0x4f80 -/* f096a44: 04410004 */ bgez $v0,.L0f096a58 -/* f096a48: 46809120 */ cvt.s.w $f4,$f18 -/* f096a4c: 44813000 */ mtc1 $at,$f6 -/* f096a50: 00000000 */ sll $zero,$zero,0x0 -/* f096a54: 46062100 */ add.s $f4,$f4,$f6 -.L0f096a58: -/* f096a58: 3c017f1b */ lui $at,%hi(var7f1ab854) -/* f096a5c: c428b854 */ lwc1 $f8,%lo(var7f1ab854)($at) -/* f096a60: 8fbf0014 */ lw $ra,0x14($sp) -/* f096a64: 3c017f1b */ lui $at,%hi(var7f1ab858) -/* f096a68: 46082282 */ mul.s $f10,$f4,$f8 -/* f096a6c: c430b858 */ lwc1 $f16,%lo(var7f1ab858)($at) -/* f096a70: 27bd0018 */ addiu $sp,$sp,0x18 -/* f096a74: 03e00008 */ jr $ra -/* f096a78: 46105003 */ div.s $f0,$f10,$f16 -); + if (value >= 1) { + intval = 0x7fff; + } else if (value <= -1) { + intval = -0x7fff; + } else { + intval = value * 32767.0f; + } + + return (func0f096910(intval) * M_PI) / 65535.0f; +} GLOBAL_ASM( glabel func0f096a7c +.late_rodata +glabel var7f1ab85c +.word 0x46fffe00 +glabel var7f1ab860 +.word 0x40490fdb +glabel var7f1ab864 +.word 0x477fff00 +.text /* f096a7c: 3c013f80 */ lui $at,0x3f80 /* f096a80: 44812000 */ mtc1 $at,$f4 /* f096a84: 27bdffe8 */ addiu $sp,$sp,-24 diff --git a/src/include/game/game_096890.h b/src/include/game/game_096890.h index f844e2b72..91268324e 100644 --- a/src/include/game/game_096890.h +++ b/src/include/game/game_096890.h @@ -4,7 +4,7 @@ #include "types.h" u32 func0f096890(void); -u32 func0f096910(void); +u32 func0f096910(s32 value); u32 func0f096964(void); #endif diff --git a/src/include/game/game_0969d0.h b/src/include/game/game_0969d0.h index 173987d57..d0135be64 100644 --- a/src/include/game/game_0969d0.h +++ b/src/include/game/game_0969d0.h @@ -3,7 +3,7 @@ #include #include "types.h" -u32 func0f0969d0(void); +f32 func0f0969d0(f32 value); u32 func0f096a7c(void); #endif