This commit is contained in:
asasas9500 2020-04-09 11:39:13 -03:00
commit dd5ca3cc32
20 changed files with 937 additions and 192 deletions

View file

@ -1,15 +1,38 @@
#include "camera.h"
#include "Camera.h"
#include <d3d9.h>
#include <d3dx9.h>
#include <stdio.h>
#include "draw.h"
#include "lara.h"
#include "effects.h"
#include "effect2.h"
#include "debris.h"
struct OLD_CAMERA
{
short currentAnimState;
short goalAnimState;
int targetDistance;
short actualElevation;
short targetElevation;
short actualAngle;
PHD_3DPOS pos;
PHD_3DPOS pos2;
PHD_VECTOR target;
};
#define LfAspectCorrection VAR_U_(0x0055DA30, float)
#define LastTarget VAR_U_(0x00EEFA30, GAME_VECTOR)
extern int KeyTriggerActive;
PHD_VECTOR CurrentCameraPosition;
SVECTOR CurrentCameraRotation;
GAME_VECTOR LastIdeal;
GAME_VECTOR Ideals[5];
OLD_CAMERA OldCam;
int CameraSnaps = 0;
int TargetSnaps = 0;
void ActivateCamera()
{
@ -57,7 +80,7 @@ void AlterFOV(int value)
{
CurrentFOV = value;
PhdPerspective = PhdWidth / 2 * COS(CurrentFOV / 2) / SIN(CurrentFOV / 2);
LfAspectCorrection = 1; // 1.3333334f / (float)(PhdWidth / PhdHeight);
LfAspectCorrection = 1.3333334f / (float)(PhdWidth / PhdHeight);
}
int mgLOS(GAME_VECTOR* start, GAME_VECTOR* target, int push)
@ -129,6 +152,721 @@ int mgLOS(GAME_VECTOR* start, GAME_VECTOR* target, int push)
return flag == 0;
}
void InitialiseCamera()
{
Camera.shift = LaraItem->pos.yPos - 1024;
LastTarget.x = LaraItem->pos.xPos;
LastTarget.y = Camera.shift;
LastTarget.z = LaraItem->pos.zPos;
LastTarget.roomNumber = LaraItem->roomNumber;
Camera.target.x = LastTarget.x;
Camera.target.y = Camera.shift;
Camera.target.z = LastTarget.z;
Camera.target.roomNumber = LaraItem->roomNumber;
Camera.pos.x = LastTarget.x;
Camera.pos.y = Camera.shift;
Camera.pos.z = LastTarget.z - 100;
Camera.pos.roomNumber = LaraItem->roomNumber;
Camera.targetDistance = 1536;
Camera.item = NULL;
Camera.numberFrames = 1;
Camera.type = CHASE_CAMERA;
Camera.speed = 1;
Camera.flags = CF_FOLLOW_CENTER;
Camera.bounce = 0;
Camera.number = -1;
Camera.fixedCamera = 0;
AlterFOV(14560);
UseForcedFixedCamera = 0;
CalculateCamera();
}
void MoveCamera(GAME_VECTOR* ideal, int speed)
{
GAME_VECTOR from, to;
if (BinocularOn < 0)
{
speed = 1;
BinocularOn++;
}
if (OldCam.pos.xRot != LaraItem->pos.xRot
|| OldCam.pos.yRot != LaraItem->pos.yRot
|| OldCam.pos.zRot != LaraItem->pos.zRot
|| OldCam.pos2.xRot != Lara.headXrot
|| OldCam.pos2.yRot != Lara.headYrot
|| OldCam.pos2.xPos != Lara.torsoXrot
|| OldCam.pos2.yPos != Lara.torsoYrot
|| OldCam.pos.xPos != LaraItem->pos.xPos
|| OldCam.pos.yPos != LaraItem->pos.yPos
|| OldCam.pos.zPos != LaraItem->pos.zPos
|| OldCam.currentAnimState != LaraItem->currentAnimState
|| OldCam.goalAnimState != LaraItem->goalAnimState
|| OldCam.targetDistance != Camera.targetDistance
|| OldCam.targetElevation != Camera.targetElevation
|| OldCam.actualElevation != Camera.actualElevation
|| OldCam.actualAngle != Camera.actualAngle
|| OldCam.target.x != Camera.target.x
|| OldCam.target.y != Camera.target.y
|| OldCam.target.z != Camera.target.z
|| Camera.oldType != Camera.type
|| SniperOverlay
|| BinocularOn < 0)
{
OldCam.pos.xRot = LaraItem->pos.xRot;
OldCam.pos.yRot = LaraItem->pos.yRot;
OldCam.pos.zRot = LaraItem->pos.zRot;
OldCam.pos2.xRot = Lara.headXrot;
OldCam.pos2.yRot = Lara.headYrot;
OldCam.pos2.xPos = Lara.torsoXrot;
OldCam.pos2.yPos = Lara.torsoYrot;
OldCam.pos.xPos = LaraItem->pos.xPos;
OldCam.pos.yPos = LaraItem->pos.yPos;
OldCam.pos.zPos = LaraItem->pos.zPos;
OldCam.currentAnimState = LaraItem->currentAnimState;
OldCam.goalAnimState = LaraItem->goalAnimState;
OldCam.targetDistance = Camera.targetDistance;
OldCam.targetElevation = Camera.targetElevation;
OldCam.actualElevation = Camera.actualElevation;
OldCam.actualAngle = Camera.actualAngle;
OldCam.target.x = Camera.target.x;
OldCam.target.y = Camera.target.y;
OldCam.target.z = Camera.target.z;
LastIdeal.x = ideal->x;
LastIdeal.y = ideal->y;
LastIdeal.z = ideal->z;
LastIdeal.roomNumber = ideal->roomNumber;
}
else
{
ideal->x = LastIdeal.x;
ideal->y = LastIdeal.y;
ideal->z = LastIdeal.z;
ideal->roomNumber = LastIdeal.roomNumber;
}
Camera.pos.x += (ideal->x - Camera.pos.x) / speed;
Camera.pos.y += (ideal->y - Camera.pos.y) / speed;
Camera.pos.z += (ideal->z - Camera.pos.z) / speed;
Camera.pos.roomNumber = ideal->roomNumber;
if (Camera.bounce)
{
if (Camera.bounce <= 0)
{
int bounce = -Camera.bounce;
int bounce2 = -Camera.bounce >> 2;
Camera.target.x += GetRandomControl() % bounce - bounce2;
Camera.target.y += GetRandomControl() % bounce - bounce2;
Camera.target.z += GetRandomControl() % bounce - bounce2;
Camera.bounce += 5;
}
else
{
Camera.pos.y += Camera.bounce;
Camera.target.y += Camera.bounce;
Camera.bounce = 0;
}
}
short roomNumber = Camera.pos.roomNumber;
FLOOR_INFO* floor = GetFloor(Camera.pos.x, Camera.pos.y, Camera.pos.z, &roomNumber);
int height = GetFloorHeight(floor, Camera.pos.x, Camera.pos.y, Camera.pos.z);
if (Camera.pos.y < GetCeiling(floor, Camera.pos.x, Camera.pos.y, Camera.pos.z) || Camera.pos.y > height)
{
mgLOS(&Camera.target, &Camera.pos, 0);
if (abs(Camera.pos.x - ideal->x) < 768
&& abs(Camera.pos.y - ideal->y) < 768
&& abs(Camera.pos.z - ideal->z) < 768)
{
to.x = Camera.pos.x;
to.y = Camera.pos.y;
to.z = Camera.pos.z;
to.roomNumber = Camera.pos.roomNumber;
from.x = ideal->x;
from.y = ideal->y;
from.z = ideal->z;
from.roomNumber = ideal->roomNumber;
if (!mgLOS(&from, &to, 0) && ++CameraSnaps >= 8)
{
Camera.pos.x = ideal->x;
Camera.pos.y = ideal->y;
Camera.pos.z = ideal->z;
Camera.pos.roomNumber = ideal->roomNumber;
CameraSnaps = 0;
}
}
}
roomNumber = Camera.pos.roomNumber;
floor = GetFloor(Camera.pos.x, Camera.pos.y, Camera.pos.z, &roomNumber);
height = GetFloorHeight(floor, Camera.pos.x, Camera.pos.y, Camera.pos.z);
int ceiling = GetCeiling(floor, Camera.pos.x, Camera.pos.y, Camera.pos.z);
if (Camera.pos.y - 255 < ceiling && Camera.pos.y + 255 > height && ceiling < height && ceiling != NO_HEIGHT && height != NO_HEIGHT)
Camera.pos.y = (height + ceiling) >> 1;
else if (Camera.pos.y + 255 > height && ceiling < height && ceiling != NO_HEIGHT && height != NO_HEIGHT)
Camera.pos.y = height - 255;
else if (Camera.pos.y - 255 < ceiling && ceiling < height && ceiling != NO_HEIGHT && height != NO_HEIGHT)
Camera.pos.y = ceiling + 255;
else if (ceiling >= height || height == NO_HEIGHT || ceiling == NO_HEIGHT)
{
Camera.pos.x = ideal->x;
Camera.pos.y = ideal->y;
Camera.pos.z = ideal->z;
Camera.pos.roomNumber = ideal->roomNumber;
}
GetFloor(Camera.pos.x, Camera.pos.y, Camera.pos.z, &Camera.pos.roomNumber);
LookAt(Camera.pos.x, Camera.pos.y, Camera.pos.z, Camera.target.x, Camera.target.y, Camera.target.z, 0);
if (Camera.mikeAtLara)
{
Camera.mikePos.x = LaraItem->pos.xPos;
Camera.mikePos.y = LaraItem->pos.yPos;
Camera.mikePos.z = LaraItem->pos.zPos;
Camera.oldType = Camera.type;
}
else
{
short angle = ATAN(Camera.target.z - Camera.pos.z, Camera.target.x - Camera.pos.x);
Camera.mikePos.x += PhdPerspective * SIN(angle) >> W2V_SHIFT;
Camera.mikePos.y = Camera.pos.y;
Camera.mikePos.z += PhdPerspective * COS(angle) >> W2V_SHIFT;
Camera.oldType = Camera.type;
}
}
void ChaseCamera(ITEM_INFO* item)
{
if (!Camera.targetElevation)
{
Camera.targetElevation = -ANGLE(10);
}
Camera.targetElevation += item->pos.xRot;
UpdateCameraElevation();
if (Camera.actualElevation > ANGLE(85))
Camera.actualElevation = ANGLE(85);
else if (Camera.actualElevation < -ANGLE(85))
Camera.actualElevation = -ANGLE(85);
int distance = Camera.targetDistance * COS(Camera.actualElevation) >> W2V_SHIFT;
GetFloor(Camera.target.x, Camera.target.y, Camera.target.z, &Camera.target.roomNumber);
if (Rooms[Camera.target.roomNumber].flags & ENV_FLAG_SWAMP)
Camera.target.y = Rooms[Camera.target.roomNumber].y - 256;
int wx = Camera.target.x;
int wy = Camera.target.y;
int wz = Camera.target.z;
short roomNumber = Camera.target.roomNumber;
FLOOR_INFO* floor = GetFloor(wx, wy, wz, &roomNumber);
int h = GetFloorHeight(floor, wx, wy, wz);
int c = GetCeiling(floor, wx, wy, wz);
if ((((wy < c) || (h < wy)) || (h <= c)) || ((h == NO_HEIGHT || (c == NO_HEIGHT))))
{
TargetSnaps++;
Camera.target.x = LastTarget.x;
Camera.target.y = LastTarget.y;
Camera.target.z = LastTarget.z;
Camera.target.roomNumber = LastTarget.roomNumber;
}
else
{
TargetSnaps = 0;
}
for (int i = 0; i < 5; i++)
{
Ideals[i].y = Camera.target.y + (Camera.targetDistance * SIN(Camera.actualElevation) >> W2V_SHIFT);
}
int farthest = 0x7FFFFFFF;
int farthestnum = 0;
GAME_VECTOR temp[2];
for (int i = 0; i < 5; i++)
{
short angle;
if (i == 0)
{
angle = Camera.actualAngle;
}
else
{
angle = (i - 1) * ANGLE(90);
}
Ideals[i].x = Camera.target.x - ((distance * SIN(angle)) >> W2V_SHIFT);
Ideals[i].z = Camera.target.z - ((distance * COS(angle)) >> W2V_SHIFT);
Ideals[i].roomNumber = Camera.target.roomNumber;
if (mgLOS(&Camera.target, &Ideals[i], 200))
{
temp[0].x = Ideals[i].x;
temp[0].y = Ideals[i].y;
temp[0].z = Ideals[i].z;
temp[0].roomNumber = Ideals[i].roomNumber;
temp[1].x = Camera.pos.x;
temp[1].y = Camera.pos.y;
temp[1].z = Camera.pos.z;
temp[1].roomNumber = Camera.pos.roomNumber;
if (i == 0 || mgLOS(&temp[0], &temp[1], 0))
{
if (i == 0)
{
farthestnum = 0;
break;
}
int dx = (Camera.pos.x - Ideals[i].x) * (Camera.pos.x - Ideals[i].x);
dx += (Camera.pos.z - Ideals[i].z) * (Camera.pos.z - Ideals[i].z);
if (dx < farthest)
{
farthest = dx;
farthestnum = i;
}
}
}
else if (i == 0)
{
temp[0].x = Ideals[i].x;
temp[0].y = Ideals[i].y;
temp[0].z = Ideals[i].z;
temp[0].roomNumber = Ideals[i].roomNumber;
temp[1].x = Camera.pos.x;
temp[1].y = Camera.pos.y;
temp[1].z = Camera.pos.z;
temp[1].roomNumber = Camera.pos.roomNumber;
if (i == 0 || mgLOS(&temp[0], &temp[1], 0))
{
int dx = (Camera.target.x - Ideals[i].x) * (Camera.target.x - Ideals[i].x);
int dz = (Camera.target.z - Ideals[i].z) * (Camera.target.z - Ideals[i].z);
if ((dx + dz) > 0x90000)
{
farthestnum = 0;
break;
}
}
}
}
GAME_VECTOR ideal;
ideal.x = Ideals[farthestnum].x;
ideal.y = Ideals[farthestnum].y;
ideal.z = Ideals[farthestnum].z;
ideal.roomNumber = Ideals[farthestnum].roomNumber;
CameraCollisionBounds(&ideal, 384, 1);
if (Camera.oldType == FIXED_CAMERA)
{
Camera.speed = 1;
}
MoveCamera(&ideal, Camera.speed);
}
void UpdateCameraElevation()
{
PHD_VECTOR pos;
PHD_VECTOR pos1;
if (Camera.laraNode != -1)
{
pos.z = 0;
pos.y = 0;
pos.x = 0;
GetLaraJointPosition(&pos, Camera.laraNode);
pos1.x = 0;
pos1.y = -256;
pos1.z = 2048;
GetLaraJointPosition(&pos1, Camera.laraNode);
pos.z = pos1.z - pos.z;
pos.x = pos1.x - pos.x;
Camera.actualAngle = Camera.targetAngle + ATAN(pos.z, pos.x);
}
else
{
Camera.actualAngle = LaraItem->pos.yRot + Camera.targetAngle;
}
Camera.actualElevation += (Camera.targetElevation - Camera.actualElevation) >> 3;
}
void CombatCamera(ITEM_INFO* item)
{
Camera.target.x = item->pos.xPos;
Camera.target.z = item->pos.zPos;
if (Lara.target)
{
Camera.targetAngle = Lara.targetAngles[0];
Camera.targetElevation = Lara.targetAngles[1] + item->pos.xRot;
}
else
{
Camera.targetAngle = Lara.headYrot + Lara.torsoYrot;
Camera.targetElevation = Lara.headXrot + Lara.torsoXrot + item->pos.xRot - ANGLE(15);
}
FLOOR_INFO* floor = GetFloor(Camera.target.x, Camera.target.y, Camera.target.z, &Camera.target.roomNumber);
int h = GetFloorHeight(floor, Camera.target.x, Camera.target.y, Camera.target.z);
int c = GetCeiling(floor, Camera.target.x, Camera.target.y, Camera.target.z);
if (c + 64 > h - 64 && h != NO_HEIGHT && c != NO_HEIGHT)
{
Camera.target.y = (c + h) >> 1;
Camera.targetElevation = 0;
}
else if (Camera.target.y > h - 64 && h != NO_HEIGHT)
{
Camera.target.y = h - 64;
Camera.targetElevation = 0;
}
else if (Camera.target.y < c + 64 && c != NO_HEIGHT)
{
Camera.target.y = c + 64;
Camera.targetElevation = 0;
}
GetFloor(Camera.target.x, Camera.target.y, Camera.target.z, &Camera.target.roomNumber);
int wx = Camera.target.x;
int wy = Camera.target.y;
int wz = Camera.target.z;
short roomNumber = Camera.target.roomNumber;
floor = GetFloor(Camera.target.x, Camera.target.y, Camera.target.z, &roomNumber);
h = GetFloorHeight(floor, wx, wy, wz);
c = GetCeiling(floor, wx, wy, wz);
if (wy < c || wy > h || c >= h || h == NO_HEIGHT || c == NO_HEIGHT)
{
TargetSnaps++;
Camera.target.x = LastTarget.x;
Camera.target.y = LastTarget.y;
Camera.target.z = LastTarget.z;
Camera.target.roomNumber = LastTarget.roomNumber;
}
else
{
TargetSnaps = 0;
}
UpdateCameraElevation();
Camera.targetDistance = 1536;
int distance = Camera.targetDistance * COS(Camera.actualElevation) >> W2V_SHIFT;
for (int i = 0; i < 5; i++)
{
Ideals[i].y = Camera.target.y + (Camera.targetDistance * SIN(Camera.actualElevation) >> W2V_SHIFT);
}
int farthest = 0x7FFFFFFF;
int farthestnum = 0;
GAME_VECTOR temp[2];
for (int i = 0; i < 5; i++)
{
short angle;
if (i == 0)
{
angle = Camera.actualAngle;
}
else
{
angle = (i - 1) * ANGLE(90);
}
Ideals[i].x = Camera.target.x - ((distance * SIN(angle)) >> W2V_SHIFT);
Ideals[i].z = Camera.target.z - ((distance * COS(angle)) >> W2V_SHIFT);
Ideals[i].roomNumber = Camera.target.roomNumber;
if (mgLOS(&Camera.target, &Ideals[i], 200))
{
temp[0].x = Ideals[i].x;
temp[0].y = Ideals[i].y;
temp[0].z = Ideals[i].z;
temp[0].roomNumber = Ideals[i].roomNumber;
temp[1].x = Camera.pos.x;
temp[1].y = Camera.pos.y;
temp[1].z = Camera.pos.z;
temp[1].roomNumber = Camera.pos.roomNumber;
if (i == 0 || mgLOS(&temp[0], &temp[1], 0))
{
if (i == 0)
{
farthestnum = 0;
break;
}
int dx = (Camera.pos.x - Ideals[i].x) * (Camera.pos.x - Ideals[i].x);
dx += (Camera.pos.z - Ideals[i].z) * (Camera.pos.z - Ideals[i].z);
if (dx < farthest)
{
farthest = dx;
farthestnum = i;
}
}
}
else if (i == 0)
{
temp[0].x = Ideals[i].x;
temp[0].y = Ideals[i].y;
temp[0].z = Ideals[i].z;
temp[0].roomNumber = Ideals[i].roomNumber;
temp[1].x = Camera.pos.x;
temp[1].y = Camera.pos.y;
temp[1].z = Camera.pos.z;
temp[1].roomNumber = Camera.pos.roomNumber;
if (i == 0 || mgLOS(&temp[0], &temp[1], 0))
{
int dx = (Camera.target.x - Ideals[i].x) * (Camera.target.x - Ideals[i].x);
int dz = (Camera.target.z - Ideals[i].z) * (Camera.target.z - Ideals[i].z);
if ((dx + dz) > 0x90000)
{
farthestnum = 0;
break;
}
}
}
}
GAME_VECTOR ideal;
ideal.x = Ideals[farthestnum].x;
ideal.y = Ideals[farthestnum].y;
ideal.z = Ideals[farthestnum].z;
ideal.roomNumber = Ideals[farthestnum].roomNumber;
CameraCollisionBounds(&ideal, 384, 1);
if (Camera.oldType == FIXED_CAMERA)
{
Camera.speed = 1;
}
MoveCamera(&ideal, Camera.speed);
}
int CameraCollisionBounds(GAME_VECTOR* ideal, int push, int yFirst)
{
int wx = ideal->x;
int wy = ideal->y;
int wz = ideal->z;
short roomNumber;
FLOOR_INFO* floor;
int h;
int c;
if (yFirst)
{
roomNumber = ideal->roomNumber;
floor = GetFloor(wx, wy, wz, &roomNumber);
h = GetFloorHeight(floor, wx, wy, wz);
c = GetCeiling(floor, wx, wy, wz);
if (wy - 255 < c && wy + 255 > h && c < h && c != NO_HEIGHT && h != NO_HEIGHT)
wy = (h + c) >> 1;
else if (wy + 255 > h && c < h && c != NO_HEIGHT && h != NO_HEIGHT)
wy = h - 255;
else if (wy - 255 < c && c < h && c != NO_HEIGHT && h != NO_HEIGHT)
wy = c + 255;
}
roomNumber = ideal->roomNumber;
floor = GetFloor(wx - push, wy, wz, &roomNumber);
h = GetFloorHeight(floor, wx - push, wy, wz);
c = GetCeiling(floor, wx - push, wy, wz);
if (wy > h || h == NO_HEIGHT || c == NO_HEIGHT || c >= h || wy < c)
wx = (wx & (~1023)) + push;
roomNumber = ideal->roomNumber;
floor = GetFloor(wx, wy, wz - push, &roomNumber);
h = GetFloorHeight(floor, wx, wy, wz - push);
c = GetCeiling(floor, wx, wy, wz - push);
if (wy > h || h == NO_HEIGHT || c == NO_HEIGHT || c >= h || wy < c)
wz = (wz & (~1023)) + push;
roomNumber = ideal->roomNumber;
floor = GetFloor(wx + push, wy, wz, &roomNumber);
h = GetFloorHeight(floor, wx + push, wy, wz);
c = GetCeiling(floor, wx + push, wy, wz);
if (wy > h || h == NO_HEIGHT || c == NO_HEIGHT || c >= h || wy < c)
wx = (wx | 1023) - push;
roomNumber = ideal->roomNumber;
floor = GetFloor(wx, wy, wz + push, &roomNumber);
h = GetFloorHeight(floor, wx, wy, wz + push);
c = GetCeiling(floor, wx, wy, wz + push);
if (wy > h || h == NO_HEIGHT || c == NO_HEIGHT || c >= h || wy < c)
wz = (wz | 1023) - push;
if (!yFirst)
{
roomNumber = ideal->roomNumber;
floor = GetFloor(wx, wy, wz, &roomNumber);
h = GetFloorHeight(floor, wx, wy, wz);
c = GetCeiling(floor, wx, wy, wz);
if (wy - 255 < c && wy + 255 > h && c < h && c != NO_HEIGHT && h != NO_HEIGHT)
wy = (h + c) >> 1;
else if (wy + 255 > h && c < h && c != NO_HEIGHT && h != NO_HEIGHT)
wy = h - 255;
else if (wy - 255 < c && c < h && c != NO_HEIGHT && h != NO_HEIGHT)
wy = c + 255;
}
roomNumber = ideal->roomNumber;
floor = GetFloor(wx, wy, wz, &roomNumber);
h = GetFloorHeight(floor, wx, wy, wz);
c = GetCeiling(floor, wx, wy, wz);
if (wy > h || wy < c || h == NO_HEIGHT || c == NO_HEIGHT || c >= h)
return 1;
floor = GetFloor(wx, wy, wz, &ideal->roomNumber);
ideal->x = wx;
ideal->y = wy;
ideal->z = wz;
return 0;
}
void FixedCamera()
{
GAME_VECTOR from, to;
if (UseForcedFixedCamera)
{
from.x = ForcedFixedCamera.x;
from.y = ForcedFixedCamera.y;
from.z = ForcedFixedCamera.z;
from.roomNumber = ForcedFixedCamera.roomNumber;
}
else
{
OBJECT_VECTOR* camera = &Cameras[Camera.number];
from.x = camera->x;
from.y = camera->y;
from.z = camera->z;
from.roomNumber = camera->data;
if (camera->flags & 2)
{
if (FlashFader > 2)
{
FlashFader = (FlashFader >> 1) & 0xFE;
}
SniperOverlay = 1;
Camera.target.x = (Camera.target.x + 2 * LastTarget.x) / 3;
Camera.target.y = (Camera.target.y + 2 * LastTarget.y) / 3;
Camera.target.z = (Camera.target.z + 2 * LastTarget.z) / 3;
if (SniperCount)
{
SniperCount--;
}
else
{
to.x = Camera.target.x + ((Camera.target.x - Camera.pos.x) >> 1);
to.y = Camera.target.y + ((Camera.target.y - Camera.pos.y) >> 1);
to.z = Camera.target.z + ((Camera.target.z - Camera.pos.z) >> 1);
int los = LOS(&from, &to);
GetLaraOnLOS = 1;
PHD_VECTOR pos;
int objLos = ObjectOnLOS2(&from, &to, &pos, &CollidedMeshes[0]);
objLos = (objLos != 999 && objLos >= 0 && Items[objLos].objectNumber != ID_LARA);
if (!(GetRandomControl() & 0x3F)
|| !(GlobalCounter & 0x3F)
|| objLos && !(GlobalCounter & 0xF) && GetRandomControl() & 1)
{
SoundEffect(SFX_EXPLOSION1, 0, 83886084);
SoundEffect(SFX_HK_FIRE, 0, 0);
FlashFadeR = 192;
FlashFadeB = 0;
FlashFader = 24;
FlashFadeG = (GetRandomControl() & 0x1F) + 160;
SniperCount = 15;
if (objLos && GetRandomControl() & 3)
{
DoBloodSplat(pos.x, pos.y, pos.z, (GetRandomControl() & 3) + 3, 2 * GetRandomControl(), LaraItem->roomNumber);
LaraItem->hitPoints -= 100;
GetLaraOnLOS = 0;
}
else if (objLos < 0)
{
MESH_INFO* mesh = CollidedMeshes[0];
if (mesh->staticNumber >= 50 && mesh->staticNumber < 58)
{
ShatterObject(0, mesh, 128, to.roomNumber, 0);
mesh->Flags &= ~1;
SoundEffect(ShatterSounds[CurrentLevel - 5][mesh->staticNumber], (PHD_3DPOS*)mesh, 0);
}
TriggerRicochetSpark(&to, 2 * GetRandomControl(), 3, 0);
TriggerRicochetSpark(&to, 2 * GetRandomControl(), 3, 0);
GetLaraOnLOS = 0;
}
else if (!los)
{
TriggerRicochetSpark(&to, 2 * GetRandomControl(), 3, 0);
}
}
GetLaraOnLOS = 0;
}
}
}
Camera.fixedCamera = 1;
MoveCamera(&from, 1);
if (Camera.timer)
{
if (!--Camera.timer)
Camera.timer = -1;
}
}
void BounceCamera(ITEM_INFO* item, short bounce, short maxDistance)
{
int distance;
@ -156,4 +894,11 @@ void Inject_Camera()
INJECT(0x0048EDC0, AlterFOV);
INJECT(0x0048F760, LookAt);
INJECT(0x0040FA70, mgLOS);
INJECT(0x0040C7A0, MoveCamera);
INJECT(0x0040C690, InitialiseCamera);
INJECT(0x004107C0, UpdateCameraElevation);
INJECT(0x0040D150, ChaseCamera);
INJECT(0x0040D640, CombatCamera);
INJECT(0x0040F5C0, CameraCollisionBounds);
INJECT(0x0040E890, FixedCamera);
}

