mirror of
https://github.com/OpenDriver2/REDRIVER2.git
synced 2024-11-22 18:32:42 +01:00
- implement SetCamera
This commit is contained in:
parent
d60ba403a5
commit
e69482f8ae
@ -16,7 +16,8 @@
|
||||
#include "SPOOL.H"
|
||||
#include "MAP.H"
|
||||
#include "TEXTURE.H"
|
||||
|
||||
#include "../ASM/ASMTEST.H"
|
||||
#include "INLINE_C.H"
|
||||
|
||||
|
||||
int ElTrainData[83] = {
|
||||
@ -1766,166 +1767,161 @@ void ResetEventCamera(void)
|
||||
|
||||
/* WARNING: Could not reconcile some variable overlaps */
|
||||
|
||||
// [D]
|
||||
void SetCamera(_EVENT *ev)
|
||||
{
|
||||
UNIMPLEMENTED();
|
||||
/*
|
||||
undefined4 in_zero;
|
||||
CAR_POLY *in_at;
|
||||
ushort uVar1;
|
||||
short ang;
|
||||
undefined4 uVar2;
|
||||
int uVar2;
|
||||
long lVar3;
|
||||
ushort uVar4;
|
||||
int iVar5;
|
||||
long local_60;
|
||||
short local_5c;
|
||||
long local_58;
|
||||
undefined4 local_50;
|
||||
undefined4 local_4c;
|
||||
undefined4 local_48;
|
||||
undefined4 local_44;
|
||||
undefined4 local_40;
|
||||
undefined4 local_3c;
|
||||
undefined4 local_38;
|
||||
long local_34;
|
||||
long local_30;
|
||||
long local_2c;
|
||||
undefined4 local_28;
|
||||
undefined4 local_24;
|
||||
VECTOR pivot;
|
||||
SVECTOR offset;
|
||||
MATRIX matrix;
|
||||
SVECTOR temp;
|
||||
|
||||
memset(&local_50, 0, 8);
|
||||
if (eventCamera.rotate != 0) {
|
||||
inv_camera_matrix.m[0]._0_4_ = eventCamera.matrix.m[0]._0_4_;
|
||||
inv_camera_matrix.m._4_4_ = eventCamera.matrix.m._4_4_;
|
||||
inv_camera_matrix.m[1]._2_4_ = eventCamera.matrix.m[1]._2_4_;
|
||||
inv_camera_matrix.m[2]._0_4_ = eventCamera.matrix.m[2]._0_4_;
|
||||
inv_camera_matrix._16_4_ = eventCamera.matrix._16_4_;
|
||||
inv_camera_matrix.t[0] = eventCamera.matrix.t[0];
|
||||
inv_camera_matrix.t[1] = eventCamera.matrix.t[1];
|
||||
inv_camera_matrix.t[2] = eventCamera.matrix.t[2];
|
||||
}
|
||||
uVar2 = 0;
|
||||
if ((ev->flags & 0x800U) == 0) {
|
||||
offset.vx = 0;
|
||||
offset.vy = 0;
|
||||
offset.vz = 0;
|
||||
|
||||
if (eventCamera.rotate != 0)
|
||||
inv_camera_matrix = eventCamera.matrix;
|
||||
|
||||
pivot.vy = 0;
|
||||
|
||||
if ((ev->flags & 0x800U) == 0)
|
||||
{
|
||||
uVar4 = ev->flags & 0x30;
|
||||
iVar5 = (int)ev->rotation;
|
||||
lVar3 = *ev->data;
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
lVar3 = (ev->position).vz;
|
||||
iVar5 = ev->data[1];
|
||||
local_50 = boatOffset._0_4_;
|
||||
local_4c = boatOffset._4_4_;
|
||||
uVar2 = 0x100;
|
||||
if (GameLevel == 1) {
|
||||
uVar2 = 0x6f;
|
||||
}
|
||||
offset = boatOffset;
|
||||
pivot.vy = 0x100;
|
||||
|
||||
if (GameLevel == 1)
|
||||
pivot.vy = 0x6f;
|
||||
|
||||
uVar4 = 0;
|
||||
}
|
||||
if (uVar4 == 0) {
|
||||
|
||||
if (uVar4 == 0)
|
||||
{
|
||||
iVar5 = -iVar5;
|
||||
local_60 = camera_position.vx;
|
||||
local_58 = lVar3;
|
||||
pivot.vx = camera_position.vx;
|
||||
pivot.vz = lVar3;
|
||||
}
|
||||
else {
|
||||
local_58 = camera_position.vz;
|
||||
local_60 = lVar3;
|
||||
else
|
||||
{
|
||||
pivot.vz = camera_position.vz;
|
||||
pivot.vx = lVar3;
|
||||
}
|
||||
if (iVar5 == 0) {
|
||||
camera_position.vx = eventCamera.position.vx + (short)local_50;
|
||||
|
||||
if (iVar5 == 0)
|
||||
{
|
||||
camera_position.vx = eventCamera.position.vx + offset.vx;
|
||||
camera_position.vy = eventCamera.position.vy + offset.vy;
|
||||
camera_position.vz = eventCamera.position.vz + offset.vz;
|
||||
camera_angle.vy = eventCamera.yAng;
|
||||
camera_position.vy = eventCamera.position.vy + local_50._2_2_;
|
||||
camera_position.vz = eventCamera.position.vz + (short)local_4c;
|
||||
}
|
||||
else {
|
||||
camera_position.vx = eventCamera.position.vx;
|
||||
camera_position.vx._0_2_ = (short)eventCamera.position.vx;
|
||||
camera_position.vy = eventCamera.position.vy;
|
||||
camera_position.vy._0_2_ = (short)eventCamera.position.vy;
|
||||
camera_position.vz = eventCamera.position.vz;
|
||||
camera_position.vz._0_2_ = (short)eventCamera.position.vz;
|
||||
camera_position.pad = eventCamera.position.pad;
|
||||
local_48 = 0x1000;
|
||||
local_3c = 0;
|
||||
local_44 = 0;
|
||||
local_40 = 0x1000;
|
||||
local_38 = CONCAT22(local_38._2_2_, 0x1000);
|
||||
else
|
||||
{
|
||||
camera_position = eventCamera.position;
|
||||
|
||||
matrix.m[0][0] = 0x1000;
|
||||
matrix.m[1][0] = 0;
|
||||
matrix.m[2][0] = 0;
|
||||
|
||||
matrix.m[0][1] = 0;
|
||||
matrix.m[1][1] = 0x1000;
|
||||
matrix.m[2][1] = 0;
|
||||
|
||||
matrix.m[0][2] = 0;
|
||||
matrix.m[1][2] = 0;
|
||||
matrix.m[2][2] = 0x1000;
|
||||
|
||||
ang = (short)iVar5;
|
||||
if (uVar4 == 0x10) {
|
||||
|
||||
if (uVar4 == 0x10)
|
||||
{
|
||||
camera_angle.vy = camera_angle.vy - ang;
|
||||
in_at = CAR_POLY_ARRAY_000b0000;
|
||||
_RotMatrixY((MATRIX *)&local_48, ang);
|
||||
_RotMatrixY(&matrix, ang);
|
||||
}
|
||||
else {
|
||||
if (uVar4 < 0x11) {
|
||||
if (uVar4 == 0) {
|
||||
_RotMatrixX((MATRIX *)&local_48, ang);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (uVar4 == 0x20) {
|
||||
_RotMatrixZ((MATRIX *)&local_48, ang);
|
||||
}
|
||||
}
|
||||
else if (uVar4 == 0)
|
||||
{
|
||||
_RotMatrixX(&matrix, ang);
|
||||
}
|
||||
local_5c = (short)uVar2;
|
||||
local_28 = CONCAT22((short)camera_position.vy - local_5c,
|
||||
(short)camera_position.vx - (short)local_60);
|
||||
local_24 = CONCAT22(local_24._2_2_, (short)camera_position.vz - (short)local_58);
|
||||
setCopControlWord(2, 0, local_48);
|
||||
setCopControlWord(2, 0x800, local_44);
|
||||
setCopControlWord(2, 0x1000, local_40);
|
||||
setCopControlWord(2, 0x1800, local_3c);
|
||||
setCopControlWord(2, 0x2000, local_38);
|
||||
setCopControlWord(2, 0x2800, local_60);
|
||||
setCopControlWord(2, 0x3000, uVar2);
|
||||
setCopControlWord(2, 0x3800, local_58);
|
||||
setCopReg(2, in_zero, local_28);
|
||||
setCopReg(2, in_at, local_24);
|
||||
copFunction(2, 0x480012);
|
||||
camera_position.vx = getCopReg(2, 0x19);
|
||||
camera_position.vy = getCopReg(2, 0x1a);
|
||||
camera_position.vz = getCopReg(2, 0x1b);
|
||||
uVar1 = local_44._2_2_ ^ local_48._2_2_ ^ local_44._2_2_;
|
||||
local_48 = local_48 & 0xffff | (uint)(ushort)(local_48._2_2_ ^ local_44._2_2_ ^ uVar1) << 0x10;
|
||||
uVar4 = (ushort)local_3c ^ (ushort)local_44 ^ (ushort)local_3c;
|
||||
local_44 = CONCAT22(uVar1, (ushort)local_44 ^ (ushort)local_3c ^ uVar4);
|
||||
uVar1 = local_3c._2_2_ ^ local_40._2_2_ ^ local_3c._2_2_;
|
||||
local_3c = CONCAT22(uVar1, uVar4);
|
||||
local_40 = local_40 & 0xffff | (uint)(ushort)(local_40._2_2_ ^ local_3c._2_2_ ^ uVar1) << 0x10;
|
||||
setCopControlWord(2, 0, inv_camera_matrix.m[0]._0_4_);
|
||||
setCopControlWord(2, 0x800, inv_camera_matrix.m._4_4_);
|
||||
setCopControlWord(2, 0x1000, inv_camera_matrix.m[1]._2_4_);
|
||||
setCopControlWord(2, 0x1800, inv_camera_matrix.m[2]._0_4_);
|
||||
setCopControlWord(2, 0x2000, inv_camera_matrix._16_4_);
|
||||
MulRotMatrix(&local_48);
|
||||
inv_camera_matrix.m[0]._0_4_ = local_48;
|
||||
inv_camera_matrix.m._4_4_ = local_44;
|
||||
inv_camera_matrix.m[1]._2_4_ = local_40;
|
||||
inv_camera_matrix.m[2]._0_4_ = local_3c;
|
||||
inv_camera_matrix._16_4_ = local_38;
|
||||
inv_camera_matrix.t[0] = local_34;
|
||||
inv_camera_matrix.t[1] = local_30;
|
||||
inv_camera_matrix.t[2] = local_2c;
|
||||
camera_position.vx = camera_position.vx + (short)local_50;
|
||||
camera_position.vy = camera_position.vy + local_50._2_2_;
|
||||
camera_position.vz = camera_position.vz + (short)local_4c;
|
||||
else if (uVar4 == 0x20)
|
||||
{
|
||||
_RotMatrixZ(&matrix, ang);
|
||||
}
|
||||
|
||||
temp.vx = camera_position.vx - pivot.vx;
|
||||
temp.vy = camera_position.vy - pivot.vy;
|
||||
temp.vz = camera_position.vz - pivot.vz;
|
||||
|
||||
gte_SetRotMatrix(&matrix);
|
||||
gte_SetTransVector(&pivot);
|
||||
|
||||
gte_ldv0(&temp);
|
||||
|
||||
docop2(0x480012);
|
||||
|
||||
gte_stlvnl(&camera_position);
|
||||
|
||||
/*
|
||||
uVar1 = matrix.m[1][0] ^ matrix.m[0][1] ^ matrix.m[1][0];
|
||||
matrix.m[0]._0_4_ = matrix.m[0]._0_4_ & 0xffff | (uint)(ushort)(matrix.m[0][1] ^ matrix.m[1][0] ^ uVar1) << 0x10;
|
||||
uVar4 = matrix.m[2][0] ^ matrix.m[0][2] ^ matrix.m[2][0];
|
||||
matrix.m._4_4_ = CONCAT22(uVar1, matrix.m[0][2] ^ matrix.m[2][0] ^ uVar4);
|
||||
uVar1 = matrix.m[2][1] ^ matrix.m[1][2] ^ matrix.m[2][1];
|
||||
matrix.m[2]._0_4_ = CONCAT22(uVar1, uVar4);
|
||||
matrix.m[1]._2_4_ = matrix.m[1]._2_4_ & 0xffff | (uint)(ushort)(matrix.m[1][2] ^ matrix.m[2][1] ^ uVar1) << 0x10;
|
||||
*/
|
||||
matrix.m[0][0] = ~matrix.m[0][0];
|
||||
matrix.m[0][1] = ~matrix.m[0][1];
|
||||
matrix.m[0][2] = matrix.m[0][2] ^ 0xFFFF;
|
||||
matrix.m[1][0] = matrix.m[1][0];
|
||||
matrix.m[1][1] = matrix.m[1][1];
|
||||
matrix.m[1][2] = matrix.m[1][2];
|
||||
matrix.m[2][0] = ~matrix.m[2][0];
|
||||
matrix.m[2][1] = ~matrix.m[2][1];
|
||||
matrix.m[2][2] = matrix.m[2][2] ^ 0xFFFF;
|
||||
|
||||
gte_SetRotMatrix(&inv_camera_matrix);
|
||||
|
||||
MulRotMatrix(&matrix);
|
||||
inv_camera_matrix = matrix;
|
||||
|
||||
camera_position.vx += offset.vx;
|
||||
camera_position.vy += offset.vy;
|
||||
camera_position.vz += offset.vz;
|
||||
}
|
||||
|
||||
SetCameraVector();
|
||||
if ((iVar5 != 0) || (eventCamera.rotate != 0)) {
|
||||
|
||||
if ((iVar5 != 0) || (eventCamera.rotate != 0))
|
||||
{
|
||||
Set_Inv_CameraMatrix();
|
||||
SetCameraVector();
|
||||
SetupDrawMapPSX();
|
||||
}
|
||||
|
||||
eventCamera.rotate = iVar5;
|
||||
if ((ev->flags & 0x800U) == 0) {
|
||||
|
||||
if ((ev->flags & 0x800U) == 0)
|
||||
{
|
||||
events.draw = ev->model;
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
ev->flags = ev->flags & 0xfffe;
|
||||
events.draw = 0;
|
||||
}
|
||||
return;*/
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user