mirror of
https://gitlab.com/ryandwyer/perfect-dark
synced 2026-08-06 01:28:25 -04:00
Decompile guPerspectiveF
This commit is contained in:
@@ -3,7 +3,6 @@
|
||||
#include <ultra64.h>
|
||||
#include "types.h"
|
||||
|
||||
u32 func00004840(void);
|
||||
void func00004a24(f32 *matrix, u16 *arg1, f32 fovy, f32 arg3, f32 arg4, f32 arg5, f32 arg6);
|
||||
|
||||
#endif
|
||||
|
||||
+36
-138
@@ -13,143 +13,41 @@
|
||||
#include "lib/lib_4a360.h"
|
||||
#include "types.h"
|
||||
|
||||
const u32 var700524b0[] = {0x3c8efa35};
|
||||
const u32 var700524b4[] = {0x00000000};
|
||||
const u32 var700524b8[] = {0x00000000};
|
||||
const u32 var700524bc[] = {0x00000000};
|
||||
void guPerspectiveF(float mf[4][4], u16 *perspNorm, float fovy, float aspect, float near, float far, float scale)
|
||||
{
|
||||
float cot;
|
||||
int i, j;
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel func00004840
|
||||
/* 4840: 27bdffd0 */ addiu $sp,$sp,-48
|
||||
/* 4844: 44867000 */ mtc1 $a2,$f14
|
||||
/* 4848: afbf0014 */ sw $ra,0x14($sp)
|
||||
/* 484c: afa50034 */ sw $a1,0x34($sp)
|
||||
/* 4850: afa7003c */ sw $a3,0x3c($sp)
|
||||
/* 4854: afa50034 */ sw $a1,0x34($sp)
|
||||
/* 4858: afa40030 */ sw $a0,0x30($sp)
|
||||
/* 485c: 0c012918 */ jal guMtxIdentF
|
||||
/* 4860: e7ae0038 */ swc1 $f14,0x38($sp)
|
||||
/* 4864: 3c017005 */ lui $at,%hi(var700524b0)
|
||||
/* 4868: c7ae0038 */ lwc1 $f14,0x38($sp)
|
||||
/* 486c: c42424b0 */ lwc1 $f4,%lo(var700524b0)($at)
|
||||
/* 4870: 3c013f00 */ lui $at,0x3f00
|
||||
/* 4874: 44813000 */ mtc1 $at,$f6
|
||||
/* 4878: 46047382 */ mul.s $f14,$f14,$f4
|
||||
/* 487c: 00000000 */ nop
|
||||
/* 4880: 46067302 */ mul.s $f12,$f14,$f6
|
||||
/* 4884: 0c0068f4 */ jal cosf
|
||||
/* 4888: e7ac001c */ swc1 $f12,0x1c($sp)
|
||||
/* 488c: c7ac001c */ lwc1 $f12,0x1c($sp)
|
||||
/* 4890: 0c0068f7 */ jal sinf
|
||||
/* 4894: e7a00020 */ swc1 $f0,0x20($sp)
|
||||
/* 4898: c7a80020 */ lwc1 $f8,0x20($sp)
|
||||
/* 489c: c7aa003c */ lwc1 $f10,0x3c($sp)
|
||||
/* 48a0: c7ac0040 */ lwc1 $f12,0x40($sp)
|
||||
/* 48a4: 46004083 */ div.s $f2,$f8,$f0
|
||||
/* 48a8: c7b00044 */ lwc1 $f16,0x44($sp)
|
||||
/* 48ac: 8fa60030 */ lw $a2,0x30($sp)
|
||||
/* 48b0: 8fa70034 */ lw $a3,0x34($sp)
|
||||
/* 48b4: 46106480 */ add.s $f18,$f12,$f16
|
||||
/* 48b8: 3c01bf80 */ lui $at,0xbf80
|
||||
/* 48bc: 44814000 */ mtc1 $at,$f8
|
||||
/* 48c0: 46106381 */ sub.s $f14,$f12,$f16
|
||||
/* 48c4: 00002825 */ or $a1,$zero,$zero
|
||||
/* 48c8: e4c8002c */ swc1 $f8,0x2c($a2)
|
||||
/* 48cc: 44804000 */ mtc1 $zero,$f8
|
||||
/* 48d0: 24040004 */ addiu $a0,$zero,0x4
|
||||
/* 48d4: e4c8003c */ swc1 $f8,0x3c($a2)
|
||||
/* 48d8: 460e9183 */ div.s $f6,$f18,$f14
|
||||
/* 48dc: e4c20014 */ swc1 $f2,0x14($a2)
|
||||
/* 48e0: 460a1103 */ div.s $f4,$f2,$f10
|
||||
/* 48e4: e4c60028 */ swc1 $f6,0x28($a2)
|
||||
/* 48e8: 460c6280 */ add.s $f10,$f12,$f12
|
||||
/* 48ec: e4c40000 */ swc1 $f4,0x0($a2)
|
||||
/* 48f0: 46105102 */ mul.s $f4,$f10,$f16
|
||||
/* 48f4: 460e2183 */ div.s $f6,$f4,$f14
|
||||
/* 48f8: e4c60038 */ swc1 $f6,0x38($a2)
|
||||
/* 48fc: c7a00048 */ lwc1 $f0,0x48($sp)
|
||||
.L00004900:
|
||||
/* 4900: 00001825 */ or $v1,$zero,$zero
|
||||
/* 4904: 00c01025 */ or $v0,$a2,$zero
|
||||
/* 4908: c44e0000 */ lwc1 $f14,0x0($v0)
|
||||
/* 490c: 24630001 */ addiu $v1,$v1,0x1
|
||||
/* 4910: 46007402 */ mul.s $f16,$f14,$f0
|
||||
/* 4914: 50640008 */ beql $v1,$a0,.L00004938
|
||||
/* 4918: 24420004 */ addiu $v0,$v0,0x4
|
||||
.L0000491c:
|
||||
/* 491c: c44e0004 */ lwc1 $f14,0x4($v0)
|
||||
/* 4920: 24630001 */ addiu $v1,$v1,0x1
|
||||
/* 4924: e4500000 */ swc1 $f16,0x0($v0)
|
||||
/* 4928: 46007402 */ mul.s $f16,$f14,$f0
|
||||
/* 492c: 1464fffb */ bne $v1,$a0,.L0000491c
|
||||
/* 4930: 24420004 */ addiu $v0,$v0,0x4
|
||||
/* 4934: 24420004 */ addiu $v0,$v0,0x4
|
||||
.L00004938:
|
||||
/* 4938: e450fffc */ swc1 $f16,-0x4($v0)
|
||||
/* 493c: 24a50001 */ addiu $a1,$a1,0x1
|
||||
/* 4940: 14a4ffef */ bne $a1,$a0,.L00004900
|
||||
/* 4944: 24c60010 */ addiu $a2,$a2,0x10
|
||||
/* 4948: 10e00032 */ beqz $a3,.L00004a14
|
||||
/* 494c: 3c014000 */ lui $at,0x4000
|
||||
/* 4950: 44813000 */ mtc1 $at,$f6
|
||||
/* 4954: 340effff */ dli $t6,0xffff
|
||||
/* 4958: 3c014800 */ lui $at,0x4800
|
||||
/* 495c: 4606903e */ c.le.s $f18,$f6
|
||||
/* 4960: 00000000 */ nop
|
||||
/* 4964: 45020004 */ bc1fl .L00004978
|
||||
/* 4968: 44814000 */ mtc1 $at,$f8
|
||||
/* 496c: 10000029 */ b .L00004a14
|
||||
/* 4970: a4ee0000 */ sh $t6,0x0($a3)
|
||||
/* 4974: 44814000 */ mtc1 $at,$f8
|
||||
.L00004978:
|
||||
/* 4978: 24180001 */ addiu $t8,$zero,0x1
|
||||
/* 497c: 3c014f00 */ lui $at,0x4f00
|
||||
/* 4980: 46124283 */ div.s $f10,$f8,$f18
|
||||
/* 4984: 24080001 */ addiu $t0,$zero,0x1
|
||||
/* 4988: 444ff800 */ cfc1 $t7,$31
|
||||
/* 498c: 44d8f800 */ ctc1 $t8,$31
|
||||
/* 4990: 00000000 */ nop
|
||||
/* 4994: 46005124 */ cvt.w.s $f4,$f10
|
||||
/* 4998: 4458f800 */ cfc1 $t8,$31
|
||||
/* 499c: 00000000 */ nop
|
||||
/* 49a0: 33180078 */ andi $t8,$t8,0x78
|
||||
/* 49a4: 53000013 */ beqzl $t8,.L000049f4
|
||||
/* 49a8: 44182000 */ mfc1 $t8,$f4
|
||||
/* 49ac: 44812000 */ mtc1 $at,$f4
|
||||
/* 49b0: 24180001 */ addiu $t8,$zero,0x1
|
||||
/* 49b4: 46045101 */ sub.s $f4,$f10,$f4
|
||||
/* 49b8: 44d8f800 */ ctc1 $t8,$31
|
||||
/* 49bc: 00000000 */ nop
|
||||
/* 49c0: 46002124 */ cvt.w.s $f4,$f4
|
||||
/* 49c4: 4458f800 */ cfc1 $t8,$31
|
||||
/* 49c8: 00000000 */ nop
|
||||
/* 49cc: 33180078 */ andi $t8,$t8,0x78
|
||||
/* 49d0: 17000005 */ bnez $t8,.L000049e8
|
||||
/* 49d4: 00000000 */ nop
|
||||
/* 49d8: 44182000 */ mfc1 $t8,$f4
|
||||
/* 49dc: 3c018000 */ lui $at,0x8000
|
||||
/* 49e0: 10000007 */ b .L00004a00
|
||||
/* 49e4: 0301c025 */ or $t8,$t8,$at
|
||||
.L000049e8:
|
||||
/* 49e8: 10000005 */ b .L00004a00
|
||||
/* 49ec: 2418ffff */ addiu $t8,$zero,-1
|
||||
/* 49f0: 44182000 */ mfc1 $t8,$f4
|
||||
.L000049f4:
|
||||
/* 49f4: 00000000 */ nop
|
||||
/* 49f8: 0700fffb */ bltz $t8,.L000049e8
|
||||
/* 49fc: 00000000 */ nop
|
||||
.L00004a00:
|
||||
/* 4a00: 44cff800 */ ctc1 $t7,$31
|
||||
/* 4a04: 3319ffff */ andi $t9,$t8,0xffff
|
||||
/* 4a08: 1f200002 */ bgtz $t9,.L00004a14
|
||||
/* 4a0c: a4f80000 */ sh $t8,0x0($a3)
|
||||
/* 4a10: a4e80000 */ sh $t0,0x0($a3)
|
||||
.L00004a14:
|
||||
/* 4a14: 8fbf0014 */ lw $ra,0x14($sp)
|
||||
/* 4a18: 27bd0030 */ addiu $sp,$sp,0x30
|
||||
/* 4a1c: 03e00008 */ jr $ra
|
||||
/* 4a20: 00000000 */ nop
|
||||
);
|
||||
guMtxIdentF(mf);
|
||||
|
||||
fovy *= 3.1415926f / 180.0f;
|
||||
cot = cosf(fovy * 0.5f) / sinf(fovy * 0.5f);
|
||||
|
||||
mf[0][0] = cot / aspect;
|
||||
mf[1][1] = cot;
|
||||
mf[2][2] = (near + far) / (near - far);
|
||||
mf[2][3] = -1;
|
||||
mf[3][2] = (2.0f * near * far) / (near - far);
|
||||
mf[3][3] = 0;
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
for (j = 0; j < 4; j++) {
|
||||
mf[i][j] *= scale;
|
||||
}
|
||||
}
|
||||
|
||||
if (perspNorm != (u16 *) NULL) {
|
||||
if (near + far <= 2.0f) {
|
||||
*perspNorm = (u16) 0xFFFF;
|
||||
} else {
|
||||
*perspNorm = (u16) ((2.0f * 65536.0f) / (near + far));
|
||||
|
||||
if (*perspNorm <= 0) {
|
||||
*perspNorm = (u16) 0x0001;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel func00004a24
|
||||
@@ -166,7 +64,7 @@ glabel func00004a24
|
||||
/* 4a4c: 27a40028 */ addiu $a0,$sp,0x28
|
||||
/* 4a50: e7a40010 */ swc1 $f4,0x10($sp)
|
||||
/* 4a54: e7a60014 */ swc1 $f6,0x14($sp)
|
||||
/* 4a58: 0c001210 */ jal func00004840
|
||||
/* 4a58: 0c001210 */ jal guPerspectiveF
|
||||
/* 4a5c: e7a80018 */ swc1 $f8,0x18($sp)
|
||||
/* 4a60: 27a40028 */ addiu $a0,$sp,0x28
|
||||
/* 4a64: 0c0128d8 */ jal guMtxF2L
|
||||
@@ -176,4 +74,4 @@ glabel func00004a24
|
||||
/* 4a74: 03e00008 */ jr $ra
|
||||
/* 4a78: 00000000 */ nop
|
||||
/* 4a7c: 00000000 */ nop
|
||||
);
|
||||
);
|
||||
|
||||
+5
-5
@@ -1636,7 +1636,7 @@ glabel func0000ab78
|
||||
/* abb0: 27a40110 */ addiu $a0,$sp,0x110
|
||||
/* abb4: 27a50046 */ addiu $a1,$sp,0x46
|
||||
/* abb8: e7a60014 */ swc1 $f6,0x14($sp)
|
||||
/* abbc: 0c001210 */ jal func00004840
|
||||
/* abbc: 0c001210 */ jal guPerspectiveF
|
||||
/* abc0: e7a80018 */ swc1 $f8,0x18($sp)
|
||||
/* abc4: 0fc2d5be */ jal currentPlayerGetMatrix1740
|
||||
/* abc8: 00000000 */ nop
|
||||
@@ -1718,7 +1718,7 @@ glabel func0000aca4
|
||||
/* ace8: 27a50086 */ addiu $a1,$sp,0x86
|
||||
/* acec: e7a80018 */ swc1 $f8,0x18($sp)
|
||||
/* acf0: e7a40010 */ swc1 $f4,0x10($sp)
|
||||
/* acf4: 0c001210 */ jal func00004840
|
||||
/* acf4: 0c001210 */ jal guPerspectiveF
|
||||
/* acf8: e7a60014 */ swc1 $f6,0x14($sp)
|
||||
/* acfc: 27a40044 */ addiu $a0,$sp,0x44
|
||||
/* ad00: 0c0128d8 */ jal guMtxF2L
|
||||
@@ -1817,7 +1817,7 @@ glabel func0000ad5c
|
||||
/* ae64: 24a52874 */ addiu $a1,$a1,%lo(var80092874)
|
||||
/* ae68: 24842830 */ addiu $a0,$a0,%lo(var80092830)
|
||||
/* ae6c: e7a80018 */ swc1 $f8,0x18($sp)
|
||||
/* ae70: 0c001210 */ jal func00004840
|
||||
/* ae70: 0c001210 */ jal guPerspectiveF
|
||||
/* ae74: e7a60014 */ swc1 $f6,0x14($sp)
|
||||
/* ae78: 3c048009 */ lui $a0,%hi(var80092830)
|
||||
/* ae7c: 3c058009 */ lui $a1,%hi(var80092870)
|
||||
@@ -1943,7 +1943,7 @@ glabel func0000af00
|
||||
/* b04c: 24a52874 */ addiu $a1,$a1,%lo(var80092874)
|
||||
/* b050: 24842830 */ addiu $a0,$a0,%lo(var80092830)
|
||||
/* b054: e7a80018 */ swc1 $f8,0x18($sp)
|
||||
/* b058: 0c001210 */ jal func00004840
|
||||
/* b058: 0c001210 */ jal guPerspectiveF
|
||||
/* b05c: e7a60014 */ swc1 $f6,0x14($sp)
|
||||
/* b060: 3c048009 */ lui $a0,%hi(var80092830)
|
||||
/* b064: 3c058009 */ lui $a1,%hi(var80092870)
|
||||
@@ -2004,7 +2004,7 @@ glabel func0000b0e8
|
||||
/* b130: 8fa60084 */ lw $a2,0x84($sp)
|
||||
/* b134: 8fa70088 */ lw $a3,0x88($sp)
|
||||
/* b138: e7a80018 */ swc1 $f8,0x18($sp)
|
||||
/* b13c: 0c001210 */ jal func00004840
|
||||
/* b13c: 0c001210 */ jal guPerspectiveF
|
||||
/* b140: e7a60014 */ swc1 $f6,0x14($sp)
|
||||
/* b144: 27a40040 */ addiu $a0,$sp,0x40
|
||||
/* b148: 0c0128d8 */ jal guMtxF2L
|
||||
|
||||
Reference in New Issue
Block a user