View file

@ -8,16 +8,16 @@
#define ForcedFixedCamera VAR_U_(0x00EEFA20, GAME_VECTOR)
#define UseForcedFixedCamera VAR_U_(0x00EEFA50, char)
#define InitialiseCamera ((void (__cdecl*)()) 0x0040C690)
#define MoveCamera ((int(__cdecl*)(GAME_VECTOR*,int)) 0x0040C7A0)
#define ChaseCamera ((int(__cdecl*)(ITEM_INFO*)) 0x0040D150)
#define CombatCamera ((int(__cdecl*)(ITEM_INFO*)) 0x0040D640)
//#define InitialiseCamera ((void (__cdecl*)()) 0x0040C690)
//#define MoveCamera ((int(__cdecl*)(GAME_VECTOR*,int)) 0x0040C7A0)
//#define ChaseCamera ((int(__cdecl*)(ITEM_INFO*)) 0x0040D150)
//#define CombatCamera ((int(__cdecl*)(ITEM_INFO*)) 0x0040D640)
#define LookCamera ((void(__cdecl*)(ITEM_INFO*)) 0x0040DC10)
#define FixedCamera ((void(__cdecl*)()) 0x0040E890)
//#define FixedCamera ((void(__cdecl*)()) 0x0040E890)
#define CalculateCamera ((void(__cdecl*)()) 0x0040ED30)
#define BinocularCamera ((void(__cdecl*)()) 0x0040FC20)
//#define RefreshCamera ((void(__cdecl*)(short,short*)) 0x004165E0)
#define CameraCollisionBounds ((int (__cdecl*)(GAME_VECTOR*,int,int)) 0x0040F5C0)
//#define CameraCollisionBounds ((int (__cdecl*)(GAME_VECTOR*,int,int)) 0x0040F5C0)
#define do_new_cutscene_camera ((void(__cdecl*)()) 0x00421480)
#define SaveD3DCameraMatrix ((void(__cdecl*)()) 0x00497280)
#define UnknownCamera ((void(__cdecl*)()) 0x004975D0)
@ -28,6 +28,13 @@ void ActivateCamera();
void LookAt(int posX, int posY, int posZ, int targetX, int targetY, int targetZ, short roll);
void AlterFOV(int value);
int mgLOS(GAME_VECTOR* start, GAME_VECTOR* target, int push);
void InitialiseCamera();
void MoveCamera(GAME_VECTOR* ideal, int speed);
void ChaseCamera(ITEM_INFO* item);
void UpdateCameraElevation();
void CombatCamera(ITEM_INFO* item);
int CameraCollisionBounds(GAME_VECTOR* ideal, int push, int yFirst);
void FixedCamera();
void BounceCamera(ITEM_INFO* item, short bounce, short maxDistance);
void Inject_Camera();

