diff options
author | Max <mparisi@stevens.edu> | 2020-11-11 18:14:59 -0500 |
---|---|---|
committer | Max <mparisi@stevens.edu> | 2020-11-11 18:14:59 -0500 |
commit | 81a97af975cbd660c335a287796dff1d42606cfa (patch) | |
tree | 445e52824f3bca6310d446eeb7ab7d45fde898a4 | |
parent | e411f08f4341cbbbb67b227b2a224b85cc8f14b2 (diff) |
match GScamera::func_801DE1F8
-rw-r--r-- | include/SDK/mtx.h | 2 | ||||
-rw-r--r-- | src/GScamera.cpp | 377 |
2 files changed, 119 insertions, 260 deletions
diff --git a/include/SDK/mtx.h b/include/SDK/mtx.h index e9b1e2b..07840fc 100644 --- a/include/SDK/mtx.h +++ b/include/SDK/mtx.h @@ -6,6 +6,8 @@ extern "C" { #endif
typedef float Mtx[3][4];
+typedef float Mtx44[4][4];
+
typedef float (*MtxPtr)[4];
#define MTX_PTR_OFFSET 3
diff --git a/src/GScamera.cpp b/src/GScamera.cpp index 69a7de3..3c610d7 100644 --- a/src/GScamera.cpp +++ b/src/GScamera.cpp @@ -79,22 +79,21 @@ class GScamera : public GSnull {
u32 unk104; // flags
gUnkClass10* unk108;
+ Mtx44 unk10C; // orthographic projection matrix. TODO: this could be a C++ wrapper for Mtx44
- u8 unk10C[0x40]; // pad
+ float unk14C;
+ float unk150;
+ float unk154;
+ float unk158;
+ float unk15C;
+ float unk160;
+ float unk164;
-
- u32 unk14C;
- u32 unk150;
- u32 unk154;
- u32 unk158;
- u32 unk15C;
- u32 unk160;
- u32 unk164;
-
- float unk168;
- float unk16C;
- float unk170;
- float unk174;
+ // view volume coordinates for the orthographic projection matrix
+ float unk168; // top
+ float unk16C; // bottom
+ float unk170; // left
+ float unk174; // right
float unk178;
@@ -266,251 +265,111 @@ GScamera::~GScamera() }
-extern u32 lbl_8063F788;
+// TODO: what is this? compare with gUnkClass 9, 10, 11, 12...
+struct gUnkClass13
+{
+ u8 unk0[0x7A]; //pad
+ u8 unk7A;
+};
+
+extern gUnkClass13* lbl_8063F788; // TODO: pointer to some class
extern float lbl_80641C18;
extern float lbl_80641C1C;
extern float lbl_80641C20;
extern double lbl_80641C28;
extern float lbl_80641C30;
extern float lbl_80641C34;
-void func_8022369C(void);
-void atan2(void);
-void tan(void);
-void func_80223694(void);
-void func_80223698(void);
+double atan2(double y, double x);
+double tan(double x);
+// C_MTXFrustum
+void func_80223694(Mtx44 m, float t, float b, float l, float r, float n, float f);
+// C_MTXOrtho
+void func_80223698(Mtx44 m, float t, float b, float l, float r, float n, float f);
+// C_MTXPerspective
+void func_8022369C(Mtx44 m, float fovy, float aspect, float n, float f);
-#ifdef NONMATCHING
void GScamera::func_801DE1F8()
{
+ float f31;
+ float f30;
+ if (lbl_8063F788->unk7A && (unk104 & 0x100)) {
+ if (!(unk104 & 0x4))
+ unk104 |= 0xC;
+ f30 = 1.334375f;
+ } else {
+ if (unk104 & 0x4)
+ unk104 = (unk104 | 0x8) & ~0x4;
+ f30 = 1.0f;
+ }
+ float f8;
+ if (unk104 & 0x8) {
+ f31 = unk178;
+ switch (unk104 & 0x3) {
+ case 2:
+ // TODO: inline function?
+ f8 = 0.5f * ((1.0f - f30) * (unk174 - unk170));
+ if (f31 > 1.0f) {
+ f31 = (1.0f / f31);
+ // func_80223698 is a thunk to C_MTXOrtho
+ func_80223698(unk10C, unk168*f31, unk16C*f31, f8 + unk170*f30, f8 + unk174*f30, unk17C.x, unk17C.y);
+ } else {
+ f31 *= f30;
+ func_80223698(unk10C, unk168, unk16C, f8 + unk170*f31, f8 + unk174*f31, unk17C.x, unk17C.y);
+ }
+ unk14C = 1.0f;
+ unk150 = unk10C[0][0];
+ unk154 = unk10C[0][3];
+ unk158 = unk10C[1][1];
+ unk15C = unk10C[1][3];
+ unk160 = unk10C[2][2];
+ unk164 = unk10C[2][3];
+ break;
+ case 3:
+ f8 = 0.5f * ((1.0f - f30) * (unk174 - unk170));
+ if (f31 > 1.0f) {
+ f31 = 1.0f / f31;
+ // func_80223694 is a thunk to C_MTXFrustum
+ func_80223694(unk10C, unk168*f31, unk16C*f31, f8 + unk170*f30, f8 + unk174*f30, unk17C.x, unk17C.y);
+ } else {
+ f31 *= f30;
+ func_80223694(unk10C, unk168, unk16C, f8 + unk170*f31, f8 + unk174*f31, unk17C.x, unk17C.y);
+ }
+ unk14C = 0.0f;
+ unk150 = unk10C[0][0];
+ unk154 = unk10C[0][2];
+ unk158 = unk10C[1][1];
+ unk15C = unk10C[1][2];
+ unk160 = unk10C[2][2];
+ unk164 = unk10C[2][3];
+ break;
+ case 0: case 1: default:
+ if (unk104 & 0x80 && f31 > 1.0f) {
+ // TODO: degree->radian conversion? 0.017453292f is pi/180
+ float f0 = static_cast<float>(tan(0.017453292f*(0.5f*unk168)));
+ float f3 = static_cast<float>(atan2(f0/f31, 1.0));
+ f31 *= f30;
+ // TODO: radian->degree conversion? 57.29578f is 180/pi
+ // func_8022369C is a thunk to C_MTXPerspective
+ float rad2deg = 57.29578f*(2.0f*f3);
+ func_8022369C(unk10C, rad2deg, unk16C*f31, unk17C.x, unk17C.y);
+ } else {
+ f31 *= f30;
+ func_8022369C(unk10C, unk168, unk16C*f31, unk17C.x, unk17C.y);
+ }
+ unk14C = 0.0f;
+ unk150 = unk10C[0][0];
+ unk154 = unk10C[0][2];
+ unk158 = unk10C[1][1];
+ unk15C = unk10C[1][2];
+ unk160 = unk10C[2][2];
+ unk164 = unk10C[2][3];
+ break;
+ }
+ unk104 &= ~0x8;
+ }
}
-#else
-asm void GScamera::func_801DE1F8()
-{
- nofralloc
-/* 801DE1F8 001D9E58 94 21 FF D0 */ stwu r1, -0x30(r1)
-/* 801DE1FC 001D9E5C 7C 08 02 A6 */ mflr r0
-/* 801DE200 001D9E60 90 01 00 34 */ stw r0, 0x34(r1)
-/* 801DE204 001D9E64 DB E1 00 20 */ stfd f31, 0x20(r1)
-/* 801DE208 001D9E68 F3 E1 00 28 */ psq_st f31, 40(r1), 0, 0
-/* 801DE20C 001D9E6C DB C1 00 10 */ stfd f30, 0x10(r1)
-/* 801DE210 001D9E70 F3 C1 00 18 */ psq_st f30, 24(r1), 0, 0
-/* 801DE214 001D9E74 93 E1 00 0C */ stw r31, 0xc(r1)
-/* 801DE218 001D9E78 7C 7F 1B 78 */ mr r31, r3
-/* 801DE21C 001D9E7C 80 8D A4 C8 */ lwz r4, lbl_8063F788
-/* 801DE220 001D9E80 88 04 00 7A */ lbz r0, 0x7a(r4)
-/* 801DE224 001D9E84 2C 00 00 00 */ cmpwi r0, 0
-/* 801DE228 001D9E88 41 82 00 28 */ beq lbl_801DE250
-/* 801DE22C 001D9E8C 80 83 01 04 */ lwz r4, 0x104(r3)
-/* 801DE230 001D9E90 54 80 05 EF */ rlwinm. r0, r4, 0, 0x17, 0x17
-/* 801DE234 001D9E94 41 82 00 1C */ beq lbl_801DE250
-/* 801DE238 001D9E98 54 80 07 7B */ rlwinm. r0, r4, 0, 0x1d, 0x1d
-/* 801DE23C 001D9E9C 40 82 00 0C */ bne lbl_801DE248
-/* 801DE240 001D9EA0 60 80 00 0C */ ori r0, r4, 0xc
-/* 801DE244 001D9EA4 90 03 01 04 */ stw r0, 0x104(r3)
-lbl_801DE248:
-/* 801DE248 001D9EA8 C3 C2 96 18 */ lfs f30, lbl_80641C18
-/* 801DE24C 001D9EAC 48 00 00 20 */ b lbl_801DE26C
-lbl_801DE250:
-/* 801DE250 001D9EB0 80 83 01 04 */ lwz r4, 0x104(r3)
-/* 801DE254 001D9EB4 54 80 07 7B */ rlwinm. r0, r4, 0, 0x1d, 0x1d
-/* 801DE258 001D9EB8 41 82 00 10 */ beq lbl_801DE268
-/* 801DE25C 001D9EBC 60 80 00 08 */ ori r0, r4, 8
-/* 801DE260 001D9EC0 54 00 07 B8 */ rlwinm r0, r0, 0, 0x1e, 0x1c
-/* 801DE264 001D9EC4 90 03 01 04 */ stw r0, 0x104(r3)
-lbl_801DE268:
-/* 801DE268 001D9EC8 C3 C2 96 00 */ lfs f30, lbl_80641C00
-lbl_801DE26C:
-/* 801DE26C 001D9ECC 80 83 01 04 */ lwz r4, 0x104(r3)
-/* 801DE270 001D9ED0 54 80 07 39 */ rlwinm. r0, r4, 0, 0x1c, 0x1c
-/* 801DE274 001D9ED4 41 82 02 8C */ beq lbl_801DE500
-/* 801DE278 001D9ED8 54 80 07 BE */ clrlwi r0, r4, 0x1e
-/* 801DE27C 001D9EDC C3 E3 01 78 */ lfs f31, 0x178(r3)
-/* 801DE280 001D9EE0 2C 00 00 02 */ cmpwi r0, 2
-/* 801DE284 001D9EE4 41 82 00 18 */ beq lbl_801DE29C
-/* 801DE288 001D9EE8 40 80 00 08 */ bge lbl_801DE290
-/* 801DE28C 001D9EEC 48 00 01 A0 */ b lbl_801DE42C
-lbl_801DE290:
-/* 801DE290 001D9EF0 2C 00 00 04 */ cmpwi r0, 4
-/* 801DE294 001D9EF4 40 80 01 98 */ bge lbl_801DE42C
-/* 801DE298 001D9EF8 48 00 00 CC */ b lbl_801DE364
-lbl_801DE29C:
-/* 801DE29C 001D9EFC C0 A2 96 00 */ lfs f5, lbl_80641C00
-/* 801DE2A0 001D9F00 C0 83 01 74 */ lfs f4, 0x174(r3)
-/* 801DE2A4 001D9F04 C0 63 01 70 */ lfs f3, 0x170(r3)
-/* 801DE2A8 001D9F08 EC 45 F0 28 */ fsubs f2, f5, f30
-/* 801DE2AC 001D9F0C C0 02 96 1C */ lfs f0, lbl_80641C1C
-/* 801DE2B0 001D9F10 FC 1F 28 40 */ fcmpo cr0, f31, f5
-/* 801DE2B4 001D9F14 EC 24 18 28 */ fsubs f1, f4, f3
-/* 801DE2B8 001D9F18 EC 22 00 72 */ fmuls f1, f2, f1
-/* 801DE2BC 001D9F1C ED 00 00 72 */ fmuls f8, f0, f1
-/* 801DE2C0 001D9F20 40 81 00 3C */ ble lbl_801DE2FC
-/* 801DE2C4 001D9F24 EC E5 F8 24 */ fdivs f7, f5, f31
-/* 801DE2C8 001D9F28 C0 23 01 68 */ lfs f1, 0x168(r3)
-/* 801DE2CC 001D9F2C C0 43 01 6C */ lfs f2, 0x16c(r3)
-/* 801DE2D0 001D9F30 C0 A3 01 7C */ lfs f5, 0x17c(r3)
-/* 801DE2D4 001D9F34 C0 C3 01 80 */ lfs f6, 0x180(r3)
-/* 801DE2D8 001D9F38 38 63 01 0C */ addi r3, r3, 0x10c
-/* 801DE2DC 001D9F3C EC 63 07 B2 */ fmuls f3, f3, f30
-/* 801DE2E0 001D9F40 EC 04 07 B2 */ fmuls f0, f4, f30
-/* 801DE2E4 001D9F44 EC 21 01 F2 */ fmuls f1, f1, f7
-/* 801DE2E8 001D9F48 EC 42 01 F2 */ fmuls f2, f2, f7
-/* 801DE2EC 001D9F4C EC 68 18 2A */ fadds f3, f8, f3
-/* 801DE2F0 001D9F50 EC 88 00 2A */ fadds f4, f8, f0
-/* 801DE2F4 001D9F54 48 04 53 A5 */ bl func_80223698
-/* 801DE2F8 001D9F58 48 00 00 30 */ b lbl_801DE328
-lbl_801DE2FC:
-/* 801DE2FC 001D9F5C EF FF 07 B2 */ fmuls f31, f31, f30
-/* 801DE300 001D9F60 C0 23 01 68 */ lfs f1, 0x168(r3)
-/* 801DE304 001D9F64 C0 43 01 6C */ lfs f2, 0x16c(r3)
-/* 801DE308 001D9F68 C0 A3 01 7C */ lfs f5, 0x17c(r3)
-/* 801DE30C 001D9F6C EC 63 07 F2 */ fmuls f3, f3, f31
-/* 801DE310 001D9F70 C0 C3 01 80 */ lfs f6, 0x180(r3)
-/* 801DE314 001D9F74 EC 04 07 F2 */ fmuls f0, f4, f31
-/* 801DE318 001D9F78 38 63 01 0C */ addi r3, r3, 0x10c
-/* 801DE31C 001D9F7C EC 68 18 2A */ fadds f3, f8, f3
-/* 801DE320 001D9F80 EC 88 00 2A */ fadds f4, f8, f0
-/* 801DE324 001D9F84 48 04 53 75 */ bl func_80223698
-lbl_801DE328:
-/* 801DE328 001D9F88 C0 C2 96 00 */ lfs f6, lbl_80641C00
-/* 801DE32C 001D9F8C C0 BF 01 0C */ lfs f5, 0x10c(r31)
-/* 801DE330 001D9F90 C0 9F 01 18 */ lfs f4, 0x118(r31)
-/* 801DE334 001D9F94 C0 7F 01 20 */ lfs f3, 0x120(r31)
-/* 801DE338 001D9F98 C0 5F 01 28 */ lfs f2, 0x128(r31)
-/* 801DE33C 001D9F9C C0 3F 01 34 */ lfs f1, 0x134(r31)
-/* 801DE340 001D9FA0 C0 1F 01 38 */ lfs f0, 0x138(r31)
-/* 801DE344 001D9FA4 D0 DF 01 4C */ stfs f6, 0x14c(r31)
-/* 801DE348 001D9FA8 D0 BF 01 50 */ stfs f5, 0x150(r31)
-/* 801DE34C 001D9FAC D0 9F 01 54 */ stfs f4, 0x154(r31)
-/* 801DE350 001D9FB0 D0 7F 01 58 */ stfs f3, 0x158(r31)
-/* 801DE354 001D9FB4 D0 5F 01 5C */ stfs f2, 0x15c(r31)
-/* 801DE358 001D9FB8 D0 3F 01 60 */ stfs f1, 0x160(r31)
-/* 801DE35C 001D9FBC D0 1F 01 64 */ stfs f0, 0x164(r31)
-/* 801DE360 001D9FC0 48 00 01 94 */ b lbl_801DE4F4
-lbl_801DE364:
-/* 801DE364 001D9FC4 C0 A2 96 00 */ lfs f5, lbl_80641C00
-/* 801DE368 001D9FC8 C0 83 01 74 */ lfs f4, 0x174(r3)
-/* 801DE36C 001D9FCC C0 63 01 70 */ lfs f3, 0x170(r3)
-/* 801DE370 001D9FD0 EC 45 F0 28 */ fsubs f2, f5, f30
-/* 801DE374 001D9FD4 C0 02 96 1C */ lfs f0, lbl_80641C1C
-/* 801DE378 001D9FD8 FC 1F 28 40 */ fcmpo cr0, f31, f5
-/* 801DE37C 001D9FDC EC 24 18 28 */ fsubs f1, f4, f3
-/* 801DE380 001D9FE0 EC 22 00 72 */ fmuls f1, f2, f1
-/* 801DE384 001D9FE4 ED 00 00 72 */ fmuls f8, f0, f1
-/* 801DE388 001D9FE8 40 81 00 3C */ ble lbl_801DE3C4
-/* 801DE38C 001D9FEC EC E5 F8 24 */ fdivs f7, f5, f31
-/* 801DE390 001D9FF0 C0 23 01 68 */ lfs f1, 0x168(r3)
-/* 801DE394 001D9FF4 C0 43 01 6C */ lfs f2, 0x16c(r3)
-/* 801DE398 001D9FF8 C0 A3 01 7C */ lfs f5, 0x17c(r3)
-/* 801DE39C 001D9FFC C0 C3 01 80 */ lfs f6, 0x180(r3)
-/* 801DE3A0 001DA000 38 63 01 0C */ addi r3, r3, 0x10c
-/* 801DE3A4 001DA004 EC 63 07 B2 */ fmuls f3, f3, f30
-/* 801DE3A8 001DA008 EC 04 07 B2 */ fmuls f0, f4, f30
-/* 801DE3AC 001DA00C EC 21 01 F2 */ fmuls f1, f1, f7
-/* 801DE3B0 001DA010 EC 42 01 F2 */ fmuls f2, f2, f7
-/* 801DE3B4 001DA014 EC 68 18 2A */ fadds f3, f8, f3
-/* 801DE3B8 001DA018 EC 88 00 2A */ fadds f4, f8, f0
-/* 801DE3BC 001DA01C 48 04 52 D9 */ bl func_80223694
-/* 801DE3C0 001DA020 48 00 00 30 */ b lbl_801DE3F0
-lbl_801DE3C4:
-/* 801DE3C4 001DA024 EF FF 07 B2 */ fmuls f31, f31, f30
-/* 801DE3C8 001DA028 C0 23 01 68 */ lfs f1, 0x168(r3)
-/* 801DE3CC 001DA02C C0 43 01 6C */ lfs f2, 0x16c(r3)
-/* 801DE3D0 001DA030 C0 A3 01 7C */ lfs f5, 0x17c(r3)
-/* 801DE3D4 001DA034 EC 63 07 F2 */ fmuls f3, f3, f31
-/* 801DE3D8 001DA038 C0 C3 01 80 */ lfs f6, 0x180(r3)
-/* 801DE3DC 001DA03C EC 04 07 F2 */ fmuls f0, f4, f31
-/* 801DE3E0 001DA040 38 63 01 0C */ addi r3, r3, 0x10c
-/* 801DE3E4 001DA044 EC 68 18 2A */ fadds f3, f8, f3
-/* 801DE3E8 001DA048 EC 88 00 2A */ fadds f4, f8, f0
-/* 801DE3EC 001DA04C 48 04 52 A9 */ bl func_80223694
-lbl_801DE3F0:
-/* 801DE3F0 001DA050 C0 C2 96 10 */ lfs f6, lbl_80641C10
-/* 801DE3F4 001DA054 C0 BF 01 0C */ lfs f5, 0x10c(r31)
-/* 801DE3F8 001DA058 C0 9F 01 14 */ lfs f4, 0x114(r31)
-/* 801DE3FC 001DA05C C0 7F 01 20 */ lfs f3, 0x120(r31)
-/* 801DE400 001DA060 C0 5F 01 24 */ lfs f2, 0x124(r31)
-/* 801DE404 001DA064 C0 3F 01 34 */ lfs f1, 0x134(r31)
-/* 801DE408 001DA068 C0 1F 01 38 */ lfs f0, 0x138(r31)
-/* 801DE40C 001DA06C D0 DF 01 4C */ stfs f6, 0x14c(r31)
-/* 801DE410 001DA070 D0 BF 01 50 */ stfs f5, 0x150(r31)
-/* 801DE414 001DA074 D0 9F 01 54 */ stfs f4, 0x154(r31)
-/* 801DE418 001DA078 D0 7F 01 58 */ stfs f3, 0x158(r31)
-/* 801DE41C 001DA07C D0 5F 01 5C */ stfs f2, 0x15c(r31)
-/* 801DE420 001DA080 D0 3F 01 60 */ stfs f1, 0x160(r31)
-/* 801DE424 001DA084 D0 1F 01 64 */ stfs f0, 0x164(r31)
-/* 801DE428 001DA088 48 00 00 CC */ b lbl_801DE4F4
-lbl_801DE42C:
-/* 801DE42C 001DA08C 54 80 06 31 */ rlwinm. r0, r4, 0, 0x18, 0x18
-/* 801DE430 001DA090 41 82 00 6C */ beq lbl_801DE49C
-/* 801DE434 001DA094 C0 02 96 00 */ lfs f0, lbl_80641C00
-/* 801DE438 001DA098 FC 1F 00 40 */ fcmpo cr0, f31, f0
-/* 801DE43C 001DA09C 40 81 00 60 */ ble lbl_801DE49C
-/* 801DE440 001DA0A0 C0 42 96 1C */ lfs f2, lbl_80641C1C
-/* 801DE444 001DA0A4 C0 23 01 68 */ lfs f1, 0x168(r3)
-/* 801DE448 001DA0A8 C0 02 96 20 */ lfs f0, lbl_80641C20
-/* 801DE44C 001DA0AC EC 22 00 72 */ fmuls f1, f2, f1
-/* 801DE450 001DA0B0 EC 20 00 72 */ fmuls f1, f0, f1
-/* 801DE454 001DA0B4 4B FF 61 09 */ bl tan
-/* 801DE458 001DA0B8 FC 00 08 18 */ frsp f0, f1
-/* 801DE45C 001DA0BC C8 42 96 28 */ lfd f2, lbl_80641C28
-/* 801DE460 001DA0C0 EC 20 F8 24 */ fdivs f1, f0, f31
-/* 801DE464 001DA0C4 4B FF 61 79 */ bl atan2
-/* 801DE468 001DA0C8 FC 60 08 18 */ frsp f3, f1
-/* 801DE46C 001DA0CC C0 42 96 30 */ lfs f2, lbl_80641C30
-/* 801DE470 001DA0D0 EF FF 07 B2 */ fmuls f31, f31, f30
-/* 801DE474 001DA0D4 C0 22 96 34 */ lfs f1, lbl_80641C34
-/* 801DE478 001DA0D8 C0 1F 01 6C */ lfs f0, 0x16c(r31)
-/* 801DE47C 001DA0DC 38 7F 01 0C */ addi r3, r31, 0x10c
-/* 801DE480 001DA0E0 EC A2 00 F2 */ fmuls f5, f2, f3
-/* 801DE484 001DA0E4 C0 7F 01 7C */ lfs f3, 0x17c(r31)
-/* 801DE488 001DA0E8 EC 40 07 F2 */ fmuls f2, f0, f31
-/* 801DE48C 001DA0EC C0 9F 01 80 */ lfs f4, 0x180(r31)
-/* 801DE490 001DA0F0 EC 21 01 72 */ fmuls f1, f1, f5
-/* 801DE494 001DA0F4 48 04 52 09 */ bl func_8022369C
-/* 801DE498 001DA0F8 48 00 00 24 */ b lbl_801DE4BC
-lbl_801DE49C:
-/* 801DE49C 001DA0FC EF FF 07 B2 */ fmuls f31, f31, f30
-/* 801DE4A0 001DA100 C0 03 01 6C */ lfs f0, 0x16c(r3)
-/* 801DE4A4 001DA104 C0 23 01 68 */ lfs f1, 0x168(r3)
-/* 801DE4A8 001DA108 C0 63 01 7C */ lfs f3, 0x17c(r3)
-/* 801DE4AC 001DA10C EC 40 07 F2 */ fmuls f2, f0, f31
-/* 801DE4B0 001DA110 C0 83 01 80 */ lfs f4, 0x180(r3)
-/* 801DE4B4 001DA114 38 63 01 0C */ addi r3, r3, 0x10c
-/* 801DE4B8 001DA118 48 04 51 E5 */ bl func_8022369C
-lbl_801DE4BC:
-/* 801DE4BC 001DA11C C0 C2 96 10 */ lfs f6, lbl_80641C10
-/* 801DE4C0 001DA120 C0 BF 01 0C */ lfs f5, 0x10c(r31)
-/* 801DE4C4 001DA124 C0 9F 01 14 */ lfs f4, 0x114(r31)
-/* 801DE4C8 001DA128 C0 7F 01 20 */ lfs f3, 0x120(r31)
-/* 801DE4CC 001DA12C C0 5F 01 24 */ lfs f2, 0x124(r31)
-/* 801DE4D0 001DA130 C0 3F 01 34 */ lfs f1, 0x134(r31)
-/* 801DE4D4 001DA134 C0 1F 01 38 */ lfs f0, 0x138(r31)
-/* 801DE4D8 001DA138 D0 DF 01 4C */ stfs f6, 0x14c(r31)
-/* 801DE4DC 001DA13C D0 BF 01 50 */ stfs f5, 0x150(r31)
-/* 801DE4E0 001DA140 D0 9F 01 54 */ stfs f4, 0x154(r31)
-/* 801DE4E4 001DA144 D0 7F 01 58 */ stfs f3, 0x158(r31)
-/* 801DE4E8 001DA148 D0 5F 01 5C */ stfs f2, 0x15c(r31)
-/* 801DE4EC 001DA14C D0 3F 01 60 */ stfs f1, 0x160(r31)
-/* 801DE4F0 001DA150 D0 1F 01 64 */ stfs f0, 0x164(r31)
-lbl_801DE4F4:
-/* 801DE4F4 001DA154 80 1F 01 04 */ lwz r0, 0x104(r31)
-/* 801DE4F8 001DA158 54 00 07 76 */ rlwinm r0, r0, 0, 0x1d, 0x1b
-/* 801DE4FC 001DA15C 90 1F 01 04 */ stw r0, 0x104(r31)
-lbl_801DE500:
-/* 801DE500 001DA160 E3 E1 00 28 */ psq_l f31, 40(r1), 0, 0
-/* 801DE504 001DA164 CB E1 00 20 */ lfd f31, 0x20(r1)
-/* 801DE508 001DA168 E3 C1 00 18 */ psq_l f30, 24(r1), 0, 0
-/* 801DE50C 001DA16C CB C1 00 10 */ lfd f30, 0x10(r1)
-/* 801DE510 001DA170 80 01 00 34 */ lwz r0, 0x34(r1)
-/* 801DE514 001DA174 83 E1 00 0C */ lwz r31, 0xc(r1)
-/* 801DE518 001DA178 7C 08 03 A6 */ mtlr r0
-/* 801DE51C 001DA17C 38 21 00 30 */ addi r1, r1, 0x30
-/* 801DE520 001DA180 4E 80 00 20 */ blr
-}
-#pragma peephole on
-#endif
void GScamera::func_801DE524()
{
@@ -560,8 +419,6 @@ void PSMTXMultVec(const Mtx m, const Vec* src, Vec* dest); u32 PSMTXInverse(const Mtx src, Mtx inv);
#define MTXInverse PSMTXInverse
-void func3__6GSnullFv();
-
void GScamera::func3()
{
Mtx sp110;
@@ -713,7 +570,7 @@ void PSMTXScale(Mtx m, float xS, float yS, float zS); double sqrt(double);
-inline float InlineFunc1(const Mtx m, u32 col)
+static inline float InlineFunc1(const Mtx m, u32 col)
{
float f1 = (m[0][col]*m[0][col] + m[1][col]*m[1][col] + m[2][col]*m[2][col]);
if (f1 <= 0.0f)
@@ -1040,8 +897,8 @@ void GScamera::func2(BOOL p1) }
// TODO: move to header
-void func_801E1278(gUnkClass12*, Vec*);
-void func_801E10C0(gUnkClass12*, float*);
+void func_801E1278(gUnkClass12*, Vec*, float);
+void func_801E10C0(gUnkClass12*, float*, float);
// TODO: determine if there's any relationship between this
// function and the unkC callback in gUnkClass9, called in func_801DD7FC
@@ -1051,34 +908,34 @@ void GScamera::lbl_801DEEF8(gUnkClass12* p1, u32 p2, float p3) switch (p1->unk1)
{
case 5:
- func_801E10C0(p1, &unk168);
+ func_801E10C0(p1, &unk168, p3);
unk104 |= 0x8;
break;
case 6:
- func_801E10C0(p1, &unk16C);
+ func_801E10C0(p1, &unk16C, p3);
unk104 |= 0x8;
break;
case 7:
- func_801E10C0(p1, &unk17C.x);
+ func_801E10C0(p1, &unk17C.x, p3);
unk104 |= 0x8;
break;
case 8:
- func_801E10C0(p1, &unk17C.y);
+ func_801E10C0(p1, &unk17C.y, p3);
unk104 |= 0x8;
break;
case 9:
- func_801E10C0(p1, &unk17C.z);
+ func_801E10C0(p1, &unk17C.z, p3);
break;
case 10:
- func_801E1278(p1, &unk188);
+ func_801E1278(p1, &unk188, p3);
unk104 |= 0x20;
break;
case 11:
- func_801E1278(p1, &unk1A0);
+ func_801E1278(p1, &unk1A0, p3);
unk104 |= 0x20;
break;
case 12:
- func_801E1278(p1, &unk194);
+ func_801E1278(p1, &unk194, p3);
unk104 |= 0x20;
break;
default:
|