Fishy swarmers: Carp content and Space Dragon! (#7395)
Co-authored-by: mirrorcult <lunarautomaton6@gmail.com> Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com> Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
@@ -1,109 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using Content.Shared.MobState;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Client.GameObjects;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.IoC;
|
||||
using Robust.Shared.Serialization;
|
||||
using Robust.Shared.Serialization.Manager.Attributes;
|
||||
using DrawDepth = Content.Shared.DrawDepth.DrawDepth;
|
||||
|
||||
namespace Content.Client.MobState
|
||||
{
|
||||
[UsedImplicitly]
|
||||
public sealed class DamageStateVisualizer : AppearanceVisualizer, ISerializationHooks
|
||||
{
|
||||
private DamageState _data = DamageState.Alive;
|
||||
private Dictionary<DamageState, string> _stateMap = new();
|
||||
private int? _originalDrawDepth;
|
||||
|
||||
[DataField("normal")]
|
||||
private string? _normal;
|
||||
|
||||
[DataField("crit")]
|
||||
private string? _crit;
|
||||
|
||||
[DataField("dead")]
|
||||
private string? _dead;
|
||||
|
||||
/// <summary>
|
||||
/// Should noRot be turned off when crit / dead.
|
||||
/// </summary>
|
||||
[DataField("rotate")]
|
||||
private bool _rotate;
|
||||
|
||||
void ISerializationHooks.BeforeSerialization()
|
||||
{
|
||||
_stateMap.TryGetValue(DamageState.Alive, out _normal);
|
||||
_stateMap.TryGetValue(DamageState.Critical, out _crit);
|
||||
_stateMap.TryGetValue(DamageState.Dead, out _dead);
|
||||
}
|
||||
|
||||
void ISerializationHooks.AfterDeserialization()
|
||||
{
|
||||
if (_normal != null)
|
||||
{
|
||||
_stateMap.Add(DamageState.Alive, _normal);
|
||||
}
|
||||
|
||||
if (_crit != null)
|
||||
{
|
||||
_stateMap.Add(DamageState.Critical, _crit);
|
||||
}
|
||||
|
||||
if (_dead != null)
|
||||
{
|
||||
_stateMap.Add(DamageState.Dead, _dead);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnChangeData(AppearanceComponent component)
|
||||
{
|
||||
base.OnChangeData(component);
|
||||
var sprite = IoCManager.Resolve<IEntityManager>().GetComponent<ISpriteComponent>(component.Owner);
|
||||
if (!component.TryGetData(DamageStateVisuals.State, out DamageState data))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (_data == data)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_data = data;
|
||||
|
||||
if (_rotate)
|
||||
{
|
||||
sprite.NoRotation = data switch
|
||||
{
|
||||
DamageState.Critical => false,
|
||||
DamageState.Dead => false,
|
||||
_ => true
|
||||
};
|
||||
}
|
||||
|
||||
if (_stateMap.TryGetValue(_data, out var state))
|
||||
{
|
||||
sprite.LayerSetState(DamageStateVisualLayers.Base, state);
|
||||
}
|
||||
|
||||
// So they don't draw over mobs anymore
|
||||
if (_data == DamageState.Dead && sprite.DrawDepth > (int) DrawDepth.Items)
|
||||
{
|
||||
_originalDrawDepth = sprite.DrawDepth;
|
||||
sprite.DrawDepth = (int) DrawDepth.Items;
|
||||
}
|
||||
else if (_originalDrawDepth != null)
|
||||
{
|
||||
sprite.DrawDepth = _originalDrawDepth.Value;
|
||||
_originalDrawDepth = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public enum DamageStateVisualLayers : byte
|
||||
{
|
||||
Base
|
||||
}
|
||||
}
|
||||
57
Content.Client/MobState/DamageStateVisualizerSystem.cs
Normal file
@@ -0,0 +1,57 @@
|
||||
using Content.Shared.MobState;
|
||||
using Robust.Client.GameObjects;
|
||||
using DrawDepth = Content.Shared.DrawDepth.DrawDepth;
|
||||
|
||||
namespace Content.Client.MobState;
|
||||
|
||||
public sealed class DamageStateVisualizerSystem : VisualizerSystem<DamageStateVisualsComponent>
|
||||
{
|
||||
protected override void OnAppearanceChange(EntityUid uid, DamageStateVisualsComponent component, ref AppearanceChangeEvent args)
|
||||
{
|
||||
var sprite = args.Sprite;
|
||||
|
||||
if (sprite == null || !args.Component.TryGetData(DamageStateVisuals.State, out DamageState data))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!component.States.TryGetValue(data, out var layers))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (component.Rotate)
|
||||
{
|
||||
sprite.NoRotation = data switch
|
||||
{
|
||||
DamageState.Critical => false,
|
||||
DamageState.Dead => false,
|
||||
_ => true
|
||||
};
|
||||
}
|
||||
|
||||
// Brain no worky rn so this was just easier.
|
||||
foreach (var layer in sprite.AllLayers)
|
||||
{
|
||||
layer.Visible = false;
|
||||
}
|
||||
|
||||
foreach (var (key, state) in layers)
|
||||
{
|
||||
sprite.LayerSetVisible(key, true);
|
||||
sprite.LayerSetState(key, state);
|
||||
}
|
||||
|
||||
// So they don't draw over mobs anymore
|
||||
if (data == DamageState.Dead && sprite.DrawDepth > (int) DrawDepth.Items)
|
||||
{
|
||||
component.OriginalDrawDepth = sprite.DrawDepth;
|
||||
sprite.DrawDepth = (int) DrawDepth.Items;
|
||||
}
|
||||
else if (component.OriginalDrawDepth != null)
|
||||
{
|
||||
sprite.DrawDepth = component.OriginalDrawDepth.Value;
|
||||
component. OriginalDrawDepth = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
22
Content.Client/MobState/DamageStateVisualsComponent.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
using Content.Shared.MobState;
|
||||
|
||||
namespace Content.Client.MobState;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed class DamageStateVisualsComponent : Component
|
||||
{
|
||||
public int? OriginalDrawDepth;
|
||||
|
||||
[DataField("states")] public Dictionary<DamageState, Dictionary<string, string>> States = new();
|
||||
|
||||
/// <summary>
|
||||
/// Should noRot be turned off when crit / dead.
|
||||
/// </summary>
|
||||
[DataField("rotate")] public bool Rotate;
|
||||
}
|
||||
|
||||
public enum DamageStateVisualLayers : byte
|
||||
{
|
||||
Base,
|
||||
BaseUnshaded,
|
||||
}
|
||||
80
Content.Server/Dragon/DragonComponent.cs
Normal file
@@ -0,0 +1,80 @@
|
||||
using Content.Shared.Actions.ActionTypes;
|
||||
using Robust.Shared.Containers;
|
||||
using System.Threading;
|
||||
using Content.Shared.Actions;
|
||||
using Content.Shared.Chemistry.Reagent;
|
||||
using Content.Shared.Sound;
|
||||
using Content.Shared.Storage;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
||||
|
||||
namespace Content.Server.Dragon
|
||||
{
|
||||
[RegisterComponent]
|
||||
public sealed class DragonComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// The chemical ID injected upon devouring
|
||||
/// </summary>
|
||||
[DataField("devourChemical", customTypeSerializer: typeof(PrototypeIdSerializer<ReagentPrototype>))]
|
||||
public string DevourChem = "Ichor";
|
||||
|
||||
/// <summary>
|
||||
/// The amount of ichor injected per devour
|
||||
/// </summary>
|
||||
[DataField("devourHealRate")]
|
||||
public float DevourHealRate = 15f;
|
||||
|
||||
[DataField("devourActionId", customTypeSerializer: typeof(PrototypeIdSerializer<EntityTargetActionPrototype>))]
|
||||
public string DevourActionId = "DragonDevour";
|
||||
|
||||
[DataField("devourAction")]
|
||||
public EntityTargetAction? DevourAction;
|
||||
|
||||
[DataField("spawnActionId", customTypeSerializer: typeof(PrototypeIdSerializer<InstantActionPrototype>))]
|
||||
public string SpawnActionId = "DragonSpawn";
|
||||
|
||||
[DataField("spawnAction")]
|
||||
public InstantAction? SpawnAction;
|
||||
|
||||
/// <summary>
|
||||
/// The amount of time it takes to devour something
|
||||
/// <remarks>
|
||||
/// NOTE: original intended design was to increase this proportionally with damage thresholds, but those proved quite difficult to get consistently. right now it devours the structure at a fixed timer.
|
||||
/// </remarks>
|
||||
/// </summary>
|
||||
[DataField("devourTime")]
|
||||
public float DevourTime = 15f;
|
||||
|
||||
[DataField("spawnCount")] public int SpawnsLeft = 2;
|
||||
|
||||
[DataField("maxSpawnCount")] public int MaxSpawns = 2;
|
||||
|
||||
[DataField("spawnProto", customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>))]
|
||||
public string? SpawnPrototype = "MobCarpDragon";
|
||||
|
||||
[ViewVariables(VVAccess.ReadWrite), DataField("soundDeath")]
|
||||
public SoundSpecifier? SoundDeath = new SoundPathSpecifier("/Audio/Animals/space_dragon_roar.ogg");
|
||||
|
||||
[ViewVariables(VVAccess.ReadWrite), DataField("soundDevour")]
|
||||
public SoundSpecifier? SoundDevour = new SoundPathSpecifier("/Audio/Effects/demon_consume.ogg");
|
||||
|
||||
[ViewVariables(VVAccess.ReadWrite), DataField("soundStructureDevour")]
|
||||
public SoundSpecifier? SoundStructureDevour = new SoundPathSpecifier("/Audio/Machines/airlock_creaking.ogg");
|
||||
|
||||
[ViewVariables(VVAccess.ReadWrite), DataField("soundRoar")]
|
||||
public SoundSpecifier? SoundRoar =
|
||||
new SoundPathSpecifier("/Audio/Animals/space_dragon_roar.ogg");
|
||||
|
||||
public CancellationTokenSource? CancelToken;
|
||||
|
||||
/// <summary>
|
||||
/// Where the entities go when dragon devours them, empties when the dragon is butchered.
|
||||
/// </summary>
|
||||
public Container DragonStomach = default!;
|
||||
}
|
||||
|
||||
public sealed class DragonDevourActionEvent : EntityTargetActionEvent {}
|
||||
|
||||
public sealed class DragonSpawnActionEvent : InstantActionEvent {}
|
||||
}
|
||||
188
Content.Server/Dragon/DragonSystem.cs
Normal file
@@ -0,0 +1,188 @@
|
||||
using Content.Server.Body.Systems;
|
||||
using Content.Server.DoAfter;
|
||||
using Content.Server.Popups;
|
||||
using Content.Shared.Actions;
|
||||
using Content.Shared.CharacterAppearance.Components;
|
||||
using Content.Shared.Chemistry.Components;
|
||||
using Content.Shared.Damage;
|
||||
using Content.Shared.MobState;
|
||||
using Content.Shared.MobState.Components;
|
||||
using Content.Shared.Tag;
|
||||
using Robust.Shared.Audio;
|
||||
using Robust.Shared.Containers;
|
||||
using Robust.Shared.Player;
|
||||
using System.Threading;
|
||||
using Content.Shared.MobState.State;
|
||||
using Content.Shared.Doors.Components;
|
||||
|
||||
namespace Content.Server.Dragon
|
||||
{
|
||||
public sealed class DragonSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly SharedActionsSystem _actionsSystem = default!;
|
||||
[Dependency] private readonly DoAfterSystem _doAfterSystem = default!;
|
||||
[Dependency] private readonly PopupSystem _popupSystem = default!;
|
||||
[Dependency] private readonly BloodstreamSystem _bloodstreamSystem = default!;
|
||||
[Dependency] private readonly SharedContainerSystem _containerSystem = default!;
|
||||
[Dependency] private readonly TagSystem _tagSystem = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<DragonComponent, ComponentStartup>(OnStartup);
|
||||
SubscribeLocalEvent<DragonComponent, DragonDevourActionEvent>(OnDevourAction);
|
||||
SubscribeLocalEvent<DragonComponent, DragonSpawnActionEvent>(OnDragonSpawnAction);
|
||||
|
||||
SubscribeLocalEvent<DragonComponent, DragonDevourComplete>(OnDragonDevourComplete);
|
||||
SubscribeLocalEvent<DragonComponent, DragonDevourCancelledEvent>(OnDragonDevourCancelled);
|
||||
SubscribeLocalEvent<DragonComponent, MobStateChangedEvent>(OnMobStateChanged);
|
||||
}
|
||||
|
||||
private void OnMobStateChanged(EntityUid uid, DragonComponent component, MobStateChangedEvent args)
|
||||
{
|
||||
//Empties the stomach upon death
|
||||
//TODO: Do this when the dragon gets butchered instead
|
||||
if (args.CurrentMobState.IsDead())
|
||||
{
|
||||
if (component.SoundDeath != null)
|
||||
SoundSystem.Play(component.SoundDeath.GetSound(), Filter.Pvs(uid, entityManager: EntityManager));
|
||||
|
||||
component.DragonStomach.EmptyContainer();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDragonDevourCancelled(EntityUid uid, DragonComponent component, DragonDevourCancelledEvent args)
|
||||
{
|
||||
component.CancelToken = null;
|
||||
}
|
||||
|
||||
private void OnDragonDevourComplete(EntityUid uid, DragonComponent component, DragonDevourComplete args)
|
||||
{
|
||||
component.CancelToken = null;
|
||||
//TODO: Figure out a better way of removing structures via devour that still entails standing still and waiting for a DoAfter. Somehow.
|
||||
EntityManager.QueueDeleteEntity(args.Target);
|
||||
|
||||
if (component.SoundDevour != null)
|
||||
SoundSystem.Play(component.SoundDevour.GetSound(), Filter.Pvs(args.User, entityManager: EntityManager));
|
||||
}
|
||||
|
||||
private void OnStartup(EntityUid uid, DragonComponent component, ComponentStartup args)
|
||||
{
|
||||
component.SpawnsLeft = Math.Min(component.SpawnsLeft, component.MaxSpawns);
|
||||
|
||||
//Dragon doesn't actually chew, since he sends targets right into his stomach.
|
||||
//I did it mom, I added ERP content into upstream. Legally!
|
||||
component.DragonStomach = _containerSystem.EnsureContainer<Container>(uid, "dragon_stomach");
|
||||
|
||||
if (component.DevourAction != null)
|
||||
_actionsSystem.AddAction(uid, component.DevourAction, null);
|
||||
|
||||
if (component.SpawnAction != null)
|
||||
_actionsSystem.AddAction(uid, component.SpawnAction, null);
|
||||
|
||||
if (component.SoundRoar != null)
|
||||
SoundSystem.Play(component.SoundRoar.GetSound(), Filter.Pvs(uid, 4f, EntityManager));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The devour action
|
||||
/// </summary>
|
||||
private void OnDevourAction(EntityUid dragonuid, DragonComponent component, DragonDevourActionEvent args)
|
||||
{
|
||||
if (component.CancelToken != null || args.Handled) return;
|
||||
|
||||
args.Handled = true;
|
||||
var target = args.Target;
|
||||
var ichorInjection = new Solution(component.DevourChem, component.DevourHealRate);
|
||||
|
||||
//Check if the target is valid. The effects should be possible to accomplish on either a wall or a body.
|
||||
//Eating bodies is instant, the wall requires a doAfter.
|
||||
|
||||
if (EntityManager.TryGetComponent(target, out MobStateComponent? targetState))
|
||||
{
|
||||
switch (targetState.CurrentState)
|
||||
{
|
||||
case SharedCriticalMobState:
|
||||
case SharedDeadMobState:
|
||||
if (!EntityManager.HasComponent<DamageableComponent>(dragonuid)) return;
|
||||
|
||||
//Humanoid devours allow dragon to get eggs, corpses included
|
||||
if (EntityManager.HasComponent<HumanoidAppearanceComponent>(target))
|
||||
{
|
||||
// Add a spawn for a consumed humanoid
|
||||
component.SpawnsLeft = Math.Min(component.SpawnsLeft + 1, component.MaxSpawns);
|
||||
}
|
||||
//Non-humanoid mobs can only heal dragon for half the normal amount, with no additional spawn tickets
|
||||
else
|
||||
{
|
||||
ichorInjection.ScaleSolution(0.5f);
|
||||
}
|
||||
|
||||
_bloodstreamSystem.TryAddToChemicals(dragonuid, ichorInjection);
|
||||
component.DragonStomach.Insert(target);
|
||||
|
||||
if (component.SoundDevour != null)
|
||||
SoundSystem.Play(component.SoundDevour.GetSound(), Filter.Pvs(dragonuid, entityManager: EntityManager));
|
||||
|
||||
return;
|
||||
default:
|
||||
_popupSystem.PopupEntity(Loc.GetString("devour-action-popup-message-fail-target-alive"), dragonuid, Filter.Entities(dragonuid));
|
||||
break;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Absolutely ass solution but requires less yaml fuckery
|
||||
// If it's a door (firelock, airlock, windoor), Wall or Window, dragon can eat it.
|
||||
if (_tagSystem.HasTag(target, "Wall") || (_tagSystem.HasTag(target, "Window") || EntityManager.HasComponent<DoorComponent>(target)))
|
||||
{
|
||||
_popupSystem.PopupEntity(Loc.GetString("devour-action-popup-message-structure"), dragonuid, Filter.Entities(dragonuid));
|
||||
|
||||
if (component.SoundStructureDevour != null)
|
||||
SoundSystem.Play(component.SoundStructureDevour.GetSound(), Filter.Pvs(dragonuid, entityManager: EntityManager));
|
||||
|
||||
component.CancelToken = new CancellationTokenSource();
|
||||
|
||||
_doAfterSystem.DoAfter(new DoAfterEventArgs(dragonuid, component.DevourTime, component.CancelToken.Token, target)
|
||||
{
|
||||
UserFinishedEvent = new DragonDevourComplete(dragonuid, target),
|
||||
UserCancelledEvent = new DragonDevourCancelledEvent(),
|
||||
BreakOnTargetMove = true,
|
||||
BreakOnUserMove = true,
|
||||
BreakOnStun = true,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDragonSpawnAction(EntityUid dragonuid, DragonComponent component, DragonSpawnActionEvent args)
|
||||
{
|
||||
if (component.SpawnPrototype == null) return;
|
||||
|
||||
// If dragon has spawns then add one.
|
||||
if (component.SpawnsLeft > 0)
|
||||
{
|
||||
Spawn(component.SpawnPrototype, Transform(dragonuid).Coordinates);
|
||||
component.SpawnsLeft--;
|
||||
return;
|
||||
}
|
||||
|
||||
_popupSystem.PopupEntity(Loc.GetString("dragon-spawn-action-popup-message-fail-no-eggs"), dragonuid, Filter.Entities(dragonuid));
|
||||
}
|
||||
|
||||
private sealed class DragonDevourComplete : EntityEventArgs
|
||||
{
|
||||
public EntityUid User { get; }
|
||||
public EntityUid Target { get; }
|
||||
|
||||
public DragonDevourComplete(EntityUid user, EntityUid target)
|
||||
{
|
||||
User = user;
|
||||
Target = target;
|
||||
}
|
||||
}
|
||||
|
||||
private sealed class DragonDevourCancelledEvent : EntityEventArgs {}
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@ namespace Content.Server.Entry
|
||||
"InteractionOutline",
|
||||
"MeleeWeaponArcAnimation",
|
||||
"EffectVisuals",
|
||||
"DamageStateVisuals",
|
||||
"AnimationsTest",
|
||||
"ItemStatus",
|
||||
"VehicleVisuals",
|
||||
|
||||
@@ -4,39 +4,42 @@ licensed under CC BY-NC-SA 3.0
|
||||
|
||||
The following sounds were used from freesound:
|
||||
|
||||
cat_meow.ogg: modified from "Meow 4.wav" by freesound user "TRNGLE" (https://freesound.org/people/TRNGLE/sounds/368006/) licensed under CCBY 3.0. The original audio was trimmed, split to mono, and converted from WAV to OGG format.
|
||||
cat_meow.ogg: modified from "Meow 4.wav" by freesound user "TRNGLE" (https://freesound.org/people/TRNGLE/sounds/368006/) licensed under CCBY 3.0. The original audio was trimmed, split to mono, and converted from WAV to OGG format.
|
||||
|
||||
cat_hiss.ogg: modified from "catHisses1.wav" by freesound user "Zabuhailo" (https://freesound.org/people/Zabuhailo/sounds/146963/) licensed under CC0 1.0 (public domain). The original audio was trimmed and converted from WAV to OGG format.
|
||||
cat_hiss.ogg: modified from "catHisses1.wav" by freesound user "Zabuhailo" (https://freesound.org/people/Zabuhailo/sounds/146963/) licensed under CC0 1.0 (public domain). The original audio was trimmed and converted from WAV to OGG format.
|
||||
|
||||
small_dog_bark_happy.ogg: modified from "Dog bark2.wav" by freesound user "MisterTood" (https://freesound.org/people/MisterTood/sounds/9032/) licensed under CC0 1.0 (public domain). The original audio was trimmed and converted from WAV to OGG format.
|
||||
small_dog_bark_happy.ogg: modified from "Dog bark2.wav" by freesound user "MisterTood" (https://freesound.org/people/MisterTood/sounds/9032/) licensed under CC0 1.0 (public domain). The original audio was trimmed and converted from WAV to OGG format.
|
||||
|
||||
duck_quack_happy.ogg: modified from "Duck Quack - Sound Effect (HD).mp3" by freesound user "Tabby+Gus." (https://freesound.org/people/Tabby+Gus./sounds/515408/) licensed under CC0 1.0 (public domain). The original audio was trimmed, looped, split to mono, and converted from MP3 to OGG format.
|
||||
duck_quack_happy.ogg: modified from "Duck Quack - Sound Effect (HD).mp3" by freesound user "Tabby+Gus." (https://freesound.org/people/Tabby+Gus./sounds/515408/) licensed under CC0 1.0 (public domain). The original audio was trimmed, looped, split to mono, and converted from MP3 to OGG format.
|
||||
|
||||
chicken_cluck_happy.ogg: modified from "Chicken Single Alarm Call" by freesound user "Rudmer_Rotteveel" (https://freesound.org/people/Rudmer_Rotteveel/sounds/316920/) licensed under CC0 1.0 (public domain). The original audio was trimmed and converted from WAV to OGG format.
|
||||
chicken_cluck_happy.ogg: modified from "Chicken Single Alarm Call" by freesound user "Rudmer_Rotteveel" (https://freesound.org/people/Rudmer_Rotteveel/sounds/316920/) licensed under CC0 1.0 (public domain). The original audio was trimmed and converted from WAV to OGG format.
|
||||
|
||||
ferret_happy.ogg: modified from "Ferret" by freesound user "J.Zazvurek" (https://freesound.org/people/J.Zazvurek/sounds/155115/) licensed under CC BY 3.0. The original audio was trimmed and converted from WAV to OGG format.
|
||||
ferret_happy.ogg: modified from "Ferret" by freesound user "J.Zazvurek" (https://freesound.org/people/J.Zazvurek/sounds/155115/) licensed under CC BY 3.0. The original audio was trimmed and converted from WAV to OGG format.
|
||||
|
||||
mouse_squeak.ogg: modified from "Cartoon - Bat / Mouse Squeak" by freesound user "Breviceps" (https://freesound.org/people/Breviceps/sounds/445958/) licensed under CC0 1.0 (public domain). The original audio was converted from WAV to OGG format.
|
||||
mouse_squeak.ogg: modified from "Cartoon - Bat / Mouse Squeak" by freesound user "Breviceps" (https://freesound.org/people/Breviceps/sounds/445958/) licensed under CC0 1.0 (public domain). The original audio was converted from WAV to OGG format.
|
||||
|
||||
sloth_squeak.ogg: modified from "squeakfinal.wav" by freesound user "Higgs01" (https://freesound.org/people/Higgs01/sounds/428114/) licensed under CC0 1.0 (Public domain dedication). The original audio was converted from WAV to OFF format AND converted from stereo to mono.
|
||||
sloth_squeak.ogg: modified from "squeakfinal.wav" by freesound user "Higgs01" (https://freesound.org/people/Higgs01/sounds/428114/) licensed under CC0 1.0 (Public domain dedication). The original audio was converted from WAV to OFF format AND converted from stereo to mono.
|
||||
|
||||
parrot_raught.ogg: modified and used from "Parrot 1 raught 2.wav" by freesound user "Coral_Island_Studios" (https://freesound.org/people/Coral_Island_Studios/sounds/432588/) licensed under CC BY 3.0. The original audio was converted from WAV to OGG format.
|
||||
parrot_raught.ogg: modified and used from "Parrot 1 raught 2.wav" by freesound user "Coral_Island_Studios" (https://freesound.org/people/Coral_Island_Studios/sounds/432588/) licensed under CC BY 3.0. The original audio was converted from WAV to OGG format.
|
||||
|
||||
fox_squeak.ogg: modified from "Video Game Squeak" by freesound user "Breviceps" (https://freesound.org/people/Breviceps/sounds/468442/) licensed under CC0 1.0. The original audio was converted from WAV to OGG format
|
||||
fox_squeak.ogg: modified from "Video Game Squeak" by freesound user "Breviceps" (https://freesound.org/people/Breviceps/sounds/468442/) licensed under CC0 1.0. The original audio was converted from WAV to OGG format
|
||||
|
||||
frog_ribbit.ogg: original audio created by freesound user "egomassive" (https://freesound.org/people/egomassive/sounds/536759/). licensed under licensed under CC0 1.0
|
||||
frog_ribbit.ogg: original audio created by freesound user "egomassive" (https://freesound.org/people/egomassive/sounds/536759/). licensed under licensed under CC0 1.0
|
||||
|
||||
goose_honk.ogg: modified from " Bird Honk - 1" by freesound user "SpaceJoe" (https://freesound.org/people/SpaceJoe/sounds/510940/) licensed under CC0 1.0. The originial audio was converted from WAV to OGG format.
|
||||
goose_honk.ogg: modified from " Bird Honk - 1" by freesound user "SpaceJoe" (https://freesound.org/people/SpaceJoe/sounds/510940/) licensed under CC0 1.0. The originial audio was converted from WAV to OGG format.
|
||||
|
||||
snake_hiss.ogg: modified from "hissing snake sound effect" by freesound user "Garuda1982" (https://freesound.org/people/Garuda1982/sounds/541656/) licensed under CC BY 4.0. The original audio was convertred from WAV to OGG format.
|
||||
snake_hiss.ogg: modified from "hissing snake sound effect" by freesound user "Garuda1982" (https://freesound.org/people/Garuda1982/sounds/541656/) licensed under CC BY 4.0. The original audio was convertred from WAV to OGG format.
|
||||
|
||||
The following sounds are taken from TGstation github (licensed under CC by 3.0):
|
||||
|
||||
space_dragon_roar.ogg: taken at https://github.com/tgstation/tgstation/commit/d4f678a1772007ff8d7eddd21cf7218c8e07bfc0
|
||||
|
||||
The following sounds were used from youtube:
|
||||
|
||||
penguin_squawk.ogg: audio is recorded/created by youtube user "ProSounds" (https://youtu.be/Anr35RbBL3Y) licensed under CC BY 3.0. The original audio was trimmed and converted from MP3 to OGG format.
|
||||
penguin_squawk.ogg: audio is recorded/created by youtube user "ProSounds" (https://youtu.be/Anr35RbBL3Y) licensed under CC BY 3.0. The original audio was trimmed and converted from MP3 to OGG format.
|
||||
|
||||
raccoon_squeak.ogg: audio is recorded by youtube user "jnargus" (https://youtu.be/BGjFP1CP7E0) licensed under CC by 3.0
|
||||
raccoon_squeak.ogg: audio is recorded by youtube user "jnargus" (https://youtu.be/BGjFP1CP7E0) licensed under CC by 3.0
|
||||
|
||||
goat_bah.ogg: audio is created by youtube user "Winry Marini" (https://youtu.be/QIhwzsk5bww) licensed under CC BY 3.0
|
||||
|
||||
lizard_happy.ogg: audio created by youtube user "Nagaty Studio" (https://youtu.be/I7CX0AS8RNI) licensed under CC by 3.0.
|
||||
goat_bah.ogg: audio is created by youtube user "Winry Marini" (https://youtu.be/QIhwzsk5bww) licensed under CC BY 3.0
|
||||
|
||||
lizard_happy.ogg: audio created by youtube user "Nagaty Studio" (https://youtu.be/I7CX0AS8RNI) licensed under CC by 3.0.
|
||||
|
||||
BIN
Resources/Audio/Animals/space_dragon_roar.ogg
Normal file
BIN
Resources/Audio/Effects/demon_attack1.ogg
Normal file
BIN
Resources/Audio/Effects/demon_consume.ogg
Normal file
BIN
Resources/Audio/Effects/demon_dies.ogg
Normal file
@@ -31,3 +31,11 @@ minibombcountdown.ogg taken from Thomas Evdokimoff at https://freesound.org/peop
|
||||
bite.ogg take from https://github.com/tgstation/tgstation/commit/d4f678a1772007ff8d7eddd21cf7218c8e07bfc0
|
||||
|
||||
bone_rattle.ogg licensed under CC0 1.0 and taken from spookymodem at https://freesound.org/people/spookymodem/sounds/202102/
|
||||
|
||||
The following sounds are taken from TGstation github (licensed under CC by 3.0):
|
||||
|
||||
demon_attack1.ogg: taken at https://github.com/tgstation/tgstation/commit/d4f678a1772007ff8d7eddd21cf7218c8e07bfc0
|
||||
|
||||
demon_consume.ogg: taken at https://github.com/tgstation/tgstation/commit/d4f678a1772007ff8d7eddd21cf7218c8e07bfc0
|
||||
|
||||
demon_dies.ogg: taken at https://github.com/tgstation/tgstation/commit/d4f678a1772007ff8d7eddd21cf7218c8e07bfc0
|
||||
|
||||
12
Resources/Locale/en-US/actions/actions/dragon.ftl
Normal file
@@ -0,0 +1,12 @@
|
||||
devour-action-popup-message-structure = Your jaws dig into thick material..
|
||||
devour-action-popup-message-fail-target-not-valid = That doesn't look particularly edible.
|
||||
devour-action-popup-message-fail-target-alive = You can't consume creatures that are alive!
|
||||
|
||||
dragon-spawn-action-popup-message-fail-no-eggs = You don't have the stamina to create a carp!
|
||||
|
||||
|
||||
action-name-devour = [color=red]Devour[/color]
|
||||
action-description-devour = Attempt to break a structure with your jaws or swallow a creature.
|
||||
|
||||
action-name-carp-birth = Summon carp
|
||||
action-description-carp-birth = Summon a carp to aid you at seizing the station!
|
||||
@@ -2,14 +2,16 @@
|
||||
# you'll likely have to tag its metabolizers with something other than Human.
|
||||
|
||||
- type: metabolizerType
|
||||
id: Human
|
||||
id: Animal
|
||||
|
||||
- type: metabolizerType
|
||||
id: Animal
|
||||
id: Dragon
|
||||
|
||||
- type: metabolizerType
|
||||
id: Human
|
||||
|
||||
- type: metabolizerType
|
||||
id: Slime
|
||||
|
||||
- type: metabolizerType
|
||||
id: Vox
|
||||
|
||||
|
||||
@@ -29,12 +29,14 @@
|
||||
- FlyingMobMask
|
||||
layer:
|
||||
- FlyingMobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: bat
|
||||
crit: dead
|
||||
dead: dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: bat
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeat
|
||||
@@ -97,11 +99,15 @@
|
||||
5: !type:CriticalMobState {}
|
||||
10: !type:DeadMobState {}
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: 0
|
||||
crit: dead
|
||||
dead: dead
|
||||
- type: DamageStateVisuals
|
||||
rotate: true
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: 0
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
- type: Tag
|
||||
tags:
|
||||
- Bee
|
||||
@@ -153,11 +159,14 @@
|
||||
state: chicken-0
|
||||
sprite: Mobs/Animals/chicken.rsi
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: chicken-0
|
||||
crit: dead-0
|
||||
dead: dead-0
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: chicken-0
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead-0
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead-0
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeatChicken
|
||||
@@ -184,11 +193,14 @@
|
||||
state: duck-0
|
||||
sprite: Mobs/Animals/duck.rsi
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: duck-0
|
||||
crit: dead-0
|
||||
dead: dead-0
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: duck-0
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead-0
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead-0
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeatDuck
|
||||
@@ -215,11 +227,14 @@
|
||||
state: duck-1
|
||||
sprite: Mobs/Animals/duck.rsi
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: duck-1
|
||||
crit: dead-1
|
||||
dead: dead-1
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: duck-1
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead-1
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead-1
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeatDuck
|
||||
@@ -246,11 +261,14 @@
|
||||
state: duck-2
|
||||
sprite: Mobs/Animals/duck.rsi
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: duck-2
|
||||
crit: dead-2
|
||||
dead: dead-2
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: duck-2
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead-2
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead-2
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeatDuck
|
||||
@@ -306,11 +324,14 @@
|
||||
cyan: "#18a2d5"
|
||||
yellow: "#d58c18"
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: butterfly
|
||||
crit: dead
|
||||
dead: dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: butterfly
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
- type: Bloodstream
|
||||
bloodMaxVolume: 0.1
|
||||
- type: NoSlip
|
||||
@@ -339,11 +360,14 @@
|
||||
layer:
|
||||
- MobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: cow
|
||||
crit: dead
|
||||
dead: dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: cow
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
udder:
|
||||
@@ -396,11 +420,14 @@
|
||||
layer:
|
||||
- MobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: crab
|
||||
crit: dead
|
||||
dead: dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: crab
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeatCrab
|
||||
@@ -425,11 +452,14 @@
|
||||
state: goat
|
||||
sprite: Mobs/Animals/goat.rsi
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: goat
|
||||
crit: dead
|
||||
dead: dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: goat
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
udder:
|
||||
@@ -470,11 +500,14 @@
|
||||
state: goose
|
||||
sprite: Mobs/Animals/goose.rsi
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: goose
|
||||
crit: dead
|
||||
dead: dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: goose
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeatChicken
|
||||
@@ -513,11 +546,14 @@
|
||||
layer:
|
||||
- MobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: crawling
|
||||
crit: dead
|
||||
dead: dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: crawling
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeat
|
||||
@@ -553,12 +589,15 @@
|
||||
layer:
|
||||
- MobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: kangaroo
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: kangaroo
|
||||
# SKIPPY NO!
|
||||
crit: kangaroo-dead
|
||||
dead: kangaroo-dead
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: kangaroo-dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: kangaroo-dead
|
||||
- type: Puller
|
||||
|
||||
- type: entity
|
||||
@@ -576,11 +615,14 @@
|
||||
state: kangaroo-boxing
|
||||
sprite: Mobs/Animals/kangaroo.rsi
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: kangaroo-boxing
|
||||
crit: kangaroo-boxing-dead
|
||||
dead: kangaroo-boxing-dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: kangaroo-boxing
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: kangaroo-boxing-dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: kangaroo-boxing-dead
|
||||
- type: MeleeWeapon
|
||||
range: 1.5
|
||||
arcwidth: 0
|
||||
@@ -626,12 +668,16 @@
|
||||
- type: Body
|
||||
template: PrimateTemplate
|
||||
preset: PrimatePreset
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: monkey
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: monkey
|
||||
crit: dead
|
||||
dead: dead
|
||||
- type: FireVisualizer
|
||||
sprite: Mobs/Effects/onfire.rsi
|
||||
normalState: Monkey_burning
|
||||
@@ -688,11 +734,14 @@
|
||||
baseWalkSpeed : 5
|
||||
baseSprintSpeed : 5
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: mouse-0
|
||||
crit: dead-0
|
||||
dead: splat-0
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: mouse-0
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead-0
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: splat-0
|
||||
- type: Food
|
||||
- type: Hunger
|
||||
baseDecayRate: 0.5 # I'm very hungry! Give me. The cheese.
|
||||
@@ -762,11 +811,14 @@
|
||||
- type: Clothing
|
||||
HeldPrefix: 1
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: mouse-1
|
||||
crit: dead-1
|
||||
dead: splat-1
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: mouse-1
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead-1
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: splat-1
|
||||
- type: Bloodstream
|
||||
bloodMaxVolume: 50
|
||||
- type: DiseaseCarrier #Why doesn't this save if it's only on the parent wtf
|
||||
@@ -785,11 +837,14 @@
|
||||
- type: Clothing
|
||||
HeldPrefix: 1
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: mouse-2
|
||||
crit: dead-2
|
||||
dead: splat-2
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: mouse-1
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead-1
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: splat-1
|
||||
- type: Bloodstream
|
||||
bloodMaxVolume: 50
|
||||
- type: DiseaseCarrier
|
||||
@@ -822,11 +877,14 @@
|
||||
layer:
|
||||
- MobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: lizard
|
||||
crit: dead
|
||||
dead: dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: lizard
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeat
|
||||
@@ -870,11 +928,14 @@
|
||||
layer:
|
||||
- MobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: slug
|
||||
crit: dead
|
||||
dead: dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: slug
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeat
|
||||
@@ -913,11 +974,14 @@
|
||||
layer:
|
||||
- SmallMobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: frog
|
||||
crit: dead
|
||||
dead: dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: frog
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeat
|
||||
@@ -959,11 +1023,14 @@
|
||||
layer:
|
||||
- FlyingMobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: parrot
|
||||
crit: dead
|
||||
dead: dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: parrot
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeat
|
||||
@@ -1002,11 +1069,14 @@
|
||||
layer:
|
||||
- MobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: penguin
|
||||
crit: penguin_dead
|
||||
dead: penguin_dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: penguin
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: penguin_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: penguin_dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeatPenguin
|
||||
@@ -1051,11 +1121,14 @@
|
||||
layer:
|
||||
- MobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: penguin
|
||||
crit: dead
|
||||
dead: dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: penguin
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeatPenguin
|
||||
@@ -1105,11 +1178,13 @@
|
||||
- SmallMobMask
|
||||
layer:
|
||||
- SmallMobLayer
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: snake
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: RotationVisualizer
|
||||
- type: DamageStateVisualizer
|
||||
normal: snake
|
||||
# It's death animation is animated so hopefully this should push for separation between "dying" and "death" states.
|
||||
# looks stupid, Rotation visualizer for now
|
||||
# dead: dead
|
||||
@@ -1154,11 +1229,14 @@
|
||||
layer:
|
||||
- MobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: tarantula
|
||||
crit: tarantula_dead
|
||||
dead: tarantula_dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: tarantula
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: tarantula_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: tarantula_dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeatSpider
|
||||
@@ -1218,11 +1296,14 @@
|
||||
layer:
|
||||
- MobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: possum
|
||||
crit: possum_dead # TODO: Make it so possums can "play dead." Probably need AI changes
|
||||
dead: possum_dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: possum
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: possum_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: possum_dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeat
|
||||
@@ -1274,11 +1355,14 @@
|
||||
layer:
|
||||
- MobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: raccoon
|
||||
crit: raccoon_dead
|
||||
dead: raccoon_dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: raccoon
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: raccoon_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: raccoon_dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeat
|
||||
@@ -1330,11 +1414,14 @@
|
||||
layer:
|
||||
- MobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: fox
|
||||
crit: fox_dead
|
||||
dead: fox_dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: fox
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: fox_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: fox_dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeat
|
||||
|
||||
@@ -33,11 +33,14 @@
|
||||
0: !type:NormalMobState {}
|
||||
150: !type:DeadMobState {}
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: bear
|
||||
crit: bear_dead
|
||||
dead: bear_dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: bear
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: bear_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: bear_dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeatBear
|
||||
|
||||
@@ -17,6 +17,11 @@
|
||||
- map: ["enum.DamageStateVisualLayers.Base"]
|
||||
state: alive
|
||||
sprite: Mobs/Aliens/Carps/space.rsi
|
||||
- type: CombatMode
|
||||
disarmAction:
|
||||
enabled: false
|
||||
autoPopulate: false
|
||||
name: action-name-disarm
|
||||
- type: Physics
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
@@ -35,15 +40,17 @@
|
||||
100: !type:DeadMobState {}
|
||||
- type: MovementIgnoreGravity
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: alive
|
||||
crit: crit
|
||||
dead: dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: alive
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: crit
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
- type: Butcherable
|
||||
# TODO: CrapMeat or FishMeat # - 2022-02-17 LMAO crap meat
|
||||
spawned:
|
||||
- id: FoodMeat
|
||||
- id: FoodMeatFish
|
||||
amount: 2
|
||||
- type: MeleeWeapon
|
||||
range: 1.5
|
||||
@@ -55,17 +62,6 @@
|
||||
types:
|
||||
Piercing: 5
|
||||
Slash: 10
|
||||
- type: CombatMode
|
||||
disarmAction:
|
||||
enabled: false
|
||||
autoPopulate: false
|
||||
name: action-name-disarm
|
||||
- type: GhostTakeoverAvailable
|
||||
makeSentient: true
|
||||
name: space carp
|
||||
description: |
|
||||
If you're a salvage spawn, defend the loot inside!
|
||||
Otherwise, wreak havoc on the station!
|
||||
- type: ReplacementAccent
|
||||
accent: genericAggressive
|
||||
- type: TypingIndicator
|
||||
@@ -84,8 +80,6 @@
|
||||
- map: ["enum.DamageStateVisualLayers.Base"]
|
||||
state: alive
|
||||
sprite: Mobs/Aliens/Carps/magic.rsi
|
||||
- type: GhostTakeoverAvailable
|
||||
name: magicarp
|
||||
- type: TypingIndicator
|
||||
proto: guardian
|
||||
|
||||
@@ -93,7 +87,7 @@
|
||||
name: holocarp
|
||||
parent: MobCarp
|
||||
id: MobCarpHolo
|
||||
description: Carp made out of holographic energies.
|
||||
description: Carp made out of holographic energies. Sadly for you, it is very much real.
|
||||
components:
|
||||
- type: Sprite
|
||||
drawdepth: Mobs
|
||||
@@ -112,8 +106,6 @@
|
||||
- MobMask
|
||||
layer:
|
||||
- Opaque
|
||||
- type: GhostTakeoverAvailable
|
||||
name: holocarp
|
||||
- type: TypingIndicator
|
||||
proto: robot
|
||||
|
||||
@@ -128,3 +120,14 @@
|
||||
Defend the loot inside the salvage wreck!
|
||||
- type: SalvageMobRestrictions
|
||||
|
||||
- type: entity
|
||||
name: space carp
|
||||
id: MobCarpDragon
|
||||
suffix: DragonBrood
|
||||
parent: MobCarp
|
||||
components:
|
||||
- type: GhostTakeoverAvailable
|
||||
makeSentient: true
|
||||
name: Sentient Carp
|
||||
description: Help the dragon flood the station with carps!
|
||||
|
||||
|
||||
@@ -24,12 +24,15 @@
|
||||
- MobMask
|
||||
layer:
|
||||
- MobLayer
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: corgi
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: corgi_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: corgi_dead
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: corgi
|
||||
crit: corgi_dead
|
||||
dead: corgi_dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeat
|
||||
@@ -61,11 +64,14 @@
|
||||
- map: ["enum.DamageStateVisualLayers.Base"]
|
||||
state: narsian
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: narsian
|
||||
crit: narsian_dead
|
||||
dead: narsian_dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: narsian
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: narsian_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: narsian_dead
|
||||
- type: MeleeWeapon
|
||||
range: 1.5
|
||||
arcwidth: 0
|
||||
@@ -125,11 +131,14 @@
|
||||
- map: ["enum.DamageStateVisualLayers.Base"]
|
||||
state: ian
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: ian
|
||||
crit: ian_dead
|
||||
dead: ian_dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: ian
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: ian_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: ian_dead
|
||||
- type: Grammar
|
||||
attributes:
|
||||
proper: true
|
||||
@@ -152,11 +161,14 @@
|
||||
- map: ["enum.DamageStateVisualLayers.Base"]
|
||||
state: old_ian
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: old_ian
|
||||
crit: old_ian_dead
|
||||
dead: old_ian_dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: old_ian
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: old_ian_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: old_ian_dead
|
||||
- type: Grammar
|
||||
attributes:
|
||||
proper: true
|
||||
@@ -175,11 +187,14 @@
|
||||
- map: ["enum.DamageStateVisualLayers.Base"]
|
||||
state: lisa
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: lisa
|
||||
crit: lisa_dead
|
||||
dead: lisa_dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: lisa
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: lisa_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: lisa_dead
|
||||
- type: Grammar
|
||||
attributes:
|
||||
proper: true
|
||||
@@ -198,11 +213,14 @@
|
||||
- map: ["enum.DamageStateVisualLayers.Base"]
|
||||
state: puppy
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: puppy
|
||||
crit: puppy_dead
|
||||
dead: puppy_dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: puppy
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: puppy_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: puppy_dead
|
||||
- type: Grammar
|
||||
attributes:
|
||||
gender: epicene
|
||||
@@ -231,11 +249,14 @@
|
||||
layer:
|
||||
- MobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: cat
|
||||
crit: cat_dead
|
||||
dead: cat_dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: cat
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: cat_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: cat_dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeat
|
||||
@@ -275,11 +296,14 @@
|
||||
- map: ["enum.DamageStateVisualLayers.Base"]
|
||||
state: cat2
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: cat2
|
||||
crit: cat2_dead
|
||||
dead: cat2_dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: cat2
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: cat2_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: cat2_dead
|
||||
- type: Grammar
|
||||
attributes:
|
||||
gender: epicene
|
||||
@@ -307,11 +331,14 @@
|
||||
- map: ["enum.DamageStateVisualLayers.Base"]
|
||||
state: spacecat
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: spacecat
|
||||
crit: spacecat_dead
|
||||
dead: spacecat_dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: spacecat
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: spacecat_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: spacecat_dead
|
||||
- type: InteractionPopup
|
||||
successChance: 0.7
|
||||
interactSuccessString: petting-success-space-cat
|
||||
@@ -335,11 +362,14 @@
|
||||
- map: ["enum.DamageStateVisualLayers.Base"]
|
||||
state: caracal_flop
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: caracal_flop
|
||||
crit: caracal_dead
|
||||
dead: caracal_dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: caracal_flop
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: caracal_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: caracal_dead
|
||||
- type: Grammar
|
||||
attributes:
|
||||
gender: epicene
|
||||
@@ -381,11 +411,14 @@
|
||||
layer:
|
||||
- MobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: sloth
|
||||
crit: sloth_dead
|
||||
dead: sloth_dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: sloth
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: sloth_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: sloth_dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeat
|
||||
@@ -424,11 +457,14 @@
|
||||
layer:
|
||||
- MobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: ferret
|
||||
crit: ferret_dead
|
||||
dead: ferret_dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: ferret
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: ferret_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: ferret_dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeat
|
||||
@@ -478,11 +514,14 @@
|
||||
layer:
|
||||
- MobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: bingus
|
||||
crit: bingus_dead
|
||||
dead: bingus_dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: bingus
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: bingus_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: bingus_dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeat
|
||||
@@ -521,11 +560,14 @@
|
||||
layer:
|
||||
- MobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: mcgriff
|
||||
crit: mcgriff_dead
|
||||
dead: mcgriff_dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: mcgriff
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: mcgriff_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: mcgriff_dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeat
|
||||
@@ -556,11 +598,14 @@
|
||||
- map: ["enum.DamageStateVisualLayers.Base"]
|
||||
state: paperwork
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: paperwork
|
||||
crit: paperwork_dead
|
||||
dead: paperwork_dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: paperwork
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: paperwork_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: paperwork_dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeat
|
||||
@@ -598,11 +643,14 @@
|
||||
layer:
|
||||
- MobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: walter
|
||||
crit: walter_dead
|
||||
dead: walter_dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: walter
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: walter_dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: walter_dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeat
|
||||
|
||||
@@ -51,12 +51,15 @@
|
||||
Slash: 12
|
||||
Piercing: 8
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
- type: DamageStateVisuals
|
||||
rotate: true
|
||||
normal: regalrat
|
||||
crit: dead
|
||||
dead: dead
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: regalrat
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
- type: Puller
|
||||
- type: GhostTakeoverAvailable
|
||||
makeSentient: true
|
||||
@@ -158,12 +161,15 @@
|
||||
Slash: 5
|
||||
Piercing: 2
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
- type: DamageStateVisuals
|
||||
rotate: true
|
||||
normal: mouse-3
|
||||
crit: dead-3
|
||||
dead: splat-3
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: mouse-3
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead-3
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: splat-3
|
||||
- type: Puller
|
||||
- type: DiseaseCarrier
|
||||
carrierDiseases:
|
||||
|
||||
@@ -38,10 +38,12 @@
|
||||
15: !type:DeadMobState {}
|
||||
- type: MovementIgnoreGravity
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: alive
|
||||
dead: dead
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: alive
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeatXeno
|
||||
|
||||
@@ -60,12 +60,15 @@
|
||||
groups:
|
||||
Brute: 20
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
- type: DamageStateVisuals
|
||||
rotate: true
|
||||
normal: running
|
||||
crit: crit
|
||||
dead: dead
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: running
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: crit
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
- type: Puller
|
||||
- type: Butcherable
|
||||
butcheringType: Spike
|
||||
@@ -105,11 +108,14 @@
|
||||
- map: ["enum.DamageStateVisualLayers.Base"]
|
||||
state: purple_snake
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: purple_snake
|
||||
crit: dead_purple_snake
|
||||
dead: dead_purple_snake
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: purple_snake
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead_purple_snake
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead_purple_snake
|
||||
- type: Grammar
|
||||
attributes:
|
||||
proper: true
|
||||
@@ -156,10 +162,13 @@
|
||||
- map: ["enum.DamageStateVisualLayers.Base"]
|
||||
state: small_purple_snake
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
normal: purple_snake
|
||||
crit: dead_small_purple_snake
|
||||
dead: dead_small_purple_snake
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: small_purple_snake
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: dead_small_purple_snake
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead_small_purple_snake
|
||||
- type: SolutionTransfer
|
||||
maxTransferAmount: 1
|
||||
|
||||
103
Resources/Prototypes/Entities/Mobs/Player/dragon.yml
Normal file
@@ -0,0 +1,103 @@
|
||||
- type: entity
|
||||
name: space dragon
|
||||
parent: SimpleSpaceMobBase
|
||||
id: MobDragon
|
||||
suffix:
|
||||
description: A flying leviathan, loosely related to space carps.
|
||||
components:
|
||||
- type: GhostTakeoverAvailable
|
||||
makeSentient: true
|
||||
name: Space dragon!
|
||||
description: Crash, roast, flood the station with carps!
|
||||
- type: Speech
|
||||
- type: CombatMode
|
||||
disarmAction:
|
||||
enabled: false
|
||||
autoPopulate: false
|
||||
name: action-name-disarm
|
||||
- type: PlayerMobMover
|
||||
- type: PlayerInputMover
|
||||
- type: MovementSpeedModifier
|
||||
baseWalkSpeed : 5
|
||||
baseSprintSpeed : 5
|
||||
- type: Sprite
|
||||
sprite: Mobs/Aliens/Carps/dragon.rsi
|
||||
noRot: true
|
||||
# TODO: Randomise colors when RandomSpriteColor isn't poopoo
|
||||
layers:
|
||||
- map: [ "enum.DamageStateVisualLayers.Base" ]
|
||||
state: alive
|
||||
- map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ]
|
||||
state: alive-unshaded
|
||||
shader: unshaded
|
||||
- type: Appearance
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: alive
|
||||
enum.DamageStateVisualLayers.BaseUnshaded: alive-unshaded
|
||||
Critical:
|
||||
enum.DamageStateVisualLayers.Base: crit
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: dead
|
||||
enum.DamageStateVisualLayers.BaseUnshaded: dead-unshaded
|
||||
- type: Physics
|
||||
bodyType: KinematicController
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
- shape:
|
||||
!type:PhysShapeCircle
|
||||
radius: 0.40
|
||||
mass: 50
|
||||
mask:
|
||||
- FlyingMobMask
|
||||
layer:
|
||||
- FlyingMobLayer
|
||||
- type: MobState
|
||||
thresholds:
|
||||
0: !type:NormalMobState {}
|
||||
450: !type:CriticalMobState {}
|
||||
500: !type:DeadMobState {}
|
||||
- type: Metabolizer
|
||||
solutionOnBody: false
|
||||
updateFrequency: 0.25
|
||||
metabolizerTypes: [Dragon]
|
||||
groups:
|
||||
- id: Medicine
|
||||
- id: Poison
|
||||
- type: MovementIgnoreGravity
|
||||
- type: NoSlip
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeatDragon
|
||||
amount: 2
|
||||
- type: MeleeWeapon
|
||||
hitSound:
|
||||
path: /Audio/Effects/bite.ogg
|
||||
damage:
|
||||
types:
|
||||
Piercing: 15
|
||||
Slash: 15
|
||||
- type: Dragon
|
||||
spawnsLeft: 2
|
||||
spawnsProto: MobCarpDragon
|
||||
devourAction:
|
||||
event: !type:DragonDevourActionEvent
|
||||
icon: Interface/Actions/devour.png
|
||||
name: action-name-devour
|
||||
description: action-description-devour
|
||||
devourChemical: Ichor
|
||||
devourHealRate: 15.0
|
||||
whitelist:
|
||||
components:
|
||||
- MobState
|
||||
- Door
|
||||
tags:
|
||||
- Wall
|
||||
spawnAction:
|
||||
event: !type:DragonSpawnActionEvent
|
||||
icon: Interface/Actions/carpbirth.png
|
||||
name: action-name-carp-birth
|
||||
description: action-description-carp-birth
|
||||
useDelay: 5
|
||||
|
||||
@@ -215,9 +215,10 @@
|
||||
layer:
|
||||
- LargeMobLayer
|
||||
- type: Appearance
|
||||
visuals:
|
||||
- type: DamageStateVisualizer
|
||||
rotate: true
|
||||
normal: onestar_boss
|
||||
dead: onestar_boss_wrecked
|
||||
states:
|
||||
Alive:
|
||||
enum.DamageStateVisualLayers.Base: onestar_boss
|
||||
Dead:
|
||||
enum.DamageStateVisualLayers.Base: onestar_boss_wrecked
|
||||
- type: CombatMode
|
||||
|
||||
@@ -177,7 +177,7 @@
|
||||
reagents:
|
||||
- ReagentId: Nutriment
|
||||
Quantity: 6
|
||||
- ReagentId: CapsaicinOil
|
||||
- ReagentId: CarpoToxin
|
||||
Quantity: 3
|
||||
# Tastes like fish, batter, hot peppers.
|
||||
|
||||
@@ -367,6 +367,25 @@
|
||||
state: queso
|
||||
# Its queso! Everyone loves queso... Right?.
|
||||
|
||||
- type: entity
|
||||
name: Sashimi
|
||||
parent: FoodMealBase
|
||||
id: FoodMealSashimi
|
||||
description: It's taste can only be described as "Exotic". The poisoning though? That's pretty common.
|
||||
components:
|
||||
- type: Sprite
|
||||
state: sashimi
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
food:
|
||||
maxVol: 18
|
||||
reagents:
|
||||
- ReagentId: Nutriment
|
||||
Quantity: 6
|
||||
- ReagentId: CarpoToxin
|
||||
Quantity: 15
|
||||
# tastes exotic
|
||||
|
||||
- type: entity
|
||||
name: enchiladas
|
||||
parent: FoodMealBase
|
||||
|
||||
@@ -48,11 +48,35 @@
|
||||
food:
|
||||
reagents:
|
||||
- ReagentId: Toxin
|
||||
Quantity: 1
|
||||
Quantity: 5
|
||||
- type: SliceableFood
|
||||
count: 3
|
||||
slice: FoodMeatCutlet
|
||||
|
||||
- type: entity
|
||||
name: raw carp fillet
|
||||
parent: FoodMeatBase
|
||||
# MeatFish?...
|
||||
id: FoodMeatFish
|
||||
description: Your last words being "Wow, exotic!" are not worth it. The taste itself though? Maybe.
|
||||
components:
|
||||
- type: Tag
|
||||
tags:
|
||||
- Raw
|
||||
- type: Sprite
|
||||
state: fish
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
food:
|
||||
reagents:
|
||||
- ReagentId: CarpoToxin
|
||||
Quantity: 5
|
||||
- type: Extractable
|
||||
juiceSolution:
|
||||
reagents:
|
||||
- ReagentId: CarpoToxin
|
||||
Quantity: 5
|
||||
|
||||
- type: entity
|
||||
name: raw bacon
|
||||
parent: FoodMeatBase
|
||||
@@ -216,6 +240,32 @@
|
||||
- ReagentId: Toxin
|
||||
Quantity: 5
|
||||
|
||||
- type: entity
|
||||
name: dragon flesh
|
||||
parent: FoodMeatBase
|
||||
id: FoodMeatDragon
|
||||
description: The dense meat of the space-era apex predator is oozing with it's mythical ichor. Ironically, best eaten raw.
|
||||
components:
|
||||
- type: Tag
|
||||
tags:
|
||||
- Raw
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: dragon
|
||||
- state: dragon_veins
|
||||
shader: unshaded
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
food:
|
||||
reagents:
|
||||
- ReagentId: Ichor
|
||||
Quantity: 2
|
||||
- type: Extractable
|
||||
juiceSolution:
|
||||
reagents:
|
||||
- ReagentId: Ichor
|
||||
Quantity: 2
|
||||
|
||||
- type: entity
|
||||
name: raw lizard meat
|
||||
parent: FoodMeatBase
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name: trash bag
|
||||
id: TrashBag
|
||||
parent: BaseStorageItem
|
||||
description: The solution to space pollution. Rubbish removal revolution.
|
||||
components:
|
||||
- type: Sprite
|
||||
netSync: false
|
||||
|
||||
@@ -8,6 +8,9 @@
|
||||
alarmedBy:
|
||||
- FireAlarm
|
||||
- AirAlarm
|
||||
- type: Tag
|
||||
tags:
|
||||
- RCDDeconstructWhitelist
|
||||
- type: ApcPowerReceiver
|
||||
- type: ExtensionCableReceiver
|
||||
- type: DeviceNetwork
|
||||
|
||||
@@ -97,7 +97,6 @@
|
||||
- type: Tag
|
||||
tags:
|
||||
- Wall
|
||||
- RCDDeconstructWhitelist
|
||||
- type: Sprite
|
||||
sprite: Structures/Walls/cult.rsi
|
||||
- type: Icon
|
||||
@@ -336,6 +335,9 @@
|
||||
id: WallReinforced
|
||||
name: reinforced wall
|
||||
components:
|
||||
- type: Tag
|
||||
tags:
|
||||
- Wall
|
||||
- type: Sprite
|
||||
sprite: Structures/Walls/solid.rsi
|
||||
- type: Icon
|
||||
|
||||
@@ -28,3 +28,31 @@
|
||||
effects:
|
||||
- !type:SatiateHunger
|
||||
factor: 1.5
|
||||
|
||||
- type: reagent
|
||||
id: Ichor
|
||||
name: Ichor
|
||||
group: Biological
|
||||
desc: An extremely potent regenerative chemical, perfected by space fauna evolution. Produced in the dragon's digestive system, it is seen as an exotic commodity due to the gargantuan effort of hunting for it.
|
||||
physicalDesc: roaring
|
||||
color: "#f4692e"
|
||||
metabolisms:
|
||||
Drink:
|
||||
effects:
|
||||
- !type:SatiateThirst
|
||||
factor: 1.5
|
||||
# Dragon doesn't require airloss healing, so omnizine is still best for humans.
|
||||
Medicine:
|
||||
effects:
|
||||
- !type:HealthChange
|
||||
damage:
|
||||
groups:
|
||||
Burn: -5
|
||||
Brute: -5
|
||||
Toxin: -2
|
||||
types:
|
||||
Bloodloss: -5
|
||||
# Just in case you REALLY want to water your plants
|
||||
plantMetabolism:
|
||||
- !type:PlantAdjustWater
|
||||
amount: 0.5
|
||||
|
||||
@@ -17,6 +17,14 @@
|
||||
type: Local
|
||||
messages: [ "carpetium-effect-blood-fibrous", "carpetium-effect-jumpsuit-insides" ]
|
||||
probability: 0.1
|
||||
# Hail the madman logic, if it has CARP, means it helps against CARPs
|
||||
- !type:AdjustReagent
|
||||
conditions:
|
||||
- !type:ReagentThreshold
|
||||
reagent: CarpoToxin
|
||||
min: 1
|
||||
reagent: CarpoToxin
|
||||
amount: -3
|
||||
|
||||
- type: reagent
|
||||
id: Fiber
|
||||
|
||||
@@ -539,6 +539,7 @@
|
||||
- !type:SatiateHunger
|
||||
factor: -1
|
||||
|
||||
# Should heal quite literally everything, use in very small amounts
|
||||
- type: reagent
|
||||
id: Omnizine
|
||||
name: reagent-name-omnizine
|
||||
@@ -598,3 +599,4 @@
|
||||
min: 1
|
||||
reagent: Ultravasculine
|
||||
amount: 0.5
|
||||
|
||||
|
||||
@@ -18,6 +18,30 @@
|
||||
types:
|
||||
Poison: 2
|
||||
|
||||
- type: reagent
|
||||
id: CarpoToxin
|
||||
name: Carpotoxin
|
||||
group: Toxins
|
||||
desc: Toxic secretions of a space carp. Causes a painful burning sensation.
|
||||
color: "#e2a38c"
|
||||
physicalDesc: exotic-smelling
|
||||
plantMetabolism:
|
||||
- !type:PlantAdjustToxins
|
||||
amount: 10
|
||||
- !type:PlantAdjustHealth
|
||||
amount: -5
|
||||
metabolisms:
|
||||
Poison:
|
||||
effects:
|
||||
- !type:HealthChange
|
||||
damage:
|
||||
types:
|
||||
Poison: 4
|
||||
- !type:PopupMessage
|
||||
type: Local
|
||||
messages: [ "generic-reagent-effect-burning-insides" ]
|
||||
probability: 0.33
|
||||
|
||||
- type: reagent
|
||||
id: PolytrinicAcid
|
||||
name: reagent-name-polytrinic-acid
|
||||
@@ -164,7 +188,7 @@
|
||||
- !type:HealthChange
|
||||
damage:
|
||||
types:
|
||||
Asphyxiation: 4
|
||||
Asphyxiation: 2
|
||||
plantMetabolism:
|
||||
- !type:PlantAdjustToxins
|
||||
amount: 10
|
||||
@@ -215,7 +239,7 @@
|
||||
- !type:HealthChange
|
||||
conditions:
|
||||
- !type:ReagentThreshold
|
||||
min: 30
|
||||
min: 45
|
||||
damage:
|
||||
groups:
|
||||
Brute: 2
|
||||
@@ -228,7 +252,7 @@
|
||||
- !type:PopupMessage
|
||||
conditions:
|
||||
- !type:ReagentThreshold
|
||||
min: 30
|
||||
min: 45
|
||||
type: Local
|
||||
messages: [ "histamine-effect-heavy-itchiness" ]
|
||||
probability: 0.2
|
||||
|
||||
@@ -392,6 +392,28 @@
|
||||
# solids:
|
||||
# FoodMeat: 1
|
||||
|
||||
- type: microwaveMealRecipe
|
||||
id: RecipeCubanCarp
|
||||
name: cuban carp recipe
|
||||
result: FoodMealCubancarp
|
||||
time: 15
|
||||
solids:
|
||||
FoodDough: 1
|
||||
FoodCheeseSlice: 2
|
||||
FoodChili: 1
|
||||
FoodMeatFish: 2
|
||||
|
||||
- type: microwaveMealRecipe
|
||||
id: RecipeSashimi
|
||||
name: sashimi recipe
|
||||
result: FoodMealCubancarp
|
||||
time: 15
|
||||
reagents:
|
||||
TableSalt: 1
|
||||
solids:
|
||||
FoodMeatFish: 2
|
||||
|
||||
|
||||
- type: microwaveMealRecipe
|
||||
id: RecipeMisoColaSoup
|
||||
name: salty sweet milocola soup recipe
|
||||
|
||||
BIN
Resources/Textures/Interface/Actions/carpbirth.png
Normal file
|
After Width: | Height: | Size: 618 B |
BIN
Resources/Textures/Interface/Actions/devour.png
Normal file
|
After Width: | Height: | Size: 473 B |
@@ -25,6 +25,9 @@
|
||||
{
|
||||
"name": "manifest"
|
||||
},
|
||||
{
|
||||
"name": "devour"
|
||||
}
|
||||
{
|
||||
"name": "ratKingArmy"
|
||||
},
|
||||
|
||||
|
After Width: | Height: | Size: 2.4 KiB |
BIN
Resources/Textures/Mobs/Aliens/Carps/dragon.rsi/alive.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
Resources/Textures/Mobs/Aliens/Carps/dragon.rsi/crit.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 258 B |
BIN
Resources/Textures/Mobs/Aliens/Carps/dragon.rsi/dead.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
80
Resources/Textures/Mobs/Aliens/Carps/dragon.rsi/meta.json
Normal file
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"version": 1,
|
||||
"size": {
|
||||
"x": 64,
|
||||
"y": 64
|
||||
},
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from /tg/station at https://github.com/Toastgoats/tgstation/commit/024a840eed2a1be3f72435c2bb39faac8025f822",
|
||||
"states": [
|
||||
{
|
||||
"name": "alive",
|
||||
"directions": 4,
|
||||
"delays": [
|
||||
[
|
||||
0.2,
|
||||
0.2,
|
||||
0.2,
|
||||
0.2
|
||||
],
|
||||
[
|
||||
0.2,
|
||||
0.2,
|
||||
0.2,
|
||||
0.2
|
||||
],
|
||||
[
|
||||
0.2,
|
||||
0.2,
|
||||
0.2,
|
||||
0.2
|
||||
],
|
||||
[
|
||||
0.2,
|
||||
0.2,
|
||||
0.2,
|
||||
0.2
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "alive-unshaded",
|
||||
"directions": 4,
|
||||
"delays": [
|
||||
[
|
||||
0.2,
|
||||
0.2,
|
||||
0.2,
|
||||
0.2
|
||||
],
|
||||
[
|
||||
0.2,
|
||||
0.2,
|
||||
0.2,
|
||||
0.2
|
||||
],
|
||||
[
|
||||
0.2,
|
||||
0.2,
|
||||
0.2,
|
||||
0.2
|
||||
],
|
||||
[
|
||||
0.2,
|
||||
0.2,
|
||||
0.2,
|
||||
0.2
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "crit"
|
||||
},
|
||||
{
|
||||
"name": "dead"
|
||||
},
|
||||
{
|
||||
"name": "dead-unshaded"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon.png
Normal file
|
After Width: | Height: | Size: 462 B |
|
After Width: | Height: | Size: 209 B |
@@ -170,6 +170,12 @@
|
||||
},
|
||||
{
|
||||
"name": "xeno"
|
||||
},
|
||||
{
|
||||
"name": "dragon"
|
||||
},
|
||||
{
|
||||
"name": "dragon_veins"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 203 B After Width: | Height: | Size: 173 B |