View file

@ -290,7 +290,7 @@ void PistolHandler(int weaponType)
pos.z = (byte)GetRandomControl() - 128;
GetLaraJointPosition(&pos, Lara.leftArm.flash_gun != 0 ? LJ_LHAND : LJ_RHAND);
/*if (gfLevelFlags & 0x2000 && LaraItem->room_number == gfMirrorRoom)
/*if (gfLevelFlags & 0x2000 && LaraItem->roomNumber == gfMirrorRoom)
{
v8 = GetRandomControl() & 0x3F;
v9 = (GetRandomControl() & 0x1F) + 128;

View file

@ -134,7 +134,7 @@ void ControlNatlaGun(short fx_number)
FX_INFO* fx, *newfx;
OBJECT_INFO* object;
FLOOR_INFO* floor;
short room_number;
short roomNumber;
int x, y, z;
fx = &Effects[fx_number];
@ -149,14 +149,14 @@ void ControlNatlaGun(short fx_number)
z = fx->pos.zPos + (fx->speed * COS(fx->pos.yRot) >> W2V_SHIFT);
x = fx->pos.xPos + (fx->speed * SIN(fx->pos.yRot) >> W2V_SHIFT);
y = fx->pos.yPos;
room_number = fx->roomNumber;
floor = GetFloor(x, y, z, &room_number);
roomNumber = fx->roomNumber;
floor = GetFloor(x, y, z, &roomNumber);
/* Don't create one if hit a wall */
if (y >= GetFloorHeight(floor, x, y, z) || y <= GetCeiling(floor, x, y, z))
return;
fx_number = CreateNewEffect(room_number);
fx_number = CreateNewEffect(roomNumber);
if (fx_number != NO_ITEM)
{
newfx = &Effects[fx_number];
@ -164,7 +164,7 @@ void ControlNatlaGun(short fx_number)
newfx->pos.yPos = y;
newfx->pos.zPos = z;
newfx->pos.yRot = fx->pos.yRot;
newfx->roomNumber = room_number;
newfx->roomNumber = roomNumber;
newfx->speed = fx->speed;
newfx->frameNumber = 0;
newfx->objectNumber = ID_PROJ_NATLA;
@ -172,19 +172,19 @@ void ControlNatlaGun(short fx_number)
}
}
short ShardGun(int x, int y, int z, short speed, short yrot, short room_number)
short ShardGun(int x, int y, int z, short speed, short yrot, short roomNumber)
{
short fx_number;
FX_INFO* fx;
fx_number = CreateNewEffect(room_number);
fx_number = CreateNewEffect(roomNumber);
if (fx_number != NO_ITEM)
{
fx = &Effects[fx_number];
fx->pos.xPos = x;
fx->pos.yPos = y;
fx->pos.zPos = z;
fx->roomNumber = room_number;
fx->roomNumber = roomNumber;
fx->pos.xRot = fx->pos.zRot = 0;
fx->pos.yRot = yrot;
fx->speed = SHARD_SPEED;
@ -197,19 +197,19 @@ short ShardGun(int x, int y, int z, short speed, short yrot, short room_number)
return (fx_number);
}
short BombGun(int x, int y, int z, short speed, short yrot, short room_number)
short BombGun(int x, int y, int z, short speed, short yrot, short roomNumber)
{
short fx_number;
FX_INFO* fx;
fx_number = CreateNewEffect(room_number);
fx_number = CreateNewEffect(roomNumber);
if (fx_number != NO_ITEM)
{
fx = &Effects[fx_number];
fx->pos.xPos = x;
fx->pos.yPos = y;
fx->pos.zPos = z;
fx->roomNumber = room_number;
fx->roomNumber = roomNumber;
fx->pos.xRot = fx->pos.zRot = 0;
fx->pos.yRot = yrot;
fx->speed = ROCKET_SPEED;
@ -222,19 +222,19 @@ short BombGun(int x, int y, int z, short speed, short yrot, short room_number)
return (fx_number);
}
short NatlaGun(int x, int y, int z, short speed, short yrot, short room_number)
short NatlaGun(int x, int y, int z, short speed, short yrot, short roomNumber)
{
short fx_number;
FX_INFO* fx;
fx_number = CreateNewEffect(room_number);
fx_number = CreateNewEffect(roomNumber);
if (fx_number != NO_ITEM)
{
fx = &Effects[fx_number];
fx->pos.xPos = x;
fx->pos.yPos = y;
fx->pos.zPos = z;
fx->roomNumber = room_number;
fx->roomNumber = roomNumber;
fx->pos.xRot = fx->pos.zRot = 0;
fx->pos.yRot = yrot;
fx->speed = NATLAGUN_SPEED;

View file

@ -9,6 +9,6 @@ void ShootAtLara(FX_INFO* fx);
void ControlMissile(short fxNumber);
void ControlNatlaGun(short fx_number);
short ShardGun(int x, int y, int z, short speed, short yrot, short room_number);
short BombGun(int x, int y, int z, short speed, short yrot, short room_number); // RocketGun = BombGun
short NatlaGun(int x, int y, int z, short speed, short yrot, short room_number);
short ShardGun(int x, int y, int z, short speed, short yrot, short roomNumber);
short BombGun(int x, int y, int z, short speed, short yrot, short roomNumber); // RocketGun = BombGun
short NatlaGun(int x, int y, int z, short speed, short yrot, short roomNumber);

View file

@ -574,7 +574,7 @@ void TriggerGunSmoke(int x, int y, int z, short xv, short yv, short zv, byte ini
spark->dSize = size;
}
/*if (gfLevelFlags & 0x20 && LaraItem->room_number == gfMirrorRoom) // 0x20 = GF_MIRROR_ENABLED
/*if (gfLevelFlags & 0x20 && LaraItem->roomNumber == gfMirrorRoom) // 0x20 = GF_MIRROR_ENABLED
{
spark->mirror = 1;
}
@ -1765,7 +1765,7 @@ void TriggerExplosionBubble(int x, int y, int z, short roomNum)// (F)
pos.x = item->pos.x_pos;
pos.y = item->pos.y_pos;
pos.z = item->pos.z_pos;
pos.room_number = item->room_number;
pos.roomNumber = item->roomNumber;
SetUpLensFlare(0, 0, 0, &pos);
}*/

View file

@ -69,20 +69,20 @@ void createBartoliLight(short ItemIndex, int type)
TriggerDynamicLight(item->pos.xPos, item->pos.yPos - STEP_SIZE, item->pos.zPos, (GetRandomControl() & 20) + 25, (GetRandomControl() & 30) + 200, (GetRandomControl() & 25) + 50, (GetRandomControl() & 20) + 0);
}
short dragonFire(int x, int y, int z, short speed, short yrot, short room_number)
short dragonFire(int x, int y, int z, short speed, short yrot, short roomNumber)
{
short fx_number = NO_ITEM;
/*
FX_INFO* fx;
fx_number = CreateNewEffect(room_number);
fx_number = CreateNewEffect(roomNumber);
if (fx_number != NO_ITEM)
{
fx = &Effects[fx_number];
fx->pos.xPos = x;
fx->pos.yPos = y;
fx->pos.zPos = z;
fx->roomNumber = room_number;
fx->roomNumber = roomNumber;
fx->pos.xRot = fx->pos.zRot = 0;
fx->pos.yRot = yrot;
fx->speed = 200;

View file

@ -70,20 +70,20 @@ void KnifeControl(short fxNum)
}
}
short ThrowKnife(int x, int y, int z, short speed, short yrot, short room_number)
short ThrowKnife(int x, int y, int z, short speed, short yrot, short roomNumber)
{
short fx_number = 0;
/*
FX_INFO* fx;
fx_number = CreateNewEffect(room_number);
fx_number = CreateNewEffect(roomNumber);
if (fx_number != NO_ITEM)
{
fx = &Effects[fx_number];
fx->pos.xPos = x;
fx->pos.yPos = y;
fx->pos.zPos = z;
fx->roomNumber = room_number;
fx->roomNumber = roomNumber;
fx->pos.xRot = fx->pos.zRot = 0;
fx->pos.yRot = yrot;
fx->speed = 150;

View file

@ -10,20 +10,20 @@
BITE_INFO workerFlameThrower = { 0, 250, 32, 9 };
void Flame(DWORD x, int y, DWORD z, int speed, WORD yrot, WORD room_number)
void Flame(DWORD x, int y, DWORD z, int speed, WORD yrot, WORD roomNumber)
{
short fx_number;
short cam_rot;
FX_INFO* fx;
fx_number = CreateNewEffect(room_number);
fx_number = CreateNewEffect(roomNumber);
if (fx_number != NO_ITEM)
{
fx = &Effects[fx_number];
fx->pos.xPos = x;
fx->pos.yPos = y;
fx->pos.zPos = z;
fx->roomNumber = room_number;
fx->roomNumber = roomNumber;
//phd_GetVectorAngles(fx->pos.xPos - Camera.pos.x,
// fx->pos.yPos - Camera.pos.y,
// fx->pos.zPos - Camera.pos.z, &cam_rot);

View file

@ -144,7 +144,7 @@ void ShivaControl(short itemNum)
ITEM_INFO* item;
CREATURE_INFO* shiva;
short angle, head_x, head_y, torso_x, torso_y, tilt, room_number;
short angle, head_x, head_y, torso_x, torso_y, tilt, roomNumber;
int x, z;
int random, lara_alive;
AI_INFO info;
@ -235,10 +235,10 @@ void ShivaControl(short itemNum)
if (shiva->mood == ESCAPE_MOOD)
{
room_number = item->roomNumber;
roomNumber = item->roomNumber;
x = item->pos.xPos + (WALL_SIZE * SIN(item->pos.yRot + 0x8000) >> W2V_SHIFT);
z = item->pos.zPos + (WALL_SIZE * COS(item->pos.yRot + 0x8000) >> W2V_SHIFT);
floor = GetFloor(x, item->pos.yPos, z, &room_number);
floor = GetFloor(x, item->pos.yPos, z, &roomNumber);
if (!shiva->flags && floor->box != NO_BOX && !(Boxes[floor->box].overlapIndex & BLOCKABLE))
item->goalAnimState = 8;

View file

@ -244,7 +244,7 @@ static void TriggerPlasmaBallFlame(short fx_number, long type, long xv, long yv,
sptr->gravity = sptr->maxYvel = 0;
}
static void TriggerPlasmaBall(ITEM_INFO* item, long type, PHD_VECTOR* pos1, short room_number, short angle)
static void TriggerPlasmaBall(ITEM_INFO* item, long type, PHD_VECTOR* pos1, short roomNumber, short angle)
{
FX_INFO* fx;
PHD_VECTOR pos;
@ -258,7 +258,7 @@ static void TriggerPlasmaBall(ITEM_INFO* item, long type, PHD_VECTOR* pos1, shor
angles[0] = angle + GetRandomControl() + 0x4000;
angles[1] = 0x2000;
fx_number = CreateNewEffect(room_number);
fx_number = CreateNewEffect(roomNumber);
if (fx_number != NO_ITEM)
{
fx = &Effects[fx_number];
@ -420,7 +420,7 @@ void ControlLaserBolts(short item_number)
ITEM_INFO* item;
PHD_VECTOR oldpos;
long g, b, rad;
short room_number, oldroom, hitlara;
short roomNumber, oldroom, hitlara;
int speed;
item = &Items[item_number];
@ -447,11 +447,11 @@ void ControlLaserBolts(short item_number)
}
}
room_number = item->roomNumber;
floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &room_number);
roomNumber = item->roomNumber;
floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &roomNumber);
if (item->roomNumber != room_number)
ItemNewRoom(item_number, room_number);
if (item->roomNumber != roomNumber)
ItemNewRoom(item_number, roomNumber);
if (!item->itemFlags[2])
{
@ -536,7 +536,7 @@ void ControlLondBossPlasmaBall(short fx_number)
long speed;
long rnd, r, g, b, old_y;
byte radtab[2] = { 13,7 };
short room_number;
short roomNumber;
fx = &Effects[fx_number];
old_y = fx->pos.yPos;
@ -554,8 +554,8 @@ void ControlLondBossPlasmaBall(short fx_number)
if ((Wibble & 15) == 0)
TriggerPlasmaBallFlame(fx_number, 0, 0, abs(old_y - fx->pos.yPos) << 3, 0);
room_number = fx->roomNumber;
floor = GetFloor(fx->pos.xPos, fx->pos.yPos, fx->pos.zPos, &room_number);
roomNumber = fx->roomNumber;
floor = GetFloor(fx->pos.xPos, fx->pos.yPos, fx->pos.zPos, &roomNumber);
if (fx->pos.yPos >= GetFloorHeight(floor, fx->pos.xPos, fx->pos.yPos, fx->pos.zPos) ||
fx->pos.yPos < GetCeiling(floor, fx->pos.xPos, fx->pos.yPos, fx->pos.zPos))
{
@ -563,7 +563,7 @@ void ControlLondBossPlasmaBall(short fx_number)
return;
}
if (Rooms[room_number].flags & ENV_FLAG_WATER)
if (Rooms[roomNumber].flags & ENV_FLAG_WATER)
{
KillEffect(fx_number);
return;
@ -577,7 +577,7 @@ void ControlLondBossPlasmaBall(short fx_number)
return;
}
if (room_number != fx->roomNumber)
if (roomNumber != fx->roomNumber)
EffectNewRoom(fx_number, LaraItem->roomNumber);
rnd = GetRandomControl();

View file

@ -207,7 +207,7 @@ void TriggerFireBallFlame(short fxNumber, long type, long xv, long yv, long zv)
}
}
void TriggerFireBall(ITEM_INFO* item, long type, PHD_VECTOR* pos1, short room_number, short angle, long zdspeed)
void TriggerFireBall(ITEM_INFO* item, long type, PHD_VECTOR* pos1, short roomNumber, short angle, long zdspeed)
{
FX_INFO* fx;
PHD_VECTOR pos;
@ -273,7 +273,7 @@ void TriggerFireBall(ITEM_INFO* item, long type, PHD_VECTOR* pos1, short room_nu
fallspeed = -(GetRandomControl() & 31) - 32;
}
fxNumber = CreateNewEffect(room_number);
fxNumber = CreateNewEffect(roomNumber);
if (fxNumber != NO_ITEM)
{
fx = &Effects[fxNumber];
@ -300,7 +300,7 @@ void TonyFireBallControl(short fxNumber)
long old_x, old_y, old_z, x;
long rnd, r, g, b;
unsigned char radtab[7] = { 16,0,14,9,7,7,7 };
short room_number;
short roomNumber;
fx = &Effects[fxNumber];
@ -341,8 +341,8 @@ void TonyFireBallControl(short fxNumber)
TriggerFireBallFlame(fxNumber, fx->flag1, (old_x - fx->pos.xPos) << 3, (old_y - fx->pos.yPos) << 3, (old_z - fx->pos.zPos) << 3);
}
room_number = fx->roomNumber;
floor = GetFloor(fx->pos.xPos, fx->pos.yPos, fx->pos.zPos, &room_number);
roomNumber = fx->roomNumber;
floor = GetFloor(fx->pos.xPos, fx->pos.yPos, fx->pos.zPos, &roomNumber);
if (fx->pos.yPos >= GetFloorHeight(floor, fx->pos.xPos, fx->pos.yPos, fx->pos.zPos) || fx->pos.yPos < GetCeiling(floor, fx->pos.xPos, fx->pos.yPos, fx->pos.zPos))
{
if (fx->flag1 == ROCKZAPPL || fx->flag1 == ROCKZAPPR || fx->flag1 == ZAPP || fx->flag1 == DROPPER)
@ -374,20 +374,20 @@ void TonyFireBallControl(short fxNumber)
if (fx->flag1 == ROCKZAPPL || fx->flag1 == ROCKZAPPR)
{
room_number = LaraItem->roomNumber;
floor = GetFloor(LaraItem->pos.xPos, LaraItem->pos.yPos, LaraItem->pos.zPos, &room_number);
roomNumber = LaraItem->roomNumber;
floor = GetFloor(LaraItem->pos.xPos, LaraItem->pos.yPos, LaraItem->pos.zPos, &roomNumber);
pos.y = GetCeiling(floor, LaraItem->pos.xPos, LaraItem->pos.yPos, LaraItem->pos.zPos) + 256;
pos.x = LaraItem->pos.xPos + (GetRandomControl() & 1023) - 512;
pos.z = LaraItem->pos.zPos + (GetRandomControl() & 1023) - 512;
TriggerExplosionSparks(pos.x, pos.y, pos.z, 3, -2, 0, room_number); // -2 = Set off a dynamic light controller.
TriggerFireBall((ITEM_INFO*)NULL, DROPPER, &pos, room_number, 0, 0);
TriggerExplosionSparks(pos.x, pos.y, pos.z, 3, -2, 0, roomNumber); // -2 = Set off a dynamic light controller.
TriggerFireBall((ITEM_INFO*)NULL, DROPPER, &pos, roomNumber, 0, 0);
}
}
KillEffect(fxNumber);
return;
}
if (Rooms[room_number].flags & ENV_FLAG_WATER)
if (Rooms[roomNumber].flags & ENV_FLAG_WATER)
{
KillEffect(fxNumber);
return;
@ -403,7 +403,7 @@ void TonyFireBallControl(short fxNumber)
}
}
if (room_number != fx->roomNumber)
if (roomNumber != fx->roomNumber)
EffectNewRoom(fxNumber, LaraItem->roomNumber);
if (radtab[fx->flag1])

View file

@ -515,13 +515,6 @@ void UpdateRats()
else
angle = (short)ATAN(dz, dx) - rat->pos.yRot;
if (i == 0)
{
printf("xRot: %d, yRot: %d, fallspeed: %d, speed: %d, angle: %d, flags: %d, dx: %d, dz: %d, Y: %d\n",
rat->pos.xRot, rat->pos.yRot, rat->fallspeed, rat->speed, angle, rat->flags, dx, dz, rat->pos.yPos);
}
if (abs(dx) < 85 && abs(dy) < 85 && abs(dz) < 85)
{
LaraItem->hitPoints--;

View file

@ -68,7 +68,7 @@ void GetBoatGetOff(ITEM_INFO* boat)
/* Wait for last frame of getoff anims before returning to normal Lara control */
if ((LaraItem->currentAnimState == BOAT_JUMPR || LaraItem->currentAnimState == BOAT_JUMPL) && LaraItem->frameNumber == Anims[LaraItem->animNumber].frameEnd)
{
short room_number;
short roomNumber;
int x, y, z;
FLOOR_INFO* floor;
@ -86,17 +86,17 @@ void GetBoatGetOff(ITEM_INFO* boat)
LaraItem->pos.xRot = LaraItem->pos.zRot = 0;
g_LaraExtra.Vehicle = NO_ITEM;
room_number = LaraItem->roomNumber;
roomNumber = LaraItem->roomNumber;
x = LaraItem->pos.xPos + (360 * SIN(LaraItem->pos.yRot) >> W2V_SHIFT);
y = LaraItem->pos.yPos - 90;
z = LaraItem->pos.zPos + (360 * COS(LaraItem->pos.yRot) >> W2V_SHIFT);
floor = GetFloor(x, y, z, &room_number);
floor = GetFloor(x, y, z, &roomNumber);
if (GetFloorHeight(floor, x, y, z) >= y - STEP_SIZE)
{
LaraItem->pos.xPos = x;
LaraItem->pos.zPos = z;
if (room_number != LaraItem->roomNumber)
ItemNewRoom(Lara.itemNumber, room_number);
if (roomNumber != LaraItem->roomNumber)
ItemNewRoom(Lara.itemNumber, roomNumber);
}
LaraItem->pos.yPos = y;
@ -110,7 +110,7 @@ int CanGetOff(int direction)
{
ITEM_INFO* v;
FLOOR_INFO* floor;
short room_number, angle;
short roomNumber, angle;
int x, y, z, height, ceiling;
v = &Items[g_LaraExtra.Vehicle];
@ -124,8 +124,8 @@ int CanGetOff(int direction)
y = v->pos.yPos;
z = v->pos.zPos + (GETOFF_DIST * COS(angle) >> W2V_SHIFT);
room_number = v->roomNumber;
floor = GetFloor(x, y, z, &room_number);
roomNumber = v->roomNumber;
floor = GetFloor(x, y, z, &roomNumber);
height = GetFloorHeight(floor, x, y, z);
if ((height - v->pos.yPos) < -(WALL_SIZE / 2))
@ -207,7 +207,7 @@ int TestWaterHeight(ITEM_INFO* item, int z_off, int x_off, PHD_VECTOR* pos)
Moves the vector in 'pos' to the required test position too */
FLOOR_INFO* floor;
int s, c, height;
short room_number;
short roomNumber;
/* Get y pos correctly, but don't bother changing z_off and x_off using x_rot and z_rot */
pos->y = item->pos.yPos - (z_off * SIN(item->pos.xRot) >> W2V_SHIFT) +
@ -220,12 +220,12 @@ int TestWaterHeight(ITEM_INFO* item, int z_off, int x_off, PHD_VECTOR* pos)
pos->x = item->pos.xPos + ((z_off * s + x_off * c) >> W2V_SHIFT);
/* Try to get water height; if none get ground height instead */
room_number = item->roomNumber;
GetFloor(pos->x, pos->y, pos->z, &room_number); // get correct room (as GetWaterHeight doesn't)
height = GetWaterHeight(pos->x, pos->y, pos->z, room_number);
roomNumber = item->roomNumber;
GetFloor(pos->x, pos->y, pos->z, &roomNumber); // get correct room (as GetWaterHeight doesn't)
height = GetWaterHeight(pos->x, pos->y, pos->z, roomNumber);
if (height == NO_HEIGHT)
{
floor = GetFloor(pos->x, pos->y, pos->z, &room_number);
floor = GetFloor(pos->x, pos->y, pos->z, &roomNumber);
height = GetFloorHeight(floor, pos->x, pos->y, pos->z);
if (height == NO_HEIGHT)
return height;
@ -322,14 +322,14 @@ short DoBoatShift(ITEM_INFO* skidoo, PHD_VECTOR* pos, PHD_VECTOR* old)
else
{
/* A diagonal hit; means a barrage of tests needed to determine best shift */
short room_number;
short roomNumber;
FLOOR_INFO* floor;
int height;
x = z = 0;
room_number = skidoo->roomNumber;
floor = GetFloor(old->x, pos->y, pos->z, &room_number);
roomNumber = skidoo->roomNumber;
floor = GetFloor(old->x, pos->y, pos->z, &roomNumber);
height = GetFloorHeight(floor, old->x, pos->y, pos->z);
if (height < old->y - STEP_SIZE)
{
@ -339,8 +339,8 @@ short DoBoatShift(ITEM_INFO* skidoo, PHD_VECTOR* pos, PHD_VECTOR* old)
z = WALL_SIZE - shift_z;
}
room_number = skidoo->roomNumber;
floor = GetFloor(pos->x, pos->y, old->z, &room_number);
roomNumber = skidoo->roomNumber;
floor = GetFloor(pos->x, pos->y, old->z, &roomNumber);
height = GetFloorHeight(floor, pos->x, pos->y, old->z);
if (height < old->y - STEP_SIZE)
{
@ -454,7 +454,7 @@ int BoatDynamics(short itemNum)
int hfr_old, hfl_old, hbr_old, hbl_old, hf_old;
FLOOR_INFO* floor;
int height, slip, collide;
short room_number, rot;
short roomNumber, rot;
int newspeed;
boat = &Items[itemNum];
@ -541,9 +541,9 @@ int BoatDynamics(short itemNum)
DoBoatShift(boat, &f, &f_old);
}
room_number = boat->roomNumber;
floor = GetFloor(boat->pos.xPos, boat->pos.yPos, boat->pos.zPos, &room_number);
height = GetWaterHeight(boat->pos.xPos, boat->pos.yPos - 5, boat->pos.zPos, room_number);
roomNumber = boat->roomNumber;
floor = GetFloor(boat->pos.xPos, boat->pos.yPos, boat->pos.zPos, &roomNumber);
height = GetWaterHeight(boat->pos.xPos, boat->pos.yPos - 5, boat->pos.zPos, roomNumber);
if (height == NO_HEIGHT)
height = GetFloorHeight(floor, boat->pos.xPos, boat->pos.yPos - 5, boat->pos.zPos);

View file

@ -66,7 +66,7 @@ void DoKayakRipple(ITEM_INFO* v, short xoff, short zoff)
RIPPLE_STRUCT* r;
int s, c, x, z;
FLOOR_INFO* floor;
short room_number;
short roomNumber;
c = COS(v->pos.yRot);
s = SIN(v->pos.yRot);
@ -74,10 +74,10 @@ void DoKayakRipple(ITEM_INFO* v, short xoff, short zoff)
x = v->pos.xPos + (((zoff * s) + (xoff * c)) >> W2V_SHIFT);
z = v->pos.zPos + (((zoff * c) - (xoff * s)) >> W2V_SHIFT);
room_number = v->roomNumber;
floor = GetFloor(x, v->pos.yPos, z, &room_number);
roomNumber = v->roomNumber;
floor = GetFloor(x, v->pos.yPos, z, &roomNumber);
if (GetWaterHeight(x, v->pos.yPos, z, room_number) != NO_HEIGHT)
if (GetWaterHeight(x, v->pos.yPos, z, roomNumber) != NO_HEIGHT)
{
SetupRipple(x, v->pos.yPos, z, -2 - (GetRandomControl() & 1), 0);
}
@ -164,7 +164,7 @@ int GetInKayak(short item_number, COLL_INFO* coll)
int x, z;
ITEM_INFO* kayak;
FLOOR_INFO* floor;
short room_number;
short roomNumber;
if (!(TrInput & IN_ACTION) || Lara.gunStatus != LG_NO_ARMS || LaraItem->gravityStatus)
return 0;
@ -185,8 +185,8 @@ int GetInKayak(short item_number, COLL_INFO* coll)
* SONY BUG FIX 10000001: If player stops in exactly right place and buries
* skidoo in avalanche, then they can get on it and crash the game
*/
room_number = kayak->roomNumber;
floor = GetFloor(kayak->pos.xPos, kayak->pos.yPos, kayak->pos.zPos, &room_number);
roomNumber = kayak->roomNumber;
floor = GetFloor(kayak->pos.xPos, kayak->pos.yPos, kayak->pos.zPos, &roomNumber);
if (GetFloorHeight(floor, kayak->pos.xPos, kayak->pos.yPos, kayak->pos.zPos) > -32000)
{
short ang;
@ -352,7 +352,7 @@ int TestKayakHeight(ITEM_INFO* item, int x, int z, PHD_VECTOR* pos)
{
int h;
FLOOR_INFO* floor;
short room_number;
short roomNumber;
phd_PushUnitMatrix();
MatrixPtr[M03] = item->pos.xPos;
@ -364,13 +364,13 @@ int TestKayakHeight(ITEM_INFO* item, int x, int z, PHD_VECTOR* pos)
pos->y = (MatrixPtr[M13] >> W2V_SHIFT);
pos->z = (MatrixPtr[M23] >> W2V_SHIFT);
room_number = item->roomNumber;
GetFloor(pos->x, pos->y, pos->z, &room_number);
roomNumber = item->roomNumber;
GetFloor(pos->x, pos->y, pos->z, &roomNumber);
if ((h = GetWaterHeight(pos->x, pos->y, pos->z, room_number)) == NO_HEIGHT)
if ((h = GetWaterHeight(pos->x, pos->y, pos->z, roomNumber)) == NO_HEIGHT)
{
room_number = item->roomNumber;
floor = GetFloor(pos->x, pos->y, pos->z, &room_number);
roomNumber = item->roomNumber;
floor = GetFloor(pos->x, pos->y, pos->z, &roomNumber);
if ((h = GetFloorHeight(floor, pos->x, pos->y, pos->z)) == NO_HEIGHT)
return h;
}
@ -398,7 +398,7 @@ int DoKayakShift(ITEM_INFO* v, PHD_VECTOR* pos, PHD_VECTOR* old)
int shift_x, shift_z;
int height;
FLOOR_INFO* floor;
short room_number;
short roomNumber;
x = pos->x >> WALL_SHIFT;
z = pos->z >> WALL_SHIFT;
@ -455,8 +455,8 @@ int DoKayakShift(ITEM_INFO* v, PHD_VECTOR* pos, PHD_VECTOR* old)
x = 0;
z = 0;
room_number = v->roomNumber;
floor = GetFloor(old->x, pos->y, pos->z, &room_number);
roomNumber = v->roomNumber;
floor = GetFloor(old->x, pos->y, pos->z, &roomNumber);
height = GetFloorHeight(floor, old->x, pos->y, pos->z);
if (height < old->y - STEP_SIZE)
{
@ -466,8 +466,8 @@ int DoKayakShift(ITEM_INFO* v, PHD_VECTOR* pos, PHD_VECTOR* old)
z = WALL_SIZE - shift_z;
}
room_number = v->roomNumber;
floor = GetFloor(pos->x, pos->y, old->z, &room_number);
roomNumber = v->roomNumber;
floor = GetFloor(pos->x, pos->y, old->z, &roomNumber);
height = GetFloorHeight(floor, pos->x, pos->y, old->z);
if (height < old->y - STEP_SIZE)
{
@ -519,7 +519,7 @@ void KayakToBackground(ITEM_INFO* kayak, KAYAK_INFO* kinfo)
PHD_VECTOR pos;
int collide, oldx, oldz;
FLOOR_INFO* floor;
short room_number;
short roomNumber;
int height[8];
PHD_VECTOR oldpos[9];
int x, z;
@ -607,9 +607,9 @@ void KayakToBackground(ITEM_INFO* kayak, KAYAK_INFO* kinfo)
/* -------- update the vehicle's actual position */
room_number = kayak->roomNumber;
floor = GetFloor(kayak->pos.xPos, kayak->pos.yPos, kayak->pos.zPos, &room_number);
h = GetWaterHeight(kayak->pos.xPos, kayak->pos.yPos, kayak->pos.zPos, room_number);
roomNumber = kayak->roomNumber;
floor = GetFloor(kayak->pos.xPos, kayak->pos.yPos, kayak->pos.zPos, &roomNumber);
h = GetWaterHeight(kayak->pos.xPos, kayak->pos.yPos, kayak->pos.zPos, roomNumber);
if (h == NO_HEIGHT)
h = GetFloorHeight(floor, kayak->pos.xPos, kayak->pos.yPos, kayak->pos.zPos);
@ -618,9 +618,9 @@ void KayakToBackground(ITEM_INFO* kayak, KAYAK_INFO* kinfo)
DoKayakShift(kayak, (PHD_VECTOR*)&kayak->pos, &oldpos[8]);
/* -------- if position is still invalid - find somewhere decent */
room_number = kayak->roomNumber;
floor = GetFloor(kayak->pos.xPos, kayak->pos.yPos, kayak->pos.zPos, &room_number);
h = GetWaterHeight(kayak->pos.xPos, kayak->pos.yPos, kayak->pos.zPos, room_number);
roomNumber = kayak->roomNumber;
floor = GetFloor(kayak->pos.xPos, kayak->pos.yPos, kayak->pos.zPos, &roomNumber);
h = GetWaterHeight(kayak->pos.xPos, kayak->pos.yPos, kayak->pos.zPos, roomNumber);
if (h == NO_HEIGHT)
h = GetFloorHeight(floor, kayak->pos.xPos, kayak->pos.yPos, kayak->pos.zPos);
@ -1255,7 +1255,7 @@ int KayakControl()
ITEM_INFO* v, * l;
FLOOR_INFO* floor;
int ofs, water, lp;
short room_number;
short roomNumber;
l = LaraItem;
v = &Items[g_LaraExtra.Vehicle];
@ -1270,12 +1270,12 @@ int KayakControl()
KayakToBackground(v, Kayak);
/* -------- determine water level */
room_number = v->roomNumber;
floor = GetFloor(v->pos.xPos, v->pos.yPos, v->pos.zPos, &room_number);
roomNumber = v->roomNumber;
floor = GetFloor(v->pos.xPos, v->pos.yPos, v->pos.zPos, &roomNumber);
h = GetFloorHeight(floor, v->pos.xPos, v->pos.yPos, v->pos.zPos);
TestTriggers(TriggerIndex, 0, 0);
Kayak->Water = water = GetWaterHeight(v->pos.xPos, v->pos.yPos, v->pos.zPos, room_number);
Kayak->Water = water = GetWaterHeight(v->pos.xPos, v->pos.yPos, v->pos.zPos, roomNumber);
if (water == NO_HEIGHT)
{
Kayak->Water = water = h;
@ -1300,10 +1300,10 @@ int KayakControl()
/* -------- move Lara to Kayak pos */
if (g_LaraExtra.Vehicle != NO_ITEM)
{
if (v->roomNumber != room_number)
if (v->roomNumber != roomNumber)
{
ItemNewRoom(g_LaraExtra.Vehicle, room_number);
ItemNewRoom(Lara.itemNumber, room_number);
ItemNewRoom(g_LaraExtra.Vehicle, roomNumber);
ItemNewRoom(Lara.itemNumber, roomNumber);
}
l->pos.xPos = v->pos.xPos;

View file

@ -71,7 +71,7 @@ static int TestHeight(ITEM_INFO* v, int x, int z)
PHD_VECTOR pos;
FLOOR_INFO* floor;
int s, c;
short room_number;
short roomNumber;
c = COS(v->pos.yRot);
s = SIN(v->pos.yRot);
@ -80,8 +80,8 @@ static int TestHeight(ITEM_INFO* v, int x, int z)
pos.y = v->pos.yPos - (z * SIN(v->pos.xRot) >> W2V_SHIFT) + (x * SIN(v->pos.zRot) >> W2V_SHIFT);
pos.z = v->pos.zPos + (((z * c) - (x * s)) >> W2V_SHIFT);
room_number = v->roomNumber;
floor = GetFloor(pos.x, pos.y, pos.z, &room_number);
roomNumber = v->roomNumber;
floor = GetFloor(pos.x, pos.y, pos.z, &roomNumber);
return GetFloorHeight(floor, pos.x, pos.y, pos.z);
}
@ -89,14 +89,14 @@ static short GetCollision(ITEM_INFO* v, short ang, int dist, short* ceiling)
{
FLOOR_INFO* floor;
int x, y, z, height, cheight;
short room_number;
short roomNumber;
x = v->pos.xPos + ((SIN(ang) * dist) >> W2V_SHIFT);
y = v->pos.yPos - LARA_HITE;
z = v->pos.zPos + ((COS(ang) * dist) >> W2V_SHIFT);
room_number = v->roomNumber;
floor = GetFloor(x, y, z, &room_number);
roomNumber = v->roomNumber;
floor = GetFloor(x, y, z, &roomNumber);
height = GetFloorHeight(floor, x, y, z);
cheight = GetCeiling(floor, x, y, z);
@ -113,7 +113,7 @@ static bool GetInMineCart(ITEM_INFO* v, ITEM_INFO* l, COLL_INFO* coll)
int dist;
int x, z;
FLOOR_INFO* floor;
short room_number;
short roomNumber;
if (!(TrInput & IN_ACTION) || Lara.gunStatus != LG_NO_ARMS || l->gravityStatus)
return 0;
@ -133,8 +133,8 @@ static bool GetInMineCart(ITEM_INFO* v, ITEM_INFO* l, COLL_INFO* coll)
if (dist > SQUARE(WALL_SIZE/2))
return false;
room_number = v->roomNumber;
floor = GetFloor(v->pos.xPos, v->pos.yPos, v->pos.zPos, &room_number);
roomNumber = v->roomNumber;
floor = GetFloor(v->pos.xPos, v->pos.yPos, v->pos.zPos, &roomNumber);
if (GetFloorHeight(floor, v->pos.xPos, v->pos.yPos, v->pos.zPos) < -32000)
return false;
@ -145,7 +145,7 @@ static bool CanGetOut(int direction)
{
ITEM_INFO* v;
FLOOR_INFO* floor;
short room_number, angle;
short roomNumber, angle;
int x, y, z, height, ceiling;
v = &Items[g_LaraExtra.Vehicle];
@ -160,8 +160,8 @@ static bool CanGetOut(int direction)
y = v->pos.yPos;
z = v->pos.zPos - (GETOFF_DIST * COS(angle) >> W2V_SHIFT);
room_number = v->roomNumber;
floor = GetFloor(x, y, z, &room_number);
roomNumber = v->roomNumber;
floor = GetFloor(x, y, z, &roomNumber);
height = GetFloorHeight(floor, x, y, z);
if ((HeightType == BIG_SLOPE) || (HeightType == DIAGONAL) || (height == NO_HEIGHT))
@ -220,7 +220,7 @@ static void CartToBaddieCollision(ITEM_INFO* v)
if ((item->frameNumber == Anims[item->animNumber].frameBase) && (LaraItem->currentAnimState == CART_USE) && (LaraItem->animNumber == Objects[ID_MINECART_LARA_ANIMS].animIndex + 6))
{
FLOOR_INFO* floor;
short frame, room_number;
short frame, roomNumber;
frame = LaraItem->frameNumber - Anims[LaraItem->animNumber].frameBase;
@ -228,8 +228,8 @@ static void CartToBaddieCollision(ITEM_INFO* v)
{
SoundEffect(220, &item->pos, 2);
room_number = item->roomNumber;
floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &room_number);
roomNumber = item->roomNumber;
floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &roomNumber);
TestTriggers(TriggerIndex, TRUE, 0); // heavytrigger enabled
item->frameNumber++;
@ -874,7 +874,7 @@ int MineCartControl()
CART_INFO* cart;
ITEM_INFO* v;
FLOOR_INFO* floor;
short room_number;
short roomNumber;
v = &Items[g_LaraExtra.Vehicle];
if (v->data == NULL) { printf("v->data is nullptr !"); return 0; }
@ -896,13 +896,13 @@ int MineCartControl()
LaraItem->pos.zRot = v->pos.zRot;
}
room_number = v->roomNumber;
floor = GetFloor(v->pos.xPos, v->pos.yPos, v->pos.zPos, &room_number);
roomNumber = v->roomNumber;
floor = GetFloor(v->pos.xPos, v->pos.yPos, v->pos.zPos, &roomNumber);
if (room_number != v->roomNumber)
if (roomNumber != v->roomNumber)
{
ItemNewRoom(g_LaraExtra.Vehicle, room_number);
ItemNewRoom(Lara.itemNumber, room_number);
ItemNewRoom(g_LaraExtra.Vehicle, roomNumber);
ItemNewRoom(Lara.itemNumber, roomNumber);
}
TestTriggers(TriggerIndex, FALSE, 0);

View file

@ -203,7 +203,7 @@ int SkidooCheckGetOffOK(int direction)
{
/* Check if getting off skidoo here is possible in the direction required by player */
int x, y, z, height, ceiling;
short room_number, angle;
short roomNumber, angle;
ITEM_INFO* skidoo;
FLOOR_INFO* floor;
@ -218,8 +218,8 @@ int SkidooCheckGetOffOK(int direction)
y = skidoo->pos.yPos;
z = skidoo->pos.zPos - (SKIDOO_GETOFF_DIST * COS(angle) >> W2V_SHIFT);
room_number = skidoo->roomNumber;
floor = GetFloor(x, y, z, &room_number);
roomNumber = skidoo->roomNumber;
floor = GetFloor(x, y, z, &roomNumber);
height = GetFloorHeight(floor, x, y, z);
@ -329,7 +329,7 @@ void DoSnowEffect(ITEM_INFO* skidoo)
else
fx->fallspeed = 0;
//*(phd_mxptr + M23) = 0; // no depthQ
//S_CalculateLight(fx->pos.x_pos, fx->pos.y_pos, fx->pos.z_pos, fx->room_number);
//S_CalculateLight(fx->pos.x_pos, fx->pos.y_pos, fx->pos.z_pos, fx->roomNumber);
//fx->shade = ls_adder - 0x200;
//if (fx->shade < 0)
// fx->shade = 0;
@ -585,7 +585,7 @@ int DoSkidooDynamics(int height, int fallspeed, int* y)
int SkidooCheckGetOn(short itemNum, COLL_INFO* coll)
{
int geton;
short rot, room_number;
short rot, roomNumber;
ITEM_INFO* skidoo;
FLOOR_INFO* floor;
@ -609,8 +609,8 @@ int SkidooCheckGetOn(short itemNum, COLL_INFO* coll)
if (!TestCollision(skidoo, LaraItem))
return 0;
room_number = skidoo->roomNumber;
floor = GetFloor(skidoo->pos.xPos, skidoo->pos.yPos, skidoo->pos.zPos, &room_number);
roomNumber = skidoo->roomNumber;
floor = GetFloor(skidoo->pos.xPos, skidoo->pos.yPos, skidoo->pos.zPos, &roomNumber);
if (GetFloorHeight(floor, skidoo->pos.xPos, skidoo->pos.yPos, skidoo->pos.zPos) < -32000)
return 0;
@ -739,14 +739,14 @@ short DoSkidooShift(ITEM_INFO* skidoo, PHD_VECTOR* pos, PHD_VECTOR* old)
else
{
/* A diagonal hit; means a barrage of tests needed to determine best shift */
short room_number;
short roomNumber;
FLOOR_INFO* floor;
int height;
x = z = 0;
room_number = skidoo->roomNumber;
floor = GetFloor(old->x, pos->y, pos->z, &room_number);
roomNumber = skidoo->roomNumber;
floor = GetFloor(old->x, pos->y, pos->z, &roomNumber);
height = GetFloorHeight(floor, old->x, pos->y, pos->z);
if (height < old->y - STEP_SIZE)
{
@ -756,8 +756,8 @@ short DoSkidooShift(ITEM_INFO* skidoo, PHD_VECTOR* pos, PHD_VECTOR* old)
z = WALL_SIZE - shift_z;
}
room_number = skidoo->roomNumber;
floor = GetFloor(pos->x, pos->y, old->z, &room_number);
roomNumber = skidoo->roomNumber;
floor = GetFloor(pos->x, pos->y, old->z, &roomNumber);
height = GetFloorHeight(floor, pos->x, pos->y, old->z);
if (height < old->y - STEP_SIZE)
{
@ -814,7 +814,7 @@ int SkidooDynamics(ITEM_INFO* skidoo)
int hfr_old, hfl_old, hbr_old, hbl_old;
FLOOR_INFO* floor;
int height, slip, collide;
short room_number, rot;
short roomNumber, rot;
int newspeed;
skinfo = (SKIDOO_INFO*)skidoo->data;
@ -922,8 +922,8 @@ int SkidooDynamics(ITEM_INFO* skidoo)
if (hfr < fr_old.y - STEP_SIZE)
rot += DoSkidooShift(skidoo, &fr, &fr_old);
room_number = skidoo->roomNumber;
floor = GetFloor(skidoo->pos.xPos, skidoo->pos.yPos, skidoo->pos.zPos, &room_number);
roomNumber = skidoo->roomNumber;
floor = GetFloor(skidoo->pos.xPos, skidoo->pos.yPos, skidoo->pos.zPos, &roomNumber);
height = GetFloorHeight(floor, skidoo->pos.xPos, skidoo->pos.yPos, skidoo->pos.zPos);
if (height < skidoo->pos.yPos - STEP_SIZE)
DoSkidooShift(skidoo, (PHD_VECTOR*)&skidoo->pos, &old);
@ -964,7 +964,7 @@ int SkidooControl()
int hfl, hfr;
FLOOR_INFO* floor;
int height, collide, drive;
short room_number, x_rot, z_rot, bandit_skidoo;
short roomNumber, x_rot, z_rot, bandit_skidoo;
int pitch, dead = 0;
skidoo = &Items[g_LaraExtra.Vehicle];
@ -976,8 +976,8 @@ int SkidooControl()
hfl = TestSkidooHeight(skidoo, SKIDOO_FRONT, -SKIDOO_SIDE, &fl);
hfr = TestSkidooHeight(skidoo, SKIDOO_FRONT, SKIDOO_SIDE, &fr);
room_number = skidoo->roomNumber;
floor = GetFloor(skidoo->pos.xPos, skidoo->pos.yPos, skidoo->pos.zPos, &room_number);
roomNumber = skidoo->roomNumber;
floor = GetFloor(skidoo->pos.xPos, skidoo->pos.yPos, skidoo->pos.zPos, &roomNumber);
height = GetFloorHeight(floor, skidoo->pos.xPos, skidoo->pos.yPos, skidoo->pos.zPos);
TestTriggers(TriggerIndex, 0, 0);
@ -1059,10 +1059,10 @@ int SkidooControl()
if (skidoo->flags & ONESHOT)
{
/* This is a falling skidoo - Lara is elsewhere */
if (room_number != skidoo->roomNumber)
if (roomNumber != skidoo->roomNumber)
{
ItemNewRoom(g_LaraExtra.Vehicle, room_number);
ItemNewRoom(Lara.itemNumber, room_number);
ItemNewRoom(g_LaraExtra.Vehicle, roomNumber);
ItemNewRoom(Lara.itemNumber, roomNumber);
}
AnimateItem(LaraItem);
@ -1075,10 +1075,10 @@ int SkidooControl()
SkidooAnimation(skidoo, collide, dead);
if (room_number != skidoo->roomNumber)
if (roomNumber != skidoo->roomNumber)
{
ItemNewRoom(g_LaraExtra.Vehicle, room_number);
ItemNewRoom(Lara.itemNumber, room_number);
ItemNewRoom(g_LaraExtra.Vehicle, roomNumber);
ItemNewRoom(Lara.itemNumber, roomNumber);
}
/* Move Lara to the skidoo position */

View file

@ -215,14 +215,14 @@ void SubEffects(short item_number)
if ((GetRandomControl() & 1) == 0)
{
PHD_3DPOS pos3d;
short room_number;
short roomNumber;
pos3d.xPos = pos.x + (GetRandomControl() & 63) - 32;
pos3d.yPos = pos.y + SUB_DRAW_SHIFT;
pos3d.zPos = pos.z + (GetRandomControl() & 63) - 32;
room_number = v->roomNumber;
GetFloor(pos3d.xPos, pos3d.yPos, pos3d.zPos, &room_number);
CreateBubble((PHD_VECTOR*)&pos3d, room_number, 4, 8, 0, 0, 0, 0); // CHECK
roomNumber = v->roomNumber;
GetFloor(pos3d.xPos, pos3d.yPos, pos3d.zPos, &roomNumber);
CreateBubble((PHD_VECTOR*)&pos3d, roomNumber, 4, 8, 0, 0, 0, 0); // CHECK
}
}
}
@ -269,7 +269,7 @@ void SubEffects(short item_number)
static int CanGetOff(ITEM_INFO* v)
{
FLOOR_INFO* floor;
short room_number;
short roomNumber;
int x, y, z, height, ceiling, speed;
short yangle;
@ -282,8 +282,8 @@ static int CanGetOff(ITEM_INFO* v)
z = v->pos.zPos + (speed * COS(yangle) >> W2V_SHIFT);
y = v->pos.yPos - ((GETOFF_DIST * SIN(-v->pos.xRot)) >> W2V_SHIFT);
room_number = v->roomNumber;
floor = GetFloor(x, y, z, &room_number);
roomNumber = v->roomNumber;
floor = GetFloor(x, y, z, &roomNumber);
height = GetFloorHeight(floor, x, y, z);
if (height == NO_HEIGHT || y > height)
@ -303,7 +303,7 @@ int GetOnSub(short item_number, COLL_INFO* coll)
int x, y, z;
ITEM_INFO* v, * l;
FLOOR_INFO* floor;
short room_number, ang;
short roomNumber, ang;
unsigned short tempang;
l = LaraItem;
@ -323,8 +323,8 @@ int GetOnSub(short item_number, COLL_INFO* coll)
if (dist > SQUARE(512))
return 0;
room_number = v->roomNumber;
floor = GetFloor(v->pos.xPos, v->pos.yPos, v->pos.zPos, &room_number);
roomNumber = v->roomNumber;
floor = GetFloor(v->pos.xPos, v->pos.yPos, v->pos.zPos, &roomNumber);
if (GetFloorHeight(floor, v->pos.xPos, v->pos.yPos, v->pos.zPos) < -32000)
return 0;
@ -841,7 +841,7 @@ int SubControl()
SUB_INFO* sub;
ITEM_INFO* v, * l;
FLOOR_INFO* floor;
short room_number;
short roomNumber;
l = LaraItem;
v = &Items[g_LaraExtra.Vehicle];
@ -869,13 +869,13 @@ int SubControl()
}
/* -------- determine if vehicle is near the surface */
room_number = v->roomNumber;
floor = GetFloor(v->pos.xPos, v->pos.yPos, v->pos.zPos, &room_number);
roomNumber = v->roomNumber;
floor = GetFloor(v->pos.xPos, v->pos.yPos, v->pos.zPos, &roomNumber);
v->floor = GetFloorHeight(floor, v->pos.xPos, v->pos.yPos, v->pos.zPos);
if ((sub->Flags & UPV_CONTROL) && (!(sub->Flags & UPV_DEAD)))
{
h = GetWaterHeight(v->pos.xPos, v->pos.yPos, v->pos.zPos, room_number);
h = GetWaterHeight(v->pos.xPos, v->pos.yPos, v->pos.zPos, roomNumber);
if ((h != NO_HEIGHT) && (!(Rooms[v->roomNumber].flags & ENV_FLAG_WATER)))
{
@ -947,10 +947,10 @@ int SubControl()
sub->WeaponTimer = HARPOON_RELOAD;
}
if (room_number != v->roomNumber)
if (roomNumber != v->roomNumber)
{
ItemNewRoom(g_LaraExtra.Vehicle, room_number);
ItemNewRoom(Lara.itemNumber, room_number);
ItemNewRoom(g_LaraExtra.Vehicle, roomNumber);
ItemNewRoom(Lara.itemNumber, roomNumber);
}
l->pos.xPos = v->pos.xPos;
@ -980,8 +980,8 @@ int SubControl()
{
AnimateItem(l);
if (room_number != v->roomNumber)
ItemNewRoom(g_LaraExtra.Vehicle, room_number);
if (roomNumber != v->roomNumber)
ItemNewRoom(g_LaraExtra.Vehicle, roomNumber);
BackgroundCollision(v, l, sub);

View file

@ -25,7 +25,7 @@ using namespace std;
#define ITEM_PARAM_GRAVITY_STATUS 7
#define ITEM_PARAM_COLLIDABLE 8
#define ITEM_PARAM_POISONED 9
#define ITEM_PARAM_ROOM_NUMBER 10
#define ITEM_PARAM_roomNumber 10
#define LUA_VARIABLE_TYPE_INT 0
#define LUA_VARIABLE_TYPE_BOOL 1
@ -78,7 +78,7 @@ typedef struct GameScriptItem {
return NativeItem->collidable;
case ITEM_PARAM_POISONED:
return NativeItem->poisoned;
case ITEM_PARAM_ROOM_NUMBER:
case ITEM_PARAM_roomNumber:
return NativeItem->roomNumber;
default:
return 0;
@ -114,7 +114,7 @@ typedef struct GameScriptItem {
NativeItem->collidable = value; break;
case ITEM_PARAM_POISONED:
NativeItem->poisoned = value; break;
case ITEM_PARAM_ROOM_NUMBER:
case ITEM_PARAM_roomNumber:
NativeItem->roomNumber = value; break;
default:
break;

View file

@ -105,4 +105,4 @@ ITEM_HIT_STATUS = 6
ITEM_GRAVITY_STATUS = 7
ITEM_COLLIDABLE = 8
ITEM_POISONED = 9
ITEM_ROOM_NUMBER = 10
ITEM_roomNumber = 10