diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs index 8e75cc189a..c5cb63a0f5 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs @@ -5994,6 +5994,20 @@ public void StopClimbing() AnimController.StopClimbing(); ReleaseSecondaryItem(); } + public void TryFlipCharacter() + { + if (AnimController is FishAnimController fishAnimController) + { + if (fishAnimController.CurrentFishAnimation.Flip) + { + fishAnimController.Flip(); + } + } + else + { + AnimController.Flip(); + } + } } class ActiveTeamChange diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionHusk.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionHusk.cs index fbed88ebec..2697e5155e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionHusk.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionHusk.cs @@ -385,6 +385,10 @@ private IEnumerable CreateAIHusk() } husk.SetStun(5); + if (character.IsFlipped) + { + husk.TryFlipCharacter(); + } yield return new WaitForSeconds(5, false); #if CLIENT husk?.PlaySound(CharacterSound.SoundType.Idle); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Level.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Level.cs index ef426fdb44..5ba2bd926a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Level.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Level.cs @@ -4973,6 +4973,10 @@ public void SpawnCorpses() corpse.EnableDespawn = false; selectedPrefab.GiveItems(corpse, wreck, sp); bool spawnAsHusk = Rand.Value() <= Loaded.GenerationParams.HuskProbability; + if(Rand.Value() <= 0.5) + { + corpse.TryFlipCharacter(); // Random chance to spawn flipped + } if (spawnAsHusk) { corpse.TurnIntoHusk(playDead: true); diff --git a/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/StatusEffect.cs b/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/StatusEffect.cs index b85b390807..bdcb7408c7 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/StatusEffect.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/StatusEffect.cs @@ -638,7 +638,7 @@ public AITrigger(XElement element) private readonly int useItemCount; - private readonly bool removeItem, dropContainedItems, dropItem, removeCharacter, breakLimb, hideLimb; + private readonly bool removeItem, dropContainedItems, dropItem, removeCharacter, breakLimb, hideLimb, flipCharacter; private readonly float hideLimbTimer; /// @@ -1014,6 +1014,9 @@ protected StatusEffect(ContentXElement element, string parentDebugName) removeCharacter = true; containerForItemsOnCharacterRemoval = subElement.GetAttributeIdentifier("moveitemstocontainer", Identifier.Empty); break; + case "flipcharacter": + flipCharacter = true; + break; case "breaklimb": breakLimb = true; break; @@ -1671,6 +1674,9 @@ protected void Apply(float deltaTime, Entity entity, IReadOnlyList 0) { Character useTargetCharacter = null; @@ -1748,6 +1754,17 @@ protected void Apply(float deltaTime, Entity entity, IReadOnlyList