diff --git a/TombEngine/Game/control/box.cpp b/TombEngine/Game/control/box.cpp index be9d49db9..113fa58ee 100644 --- a/TombEngine/Game/control/box.cpp +++ b/TombEngine/Game/control/box.cpp @@ -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; } diff --git a/TombEngine/Objects/TR3/Entity/tr3_shiva.cpp b/TombEngine/Objects/TR3/Entity/tr3_shiva.cpp index 868ff77e4..8f6c99da7 100644 --- a/TombEngine/Objects/TR3/Entity/tr3_shiva.cpp +++ b/TombEngine/Objects/TR3/Entity/tr3_shiva.cpp @@ -464,24 +464,24 @@ namespace TEN::Entities::Creatures::TR3 void ShivaHit(ItemInfo& target, ItemInfo& source, std::optional 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); } }