diff --git a/src/game/data/data_00e460.c b/src/game/data/data_00e460.c index da9898c55..19837084f 100644 --- a/src/game/data/data_00e460.c +++ b/src/game/data/data_00e460.c @@ -1096,71 +1096,33 @@ u32 var8006ae80 = 0x00000000; u32 var8006ae84 = 0x00000000; u32 var8006ae88 = 0x00000000; u32 var8006ae8c = 0x00000000; -u32 var8006ae90 = 0x80007eba; -u32 var8006ae94 = 0x7d747c2d; -u32 var8006ae98 = 0x7ae779a0; -u32 var8006ae9c = 0x78597711; -u32 var8006aea0 = 0x75c97480; -u32 var8006aea4 = 0x733771ec; -u32 var8006aea8 = 0x70a16f55; -u32 var8006aeac = 0x6e076cb8; -u32 var8006aeb0 = 0x6b686a17; -u32 var8006aeb4 = 0x68c46770; -u32 var8006aeb8 = 0x661a64c1; -u32 var8006aebc = 0x6367620b; -u32 var8006aec0 = 0x60ad5f4c; -u32 var8006aec4 = 0x5de95c83; -u32 var8006aec8 = 0x5b1a59ae; -u32 var8006aecc = 0x583e56cb; -u32 var8006aed0 = 0x555553db; -u32 var8006aed4 = 0x525c50d9; -u32 var8006aed8 = 0x4f514dc5; -u32 var8006aedc = 0x4c324a9a; -u32 var8006aee0 = 0x48fc4757; -u32 var8006aee4 = 0x45ab43f7; -u32 var8006aee8 = 0x423a4075; -u32 var8006aeec = 0x3ea53ccb; -u32 var8006aef0 = 0x3ae538f1; -u32 var8006aef4 = 0x36ef34dc; -u32 var8006aef8 = 0x32b7307d; -u32 var8006aefc = 0x2e2b2bbd; -u32 var8006af00 = 0x292e2678; -u32 var8006af04 = 0x2391206c; -u32 var8006af08 = 0x1cf60000; -u32 var8006af0c = 0x1cf61cbb; -u32 var8006af10 = 0x1c801c45; -u32 var8006af14 = 0x1c081bcc; -u32 var8006af18 = 0x1b8f1b51; -u32 var8006af1c = 0x1b131ad4; -u32 var8006af20 = 0x1a951a55; -u32 var8006af24 = 0x1a1419d3; -u32 var8006af28 = 0x1992194f; -u32 var8006af2c = 0x190c18c9; -u32 var8006af30 = 0x1884183f; -u32 var8006af34 = 0x17f917b3; -u32 var8006af38 = 0x176b1723; -u32 var8006af3c = 0x16da1690; -u32 var8006af40 = 0x164515f9; -u32 var8006af44 = 0x15ac155e; -u32 var8006af48 = 0x150f14be; -u32 var8006af4c = 0x146d141a; -u32 var8006af50 = 0x13c61370; -u32 var8006af54 = 0x131912c1; -u32 var8006af58 = 0x1267120b; -u32 var8006af5c = 0x11ad114e; -u32 var8006af60 = 0x10ec1088; -u32 var8006af64 = 0x10220fb9; -u32 var8006af68 = 0x0f4d0ede; -u32 var8006af6c = 0x0e6c0df7; -u32 var8006af70 = 0x0d7d0d00; -u32 var8006af74 = 0x0c7d0bf4; -u32 var8006af78 = 0x0b660ad0; -u32 var8006af7c = 0x0a310989; -u32 var8006af80 = 0x08d3080e; -u32 var8006af84 = 0x0734063d; -u32 var8006af88 = 0x0518039a; -u32 var8006af8c = 0x039a031e; -u32 var8006af90 = 0x028c01cd; + +u16 var8006ae90[] = { + 0x8000, 0x7eba, 0x7d74, 0x7c2d, 0x7ae7, 0x79a0, 0x7859, 0x7711, + 0x75c9, 0x7480, 0x7337, 0x71ec, 0x70a1, 0x6f55, 0x6e07, 0x6cb8, + 0x6b68, 0x6a17, 0x68c4, 0x6770, 0x661a, 0x64c1, 0x6367, 0x620b, + 0x60ad, 0x5f4c, 0x5de9, 0x5c83, 0x5b1a, 0x59ae, 0x583e, 0x56cb, + 0x5555, 0x53db, 0x525c, 0x50d9, 0x4f51, 0x4dc5, 0x4c32, 0x4a9a, + 0x48fc, 0x4757, 0x45ab, 0x43f7, 0x423a, 0x4075, 0x3ea5, 0x3ccb, + 0x3ae5, 0x38f1, 0x36ef, 0x34dc, 0x32b7, 0x307d, 0x2e2b, 0x2bbd, + 0x292e, 0x2678, 0x2391, 0x206c, 0x1cf6, 0x0000, +}; + +u16 var8006af0c[] = { + 0x1cf6, 0x1cbb, 0x1c80, 0x1c45, 0x1c08, 0x1bcc, 0x1b8f, 0x1b51, + 0x1b13, 0x1ad4, 0x1a95, 0x1a55, 0x1a14, 0x19d3, 0x1992, 0x194f, + 0x190c, 0x18c9, 0x1884, 0x183f, 0x17f9, 0x17b3, 0x176b, 0x1723, + 0x16da, 0x1690, 0x1645, 0x15f9, 0x15ac, 0x155e, 0x150f, 0x14be, + 0x146d, 0x141a, 0x13c6, 0x1370, 0x1319, 0x12c1, 0x1267, 0x120b, + 0x11ad, 0x114e, 0x10ec, 0x1088, 0x1022, 0x0fb9, 0x0f4d, 0x0ede, + 0x0e6c, 0x0df7, 0x0d7d, 0x0d00, 0x0c7d, 0x0bf4, 0x0b66, 0x0ad0, + 0x0a31, 0x0989, 0x08d3, 0x080e, 0x0734, 0x063d, 0x0518, 0x039a, +}; + +u16 var8006af8c[] = { + 0x039a, 0x031e, 0x028c, 0x01cd, +}; + u32 var8006af94 = 0x00000000; u32 var8006af98 = 0x00000000; u32 var8006af9c = 0x00000000; diff --git a/src/game/game_096890.c b/src/game/game_096890.c index e7a8139bf..9c0c77c97 100644 --- a/src/game/game_096890.c +++ b/src/game/game_096890.c @@ -11,44 +11,37 @@ #include "gvars/gvars.h" #include "types.h" -GLOBAL_ASM( -glabel func0f096890 -/* f096890: 28817fe0 */ slti $at,$a0,0x7fe0 -/* f096894: 14200006 */ bnez $at,.L0f0968b0 -/* f096898: 24030007 */ addiu $v1,$zero,0x7 -/* f09689c: 3c068007 */ lui $a2,%hi(var8006af8c) -/* f0968a0: 24050003 */ addiu $a1,$zero,0x3 -/* f0968a4: 24c6af8c */ addiu $a2,$a2,%lo(var8006af8c) -/* f0968a8: 1000000d */ b .L0f0968e0 -/* f0968ac: 24848020 */ addiu $a0,$a0,-32736 -.L0f0968b0: -/* f0968b0: 28817800 */ slti $at,$a0,0x7800 -/* f0968b4: 14200007 */ bnez $at,.L0f0968d4 -/* f0968b8: 240301ff */ addiu $v1,$zero,0x1ff -/* f0968bc: 3c068007 */ lui $a2,%hi(var8006af0c) -/* f0968c0: 2403001f */ addiu $v1,$zero,0x1f -/* f0968c4: 24050005 */ addiu $a1,$zero,0x5 -/* f0968c8: 24c6af0c */ addiu $a2,$a2,%lo(var8006af0c) -/* f0968cc: 10000004 */ b .L0f0968e0 -/* f0968d0: 24848800 */ addiu $a0,$a0,-30720 -.L0f0968d4: -/* f0968d4: 3c068007 */ lui $a2,%hi(var8006ae90) -/* f0968d8: 24050009 */ addiu $a1,$zero,0x9 -/* f0968dc: 24c6ae90 */ addiu $a2,$a2,%lo(var8006ae90) -.L0f0968e0: -/* f0968e0: 00a47007 */ srav $t6,$a0,$a1 -/* f0968e4: 000e7840 */ sll $t7,$t6,0x1 -/* f0968e8: 00cf4021 */ addu $t0,$a2,$t7 -/* f0968ec: 95070000 */ lhu $a3,0x0($t0) -/* f0968f0: 95090002 */ lhu $t1,0x2($t0) -/* f0968f4: 0083c824 */ and $t9,$a0,$v1 -/* f0968f8: 00e9c023 */ subu $t8,$a3,$t1 -/* f0968fc: 03190019 */ multu $t8,$t9 -/* f096900: 00005012 */ mflo $t2 -/* f096904: 00aa5807 */ srav $t3,$t2,$a1 -/* f096908: 03e00008 */ jr $ra -/* f09690c: 00eb1023 */ subu $v0,$a3,$t3 -); +s32 func0f096890(s32 arg0) +{ + u16 *array; + s32 shiftamount; + s32 mask; + s32 index; + s32 value; + s32 nextvalue; + + if (arg0 >= 32736) { + mask = 0x07; + shiftamount = 3; + array = var8006af8c; + arg0 -= 32736; + } else if (arg0 >= 30720) { + mask = 0x1f; + shiftamount = 5; + array = var8006af0c; + arg0 -= 30720; + } else { + mask = 0x1ff; + shiftamount = 9; + array = var8006ae90; + } + + index = arg0 >> shiftamount; + value = array[index]; + nextvalue = array[index + 1]; + + return value - (((value - nextvalue) * (arg0 & mask)) >> shiftamount); +} GLOBAL_ASM( glabel func0f096910 diff --git a/src/include/game/data/data_00e460.h b/src/include/game/data/data_00e460.h index 579d9f635..3ae57fde8 100644 --- a/src/include/game/data/data_00e460.h +++ b/src/include/game/data/data_00e460.h @@ -149,9 +149,9 @@ extern u32 var8006ae5c; extern s32 g_ObjectiveLastIndex; extern bool g_ObjectiveChecksDisabled; extern u32 var8006ae80; -extern u32 var8006ae90; -extern u32 var8006af0c; -extern u32 var8006af8c; +extern u16 var8006ae90[]; +extern u16 var8006af0c[]; +extern u16 var8006af8c[]; extern u32 var8006afa0; #endif diff --git a/src/include/game/game_096890.h b/src/include/game/game_096890.h index afb28decc..20254764d 100644 --- a/src/include/game/game_096890.h +++ b/src/include/game/game_096890.h @@ -3,7 +3,7 @@ #include #include "types.h" -u32 func0f096890(void); +s32 func0f096890(s32 arg0); u32 func0f096910(s32 value); s32 func0f096964(s32 value);