mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-05-02 09:47:58 +03:00
Refactor lara_fire.cpp
This commit is contained in:
parent
f30ae8839e
commit
a036810db9
12 changed files with 334 additions and 280 deletions
|
@ -842,7 +842,7 @@ void LaraAboveWater(ITEM_INFO* item, COLL_INFO* coll)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// Boats are processed like normal items in loop
|
// Boats are processed like normal items in loop
|
||||||
LaraGun();
|
LaraGun(item);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -882,7 +882,7 @@ void LaraAboveWater(ITEM_INFO* item, COLL_INFO* coll)
|
||||||
// TrInput &= ~IN_ACTION;
|
// TrInput &= ~IN_ACTION;
|
||||||
|
|
||||||
// Handle weapons
|
// Handle weapons
|
||||||
LaraGun();
|
LaraGun(item);
|
||||||
|
|
||||||
// Test for flags & triggers
|
// Test for flags & triggers
|
||||||
ProcessSectorFlags(item);
|
ProcessSectorFlags(item);
|
||||||
|
@ -985,7 +985,7 @@ void LaraUnderWater(ITEM_INFO* item, COLL_INFO* coll)
|
||||||
|
|
||||||
UpdateItemRoom(item, 0);
|
UpdateItemRoom(item, 0);
|
||||||
|
|
||||||
LaraGun();
|
LaraGun(item);
|
||||||
|
|
||||||
ProcessSectorFlags(item);
|
ProcessSectorFlags(item);
|
||||||
TestTriggers(item, false);
|
TestTriggers(item, false);
|
||||||
|
@ -1045,7 +1045,7 @@ void LaraSurface(ITEM_INFO* item, COLL_INFO* coll)
|
||||||
|
|
||||||
UpdateItemRoom(item, 100);
|
UpdateItemRoom(item, 100);
|
||||||
|
|
||||||
LaraGun();
|
LaraGun(item);
|
||||||
|
|
||||||
ProcessSectorFlags(item);
|
ProcessSectorFlags(item);
|
||||||
TestTriggers(item, false);
|
TestTriggers(item, false);
|
||||||
|
|
|
@ -287,17 +287,18 @@ GAME_OBJECT_ID WeaponObject(int weaponType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AimWeapon(WEAPON_INFO* winfo, LARA_ARM* arm)
|
void AimWeapon(ITEM_INFO* lara, WEAPON_INFO* weaponInfo, LARA_ARM* arm)
|
||||||
{
|
{
|
||||||
|
LaraInfo*& laraInfo = lara->data;
|
||||||
short rotY, rotX, speed, x, y;
|
short rotY, rotX, speed, x, y;
|
||||||
|
|
||||||
speed = winfo->aimSpeed;
|
speed = weaponInfo->aimSpeed;
|
||||||
|
|
||||||
// Have target lock, so get XY angles for arms.
|
// Have target lock, so get XY angles for arms.
|
||||||
if (arm->lock)
|
if (arm->lock)
|
||||||
{
|
{
|
||||||
y = Lara.targetAngles[0];
|
y = laraInfo->targetAngles[0];
|
||||||
x = Lara.targetAngles[1];
|
x = laraInfo->targetAngles[1];
|
||||||
}
|
}
|
||||||
// No target lock, so aim straight.
|
// No target lock, so aim straight.
|
||||||
else
|
else
|
||||||
|
@ -308,7 +309,7 @@ void AimWeapon(WEAPON_INFO* winfo, LARA_ARM* arm)
|
||||||
|
|
||||||
// Rotate arms on y axis toward target.
|
// Rotate arms on y axis toward target.
|
||||||
rotY = arm->yRot;
|
rotY = arm->yRot;
|
||||||
if ((rotY >= y - speed) && (rotY <= y + speed))
|
if (rotY >= (y - speed) && rotY <= (y + speed))
|
||||||
rotY = y;
|
rotY = y;
|
||||||
else if (rotY < y)
|
else if (rotY < y)
|
||||||
rotY += speed;
|
rotY += speed;
|
||||||
|
@ -318,7 +319,7 @@ void AimWeapon(WEAPON_INFO* winfo, LARA_ARM* arm)
|
||||||
|
|
||||||
// Rotate arms on x axis toward target.
|
// Rotate arms on x axis toward target.
|
||||||
rotX = arm->xRot;
|
rotX = arm->xRot;
|
||||||
if ((rotX >= x - speed) && (rotX <= x + speed))
|
if (rotX >= (x - speed) && rotX <= (x + speed))
|
||||||
rotX = x;
|
rotX = x;
|
||||||
else if (rotX < x)
|
else if (rotX < x)
|
||||||
rotX += speed;
|
rotX += speed;
|
||||||
|
@ -326,7 +327,7 @@ void AimWeapon(WEAPON_INFO* winfo, LARA_ARM* arm)
|
||||||
rotX -= speed;
|
rotX -= speed;
|
||||||
arm->xRot = rotX;
|
arm->xRot = rotX;
|
||||||
|
|
||||||
// TODO: set arm rotations to inherit rotations of parent Bones. -Sezz
|
// TODO: Set arms to inherit rotations of parent bones.
|
||||||
arm->zRot = 0;
|
arm->zRot = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -337,126 +338,143 @@ void SmashItem(short itemNum)
|
||||||
SmashObject(itemNum);
|
SmashObject(itemNum);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LaraGun()
|
void LaraGun(ITEM_INFO* lara)
|
||||||
{
|
{
|
||||||
if (Lara.leftArm.flash_gun > 0)
|
LaraInfo*& laraInfo = lara->data;
|
||||||
--Lara.leftArm.flash_gun;
|
|
||||||
if (Lara.rightArm.flash_gun > 0)
|
|
||||||
--Lara.rightArm.flash_gun;
|
|
||||||
|
|
||||||
if (Lara.gunType == WEAPON_TORCH)
|
if (laraInfo->leftArm.flash_gun > 0)
|
||||||
|
--laraInfo->leftArm.flash_gun;
|
||||||
|
if (laraInfo->rightArm.flash_gun > 0)
|
||||||
|
--laraInfo->rightArm.flash_gun;
|
||||||
|
|
||||||
|
if (laraInfo->gunType == WEAPON_TORCH)
|
||||||
{
|
{
|
||||||
DoFlameTorch();
|
DoFlameTorch();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LaraItem->hitPoints <= 0)
|
if (lara->hitPoints <= 0)
|
||||||
{
|
laraInfo->gunStatus = LG_NO_ARMS;
|
||||||
Lara.gunStatus = LG_NO_ARMS;
|
else if (laraInfo->gunStatus == LG_NO_ARMS)
|
||||||
}
|
|
||||||
else if (Lara.gunStatus == LG_NO_ARMS)
|
|
||||||
{
|
{
|
||||||
|
// Draw weapon.
|
||||||
if (TrInput & IN_DRAW)
|
if (TrInput & IN_DRAW)
|
||||||
|
laraInfo->requestGunType = laraInfo->lastGunType;
|
||||||
|
// Draw flare.
|
||||||
|
else if (TrInput & IN_FLARE &&
|
||||||
|
(g_GameFlow->GetLevel(CurrentLevel)->LaraType != LaraType::Young))
|
||||||
{
|
{
|
||||||
Lara.requestGunType = Lara.lastGunType;
|
if (lara->currentAnimState == LS_CROUCH_IDLE &&
|
||||||
}
|
lara->animNumber != LA_CROUCH_IDLE)
|
||||||
else if (TrInput & IN_FLARE && (g_GameFlow->GetLevel(CurrentLevel)->LaraType != LaraType::Young))
|
{
|
||||||
{
|
|
||||||
if (LaraItem->currentAnimState == LS_CROUCH_IDLE && LaraItem->animNumber != LA_CROUCH_IDLE)
|
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (Lara.gunType == WEAPON_FLARE)
|
if (laraInfo->gunType == WEAPON_FLARE)
|
||||||
{
|
{
|
||||||
// if (!Lara.leftArm.frameNumber) //NO
|
// if (!laraInfo->leftArm.frameNumber) //NO
|
||||||
{
|
{
|
||||||
Lara.gunStatus = LG_UNDRAW_GUNS;
|
laraInfo->gunStatus = LG_UNDRAW_GUNS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (Lara.NumFlares)
|
else if (laraInfo->NumFlares)
|
||||||
{
|
{
|
||||||
if (Lara.NumFlares != -1)
|
if (laraInfo->NumFlares != -1)
|
||||||
Lara.NumFlares--;
|
laraInfo->NumFlares--;
|
||||||
Lara.requestGunType = WEAPON_FLARE;
|
|
||||||
|
laraInfo->requestGunType = WEAPON_FLARE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((Lara.requestGunType != Lara.gunType) || (TrInput & IN_DRAW))
|
if (TrInput & IN_DRAW ||
|
||||||
|
laraInfo->requestGunType != laraInfo->gunType)
|
||||||
{
|
{
|
||||||
if ((LaraItem->currentAnimState == LS_CROUCH_IDLE
|
if ((lara->currentAnimState == LS_CROUCH_IDLE ||
|
||||||
|| LaraItem->currentAnimState == LS_CROUCH_TURN_LEFT
|
lara->currentAnimState == LS_CROUCH_TURN_LEFT ||
|
||||||
|| LaraItem->currentAnimState == LS_CROUCH_TURN_RIGHT)
|
lara->currentAnimState == LS_CROUCH_TURN_RIGHT) &&
|
||||||
&& (Lara.requestGunType == WEAPON_HK
|
(laraInfo->requestGunType == WEAPON_HK ||
|
||||||
|| Lara.requestGunType == WEAPON_CROSSBOW
|
laraInfo->requestGunType == WEAPON_CROSSBOW ||
|
||||||
|| Lara.requestGunType == WEAPON_SHOTGUN
|
laraInfo->requestGunType == WEAPON_SHOTGUN ||
|
||||||
|| Lara.requestGunType == WEAPON_HARPOON_GUN))
|
laraInfo->requestGunType == WEAPON_HARPOON_GUN))
|
||||||
{
|
{
|
||||||
if (Lara.gunType == WEAPON_FLARE)
|
if (laraInfo->gunType == WEAPON_FLARE)
|
||||||
Lara.requestGunType = WEAPON_FLARE;
|
laraInfo->requestGunType = WEAPON_FLARE;
|
||||||
}
|
}
|
||||||
else if (Lara.requestGunType == WEAPON_FLARE
|
else if (laraInfo->requestGunType == WEAPON_FLARE ||
|
||||||
|| (Lara.Vehicle == NO_ITEM
|
(laraInfo->Vehicle == NO_ITEM &&
|
||||||
&& (Lara.requestGunType == WEAPON_HARPOON_GUN
|
(laraInfo->requestGunType == WEAPON_HARPOON_GUN ||
|
||||||
|| Lara.waterStatus == LW_ABOVE_WATER
|
laraInfo->waterStatus == LW_ABOVE_WATER ||
|
||||||
|| (Lara.waterStatus == LW_WADE
|
(laraInfo->waterStatus == LW_WADE &&
|
||||||
&& Lara.waterSurfaceDist > -Weapons[Lara.gunType].gunHeight))))
|
laraInfo->waterSurfaceDist > -Weapons[laraInfo->gunType].gunHeight))))
|
||||||
{
|
{
|
||||||
if (Lara.gunType == WEAPON_FLARE)
|
if (laraInfo->gunType == WEAPON_FLARE)
|
||||||
{
|
{
|
||||||
CreateFlare(LaraItem, ID_FLARE_ITEM, 0);
|
CreateFlare(lara, ID_FLARE_ITEM, 0);
|
||||||
undraw_flare_meshes(LaraItem);
|
undraw_flare_meshes(lara);
|
||||||
Lara.flareControlLeft = false;
|
laraInfo->flareControlLeft = false;
|
||||||
Lara.flareAge = 0;
|
laraInfo->flareAge = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Lara.gunType = Lara.requestGunType;
|
laraInfo->gunType = laraInfo->requestGunType;
|
||||||
InitialiseNewWeapon();
|
InitialiseNewWeapon(lara);
|
||||||
Lara.rightArm.frameNumber = 0;
|
laraInfo->rightArm.frameNumber = 0;
|
||||||
Lara.leftArm.frameNumber = 0;
|
laraInfo->leftArm.frameNumber = 0;
|
||||||
Lara.gunStatus = LG_DRAW_GUNS;
|
laraInfo->gunStatus = LG_DRAW_GUNS;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Lara.lastGunType = Lara.requestGunType;
|
laraInfo->lastGunType = laraInfo->requestGunType;
|
||||||
if (Lara.gunType != WEAPON_FLARE)
|
|
||||||
Lara.gunType = Lara.requestGunType;
|
if (laraInfo->gunType != WEAPON_FLARE)
|
||||||
|
laraInfo->gunType = laraInfo->requestGunType;
|
||||||
else
|
else
|
||||||
Lara.requestGunType = WEAPON_FLARE;
|
laraInfo->requestGunType = WEAPON_FLARE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (Lara.gunStatus == LG_READY)
|
else if (laraInfo->gunStatus == LG_READY)
|
||||||
{
|
{
|
||||||
if ((TrInput & IN_DRAW)
|
if (TrInput & IN_DRAW ||
|
||||||
|| Lara.requestGunType != Lara.gunType)
|
laraInfo->requestGunType != laraInfo->gunType)
|
||||||
Lara.gunStatus = LG_UNDRAW_GUNS;
|
{
|
||||||
else if (Lara.gunType != WEAPON_HARPOON_GUN
|
laraInfo->gunStatus = LG_UNDRAW_GUNS;
|
||||||
&& Lara.waterStatus != LW_ABOVE_WATER
|
}
|
||||||
&& (Lara.waterStatus != LW_WADE
|
else if (laraInfo->gunType != WEAPON_HARPOON_GUN &&
|
||||||
|| Lara.waterSurfaceDist < -Weapons[Lara.gunType].gunHeight))
|
laraInfo->waterStatus != LW_ABOVE_WATER &&
|
||||||
Lara.gunStatus = LG_UNDRAW_GUNS;
|
(laraInfo->waterStatus != LW_WADE ||
|
||||||
|
laraInfo->waterSurfaceDist < -Weapons[laraInfo->gunType].gunHeight))
|
||||||
|
{
|
||||||
|
laraInfo->gunStatus = LG_UNDRAW_GUNS;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (Lara.gunStatus == LG_HANDS_BUSY
|
else if (TrInput & IN_FLARE &&
|
||||||
&& (TrInput & IN_FLARE)
|
laraInfo->gunStatus == LG_HANDS_BUSY &&
|
||||||
&& LaraItem->currentAnimState == LS_CRAWL_IDLE
|
lara->currentAnimState == LS_CRAWL_IDLE &&
|
||||||
&& LaraItem->animNumber == LA_CRAWL_IDLE)
|
lara->animNumber == LA_CRAWL_IDLE)
|
||||||
{
|
{
|
||||||
Lara.requestGunType = WEAPON_FLARE;
|
laraInfo->requestGunType = WEAPON_FLARE;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (Lara.gunStatus)
|
switch (laraInfo->gunStatus)
|
||||||
{
|
{
|
||||||
case LG_DRAW_GUNS:
|
case LG_DRAW_GUNS:
|
||||||
if (Lara.gunType != WEAPON_FLARE && Lara.gunType != WEAPON_NONE)
|
if (laraInfo->gunType != WEAPON_FLARE &&
|
||||||
Lara.lastGunType = Lara.gunType;
|
laraInfo->gunType != WEAPON_NONE)
|
||||||
|
{
|
||||||
|
laraInfo->lastGunType = laraInfo->gunType;
|
||||||
|
}
|
||||||
|
|
||||||
switch (Lara.gunType)
|
switch (laraInfo->gunType)
|
||||||
{
|
{
|
||||||
case WEAPON_PISTOLS:
|
case WEAPON_PISTOLS:
|
||||||
case WEAPON_REVOLVER:
|
case WEAPON_REVOLVER:
|
||||||
case WEAPON_UZI:
|
case WEAPON_UZI:
|
||||||
if (Camera.type != CAMERA_TYPE::LOOK_CAMERA && Camera.type != CAMERA_TYPE::HEAVY_CAMERA)
|
if (Camera.type != CAMERA_TYPE::LOOK_CAMERA && Camera.type != CAMERA_TYPE::HEAVY_CAMERA)
|
||||||
Camera.type = CAMERA_TYPE::COMBAT_CAMERA;
|
Camera.type = CAMERA_TYPE::COMBAT_CAMERA;
|
||||||
draw_pistols(Lara.gunType);
|
|
||||||
|
draw_pistols(laraInfo->gunType);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WEAPON_SHOTGUN:
|
case WEAPON_SHOTGUN:
|
||||||
|
@ -467,32 +485,39 @@ void LaraGun()
|
||||||
case WEAPON_HARPOON_GUN:
|
case WEAPON_HARPOON_GUN:
|
||||||
if (Camera.type != CAMERA_TYPE::LOOK_CAMERA && Camera.type != CAMERA_TYPE::HEAVY_CAMERA)
|
if (Camera.type != CAMERA_TYPE::LOOK_CAMERA && Camera.type != CAMERA_TYPE::HEAVY_CAMERA)
|
||||||
Camera.type = CAMERA_TYPE::COMBAT_CAMERA;
|
Camera.type = CAMERA_TYPE::COMBAT_CAMERA;
|
||||||
draw_shotgun(Lara.gunType);
|
|
||||||
|
draw_shotgun(laraInfo->gunType);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WEAPON_FLARE:
|
case WEAPON_FLARE:
|
||||||
draw_flare(LaraItem);
|
draw_flare(lara);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Lara.gunStatus = LG_NO_ARMS;
|
laraInfo->gunStatus = LG_NO_ARMS;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LG_SPECIAL:
|
case LG_SPECIAL:
|
||||||
draw_flare(LaraItem);
|
draw_flare(lara);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LG_UNDRAW_GUNS:
|
case LG_UNDRAW_GUNS:
|
||||||
Lara.meshPtrs[LM_HEAD] = Objects[ID_LARA_SKIN].meshIndex + LM_HEAD;
|
laraInfo->meshPtrs[LM_HEAD] = Objects[ID_LARA_SKIN].meshIndex + LM_HEAD;
|
||||||
|
|
||||||
switch (Lara.gunType)
|
switch (laraInfo->gunType)
|
||||||
{
|
{
|
||||||
case WEAPON_PISTOLS:
|
case WEAPON_PISTOLS:
|
||||||
case WEAPON_REVOLVER:
|
case WEAPON_REVOLVER:
|
||||||
case WEAPON_UZI:
|
case WEAPON_UZI:
|
||||||
undraw_pistols(Lara.gunType);
|
undraw_pistols(laraInfo->gunType);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WEAPON_SHOTGUN:
|
case WEAPON_SHOTGUN:
|
||||||
|
@ -501,41 +526,49 @@ void LaraGun()
|
||||||
case WEAPON_GRENADE_LAUNCHER:
|
case WEAPON_GRENADE_LAUNCHER:
|
||||||
case WEAPON_ROCKET_LAUNCHER:
|
case WEAPON_ROCKET_LAUNCHER:
|
||||||
case WEAPON_HARPOON_GUN:
|
case WEAPON_HARPOON_GUN:
|
||||||
undraw_shotgun(Lara.gunType);
|
undraw_shotgun(laraInfo->gunType);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WEAPON_FLARE:
|
case WEAPON_FLARE:
|
||||||
undraw_flare(LaraItem);
|
undraw_flare(lara);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LG_READY:
|
case LG_READY:
|
||||||
if (!(TrInput & IN_ACTION))
|
if (!(TrInput & IN_ACTION))
|
||||||
Lara.meshPtrs[LM_HEAD] = Objects[ID_LARA_SKIN].meshIndex + LM_HEAD;
|
laraInfo->meshPtrs[LM_HEAD] = Objects[ID_LARA_SKIN].meshIndex + LM_HEAD;
|
||||||
else
|
else
|
||||||
Lara.meshPtrs[LM_HEAD] = Objects[ID_LARA_SCREAM].meshIndex + LM_HEAD;
|
laraInfo->meshPtrs[LM_HEAD] = Objects[ID_LARA_SCREAM].meshIndex + LM_HEAD;
|
||||||
|
|
||||||
if (Camera.type != CAMERA_TYPE::LOOK_CAMERA && Camera.type != CAMERA_TYPE::HEAVY_CAMERA)
|
if (Camera.type != CAMERA_TYPE::LOOK_CAMERA &&
|
||||||
|
Camera.type != CAMERA_TYPE::HEAVY_CAMERA)
|
||||||
|
{
|
||||||
Camera.type = CAMERA_TYPE::COMBAT_CAMERA;
|
Camera.type = CAMERA_TYPE::COMBAT_CAMERA;
|
||||||
|
}
|
||||||
|
|
||||||
if (TrInput & IN_ACTION)
|
if (TrInput & IN_ACTION)
|
||||||
{
|
{
|
||||||
if (!GetAmmo(Lara.gunType))
|
if (!GetAmmo(lara, laraInfo->gunType))
|
||||||
{
|
{
|
||||||
Lara.requestGunType = Objects[ID_PISTOLS_ITEM].loaded ? WEAPON_PISTOLS : WEAPON_NONE;
|
laraInfo->requestGunType = Objects[ID_PISTOLS_ITEM].loaded ? WEAPON_PISTOLS : WEAPON_NONE;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (Lara.gunType)
|
switch (laraInfo->gunType)
|
||||||
{
|
{
|
||||||
case WEAPON_PISTOLS:
|
case WEAPON_PISTOLS:
|
||||||
case WEAPON_UZI:
|
case WEAPON_UZI:
|
||||||
PistolHandler(Lara.gunType);
|
PistolHandler(laraInfo->gunType);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WEAPON_SHOTGUN:
|
case WEAPON_SHOTGUN:
|
||||||
|
@ -545,85 +578,93 @@ void LaraGun()
|
||||||
case WEAPON_ROCKET_LAUNCHER:
|
case WEAPON_ROCKET_LAUNCHER:
|
||||||
case WEAPON_HARPOON_GUN:
|
case WEAPON_HARPOON_GUN:
|
||||||
case WEAPON_REVOLVER:
|
case WEAPON_REVOLVER:
|
||||||
RifleHandler(Lara.gunType);
|
RifleHandler(laraInfo->gunType);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LG_NO_ARMS:
|
case LG_NO_ARMS:
|
||||||
if (Lara.gunType == WEAPON_FLARE)
|
if (laraInfo->gunType == WEAPON_FLARE)
|
||||||
{
|
{
|
||||||
if (Lara.Vehicle != NO_ITEM || CheckForHoldingState(LaraItem->currentAnimState))
|
if (laraInfo->Vehicle != NO_ITEM ||
|
||||||
|
CheckForHoldingState(lara->currentAnimState))
|
||||||
{
|
{
|
||||||
if (Lara.flareControlLeft)
|
if (laraInfo->flareControlLeft)
|
||||||
{
|
{
|
||||||
if (Lara.leftArm.frameNumber)
|
if (laraInfo->leftArm.frameNumber)
|
||||||
{
|
{
|
||||||
if (++Lara.leftArm.frameNumber == 110)
|
if (++laraInfo->leftArm.frameNumber == 110)
|
||||||
Lara.leftArm.frameNumber = 0;
|
laraInfo->leftArm.frameNumber = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Lara.leftArm.frameNumber = 95;
|
laraInfo->leftArm.frameNumber = 95;
|
||||||
Lara.flareControlLeft = true;
|
laraInfo->flareControlLeft = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
laraInfo->flareControlLeft = false;
|
||||||
Lara.flareControlLeft = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
DoFlareInHand(LaraItem, Lara.flareAge);
|
DoFlareInHand(lara, laraInfo->flareAge);
|
||||||
set_flare_arm(LaraItem, Lara.leftArm.frameNumber);
|
set_flare_arm(lara, laraInfo->leftArm.frameNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LG_HANDS_BUSY:
|
case LG_HANDS_BUSY:
|
||||||
if (Lara.gunType == WEAPON_FLARE)
|
if (laraInfo->gunType == WEAPON_FLARE)
|
||||||
{
|
{
|
||||||
if (Lara.meshPtrs[LM_LHAND] == Objects[ID_LARA_FLARE_ANIM].meshIndex + LM_LHAND)
|
if (laraInfo->meshPtrs[LM_LHAND] == Objects[ID_LARA_FLARE_ANIM].meshIndex + LM_LHAND)
|
||||||
{
|
{
|
||||||
Lara.flareControlLeft = (Lara.Vehicle != NO_ITEM || CheckForHoldingState(LaraItem->currentAnimState));
|
laraInfo->flareControlLeft = (laraInfo->Vehicle != NO_ITEM || CheckForHoldingState(lara->currentAnimState));
|
||||||
DoFlareInHand(LaraItem, Lara.flareAge);
|
DoFlareInHand(lara, laraInfo->flareAge);
|
||||||
set_flare_arm(LaraItem, Lara.leftArm.frameNumber);
|
set_flare_arm(lara, laraInfo->leftArm.frameNumber);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ammo& GetAmmo(int weaponType){
|
Ammo& GetAmmo(ITEM_INFO* lara, int weaponType)
|
||||||
return Lara.Weapons[weaponType].Ammo[Lara.Weapons[weaponType].SelectedAmmo];
|
{
|
||||||
|
LaraInfo*& laraInfo = lara->data;
|
||||||
|
|
||||||
|
return laraInfo->Weapons[weaponType].Ammo[laraInfo->Weapons[weaponType].SelectedAmmo];
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitialiseNewWeapon()
|
void InitialiseNewWeapon(ITEM_INFO* lara)
|
||||||
{
|
{
|
||||||
Lara.rightArm.frameNumber = 0;
|
LaraInfo*& laraInfo = lara->data;
|
||||||
Lara.leftArm.frameNumber = 0;
|
|
||||||
Lara.leftArm.zRot = 0;
|
|
||||||
Lara.leftArm.yRot = 0;
|
|
||||||
Lara.leftArm.xRot = 0;
|
|
||||||
Lara.rightArm.zRot = 0;
|
|
||||||
Lara.rightArm.yRot = 0;
|
|
||||||
Lara.rightArm.xRot = 0;
|
|
||||||
Lara.target = nullptr;
|
|
||||||
Lara.rightArm.lock = false;
|
|
||||||
Lara.leftArm.lock = false;
|
|
||||||
Lara.rightArm.flash_gun = 0;
|
|
||||||
Lara.leftArm.flash_gun = 0;
|
|
||||||
|
|
||||||
switch (Lara.gunType)
|
laraInfo->rightArm.frameNumber = 0;
|
||||||
|
laraInfo->leftArm.frameNumber = 0;
|
||||||
|
laraInfo->leftArm.zRot = 0;
|
||||||
|
laraInfo->leftArm.yRot = 0;
|
||||||
|
laraInfo->leftArm.xRot = 0;
|
||||||
|
laraInfo->rightArm.zRot = 0;
|
||||||
|
laraInfo->rightArm.yRot = 0;
|
||||||
|
laraInfo->rightArm.xRot = 0;
|
||||||
|
laraInfo->target = nullptr;
|
||||||
|
laraInfo->rightArm.lock = false;
|
||||||
|
laraInfo->leftArm.lock = false;
|
||||||
|
laraInfo->rightArm.flash_gun = 0;
|
||||||
|
laraInfo->leftArm.flash_gun = 0;
|
||||||
|
|
||||||
|
switch (laraInfo->gunType)
|
||||||
{
|
{
|
||||||
case WEAPON_PISTOLS:
|
case WEAPON_PISTOLS:
|
||||||
case WEAPON_UZI:
|
case WEAPON_UZI:
|
||||||
Lara.rightArm.frameBase = Objects[ID_PISTOLS_ANIM].frameBase;
|
laraInfo->rightArm.frameBase = Objects[ID_PISTOLS_ANIM].frameBase;
|
||||||
Lara.leftArm.frameBase = Objects[ID_PISTOLS_ANIM].frameBase;
|
laraInfo->leftArm.frameBase = Objects[ID_PISTOLS_ANIM].frameBase;
|
||||||
if (Lara.gunStatus != LG_NO_ARMS)
|
if (laraInfo->gunStatus != LG_NO_ARMS)
|
||||||
draw_pistol_meshes(Lara.gunType);
|
draw_pistol_meshes(laraInfo->gunType);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WEAPON_SHOTGUN:
|
case WEAPON_SHOTGUN:
|
||||||
|
@ -632,31 +673,33 @@ void InitialiseNewWeapon()
|
||||||
case WEAPON_GRENADE_LAUNCHER:
|
case WEAPON_GRENADE_LAUNCHER:
|
||||||
case WEAPON_HARPOON_GUN:
|
case WEAPON_HARPOON_GUN:
|
||||||
case WEAPON_ROCKET_LAUNCHER:
|
case WEAPON_ROCKET_LAUNCHER:
|
||||||
Lara.rightArm.frameBase = Objects[WeaponObject(Lara.gunType)].frameBase;
|
laraInfo->rightArm.frameBase = Objects[WeaponObject(laraInfo->gunType)].frameBase;
|
||||||
Lara.leftArm.frameBase = Objects[WeaponObject(Lara.gunType)].frameBase;
|
laraInfo->leftArm.frameBase = Objects[WeaponObject(laraInfo->gunType)].frameBase;
|
||||||
if (Lara.gunStatus != LG_NO_ARMS)
|
if (laraInfo->gunStatus != LG_NO_ARMS)
|
||||||
draw_shotgun_meshes(Lara.gunType);
|
draw_shotgun_meshes(laraInfo->gunType);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WEAPON_FLARE:
|
case WEAPON_FLARE:
|
||||||
Lara.rightArm.frameBase = Objects[ID_LARA_FLARE_ANIM].frameBase;
|
laraInfo->rightArm.frameBase = Objects[ID_LARA_FLARE_ANIM].frameBase;
|
||||||
Lara.leftArm.frameBase = Objects[ID_LARA_FLARE_ANIM].frameBase;
|
laraInfo->leftArm.frameBase = Objects[ID_LARA_FLARE_ANIM].frameBase;
|
||||||
if (Lara.gunStatus != LG_NO_ARMS)
|
if (laraInfo->gunStatus != LG_NO_ARMS)
|
||||||
draw_flare_meshes(LaraItem);
|
draw_flare_meshes(lara);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Lara.rightArm.frameBase = g_Level.Anims[LaraItem->animNumber].framePtr;
|
laraInfo->rightArm.frameBase = g_Level.Anims[lara->animNumber].framePtr;
|
||||||
Lara.leftArm.frameBase = g_Level.Anims[LaraItem->animNumber].framePtr;
|
laraInfo->leftArm.frameBase = g_Level.Anims[lara->animNumber].framePtr;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GAME_OBJECT_ID WeaponObjectMesh(int weaponType) {
|
GAME_OBJECT_ID WeaponObjectMesh(ITEM_INFO* lara, int weaponType) {
|
||||||
|
LaraInfo*& laraInfo = lara->data;
|
||||||
|
|
||||||
switch (weaponType)
|
switch (weaponType)
|
||||||
{
|
{
|
||||||
case WEAPON_REVOLVER:
|
case WEAPON_REVOLVER:
|
||||||
return (Lara.Weapons[WEAPON_REVOLVER].HasLasersight == true ? ID_LARA_REVOLVER_LASER : ID_REVOLVER_ANIM);
|
return (laraInfo->Weapons[WEAPON_REVOLVER].HasLasersight == true ? ID_LARA_REVOLVER_LASER : ID_REVOLVER_ANIM);
|
||||||
|
|
||||||
case WEAPON_UZI:
|
case WEAPON_UZI:
|
||||||
return ID_UZI_ANIM;
|
return ID_UZI_ANIM;
|
||||||
|
@ -668,7 +711,7 @@ GAME_OBJECT_ID WeaponObjectMesh(int weaponType) {
|
||||||
return ID_HK_ANIM;
|
return ID_HK_ANIM;
|
||||||
|
|
||||||
case WEAPON_CROSSBOW:
|
case WEAPON_CROSSBOW:
|
||||||
return (Lara.Weapons[WEAPON_CROSSBOW].HasLasersight == true ? ID_LARA_CROSSBOW_LASER : ID_CROSSBOW_ANIM);
|
return (laraInfo->Weapons[WEAPON_CROSSBOW].HasLasersight == true ? ID_LARA_CROSSBOW_LASER : ID_CROSSBOW_ANIM);
|
||||||
|
|
||||||
case WEAPON_GRENADE_LAUNCHER:
|
case WEAPON_GRENADE_LAUNCHER:
|
||||||
return ID_GRENADE_ANIM;
|
return ID_GRENADE_ANIM;
|
||||||
|
@ -685,14 +728,15 @@ GAME_OBJECT_ID WeaponObjectMesh(int weaponType) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HitTarget(ITEM_INFO* item, GAME_VECTOR* hitPos, int damage, int grenade)
|
void HitTarget(ITEM_INFO* lara, ITEM_INFO* target, GAME_VECTOR* hitPos, int damage, int grenade)
|
||||||
{
|
{
|
||||||
item->hitStatus = true;
|
LaraInfo*& laraInfo = lara->data;
|
||||||
|
target->hitStatus = true;
|
||||||
|
|
||||||
if (item->data.is<CREATURE_INFO>())
|
if (target->data.is<CREATURE_INFO>())
|
||||||
((CREATURE_INFO*)item->data)->hurtByLara = true;
|
((CREATURE_INFO*)target->data)->hurtByLara = true;
|
||||||
|
|
||||||
OBJECT_INFO* obj = &Objects[item->objectNumber];
|
OBJECT_INFO* obj = &Objects[target->objectNumber];
|
||||||
|
|
||||||
if (hitPos != nullptr)
|
if (hitPos != nullptr)
|
||||||
{
|
{
|
||||||
|
@ -701,57 +745,63 @@ void HitTarget(ITEM_INFO* item, GAME_VECTOR* hitPos, int damage, int grenade)
|
||||||
switch (obj->hitEffect)
|
switch (obj->hitEffect)
|
||||||
{
|
{
|
||||||
case HIT_BLOOD:
|
case HIT_BLOOD:
|
||||||
if (item->objectNumber == ID_BADDY2
|
if (target->objectNumber == ID_BADDY2 &&
|
||||||
&& (item->currentAnimState == 8 || GetRandomControl() & 1)
|
(target->currentAnimState == 8 || GetRandomControl() & 1) &&
|
||||||
&& (Lara.gunType == WEAPON_PISTOLS
|
(laraInfo->gunType == WEAPON_PISTOLS ||
|
||||||
|| Lara.gunType == WEAPON_SHOTGUN
|
laraInfo->gunType == WEAPON_SHOTGUN ||
|
||||||
|| Lara.gunType == WEAPON_UZI))
|
laraInfo->gunType == WEAPON_UZI))
|
||||||
{
|
{
|
||||||
// Baddy2 gun hitting sword
|
// Baddy2 gun hitting sword
|
||||||
SoundEffect(SFX_TR4_BAD_SWORD_RICO, &item->pos, 0);
|
SoundEffect(SFX_TR4_BAD_SWORD_RICO, &target->pos, 0);
|
||||||
TriggerRicochetSpark(hitPos, LaraItem->pos.yRot, 3, 0);
|
TriggerRicochetSpark(hitPos, lara->pos.yRot, 3, 0);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
DoBloodSplat(hitPos->x, hitPos->y, hitPos->z, (GetRandomControl() & 3) + 3, target->pos.yRot, target->roomNumber);
|
||||||
DoBloodSplat(hitPos->x, hitPos->y, hitPos->z, (GetRandomControl() & 3) + 3, item->pos.yRot, item->roomNumber);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HIT_RICOCHET:
|
case HIT_RICOCHET:
|
||||||
TriggerRicochetSpark(hitPos, LaraItem->pos.yRot, 3, 0);
|
TriggerRicochetSpark(hitPos, lara->pos.yRot, 3, 0);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HIT_SMOKE:
|
case HIT_SMOKE:
|
||||||
TriggerRicochetSpark(hitPos, LaraItem->pos.yRot, 3, -5);
|
TriggerRicochetSpark(hitPos, lara->pos.yRot, 3, -5);
|
||||||
if (item->objectNumber == ID_ROMAN_GOD1 ||
|
|
||||||
item->objectNumber == ID_ROMAN_GOD2)
|
|
||||||
{
|
|
||||||
SoundEffect(SFX_TR5_SWORD_GOD_HITMET, &item->pos, 0);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
if (target->objectNumber == ID_ROMAN_GOD1 ||
|
||||||
|
target->objectNumber == ID_ROMAN_GOD2)
|
||||||
|
{
|
||||||
|
SoundEffect(SFX_TR5_SWORD_GOD_HITMET, &target->pos, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!obj->undead || grenade || item->hitPoints == NOT_TARGETABLE)
|
if (!obj->undead ||
|
||||||
|
grenade ||
|
||||||
|
target->hitPoints == NOT_TARGETABLE)
|
||||||
{
|
{
|
||||||
if (item->hitPoints > 0)
|
if (target->hitPoints > 0)
|
||||||
{
|
{
|
||||||
Statistics.Level.AmmoHits++;
|
Statistics.Level.AmmoHits++;
|
||||||
|
|
||||||
if (item->hitPoints >= damage)
|
if (target->hitPoints >= damage)
|
||||||
item->hitPoints -= damage;
|
target->hitPoints -= damage;
|
||||||
else
|
else
|
||||||
item->hitPoints = 0;
|
target->hitPoints = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FireWeaponType FireWeapon(LARA_WEAPON_TYPE weaponType, ITEM_INFO* target, ITEM_INFO* src, short* angles)
|
FireWeaponType FireWeapon(LARA_WEAPON_TYPE weaponType, ITEM_INFO* target, ITEM_INFO* src, short* angles)
|
||||||
{
|
{
|
||||||
Ammo& ammo = GetAmmo(weaponType);
|
LaraInfo*& laraInfo = src->data;
|
||||||
|
|
||||||
|
Ammo& ammo = GetAmmo(src, weaponType);
|
||||||
if (ammo.getCount() == 0 && !ammo.hasInfinite())
|
if (ammo.getCount() == 0 && !ammo.hasInfinite())
|
||||||
return FW_NOAMMO;
|
return FW_NOAMMO;
|
||||||
if (!ammo.hasInfinite())
|
if (!ammo.hasInfinite())
|
||||||
|
@ -798,8 +848,8 @@ FireWeaponType FireWeapon(LARA_WEAPON_TYPE weaponType, ITEM_INFO* target, ITEM_I
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Lara.hasFired = true;
|
laraInfo->hasFired = true;
|
||||||
Lara.fired = true;
|
laraInfo->fired = true;
|
||||||
|
|
||||||
GAME_VECTOR vSrc;
|
GAME_VECTOR vSrc;
|
||||||
vSrc.x = pos.x;
|
vSrc.x = pos.x;
|
||||||
|
@ -844,7 +894,7 @@ FireWeaponType FireWeapon(LARA_WEAPON_TYPE weaponType, ITEM_INFO* target, ITEM_I
|
||||||
short ricochet_angle;
|
short ricochet_angle;
|
||||||
target->hitStatus = true; //need to do this to maintain defence state
|
target->hitStatus = true; //need to do this to maintain defence state
|
||||||
target->hitPoints--;
|
target->hitPoints--;
|
||||||
ricochet_angle = (mGetAngle(LaraItem->pos.zPos, LaraItem->pos.xPos, target->pos.zPos, target->pos.xPos) >> 4) & 4095;
|
ricochet_angle = (mGetAngle(lara->pos.zPos, lara->pos.xPos, target->pos.zPos, target->pos.xPos) >> 4) & 4095;
|
||||||
TriggerRicochetSparks(&vDest, ricochet_angle, 16, 0);
|
TriggerRicochetSparks(&vDest, ricochet_angle, 16, 0);
|
||||||
SoundEffect(SFX_TR4_LARA_RICOCHET, &target->pos, 0); // play RICOCHET Sample
|
SoundEffect(SFX_TR4_LARA_RICOCHET, &target->pos, 0); // play RICOCHET Sample
|
||||||
}
|
}
|
||||||
|
@ -857,7 +907,7 @@ FireWeaponType FireWeapon(LARA_WEAPON_TYPE weaponType, ITEM_INFO* target, ITEM_I
|
||||||
if ((target->currentAnimState > 1 && target->currentAnimState < 5) && angle < 0x4000 && angle > -0x4000)
|
if ((target->currentAnimState > 1 && target->currentAnimState < 5) && angle < 0x4000 && angle > -0x4000)
|
||||||
{
|
{
|
||||||
target->hitStatus = true; //need to do this to maintain defence state
|
target->hitStatus = true; //need to do this to maintain defence state
|
||||||
ricochet_angle = (mGetAngle(LaraItem->pos.zPos, LaraItem->pos.xPos, target->pos.zPos, target->pos.xPos) >> 4) & 4095;
|
ricochet_angle = (mGetAngle(lara->pos.zPos, lara->pos.xPos, target->pos.zPos, target->pos.xPos) >> 4) & 4095;
|
||||||
TriggerRicochetSparks(&vDest, ricochet_angle, 16, 0);
|
TriggerRicochetSparks(&vDest, ricochet_angle, 16, 0);
|
||||||
SoundEffect(SFX_TR4_LARA_RICOCHET, &target->pos, 0); // play RICOCHET Sample
|
SoundEffect(SFX_TR4_LARA_RICOCHET, &target->pos, 0); // play RICOCHET Sample
|
||||||
}
|
}
|
||||||
|
@ -871,7 +921,7 @@ FireWeaponType FireWeapon(LARA_WEAPON_TYPE weaponType, ITEM_INFO* target, ITEM_I
|
||||||
// it's really weird but we decided to replicate original behaviour until we'll fully understand what is happening
|
// it's really weird but we decided to replicate original behaviour until we'll fully understand what is happening
|
||||||
// with weapons
|
// with weapons
|
||||||
if (!GetTargetOnLOS(&vSrc, &vDest, false, true))
|
if (!GetTargetOnLOS(&vSrc, &vDest, false, true))
|
||||||
HitTarget(target, &vDest, weapon->damage, false);
|
HitTarget(src, target, &vDest, weapon->damage, false);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
return FW_MAYBEHIT;
|
return FW_MAYBEHIT;
|
||||||
|
@ -897,14 +947,16 @@ void find_target_point(ITEM_INFO* item, GAME_VECTOR* target)
|
||||||
target->roomNumber = item->roomNumber;
|
target->roomNumber = item->roomNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LaraTargetInfo(WEAPON_INFO* weapon)
|
void LaraTargetInfo(ITEM_INFO* lara, WEAPON_INFO* weapon)
|
||||||
{
|
{
|
||||||
if (Lara.target == nullptr)
|
LaraInfo*& laraInfo = lara->data;
|
||||||
|
|
||||||
|
if (laraInfo->target == nullptr)
|
||||||
{
|
{
|
||||||
Lara.rightArm.lock = false;
|
laraInfo->rightArm.lock = false;
|
||||||
Lara.leftArm.lock = false;
|
laraInfo->leftArm.lock = false;
|
||||||
Lara.targetAngles[1] = 0;
|
laraInfo->targetAngles[1] = 0;
|
||||||
Lara.targetAngles[0] = 0;
|
laraInfo->targetAngles[0] = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -913,61 +965,61 @@ void LaraTargetInfo(WEAPON_INFO* weapon)
|
||||||
short angles[2];
|
short angles[2];
|
||||||
|
|
||||||
GetLaraJointPosition(&muzzleOffset, LM_RHAND);
|
GetLaraJointPosition(&muzzleOffset, LM_RHAND);
|
||||||
src.x = LaraItem->pos.xPos;
|
src.x = lara->pos.xPos;
|
||||||
src.y = muzzleOffset.y;
|
src.y = muzzleOffset.y;
|
||||||
src.z = LaraItem->pos.zPos;
|
src.z = lara->pos.zPos;
|
||||||
src.roomNumber = LaraItem->roomNumber;
|
src.roomNumber = lara->roomNumber;
|
||||||
find_target_point(Lara.target, &targetPoint);
|
find_target_point(laraInfo->target, &targetPoint);
|
||||||
phd_GetVectorAngles(targetPoint.x - src.x, targetPoint.y - src.y, targetPoint.z - src.z, angles);
|
phd_GetVectorAngles(targetPoint.x - src.x, targetPoint.y - src.y, targetPoint.z - src.z, angles);
|
||||||
|
|
||||||
angles[0] -= LaraItem->pos.yRot;
|
angles[0] -= lara->pos.yRot;
|
||||||
angles[1] -= LaraItem->pos.xRot;
|
angles[1] -= lara->pos.xRot;
|
||||||
|
|
||||||
if (LOS(&src, &targetPoint))
|
if (LOS(&src, &targetPoint))
|
||||||
{
|
{
|
||||||
if (angles[0] >= weapon->lockAngles[0]
|
if (angles[0] >= weapon->lockAngles[0] &&
|
||||||
&& angles[0] <= weapon->lockAngles[1]
|
angles[0] <= weapon->lockAngles[1] &&
|
||||||
&& angles[1] >= weapon->lockAngles[2]
|
angles[1] >= weapon->lockAngles[2] &&
|
||||||
&& angles[1] <= weapon->lockAngles[3])
|
angles[1] <= weapon->lockAngles[3])
|
||||||
{
|
{
|
||||||
Lara.rightArm.lock = true;
|
laraInfo->rightArm.lock = true;
|
||||||
Lara.leftArm.lock = true;
|
laraInfo->leftArm.lock = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (Lara.leftArm.lock)
|
if (laraInfo->leftArm.lock)
|
||||||
{
|
{
|
||||||
if ((angles[0] < weapon->leftAngles[0] ||
|
if (angles[0] < weapon->leftAngles[0] ||
|
||||||
angles[0] > weapon->leftAngles[1] ||
|
angles[0] > weapon->leftAngles[1] ||
|
||||||
angles[1] < weapon->leftAngles[2] ||
|
angles[1] < weapon->leftAngles[2] ||
|
||||||
angles[1] > weapon->leftAngles[3]))
|
angles[1] > weapon->leftAngles[3])
|
||||||
Lara.leftArm.lock = false;
|
laraInfo->leftArm.lock = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Lara.rightArm.lock)
|
if (laraInfo->rightArm.lock)
|
||||||
{
|
{
|
||||||
if ((angles[0] < weapon->rightAngles[0] ||
|
if (angles[0] < weapon->rightAngles[0] ||
|
||||||
angles[0] > weapon->rightAngles[1] ||
|
angles[0] > weapon->rightAngles[1] ||
|
||||||
angles[1] < weapon->rightAngles[2] ||
|
angles[1] < weapon->rightAngles[2] ||
|
||||||
angles[1] > weapon->rightAngles[3]))
|
angles[1] > weapon->rightAngles[3])
|
||||||
Lara.rightArm.lock = false;
|
laraInfo->rightArm.lock = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Lara.rightArm.lock = false;
|
laraInfo->rightArm.lock = false;
|
||||||
Lara.leftArm.lock = false;
|
laraInfo->leftArm.lock = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Lara.targetAngles[0] = angles[0];
|
laraInfo->targetAngles[0] = angles[0];
|
||||||
Lara.targetAngles[1] = angles[1];
|
laraInfo->targetAngles[1] = angles[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CheckForHoldingState(int state)
|
bool CheckForHoldingState(int state)
|
||||||
{
|
{
|
||||||
#if 0
|
#if 0
|
||||||
if (Lara.ExtraAnim != NO_ITEM)
|
if (laraInfo->ExtraAnim != NO_ITEM)
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -982,8 +1034,9 @@ bool CheckForHoldingState(int state)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LaraGetNewTarget(WEAPON_INFO* weapon)
|
void LaraGetNewTarget(ITEM_INFO* lara, WEAPON_INFO* weaponInfo)
|
||||||
{
|
{
|
||||||
|
LaraInfo*& laraInfo = lara->data;
|
||||||
GAME_VECTOR src, target;
|
GAME_VECTOR src, target;
|
||||||
PHD_VECTOR muzzleOffset;
|
PHD_VECTOR muzzleOffset;
|
||||||
int bestDistance, maxDistance, targets, slot, x, y, z, distance;
|
int bestDistance, maxDistance, targets, slot, x, y, z, distance;
|
||||||
|
@ -993,20 +1046,20 @@ void LaraGetNewTarget(WEAPON_INFO* weapon)
|
||||||
|
|
||||||
if (BinocularRange)
|
if (BinocularRange)
|
||||||
{
|
{
|
||||||
Lara.target = nullptr;
|
laraInfo->target = nullptr;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
GetLaraJointPosition(&muzzleOffset, LM_RHAND);
|
GetLaraJointPosition(&muzzleOffset, LM_RHAND);
|
||||||
src.x = LaraItem->pos.xPos;
|
src.x = lara->pos.xPos;
|
||||||
src.y = muzzleOffset.y;
|
src.y = muzzleOffset.y;
|
||||||
src.z = LaraItem->pos.zPos;
|
src.z = lara->pos.zPos;
|
||||||
src.roomNumber = LaraItem->roomNumber;
|
src.roomNumber = lara->roomNumber;
|
||||||
|
|
||||||
bestItem = NULL;
|
bestItem = NULL;
|
||||||
bestYrot = MAXSHORT;
|
bestYrot = MAXSHORT;
|
||||||
bestDistance = MAXINT;
|
bestDistance = MAXINT;
|
||||||
maxDistance = weapon->targetDist;
|
maxDistance = weaponInfo->targetDist;
|
||||||
targets = 0;
|
targets = 0;
|
||||||
|
|
||||||
for (slot = 0; slot < ActiveCreatures.size(); ++slot)
|
for (slot = 0; slot < ActiveCreatures.size(); ++slot)
|
||||||
|
@ -1028,9 +1081,9 @@ void LaraGetNewTarget(WEAPON_INFO* weapon)
|
||||||
if (LOS(&src, &target))
|
if (LOS(&src, &target))
|
||||||
{
|
{
|
||||||
phd_GetVectorAngles(target.x - src.x, target.y - src.y, target.z - src.z, angle);
|
phd_GetVectorAngles(target.x - src.x, target.y - src.y, target.z - src.z, angle);
|
||||||
angle[0] -= LaraItem->pos.yRot + Lara.torsoYrot;
|
angle[0] -= lara->pos.yRot + laraInfo->torsoYrot;
|
||||||
angle[1] -= LaraItem->pos.xRot + Lara.torsoXrot;
|
angle[1] -= lara->pos.xRot + laraInfo->torsoXrot;
|
||||||
if (angle[0] >= weapon->lockAngles[0] && angle[0] <= weapon->lockAngles[1] && angle[1] >= weapon->lockAngles[2] && angle[1] <= weapon->lockAngles[3])
|
if (angle[0] >= weaponInfo->lockAngles[0] && angle[0] <= weaponInfo->lockAngles[1] && angle[1] >= weaponInfo->lockAngles[2] && angle[1] <= weaponInfo->lockAngles[3])
|
||||||
{
|
{
|
||||||
TargetList[targets] = item;
|
TargetList[targets] = item;
|
||||||
++targets;
|
++targets;
|
||||||
|
@ -1051,27 +1104,27 @@ void LaraGetNewTarget(WEAPON_INFO* weapon)
|
||||||
TargetList[targets] = NULL;
|
TargetList[targets] = NULL;
|
||||||
if (!TargetList[0])
|
if (!TargetList[0])
|
||||||
{
|
{
|
||||||
Lara.target = NULL;
|
laraInfo->target = NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (slot = 0; slot < MAX_TARGETS; ++slot)
|
for (slot = 0; slot < MAX_TARGETS; ++slot)
|
||||||
{
|
{
|
||||||
if (!TargetList[slot])
|
if (!TargetList[slot])
|
||||||
Lara.target = NULL;
|
laraInfo->target = NULL;
|
||||||
if (TargetList[slot] == Lara.target)
|
if (TargetList[slot] == laraInfo->target)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (Lara.gunStatus != LG_NO_ARMS || TrInput & IN_LOOKSWITCH)
|
if (laraInfo->gunStatus != LG_NO_ARMS || TrInput & IN_LOOKSWITCH)
|
||||||
{
|
{
|
||||||
if (!Lara.target)
|
if (!laraInfo->target)
|
||||||
{
|
{
|
||||||
Lara.target = bestItem;
|
laraInfo->target = bestItem;
|
||||||
LastTargets[0] = NULL;
|
LastTargets[0] = NULL;
|
||||||
}
|
}
|
||||||
else if (TrInput & IN_LOOKSWITCH)
|
else if (TrInput & IN_LOOKSWITCH)
|
||||||
{
|
{
|
||||||
Lara.target = NULL;
|
laraInfo->target = NULL;
|
||||||
flag = true;
|
flag = true;
|
||||||
for (match = 0; match < MAX_TARGETS && TargetList[match]; ++match)
|
for (match = 0; match < MAX_TARGETS && TargetList[match]; ++match)
|
||||||
{
|
{
|
||||||
|
@ -1086,29 +1139,29 @@ void LaraGetNewTarget(WEAPON_INFO* weapon)
|
||||||
}
|
}
|
||||||
if (!loop)
|
if (!loop)
|
||||||
{
|
{
|
||||||
Lara.target = TargetList[match];
|
laraInfo->target = TargetList[match];
|
||||||
if (Lara.target)
|
if (laraInfo->target)
|
||||||
flag = false;
|
flag = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (flag)
|
if (flag)
|
||||||
{
|
{
|
||||||
Lara.target = bestItem;
|
laraInfo->target = bestItem;
|
||||||
LastTargets[0] = NULL;
|
LastTargets[0] = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Lara.target != LastTargets[0])
|
if (laraInfo->target != LastTargets[0])
|
||||||
{
|
{
|
||||||
for (slot = 7; slot > 0; --slot)
|
for (slot = 7; slot > 0; --slot)
|
||||||
LastTargets[slot] = LastTargets[slot - 1];
|
LastTargets[slot] = LastTargets[slot - 1];
|
||||||
LastTargets[0] = Lara.target;
|
LastTargets[0] = laraInfo->target;
|
||||||
}
|
}
|
||||||
|
|
||||||
LaraTargetInfo(weapon);
|
LaraTargetInfo(lara, weaponInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
HOLSTER_SLOT HolsterSlotForWeapon(LARA_WEAPON_TYPE weapon)
|
HOLSTER_SLOT HolsterSlotForWeapon(LARA_WEAPON_TYPE weapon)
|
||||||
|
|
|
@ -29,6 +29,7 @@ struct WEAPON_INFO
|
||||||
short sampleNum;
|
short sampleNum;
|
||||||
byte explosiveDamage;
|
byte explosiveDamage;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum WeaponState {
|
enum WeaponState {
|
||||||
WSTATE_AIM =0,
|
WSTATE_AIM =0,
|
||||||
WSTATE_DRAW = 1,
|
WSTATE_DRAW = 1,
|
||||||
|
@ -43,15 +44,15 @@ extern WEAPON_INFO Weapons[static_cast<int>(LARA_WEAPON_TYPE::NUM_WEAPONS)];
|
||||||
|
|
||||||
void SmashItem(short itemNum);
|
void SmashItem(short itemNum);
|
||||||
GAME_OBJECT_ID WeaponObject(int weaponType);
|
GAME_OBJECT_ID WeaponObject(int weaponType);
|
||||||
void LaraGun();
|
void LaraGun(ITEM_INFO* lara);
|
||||||
Ammo& GetAmmo(int weaponType);
|
Ammo& GetAmmo(ITEM_INFO* lara, int weaponType);
|
||||||
void InitialiseNewWeapon();
|
void InitialiseNewWeapon(ITEM_INFO* lara);
|
||||||
GAME_OBJECT_ID WeaponObjectMesh(int weaponType);
|
GAME_OBJECT_ID WeaponObjectMesh(ITEM_INFO* lara, int weaponType);
|
||||||
void AimWeapon(WEAPON_INFO* winfo, LARA_ARM* arm);
|
void AimWeapon(ITEM_INFO* lara, WEAPON_INFO* winfo, LARA_ARM* arm);
|
||||||
void HitTarget(ITEM_INFO* item, GAME_VECTOR* hitPos, int damage, int flag);
|
void HitTarget(ITEM_INFO* lara, ITEM_INFO* target, GAME_VECTOR* hitPos, int damage, int flag);
|
||||||
FireWeaponType FireWeapon(LARA_WEAPON_TYPE weaponType, ITEM_INFO* target, ITEM_INFO* src, short* angles);
|
FireWeaponType FireWeapon(LARA_WEAPON_TYPE weaponType, ITEM_INFO* target, ITEM_INFO* src, short* angles);
|
||||||
void find_target_point(ITEM_INFO* item, GAME_VECTOR* target);
|
void find_target_point(ITEM_INFO* item, GAME_VECTOR* target);
|
||||||
void LaraTargetInfo(WEAPON_INFO* weapon);
|
void LaraTargetInfo(ITEM_INFO* lara, WEAPON_INFO* weapon);
|
||||||
bool CheckForHoldingState(int state);
|
bool CheckForHoldingState(int state);
|
||||||
void LaraGetNewTarget(WEAPON_INFO* weapon);
|
void LaraGetNewTarget(ITEM_INFO* lara, WEAPON_INFO* weapon);
|
||||||
HOLSTER_SLOT HolsterSlotForWeapon(LARA_WEAPON_TYPE weapon);
|
HOLSTER_SLOT HolsterSlotForWeapon(LARA_WEAPON_TYPE weapon);
|
||||||
|
|
|
@ -147,7 +147,7 @@ void undraw_flare(ITEM_INFO* lara)
|
||||||
info->gunType = info->lastGunType;
|
info->gunType = info->lastGunType;
|
||||||
info->gunStatus = LG_NO_ARMS;
|
info->gunStatus = LG_NO_ARMS;
|
||||||
|
|
||||||
InitialiseNewWeapon();
|
InitialiseNewWeapon(lara);
|
||||||
|
|
||||||
info->target = NULL;
|
info->target = NULL;
|
||||||
info->rightArm.lock = false;
|
info->rightArm.lock = false;
|
||||||
|
@ -204,7 +204,7 @@ void undraw_flare(ITEM_INFO* lara)
|
||||||
info->gunType = info->lastGunType;
|
info->gunType = info->lastGunType;
|
||||||
info->gunStatus = LG_NO_ARMS;
|
info->gunStatus = LG_NO_ARMS;
|
||||||
|
|
||||||
InitialiseNewWeapon();
|
InitialiseNewWeapon(lara);
|
||||||
|
|
||||||
info->flareControlLeft = false;
|
info->flareControlLeft = false;
|
||||||
info->target = NULL;
|
info->target = NULL;
|
||||||
|
|
|
@ -34,7 +34,7 @@ using namespace TEN::Effects::Environment;
|
||||||
|
|
||||||
void FireHarpoon()
|
void FireHarpoon()
|
||||||
{
|
{
|
||||||
Ammo& ammos = GetAmmo(WEAPON_CROSSBOW);
|
Ammo& ammos = GetAmmo(LaraItem, WEAPON_CROSSBOW);
|
||||||
if (ammos.getCount() != 0)
|
if (ammos.getCount() != 0)
|
||||||
{
|
{
|
||||||
Lara.hasFired = true;
|
Lara.hasFired = true;
|
||||||
|
@ -235,7 +235,7 @@ void HarpoonBoltControl(short itemNumber)
|
||||||
|
|
||||||
if (currentObj->intelligent && currentObj->collision && currentItem->status == ITEM_ACTIVE && !currentObj->undead)
|
if (currentObj->intelligent && currentObj->collision && currentItem->status == ITEM_ACTIVE && !currentObj->undead)
|
||||||
{
|
{
|
||||||
HitTarget(currentItem, (GAME_VECTOR*)&item->pos, Weapons[WEAPON_HARPOON_GUN].damage, 0);
|
HitTarget(LaraItem, currentItem, (GAME_VECTOR*)&item->pos, Weapons[WEAPON_HARPOON_GUN].damage, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// All other items (like puzzles) can't be hit
|
// All other items (like puzzles) can't be hit
|
||||||
|
@ -292,7 +292,7 @@ void FireGrenade()
|
||||||
int y = 0;
|
int y = 0;
|
||||||
int z = 0;
|
int z = 0;
|
||||||
|
|
||||||
Ammo& ammo = GetAmmo(WEAPON_GRENADE_LAUNCHER);
|
Ammo& ammo = GetAmmo(LaraItem, WEAPON_GRENADE_LAUNCHER);
|
||||||
if (ammo != size_t{ 0 })
|
if (ammo != size_t{ 0 })
|
||||||
{
|
{
|
||||||
Lara.hasFired = true;
|
Lara.hasFired = true;
|
||||||
|
@ -1396,7 +1396,7 @@ void CrossbowBoltControl(short itemNumber)
|
||||||
else if (currentItem->objectNumber != ID_LARA)
|
else if (currentItem->objectNumber != ID_LARA)
|
||||||
{
|
{
|
||||||
// Normal hit
|
// Normal hit
|
||||||
HitTarget(currentItem, (GAME_VECTOR*)& item->pos, Weapons[WEAPON_CROSSBOW].damage << item->itemFlags[0], 0);
|
HitTarget(LaraItem, currentItem, (GAME_VECTOR*)& item->pos, Weapons[WEAPON_CROSSBOW].damage << item->itemFlags[0], 0);
|
||||||
|
|
||||||
// Poisoned ammos
|
// Poisoned ammos
|
||||||
if (item->itemFlags[0] == CROSSBOW_POISON)
|
if (item->itemFlags[0] == CROSSBOW_POISON)
|
||||||
|
@ -1505,10 +1505,10 @@ void RifleHandler(int weaponType)
|
||||||
|
|
||||||
WEAPON_INFO* weapon = &Weapons[weaponType];
|
WEAPON_INFO* weapon = &Weapons[weaponType];
|
||||||
|
|
||||||
LaraGetNewTarget(weapon);
|
LaraGetNewTarget(LaraItem, weapon);
|
||||||
if (TrInput & IN_ACTION)
|
if (TrInput & IN_ACTION)
|
||||||
LaraTargetInfo(weapon);
|
LaraTargetInfo(LaraItem, weapon);
|
||||||
AimWeapon(weapon, &Lara.leftArm);
|
AimWeapon(LaraItem, weapon, &Lara.leftArm);
|
||||||
|
|
||||||
if (Lara.leftArm.lock)
|
if (Lara.leftArm.lock)
|
||||||
{
|
{
|
||||||
|
@ -1555,7 +1555,7 @@ void RifleHandler(int weaponType)
|
||||||
|
|
||||||
void FireCrossbow(PHD_3DPOS* pos)
|
void FireCrossbow(PHD_3DPOS* pos)
|
||||||
{
|
{
|
||||||
Ammo& ammos = GetAmmo(WEAPON_CROSSBOW);
|
Ammo& ammos = GetAmmo(LaraItem, WEAPON_CROSSBOW);
|
||||||
if (ammos)
|
if (ammos)
|
||||||
{
|
{
|
||||||
Lara.hasFired = true;
|
Lara.hasFired = true;
|
||||||
|
@ -1662,7 +1662,7 @@ void FireCrossBowFromLaserSight(GAME_VECTOR* src, GAME_VECTOR* target)
|
||||||
|
|
||||||
void FireRocket()
|
void FireRocket()
|
||||||
{
|
{
|
||||||
Ammo& ammos = GetAmmo(WEAPON_ROCKET_LAUNCHER);
|
Ammo& ammos = GetAmmo(LaraItem, WEAPON_ROCKET_LAUNCHER);
|
||||||
if (ammos) {
|
if (ammos) {
|
||||||
Lara.hasFired = true;
|
Lara.hasFired = true;
|
||||||
|
|
||||||
|
@ -1748,7 +1748,7 @@ void DoExplosiveDamageOnBaddie(ITEM_INFO* dest, ITEM_INFO* src, int weapon)
|
||||||
// TODO: in TR4 condition was objectNumber != (ID_MUMMY, ID_SKELETON, ID_SETHA)
|
// TODO: in TR4 condition was objectNumber != (ID_MUMMY, ID_SKELETON, ID_SETHA)
|
||||||
if (!obj->undead)
|
if (!obj->undead)
|
||||||
{
|
{
|
||||||
HitTarget(dest, 0, Weapons[weapon].explosiveDamage, 1);
|
HitTarget(LaraItem, dest, 0, Weapons[weapon].explosiveDamage, 1);
|
||||||
if (dest != LaraItem)
|
if (dest != LaraItem)
|
||||||
{
|
{
|
||||||
Statistics.Game.AmmoHits++;
|
Statistics.Game.AmmoHits++;
|
||||||
|
@ -1884,7 +1884,7 @@ void undraw_shotgun_meshes(int weapon)
|
||||||
void draw_shotgun_meshes(int weaponType)
|
void draw_shotgun_meshes(int weaponType)
|
||||||
{
|
{
|
||||||
Lara.holsterInfo.backHolster = HOLSTER_SLOT::Empty;
|
Lara.holsterInfo.backHolster = HOLSTER_SLOT::Empty;
|
||||||
Lara.meshPtrs[LM_RHAND] = Objects[WeaponObjectMesh(weaponType)].meshIndex + LM_RHAND;
|
Lara.meshPtrs[LM_RHAND] = Objects[WeaponObjectMesh(LaraItem, weaponType)].meshIndex + LM_RHAND;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HitSpecial(ITEM_INFO* projectile, ITEM_INFO* target, int flags)
|
void HitSpecial(ITEM_INFO* projectile, ITEM_INFO* target, int flags)
|
||||||
|
|
|
@ -286,12 +286,12 @@ void PistolHandler(LARA_WEAPON_TYPE weaponType)
|
||||||
{
|
{
|
||||||
WEAPON_INFO* weapon = &Weapons[weaponType];
|
WEAPON_INFO* weapon = &Weapons[weaponType];
|
||||||
|
|
||||||
LaraGetNewTarget(weapon);
|
LaraGetNewTarget(LaraItem, weapon);
|
||||||
if (TrInput & IN_ACTION)
|
if (TrInput & IN_ACTION)
|
||||||
LaraTargetInfo(weapon);
|
LaraTargetInfo(LaraItem, weapon);
|
||||||
|
|
||||||
AimWeapon(weapon, &Lara.leftArm);
|
AimWeapon(LaraItem, weapon, &Lara.leftArm);
|
||||||
AimWeapon(weapon, &Lara.rightArm);
|
AimWeapon(LaraItem, weapon, &Lara.rightArm);
|
||||||
|
|
||||||
if (Lara.leftArm.lock && !Lara.rightArm.lock)
|
if (Lara.leftArm.lock && !Lara.rightArm.lock)
|
||||||
{
|
{
|
||||||
|
@ -367,9 +367,9 @@ void draw_pistol_meshes(LARA_WEAPON_TYPE weaponType)
|
||||||
}
|
}
|
||||||
Lara.holsterInfo.rightHolster = HOLSTER_SLOT::Empty;
|
Lara.holsterInfo.rightHolster = HOLSTER_SLOT::Empty;
|
||||||
|
|
||||||
Lara.meshPtrs[LM_RHAND] = Objects[WeaponObjectMesh(weaponType)].meshIndex + LM_RHAND;
|
Lara.meshPtrs[LM_RHAND] = Objects[WeaponObjectMesh(LaraItem, weaponType)].meshIndex + LM_RHAND;
|
||||||
if (static_cast<LARA_WEAPON_TYPE>(weaponType) != LARA_WEAPON_TYPE::WEAPON_REVOLVER)
|
if (static_cast<LARA_WEAPON_TYPE>(weaponType) != LARA_WEAPON_TYPE::WEAPON_REVOLVER)
|
||||||
Lara.meshPtrs[LM_LHAND] = Objects[WeaponObjectMesh(weaponType)].meshIndex + LM_LHAND;
|
Lara.meshPtrs[LM_LHAND] = Objects[WeaponObjectMesh(LaraItem, weaponType)].meshIndex + LM_LHAND;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ready_pistols(LARA_WEAPON_TYPE weaponType)
|
void ready_pistols(LARA_WEAPON_TYPE weaponType)
|
||||||
|
|
|
@ -1363,7 +1363,7 @@ void BinocularCamera(ITEM_INFO* item)
|
||||||
if (LaserSight)
|
if (LaserSight)
|
||||||
{
|
{
|
||||||
int firing = 0;
|
int firing = 0;
|
||||||
Ammo& ammo = GetAmmo(Lara.gunType);
|
Ammo& ammo = GetAmmo(LaraItem, Lara.gunType);
|
||||||
|
|
||||||
if (!(InputBusy & IN_ACTION) ||
|
if (!(InputBusy & IN_ACTION) ||
|
||||||
WeaponDelay ||
|
WeaponDelay ||
|
||||||
|
|
|
@ -173,7 +173,7 @@ int GetTargetOnLOS(GAME_VECTOR* src, GAME_VECTOR* dest, int DrawTarget, int firi
|
||||||
{
|
{
|
||||||
if (Objects[item->objectNumber].intelligent)
|
if (Objects[item->objectNumber].intelligent)
|
||||||
{
|
{
|
||||||
HitTarget(item, &target, Weapons[Lara.gunType].damage, 0);
|
HitTarget(LaraItem, item, &target, Weapons[Lara.gunType].damage, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -136,7 +136,7 @@ void DrawLeftPistol(ITEM_INFO* item)
|
||||||
{
|
{
|
||||||
if (Lara.meshPtrs[LM_LHAND] == Objects[ID_LARA_SKIN].meshIndex + LM_LHAND)
|
if (Lara.meshPtrs[LM_LHAND] == Objects[ID_LARA_SKIN].meshIndex + LM_LHAND)
|
||||||
{
|
{
|
||||||
Lara.meshPtrs[LM_LHAND] = Objects[WeaponObjectMesh(WEAPON_PISTOLS)].meshIndex + LM_LHAND;
|
Lara.meshPtrs[LM_LHAND] = Objects[WeaponObjectMesh(LaraItem, WEAPON_PISTOLS)].meshIndex + LM_LHAND;
|
||||||
Lara.holsterInfo.leftHolster = HOLSTER_SLOT::Empty;
|
Lara.holsterInfo.leftHolster = HOLSTER_SLOT::Empty;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -150,7 +150,7 @@ void DrawRightPistol(ITEM_INFO* item)
|
||||||
{
|
{
|
||||||
if (Lara.meshPtrs[LM_RHAND] == Objects[ID_LARA_SKIN].meshIndex + LM_RHAND)
|
if (Lara.meshPtrs[LM_RHAND] == Objects[ID_LARA_SKIN].meshIndex + LM_RHAND)
|
||||||
{
|
{
|
||||||
Lara.meshPtrs[LM_RHAND] = Objects[WeaponObjectMesh(WEAPON_PISTOLS)].meshIndex + LM_RHAND;
|
Lara.meshPtrs[LM_RHAND] = Objects[WeaponObjectMesh(LaraItem, WEAPON_PISTOLS)].meshIndex + LM_RHAND;
|
||||||
Lara.holsterInfo.rightHolster = HOLSTER_SLOT::Empty;
|
Lara.holsterInfo.rightHolster = HOLSTER_SLOT::Empty;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -2049,7 +2049,7 @@ void GuiController::UseCurrentItem()
|
||||||
if (Lara.gunType != WEAPON_FLARE)
|
if (Lara.gunType != WEAPON_FLARE)
|
||||||
{
|
{
|
||||||
TrInput = IN_FLARE;
|
TrInput = IN_FLARE;
|
||||||
LaraGun();
|
LaraGun(LaraItem);
|
||||||
TrInput = 0;
|
TrInput = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -173,7 +173,7 @@ void DoPickup()
|
||||||
{
|
{
|
||||||
Lara.requestGunType = WEAPON_FLARE;
|
Lara.requestGunType = WEAPON_FLARE;
|
||||||
Lara.gunType = WEAPON_FLARE;
|
Lara.gunType = WEAPON_FLARE;
|
||||||
InitialiseNewWeapon();
|
InitialiseNewWeapon(LaraItem);
|
||||||
Lara.gunStatus = LG_SPECIAL;
|
Lara.gunStatus = LG_SPECIAL;
|
||||||
Lara.flareAge = (int)(item->data) & 0x7FFF;
|
Lara.flareAge = (int)(item->data) & 0x7FFF;
|
||||||
draw_flare_meshes(LaraItem);
|
draw_flare_meshes(LaraItem);
|
||||||
|
@ -190,7 +190,7 @@ void DoPickup()
|
||||||
{
|
{
|
||||||
Lara.requestGunType = WEAPON_FLARE;
|
Lara.requestGunType = WEAPON_FLARE;
|
||||||
Lara.gunType = WEAPON_FLARE;
|
Lara.gunType = WEAPON_FLARE;
|
||||||
InitialiseNewWeapon();
|
InitialiseNewWeapon(LaraItem);
|
||||||
Lara.gunStatus = LG_SPECIAL;
|
Lara.gunStatus = LG_SPECIAL;
|
||||||
Lara.flareAge = (short)(item->data) & 0x7FFF;
|
Lara.flareAge = (short)(item->data) & 0x7FFF;
|
||||||
KillItem(pickupitem);
|
KillItem(pickupitem);
|
||||||
|
|
|
@ -210,8 +210,8 @@ void SkidooGuns(ITEM_INFO* lara, ITEM_INFO* skidoo)
|
||||||
SKIDOO_INFO* skidooInfo = (SKIDOO_INFO*)skidoo->data;
|
SKIDOO_INFO* skidooInfo = (SKIDOO_INFO*)skidoo->data;
|
||||||
WEAPON_INFO* wepInfo = &Weapons[WEAPON_SNOWMOBILE];
|
WEAPON_INFO* wepInfo = &Weapons[WEAPON_SNOWMOBILE];
|
||||||
|
|
||||||
LaraGetNewTarget(wepInfo);
|
LaraGetNewTarget(lara, wepInfo);
|
||||||
AimWeapon(wepInfo, &laraInfo->rightArm);
|
AimWeapon(lara, wepInfo, &laraInfo->rightArm);
|
||||||
|
|
||||||
if (TrInput & SKIDOO_IN_FIRE && !skidoo->itemFlags[0])
|
if (TrInput & SKIDOO_IN_FIRE && !skidoo->itemFlags[0])
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue