Added small_spider fix

- Return early on ShivaHit if pos is not valid.
This commit is contained in:
TokyoSU 2023-01-21 11:18:01 +01:00
parent 20d0730c1a
commit 8242dcba50
2 changed files with 25 additions and 21 deletions

View file

@ -1157,12 +1157,16 @@ bool IsCreatureVaultAvailable(ItemInfo* item, int stepCount)
{
switch (stepCount)
{
case -4:
return item->ObjectNumber != ID_SMALL_SPIDER;
case -3:
return (item->ObjectNumber != ID_CIVVY &&
item->ObjectNumber != ID_MP_WITH_STICK &&
item->ObjectNumber != ID_YETI &&
item->ObjectNumber != ID_LIZARD &&
item->ObjectNumber != ID_APE);
item->ObjectNumber != ID_APE &&
item->ObjectNumber != ID_SMALL_SPIDER);
case -2:
return (item->ObjectNumber != ID_BADDY1 &&
@ -1171,7 +1175,8 @@ bool IsCreatureVaultAvailable(ItemInfo* item, int stepCount)
item->ObjectNumber != ID_MP_WITH_STICK &&
item->ObjectNumber != ID_YETI &&
item->ObjectNumber != ID_LIZARD &&
item->ObjectNumber != ID_APE);
item->ObjectNumber != ID_APE &&
item->ObjectNumber != ID_SMALL_SPIDER);
}
return true;
@ -1189,12 +1194,11 @@ int CreatureVault(short itemNumber, short angle, int vault, int shift)
CreatureAnimation(itemNumber, angle, 0);
// FIXME: Add vault down animations for Von Croy and baddies.
if (item->Floor > (y + CLICK(4.5f)))
{
vault = 0;
}
else if (item->Floor > (y + CLICK(3.5f)))
else if (item->Floor > (y + CLICK(3.5f)) && IsCreatureVaultAvailable(item, -4))
{
vault = -4;
}

View file

@ -464,24 +464,24 @@ namespace TEN::Entities::Creatures::TR3
void ShivaHit(ItemInfo& target, ItemInfo& source, std::optional<GameVector> pos, int damage, bool isExplosive, int jointIndex)
{
if (pos.has_value())
{
const auto& player = *GetLaraInfo(&source);
const auto& object = Objects[target.ObjectNumber];
if (!pos.has_value())
return;
// If guarded, ricochet without damage.
if ((target.Animation.ActiveState == SHIVA_STATE_WALK_FORWARD_GUARDING ||
target.Animation.ActiveState == SHIVA_STATE_GUARD_IDLE))
{
SoundEffect(SFX_TR4_BADDY_SWORD_RICOCHET, &target.Pose);
TriggerRicochetSpark(*pos, source.Pose.Orientation.y, 3, 0);
}
// Do basic hit effect.
else if (object.hitEffect == HitEffect::Blood)
{
DoBloodSplat(pos->x, pos->y, pos->z, (GetRandomControl() & 3) + 3, source.Pose.Orientation.y, pos->RoomNumber);
DoItemHit(&target, damage, isExplosive);
}
const auto& player = *GetLaraInfo(&source);
const auto& object = Objects[target.ObjectNumber];
// If guarded, ricochet without damage.
if ((target.Animation.ActiveState == SHIVA_STATE_WALK_FORWARD_GUARDING ||
target.Animation.ActiveState == SHIVA_STATE_GUARD_IDLE))
{
SoundEffect(SFX_TR4_BADDY_SWORD_RICOCHET, &target.Pose);
TriggerRicochetSpark(*pos, source.Pose.Orientation.y, 3, 0);
}
// Do basic hit effect.
else if (object.hitEffect == HitEffect::Blood)
{
DoBloodSplat(pos->x, pos->y, pos->z, (GetRandomControl() & 3) + 3, source.Pose.Orientation.y, pos->RoomNumber);
DoItemHit(&target, damage, isExplosive);
}
}