mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-05-10 20:46:47 +03:00
Hairs done on GPU now
This commit is contained in:
parent
e88d24347b
commit
2a1c491c7e
65 changed files with 358 additions and 450 deletions
|
@ -514,7 +514,7 @@ int CreatureAnimation(short itemNumber, short angle, short tilt)
|
|||
|
||||
item = &Items[itemNumber];
|
||||
if (item->data == NULL)
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
creature = (CREATURE_INFO*)item->data;
|
||||
LOT = &creature->LOT;
|
||||
|
@ -536,7 +536,7 @@ int CreatureAnimation(short itemNumber, short angle, short tilt)
|
|||
if (item->status == ITEM_DEACTIVATED)
|
||||
{
|
||||
CreatureDie(itemNumber, FALSE);
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
bounds = GetBoundsAccurate(item);
|
||||
|
@ -714,7 +714,7 @@ int CreatureAnimation(short itemNumber, short angle, short tilt)
|
|||
item->pos.yRot -= BIFF_AVOID_TURN;
|
||||
else
|
||||
item->pos.yRot += BIFF_AVOID_TURN;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (LOT->fly != NO_FLYING && item->hitPoints > 0)
|
||||
|
@ -857,7 +857,7 @@ int CreatureAnimation(short itemNumber, short angle, short tilt)
|
|||
if (item->roomNumber != roomNumber)
|
||||
ItemNewRoom(itemNumber, roomNumber);
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void CreatureDie(short itemNumber, int explode)
|
||||
|
@ -916,7 +916,7 @@ int BadFloor(int x, int y, int z, int boxHeight, int nextHeight, short roomNumbe
|
|||
int CreatureCreature(short itemNumber)
|
||||
{
|
||||
ITEM_INFO* item, *linked;
|
||||
ObjectInfo* obj;
|
||||
OBJECT_INFO* obj;
|
||||
ROOM_INFO* r;
|
||||
int x, z, xDistance, zDistance, distance = 0;
|
||||
short link, radius;
|
||||
|
@ -999,8 +999,6 @@ void TargetBox(LOT_INFO* LOT, short boxNumber)
|
|||
boxNumber &= NO_BOX;
|
||||
box = &Boxes[boxNumber];
|
||||
|
||||
//LOT->target.x = (((((box->bottom - box->top) - 1) * GetRandomControl()) / 32) + (box->top * 1024)) + 512;
|
||||
//LOT->target.z = (((((box->right - box->left) - 1) * GetRandomControl()) / 32) + (box->left * 1024)) + 512;
|
||||
LOT->target.x = ((box->top << WALL_SHIFT) + GetRandomControl() * ((box->bottom - box->top) - 1) >> 5) + WALL_SIZE / 2;
|
||||
LOT->target.z = ((box->left << WALL_SHIFT) + GetRandomControl() * ((box->right - box->left) - 1) >> 5) + WALL_SIZE / 2;
|
||||
LOT->requiredBox = boxNumber;
|
||||
|
@ -1048,14 +1046,14 @@ int SearchLOT(LOT_INFO* LOT, int depth)
|
|||
searchZone = zone[LOT->head];
|
||||
|
||||
if (depth <= 0)
|
||||
return 1;
|
||||
return true;
|
||||
|
||||
for (int i = 0; i < depth; i++)
|
||||
{
|
||||
if (LOT->head == NO_BOX)
|
||||
{
|
||||
LOT->tail = NO_BOX;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
node = &LOT->node[LOT->head];
|
||||
|
@ -1068,7 +1066,7 @@ int SearchLOT(LOT_INFO* LOT, int depth)
|
|||
boxNumber = Overlaps[index++];
|
||||
if (boxNumber & BOX_END_BIT)
|
||||
{
|
||||
done = TRUE;
|
||||
done = true;
|
||||
boxNumber &= BOX_NUMBER;
|
||||
}
|
||||
|
||||
|
@ -1117,21 +1115,22 @@ int SearchLOT(LOT_INFO* LOT, int depth)
|
|||
node->nextExpansion = NO_BOX;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
int CreatureActive(short itemNumber)
|
||||
{
|
||||
ITEM_INFO* item = &Items[itemNumber];
|
||||
|
||||
if (!(item->flags & IFLAG_KILLED) && item->status & ITEM_INVISIBLE)
|
||||
if (!(item->flags & IFLAG_KILLED)
|
||||
&& item->status & ITEM_INVISIBLE)
|
||||
{
|
||||
if (!EnableBaddieAI(itemNumber, FALSE))
|
||||
return FALSE;
|
||||
if (!EnableBaddieAI(itemNumber, false))
|
||||
return false;
|
||||
item->status = ITEM_ACTIVE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void InitialiseCreature(short itemNumber)
|
||||
|
@ -1142,7 +1141,7 @@ void InitialiseCreature(short itemNumber)
|
|||
int StalkBox(ITEM_INFO* item, ITEM_INFO* enemy, short boxNumber)
|
||||
{
|
||||
if (enemy == NULL)
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
BOX_INFO* box;
|
||||
int x, z, xrange, zrange;
|
||||
|
@ -1156,7 +1155,7 @@ int StalkBox(ITEM_INFO* item, ITEM_INFO* enemy, short boxNumber)
|
|||
z = ((box->left + box->right) << (WALL_SHIFT - 1)) - enemy->pos.zPos;
|
||||
|
||||
if (x > xrange || x < -xrange || z > zrange || z < -zrange)
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
enemyQuad = (enemy->pos.yRot >> W2V_SHIFT) + 2;
|
||||
|
||||
|
@ -1167,7 +1166,7 @@ int StalkBox(ITEM_INFO* item, ITEM_INFO* enemy, short boxNumber)
|
|||
boxQuad = (x > 0) ? 3 : 0;
|
||||
|
||||
if (enemyQuad == boxQuad)
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
baddieQuad = 0;
|
||||
if (item->pos.zPos > enemy->pos.zPos)
|
||||
|
@ -1176,9 +1175,9 @@ int StalkBox(ITEM_INFO* item, ITEM_INFO* enemy, short boxNumber)
|
|||
baddieQuad = (item->pos.xPos > enemy->pos.xPos) ? 3 : 0;
|
||||
|
||||
if (enemyQuad == baddieQuad && abs(enemyQuad - boxQuad) == 2)
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
int CreatureVault(short itemNum, short angle, int vault, int shift)
|
||||
|
@ -1460,7 +1459,7 @@ void CreatureAIInfo(ITEM_INFO* item, AI_INFO* info)
|
|||
|
||||
CREATURE_INFO * creature;
|
||||
ITEM_INFO * enemy;
|
||||
ObjectInfo* obj;
|
||||
OBJECT_INFO * obj;
|
||||
ROOM_INFO * r;
|
||||
short* zone, angle;
|
||||
int x, y, z;
|
||||
|
@ -1520,7 +1519,7 @@ void CreatureAIInfo(ITEM_INFO* item, AI_INFO* info)
|
|||
}
|
||||
|
||||
info->angle = angle - item->pos.yRot;
|
||||
info->enemyFacing = ANGLE(180) + angle - enemy->pos.yRot;
|
||||
info->enemyFacing = -ANGLE(180) + angle - enemy->pos.yRot;
|
||||
|
||||
x = abs(x);
|
||||
z = abs(z);
|
||||
|
@ -1634,6 +1633,8 @@ void CreatureMood(ITEM_INFO* item, AI_INFO* info, int violent)
|
|||
if (LOT->targetBox == NO_BOX)
|
||||
TargetBox(LOT, item->boxNumber);
|
||||
|
||||
CalculateTarget(&creature->target, item, &creature->LOT);
|
||||
|
||||
creature->jumpAhead = false;
|
||||
creature->monkeyAhead = false;
|
||||
|
||||
|
@ -1656,8 +1657,6 @@ void CreatureMood(ITEM_INFO* item, AI_INFO* info, int violent)
|
|||
creature->monkeyAhead = true;
|
||||
}
|
||||
}
|
||||
|
||||
/*Unk_00EEFB6C =*/ CalculateTarget(&creature->target, item, &creature->LOT);
|
||||
}
|
||||
|
||||
void GetCreatureMood(ITEM_INFO* item, AI_INFO* info, int isViolent)
|
||||
|
@ -1677,7 +1676,8 @@ void GetCreatureMood(ITEM_INFO* item, AI_INFO* info, int isViolent)
|
|||
if (creature->LOT.node[item->boxNumber].searchNumber == (creature->LOT.searchNumber | BLOCKED_SEARCH))
|
||||
creature->LOT.requiredBox = NO_BOX;
|
||||
|
||||
if (creature->mood != ATTACK_MOOD && creature->LOT.requiredBox != NO_BOX)
|
||||
if (creature->mood != ATTACK_MOOD
|
||||
&& creature->LOT.requiredBox != NO_BOX)
|
||||
{
|
||||
if (!ValidBox(item, info->zoneNumber, creature->LOT.targetBox))
|
||||
{
|
||||
|
@ -1720,13 +1720,14 @@ void GetCreatureMood(ITEM_INFO* item, AI_INFO* info, int isViolent)
|
|||
break;
|
||||
}
|
||||
}
|
||||
else if (!isViolent)
|
||||
else
|
||||
{
|
||||
switch (creature->mood)
|
||||
{
|
||||
case BORED_MOOD:
|
||||
case STALK_MOOD:
|
||||
if (creature->alerted && info->zoneNumber != info->enemyZone)
|
||||
if (creature->alerted
|
||||
&& info->zoneNumber != info->enemyZone)
|
||||
{
|
||||
if (info->distance > 3072)
|
||||
creature->mood = STALK_MOOD;
|
||||
|
@ -1735,7 +1736,9 @@ void GetCreatureMood(ITEM_INFO* item, AI_INFO* info, int isViolent)
|
|||
}
|
||||
else if (info->zoneNumber == info->enemyZone)
|
||||
{
|
||||
if (info->distance < ATTACK_RANGE || (creature->mood == STALK_MOOD && LOT->requiredBox == NO_BOX))
|
||||
if (info->distance < ATTACK_RANGE
|
||||
|| (creature->mood == STALK_MOOD
|
||||
&& LOT->requiredBox == NO_BOX))
|
||||
creature->mood = ATTACK_MOOD;
|
||||
else
|
||||
creature->mood = STALK_MOOD;
|
||||
|
@ -1743,14 +1746,17 @@ void GetCreatureMood(ITEM_INFO* item, AI_INFO* info, int isViolent)
|
|||
break;
|
||||
|
||||
case ATTACK_MOOD:
|
||||
if (item->hitStatus && (GetRandomControl() < ESCAPE_CHANCE || info->zoneNumber != info->enemyZone))
|
||||
if (item->hitStatus
|
||||
&& (GetRandomControl() < ESCAPE_CHANCE
|
||||
|| info->zoneNumber != info->enemyZone))
|
||||
creature->mood = STALK_MOOD;
|
||||
else if (info->zoneNumber != info->enemyZone && info->distance > (WALL_SIZE*6))
|
||||
creature->mood = BORED_MOOD;
|
||||
break;
|
||||
|
||||
case ESCAPE_MOOD:
|
||||
if (info->zoneNumber == info->enemyZone && GetRandomControl() < RECOVER_CHANCE)
|
||||
if (info->zoneNumber == info->enemyZone
|
||||
&& GetRandomControl() < RECOVER_CHANCE)
|
||||
creature->mood = STALK_MOOD;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -70,7 +70,7 @@ void LookAt(CAMERA_INFO* cam, short roll)
|
|||
Vector3 target = Vector3(cam->target.x, cam->target.y, cam->target.z);
|
||||
Vector3 up = Vector3(0.0f, -1.0f, 0.0f);
|
||||
float fov = TO_RAD(CurrentFOV / 1.333333f);
|
||||
float r = TO_RAD(roll);
|
||||
float r = 0; TO_RAD(roll);
|
||||
|
||||
g_Renderer.UpdateCameraMatrices(cam, r, fov);
|
||||
}
|
||||
|
|
|
@ -450,14 +450,14 @@ int FindGridShift(int x, int z)
|
|||
int TestBoundsCollideStatic(short* bounds, PHD_3DPOS* pos, int radius)
|
||||
{
|
||||
if (!(bounds[5] | bounds[4] | bounds[0] | bounds[1] | bounds[2] | bounds[3]))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
short* frame = GetBestFrame(LaraItem);
|
||||
if (pos->yPos + bounds[3] <= LaraItem->pos.yPos + frame[2])
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
if (pos->yPos + bounds[2] >= LaraItem->pos.yPos + frame[3])
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
int c, s;
|
||||
int x, z, dx, dz;
|
||||
|
@ -474,11 +474,11 @@ int TestBoundsCollideStatic(short* bounds, PHD_3DPOS* pos, int radius)
|
|||
&& dz <= radius + bounds[5]
|
||||
&& dz >= bounds[4] - radius)
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -506,7 +506,7 @@ int ItemPushLaraStatic(ITEM_INFO* item, short* bounds, PHD_3DPOS* pos, COLL_INFO
|
|||
|| rx >= maxX
|
||||
|| rz <= minZ
|
||||
|| rz >= maxZ)
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
left = rx - minX;
|
||||
top = maxZ - rz;
|
||||
|
@ -554,7 +554,7 @@ int ItemPushLaraStatic(ITEM_INFO* item, short* bounds, PHD_3DPOS* pos, COLL_INFO
|
|||
Lara.gunStatus = LG_NO_ARMS;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
int ItemPushLara(ITEM_INFO* item, ITEM_INFO* l, COLL_INFO* coll, int spazon, char bigpush)
|
||||
|
@ -596,7 +596,7 @@ int ItemPushLara(ITEM_INFO* item, ITEM_INFO* l, COLL_INFO* coll, int spazon, cha
|
|||
|| rx >= maxX
|
||||
|| rz <= minZ
|
||||
|| rz >= maxZ)
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
left = rx - minX;
|
||||
top = maxZ - rz;
|
||||
|
@ -662,7 +662,7 @@ int ItemPushLara(ITEM_INFO* item, ITEM_INFO* l, COLL_INFO* coll, int spazon, cha
|
|||
Lara.gunStatus = LG_NO_ARMS;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void AIPickupCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* c)
|
||||
|
@ -739,17 +739,17 @@ int TestLaraPosition(short* bounds, ITEM_INFO* item, ITEM_INFO* l)
|
|||
zRotRel = l->pos.zRot - item->pos.zRot;
|
||||
|
||||
if (xRotRel < bounds[6])
|
||||
return FALSE;
|
||||
return false;
|
||||
if (xRotRel > bounds[7])
|
||||
return FALSE;
|
||||
return false;
|
||||
if (yRotRel < bounds[8])
|
||||
return FALSE;
|
||||
return false;
|
||||
if (yRotRel > bounds[9])
|
||||
return FALSE;
|
||||
return false;
|
||||
if (zRotRel < bounds[10])
|
||||
return FALSE;
|
||||
return false;
|
||||
if (zRotRel > bounds[11])
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
Vector3 pos = Vector3(l->pos.xPos - item->pos.xPos, l->pos.yPos - item->pos.yPos, l->pos.zPos - item->pos.zPos);
|
||||
|
||||
|
@ -766,9 +766,9 @@ int TestLaraPosition(short* bounds, ITEM_INFO* item, ITEM_INFO* l)
|
|||
rz = pos.z;
|
||||
|
||||
if (rx < bounds[0] || rx > bounds[1] || ry < bounds[2] || ry > bounds[3] || rz < bounds[4] || rz > bounds[5])
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
int Move3DPosTo3DPos(PHD_3DPOS* src, PHD_3DPOS* dest, int velocity, short angAdd)
|
||||
|
@ -923,7 +923,7 @@ int MoveLaraPosition(PHD_VECTOR* vec, ITEM_INFO* item, ITEM_INFO* l)
|
|||
if (abs(height - l->pos.yPos) <= CLICK(2))
|
||||
{
|
||||
if (sqrt(SQUARE(dest.xPos - l->pos.xPos) + SQUARE(dest.yPos - l->pos.yPos) + SQUARE(dest.zPos - l->pos.zPos)) < (STEP_SIZE/2))
|
||||
return TRUE;
|
||||
return true;
|
||||
|
||||
return Move3DPosTo3DPos(&l->pos, &dest, LARA_VELOCITY, ANGLE(2));
|
||||
}
|
||||
|
@ -934,7 +934,7 @@ int MoveLaraPosition(PHD_VECTOR* vec, ITEM_INFO* item, ITEM_INFO* l)
|
|||
Lara.gunStatus = LG_NO_ARMS;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
int TestBoundsCollide(ITEM_INFO* item, ITEM_INFO* l, int radius)
|
||||
|
@ -964,12 +964,12 @@ int TestBoundsCollide(ITEM_INFO* item, ITEM_INFO* l, int radius)
|
|||
&& dz >= bounds[4] - radius
|
||||
&& dz <= radius + bounds[5])
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
void CreatureCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll)
|
||||
|
@ -1372,7 +1372,7 @@ void GetCollisionInfo(COLL_INFO* coll, int xPos, int yPos, int zPos, int roomNum
|
|||
void LaraBaddieCollision(ITEM_INFO* l, COLL_INFO* coll)
|
||||
{
|
||||
ITEM_INFO* item;
|
||||
ObjectInfo* obj;
|
||||
OBJECT_INFO* obj;
|
||||
|
||||
l->hitStatus = false;
|
||||
Lara.hitDirection = -1;
|
||||
|
|
|
@ -309,7 +309,7 @@ GAME_STATUS ControlPhase(int numFrames, int demoMode)
|
|||
LaserSight = true;
|
||||
|
||||
/*if (!(gfLevelFlags & GF_LVOP_TRAIN))
|
||||
InfraRed = TRUE;
|
||||
InfraRed = true;
|
||||
else*
|
||||
InfraRed = false;*/
|
||||
Infrared = true;
|
||||
|
@ -322,7 +322,7 @@ GAME_STATUS ControlPhase(int numFrames, int demoMode)
|
|||
if (LaserSight)
|
||||
{
|
||||
/*if (!(gfLevelFlags & GF_LVOP_TRAIN))
|
||||
InfraRed = TRUE;
|
||||
InfraRed = true;
|
||||
else
|
||||
InfraRed = false;*/
|
||||
Infrared = true;
|
||||
|
@ -330,7 +330,7 @@ GAME_STATUS ControlPhase(int numFrames, int demoMode)
|
|||
else
|
||||
{
|
||||
/*if ((gfLevelFlags & GF_LVOP_TRAIN) && (inputBusy & IN_ACTION))
|
||||
InfraRed = TRUE;
|
||||
InfraRed = true;
|
||||
else
|
||||
InfraRed = false;*/
|
||||
Infrared = false;
|
||||
|
@ -446,6 +446,8 @@ GAME_STATUS ControlPhase(int numFrames, int demoMode)
|
|||
InItemControlLoop = false;
|
||||
KillMoveItems();
|
||||
|
||||
g_Renderer.UpdateLaraAnimations(true);
|
||||
|
||||
// Update Lara's ponytails
|
||||
HairControl(0, 0, 0);
|
||||
if (level->LaraType == LARA_YOUNG)
|
||||
|
@ -554,7 +556,7 @@ unsigned CALLBACK GameMain(void *)
|
|||
PostMessage(WindowsHandle, WM_CLOSE, NULL, NULL);
|
||||
EndThread();
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
GAME_STATUS DoTitle(int index)
|
||||
|
@ -1627,7 +1629,7 @@ int GetFloorHeight(FLOOR_INFO *floor, int x, int y, int z)
|
|||
|
||||
int xOff, yOff, trigger;
|
||||
ITEM_INFO *item;
|
||||
ObjectInfo *obj;
|
||||
OBJECT_INFO *obj;
|
||||
int tilts, t0, t1, t2, t3, t4, dx, dz, h1, h2;
|
||||
|
||||
do
|
||||
|
@ -2642,7 +2644,7 @@ int DoRayBox(GAME_VECTOR *start, GAME_VECTOR *end, short *box, PHD_3DPOS *itemOr
|
|||
{
|
||||
// For items instead we need to test spheres
|
||||
ITEM_INFO *item = &Items[closesItemNumber];
|
||||
ObjectInfo *obj = &Objects[item->objectNumber];
|
||||
OBJECT_INFO *obj = &Objects[item->objectNumber];
|
||||
|
||||
// Get the ransformed sphere of meshes
|
||||
GetSpheres(item, CreatureSpheres, SPHERES_SPACE_WORLD, Matrix::Identity);
|
||||
|
|
|
@ -78,7 +78,7 @@ void SequenceDoorControl(short itemNumber)
|
|||
OpenThatDoor(&door->d2, door);
|
||||
OpenThatDoor(&door->d1flip, door);
|
||||
OpenThatDoor(&door->d2flip, door);
|
||||
door->opened = TRUE;
|
||||
door->opened = true;
|
||||
item->flags |= 0x3E;
|
||||
}
|
||||
}
|
||||
|
@ -90,7 +90,7 @@ void SequenceDoorControl(short itemNumber)
|
|||
ShutThatDoor(&door->d2, door);
|
||||
ShutThatDoor(&door->d1flip, door);
|
||||
ShutThatDoor(&door->d2flip, door);
|
||||
door->opened = FALSE;
|
||||
door->opened = false;
|
||||
item->flags &= 0xC1;
|
||||
}
|
||||
}
|
||||
|
@ -320,7 +320,7 @@ void PushPullKickDoorControl(short itemNumber)
|
|||
OpenThatDoor(&door->d2, door);
|
||||
OpenThatDoor(&door->d1flip, door);
|
||||
OpenThatDoor(&door->d2flip, door);
|
||||
door->opened = TRUE;
|
||||
door->opened = true;
|
||||
}
|
||||
|
||||
AnimateItem(item);
|
||||
|
@ -440,7 +440,7 @@ void DoorControl(short itemNumber)
|
|||
OpenThatDoor(&door->d2, door);
|
||||
OpenThatDoor(&door->d1flip, door);
|
||||
OpenThatDoor(&door->d2flip, door);
|
||||
door->opened = TRUE;
|
||||
door->opened = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -456,7 +456,7 @@ void DoorControl(short itemNumber)
|
|||
ShutThatDoor(&door->d2, door);
|
||||
ShutThatDoor(&door->d1flip, door);
|
||||
ShutThatDoor(&door->d2flip, door);
|
||||
door->opened = FALSE;
|
||||
door->opened = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -479,7 +479,7 @@ void DoorControl(short itemNumber)
|
|||
OpenThatDoor(&door->d2, door);
|
||||
OpenThatDoor(&door->d1flip, door);
|
||||
OpenThatDoor(&door->d2flip, door);
|
||||
door->opened = TRUE;
|
||||
door->opened = true;
|
||||
}
|
||||
/*if (item->frameNumber == Anims[item->animNumber].frameEnd)
|
||||
{
|
||||
|
@ -536,7 +536,7 @@ void DoorControl(short itemNumber)
|
|||
ShutThatDoor(&door->d2, door);
|
||||
ShutThatDoor(&door->d1flip, door);
|
||||
ShutThatDoor(&door->d2flip, door);
|
||||
door->opened = FALSE;
|
||||
door->opened = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
@ -160,7 +160,7 @@ int Sync()
|
|||
void DrawAnimatingItem(ITEM_INFO* item)
|
||||
{
|
||||
// TODO: to refactor
|
||||
// Empty stub because actually we disable items drawing when drawRoutine pointer is NULL in ObjectInfo
|
||||
// Empty stub because actually we disable items drawing when drawRoutine pointer is NULL in OBJECT_INFO
|
||||
}
|
||||
|
||||
void GetLaraJointPosition(PHD_VECTOR* pos, int LM_enum)
|
||||
|
|
|
@ -82,7 +82,7 @@ void DetatchSpark(int num, SpriteEnumFlag type)// (F) (D)
|
|||
case SP_FX:
|
||||
if (sptr->flags & SP_USEFXOBJPOS)
|
||||
{
|
||||
sptr->on = FALSE;
|
||||
sptr->on = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -96,7 +96,7 @@ void DetatchSpark(int num, SpriteEnumFlag type)// (F) (D)
|
|||
case SP_ITEM:
|
||||
if (sptr->flags & SP_USEFXOBJPOS)
|
||||
{
|
||||
sptr->on = FALSE;
|
||||
sptr->on = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#include "level.h"
|
||||
using T5M::Renderer::g_Renderer;
|
||||
int FirstHair[HAIR_MAX];
|
||||
HAIR_STRUCT Hairs[HAIR_MAX][HAIR_SEGMENTS];
|
||||
HAIR_STRUCT Hairs[HAIR_MAX][HAIR_SEGMENTS + 1];
|
||||
int WindAngle;
|
||||
int DWindAngle;
|
||||
int Wind;
|
||||
|
@ -29,7 +29,7 @@ void InitialiseHair()
|
|||
Hairs[h][0].pos.yRot = 0;
|
||||
Hairs[h][0].pos.xRot = -0x4000;
|
||||
|
||||
for (int i = 1; i < HAIR_SEGMENTS; i++, bone += 4)
|
||||
for (int i = 1; i < HAIR_SEGMENTS + 1; i++, bone += 4)
|
||||
{
|
||||
Hairs[h][i].pos.xPos = *(bone + 1);
|
||||
Hairs[h][i].pos.yPos = *(bone + 2);
|
||||
|
@ -46,7 +46,7 @@ void InitialiseHair()
|
|||
void HairControl(int cutscene, int ponytail, short* framePtr)
|
||||
{
|
||||
SPHERE sphere[HAIR_SPHERE];
|
||||
ObjectInfo* object = &Objects[ID_LARA];
|
||||
OBJECT_INFO* object = &Objects[ID_LARA];
|
||||
short* frame;
|
||||
int spaz;
|
||||
bool youngLara = g_GameFlow->GetLevel(CurrentLevel)->LaraType == LARA_YOUNG;
|
||||
|
@ -179,7 +179,7 @@ void HairControl(int cutscene, int ponytail, short* framePtr)
|
|||
Hairs[ponytail][0].pos.yPos = pos.y;
|
||||
Hairs[ponytail][0].pos.zPos = pos.z;
|
||||
|
||||
for (int i = 0; i < HAIR_SEGMENTS - 1; i++, bone += 4)
|
||||
for (int i = 0; i < HAIR_SEGMENTS; i++, bone += 4)
|
||||
{
|
||||
world = Matrix::CreateTranslation(Hairs[ponytail][i].pos.xPos, Hairs[ponytail][i].pos.yPos, Hairs[ponytail][i].pos.zPos);
|
||||
world = Matrix::CreateFromYawPitchRoll(TO_RAD(Hairs[ponytail][i].pos.yRot), TO_RAD(Hairs[ponytail][i].pos.xRot), 0) * world;
|
||||
|
@ -235,7 +235,7 @@ void HairControl(int cutscene, int ponytail, short* framePtr)
|
|||
SmokeWindX = (((rcossin_tbl[WindAngle]) * Wind) >> 12);
|
||||
SmokeWindZ = (((rcossin_tbl[WindAngle + 1]) * Wind) >> 12);
|
||||
|
||||
for (int i = 1; i < HAIR_SEGMENTS; i++, bone += 4)
|
||||
for (int i = 1; i < HAIR_SEGMENTS + 1; i++, bone += 4)
|
||||
{
|
||||
Hairs[ponytail][0].hvel.x = Hairs[ponytail][i].pos.xPos;
|
||||
Hairs[ponytail][0].hvel.y = Hairs[ponytail][i].pos.yPos;
|
||||
|
@ -316,7 +316,7 @@ void HairControl(int cutscene, int ponytail, short* framePtr)
|
|||
world = Matrix::CreateTranslation(Hairs[ponytail][i - 1].pos.xPos, Hairs[ponytail][i - 1].pos.yPos, Hairs[ponytail][i - 1].pos.zPos);
|
||||
world = Matrix::CreateFromYawPitchRoll(TO_RAD(Hairs[ponytail][i - 1].pos.yRot), TO_RAD(Hairs[ponytail][i - 1].pos.xRot), 0) * world;
|
||||
|
||||
if (i == HAIR_SEGMENTS - 1)
|
||||
if (i == HAIR_SEGMENTS)
|
||||
world = Matrix::CreateTranslation(*(bone - 3), *(bone - 2), *(bone - 1)) * world;
|
||||
else
|
||||
world = Matrix::CreateTranslation(*(bone + 1), *(bone + 2), *(bone + 3)) * world;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#include "phd_global.h"
|
||||
|
||||
constexpr auto HAIR_MAX = 2; // HAIR_NORMAL = 0, HAIR_YOUNG = 1
|
||||
constexpr auto HAIR_SEGMENTS = 7; // classic = 7, young = 14
|
||||
constexpr auto HAIR_SEGMENTS = 6; // classic = 7, young = 14
|
||||
constexpr auto HAIR_SPHERE = 5; // current hair max collision
|
||||
|
||||
struct HAIR_STRUCT
|
||||
|
@ -12,7 +12,7 @@ struct HAIR_STRUCT
|
|||
PHD_VECTOR hvel;
|
||||
PHD_VECTOR unknown;
|
||||
};
|
||||
extern HAIR_STRUCT Hairs[HAIR_MAX][HAIR_SEGMENTS];
|
||||
extern HAIR_STRUCT Hairs[HAIR_MAX][HAIR_SEGMENTS + 1];
|
||||
|
||||
void InitialiseHair();
|
||||
void HairControl(int cutscene, int ponytail, short* framePtr);
|
||||
|
|
|
@ -483,7 +483,7 @@ int UseSpecialItem(ITEM_INFO* item)
|
|||
short selectedObject = g_Inventory.GetSelectedObject();
|
||||
|
||||
if (item->animNumber != ANIMATION_LARA_STAY_IDLE || Lara.gunStatus || selectedObject == NO_ITEM)
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
if (selectedObject >= ID_WATERSKIN1_EMPTY && selectedObject <= ID_WATERSKIN2_5)
|
||||
{
|
||||
|
@ -521,7 +521,7 @@ int UseSpecialItem(ITEM_INFO* item)
|
|||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
item->frameNumber = Anims[item->animNumber].frameBase;
|
||||
|
@ -531,7 +531,7 @@ int UseSpecialItem(ITEM_INFO* item)
|
|||
Lara.gunStatus = LG_HANDS_BUSY;
|
||||
g_Inventory.SetSelectedObject(NO_ITEM);
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void lara_as_stop(ITEM_INFO* item, COLL_INFO* coll)
|
||||
|
|
|
@ -1425,7 +1425,7 @@ void DoGrenadeDamageOnBaddie(ITEM_INFO* dest, ITEM_INFO* src)
|
|||
{
|
||||
dest->hitStatus = true;
|
||||
|
||||
ObjectInfo* obj = &Objects[dest->objectNumber];
|
||||
OBJECT_INFO* obj = &Objects[dest->objectNumber];
|
||||
if (!obj->undead)
|
||||
{
|
||||
HitTarget(dest, 0, 30, 1);
|
||||
|
|
|
@ -692,7 +692,7 @@ int WeaponObjectMesh(int weaponType)
|
|||
void HitTarget(ITEM_INFO* item, GAME_VECTOR* hitPos, int damage, int flag)
|
||||
{
|
||||
CREATURE_INFO* creature = (CREATURE_INFO*)item->data;
|
||||
ObjectInfo* obj = &Objects[item->objectNumber];
|
||||
OBJECT_INFO* obj = &Objects[item->objectNumber];
|
||||
|
||||
item->hitStatus = true;
|
||||
if (creature != nullptr && item != LaraItem)
|
||||
|
|
|
@ -106,7 +106,7 @@ void DisableBaddieAI(short itemNumber)
|
|||
void InitialiseSlot(short itemNum, short slot)
|
||||
{
|
||||
ITEM_INFO* item = &Items[itemNum];
|
||||
ObjectInfo* obj = &Objects[item->objectNumber];
|
||||
OBJECT_INFO* obj = &Objects[item->objectNumber];
|
||||
CREATURE_INFO* creature = &BaddieSlots[slot];
|
||||
|
||||
item->data = creature;
|
||||
|
|
|
@ -130,7 +130,7 @@ void ControlMissile(short fxNumber)
|
|||
void ControlNatlaGun(short fx_number)
|
||||
{
|
||||
FX_INFO* fx, *newfx;
|
||||
ObjectInfo* object;
|
||||
OBJECT_INFO* object;
|
||||
FLOOR_INFO* floor;
|
||||
short roomNumber;
|
||||
int x, y, z;
|
||||
|
|
|
@ -1424,7 +1424,7 @@ short* FindPlinth(ITEM_INFO* item)
|
|||
for (itemNumber = room->itemNumber; itemNumber != NO_ITEM; itemNumber = Items[itemNumber].nextItem)
|
||||
{
|
||||
ITEM_INFO* current = &Items[itemNumber];
|
||||
ObjectInfo* obj = &Objects[current->objectNumber];
|
||||
OBJECT_INFO* obj = &Objects[current->objectNumber];
|
||||
|
||||
if (!obj->isPickup
|
||||
&& item->pos.xPos == current->pos.xPos
|
||||
|
|
|
@ -122,7 +122,7 @@ void SaveGame::saveItems()
|
|||
void SaveGame::saveItem(int itemNumber, int runtimeItem)
|
||||
{
|
||||
ITEM_INFO* item = &Items[itemNumber];
|
||||
ObjectInfo* obj = &Objects[item->objectNumber];
|
||||
OBJECT_INFO* obj = &Objects[item->objectNumber];
|
||||
|
||||
LEB128::Write(m_stream, itemNumber);
|
||||
LEB128::Write(m_stream, runtimeItem);
|
||||
|
@ -550,7 +550,7 @@ bool SaveGame::readItem()
|
|||
ITEM_INFO* item = &Items[itemNumber];
|
||||
item->objectNumber = LEB128::ReadInt16(m_stream);
|
||||
|
||||
ObjectInfo* obj = &Objects[item->objectNumber];
|
||||
OBJECT_INFO* obj = &Objects[item->objectNumber];
|
||||
|
||||
// Runtime items must be initialised
|
||||
// TODO: test test test!!!
|
||||
|
@ -1012,7 +1012,7 @@ bool SaveGame::readItemChunks(ChunkId* chunkId, int maxSize, int itemNumber)
|
|||
{
|
||||
EnableBaddieAI(itemNumber, 1);
|
||||
|
||||
ObjectInfo* obj = &Objects[item->objectNumber];
|
||||
OBJECT_INFO* obj = &Objects[item->objectNumber];
|
||||
CREATURE_INFO* creature = (CREATURE_INFO*)item->data;
|
||||
|
||||
creature->jointRotation[0] = LEB128::ReadInt16(m_stream);
|
||||
|
@ -1116,7 +1116,7 @@ bool SaveGame::readStatistics()
|
|||
void SaveGame::saveItemFlags(int arg1, int arg2)
|
||||
{
|
||||
ITEM_INFO* item = &Items[arg1];
|
||||
ObjectInfo* obj = &Objects[item->objectNumber];
|
||||
OBJECT_INFO* obj = &Objects[item->objectNumber];
|
||||
|
||||
LEB128::Write(m_stream, item->flags);
|
||||
LEB128::Write(m_stream, item->active);
|
||||
|
@ -1140,7 +1140,7 @@ void SaveGame::saveItemFlags(int arg1, int arg2)
|
|||
void SaveGame::saveItemIntelligentData(int arg1, int arg2)
|
||||
{
|
||||
ITEM_INFO* item = &Items[arg1];
|
||||
ObjectInfo* obj = &Objects[item->objectNumber];
|
||||
OBJECT_INFO* obj = &Objects[item->objectNumber];
|
||||
CREATURE_INFO* creature = (CREATURE_INFO*)item->data;
|
||||
|
||||
ITEM_INFO* enemy = (ITEM_INFO*)((char*)creature->enemy - (ptrdiff_t)malloc_buffer);
|
||||
|
|
|
@ -650,7 +650,7 @@ void TurnSwitchCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll)
|
|||
Lara.torsoXrot = 0;
|
||||
Lara.gunStatus = LG_HANDS_BUSY;
|
||||
l->currentAnimState = ANIMATION_LARA_TRY_HANG_SOLID;
|
||||
UseForcedFixedCamera = TRUE;
|
||||
UseForcedFixedCamera = true;
|
||||
ForcedFixedCamera.y = item->pos.yPos - 2048;
|
||||
ForcedFixedCamera.roomNumber = item->roomNumber;
|
||||
AddActiveItem(itemNum);
|
||||
|
|
|
@ -1195,7 +1195,7 @@ void TriggerLaraDrips()// (F)
|
|||
int ExplodingDeath(short itemNumber, int meshBits, short flags)
|
||||
{
|
||||
ITEM_INFO* item = &Items[itemNumber];
|
||||
ObjectInfo* obj = &Objects[item->objectNumber];
|
||||
OBJECT_INFO* obj = &Objects[item->objectNumber];
|
||||
|
||||
short* frame = GetBestFrame(item);
|
||||
|
||||
|
|
|
@ -152,7 +152,7 @@ void UpdateLocusts(void)
|
|||
locust->counter--;
|
||||
if (locust->counter == 0)
|
||||
{
|
||||
locust->on = FALSE;
|
||||
locust->on = false;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -113,7 +113,7 @@ void BigRatControl(short itemNumber)
|
|||
return;
|
||||
|
||||
ITEM_INFO* item;
|
||||
ObjectInfo* obj;
|
||||
OBJECT_INFO* obj;
|
||||
CREATURE_INFO* big_rat;
|
||||
AI_INFO info;
|
||||
short head, angle;
|
||||
|
@ -171,7 +171,7 @@ void BigRatControl(short itemNumber)
|
|||
if ((item->hitStatus || info.distance < BIG_RAT_ALERT_RANGE) || (TargetVisible(item, &info) && info.distance < BIG_RAT_VISIBILITY_RANGE))
|
||||
{
|
||||
if (!big_rat->alerted)
|
||||
big_rat->alerted = TRUE;
|
||||
big_rat->alerted = true;
|
||||
AlertAllGuards(itemNumber);
|
||||
}
|
||||
|
||||
|
@ -213,7 +213,7 @@ void BigRatControl(short itemNumber)
|
|||
{
|
||||
CreatureEffect(item, &big_ratBite, DoBloodSplat);
|
||||
LaraItem->hitPoints -= BIG_RAT_BITE_DAMAGE;
|
||||
LaraItem->hitStatus = TRUE;
|
||||
LaraItem->hitStatus = true;
|
||||
item->requiredAnimState = BIG_RAT_STOP;
|
||||
}
|
||||
break;
|
||||
|
@ -223,7 +223,7 @@ void BigRatControl(short itemNumber)
|
|||
{
|
||||
CreatureEffect(item, &big_ratBite, DoBloodSplat);
|
||||
LaraItem->hitPoints -= BIG_RAT_CHARGE_DAMAGE;
|
||||
LaraItem->hitStatus = TRUE;
|
||||
LaraItem->hitStatus = true;
|
||||
item->requiredAnimState = BIG_RAT_RUN;
|
||||
}
|
||||
break;
|
||||
|
@ -253,7 +253,7 @@ void BigRatControl(short itemNumber)
|
|||
{
|
||||
CreatureEffect(item, &big_ratBite, DoBloodSplat);
|
||||
LaraItem->hitPoints -= BIG_RAT_BITE_DAMAGE;
|
||||
LaraItem->hitStatus = TRUE;
|
||||
LaraItem->hitStatus = true;
|
||||
}
|
||||
|
||||
item->goalAnimState = BIG_RAT_SWIM;
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
#include "setup.h"
|
||||
#include "level.h"
|
||||
|
||||
static void StartBaddy(ObjectInfo* obj)
|
||||
static void StartBaddy(OBJECT_INFO* obj)
|
||||
{
|
||||
obj = &Objects[ID_WOLF];
|
||||
if (obj->loaded)
|
||||
|
@ -150,17 +150,17 @@ static void StartBaddy(ObjectInfo* obj)
|
|||
}
|
||||
}
|
||||
|
||||
static void StartObject(ObjectInfo* obj)
|
||||
static void StartObject(OBJECT_INFO* obj)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static void StartTrap(ObjectInfo* obj)
|
||||
static void StartTrap(OBJECT_INFO* obj)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static ObjectInfo* objToInit;
|
||||
static OBJECT_INFO* objToInit;
|
||||
void InitialiseTR1Objects()
|
||||
{
|
||||
StartBaddy(objToInit);
|
||||
|
|
|
@ -108,7 +108,7 @@ static void SkidooBaddieCollision(short itemNum, ITEM_INFO* skidoo)
|
|||
ITEM_INFO* target = &Items[itemNum];
|
||||
if (target->collidable && target->status != ITEM_INVISIBLE && target != LaraItem && target != skidoo)
|
||||
{
|
||||
ObjectInfo* object = &Objects[target->objectNumber];
|
||||
OBJECT_INFO* object = &Objects[target->objectNumber];
|
||||
if (object->collision && (object->intelligent || target->objectNumber == ID_ROLLINGBALL))
|
||||
{
|
||||
int x = skidoo->pos.xPos - target->pos.xPos;
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
#include "setup.h"
|
||||
#include "level.h"
|
||||
|
||||
static void StartBaddy(ObjectInfo* obj)
|
||||
static void StartBaddy(OBJECT_INFO* obj)
|
||||
{
|
||||
obj = &Objects[ID_SHARK];
|
||||
if (obj->loaded)
|
||||
|
@ -600,12 +600,12 @@ static void StartBaddy(ObjectInfo* obj)
|
|||
}
|
||||
}
|
||||
|
||||
static void StartObject(ObjectInfo* obj)
|
||||
static void StartObject(OBJECT_INFO* obj)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static void StartTrap(ObjectInfo* obj)
|
||||
static void StartTrap(OBJECT_INFO* obj)
|
||||
{
|
||||
obj = &Objects[ID_ROLLING_SPINDLE];
|
||||
if (obj->loaded)
|
||||
|
@ -628,7 +628,7 @@ static void StartTrap(ObjectInfo* obj)
|
|||
}
|
||||
|
||||
// boat, snowmobile, snowmobile gun
|
||||
static void StartVehicles(ObjectInfo* obj)
|
||||
static void StartVehicles(OBJECT_INFO* obj)
|
||||
{
|
||||
// TODO: fix BoatControl() not using int BoatControl(void)
|
||||
obj = &Objects[ID_SPEEDBOAT];
|
||||
|
@ -654,7 +654,7 @@ static void StartVehicles(ObjectInfo* obj)
|
|||
}
|
||||
}
|
||||
|
||||
static ObjectInfo* objToInit;
|
||||
static OBJECT_INFO* objToInit;
|
||||
void InitialiseTR2Objects()
|
||||
{
|
||||
StartBaddy(objToInit);
|
||||
|
|
|
@ -92,7 +92,7 @@ static void LondonBossDie(short item_number)
|
|||
{
|
||||
ITEM_INFO* item;
|
||||
item = &Items[item_number];
|
||||
item->collidable = FALSE;
|
||||
item->collidable = false;
|
||||
item->hitPoints = -16384;
|
||||
|
||||
KillItem(item_number);
|
||||
|
|
|
@ -98,7 +98,7 @@ static void TriggerTonyFlame(short itemNum, int hand)
|
|||
return;
|
||||
|
||||
sptr = &Sparks[GetFreeSpark()];
|
||||
sptr->on = TRUE;
|
||||
sptr->on = true;
|
||||
sptr->sR = 255;
|
||||
sptr->sG = 48 + (GetRandomControl() & 31);
|
||||
sptr->sB = 48;
|
||||
|
@ -156,7 +156,7 @@ static void TriggerFireBallFlame(short fxNumber, long type, long xv, long yv, lo
|
|||
return;
|
||||
|
||||
sptr = &Sparks[GetFreeSpark()];
|
||||
sptr->on = TRUE;
|
||||
sptr->on = true;
|
||||
sptr->sR = 255;
|
||||
sptr->sG = 48 + (GetRandomControl() & 31);
|
||||
sptr->sB = 48;
|
||||
|
@ -424,7 +424,7 @@ void ControlTonyFireBall(short fxNumber)
|
|||
{
|
||||
if (ItemNearLara(&fx->pos, 200))
|
||||
{
|
||||
LaraItem->hitStatus = TRUE;
|
||||
LaraItem->hitStatus = true;
|
||||
KillEffect(fxNumber);
|
||||
LaraItem->hitPoints -= 200;
|
||||
LaraBurn();
|
||||
|
@ -449,7 +449,7 @@ static void TonyBossDie(short itemNum)
|
|||
{
|
||||
ITEM_INFO* item;
|
||||
item = &Items[itemNum];
|
||||
item->collidable = FALSE;
|
||||
item->collidable = false;
|
||||
item->hitPoints = -16384;
|
||||
|
||||
KillItem(itemNum);
|
||||
|
|
|
@ -1097,7 +1097,7 @@ static void KayakToBaddieCollision(ITEM_INFO* kayak)
|
|||
|
||||
if (item->collidable && item->status != ITEM_INVISIBLE)
|
||||
{
|
||||
ObjectInfo* object;
|
||||
OBJECT_INFO* object;
|
||||
|
||||
object = &Objects[item->objectNumber];
|
||||
|
||||
|
|
|
@ -199,7 +199,7 @@ static void CartToBaddieCollision(ITEM_INFO* v)
|
|||
ITEM_INFO* item = &Items[itemNum];
|
||||
if (item->collidable && item->status != ITEM_INVISIBLE && item != LaraItem && item != v)
|
||||
{
|
||||
ObjectInfo* object = &Objects[item->objectNumber];
|
||||
OBJECT_INFO* object = &Objects[item->objectNumber];
|
||||
if (object->collision && (object->intelligent || item->objectNumber == ID_ROLLINGBALL || item->objectNumber == ID_ANIMATING2))
|
||||
{
|
||||
int x = v->pos.xPos - item->pos.xPos;
|
||||
|
|
|
@ -323,7 +323,7 @@ static void QuadBaddieCollision(ITEM_INFO* quad)
|
|||
ITEM_INFO* item = &Items[itemNum];
|
||||
if (item->collidable && item->status != ITEM_INVISIBLE && item != LaraItem && item != quad)
|
||||
{
|
||||
ObjectInfo* object = &Objects[item->objectNumber];
|
||||
OBJECT_INFO* object = &Objects[item->objectNumber];
|
||||
if (object->collision && object->intelligent)
|
||||
{
|
||||
int x = quad->pos.xPos - item->pos.xPos;
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
#include "setup.h"
|
||||
#include "level.h"
|
||||
|
||||
static void StartBaddy(ObjectInfo* obj)
|
||||
static void StartBaddy(OBJECT_INFO* obj)
|
||||
{
|
||||
obj = &Objects[ID_TONY_BOSS];
|
||||
if (obj->loaded)
|
||||
|
@ -350,17 +350,17 @@ static void StartBaddy(ObjectInfo* obj)
|
|||
}
|
||||
}
|
||||
|
||||
static void StartObject(ObjectInfo* obj)
|
||||
static void StartObject(OBJECT_INFO* obj)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static void StartTrap(ObjectInfo* obj)
|
||||
static void StartTrap(OBJECT_INFO* obj)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static void StartVehicles(ObjectInfo* obj)
|
||||
static void StartVehicles(OBJECT_INFO* obj)
|
||||
{
|
||||
obj = &Objects[ID_QUAD];
|
||||
if (obj->loaded)
|
||||
|
@ -394,14 +394,14 @@ static void StartVehicles(ObjectInfo* obj)
|
|||
}
|
||||
}
|
||||
|
||||
static void StartProjectiles(ObjectInfo* obj)
|
||||
static void StartProjectiles(OBJECT_INFO* obj)
|
||||
{
|
||||
obj = &Objects[ID_TONY_BOSS_FLAME];
|
||||
obj->control = ControlTonyFireBall;
|
||||
obj->drawRoutine = NULL;
|
||||
}
|
||||
|
||||
static ObjectInfo* objToInit;
|
||||
static OBJECT_INFO* objToInit;
|
||||
void InitialiseTR3Objects()
|
||||
{
|
||||
StartBaddy(objToInit);
|
||||
|
|
|
@ -125,7 +125,7 @@ void AhmetControl(short itemNumber)
|
|||
// dont clear it !
|
||||
if (item->frameNumber == Anims[item->animNumber].frameEnd)
|
||||
{
|
||||
item->collidable = FALSE; // NOTE: not exist in the original game, avoid wreid collision with lara...
|
||||
item->collidable = false; // NOTE: not exist in the original game, avoid wreid collision with lara...
|
||||
item->frameNumber = (Anims[item->animNumber].frameEnd - 1);
|
||||
}
|
||||
}
|
||||
|
@ -269,14 +269,14 @@ void AhmetControl(short itemNumber)
|
|||
|
||||
if (!(ahmet->flags & 1) && item->frameNumber > (Anims[item->animNumber].frameBase + 7) && (item->touchBits & AHMET_LEFT_TOUCH))
|
||||
{
|
||||
LaraItem->hitStatus = TRUE;
|
||||
LaraItem->hitStatus = true;
|
||||
LaraItem->hitPoints -= AHMET_HAND_DAMAGE;
|
||||
CreatureEffect2(item, &ahmetBiteLeft, 10, -1, DoBloodSplat);
|
||||
ahmet->flags |= 1;
|
||||
}
|
||||
else if (!(ahmet->flags & 2) && item->frameNumber > (Anims[item->animNumber].frameBase + 32) && (item->touchBits & AHMET_RIGHT_TOUCH))
|
||||
{
|
||||
LaraItem->hitStatus = TRUE;
|
||||
LaraItem->hitStatus = true;
|
||||
LaraItem->hitPoints -= AHMET_HAND_DAMAGE;
|
||||
CreatureEffect2(item, &ahmetBiteRight, 10, -1, DoBloodSplat);
|
||||
ahmet->flags |= 2;
|
||||
|
@ -305,7 +305,7 @@ void AhmetControl(short itemNumber)
|
|||
{
|
||||
if (item->frameNumber > (Anims[item->animNumber].frameBase + 11) && (item->touchBits & AHMET_LEFT_TOUCH))
|
||||
{
|
||||
LaraItem->hitStatus = TRUE;
|
||||
LaraItem->hitStatus = true;
|
||||
LaraItem->hitPoints -= AHMET_JAW_DAMAGE;
|
||||
CreatureEffect2(item, &ahmetBiteJaw, 10, -1, DoBloodSplat);
|
||||
ahmet->flags |= 1;
|
||||
|
@ -334,14 +334,14 @@ void AhmetControl(short itemNumber)
|
|||
{
|
||||
if (!(ahmet->flags & 1) && item->frameNumber > (Anims[item->animNumber].frameBase + 14) && (item->touchBits & AHMET_LEFT_TOUCH))
|
||||
{
|
||||
LaraItem->hitStatus = TRUE;
|
||||
LaraItem->hitStatus = true;
|
||||
LaraItem->hitPoints -= AHMET_HAND_DAMAGE;
|
||||
CreatureEffect2(item, &ahmetBiteLeft, 10, -1, DoBloodSplat);
|
||||
ahmet->flags |= 1;
|
||||
}
|
||||
else if (!(ahmet->flags & 2) && item->frameNumber > (Anims[item->animNumber].frameBase + 22) && (item->touchBits & AHMET_RIGHT_TOUCH))
|
||||
{
|
||||
LaraItem->hitStatus = TRUE;
|
||||
LaraItem->hitStatus = true;
|
||||
LaraItem->hitPoints -= AHMET_HAND_DAMAGE;
|
||||
CreatureEffect2(item, &ahmetBiteRight, 10, -1, DoBloodSplat);
|
||||
ahmet->flags |= 2;
|
||||
|
|
|
@ -143,7 +143,7 @@ static bool CheckRespawnedBaboon(short itemNumber)
|
|||
static void UpdateRespawnedBaboon(short itemNumber)
|
||||
{
|
||||
ITEM_INFO* item;
|
||||
ObjectInfo* obj;
|
||||
OBJECT_INFO* obj;
|
||||
BaboonRespawnStruct* baboon;
|
||||
|
||||
item = &Items[itemNumber];
|
||||
|
@ -177,11 +177,11 @@ static void UpdateRespawnedBaboon(short itemNumber)
|
|||
if (item->triggerFlags == 1)
|
||||
return;
|
||||
else
|
||||
item->collidable = TRUE;
|
||||
item->collidable = true;
|
||||
}
|
||||
else if (item->triggerFlags == 0)
|
||||
{
|
||||
item->collidable = TRUE;
|
||||
item->collidable = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -560,7 +560,7 @@ void BaboonControl(short itemNumber)
|
|||
|| (item->touchBits & BABOON_JUMP_TOUCHBITS)))
|
||||
{
|
||||
LaraItem->hitPoints -= BABOON_DAMAGE;
|
||||
LaraItem->hitStatus = TRUE;
|
||||
LaraItem->hitStatus = true;
|
||||
CreatureEffect2(item, &baboonBite, 10, -1, DoBloodSplat);
|
||||
baboon->flags = 1;
|
||||
}
|
||||
|
|
|
@ -280,7 +280,7 @@ void BaddyControl(short itemNum)
|
|||
ITEM_INFO* item = &Items[itemNum];
|
||||
CREATURE_INFO* creature = (CREATURE_INFO*)item->data;
|
||||
ITEM_INFO* enemyItem = creature->enemy;
|
||||
ObjectInfo* obj = &Objects[ID_BADDY1];
|
||||
OBJECT_INFO* obj = &Objects[ID_BADDY1];
|
||||
|
||||
short tilt = 0;
|
||||
short angle = 0;
|
||||
|
|
|
@ -65,7 +65,7 @@ void BatControl(short itemNumber)
|
|||
{
|
||||
item->goalAnimState = BAT_DEATH;
|
||||
item->pos.yPos = item->floor;
|
||||
item->gravityStatus = FALSE;
|
||||
item->gravityStatus = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -150,7 +150,7 @@ void BatControl(short itemNumber)
|
|||
if (bat->enemy == LaraItem)
|
||||
{
|
||||
LaraItem->hitPoints -= BAT_DAMAGE;
|
||||
LaraItem->hitStatus = TRUE;
|
||||
LaraItem->hitStatus = true;
|
||||
}
|
||||
bat->flags = 1;
|
||||
}
|
||||
|
|
|
@ -101,7 +101,7 @@ void CrocodileControl(short itemNumber)
|
|||
return;
|
||||
|
||||
ITEM_INFO* item;
|
||||
ObjectInfo* obj;
|
||||
OBJECT_INFO* obj;
|
||||
CREATURE_INFO* crocodile;
|
||||
AI_INFO info;
|
||||
OBJECT_Bones boneRot;
|
||||
|
@ -158,7 +158,7 @@ void CrocodileControl(short itemNumber)
|
|||
if ((item->hitStatus || info.distance < CROC_ALERT_RANGE) || (TargetVisible(item, &info) && info.distance < CROC_VISIBILITY_RANGE))
|
||||
{
|
||||
if (!crocodile->alerted)
|
||||
crocodile->alerted = TRUE;
|
||||
crocodile->alerted = true;
|
||||
AlertAllGuards(itemNumber);
|
||||
}
|
||||
|
||||
|
@ -242,7 +242,7 @@ void CrocodileControl(short itemNumber)
|
|||
{
|
||||
CreatureEffect2(item, &crocBite, 10, -1, DoBloodSplat);
|
||||
LaraItem->hitPoints -= CROC_DAMAGE;
|
||||
LaraItem->hitStatus = TRUE;
|
||||
LaraItem->hitStatus = true;
|
||||
item->requiredAnimState = CROC_IDLE;
|
||||
}
|
||||
}
|
||||
|
@ -285,7 +285,7 @@ void CrocodileControl(short itemNumber)
|
|||
{
|
||||
CreatureEffect2(item, &crocBite, 10, -1, DoBloodSplat);
|
||||
LaraItem->hitPoints -= CROC_DAMAGE;
|
||||
LaraItem->hitStatus = TRUE;
|
||||
LaraItem->hitStatus = true;
|
||||
item->requiredAnimState = WCROC_SWIM;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ static void DemigodThrowEnergyAttack(PHD_3DPOS* pos, short roomNumber, int flags
|
|||
fx->pos.yRot = pos->yRot + (GetRandomControl() & 0x7FF) - 1024;
|
||||
}
|
||||
|
||||
ObjectInfo* obj = &Objects[ID_ENERGY_BUBBLES];
|
||||
OBJECT_INFO* obj = &Objects[ID_ENERGY_BUBBLES];
|
||||
|
||||
fx->pos.zRot = 0;
|
||||
fx->roomNumber = roomNumber;
|
||||
|
|
|
@ -35,7 +35,7 @@ void GuideControl(short itemNumber)
|
|||
|
||||
ITEM_INFO* item = &Items[itemNumber];
|
||||
CREATURE_INFO* creature = (CREATURE_INFO*)item->data;
|
||||
ObjectInfo* obj = &Objects[item->objectNumber];
|
||||
OBJECT_INFO* obj = &Objects[item->objectNumber];
|
||||
|
||||
short angle = 0;
|
||||
short tilt = 0;
|
||||
|
|
|
@ -260,7 +260,7 @@ void HarpyControl(short itemNumber)
|
|||
return;
|
||||
|
||||
CREATURE_INFO* creature = (CREATURE_INFO*)item->data;
|
||||
ObjectInfo* obj = &Objects[item->objectNumber];
|
||||
OBJECT_INFO* obj = &Objects[item->objectNumber];
|
||||
|
||||
short angle = 0;
|
||||
short joint0 = 0;
|
||||
|
|
|
@ -92,7 +92,7 @@ static void HorsemanSparks(PHD_3DPOS* pos, int param1, int num)
|
|||
void InitialiseHorse(short itemNumber)
|
||||
{
|
||||
ITEM_INFO* item = &Items[itemNumber];
|
||||
ObjectInfo* obj = &Objects[ID_HORSE];
|
||||
OBJECT_INFO* obj = &Objects[ID_HORSE];
|
||||
|
||||
item->animNumber = obj->animIndex + 2;
|
||||
item->frameNumber = Anims[item->animNumber].frameBase;
|
||||
|
@ -103,7 +103,7 @@ void InitialiseHorse(short itemNumber)
|
|||
void InitialiseHorseman(short itemNumber)
|
||||
{
|
||||
ITEM_INFO* item = &Items[itemNumber];
|
||||
ObjectInfo* obj = &Objects[ID_HORSEMAN];
|
||||
OBJECT_INFO* obj = &Objects[ID_HORSEMAN];
|
||||
|
||||
ClearItem(itemNumber);
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
void InitialiseJeanYves(short itemNumber)
|
||||
{
|
||||
ITEM_INFO* item = &Items[itemNumber];
|
||||
ObjectInfo* obj = &Objects[item->objectNumber];
|
||||
OBJECT_INFO* obj = &Objects[item->objectNumber];
|
||||
|
||||
item->goalAnimState = 1;
|
||||
item->currentAnimState = 1;
|
||||
|
|
|
@ -32,7 +32,7 @@ void KnightTemplarControl(short itemNumber)
|
|||
return;
|
||||
|
||||
ITEM_INFO* item = &Items[itemNumber];
|
||||
ObjectInfo* obj = &Objects[item->objectNumber];
|
||||
OBJECT_INFO* obj = &Objects[item->objectNumber];
|
||||
|
||||
if (item->animNumber == obj->animIndex ||
|
||||
item->animNumber - obj->animIndex == 1 ||
|
||||
|
|
|
@ -68,7 +68,7 @@ void TriggerMutantRocketEffects(short fxNumber, short xVel, short yVel, short zV
|
|||
|
||||
fx = &EffectList[fxNumber];
|
||||
sptr = &Sparks[GetFreeSpark()];
|
||||
sptr->on = TRUE;
|
||||
sptr->on = true;
|
||||
color = (GetRandomControl() & 0x3F) - 128;
|
||||
sptr->sB = 0;
|
||||
sptr->sR = color;
|
||||
|
|
|
@ -78,7 +78,7 @@ static void WakeUpSkeleton(ITEM_INFO* item)
|
|||
void InitialiseSkeleton(short itemNumber)
|
||||
{
|
||||
ITEM_INFO* item = &Items[itemNumber];
|
||||
ObjectInfo* obj = &Objects[ID_SKELETON];
|
||||
OBJECT_INFO* obj = &Objects[ID_SKELETON];
|
||||
|
||||
ClearItem(itemNumber);
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ void SphinxControl(short itemNumber)
|
|||
|
||||
ITEM_INFO* item = &Items[itemNumber];
|
||||
CREATURE_INFO* creature = (CREATURE_INFO*)item->data;
|
||||
ObjectInfo* obj = &Objects[item->objectNumber];
|
||||
OBJECT_INFO* obj = &Objects[item->objectNumber];
|
||||
|
||||
int x = item->pos.xPos + 614 * phd_sin(item->pos.yRot) >> W2V_SHIFT;
|
||||
int y = item->pos.yPos;
|
||||
|
|
|
@ -41,7 +41,7 @@ void TroopsControl(short itemNumber)
|
|||
|
||||
ITEM_INFO* item = &Items[itemNumber];
|
||||
CREATURE_INFO* creature = (CREATURE_INFO*)item->data;
|
||||
ObjectInfo* obj = &Objects[item->objectNumber];
|
||||
OBJECT_INFO* obj = &Objects[item->objectNumber];
|
||||
short angle = 0;
|
||||
short tilt = 0;
|
||||
short joint0 = 0;
|
||||
|
|
|
@ -537,7 +537,7 @@ static void JeepBaddieCollision(ITEM_INFO* jeep)
|
|||
}
|
||||
else
|
||||
{
|
||||
ObjectInfo* object = &Objects[item->objectNumber];
|
||||
OBJECT_INFO* object = &Objects[item->objectNumber];
|
||||
if (object->collision && object->intelligent ||
|
||||
item->objectNumber == ID_ROLLINGBALL)
|
||||
{
|
||||
|
|
|
@ -231,7 +231,7 @@ static void DrawMotorbikeLight(ITEM_INFO* item)
|
|||
rnd = (2 * motorbike->lightPower) - (GetRandomControl() & 0xF);
|
||||
// TODO: Spot Light
|
||||
/*if (rnd <= 0)
|
||||
SpotLightEnabled = FALSE;
|
||||
SpotLightEnabled = false;
|
||||
else
|
||||
CreateSpotLight(&start, &target, item->pos.yRot, rnd);*/
|
||||
}
|
||||
|
@ -247,22 +247,22 @@ static BOOL GetOnMotorBike(short itemNumber)
|
|||
|
||||
item = &Items[itemNumber];
|
||||
if (item->flags & ONESHOT || Lara.gunStatus == LG_HANDS_BUSY || LaraItem->gravityStatus)
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
if ((abs(item->pos.yPos - LaraItem->pos.yPos) >= STEP_SIZE || !(TrInput & IN_ACTION)) && g_Inventory.GetSelectedObject() != ID_PUZZLE_ITEM1)
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
dx = LaraItem->pos.xPos - item->pos.xPos;
|
||||
dz = LaraItem->pos.zPos - item->pos.zPos;
|
||||
distance = SQUARE(dx) + SQUARE(dz);
|
||||
if (distance > 170000)
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
room_number = item->roomNumber;
|
||||
floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &room_number);
|
||||
height = GetFloorHeight(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos);
|
||||
if (height < -32000)
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
angle = phd_atan(item->pos.zPos - LaraItem->pos.zPos, item->pos.xPos - LaraItem->pos.xPos) - item->pos.yRot;
|
||||
tempangle = angle - item->pos.yRot;
|
||||
|
@ -270,15 +270,15 @@ static BOOL GetOnMotorBike(short itemNumber)
|
|||
{
|
||||
// left
|
||||
if (tempangle > -ANGLE(45.0f) && angle < ANGLE(135.0f))
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// right
|
||||
if (tempangle > ANGLE(225.0f) && tempangle < ANGLE(315.0f))
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void MotorbikeCollision(short itemNumber, ITEM_INFO* laraitem, COLL_INFO* coll)
|
||||
|
@ -306,7 +306,7 @@ void MotorbikeCollision(short itemNumber, ITEM_INFO* laraitem, COLL_INFO* coll)
|
|||
{
|
||||
CreateFlare(ID_FLARE_ITEM, FALSE);
|
||||
undraw_flare_meshes();
|
||||
Lara.flareControlLeft = FALSE;
|
||||
Lara.flareControlLeft = false;
|
||||
Lara.gunType = WEAPON_NONE;
|
||||
Lara.requestGunType = WEAPON_NONE;
|
||||
Lara.flareAge = 0;
|
||||
|
@ -343,7 +343,7 @@ void MotorbikeCollision(short itemNumber, ITEM_INFO* laraitem, COLL_INFO* coll)
|
|||
Lara.hitDirection = -1;
|
||||
AnimateItem(laraitem);
|
||||
motorbike->revs = 0;
|
||||
item->collidable = TRUE;
|
||||
item->collidable = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -500,11 +500,11 @@ static int MotorBikeCheckGetOff(void)
|
|||
Lara.Vehicle = NO_ITEM;
|
||||
Lara.gunStatus = LG_NO_ARMS;
|
||||
DashTimer = 120;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (LaraItem->frameNumber != Anims[LaraItem->animNumber].frameEnd)
|
||||
return TRUE;
|
||||
return true;
|
||||
|
||||
// exit when falling
|
||||
// if (LaraItem->state_current == BIKE_EMPTY6) {
|
||||
|
@ -514,7 +514,7 @@ static int MotorBikeCheckGetOff(void)
|
|||
// lara death when falling too much
|
||||
// }
|
||||
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
static int DoMotorBikeDynamics(int height, int fallspeed, int* y, int flags)
|
||||
|
@ -705,7 +705,7 @@ static int MotorBikeDynamics(ITEM_INFO* item)
|
|||
if (anglex < 0)
|
||||
anglex2 = -anglex;
|
||||
if (anglex2 > 24)
|
||||
NoGetOff = TRUE;
|
||||
NoGetOff = true;
|
||||
anglex *= 16;
|
||||
motorbike->velocity -= anglex;
|
||||
}
|
||||
|
@ -714,7 +714,7 @@ static int MotorBikeDynamics(ITEM_INFO* item)
|
|||
if (abs(anglez) > 32)
|
||||
{
|
||||
short ang, angabs;
|
||||
NoGetOff = TRUE;
|
||||
NoGetOff = true;
|
||||
if (anglez >= 0)
|
||||
ang = item->pos.yRot + 0x4000;
|
||||
else
|
||||
|
@ -814,7 +814,7 @@ static int MotorBikeDynamics(ITEM_INFO* item)
|
|||
if (&Items[Lara.Vehicle] == item && motorbike->velocity >= 0x8000 && newspeed < (motorbike->velocity - 10))
|
||||
{
|
||||
LaraItem->hitPoints -= (motorbike->velocity - newspeed) >> 7;
|
||||
LaraItem->hitStatus = TRUE;
|
||||
LaraItem->hitStatus = true;
|
||||
}
|
||||
|
||||
if (motorbike->velocity > 0 && newspeed < motorbike->velocity)
|
||||
|
@ -847,17 +847,17 @@ static BOOL MotorbikeCanGetOff(void)
|
|||
floor = GetFloor(x, y, z, &room_number);
|
||||
height = GetFloorHeight(floor, x, y, z);
|
||||
if (HeightType == BIG_SLOPE || HeightType == DIAGONAL || height == -NO_HEIGHT)
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
if (abs(height - item->pos.yPos) > STEP_SIZE)
|
||||
return FALSE;
|
||||
return false;
|
||||
ceiling = GetCeiling(floor, x, y, z);
|
||||
if ((ceiling - item->pos.yPos) > -LARA_HITE)
|
||||
return FALSE;
|
||||
return false;
|
||||
if ((height - ceiling) < LARA_HITE)
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
static void AnimateMotorbike(ITEM_INFO* item, int collide, BOOL dead)
|
||||
|
@ -1239,7 +1239,7 @@ void SetLaraOnMotorBike(ITEM_INFO* item, ITEM_INFO* laraitem)
|
|||
laraitem->goalAnimState = BIKE_IDLE;
|
||||
laraitem->animNumber = Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex + BIKE_IDLE_ANIM;
|
||||
laraitem->frameNumber = Anims[laraitem->animNumber].frameBase;
|
||||
laraitem->gravityStatus = FALSE;
|
||||
laraitem->gravityStatus = false;
|
||||
item->animNumber = laraitem->animNumber + (Objects[ID_MOTORBIKE].animIndex - Objects[ID_MOTORBIKE_LARA_ANIMS].animIndex);
|
||||
item->frameNumber = laraitem->frameNumber + (Anims[ID_MOTORBIKE].frameBase - Anims[ID_MOTORBIKE_LARA_ANIMS].frameBase);
|
||||
item->hitPoints = 1;
|
||||
|
@ -1279,11 +1279,11 @@ int MotorbikeControl(void)
|
|||
if (LaraItem->hitPoints <= 0)
|
||||
{
|
||||
TrInput &= ~(IN_LEFT | IN_RIGHT | IN_BACK | IN_FORWARD);
|
||||
dead = TRUE;
|
||||
dead = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
dead = FALSE;
|
||||
dead = false;
|
||||
}
|
||||
|
||||
if (motorbike->flags)
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
#include "setup.h"
|
||||
#include "level.h"
|
||||
|
||||
static void StartBaddy(ObjectInfo* obj)
|
||||
static void StartBaddy(OBJECT_INFO* obj)
|
||||
{
|
||||
obj = &Objects[ID_SMALL_SCORPION];
|
||||
if (obj->loaded)
|
||||
|
@ -558,12 +558,12 @@ static void StartBaddy(ObjectInfo* obj)
|
|||
obj->hitPoints = NOT_TARGETABLE;
|
||||
obj->pivotLength = 50;
|
||||
obj->radius = 128;
|
||||
obj->intelligent = TRUE;
|
||||
obj->saveAnim = TRUE;
|
||||
obj->saveFlags = TRUE;
|
||||
obj->saveMesh = TRUE;
|
||||
obj->savePosition = TRUE;
|
||||
obj->undead = TRUE;
|
||||
obj->intelligent = true;
|
||||
obj->saveAnim = true;
|
||||
obj->saveFlags = true;
|
||||
obj->saveMesh = true;
|
||||
obj->savePosition = true;
|
||||
obj->undead = true;
|
||||
obj->hitEffect = HIT_SMOKE;
|
||||
obj->zoneType = ZONE_WATER;
|
||||
Bones[obj->boneIndex + 6 * 4] |= ROT_Y | ROT_X;
|
||||
|
@ -576,7 +576,7 @@ static void StartBaddy(ObjectInfo* obj)
|
|||
obj->initialise = InitialiseLocust;
|
||||
obj->control = LocustControl;
|
||||
obj->drawRoutine = NULL;
|
||||
obj->saveFlags = TRUE;
|
||||
obj->saveFlags = true;
|
||||
obj->zoneType = ZONE_BASIC;
|
||||
}
|
||||
|
||||
|
@ -587,7 +587,7 @@ static void StartBaddy(ObjectInfo* obj)
|
|||
}
|
||||
}
|
||||
|
||||
static void StartObject(ObjectInfo* obj)
|
||||
static void StartObject(OBJECT_INFO* obj)
|
||||
{
|
||||
obj = &Objects[ID_SARCOPHAGUS];
|
||||
if (obj->loaded)
|
||||
|
@ -599,7 +599,7 @@ static void StartObject(ObjectInfo* obj)
|
|||
}
|
||||
}
|
||||
|
||||
static void StartTrap(ObjectInfo* obj)
|
||||
static void StartTrap(OBJECT_INFO* obj)
|
||||
{
|
||||
obj = &Objects[ID_CHAIN];
|
||||
if (obj->loaded)
|
||||
|
@ -757,7 +757,7 @@ static void StartTrap(ObjectInfo* obj)
|
|||
}
|
||||
}
|
||||
|
||||
static void StartVehicles(ObjectInfo* obj)
|
||||
static void StartVehicles(OBJECT_INFO* obj)
|
||||
{
|
||||
obj = &Objects[ID_JEEP];
|
||||
if (obj->loaded)
|
||||
|
@ -782,12 +782,12 @@ static void StartVehicles(ObjectInfo* obj)
|
|||
}
|
||||
}
|
||||
|
||||
static void StartSwitch(ObjectInfo* obj)
|
||||
static void StartSwitch(OBJECT_INFO* obj)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static ObjectInfo* objToInit;
|
||||
static OBJECT_INFO* objToInit;
|
||||
void InitialiseTR4Objects()
|
||||
{
|
||||
StartBaddy(objToInit);
|
||||
|
|
|
@ -83,7 +83,7 @@ void HitmanControl(short itemNumber)
|
|||
{
|
||||
ITEM_INFO* item = &Items[itemNumber];
|
||||
CREATURE_INFO* creature = (CREATURE_INFO*)item->data;
|
||||
ObjectInfo* obj = &Objects[item->objectNumber];
|
||||
OBJECT_INFO* obj = &Objects[item->objectNumber];
|
||||
|
||||
short angle = 0;
|
||||
short joint2 = 0;
|
||||
|
|
|
@ -36,7 +36,7 @@ void Tr5DogControl(short itemNumber)
|
|||
|
||||
ITEM_INFO* item = &Items[itemNumber];
|
||||
CREATURE_INFO* creature = (CREATURE_INFO*)item->data;
|
||||
ObjectInfo* obj = &Objects[item->objectNumber];
|
||||
OBJECT_INFO* obj = &Objects[item->objectNumber];
|
||||
|
||||
if (item->hitPoints <= 0)
|
||||
{
|
||||
|
|
|
@ -46,7 +46,7 @@ void LagoonWitchControl(short itemNumber)
|
|||
|
||||
ITEM_INFO* item = &Items[itemNumber];
|
||||
CREATURE_INFO* creature = (CREATURE_INFO*)item->data;
|
||||
ObjectInfo* obj = &Objects[item->objectNumber];
|
||||
OBJECT_INFO* obj = &Objects[item->objectNumber];
|
||||
|
||||
if (item->hitPoints <= 0)
|
||||
{
|
||||
|
|
|
@ -17,7 +17,7 @@ void InitialiseTwoBlocksPlatform(short itemNumber)
|
|||
BOOL IsOnTwoBlocksPlatform(ITEM_INFO* item, int x, int z)
|
||||
{
|
||||
if (!item->meshBits)
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
short angle = item->pos.yRot;
|
||||
int xb = x >> WALL_SHIFT;
|
||||
|
@ -26,15 +26,15 @@ BOOL IsOnTwoBlocksPlatform(ITEM_INFO* item, int x, int z)
|
|||
int itemzb = item->pos.zPos >> WALL_SHIFT;
|
||||
|
||||
if (!angle && (xb == itemxb || xb == itemxb - 1) && (zb == itemzb || zb == itemzb + 1))
|
||||
return TRUE;
|
||||
return true;
|
||||
if (angle == -ANGLE(180) && (xb == itemxb || xb == itemxb + 1) && (zb == itemzb || zb == itemzb - 1))
|
||||
return TRUE;
|
||||
return true;
|
||||
if (angle == ANGLE(90) && (zb == itemzb || zb == itemzb - 1) && (xb == itemxb || xb == itemxb + 1))
|
||||
return TRUE;
|
||||
return true;
|
||||
if (angle == -ANGLE(90) && (zb == itemzb || zb == itemzb - 1) && (xb == itemxb || xb == itemxb - 1))
|
||||
return TRUE;
|
||||
return true;
|
||||
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
void TwoBlocksPlatformFloor(ITEM_INFO* item, int x, int y, int z, int* height)
|
||||
|
|
|
@ -65,7 +65,7 @@
|
|||
/// register objects
|
||||
#include "object_helper.h"
|
||||
|
||||
static void StartBaddy(ObjectInfo* obj)
|
||||
static void StartBaddy(OBJECT_INFO* obj)
|
||||
{
|
||||
obj = &Objects[ID_LARA];
|
||||
if (obj->loaded)
|
||||
|
@ -869,13 +869,13 @@ static void StartBaddy(ObjectInfo* obj)
|
|||
obj->saveAnim = true;
|
||||
obj->zoneType = ZONE_BASIC;
|
||||
obj->hitEffect = HIT_BLOOD;
|
||||
obj->castShadows = TRUE;
|
||||
obj->castShadows = true;
|
||||
obj->hitPoints = 100;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void StartObject(ObjectInfo* obj)
|
||||
static void StartObject(OBJECT_INFO* obj)
|
||||
{
|
||||
InitPickupItem(obj, FlareControl, ID_FLARE_ITEM);
|
||||
InitPickupItem(obj, TorchControl, ID_BURNING_TORCH_ITEM, true);
|
||||
|
@ -1024,7 +1024,7 @@ static void StartObject(ObjectInfo* obj)
|
|||
}
|
||||
}
|
||||
|
||||
static void StartTrap(ObjectInfo* obj)
|
||||
static void StartTrap(OBJECT_INFO* obj)
|
||||
{
|
||||
obj = &Objects[ID_ZIPLINE_HANDLE];
|
||||
if (obj->loaded)
|
||||
|
@ -1144,7 +1144,7 @@ static void StartTrap(ObjectInfo* obj)
|
|||
}
|
||||
}
|
||||
|
||||
static void StartSwitch(ObjectInfo* obj)
|
||||
static void StartSwitch(OBJECT_INFO* obj)
|
||||
{
|
||||
obj = &Objects[ID_COG_SWITCH];
|
||||
if (obj->loaded)
|
||||
|
@ -1166,13 +1166,13 @@ static void StartSwitch(ObjectInfo* obj)
|
|||
}
|
||||
}
|
||||
|
||||
static void StartShatter(ObjectInfo* obj)
|
||||
static void StartShatter(OBJECT_INFO* obj)
|
||||
{
|
||||
for (int i = ID_SMASH_OBJECT1; i <= ID_SMASH_OBJECT16; i++)
|
||||
InitSmashObject(obj, i);
|
||||
}
|
||||
|
||||
static void StartProjectiles(ObjectInfo* obj)
|
||||
static void StartProjectiles(OBJECT_INFO* obj)
|
||||
{
|
||||
InitProjectile(obj, BubblesControl, ID_ENERGY_BUBBLES, true);
|
||||
InitProjectile(obj, MissileControl, ID_BUBBLES, true);
|
||||
|
@ -1183,7 +1183,7 @@ static void StartProjectiles(ObjectInfo* obj)
|
|||
InitProjectile(obj, ControlCrossbowBolt, ID_CROSSBOW_BOLT);
|
||||
}
|
||||
|
||||
static void StartPickup(ObjectInfo* obj)
|
||||
static void StartPickup(OBJECT_INFO* obj)
|
||||
{
|
||||
for (int objNumber = ID_PUZZLE_ITEM1; objNumber <= ID_EXAMINE8_COMBO2; objNumber++)
|
||||
{
|
||||
|
@ -1229,7 +1229,7 @@ static void StartPickup(ObjectInfo* obj)
|
|||
InitPickup(obj, ID_GOLDROSE_ITEM);
|
||||
}
|
||||
|
||||
static ObjectInfo* objToInit;
|
||||
static OBJECT_INFO* objToInit;
|
||||
void InitialiseTR5Objects()
|
||||
{
|
||||
StartBaddy(objToInit);
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#include "tr5_smashobject.h"
|
||||
#include "tr5_pushableblock.h"
|
||||
using std::function;
|
||||
void InitSmashObject(ObjectInfo* obj, int objectNumber)
|
||||
void InitSmashObject(OBJECT_INFO* obj, int objectNumber)
|
||||
{
|
||||
obj = &Objects[objectNumber];
|
||||
if (obj->loaded)
|
||||
|
@ -21,7 +21,7 @@ void InitSmashObject(ObjectInfo* obj, int objectNumber)
|
|||
}
|
||||
}
|
||||
|
||||
void InitKeyHole(ObjectInfo* obj, int objectNumber)
|
||||
void InitKeyHole(OBJECT_INFO* obj, int objectNumber)
|
||||
{
|
||||
obj = &Objects[objectNumber];
|
||||
if (obj->loaded)
|
||||
|
@ -31,7 +31,7 @@ void InitKeyHole(ObjectInfo* obj, int objectNumber)
|
|||
}
|
||||
}
|
||||
|
||||
void InitPuzzleHole(ObjectInfo* obj, int objectNumber)
|
||||
void InitPuzzleHole(OBJECT_INFO* obj, int objectNumber)
|
||||
{
|
||||
obj = &Objects[objectNumber];
|
||||
if (obj->loaded)
|
||||
|
@ -44,7 +44,7 @@ void InitPuzzleHole(ObjectInfo* obj, int objectNumber)
|
|||
}
|
||||
}
|
||||
|
||||
void InitPuzzleDone(ObjectInfo* obj, int objectNumber)
|
||||
void InitPuzzleDone(OBJECT_INFO* obj, int objectNumber)
|
||||
{
|
||||
obj = &Objects[objectNumber];
|
||||
if (obj->loaded)
|
||||
|
@ -56,7 +56,7 @@ void InitPuzzleDone(ObjectInfo* obj, int objectNumber)
|
|||
}
|
||||
}
|
||||
|
||||
void InitAnimating(ObjectInfo* obj, int objectNumber)
|
||||
void InitAnimating(OBJECT_INFO* obj, int objectNumber)
|
||||
{
|
||||
obj = &Objects[objectNumber];
|
||||
if (obj->loaded)
|
||||
|
@ -72,7 +72,7 @@ void InitAnimating(ObjectInfo* obj, int objectNumber)
|
|||
}
|
||||
}
|
||||
|
||||
void InitPickup(ObjectInfo* obj, int objectNumber)
|
||||
void InitPickup(OBJECT_INFO* obj, int objectNumber)
|
||||
{
|
||||
obj = &Objects[objectNumber];
|
||||
if (obj->loaded)
|
||||
|
@ -86,7 +86,7 @@ void InitPickup(ObjectInfo* obj, int objectNumber)
|
|||
}
|
||||
}
|
||||
|
||||
void InitPickupItem(ObjectInfo* obj, function<InitFunction> func, int objectNumber, bool useDrawAnimItem)
|
||||
void InitPickupItem(OBJECT_INFO* obj, function<InitFunction> func, int objectNumber, bool useDrawAnimItem)
|
||||
{
|
||||
obj = &Objects[objectNumber];
|
||||
if (obj->loaded)
|
||||
|
@ -109,7 +109,7 @@ void InitPickupItem(ObjectInfo* obj, function<InitFunction> func, int objectNumb
|
|||
}
|
||||
}
|
||||
|
||||
void InitProjectile(ObjectInfo* obj, function<InitFunction> func, int objectNumber, bool noLoad)
|
||||
void InitProjectile(OBJECT_INFO* obj, function<InitFunction> func, int objectNumber, bool noLoad)
|
||||
{
|
||||
obj = &Objects[objectNumber];
|
||||
if (obj->loaded || noLoad)
|
||||
|
@ -123,7 +123,7 @@ void InitProjectile(ObjectInfo* obj, function<InitFunction> func, int objectNumb
|
|||
}
|
||||
}
|
||||
|
||||
void InitSearchObject(ObjectInfo* obj, int objectNumber)
|
||||
void InitSearchObject(OBJECT_INFO* obj, int objectNumber)
|
||||
{
|
||||
obj = &Objects[objectNumber];
|
||||
if (obj->loaded)
|
||||
|
@ -135,7 +135,7 @@ void InitSearchObject(ObjectInfo* obj, int objectNumber)
|
|||
}
|
||||
}
|
||||
|
||||
void InitPushableObject(ObjectInfo* obj, int objectNumber)
|
||||
void InitPushableObject(OBJECT_INFO* obj, int objectNumber)
|
||||
{
|
||||
obj = &Objects[objectNumber];
|
||||
if (obj->loaded)
|
||||
|
|
|
@ -3,13 +3,13 @@
|
|||
|
||||
#define InitFunction void(short itemNumber)
|
||||
|
||||
void InitSmashObject(ObjectInfo* obj, int objectNumber);
|
||||
void InitKeyHole(ObjectInfo* obj, int objectNumber);
|
||||
void InitPuzzleHole(ObjectInfo* obj, int objectNumber);
|
||||
void InitPuzzleDone(ObjectInfo* obj, int objectNumber);
|
||||
void InitAnimating(ObjectInfo* obj, int objectNumber);
|
||||
void InitPickup(ObjectInfo* obj, int objectNumber);
|
||||
void InitPickupItem(ObjectInfo* obj, std::function<InitFunction> func, int objectNumber, bool useDrawAnimItem = false);
|
||||
void InitProjectile(ObjectInfo* obj, std::function<InitFunction> func, int objectNumber, bool noLoad = false);
|
||||
void InitSearchObject(ObjectInfo* obj, int objectNumber);
|
||||
void InitPushableObject(ObjectInfo* obj, int objectNumber);
|
||||
void InitSmashObject(OBJECT_INFO* obj, int objectNumber);
|
||||
void InitKeyHole(OBJECT_INFO* obj, int objectNumber);
|
||||
void InitPuzzleHole(OBJECT_INFO* obj, int objectNumber);
|
||||
void InitPuzzleDone(OBJECT_INFO* obj, int objectNumber);
|
||||
void InitAnimating(OBJECT_INFO* obj, int objectNumber);
|
||||
void InitPickup(OBJECT_INFO* obj, int objectNumber);
|
||||
void InitPickupItem(OBJECT_INFO* obj, std::function<InitFunction> func, int objectNumber, bool useDrawAnimItem = false);
|
||||
void InitProjectile(OBJECT_INFO* obj, std::function<InitFunction> func, int objectNumber, bool noLoad = false);
|
||||
void InitSearchObject(OBJECT_INFO* obj, int objectNumber);
|
||||
void InitPushableObject(OBJECT_INFO* obj, int objectNumber);
|
||||
|
|
|
@ -128,7 +128,7 @@ namespace T5M::Renderer
|
|||
|
||||
// Update waterfalls textures
|
||||
/*for (int i = ID_WATERFALL1; i <= ID_WATERFALLSS2; i++) {
|
||||
ObjectInfo* obj = &Objects[i];
|
||||
OBJECT_INFO* obj = &Objects[i];
|
||||
|
||||
if (obj->loaded) {
|
||||
RendererObject* waterfall = m_moveableObjects[i];
|
||||
|
@ -262,7 +262,7 @@ namespace T5M::Renderer
|
|||
if (!force && itemToDraw->DoneAnimations)
|
||||
return;
|
||||
|
||||
ObjectInfo *obj = &Objects[item->objectNumber];
|
||||
OBJECT_INFO *obj = &Objects[item->objectNumber];
|
||||
RendererObject &moveableObj = *m_moveableObjects[item->objectNumber];
|
||||
|
||||
// Update animation matrices
|
||||
|
@ -458,9 +458,10 @@ namespace T5M::Renderer
|
|||
vertex.Color.w = 1.0f;
|
||||
|
||||
vertex.Bone = meshPtr->bones[v];
|
||||
vertex.OriginalIndex = v;
|
||||
//vertex.Bone = boneIndex;
|
||||
if (isHairs)
|
||||
vertex.Bone = v;
|
||||
/*if (isHairs)
|
||||
vertex.Bone = v;*/
|
||||
|
||||
bucket->Vertices.push_back(vertex);
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@ namespace T5M::Renderer
|
|||
DirectX::SimpleMath::Vector4 Color;
|
||||
float Bone;
|
||||
int IndexInPoly;
|
||||
//int OriginalIndex;
|
||||
int OriginalIndex;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -316,7 +316,7 @@ namespace T5M::Renderer
|
|||
for (int i = 0; i < MoveablesIds.size(); i++)
|
||||
{
|
||||
int objNum = MoveablesIds[i];
|
||||
ObjectInfo *obj = &Objects[objNum];
|
||||
OBJECT_INFO *obj = &Objects[objNum];
|
||||
|
||||
if (obj->nmeshes > 0)
|
||||
{
|
||||
|
@ -516,28 +516,86 @@ namespace T5M::Renderer
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (MoveablesIds[i] == ID_LARA_HAIR)
|
||||
else if (MoveablesIds[i] == ID_LARA_HAIR && skinPresent)
|
||||
{
|
||||
hairsPresent = true;
|
||||
for (int j = 0; j < moveable.ObjectMeshes.size(); j++)
|
||||
|
||||
for (int j = 0; j< obj->nmeshes;j++)
|
||||
{
|
||||
RendererMesh *mesh = moveable.ObjectMeshes[j];
|
||||
for (int n = 0; n < NUM_BUCKETS; n++)
|
||||
RendererMesh* currentMesh = moveable.ObjectMeshes[j];
|
||||
RendererBone* currentBone = moveable.LinearizedBones[j];
|
||||
|
||||
for (int b1 = 0; b1 < NUM_BUCKETS; b1++)
|
||||
{
|
||||
m_numHairVertices += mesh->Buckets[n].Vertices.size();
|
||||
m_numHairIndices += mesh->Buckets[n].Indices.size();
|
||||
RendererBucket* currentBucket = ¤tMesh->Buckets[b1];
|
||||
|
||||
for (int v1 = 0; v1 < currentBucket->Vertices.size(); v1++)
|
||||
{
|
||||
RendererVertex* currentVertex = ¤tBucket->Vertices[v1];
|
||||
currentVertex->Bone = j + 1;
|
||||
|
||||
if (j == 0)
|
||||
{
|
||||
// Mesh 0 must be linked with head
|
||||
int parentVertices[] = { 37,39,40,38 };
|
||||
|
||||
RendererObject& skinObj = *m_moveableObjects[ID_LARA_SKIN];
|
||||
RendererMesh* parentMesh = skinObj.ObjectMeshes[LM_HEAD];
|
||||
RendererBone* parentBone = skinObj.LinearizedBones[LM_HEAD];
|
||||
|
||||
if (currentVertex->OriginalIndex < 4)
|
||||
{
|
||||
for (int b2 = 0; b2 < NUM_BUCKETS; b2++)
|
||||
{
|
||||
RendererBucket* parentBucket = &parentMesh->Buckets[b2];
|
||||
for (int v2 = 0; v2 < parentBucket->Vertices.size(); v2++)
|
||||
{
|
||||
RendererVertex* parentVertex = &parentBucket->Vertices[v2];
|
||||
|
||||
if (parentVertex->OriginalIndex == parentVertices[currentVertex->OriginalIndex])
|
||||
{
|
||||
currentVertex->Bone = 0;
|
||||
currentVertex->Position = parentVertex->Position;
|
||||
currentVertex->Normal = parentVertex->Normal;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Meshes > 0 must be linked with hair parent meshes
|
||||
RendererMesh* parentMesh = moveable.ObjectMeshes[j - 1];
|
||||
RendererBone* parentBone = moveable.LinearizedBones[j - 1];
|
||||
|
||||
m_hairVertices.clear();
|
||||
m_hairIndices.clear();
|
||||
for (int b2 = 0; b2 < NUM_BUCKETS; b2++)
|
||||
{
|
||||
RendererBucket* parentBucket = &parentMesh->Buckets[b2];
|
||||
for (int v2 = 0; v2 < parentBucket->Vertices.size(); v2++)
|
||||
{
|
||||
RendererVertex* parentVertex = &parentBucket->Vertices[v2];
|
||||
|
||||
RendererVertex vertex;
|
||||
for (int m = 0; m < m_numHairVertices * 2; m++)
|
||||
m_hairVertices.push_back(vertex);
|
||||
for (int m = 0; m < m_numHairIndices * 2; m++)
|
||||
m_hairIndices.push_back(0);
|
||||
int x1 = currentBucket->Vertices[v1].Position.x + currentBone->GlobalTranslation.x;
|
||||
int y1 = currentBucket->Vertices[v1].Position.y + currentBone->GlobalTranslation.y;
|
||||
int z1 = currentBucket->Vertices[v1].Position.z + currentBone->GlobalTranslation.z;
|
||||
|
||||
int x2 = parentBucket->Vertices[v2].Position.x + parentBone->GlobalTranslation.x;
|
||||
int y2 = parentBucket->Vertices[v2].Position.y + parentBone->GlobalTranslation.y;
|
||||
int z2 = parentBucket->Vertices[v2].Position.z + parentBone->GlobalTranslation.z;
|
||||
|
||||
if (abs(x1 - x2) < 2 && abs(y1 - y2) < 2 && abs(z1 - z2) < 2)
|
||||
{
|
||||
currentVertex->Bone = j;
|
||||
currentVertex->Position = parentVertex->Position;
|
||||
currentVertex->Normal = parentVertex->Normal;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -632,7 +690,7 @@ namespace T5M::Renderer
|
|||
|
||||
for (int i = 0; i < MoveablesIds.size(); i++)
|
||||
{
|
||||
ObjectInfo *obj = &Objects[MoveablesIds[i]];
|
||||
OBJECT_INFO *obj = &Objects[MoveablesIds[i]];
|
||||
|
||||
if (obj->nmeshes < 0)
|
||||
{
|
||||
|
|
|
@ -55,7 +55,7 @@ namespace T5M::Renderer
|
|||
view = Matrix::CreateLookAt(Vector3(0.0f, 0.0f, 2048.0f), Vector3(0.0f, 0.0f, 0.0f), Vector3(0.0f, -1.0f, 0.0f));
|
||||
projection = Matrix::CreateOrthographic(ScreenWidth, ScreenHeight, -1024.0f, 1024.0f);
|
||||
|
||||
ObjectInfo *obj = &Objects[objectNum];
|
||||
OBJECT_INFO *obj = &Objects[objectNum];
|
||||
RendererObject &moveableObj = *m_moveableObjects[objectNum];
|
||||
|
||||
if (obj->animIndex != -1)
|
||||
|
@ -414,7 +414,7 @@ namespace T5M::Renderer
|
|||
|
||||
if (gunshell->counter > 0)
|
||||
{
|
||||
ObjectInfo *obj = &Objects[gunshell->objectNumber];
|
||||
OBJECT_INFO *obj = &Objects[gunshell->objectNumber];
|
||||
RendererObject &moveableObj = *m_moveableObjects[gunshell->objectNumber];
|
||||
|
||||
Matrix translation = Matrix::CreateTranslation(gunshell->pos.xPos, gunshell->pos.yPos, gunshell->pos.zPos);
|
||||
|
@ -569,7 +569,7 @@ namespace T5M::Renderer
|
|||
Matrix rotation = Matrix::CreateRotationY(TO_RAD(ring->objects[objectIndex].rotation + 16384 + g_Inventory.GetInventoryObject(inventoryObject)->rotY));
|
||||
Matrix transform = (scale * rotation) * translation;
|
||||
|
||||
ObjectInfo *obj = &Objects[objectNumber];
|
||||
OBJECT_INFO *obj = &Objects[objectNumber];
|
||||
if (!m_moveableObjects[objectNumber].has_value())
|
||||
continue;
|
||||
RendererObject &moveableObj = *m_moveableObjects[objectNumber];
|
||||
|
@ -1389,7 +1389,7 @@ namespace T5M::Renderer
|
|||
|
||||
if (Objects[ID_SPIDERS_EMITTER].loaded)
|
||||
{
|
||||
ObjectInfo* obj = &Objects[ID_SPIDERS_EMITTER];
|
||||
OBJECT_INFO* obj = &Objects[ID_SPIDERS_EMITTER];
|
||||
RendererObject* moveableObj = m_moveableObjects[ID_SPIDERS_EMITTER].get();
|
||||
short* meshPtr = Meshes[Objects[ID_SPIDERS_EMITTER].meshIndex + ((Wibble >> 2) & 2)];
|
||||
RendererMesh* mesh = m_meshPointersToMesh[meshPtr];
|
||||
|
@ -1462,7 +1462,7 @@ namespace T5M::Renderer
|
|||
|
||||
if (Objects[ID_RATS_EMITTER].loaded)
|
||||
{
|
||||
ObjectInfo *obj = &Objects[ID_RATS_EMITTER];
|
||||
OBJECT_INFO *obj = &Objects[ID_RATS_EMITTER];
|
||||
RendererObject &moveableObj = *m_moveableObjects[ID_RATS_EMITTER];
|
||||
|
||||
for (int m = 0; m < 32; m++)
|
||||
|
@ -1513,7 +1513,7 @@ namespace T5M::Renderer
|
|||
|
||||
if (Objects[ID_BATS_EMITTER].loaded)
|
||||
{
|
||||
ObjectInfo *obj = &Objects[ID_BATS_EMITTER];
|
||||
OBJECT_INFO *obj = &Objects[ID_BATS_EMITTER];
|
||||
RendererObject& moveableObj = *m_moveableObjects[ID_BATS_EMITTER];
|
||||
RendererMesh *mesh = getMesh(Objects[ID_BATS_EMITTER].meshIndex + (-GlobalCounter & 3));
|
||||
|
||||
|
@ -2189,7 +2189,7 @@ namespace T5M::Renderer
|
|||
}
|
||||
RendererRoom &const room = m_rooms[item->Item->roomNumber];
|
||||
RendererObject &moveableObj = *m_moveableObjects[item->Item->objectNumber];
|
||||
ObjectInfo *obj = &Objects[item->Item->objectNumber];
|
||||
OBJECT_INFO *obj = &Objects[item->Item->objectNumber];
|
||||
|
||||
m_stItem.World = item->World;
|
||||
m_stItem.Position = Vector4(item->Item->pos.xPos, item->Item->pos.yPos, item->Item->pos.zPos, 1.0f);
|
||||
|
|
|
@ -490,7 +490,7 @@ namespace T5M::Renderer {
|
|||
RendererObject& laraObj = *m_moveableObjects[ID_LARA];
|
||||
RendererObject& laraSkin = *m_moveableObjects[ID_LARA_SKIN];
|
||||
|
||||
ObjectInfo* obj = &Objects[0];
|
||||
OBJECT_INFO* obj = &Objects[0];
|
||||
RendererRoom& const room = m_rooms[LaraItem->roomNumber];
|
||||
RendererItem* item = &m_items[Lara.itemNumber];
|
||||
|
||||
|
@ -538,7 +538,7 @@ namespace T5M::Renderer {
|
|||
break;
|
||||
}
|
||||
|
||||
ObjectInfo* flashObj = &Objects[ID_GUN_FLASH];
|
||||
OBJECT_INFO* flashObj = &Objects[ID_GUN_FLASH];
|
||||
RendererObject& flashMoveable = *m_moveableObjects[ID_GUN_FLASH];
|
||||
RendererMesh* flashMesh = flashMoveable.ObjectMeshes[0];
|
||||
|
||||
|
@ -594,7 +594,7 @@ namespace T5M::Renderer {
|
|||
RendererItem* item = m_itemsToDraw[i];
|
||||
|
||||
// Does the item need gunflash?
|
||||
ObjectInfo* obj = &Objects[item->Item->objectNumber];
|
||||
OBJECT_INFO* obj = &Objects[item->Item->objectNumber];
|
||||
if (obj->biteOffset == -1 || !item->Item->firedWeapon)
|
||||
continue;
|
||||
|
||||
|
@ -931,7 +931,7 @@ namespace T5M::Renderer {
|
|||
for (int i = 0; i < m_effectsToDraw.size(); i++) {
|
||||
RendererEffect* effect = m_effectsToDraw[i];
|
||||
RendererRoom& const room = m_rooms[effect->Effect->roomNumber];
|
||||
ObjectInfo* obj = &Objects[effect->Effect->objectNumber];
|
||||
OBJECT_INFO* obj = &Objects[effect->Effect->objectNumber];
|
||||
|
||||
if (obj->drawRoutine && obj->loaded)
|
||||
drawEffect(effect, transparent);
|
||||
|
|
|
@ -450,7 +450,7 @@ namespace T5M::Renderer
|
|||
if (fx->objectNumber < 0)
|
||||
continue;
|
||||
|
||||
ObjectInfo *obj = &Objects[fx->objectNumber];
|
||||
OBJECT_INFO *obj = &Objects[fx->objectNumber];
|
||||
|
||||
RendererEffect *newEffect = &m_effects[fxNum];
|
||||
|
||||
|
|
|
@ -220,9 +220,9 @@ bool Renderer11::Initialise(int w, int h, int refreshRate, bool windowed, HWND h
|
|||
}
|
||||
|
||||
D3D11_BLEND_DESC blendStateDesc{};
|
||||
blendStateDesc.AlphaToCoverageEnable = FALSE;
|
||||
blendStateDesc.IndependentBlendEnable = FALSE;
|
||||
blendStateDesc.RenderTarget[0].BlendEnable = TRUE;
|
||||
blendStateDesc.AlphaToCoverageEnable = false;
|
||||
blendStateDesc.IndependentBlendEnable = false;
|
||||
blendStateDesc.RenderTarget[0].BlendEnable = true;
|
||||
blendStateDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA;
|
||||
blendStateDesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA;
|
||||
blendStateDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_REV_SUBTRACT;
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include "sphere.h"
|
||||
#include "level.h"
|
||||
#include "GameFlowScript.h"
|
||||
#include <Specific\setup.h>
|
||||
using namespace T5M::Renderer;
|
||||
|
||||
extern GameFlow *g_GameFlow;
|
||||
|
@ -135,137 +136,6 @@ void Renderer11::UpdateLaraAnimations(bool force)
|
|||
for (int m = 0; m < 15; m++)
|
||||
laraObj.AnimationTransforms[m] = item->AnimationTransforms[m];
|
||||
|
||||
// At this point, Lara's matrices are ready. Now let's do ponytails...
|
||||
// TODO: disabled for now
|
||||
|
||||
if (m_moveableObjects[ID_LARA_HAIR].has_value())
|
||||
{
|
||||
RendererObject& hairsObj = *m_moveableObjects[ID_LARA_HAIR];
|
||||
|
||||
lastMatrix = Matrix::Identity;
|
||||
identity = Matrix::Identity;
|
||||
|
||||
Vector3 parentVertices[6][4];
|
||||
Matrix headMatrix;
|
||||
|
||||
RendererObject& objSkin = *m_moveableObjects[ID_LARA_SKIN];
|
||||
RendererObject& objLara = *m_moveableObjects[ID_LARA];
|
||||
RendererMesh* parentMesh = objSkin.ObjectMeshes[LM_HEAD];
|
||||
RendererBone* parentBone = objSkin.LinearizedBones[LM_HEAD];
|
||||
|
||||
world = objLara.AnimationTransforms[LM_HEAD] * m_LaraWorldMatrix;
|
||||
|
||||
int lastVertex = 0;
|
||||
int lastIndex = 0;
|
||||
|
||||
GameScriptLevel* level = g_GameFlow->GetLevel(CurrentLevel);
|
||||
|
||||
for (int p = 0; p < ((level->LaraType == LARA_YOUNG) ? 2 : 1); p++)
|
||||
{
|
||||
// We can't use hardware skinning here, however hairs have just a few vertices so
|
||||
// it's not so bad doing skinning in software
|
||||
if (level->LaraType == LARA_YOUNG)
|
||||
{
|
||||
if (p == 1)
|
||||
{
|
||||
parentVertices[0][0] = Vector3::Transform(parentMesh->Positions[68], world);
|
||||
parentVertices[0][1] = Vector3::Transform(parentMesh->Positions[69], world);
|
||||
parentVertices[0][2] = Vector3::Transform(parentMesh->Positions[70], world);
|
||||
parentVertices[0][3] = Vector3::Transform(parentMesh->Positions[71], world);
|
||||
}
|
||||
else
|
||||
{
|
||||
parentVertices[0][0] = Vector3::Transform(parentMesh->Positions[78], world);
|
||||
parentVertices[0][1] = Vector3::Transform(parentMesh->Positions[78], world);
|
||||
parentVertices[0][2] = Vector3::Transform(parentMesh->Positions[77], world);
|
||||
parentVertices[0][3] = Vector3::Transform(parentMesh->Positions[76], world);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
parentVertices[0][0] = Vector3::Transform(parentMesh->Positions[37], world);
|
||||
parentVertices[0][1] = Vector3::Transform(parentMesh->Positions[39], world);
|
||||
parentVertices[0][2] = Vector3::Transform(parentMesh->Positions[40], world);
|
||||
parentVertices[0][3] = Vector3::Transform(parentMesh->Positions[38], world);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
RendererMesh* mesh = hairsObj.ObjectMeshes[i];
|
||||
RendererBucket* bucket = &mesh->Buckets[RENDERER_BUCKET_SOLID];
|
||||
|
||||
translation = Matrix::CreateTranslation(Hairs[p][i + 1].pos.xPos, Hairs[p][i + 1].pos.yPos, Hairs[p][i + 1].pos.zPos);
|
||||
rotation = Matrix::CreateFromYawPitchRoll(TO_RAD(Hairs[p][i + 1].pos.yRot), TO_RAD(Hairs[p][i + 1].pos.xRot), 0);
|
||||
m_hairsMatrices[6 * p + i] = rotation * translation;
|
||||
|
||||
int baseVertex = lastVertex;
|
||||
|
||||
for (int j = 0; j < bucket->Vertices.size(); j++)
|
||||
{
|
||||
int oldVertexIndex = (int)bucket->Vertices[j].Bone;
|
||||
if (oldVertexIndex < 4)
|
||||
{
|
||||
m_hairVertices[lastVertex].Position.x = parentVertices[i][oldVertexIndex].x;
|
||||
m_hairVertices[lastVertex].Position.y = parentVertices[i][oldVertexIndex].y;
|
||||
m_hairVertices[lastVertex].Position.z = parentVertices[i][oldVertexIndex].z;
|
||||
m_hairVertices[lastVertex].UV.x = bucket->Vertices[j].UV.x;
|
||||
m_hairVertices[lastVertex].UV.y = bucket->Vertices[j].UV.y;
|
||||
|
||||
Vector3 n = Vector3(bucket->Vertices[j].Normal.x, bucket->Vertices[j].Normal.y, bucket->Vertices[j].Normal.z);
|
||||
n.Normalize();
|
||||
n = Vector3::TransformNormal(n, m_hairsMatrices[6 * p + i]);
|
||||
n.Normalize();
|
||||
|
||||
m_hairVertices[lastVertex].Normal.x = n.x;
|
||||
m_hairVertices[lastVertex].Normal.y = n.y;
|
||||
m_hairVertices[lastVertex].Normal.z = n.z;
|
||||
|
||||
m_hairVertices[lastVertex].Color = Vector4::One * 0.5f;
|
||||
|
||||
lastVertex++;
|
||||
}
|
||||
else
|
||||
{
|
||||
Vector3 in = Vector3(bucket->Vertices[j].Position.x, bucket->Vertices[j].Position.y, bucket->Vertices[j].Position.z);
|
||||
Vector3 out = Vector3::Transform(in, m_hairsMatrices[6 * p + i]);
|
||||
|
||||
if (i < 5)
|
||||
{
|
||||
parentVertices[i + 1][oldVertexIndex - 4].x = out.x;
|
||||
parentVertices[i + 1][oldVertexIndex - 4].y = out.y;
|
||||
parentVertices[i + 1][oldVertexIndex - 4].z = out.z;
|
||||
}
|
||||
|
||||
m_hairVertices[lastVertex].Position.x = out.x;
|
||||
m_hairVertices[lastVertex].Position.y = out.y;
|
||||
m_hairVertices[lastVertex].Position.z = out.z;
|
||||
m_hairVertices[lastVertex].UV.x = bucket->Vertices[j].UV.x;
|
||||
m_hairVertices[lastVertex].UV.y = bucket->Vertices[j].UV.y;
|
||||
|
||||
Vector3 n = Vector3(bucket->Vertices[j].Normal.x, bucket->Vertices[j].Normal.y, bucket->Vertices[j].Normal.z);
|
||||
n.Normalize();
|
||||
n = Vector3::TransformNormal(n, m_hairsMatrices[6 * p + i]);
|
||||
n.Normalize();
|
||||
|
||||
m_hairVertices[lastVertex].Normal.x = n.x;
|
||||
m_hairVertices[lastVertex].Normal.y = n.y;
|
||||
m_hairVertices[lastVertex].Normal.z = n.z;
|
||||
|
||||
m_hairVertices[lastVertex].Color = Vector4::One * 0.5f;
|
||||
|
||||
lastVertex++;
|
||||
}
|
||||
}
|
||||
|
||||
for (int j = 0; j < bucket->Indices.size(); j++)
|
||||
{
|
||||
m_hairIndices[lastIndex] = baseVertex + bucket->Indices[j];
|
||||
lastIndex++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_items[Lara.itemNumber].DoneAnimations = true;
|
||||
}
|
||||
|
||||
|
@ -371,19 +241,21 @@ bool Renderer11::drawLara(bool transparent, bool shadowMap)
|
|||
}
|
||||
}
|
||||
|
||||
if (!transparent)
|
||||
if (!transparent && Objects[ID_LARA_HAIR].loaded)
|
||||
{
|
||||
/*RendererObject& hairsObj = *m_moveableObjects[ID_LARA_HAIR];
|
||||
RendererObject& hairsObj = *m_moveableObjects[ID_LARA_HAIR];
|
||||
|
||||
Matrix matrices[8];
|
||||
matrices[0] = (laraObj.AnimationTransforms.data())[LM_HEAD];
|
||||
// First matrix is Lara's head matrix, then all 6 hairs matrices. Bones are adjusted at load time for accounting this.
|
||||
m_stItem.World = Matrix::Identity;
|
||||
Matrix matrices[7];
|
||||
matrices[0] = laraObj.AnimationTransforms[LM_HEAD] * m_LaraWorldMatrix;
|
||||
for (int i = 0; i < hairsObj.BindPoseTransforms.size(); i++)
|
||||
{
|
||||
HAIR_STRUCT* hairs = &Hairs[0][i];
|
||||
Matrix world = Matrix::CreateFromYawPitchRoll(TO_RAD(hairs->pos.yRot), TO_RAD(hairs->pos.xRot), TO_RAD(hairs->pos.zRot))* Matrix::CreateTranslation(hairs->pos.xPos-LaraItem->pos.xPos, hairs->pos.yPos - LaraItem->pos.yPos, hairs->pos.zPos - LaraItem->pos.zPos);
|
||||
matrices[i] = (laraObj.AnimationTransforms.data())[LM_HEAD] * world;
|
||||
Matrix world = Matrix::CreateFromYawPitchRoll(TO_RAD(hairs->pos.yRot), TO_RAD(hairs->pos.xRot), 0) * Matrix::CreateTranslation(hairs->pos.xPos, hairs->pos.yPos, hairs->pos.zPos);
|
||||
matrices[i + 1] = world;
|
||||
}
|
||||
memcpy(m_stItem.BonesMatrices, matrices, sizeof(Matrix) * 8);
|
||||
memcpy(m_stItem.BonesMatrices, matrices, sizeof(Matrix) * 7);
|
||||
updateConstantBuffer<CItemBuffer>(m_cbItem, m_stItem);
|
||||
m_context->VSSetConstantBuffers(1, 1, &m_cbItem);
|
||||
m_context->PSSetConstantBuffers(1, 1, &m_cbItem);
|
||||
|
@ -403,37 +275,6 @@ bool Renderer11::drawLara(bool transparent, bool shadowMap)
|
|||
m_context->DrawIndexed(bucket->Indices.size(), bucket->StartIndex, 0);
|
||||
m_numDrawCalls++;
|
||||
}
|
||||
}*/
|
||||
|
||||
/*for (int k = 0; k < laraSkin->ObjectMeshes.size(); k++)
|
||||
{
|
||||
RendererMesh* mesh = laraSkin.ObjectMeshes[k];
|
||||
|
||||
for (int j = 0; j < NUM_BUCKETS; j++)
|
||||
{
|
||||
RendererBucket* bucket = &mesh->Buckets[j];
|
||||
|
||||
if (bucket->Vertices.size() == 0)
|
||||
continue;
|
||||
|
||||
// Draw vertices
|
||||
m_context->DrawIndexed(bucket->Indices.size(), bucket->StartIndex, 0);
|
||||
m_numDrawCalls++;
|
||||
}
|
||||
}*/
|
||||
|
||||
// Hairs are pre-transformed
|
||||
Matrix matrices[8] = { Matrix::Identity, Matrix::Identity, Matrix::Identity, Matrix::Identity,
|
||||
Matrix::Identity, Matrix::Identity, Matrix::Identity, Matrix::Identity };
|
||||
memcpy(m_stItem.BonesMatrices, matrices, sizeof(Matrix) * 8);
|
||||
m_stItem.World = Matrix::Identity;
|
||||
updateConstantBuffer<CItemBuffer>(m_cbItem,m_stItem);
|
||||
|
||||
if (m_moveableObjects[ID_LARA_HAIR].has_value())
|
||||
{
|
||||
m_primitiveBatch->Begin();
|
||||
m_primitiveBatch->DrawIndexed(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST, (const uint16_t*)m_hairIndices.data(), m_numHairIndices, m_hairVertices.data(), m_numHairVertices);
|
||||
m_primitiveBatch->End();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -195,7 +195,7 @@ int LoadItems()
|
|||
|
||||
void LoadObjects()
|
||||
{
|
||||
memset(Objects, 0, sizeof(ObjectInfo) * ID_NUMBER_OBJECTS);
|
||||
memset(Objects, 0, sizeof(OBJECT_INFO) * ID_NUMBER_OBJECTS);
|
||||
memset(StaticObjects, 0, sizeof(StaticInfo) * MAX_STATICS);
|
||||
|
||||
int numMeshes = ReadInt32();
|
||||
|
|
|
@ -36,7 +36,7 @@ extern byte Sequences[3];
|
|||
extern byte CurrentSequence;
|
||||
extern int NumRPickups;
|
||||
|
||||
ObjectInfo Objects[ID_NUMBER_OBJECTS];
|
||||
OBJECT_INFO Objects[ID_NUMBER_OBJECTS];
|
||||
StaticInfo StaticObjects[MAX_STATICS];
|
||||
|
||||
void InitialiseGameFlags()
|
||||
|
@ -52,7 +52,7 @@ void InitialiseGameFlags()
|
|||
|
||||
void ObjectObjects()
|
||||
{
|
||||
ObjectInfo* obj;
|
||||
OBJECT_INFO* obj;
|
||||
|
||||
obj = &Objects[ID_CAMERA_TARGET];
|
||||
if (obj->loaded)
|
||||
|
@ -617,7 +617,7 @@ void ObjectObjects()
|
|||
|
||||
void TrapObjects()
|
||||
{
|
||||
ObjectInfo* obj;
|
||||
OBJECT_INFO* obj;
|
||||
obj = &Objects[ID_KILL_ALL_TRIGGERS];
|
||||
if (obj->loaded)
|
||||
{
|
||||
|
@ -795,7 +795,7 @@ void CustomObjects()
|
|||
|
||||
void InitialiseObjects()
|
||||
{
|
||||
ObjectInfo* obj;
|
||||
OBJECT_INFO* obj;
|
||||
|
||||
for (int i = 0; i < ID_NUMBER_OBJECTS; i++)
|
||||
{
|
||||
|
|
|
@ -12,7 +12,7 @@ typedef enum HitEffectEnum
|
|||
MAX_HIT_EFFECT
|
||||
};
|
||||
|
||||
typedef struct ObjectInfo
|
||||
typedef struct OBJECT_INFO
|
||||
{
|
||||
short nmeshes;
|
||||
short meshIndex;
|
||||
|
@ -75,7 +75,7 @@ typedef struct StaticInfo
|
|||
constexpr auto GRAVITY = 6;
|
||||
constexpr auto SWAMP_GRAVITY = 2;
|
||||
|
||||
extern ObjectInfo Objects[ID_NUMBER_OBJECTS];
|
||||
extern OBJECT_INFO Objects[ID_NUMBER_OBJECTS];
|
||||
extern StaticInfo StaticObjects[MAX_STATICS];
|
||||
|
||||
void InitialiseGameFlags();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue