From 6104945b29c5c011285ece0a6dfc1f463c8bc9a7 Mon Sep 17 00:00:00 2001 From: gluesniffler <159397573+gluesniffler@users.noreply.github.com> Date: Wed, 11 Dec 2024 18:46:27 -0400 Subject: [PATCH] Yet another shitmed update (#1104) --- Content.Shared/Body/Organ/OrganComponent.cs | 5 +- .../Body/Systems/SharedBodySystem.Body.cs | 1 - .../Stealth/Components/StealthComponent.cs | 4 +- Content.Shared/Stealth/SharedStealthSystem.cs | 3 +- .../BatteryAmmoProviderComponent.cs | 4 +- .../Ranged/Systems/SharedGunSystem.Battery.cs | 11 +- .../Goliath/GoliathTentacleComponent.cs | 18 ++ .../Goliath/GoliathTentacleSystem.cs | 23 +++ .../SurgeryBodyComponentConditionComponent.cs | 24 +++ .../SurgeryComponentConditionComponent.cs | 17 -- .../SurgeryOrganOnAddConditionComponent.cs | 26 +++ .../SurgeryPartComponentConditionComponent.cs | 24 +++ .../Surgery/SharedSurgerySystem.Steps.cs | 74 ++++++++ .../_Shitmed/Surgery/SharedSurgerySystem.cs | 62 ++++++- .../Surgery/Steps/SurgeryStepComponent.cs | 18 ++ .../en-US/_Shitmed/surgery/surgery-popup.ftl | 3 +- .../Mobs/Customization/Markings/reptilian.yml | 14 +- .../Prototypes/Entities/Mobs/NPCs/animals.yml | 98 +++++------ .../Entities/Mobs/NPCs/asteroid.yml | 2 + .../Entities/Mobs/NPCs/miscellaneous.yml | 20 +-- .../Prototypes/Entities/Mobs/NPCs/space.yml | 8 +- .../Entities/Mobs/Player/dragon.yml | 5 +- .../Entities/Mobs/Player/humanoid.yml | 5 + .../Objects/Specific/Medical/surgery.yml | 12 +- .../monkey_inventory_template.yml | 160 +++++++++++------- Resources/Prototypes/Roles/Antags/nukeops.yml | 1 + .../_Shitmed/Body/Actions/organactions.yml | 20 +++ .../_Shitmed/Body/Organs/Animal/animal.yml | 62 +++++++ .../_Shitmed/Body/Organs/Animal/kobold.yml | 119 +++++++++++++ .../_Shitmed/Body/Organs/Animal/monkey.yml | 119 +++++++++++++ .../_Shitmed/Body/Organs/Animal/space.yml | 66 +++++++- .../Body/Prototypes/Animal/dragon.yml | 21 +++ .../Body/Prototypes/Animal/goliath.yml | 21 +++ .../Body/Prototypes/Animal/kobold.yml | 51 ++++++ .../Body/Prototypes/Animal/laserraptor.yml | 26 +++ .../Body/Prototypes/Animal/monkey.yml | 51 ++++++ .../Body/Prototypes/Animal/spacecobra.yml | 21 +++ .../Entities/Mobs/Species/primate.yml | 41 +++++ .../_Shitmed/Entities/Surgery/surgeries.yml | 30 +++- .../Entities/Surgery/surgery_steps.yml | 33 ++-- .../Prototypes/_Shitmed/Species/kobold.yml | 148 ++++++++++++++++ .../Prototypes/_Shitmed/Species/monkey.yml | 144 ++++++++++++++++ .../Textures/Mobs/Animals/kobold.rsi/eyes.png | Bin 0 -> 126 bytes .../Textures/Mobs/Animals/kobold.rsi/full.png | Bin 0 -> 733 bytes .../Mobs/Animals/kobold.rsi/head_f.png | Bin 0 -> 653 bytes .../Mobs/Animals/kobold.rsi/head_m.png | Bin 0 -> 653 bytes .../Mobs/Animals/kobold.rsi/innerline.png | Bin 0 -> 10385 bytes .../Mobs/Animals/kobold.rsi/kobold.png | Bin 10385 -> 10720 bytes .../Mobs/Animals/kobold.rsi/l_arm.png | Bin 0 -> 278 bytes .../Mobs/Animals/kobold.rsi/l_foot.png | Bin 0 -> 231 bytes .../Mobs/Animals/kobold.rsi/l_hand.png | Bin 0 -> 267 bytes .../Mobs/Animals/kobold.rsi/l_leg.png | Bin 0 -> 253 bytes .../Mobs/Animals/kobold.rsi/meta.json | 65 ++++++- .../Mobs/Animals/kobold.rsi/r_arm.png | Bin 0 -> 313 bytes .../Mobs/Animals/kobold.rsi/r_foot.png | Bin 0 -> 239 bytes .../Mobs/Animals/kobold.rsi/r_hand.png | Bin 0 -> 275 bytes .../Mobs/Animals/kobold.rsi/r_leg.png | Bin 0 -> 256 bytes .../Textures/Mobs/Animals/kobold.rsi/tail.png | Bin 0 -> 531 bytes .../Mobs/Animals/kobold.rsi/torso_f.png | Bin 0 -> 605 bytes .../Mobs/Animals/kobold.rsi/torso_m.png | Bin 0 -> 605 bytes .../Textures/Mobs/Animals/monkey.rsi/eyes.png | Bin 0 -> 126 bytes .../Textures/Mobs/Animals/monkey.rsi/full.png | Bin 0 -> 519 bytes .../Mobs/Animals/monkey.rsi/head_f.png | Bin 0 -> 477 bytes .../Mobs/Animals/monkey.rsi/head_m.png | Bin 0 -> 477 bytes .../Mobs/Animals/monkey.rsi/l_arm.png | Bin 0 -> 238 bytes .../Mobs/Animals/monkey.rsi/l_foot.png | Bin 0 -> 211 bytes .../Mobs/Animals/monkey.rsi/l_hand.png | Bin 0 -> 188 bytes .../Mobs/Animals/monkey.rsi/l_leg.png | Bin 0 -> 255 bytes .../Mobs/Animals/monkey.rsi/meta.json | 85 ++++++++-- .../Mobs/Animals/monkey.rsi/r_arm.png | Bin 0 -> 261 bytes .../Mobs/Animals/monkey.rsi/r_foot.png | Bin 0 -> 214 bytes .../Mobs/Animals/monkey.rsi/r_hand.png | Bin 0 -> 191 bytes .../Mobs/Animals/monkey.rsi/r_leg.png | Bin 0 -> 256 bytes .../Textures/Mobs/Animals/monkey.rsi/tail.png | Bin 0 -> 360 bytes .../Mobs/Animals/monkey.rsi/torso_f.png | Bin 0 -> 465 bytes .../Mobs/Animals/monkey.rsi/torso_m.png | Bin 0 -> 465 bytes .../Cobra/organs.rsi/heart-inhand-left.png | Bin 0 -> 467 bytes .../Cobra/organs.rsi/heart-inhand-right.png | Bin 0 -> 472 bytes .../Space/Cobra/organs.rsi/heart-off.png | Bin 0 -> 314 bytes .../Space/Cobra/organs.rsi/heart-on.png | Bin 0 -> 459 bytes .../Species/Space/Cobra/organs.rsi/meta.json | 32 ++++ .../Goliath/organs.rsi/heart-inhand-left.png | Bin 0 -> 479 bytes .../Goliath/organs.rsi/heart-inhand-right.png | Bin 0 -> 481 bytes .../Space/Goliath/organs.rsi/heart-off.png | Bin 0 -> 319 bytes .../Space/Goliath/organs.rsi/heart-on.png | Bin 0 -> 517 bytes .../Space/Goliath/organs.rsi/meta.json | 32 ++++ .../Species/Space/LaserRaptor/eyeball-l.png | Bin 0 -> 364 bytes .../Species/Space/LaserRaptor/eyeball-r.png | Bin 0 -> 354 bytes .../LaserRaptor/eyeballs-inhand-left.png | Bin 0 -> 175 bytes .../LaserRaptor/eyeballs-inhand-right.png | Bin 0 -> 174 bytes .../Mobs/Species/Space/LaserRaptor/meta.json | 25 +++ .../Surgery/omnimed.rsi/evil-inhand-left.png | Bin 0 -> 459 bytes .../Surgery/omnimed.rsi/evil-inhand-right.png | Bin 0 -> 458 bytes .../Medical/Surgery/omnimed.rsi/evil.png | Bin 0 -> 316 bytes .../Medical/Surgery/omnimed.rsi/meta.json | 11 ++ 95 files changed, 1660 insertions(+), 205 deletions(-) create mode 100644 Content.Shared/_Shitmed/Abilities/Goliath/GoliathTentacleComponent.cs create mode 100644 Content.Shared/_Shitmed/Abilities/Goliath/GoliathTentacleSystem.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Conditions/SurgeryBodyComponentConditionComponent.cs delete mode 100644 Content.Shared/_Shitmed/Surgery/Conditions/SurgeryComponentConditionComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Conditions/SurgeryOrganOnAddConditionComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Conditions/SurgeryPartComponentConditionComponent.cs create mode 100644 Resources/Prototypes/_Shitmed/Body/Actions/organactions.yml create mode 100644 Resources/Prototypes/_Shitmed/Body/Organs/Animal/animal.yml create mode 100644 Resources/Prototypes/_Shitmed/Body/Organs/Animal/kobold.yml create mode 100644 Resources/Prototypes/_Shitmed/Body/Organs/Animal/monkey.yml create mode 100644 Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/dragon.yml create mode 100644 Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/goliath.yml create mode 100644 Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/kobold.yml create mode 100644 Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/laserraptor.yml create mode 100644 Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/monkey.yml create mode 100644 Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/spacecobra.yml create mode 100644 Resources/Prototypes/_Shitmed/Entities/Mobs/Species/primate.yml create mode 100644 Resources/Prototypes/_Shitmed/Species/kobold.yml create mode 100644 Resources/Prototypes/_Shitmed/Species/monkey.yml create mode 100644 Resources/Textures/Mobs/Animals/kobold.rsi/eyes.png create mode 100644 Resources/Textures/Mobs/Animals/kobold.rsi/full.png create mode 100644 Resources/Textures/Mobs/Animals/kobold.rsi/head_f.png create mode 100644 Resources/Textures/Mobs/Animals/kobold.rsi/head_m.png create mode 100644 Resources/Textures/Mobs/Animals/kobold.rsi/innerline.png create mode 100644 Resources/Textures/Mobs/Animals/kobold.rsi/l_arm.png create mode 100644 Resources/Textures/Mobs/Animals/kobold.rsi/l_foot.png create mode 100644 Resources/Textures/Mobs/Animals/kobold.rsi/l_hand.png create mode 100644 Resources/Textures/Mobs/Animals/kobold.rsi/l_leg.png create mode 100644 Resources/Textures/Mobs/Animals/kobold.rsi/r_arm.png create mode 100644 Resources/Textures/Mobs/Animals/kobold.rsi/r_foot.png create mode 100644 Resources/Textures/Mobs/Animals/kobold.rsi/r_hand.png create mode 100644 Resources/Textures/Mobs/Animals/kobold.rsi/r_leg.png create mode 100644 Resources/Textures/Mobs/Animals/kobold.rsi/tail.png create mode 100644 Resources/Textures/Mobs/Animals/kobold.rsi/torso_f.png create mode 100644 Resources/Textures/Mobs/Animals/kobold.rsi/torso_m.png create mode 100644 Resources/Textures/Mobs/Animals/monkey.rsi/eyes.png create mode 100644 Resources/Textures/Mobs/Animals/monkey.rsi/full.png create mode 100644 Resources/Textures/Mobs/Animals/monkey.rsi/head_f.png create mode 100644 Resources/Textures/Mobs/Animals/monkey.rsi/head_m.png create mode 100644 Resources/Textures/Mobs/Animals/monkey.rsi/l_arm.png create mode 100644 Resources/Textures/Mobs/Animals/monkey.rsi/l_foot.png create mode 100644 Resources/Textures/Mobs/Animals/monkey.rsi/l_hand.png create mode 100644 Resources/Textures/Mobs/Animals/monkey.rsi/l_leg.png create mode 100644 Resources/Textures/Mobs/Animals/monkey.rsi/r_arm.png create mode 100644 Resources/Textures/Mobs/Animals/monkey.rsi/r_foot.png create mode 100644 Resources/Textures/Mobs/Animals/monkey.rsi/r_hand.png create mode 100644 Resources/Textures/Mobs/Animals/monkey.rsi/r_leg.png create mode 100644 Resources/Textures/Mobs/Animals/monkey.rsi/tail.png create mode 100644 Resources/Textures/Mobs/Animals/monkey.rsi/torso_f.png create mode 100644 Resources/Textures/Mobs/Animals/monkey.rsi/torso_m.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Space/Cobra/organs.rsi/heart-inhand-left.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Space/Cobra/organs.rsi/heart-inhand-right.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Space/Cobra/organs.rsi/heart-off.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Space/Cobra/organs.rsi/heart-on.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Space/Cobra/organs.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Space/Goliath/organs.rsi/heart-inhand-left.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Space/Goliath/organs.rsi/heart-inhand-right.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Space/Goliath/organs.rsi/heart-off.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Space/Goliath/organs.rsi/heart-on.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Space/Goliath/organs.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Space/LaserRaptor/eyeball-l.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Space/LaserRaptor/eyeball-r.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Space/LaserRaptor/eyeballs-inhand-left.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Space/LaserRaptor/eyeballs-inhand-right.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Space/LaserRaptor/meta.json create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/omnimed.rsi/evil-inhand-left.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/omnimed.rsi/evil-inhand-right.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/omnimed.rsi/evil.png diff --git a/Content.Shared/Body/Organ/OrganComponent.cs b/Content.Shared/Body/Organ/OrganComponent.cs index 34dc4abf1a6..2f575952e9c 100644 --- a/Content.Shared/Body/Organ/OrganComponent.cs +++ b/Content.Shared/Body/Organ/OrganComponent.cs @@ -2,12 +2,13 @@ using Robust.Shared.Containers; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; // Shitmed Change +using Content.Shared._Shitmed.Medical.Surgery; // Shitmed Change using Content.Shared._Shitmed.Medical.Surgery.Tools; // Shitmed Change namespace Content.Shared.Body.Organ; [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] -[Access(typeof(SharedBodySystem))] +[Access(typeof(SharedBodySystem), typeof(SharedSurgerySystem))] // Shitmed Change public sealed partial class OrganComponent : Component, ISurgeryToolComponent // Shitmed Change { /// @@ -52,7 +53,7 @@ public sealed partial class OrganComponent : Component, ISurgeryToolComponent // public ComponentRegistry? OnAdd; /// - /// When removed, the organ will ensure these components on the entity, and add them on removal. + /// When removed, the organ will ensure these components on the entity, and delete them on insertion. /// [DataField] public ComponentRegistry? OnRemove; diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Body.cs b/Content.Shared/Body/Systems/SharedBodySystem.Body.cs index 89de3d68a5f..f3361872701 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Body.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Body.cs @@ -456,7 +456,6 @@ private void OnProfileLoadFinished(EntityUid uid, BodyComponent component, Profi || !Initialized(uid)) // We do this last one for urists on test envs. return; - Logger.Debug($"{ToPrettyString(uid)}: ProfileLoadFinished with {HasComp(uid)} and {component}"); foreach (var part in GetBodyChildren(uid, component)) EnsureComp(part.Id); } diff --git a/Content.Shared/Stealth/Components/StealthComponent.cs b/Content.Shared/Stealth/Components/StealthComponent.cs index 1a8a647768a..eb54df6f08a 100644 --- a/Content.Shared/Stealth/Components/StealthComponent.cs +++ b/Content.Shared/Stealth/Components/StealthComponent.cs @@ -79,12 +79,14 @@ public sealed class StealthComponentState : ComponentState { public readonly float Visibility; public readonly TimeSpan? LastUpdated; + public readonly float MaxVisibility; // Shitmed Change public readonly bool Enabled; - public StealthComponentState(float stealthLevel, TimeSpan? lastUpdated, bool enabled) + public StealthComponentState(float stealthLevel, TimeSpan? lastUpdated, float maxVisibility, bool enabled) { Visibility = stealthLevel; LastUpdated = lastUpdated; + MaxVisibility = maxVisibility; // Shitmed Change Enabled = enabled; } } diff --git a/Content.Shared/Stealth/SharedStealthSystem.cs b/Content.Shared/Stealth/SharedStealthSystem.cs index 1bab55589fd..fcf3e675d51 100644 --- a/Content.Shared/Stealth/SharedStealthSystem.cs +++ b/Content.Shared/Stealth/SharedStealthSystem.cs @@ -98,7 +98,7 @@ protected virtual void OnInit(EntityUid uid, StealthComponent component, Compone private void OnStealthGetState(EntityUid uid, StealthComponent component, ref ComponentGetState args) { - args.State = new StealthComponentState(component.LastVisibility, component.LastUpdated, component.Enabled); + args.State = new StealthComponentState(component.LastVisibility, component.LastUpdated, component.MaxVisibility, component.Enabled); // Shitmed Change } private void OnStealthHandleState(EntityUid uid, StealthComponent component, ref ComponentHandleState args) @@ -109,6 +109,7 @@ private void OnStealthHandleState(EntityUid uid, StealthComponent component, ref SetEnabled(uid, cast.Enabled, component); component.LastVisibility = cast.Visibility; component.LastUpdated = cast.LastUpdated; + component.MaxVisibility = cast.MaxVisibility; // Shitmed Change } private void OnMove(EntityUid uid, StealthOnMoveComponent component, ref MoveEvent args) diff --git a/Content.Shared/Weapons/Ranged/Components/BatteryAmmoProviderComponent.cs b/Content.Shared/Weapons/Ranged/Components/BatteryAmmoProviderComponent.cs index 605e169c38d..f46a5bfdd6b 100644 --- a/Content.Shared/Weapons/Ranged/Components/BatteryAmmoProviderComponent.cs +++ b/Content.Shared/Weapons/Ranged/Components/BatteryAmmoProviderComponent.cs @@ -5,7 +5,7 @@ public abstract partial class BatteryAmmoProviderComponent : AmmoProviderCompone /// /// How much battery it costs to fire once. /// - [DataField("fireCost"), ViewVariables(VVAccess.ReadWrite)] + [DataField("fireCost")] // Shitmed Change public float FireCost = 100; // Batteries aren't predicted which means we need to track the battery and manually count it ourselves woo! @@ -15,4 +15,4 @@ public abstract partial class BatteryAmmoProviderComponent : AmmoProviderCompone [ViewVariables(VVAccess.ReadWrite)] public int Capacity; -} +} \ No newline at end of file diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Battery.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Battery.cs index d6e741fed6e..88cd16d0975 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Battery.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Battery.cs @@ -36,16 +36,24 @@ private void OnBatteryHandleState(EntityUid uid, BatteryAmmoProviderComponent co component.Capacity = state.MaxShots; component.FireCost = state.FireCost; UpdateAmmoCount(uid, prediction: false); + + if (component is HitscanBatteryAmmoProviderComponent hitscan && state.Prototype != null) // Shitmed Change + hitscan.Prototype = state.Prototype; } private void OnBatteryGetState(EntityUid uid, BatteryAmmoProviderComponent component, ref ComponentGetState args) { - args.State = new BatteryAmmoProviderComponentState() + var state = new BatteryAmmoProviderComponentState() // Shitmed Change { Shots = component.Shots, MaxShots = component.Capacity, FireCost = component.FireCost, }; + + if (TryComp(uid, out var hitscan)) // Shitmed Change + state.Prototype = hitscan.Prototype; + + args.State = state; // Shitmed Change } private void OnBatteryExamine(EntityUid uid, BatteryAmmoProviderComponent component, ExaminedEvent args) @@ -116,5 +124,6 @@ private sealed class BatteryAmmoProviderComponentState : ComponentState public int Shots; public int MaxShots; public float FireCost; + public string? Prototype; // Shitmed Change } } diff --git a/Content.Shared/_Shitmed/Abilities/Goliath/GoliathTentacleComponent.cs b/Content.Shared/_Shitmed/Abilities/Goliath/GoliathTentacleComponent.cs new file mode 100644 index 00000000000..c81ffc7bcc6 --- /dev/null +++ b/Content.Shared/_Shitmed/Abilities/Goliath/GoliathTentacleComponent.cs @@ -0,0 +1,18 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared._Shitmed.GoliathTentacle; + +/// +/// Component that grants the entity the ability to use goliath tentacles. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class GoliathTentacleComponent : Component +{ + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? Action = "ActionGoliathTentacleCrew"; + + [DataField, AutoNetworkedField] + public EntityUid? ActionEntity; +} diff --git a/Content.Shared/_Shitmed/Abilities/Goliath/GoliathTentacleSystem.cs b/Content.Shared/_Shitmed/Abilities/Goliath/GoliathTentacleSystem.cs new file mode 100644 index 00000000000..a8525929cff --- /dev/null +++ b/Content.Shared/_Shitmed/Abilities/Goliath/GoliathTentacleSystem.cs @@ -0,0 +1,23 @@ +using Content.Shared.Actions; + +namespace Content.Shared._Shitmed.GoliathTentacle; + +internal sealed class GoliathTentacleSystem : EntitySystem +{ + [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; + public override void Initialize() + { + SubscribeLocalEvent(OnStartup); + SubscribeLocalEvent(OnShutdown); + } + + private void OnStartup(EntityUid uid, GoliathTentacleComponent component, ComponentStartup args) + { + _actionsSystem.AddAction(uid, ref component.ActionEntity, component.Action); + } + + private void OnShutdown(EntityUid uid, GoliathTentacleComponent component, ComponentShutdown args) + { + _actionsSystem.RemoveAction(uid, component.ActionEntity); + } +} diff --git a/Content.Shared/_Shitmed/Surgery/Conditions/SurgeryBodyComponentConditionComponent.cs b/Content.Shared/_Shitmed/Surgery/Conditions/SurgeryBodyComponentConditionComponent.cs new file mode 100644 index 00000000000..3d08e61e7c8 --- /dev/null +++ b/Content.Shared/_Shitmed/Surgery/Conditions/SurgeryBodyComponentConditionComponent.cs @@ -0,0 +1,24 @@ +using Content.Shared.Body.Part; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._Shitmed.Medical.Surgery.Conditions; + +// +// What components are necessary in the body for the surgery to be valid. +// +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryBodyComponentConditionComponent : Component +{ + // + // The components to check for. + // + [DataField(required: true)] + public ComponentRegistry Components; + + // + // If true, the lack of these components will instead make the surgery valid. + // + [DataField] + public bool Inverse = false; +} \ No newline at end of file diff --git a/Content.Shared/_Shitmed/Surgery/Conditions/SurgeryComponentConditionComponent.cs b/Content.Shared/_Shitmed/Surgery/Conditions/SurgeryComponentConditionComponent.cs deleted file mode 100644 index af03fbf912c..00000000000 --- a/Content.Shared/_Shitmed/Surgery/Conditions/SurgeryComponentConditionComponent.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Content.Shared.Body.Part; -using Robust.Shared.GameStates; -using Robust.Shared.Prototypes; - -namespace Content.Shared._Shitmed.Medical.Surgery.Conditions; - -// Quite the redundant name eh? -[RegisterComponent, NetworkedComponent] -public sealed partial class SurgeryComponentConditionComponent : Component -{ - [DataField] - public ComponentRegistry Component; - - [DataField] - public bool Inverse; - -} \ No newline at end of file diff --git a/Content.Shared/_Shitmed/Surgery/Conditions/SurgeryOrganOnAddConditionComponent.cs b/Content.Shared/_Shitmed/Surgery/Conditions/SurgeryOrganOnAddConditionComponent.cs new file mode 100644 index 00000000000..407488f70d6 --- /dev/null +++ b/Content.Shared/_Shitmed/Surgery/Conditions/SurgeryOrganOnAddConditionComponent.cs @@ -0,0 +1,26 @@ +using Content.Shared.Body.Part; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._Shitmed.Medical.Surgery.Conditions; + +// +// What components are necessary in the part's organs' OnAdd fields for the surgery to be valid. +// +// Not all components need to be present (or missing for Inverse = true). At least one component matching (or missing) can make the surgery valid. +// +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryOrganOnAddConditionComponent : Component +{ + // + // The components to check for on each organ, with the key being the organ's SlotId. + // + [DataField(required: true)] + public Dictionary Components; + + // + // If true, the lack of these components will instead make the surgery valid. + // + [DataField] + public bool Inverse = false; +} \ No newline at end of file diff --git a/Content.Shared/_Shitmed/Surgery/Conditions/SurgeryPartComponentConditionComponent.cs b/Content.Shared/_Shitmed/Surgery/Conditions/SurgeryPartComponentConditionComponent.cs new file mode 100644 index 00000000000..096715a9e82 --- /dev/null +++ b/Content.Shared/_Shitmed/Surgery/Conditions/SurgeryPartComponentConditionComponent.cs @@ -0,0 +1,24 @@ +using Content.Shared.Body.Part; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._Shitmed.Medical.Surgery.Conditions; + +// +// What components are necessary in the targeted body part for the surgery to be valid. +// +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryPartComponentConditionComponent : Component +{ + // + // The components to check for. + // + [DataField(required: true)] + public ComponentRegistry Components; + + // + // If true, the lack of these components will instead make the surgery valid. + // + [DataField] + public bool Inverse = false; +} \ No newline at end of file diff --git a/Content.Shared/_Shitmed/Surgery/SharedSurgerySystem.Steps.cs b/Content.Shared/_Shitmed/Surgery/SharedSurgerySystem.Steps.cs index 3b8a9461525..a01077c77d2 100644 --- a/Content.Shared/_Shitmed/Surgery/SharedSurgerySystem.Steps.cs +++ b/Content.Shared/_Shitmed/Surgery/SharedSurgerySystem.Steps.cs @@ -4,6 +4,7 @@ using Content.Shared.Body.Part; using Content.Shared.Body.Organ; using Content.Shared.Body.Events; +using Content.Shared._Shitmed.BodyEffects; using Content.Shared._Shitmed.Body.Events; using Content.Shared.Buckle.Components; using Content.Shared.Containers.ItemSlots; @@ -123,6 +124,47 @@ private void OnToolStep(Entity ent, ref SurgeryStepEvent a } } + // Dude this fucking function is so bloated now what the fuck. + if (ent.Comp.AddOrganOnAdd != null) + { + var organSlotIdToOrgan = _body.GetPartOrgans(args.Part).ToDictionary(o => o.Item2.SlotId, o => o); + + foreach (var (organSlotId, compsToAdd) in ent.Comp.AddOrganOnAdd) + { + if (!organSlotIdToOrgan.TryGetValue(organSlotId, out var organValue)) + continue; + var (organId, organ) = organValue; + + organ.OnAdd ??= new(); + + foreach (var (key, compToAdd) in compsToAdd) + organ.OnAdd[key] = compToAdd; + + EnsureComp(organId); + RaiseLocalEvent(organId, new OrganComponentsModifyEvent(args.Body, true)); + } + } + + if (ent.Comp.RemoveOrganOnAdd != null) + { + var organSlotIdToOrgan = _body.GetPartOrgans(args.Part).ToDictionary(o => o.Item2.SlotId, o => o); + + foreach (var (organSlotId, compsToRemove) in ent.Comp.RemoveOrganOnAdd) + { + if (!organSlotIdToOrgan.TryGetValue(organSlotId, out var organValue) || + organValue.Item2.OnAdd == null) + continue; + var (organId, organ) = organValue; + + // Need to raise this event first before removing the component entries so + // OrganEffectSystem still knows which components on the body to remove + RaiseLocalEvent(organId, new OrganComponentsModifyEvent(args.Body, false)); + foreach (var key in compsToRemove.Keys) + organ.OnAdd.Remove(key); + } + } + + //if (!HasComp(args.Body)) // //RaiseLocalEvent(args.Body, new MoodEffectEvent("SurgeryPain")); // No mood on Goob :( @@ -188,6 +230,38 @@ private void OnToolCheck(Entity ent, ref SurgeryStepComple } } } + + if (ent.Comp.AddOrganOnAdd != null) + { + var organSlotIdToOrgan = _body.GetPartOrgans(args.Part).ToDictionary(o => o.Item2.SlotId, o => o.Item2); + foreach (var (organSlotId, compsToAdd) in ent.Comp.AddOrganOnAdd) + { + if (!organSlotIdToOrgan.TryGetValue(organSlotId, out var organ)) + continue; + + if (organ.OnAdd == null || compsToAdd.Keys.Any(key => !organ.OnAdd.ContainsKey(key))) + { + args.Cancelled = true; + return; + } + } + } + + if (ent.Comp.RemoveOrganOnAdd != null) + { + var organSlotIdToOrgan = _body.GetPartOrgans(args.Part).ToDictionary(o => o.Item2.SlotId, o => o.Item2); + foreach (var (organSlotId, compsToRemove) in ent.Comp.RemoveOrganOnAdd) + { + if (!organSlotIdToOrgan.TryGetValue(organSlotId, out var organ) || organ.OnAdd == null) + continue; + + if (compsToRemove.Keys.Any(key => organ.OnAdd.ContainsKey(key))) + { + args.Cancelled = true; + return; + } + } + } } private void OnToolCanPerform(Entity ent, ref SurgeryCanPerformStepEvent args) diff --git a/Content.Shared/_Shitmed/Surgery/SharedSurgerySystem.cs b/Content.Shared/_Shitmed/Surgery/SharedSurgerySystem.cs index e05240cd367..fe12eed8fe7 100644 --- a/Content.Shared/_Shitmed/Surgery/SharedSurgerySystem.cs +++ b/Content.Shared/_Shitmed/Surgery/SharedSurgerySystem.cs @@ -71,7 +71,6 @@ public override void Initialize() SubscribeLocalEvent(OnTargetDoAfter); SubscribeLocalEvent(OnCloseIncisionValid); //SubscribeLocalEvent(OnLarvaValid); - SubscribeLocalEvent(OnComponentConditionValid); SubscribeLocalEvent(OnHasBodyConditionValid); SubscribeLocalEvent(OnPartConditionValid); SubscribeLocalEvent(OnOrganConditionValid); @@ -79,6 +78,9 @@ public override void Initialize() SubscribeLocalEvent(OnPartRemovedConditionValid); SubscribeLocalEvent(OnPartPresentConditionValid); SubscribeLocalEvent(OnMarkingPresentValid); + SubscribeLocalEvent(OnBodyComponentConditionValid); + SubscribeLocalEvent(OnPartComponentConditionValid); + SubscribeLocalEvent(OnOrganOnAddConditionValid); //SubscribeLocalEvent(OnRemoveLarva); SubscribeLocalEvent(OnPrototypesReloaded); @@ -154,13 +156,13 @@ private void OnWoundedValid(Entity ent, ref Su args.Cancelled = true; }*/ - private void OnComponentConditionValid(Entity ent, ref SurgeryValidEvent args) + private void OnBodyComponentConditionValid(Entity ent, ref SurgeryValidEvent args) { var present = true; - foreach (var reg in ent.Comp.Component.Values) + foreach (var reg in ent.Comp.Components.Values) { var compType = reg.Component.GetType(); - if (!HasComp(args.Part, compType)) + if (!HasComp(args.Body, compType)) present = false; } @@ -168,6 +170,58 @@ private void OnComponentConditionValid(Entity ent, ref SurgeryValidEvent args) + { + var present = true; + foreach (var reg in ent.Comp.Components.Values) + { + var compType = reg.Component.GetType(); + if (!HasComp(args.Part, compType)) + present = false; + } + if (ent.Comp.Inverse ? present : !present) + args.Cancelled = true; + } + + // This is literally a duplicate of the checks in OnToolCheck for SurgeryStepComponent.AddOrganOnAdd + private void OnOrganOnAddConditionValid(Entity ent, ref SurgeryValidEvent args) + { + if (!TryComp(args.Part, out var part) + || part.Body != args.Body) + { + args.Cancelled = true; + return; + } + + var organSlotIdToOrgan = _body.GetPartOrgans(args.Part, part).ToDictionary(o => o.Item2.SlotId, o => o.Item2); + + var allOnAddFound = true; + var zeroOnAddFound = true; + + foreach (var (organSlotId, components) in ent.Comp.Components) + { + if (!organSlotIdToOrgan.TryGetValue(organSlotId, out var organ)) + continue; + + if (organ.OnAdd == null) + { + allOnAddFound = false; + continue; + } + + foreach (var key in components.Keys) + { + if (!organ.OnAdd.ContainsKey(key)) + allOnAddFound = false; + else + zeroOnAddFound = false; + } + } + + if (ent.Comp.Inverse ? allOnAddFound : zeroOnAddFound) + args.Cancelled = true; + } + private void OnHasBodyConditionValid(Entity ent, ref SurgeryValidEvent args) { if (CompOrNull(args.Part)?.Body == null) diff --git a/Content.Shared/_Shitmed/Surgery/Steps/SurgeryStepComponent.cs b/Content.Shared/_Shitmed/Surgery/Steps/SurgeryStepComponent.cs index 7f1eed78649..fe3463a5d95 100644 --- a/Content.Shared/_Shitmed/Surgery/Steps/SurgeryStepComponent.cs +++ b/Content.Shared/_Shitmed/Surgery/Steps/SurgeryStepComponent.cs @@ -23,6 +23,24 @@ public sealed partial class SurgeryStepComponent : Component [DataField] public ComponentRegistry? BodyRemove; + /// + /// These components will be added to the body part's organs' OnAdd field. + /// Each key is the SlotId of the organ to look for. + /// + /// Used to make organs add components to whatever body it's residing in. + /// + [DataField] + public Dictionary? AddOrganOnAdd; + + /// + /// These components will be removed from the body part's organs' OnAdd field. + /// Each key is the SlotId of the organ to look for. + /// + /// Used to stop organs from adding components to whatever body it's residing in. + /// + [DataField] + public Dictionary? RemoveOrganOnAdd; + [DataField] public float Duration = 2f; } diff --git a/Resources/Locale/en-US/_Shitmed/surgery/surgery-popup.ftl b/Resources/Locale/en-US/_Shitmed/surgery/surgery-popup.ftl index dd49176148b..5d5c062f09a 100644 --- a/Resources/Locale/en-US/_Shitmed/surgery/surgery-popup.ftl +++ b/Resources/Locale/en-US/_Shitmed/surgery/surgery-popup.ftl @@ -50,4 +50,5 @@ surgery-popup-step-SurgeryStepInsertHeart = {$user} is inserting a heart into {$ surgery-popup-step-SurgeryStepInsertStomach = {$user} is inserting a stomach into {$target}'s {$part}! surgery-popup-step-SurgeryStepSealOrganWound = {$user} is sealing the wounds on {$target}'s {$part}. -surgery-popup-step-SurgeryStepLobotomize = {$user} is drilling a hole into {$target}'s {$part}. \ No newline at end of file +surgery-popup-step-SurgeryStepLobotomize = {$user} is lobotomizing {$target}! +surgery-popup-step-SurgeryStepMendBrainTissue = {$user} is mending the brain tissue on {$target}'s {$part}. \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml index 19768f8dc23..6e5a9cd64a2 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/reptilian.yml @@ -262,7 +262,7 @@ id: LizardHornsArgali bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Kobold] # Shitmed Change sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_argali @@ -271,7 +271,7 @@ id: LizardHornsAyrshire bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Kobold] # Shitmed Change sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_ayrshire @@ -280,7 +280,7 @@ id: LizardHornsMyrsore bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Kobold] # Shitmed Change sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_myrsore @@ -289,7 +289,7 @@ id: LizardHornsBighorn bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Kobold] # Shitmed Change sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_bighorn @@ -298,7 +298,7 @@ id: LizardHornsDemonic bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Kobold] # Shitmed Change sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_demonic @@ -307,7 +307,7 @@ id: LizardHornsKoboldEars bodyPart: HeadTop markingCategory: HeadTop - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Kobold] # Shitmed Change sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_kobold_ears @@ -316,7 +316,7 @@ id: LizardHornsFloppyKoboldEars bodyPart: HeadSide markingCategory: HeadSide - speciesRestriction: [Reptilian] + speciesRestriction: [Reptilian, Kobold] # Shitmed Change sprites: - sprite: Mobs/Customization/reptilian_parts.rsi state: horns_floppy_kobold_ears diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index 11a3a8d0c6c..0403cf7c222 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -1267,8 +1267,12 @@ abstract: true components: - type: CombatMode - - type: SurgeryTarget # Shitmed - - type: Targeting # Shitmed + # Shitmed Change Start + - type: SurgeryTarget + - type: Targeting + - type: HumanoidAppearance + species: Monkey + # Shitmed Change End - type: Inventory templateId: monkey speciesId: monkey @@ -1293,24 +1297,48 @@ - type: Sprite drawdepth: Mobs layers: - - map: ["enum.DamageStateVisualLayers.Base"] - state: monkey - sprite: Mobs/Animals/monkey.rsi - - map: [ "jumpsuit" ] - - map: [ "enum.HumanoidVisualLayers.Handcuffs" ] + # Shitmed Change Start + - map: [ "enum.HumanoidVisualLayers.Chest" ] + - map: [ "enum.HumanoidVisualLayers.Head" ] + - map: [ "enum.HumanoidVisualLayers.Snout" ] + - map: [ "enum.HumanoidVisualLayers.Eyes" ] + - map: [ "enum.HumanoidVisualLayers.RArm" ] + - map: [ "enum.HumanoidVisualLayers.LArm" ] + - map: [ "enum.HumanoidVisualLayers.RLeg" ] + - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - map: ["jumpsuit"] + - map: ["enum.HumanoidVisualLayers.LFoot"] + - map: ["enum.HumanoidVisualLayers.RFoot"] + - map: ["enum.HumanoidVisualLayers.LHand"] + - map: ["enum.HumanoidVisualLayers.RHand"] + - map: ["enum.HumanoidVisualLayers.Handcuffs"] color: "#ffffff" sprite: Objects/Misc/handcuffs.rsi state: body-overlay-2 visible: false + - map: [ "gloves" ] + - map: [ "shoes" ] - map: [ "ears" ] - map: [ "outerClothing" ] + - map: [ "eyes" ] + - map: [ "belt" ] - map: [ "id" ] + - map: [ "neck" ] + - map: [ "back" ] + - map: [ "enum.HumanoidVisualLayers.FacialHair" ] + - map: [ "enum.HumanoidVisualLayers.Hair" ] + - map: [ "enum.HumanoidVisualLayers.HeadSide" ] + - map: [ "enum.HumanoidVisualLayers.HeadTop" ] + - map: [ "enum.HumanoidVisualLayers.Tail" ] - map: [ "mask" ] - map: [ "head" ] + - map: [ "pocket1" ] + - map: [ "pocket2" ] - map: [ "clownedon" ] sprite: "Effects/creampie.rsi" state: "creampie_human" visible: false + # Shitmed Change End - type: Carriable #DeltaV - type: Hands - type: ComplexInteraction @@ -1320,10 +1348,10 @@ clownedon: True: {visible: true} False: {visible: false} - - type: Body - prototype: Primate - requiredLegs: 1 # TODO: More than 1 leg - - type: UserInterface # Shitmed: Add SurgeryUIKey on top of stripping ui + - type: Body # Shitmed Change + prototype: Monkey + requiredLegs: 2 + - type: UserInterface # Shitmed interfaces: enum.StrippingUiKey.Key: type: StrippableBoundUserInterface @@ -1477,6 +1505,13 @@ - type: LizardAccent - type: ReplacementAccent accent: kobold + # Shitmed Change Start + - type: HumanoidAppearance + species: Kobold + - type: Body + prototype: Kobold + requiredLegs: 2 + # Shitmed Change End - type: Speech speechSounds: Lizard speechVerb: Reptilian @@ -1521,47 +1556,6 @@ coldDamageThreshold: 285 currentTemperature: 310.15 specificHeat: 42 - - type: Sprite - drawdepth: Mobs - layers: - - map: ["enum.DamageStateVisualLayers.Base"] - sprite: Mobs/Animals/kobold.rsi - state: kobold - - map: [ "outline" ] - sprite: Mobs/Animals/kobold.rsi - state: outline - - map: [ "horns" ] - sprite: Mobs/Customization/reptilian_parts.rsi - state: horns_short - - map: [ "enum.HumanoidVisualLayers.Handcuffs" ] - color: "#ffffff" - sprite: Objects/Misc/handcuffs.rsi - state: body-overlay-2 - visible: false - - map: [ "ears" ] - - map: [ "id" ] - - map: [ "mask" ] - - map: [ "head" ] - - map: [ "clownedon" ] - sprite: "Effects/creampie.rsi" - state: "creampie_human" - visible: false - - type: RandomSprite - getAllGroups: true - available: - - enum.DamageStateVisualLayers.Base: - kobold: KoboldColors - - horns: - horns_curled: KoboldHornColors - horns_ram: KoboldHornColors - horns_short: KoboldHornColors - horns_myrsore: KoboldHornColors - horns_bighorn: KoboldHornColors - horns_argali: KoboldHornColors - horns_ayrshire: KoboldHornColors - horns_floppy_kobold_ears: Inherit - horns_double: Inherit - horns_kobold_ears: Inherit - type: Butcherable butcheringType: Spike spawned: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml b/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml index 2bd2a5f6d7c..58163410f49 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml @@ -38,6 +38,8 @@ name: goliath description: A massive beast that uses long tentacles to ensnare its prey, threatening them is not advised under any conditions. components: + - type: Body # Shitmed Change + prototype: Goliath - type: Sprite sprite: Mobs/Aliens/Asteroid/goliath.rsi layers: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml b/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml index f10d03886a5..e425b1438b7 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml @@ -4,6 +4,8 @@ parent: SimpleMobBase description: From the Viking age. components: + - type: Body # Shitmed Change + prototype: LaserRaptor - type: NpcFactionMember factions: - SimpleHostile @@ -43,22 +45,6 @@ - type: Tag tags: - FootstepSound - - type: HitscanBatteryAmmoProvider - proto: RedLightLaser - fireCost: 50 - - type: BatterySelfRecharger - autoRecharge: true - autoRechargeRate: 50 - - type: Battery - maxCharge: 1000 - startingCharge: 1000 - - type: Gun - fireRate: 1 - useKey: false - selectedMode: SemiAuto - availableModes: - - SemiAuto - soundGunshot: /Audio/Weapons/Guns/Gunshots/laser_cannon.ogg - type: CombatMode - type: InteractionPopup successChance: 0.3 @@ -220,4 +206,4 @@ types: Blunt: 0.11 - type: StaticPrice - price: 400 \ No newline at end of file + price: 400 diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/space.yml b/Resources/Prototypes/Entities/Mobs/NPCs/space.yml index 0dc96ba6f31..b603f300572 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/space.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/space.yml @@ -279,6 +279,8 @@ parent: MobSpaceBasic description: Long fangs and a glowing hood, and the alluring look begs to come closer. components: + - type: Body # Shitmed Change + prototype: SpaceCobra - type: Sprite drawdepth: Mobs sprite: Mobs/Animals/spacecobra.rsi @@ -356,12 +358,6 @@ radius: 1.1 energy: 1.5 color: "#4faffb" - - type: Stealth - enabledOnDeath: false - maxVisibility: 1.2 - - type: StealthOnMove - passiveVisibilityRate: -0.25 - movementVisibilityRate: 0.25 - type: entity id: MobCobraSpaceSalvage diff --git a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml index c750b568b40..3389b2b81fb 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml @@ -6,6 +6,8 @@ description: A flying leviathan, loosely related to space carps. abstract: true components: + - type: Body # Shitmed + prototype: SpaceDragon - type: Bloodstream bloodMaxVolume: 650 - type: GhostRole @@ -159,9 +161,6 @@ components: - type: Dragon spawnRiftAction: ActionSpawnRift - - type: ActionGun - action: ActionDragonsBreath - gunProto: DragonsBreathGun - type: GuideHelp guides: - MinorAntagonists diff --git a/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml b/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml index c73a2e6f935..94a32f5cb07 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml @@ -2,6 +2,11 @@ - type: randomHumanoidSettings id: EventHumanoid + # start-backmen: species + speciesBlacklist: + - Monkey + - Kobold + # end-backmen: species components: - type: RandomHumanoidAppearance randomizeName: false diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml index 8a1198d7767..759bcf96d84 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml @@ -463,4 +463,14 @@ - type: Tweezers speed: 2 - type: Tending - speed: 2 \ No newline at end of file + speed: 2 + +- type: entity + parent: [ OmnimedTool, BaseSyndicateContraband ] + id: OmnimedToolSyndie + components: + - type: Sprite + state: evil + - type: Item + size: Small + heldPrefix: evil diff --git a/Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml index 19875f7e1bf..02d98ad47ed 100644 --- a/Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml +++ b/Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml @@ -1,60 +1,106 @@ +# This entire file will just be a merge conflict lol. + - type: inventoryTemplate id: monkey slots: - - name: head - slotTexture: head - slotFlags: HEAD - uiWindowPos: 1,2 - strippingWindowPos: 0,0 - displayName: Head - - name: ears - slotTexture: ears - slotFlags: EARS - stripTime: 3 - uiWindowPos: 0,2 - strippingWindowPos: 1,2 - displayName: Ears - - name: mask - slotTexture: mask - slotFlags: MASK - uiWindowPos: 0,1 - strippingWindowPos: 1,1 - displayName: Mask - - name: jumpsuit - slotTexture: uniform - slotFlags: INNERCLOTHING - stripTime: 6 - uiWindowPos: 1,0 - strippingWindowPos: 0,2 - displayName: Jumpsuit - - name: id - slotTexture: id - fullTextureName: template_small - slotFlags: IDCARD - slotGroup: SecondHotbar - stripTime: 6 - uiWindowPos: 2,1 - strippingWindowPos: 2,4 - dependsOn: jumpsuit - displayName: ID - - name: suitstorage - slotTexture: suit_storage - slotFlags: SUITSTORAGE - slotGroup: MainHotbar - stripTime: 3 - uiWindowPos: 2,0 - strippingWindowPos: 2,5 - dependsOn: outerClothing - dependsOnComponents: - - type: AllowSuitStorage - displayName: Suit Storage - - name: outerClothing - slotTexture: suit - slotFlags: OUTERCLOTHING - stripTime: 6 - uiWindowPos: 1,1 - strippingWindowPos: 1,3 - displayName: Suit - whitelist: - tags: - - MonkeyWearable + - name: jumpsuit + slotTexture: uniform + slotFlags: INNERCLOTHING + stripTime: 6 + uiWindowPos: 0,1 + strippingWindowPos: 0,2 + displayName: Jumpsuit + - name: outerClothing + slotTexture: suit + slotFlags: OUTERCLOTHING + stripTime: 6 + uiWindowPos: 1,1 + strippingWindowPos: 1,2 + displayName: Suit + - name: mask + slotTexture: mask + slotFlags: MASK + uiWindowPos: 1,2 + strippingWindowPos: 1,1 + displayName: Mask + - name: eyes + slotTexture: glasses + slotFlags: EYES + stripTime: 3 + uiWindowPos: 0,3 + strippingWindowPos: 0,0 + displayName: Eyes + - name: ears + slotTexture: ears + slotFlags: EARS + stripTime: 3 + uiWindowPos: 2,2 + strippingWindowPos: 2,0 + displayName: Ears + - name: head + slotTexture: head + slotFlags: HEAD + uiWindowPos: 1,3 + strippingWindowPos: 1,0 + displayName: Head + - name: pocket1 + slotTexture: pocket + fullTextureName: template_small + slotFlags: POCKET + slotGroup: MainHotbar + stripTime: 3 + uiWindowPos: 0,3 + strippingWindowPos: 0,4 + dependsOn: jumpsuit + displayName: Pocket 1 + stripHidden: true + - name: pocket2 + slotTexture: pocket + fullTextureName: template_small + slotFlags: POCKET + slotGroup: MainHotbar + stripTime: 3 + uiWindowPos: 2,3 + strippingWindowPos: 1,4 + dependsOn: jumpsuit + displayName: Pocket 2 + stripHidden: true + - name: suitstorage + slotTexture: suit_storage + slotFlags: SUITSTORAGE + slotGroup: MainHotbar + stripTime: 3 + uiWindowPos: 2,0 + strippingWindowPos: 2,5 + dependsOn: outerClothing + dependsOnComponents: + - type: AllowSuitStorage + displayName: Suit Storage + - name: id + slotTexture: id + fullTextureName: template_small + slotFlags: IDCARD + slotGroup: SecondHotbar + stripTime: 6 + uiWindowPos: 2,1 + strippingWindowPos: 2,4 + dependsOn: jumpsuit + displayName: ID + - name: belt + slotTexture: belt + fullTextureName: template_small + slotFlags: BELT + slotGroup: SecondHotbar + stripTime: 6 + uiWindowPos: 3,1 + strippingWindowPos: 1,5 + displayName: Belt + - name: back + slotTexture: back + fullTextureName: template_small + slotFlags: BACK + slotGroup: SecondHotbar + stripTime: 6 + uiWindowPos: 3,0 + strippingWindowPos: 0,5 + displayName: Back \ No newline at end of file diff --git a/Resources/Prototypes/Roles/Antags/nukeops.yml b/Resources/Prototypes/Roles/Antags/nukeops.yml index ff86f314964..151b5f6bff7 100644 --- a/Resources/Prototypes/Roles/Antags/nukeops.yml +++ b/Resources/Prototypes/Roles/Antags/nukeops.yml @@ -109,6 +109,7 @@ - HandheldHealthAnalyzer - CombatMedipen - DeathAcidifierImplanter + - OmnimedToolSyndie # Shitmed #Lone Operative Gear - type: startingGear diff --git a/Resources/Prototypes/_Shitmed/Body/Actions/organactions.yml b/Resources/Prototypes/_Shitmed/Body/Actions/organactions.yml new file mode 100644 index 00000000000..2558266726e --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Body/Actions/organactions.yml @@ -0,0 +1,20 @@ +# Technically goliath will also have these, but its HTN should not abuse it. +# Only player controlled ones would, and you could claim its a feature to throw salvies off at that point :trollface: +- type: entity + id: ActionGoliathTentacleCrew + name: "[color=red]Tentacle Slam[/color]" + description: Use your tentacles to grab and stun a target player! + components: + - type: EntityWorldTargetAction + raiseOnUser: true + icon: + sprite: Mobs/Aliens/Asteroid/goliath.rsi + state: goliath_tentacle_spawn + iconOn: + sprite: Mobs/Aliens/Asteroid/goliath.rsi + state: goliath_tentacle_wiggle + sound: + path: "/Audio/Weapons/slash.ogg" + event: !type:GoliathSummonTentacleAction + useDelay: 80 + range: 10 diff --git a/Resources/Prototypes/_Shitmed/Body/Organs/Animal/animal.yml b/Resources/Prototypes/_Shitmed/Body/Organs/Animal/animal.yml new file mode 100644 index 00000000000..53485bfdc45 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Body/Organs/Animal/animal.yml @@ -0,0 +1,62 @@ +- type: entity + id: OrganAnimalBrain + parent: BaseAnimalOrganUnGibbable + name: animal brain + description: "Not so intelligence, not so honk." + components: + - type: Sprite + state: brain + - type: Organ + slotId: brain + - type: Input + context: "ghost" + - type: Brain + - type: InputMover + - type: Examiner + - type: BlockMovement + - type: BadFood + - type: Tag + tags: + - Meat + - type: SolutionContainerManager + solutions: + organ: + reagents: + - ReagentId: Nutriment + Quantity: 10 + food: + maxVol: 5 + reagents: + - ReagentId: GreyMatter + Quantity: 5 + - type: FlavorProfile + flavors: + - people + - type: FoodSequenceElement + entries: + burger: + name: food-sequence-content-brain + taco: + name: food-sequence-content-brain + - type: Item + size: Small + heldPrefix: brain + +- type: entity + id: OrganAnimalEyes + parent: BaseAnimalOrgan + name: animal eyes + description: "I see you!" + components: + # start-backmen: surgery + - type: Organ + slotId: eyes + - type: Eyes + # end-backmen: surgery + - type: Sprite + layers: + - state: eyeball-l + - state: eyeball-r + - type: Item + size: Small + heldPrefix: eyeballs diff --git a/Resources/Prototypes/_Shitmed/Body/Organs/Animal/kobold.yml b/Resources/Prototypes/_Shitmed/Body/Organs/Animal/kobold.yml new file mode 100644 index 00000000000..5493846e353 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Body/Organs/Animal/kobold.yml @@ -0,0 +1,119 @@ +# TODO: Add descriptions (many) + +- type: entity + id: PartKobold + parent: [BaseItem, BasePart] + name: "kobold body part" + abstract: true + components: + - type: Extractable + juiceSolution: + reagents: + - ReagentId: Fat + Quantity: 3 + - ReagentId: Blood + Quantity: 10 + +- type: entity + id: TorsoKobold + name: "kobold torso" + parent: [PartKobold, BaseTorso] + components: + - type: Sprite + sprite: Mobs/Animals/kobold.rsi + state: "torso_m" + - type: Extractable + juiceSolution: + reagents: + - ReagentId: Fat + Quantity: 10 + - ReagentId: Blood + Quantity: 20 + +- type: entity + id: HeadKobold + name: "kobold head" + parent: [PartKobold, BaseHead] + components: + - type: Sprite + sprite: Mobs/Animals/kobold.rsi + state: "head_m" + - type: Extractable + juiceSolution: + reagents: + - ReagentId: Fat + Quantity: 5 + - ReagentId: Blood + Quantity: 10 + +- type: entity + id: LeftArmKobold + name: "left kobold arm" + parent: [PartKobold, BaseLeftArm] + components: + - type: Sprite + sprite: Mobs/Animals/kobold.rsi + state: "l_arm" + +- type: entity + id: RightArmKobold + name: "right kobold arm" + parent: [PartKobold, BaseRightArm] + components: + - type: Sprite + sprite: Mobs/Animals/kobold.rsi + state: "r_arm" + +- type: entity + id: LeftHandKobold + name: "left kobold hand" + parent: [PartKobold, BaseLeftHand] + components: + - type: Sprite + sprite: Mobs/Animals/kobold.rsi + state: "l_hand" + +- type: entity + id: RightHandKobold + name: "right kobold hand" + parent: [PartKobold, BaseRightHand] + components: + - type: Sprite + sprite: Mobs/Animals/kobold.rsi + state: "r_hand" + +- type: entity + id: LeftLegKobold + name: "left kobold leg" + parent: [PartKobold, BaseLeftLeg] + components: + - type: Sprite + sprite: Mobs/Animals/kobold.rsi + state: "l_leg" + +- type: entity + id: RightLegKobold + name: "right kobold leg" + parent: [PartKobold, BaseRightLeg] + components: + - type: Sprite + sprite: Mobs/Animals/kobold.rsi + state: "r_leg" + +- type: entity + id: LeftFootKobold + name: "left kobold foot" + parent: [PartKobold, BaseLeftFoot] + components: + - type: Sprite + sprite: Mobs/Animals/kobold.rsi + state: "l_foot" + +- type: entity + id: RightFootKobold + name: "right kobold foot" + parent: [PartKobold, BaseRightFoot] + components: + - type: Sprite + sprite: Mobs/Animals/kobold.rsi + state: "r_foot" diff --git a/Resources/Prototypes/_Shitmed/Body/Organs/Animal/monkey.yml b/Resources/Prototypes/_Shitmed/Body/Organs/Animal/monkey.yml new file mode 100644 index 00000000000..01b8aa4de8a --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Body/Organs/Animal/monkey.yml @@ -0,0 +1,119 @@ +# TODO: Add descriptions (many) + +- type: entity + id: PartMonkey + parent: [BaseItem, BasePart] + name: "monkey body part" + abstract: true + components: + - type: Extractable + juiceSolution: + reagents: + - ReagentId: Fat + Quantity: 3 + - ReagentId: Blood + Quantity: 10 + +- type: entity + id: TorsoMonkey + name: "monkey torso" + parent: [PartMonkey, BaseTorso] + components: + - type: Sprite + sprite: Mobs/Animals/monkey.rsi + state: "torso_m" + - type: Extractable + juiceSolution: + reagents: + - ReagentId: Fat + Quantity: 10 + - ReagentId: Blood + Quantity: 20 + +- type: entity + id: HeadMonkey + name: "monkey head" + parent: [PartMonkey, BaseHead] + components: + - type: Sprite + sprite: Mobs/Animals/monkey.rsi + state: "head_m" + - type: Extractable + juiceSolution: + reagents: + - ReagentId: Fat + Quantity: 5 + - ReagentId: Blood + Quantity: 10 + +- type: entity + id: LeftArmMonkey + name: "left monkey arm" + parent: [PartMonkey, BaseLeftArm] + components: + - type: Sprite + sprite: Mobs/Animals/monkey.rsi + state: "l_arm" + +- type: entity + id: RightArmMonkey + name: "right monkey arm" + parent: [PartMonkey, BaseRightArm] + components: + - type: Sprite + sprite: Mobs/Animals/monkey.rsi + state: "r_arm" + +- type: entity + id: LeftHandMonkey + name: "left monkey hand" + parent: [PartMonkey, BaseLeftHand] + components: + - type: Sprite + sprite: Mobs/Animals/monkey.rsi + state: "l_hand" + +- type: entity + id: RightHandMonkey + name: "right monkey hand" + parent: [PartMonkey, BaseRightHand] + components: + - type: Sprite + sprite: Mobs/Animals/monkey.rsi + state: "r_hand" + +- type: entity + id: LeftLegMonkey + name: "left monkey leg" + parent: [PartMonkey, BaseLeftLeg] + components: + - type: Sprite + sprite: Mobs/Animals/monkey.rsi + state: "l_leg" + +- type: entity + id: RightLegMonkey + name: "right monkey leg" + parent: [PartMonkey, BaseRightLeg] + components: + - type: Sprite + sprite: Mobs/Animals/monkey.rsi + state: "r_leg" + +- type: entity + id: LeftFootMonkey + name: "left monkey foot" + parent: [PartMonkey, BaseLeftFoot] + components: + - type: Sprite + sprite: Mobs/Animals/monkey.rsi + state: "l_foot" + +- type: entity + id: RightFootMonkey + name: "right monkey foot" + parent: [PartMonkey, BaseRightFoot] + components: + - type: Sprite + sprite: Mobs/Animals/monkey.rsi + state: "r_foot" diff --git a/Resources/Prototypes/_Shitmed/Body/Organs/Animal/space.yml b/Resources/Prototypes/_Shitmed/Body/Organs/Animal/space.yml index 1c9777d5870..05c61ab31e9 100644 --- a/Resources/Prototypes/_Shitmed/Body/Organs/Animal/space.yml +++ b/Resources/Prototypes/_Shitmed/Body/Organs/Animal/space.yml @@ -14,4 +14,68 @@ components: - type: Organ onAdd: - - type: PressureImmunity \ No newline at end of file + - type: PressureImmunity + +- type: entity + parent: OrganAnimalHeart + id: OrganGoliathHeart + name: goliath heart + components: + - type: Organ + onAdd: + - type: GoliathTentacle + - type: Sprite + sprite: _Shitmed/Mobs/Species/Space/Goliath/organs.rsi + state: heart-on + +- type: entity + parent: OrganAnimalLungs + id: OrganDragonLungs + name: dragon lungs + components: + - type: Organ + onAdd: + - type: ActionGun + action: ActionDragonsBreath + gunProto: DragonsBreathGun + +- type: entity + parent: OrganHumanEyes + id: OrganLaserEyes + name: laser raptor eyes + components: + - type: Organ + onAdd: + - type: HitscanBatteryAmmoProvider + proto: RedLightLaser + fireCost: 50 + - type: BatterySelfRecharger + autoRecharge: true + autoRechargeRate: 25 + - type: Battery + maxCharge: 100 + startingCharge: 0 + - type: Gun + fireRate: 1 + useKey: false + selectedMode: SemiAuto + availableModes: + - SemiAuto + soundGunshot: /Audio/Weapons/Guns/Gunshots/laser_cannon.ogg + +- type: entity + parent: OrganAnimalHeart + id: OrganCobraHeart + name: cobra gland + components: + - type: Organ + onAdd: + - type: Stealth + enabledOnDeath: false + maxVisibility: 1.2 + - type: StealthOnMove + passiveVisibilityRate: -0.25 + movementVisibilityRate: 0.25 + - type: Sprite + sprite: _Shitmed/Mobs/Species/Space/Cobra/organs.rsi + state: heart-on diff --git a/Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/dragon.yml b/Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/dragon.yml new file mode 100644 index 00000000000..85bd9ea92d8 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/dragon.yml @@ -0,0 +1,21 @@ +- type: body + id: SpaceDragon + name: "space dragon" + root: torso + slots: + torso: + part: TorsoAnimal + connections: + - legs + organs: + lungs: OrganDragonLungs + stomach: OrganAnimalStomach + liver: OrganAnimalLiver + heart: OrganAnimalHeart + kidneys: OrganAnimalKidneys + legs: + part: LegsAnimal + connections: + - feet + feet: + part: FeetAnimal diff --git a/Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/goliath.yml b/Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/goliath.yml new file mode 100644 index 00000000000..e13737817c6 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/goliath.yml @@ -0,0 +1,21 @@ +- type: body + id: Goliath + name: "goliath" + root: torso + slots: + torso: + part: TorsoAnimal + connections: + - legs + organs: + lungs: OrganAnimalLungs + stomach: OrganAnimalStomach + liver: OrganAnimalLiver + heart: OrganGoliathHeart # Allows you to use a slower version of their tentacles. + kidneys: OrganAnimalKidneys + legs: + part: LegsAnimal + connections: + - feet + feet: + part: FeetAnimal diff --git a/Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/kobold.yml b/Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/kobold.yml new file mode 100644 index 00000000000..6cf15dae081 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/kobold.yml @@ -0,0 +1,51 @@ +# Shitmed - this is just a copy of human body but with animal organs. +- type: body + id: Kobold + name: "Kobold" + root: torso + slots: + head: + part: HeadKobold + connections: + - torso + organs: + brain: OrganAnimalBrain + eyes: OrganAnimalEyes + torso: + part: TorsoKobold + connections: + - right arm + - left arm + - right leg + - left leg + - head + organs: + heart: OrganAnimalHeart + lungs: OrganAnimalLungs + stomach: OrganAnimalStomach + liver: OrganAnimalLiver + kidneys: OrganAnimalKidneys + right arm: + part: RightArmKobold + connections: + - right hand + left arm: + part: LeftArmKobold + connections: + - left hand + right hand: + part: RightHandKobold + left hand: + part: LeftHandKobold + right leg: + part: RightLegKobold + connections: + - right foot + left leg: + part: LeftLegKobold + connections: + - left foot + right foot: + part: RightFootKobold + left foot: + part: LeftFootKobold diff --git a/Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/laserraptor.yml b/Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/laserraptor.yml new file mode 100644 index 00000000000..1015b932142 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/laserraptor.yml @@ -0,0 +1,26 @@ +- type: body + id: LaserRaptor + name: "space dragon" + root: torso + slots: + head: + part: HeadAnimal + organs: + eyes: OrganLaserEyes + torso: + part: TorsoAnimal + connections: + - legs + - head + organs: + lungs: OrganAnimalLungs + stomach: OrganAnimalStomach + liver: OrganAnimalLiver + heart: OrganAnimalHeart + kidneys: OrganAnimalKidneys + legs: + part: LegsAnimal + connections: + - feet + feet: + part: FeetAnimal diff --git a/Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/monkey.yml b/Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/monkey.yml new file mode 100644 index 00000000000..a34f3c3c42d --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/monkey.yml @@ -0,0 +1,51 @@ +# Shitmed - this is just a copy of human body but with animal organs. +- type: body + id: Monkey + name: "Monkey" + root: torso + slots: + head: + part: HeadMonkey + connections: + - torso + organs: + brain: OrganAnimalBrain + eyes: OrganAnimalEyes + torso: + part: TorsoMonkey + connections: + - right arm + - left arm + - right leg + - left leg + - head + organs: + heart: OrganAnimalHeart + lungs: OrganAnimalLungs + stomach: OrganAnimalStomach + liver: OrganAnimalLiver + kidneys: OrganAnimalKidneys + right arm: + part: RightArmMonkey + connections: + - right hand + left arm: + part: LeftArmMonkey + connections: + - left hand + right hand: + part: RightHandMonkey + left hand: + part: LeftHandMonkey + right leg: + part: RightLegMonkey + connections: + - right foot + left leg: + part: LeftLegMonkey + connections: + - left foot + right foot: + part: RightFootMonkey + left foot: + part: LeftFootMonkey diff --git a/Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/spacecobra.yml b/Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/spacecobra.yml new file mode 100644 index 00000000000..dfd98ca5303 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/spacecobra.yml @@ -0,0 +1,21 @@ +- type: body + id: SpaceCobra + name: "space cobra" + root: torso + slots: + torso: + part: TorsoAnimal + connections: + - legs + organs: + lungs: OrganAnimalLungs + stomach: OrganAnimalStomach + liver: OrganAnimalLiver + heart: OrganCobraHeart # Allows you to become invisible. + kidneys: OrganAnimalKidneys + legs: + part: LegsAnimal + connections: + - feet + feet: + part: FeetAnimal diff --git a/Resources/Prototypes/_Shitmed/Entities/Mobs/Species/primate.yml b/Resources/Prototypes/_Shitmed/Entities/Mobs/Species/primate.yml new file mode 100644 index 00000000000..4a351bd6e86 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Mobs/Species/primate.yml @@ -0,0 +1,41 @@ +- type: entity + save: false + parent: BaseSpeciesDummy + id: MobMonkeyDummy + categories: [ HideSpawnMenu ] + description: A dummy monkey meant to be used in character setup. + components: + - type: Icon + sprite: Mobs/Animals/monkey.rsi + state: full + - type: Appearance + - type: HumanoidAppearance + species: Monkey + - type: Body + prototype: Monkey + requiredLegs: 2 + - type: UserInterface + interfaces: + enum.HumanoidMarkingModifierKey.Key: # sure, this can go here too + type: HumanoidMarkingModifierBoundUserInterface + +- type: entity + save: false + parent: BaseSpeciesDummy + id: MobKoboldDummy + categories: [ HideSpawnMenu ] + description: A dummy kobold meant to be used in character setup. + components: + - type: Icon + sprite: Mobs/Animals/kobold.rsi + state: full + - type: Appearance + - type: HumanoidAppearance + species: Kobold + - type: Body + prototype: Kobold + requiredLegs: 2 + - type: UserInterface + interfaces: + enum.HumanoidMarkingModifierKey.Key: # sure, this can go here too + type: HumanoidMarkingModifierBoundUserInterface \ No newline at end of file diff --git a/Resources/Prototypes/_Shitmed/Entities/Surgery/surgeries.yml b/Resources/Prototypes/_Shitmed/Entities/Surgery/surgeries.yml index 438a91e4c12..cd20e14a2fd 100644 --- a/Resources/Prototypes/_Shitmed/Entities/Surgery/surgeries.yml +++ b/Resources/Prototypes/_Shitmed/Entities/Surgery/surgeries.yml @@ -599,9 +599,18 @@ steps: - SurgeryStepLobotomize - SurgeryStepCloseIncision - - type: SurgeryComponentCondition - component: - - type: OhioAccent + - type: SurgeryOrganCondition + organ: + - type: Brain + - type: SurgeryOrganOnAddCondition + components: + brain: + - type: OhioAccent + - type: RatvarianLanguage + - type: Clumsy + clumsyDamage: # Placeholder values to be able to initialize the component + types: + Blunt: 0 inverse: true - type: SurgeryPartCondition part: Head @@ -617,9 +626,18 @@ steps: - SurgeryStepMendBrainTissue - SurgeryStepCloseIncision - - type: SurgeryComponentCondition - component: - - type: OhioAccent + - type: SurgeryOrganCondition + organ: + - type: Brain + - type: SurgeryOrganOnAddCondition + components: + brain: + - type: OhioAccent + - type: RatvarianLanguage + - type: Clumsy + clumsyDamage: + types: + Blunt: 0 - type: SurgeryPartCondition part: Head diff --git a/Resources/Prototypes/_Shitmed/Entities/Surgery/surgery_steps.yml b/Resources/Prototypes/_Shitmed/Entities/Surgery/surgery_steps.yml index 1b655968dd0..97a693445ac 100644 --- a/Resources/Prototypes/_Shitmed/Entities/Surgery/surgery_steps.yml +++ b/Resources/Prototypes/_Shitmed/Entities/Surgery/surgery_steps.yml @@ -521,10 +521,17 @@ - type: SurgeryStep tool: - type: Drill - bodyAdd: - - type: OhioAccent - - type: RatvarianLanguage - - type: SlurredAccent + addOrganOnAdd: + brain: + - type: OhioAccent + - type: RatvarianLanguage + - type: Clumsy + clumsyDamage: + types: + Blunt: 5 + Piercing: 4 + groups: + Burn: 3 duration: 5 - type: Sprite sprite: _Shitmed/Objects/Specific/Medical/Surgery/drill.rsi @@ -544,14 +551,18 @@ - type: SurgeryStep tool: - type: Hemostat - duration: 5 - bodyRemove: - - type: OhioAccent - - type: RatvarianLanguage - - type: SlurredAccent + duration: 4 + removeOrganOnAdd: + brain: + - type: OhioAccent + - type: RatvarianLanguage + - type: Clumsy + clumsyDamage: + types: + Blunt: 0 - type: Sprite - sprite: _Shitmed/Objects/Specific/Medical/Surgery/drill.rsi - state: drill + sprite: _Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi + state: hemostat - type: SurgeryStepEmoteEffect # The lengths I go to just for a joke... I HATE HARDCODING AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA diff --git a/Resources/Prototypes/_Shitmed/Species/kobold.yml b/Resources/Prototypes/_Shitmed/Species/kobold.yml new file mode 100644 index 00000000000..7d028bb451c --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Species/kobold.yml @@ -0,0 +1,148 @@ +- type: species + id: Kobold + name: species-name-kobold + roundStart: false # sad... + prototype: MobKobold + sprites: MobKoboldSprites + dollPrototype: MobKoboldDummy + skinColoration: Hues + defaultSkinTone: "#9a7c5a" + markingLimits: MobKoboldMarkingLimits + +- type: speciesBaseSprites + id: MobKoboldSprites + sprites: + Special: MobKoboldAnyMarking + Head: MobKoboldHead + Chest: MobKoboldTorso + Tail: MobKoboldTail + Eyes: MobKoboldEyes + HeadTop: MobKoboldHorns + LArm: MobKoboldLArm + RArm: MobKoboldRArm + LHand: MobKoboldLHand + RHand: MobKoboldRHand + LLeg: MobKoboldLLeg + RLeg: MobKoboldRLeg + LFoot: MobKoboldLFoot + RFoot: MobKoboldRFoot + +- type: humanoidBaseSprite + id: MobKoboldAnyMarking + +- type: humanoidBaseSprite + id: MobKoboldMarkingMatchSkin + markingsMatchSkin: true + +- type: humanoidBaseSprite + id: MobKoboldHorns + matchSkin: false + baseSprite: + sprite: Mobs/Customization/reptilian_parts.rsi + state: horns_short + +- type: humanoidBaseSprite + id: MobKoboldHead + baseSprite: + sprite: Mobs/Animals/kobold.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobKoboldHeadMale + baseSprite: + sprite: Mobs/Animals/kobold.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobKoboldHeadFemale + baseSprite: + sprite: Mobs/Animals/kobold.rsi + state: head_f + +- type: humanoidBaseSprite + id: MobKoboldTorso + baseSprite: + sprite: Mobs/Animals/kobold.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobKoboldTorsoMale + baseSprite: + sprite: Mobs/Animals/kobold.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobKoboldTorsoFemale + baseSprite: + sprite: Mobs/Animals/kobold.rsi + state: torso_f + +- type: humanoidBaseSprite + id: MobKoboldLLeg + baseSprite: + sprite: Mobs/Animals/kobold.rsi + state: l_leg + +- type: humanoidBaseSprite + id: MobKoboldLArm + baseSprite: + sprite: Mobs/Animals/kobold.rsi + state: l_arm + +- type: humanoidBaseSprite + id: MobKoboldLHand + baseSprite: + sprite: Mobs/Animals/kobold.rsi + state: l_hand + +- type: humanoidBaseSprite + id: MobKoboldLFoot + baseSprite: + sprite: Mobs/Animals/kobold.rsi + state: l_foot + +- type: humanoidBaseSprite + id: MobKoboldRLeg + baseSprite: + sprite: Mobs/Animals/kobold.rsi + state: r_leg + +- type: humanoidBaseSprite + id: MobKoboldRArm + baseSprite: + sprite: Mobs/Animals/kobold.rsi + state: r_arm + +- type: humanoidBaseSprite + id: MobKoboldRHand + baseSprite: + sprite: Mobs/Animals/kobold.rsi + state: r_hand + +- type: humanoidBaseSprite + id: MobKoboldRFoot + baseSprite: + sprite: Mobs/Animals/kobold.rsi + state: r_foot + +- type: humanoidBaseSprite + id: MobKoboldTail + baseSprite: + sprite: Mobs/Animals/kobold.rsi + state: tail + +- type: humanoidBaseSprite + id: MobKoboldEyes + baseSprite: + sprite: Mobs/Animals/kobold.rsi + state: eyes + +- type: markingPoints + id: MobKoboldMarkingLimits + points: + Special: # the cat ear joke + points: 1 + required: false + Chest: + points: 1 + required: false \ No newline at end of file diff --git a/Resources/Prototypes/_Shitmed/Species/monkey.yml b/Resources/Prototypes/_Shitmed/Species/monkey.yml new file mode 100644 index 00000000000..aa158efce2b --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Species/monkey.yml @@ -0,0 +1,144 @@ +- type: species + id: Monkey + name: species-name-monkey + roundStart: false # sad... + prototype: MobMonkey + sprites: MobMonkeySprites + dollPrototype: MobMonkeyDummy + skinColoration: Hues + defaultSkinTone: "#ffffff" + markingLimits: MobMonkeyMarkingLimits + +- type: speciesBaseSprites + id: MobMonkeySprites + sprites: + Special: MobMonkeyAnyMarking + Head: MobMonkeyHead + HeadTop: MobMonkeyAnyMarking + Chest: MobMonkeyTorso + Tail: MobMonkeyTail + Eyes: MobMonkeyEyes + LArm: MobMonkeyLArm + RArm: MobMonkeyRArm + LHand: MobMonkeyLHand + RHand: MobMonkeyRHand + LLeg: MobMonkeyLLeg + RLeg: MobMonkeyRLeg + LFoot: MobMonkeyLFoot + RFoot: MobMonkeyRFoot + +- type: humanoidBaseSprite + id: MobMonkeyAnyMarking + +- type: humanoidBaseSprite + id: MobMonkeyMarkingMatchSkin + markingsMatchSkin: true + +- type: humanoidBaseSprite + id: MobMonkeyHead + baseSprite: + sprite: Mobs/Animals/monkey.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobMonkeyHeadMale + baseSprite: + sprite: Mobs/Animals/monkey.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobMonkeyHeadFemale + baseSprite: + sprite: Mobs/Animals/monkey.rsi + state: head_f + +- type: humanoidBaseSprite + id: MobMonkeyTorso + baseSprite: + sprite: Mobs/Animals/monkey.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobMonkeyTorsoMale + baseSprite: + sprite: Mobs/Animals/monkey.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobMonkeyTorsoFemale + baseSprite: + sprite: Mobs/Animals/monkey.rsi + state: torso_f + +- type: humanoidBaseSprite + id: MobMonkeyLLeg + baseSprite: + sprite: Mobs/Animals/monkey.rsi + state: l_leg + +- type: humanoidBaseSprite + id: MobMonkeyLArm + baseSprite: + sprite: Mobs/Animals/monkey.rsi + state: l_arm + +- type: humanoidBaseSprite + id: MobMonkeyLHand + baseSprite: + sprite: Mobs/Animals/monkey.rsi + state: l_hand + +- type: humanoidBaseSprite + id: MobMonkeyLFoot + baseSprite: + sprite: Mobs/Animals/monkey.rsi + state: l_foot + +- type: humanoidBaseSprite + id: MobMonkeyRLeg + baseSprite: + sprite: Mobs/Animals/monkey.rsi + state: r_leg + +- type: humanoidBaseSprite + id: MobMonkeyRArm + baseSprite: + sprite: Mobs/Animals/monkey.rsi + state: r_arm + +- type: humanoidBaseSprite + id: MobMonkeyRHand + baseSprite: + sprite: Mobs/Animals/monkey.rsi + state: r_hand + +- type: humanoidBaseSprite + id: MobMonkeyRFoot + baseSprite: + sprite: Mobs/Animals/monkey.rsi + state: r_foot + +- type: humanoidBaseSprite + id: MobMonkeyTail + baseSprite: + sprite: Mobs/Animals/monkey.rsi + state: tail + +- type: humanoidBaseSprite + id: MobMonkeyEyes + baseSprite: + sprite: Mobs/Animals/monkey.rsi + state: eyes + +- type: markingPoints + id: MobMonkeyMarkingLimits + points: + Special: # the cat ear joke + points: 1 # Corvax-Sponsors + required: false + HeadTop: + points: 1 + required: false + Chest: + points: 1 + required: false \ No newline at end of file diff --git a/Resources/Textures/Mobs/Animals/kobold.rsi/eyes.png b/Resources/Textures/Mobs/Animals/kobold.rsi/eyes.png new file mode 100644 index 0000000000000000000000000000000000000000..626bd2fa1ea91ad11f173317e9eaf530fe0b47ec GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|EIeHtLn`LH zy|s~-!GMFsuPx%mq|oHR9J=WmcL6QK@`V7n+@972*x6Vff&-JiEEL@ABBaTa87;{`cIhiv{LZm z{Rh^OoOk#aNJx4~vZaLt34#+$Z6{>sirg+2?$jN*D-QC7WoGuh_nkLy-pm`A;D5x{ z)>h=Tu?Z|wgKRdd{eCKy;_mJ)kh!jF%x7faIF1H5JUIMKcKYQMtu^g-+lbRBbm?@O z-Q8VOUvcvJWUSrU*&&@yo6rG<5s*^qXf#SPnPe%u6#VbF9q#Y%d47K8^77J%(|FGu z$I%-b8}xcTlF4MyUR_zV8;(|t_L0;x57K-F$o@TR& zhzp8^BBfGEzs>dz2YggcE9`&VNA*?k9eg^Va#}H^0z&41lu~bh*bc^zgGWSM1Y^}# zLI0SwS(a|KTA^>m z(6M@WcsO<(M=z!p0XRE5V`^%O+SeMHOopeYCkBJTQK!@SH`P!|sr_nKtyWoETSEwe z=Xq4CRbcc!FhwW_q?Ec?C;~7X4o62(2+q&X@xwhF4v9vMOUvsy;FsTAF2}d;-|(HV zZJS!H7EEqg7Kw!fiG>6hTte_dIrb;+cDpYc{`&IqUrK+HO)$X(6TF2V>5vn%!OY)E P00000NkvXXu0mjfkeFb~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/kobold.rsi/head_f.png b/Resources/Textures/Mobs/Animals/kobold.rsi/head_f.png new file mode 100644 index 0000000000000000000000000000000000000000..6b6102a5b50117596e966f1453b4a4b1e2f0af01 GIT binary patch literal 653 zcmV;80&@L{P)Px%M@d9MRCt{2+QEw2Ko|$`e@&mjV^?s)bnpRWZX)8rOZOslp__wVyKhik4_nx- zJ?A0Z!uA2gqX#c;PO=9HA!JMR0dkd0PloE2(#fK*@c)4%GfC$Ah?BX@2N02|cDr5p zSNk=^e`ESUwOZBNb0GwRAjqzHo@YGXOX62575Ki7G);5IH+n!Rr2(Md>p#0T{62)% z8uR)5U@zei@r|aAloH);7x5~_&9|GKW2e)Bl+t84V^T`=dws;K_}Q=brI#!ITa%kN zn+;~O8Eo6e;A#K>7+ekT;5{IUB5XDr;{;6O$Ez6Y^*WpOg~H30ALHq&l+vwM3tW<1_&V_gvk1WAV3&~xjsLm82|vyW)qXi1eRrCxm*GOeBVc-(SYZ9ro$O4 z6bcB#aHns-O+-XQL_|bHL_|bHM2B+h`hdU1%$q~5`hfin$uv!mvM;!w$M$@iPo6xC z_XYvLwryN|y4dNv9p36g)&~4ZDW&&o1nz#^<=P{(Om21@M_+!vM6p;zk|aoy1g`7i z)ILR$BzSy${A!#*4z*hCx>zj2bzO+}0!fmfR4U=@!x=2gx?U_6|DA`?Kjt`&UM`mq zLZDu+0{~9mon+VVf8Jv>8Xa^NIF6&wKb~jpr(aL7EDO`=6k!+|e+IeMfbHJ=wnj(@ zfhdXq;NUMnDW#>9D3{BKq6p=3Ijd6&g1~qU$d#;8N^grJ(lpH$p<}KA0J7LpO8CBi nwD?3sL_|bHL_|bH^jiG}GLZ}3dqhLk00000NkvXXu0mjfAFD4G literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/kobold.rsi/head_m.png b/Resources/Textures/Mobs/Animals/kobold.rsi/head_m.png new file mode 100644 index 0000000000000000000000000000000000000000..6b6102a5b50117596e966f1453b4a4b1e2f0af01 GIT binary patch literal 653 zcmV;80&@L{P)Px%M@d9MRCt{2+QEw2Ko|$`e@&mjV^?s)bnpRWZX)8rOZOslp__wVyKhik4_nx- zJ?A0Z!uA2gqX#c;PO=9HA!JMR0dkd0PloE2(#fK*@c)4%GfC$Ah?BX@2N02|cDr5p zSNk=^e`ESUwOZBNb0GwRAjqzHo@YGXOX62575Ki7G);5IH+n!Rr2(Md>p#0T{62)% z8uR)5U@zei@r|aAloH);7x5~_&9|GKW2e)Bl+t84V^T`=dws;K_}Q=brI#!ITa%kN zn+;~O8Eo6e;A#K>7+ekT;5{IUB5XDr;{;6O$Ez6Y^*WpOg~H30ALHq&l+vwM3tW<1_&V_gvk1WAV3&~xjsLm82|vyW)qXi1eRrCxm*GOeBVc-(SYZ9ro$O4 z6bcB#aHns-O+-XQL_|bHL_|bHM2B+h`hdU1%$q~5`hfin$uv!mvM;!w$M$@iPo6xC z_XYvLwryN|y4dNv9p36g)&~4ZDW&&o1nz#^<=P{(Om21@M_+!vM6p;zk|aoy1g`7i z)ILR$BzSy${A!#*4z*hCx>zj2bzO+}0!fmfR4U=@!x=2gx?U_6|DA`?Kjt`&UM`mq zLZDu+0{~9mon+VVf8Jv>8Xa^NIF6&wKb~jpr(aL7EDO`=6k!+|e+IeMfbHJ=wnj(@ zfhdXq;NUMnDW#>9D3{BKq6p=3Ijd6&g1~qU$d#;8N^grJ(lpH$p<}KA0J7LpO8CBi nwD?3sL_|bHL_|bH^jiG}GLZ}3dqhLk00000NkvXXu0mjfAFD4G literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/kobold.rsi/innerline.png b/Resources/Textures/Mobs/Animals/kobold.rsi/innerline.png new file mode 100644 index 0000000000000000000000000000000000000000..4be7d2591e14555ebc01585ffe422ba7f93494b7 GIT binary patch literal 10385 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 LNkvXXu0mjfsN}`2 delta 1639 zcmV-t2AKKaQ;|`yJ|cer32;bRa{vG+ng9SOngJI&A+i7f1}I5HK~#8N?VHO|<2n$A zm4y4fiZE{gtbjf5#)`**H(>>=fHxQd#r<{wAAg?wDaFUcY6W{v%~(|_W7*c<{Y&bW z)Qxk0d1;mDzqhwn_{#S7wmUgFak_rh&i?*>8N|rvRpYnElJ0*G_&ADy_4W0kk(0l# znin50NfI{>zL|g&EJ+poe13jT(&3+Q<-T8EweBc8z~9-~NnT%H$HJemNW8JJ0hn9s zt_?n0Tv*KhzU*B(o}Ztem)aEzrvGjc{=)piSoo$9FgrWzR##WuXY%QOUj7`qQqS`$ z3++Qb`1v38G5CL`5x{(VdU|qGQ&aB8+K)_Eu5bUmxwp4B$MY%+?W6en`}==jCMHa( z48AvwfYj}^(m9`f{P6gYDbAGwF+8u50NU^MdM=&!LonQ5U0u23<6|?vnYN{+C3ky! z>sqZ=rZfdosIQ}d`||QK1eL$H$YB}*SpCV#Nw>Vb?52OGr?WZ7k9(#C&n@8Ackuw& znwgoI3|~L)sgLnQ!35xPu=wp(I~xJ~tsnQ)bI*HL#X{c41IX?$25;u6Bo@z^9&KHN-&#Ftp`w0l^Z}nMK+B0xh7s}I8{?)zcxspol>#c!X#afkUjD}E3G^1nAXH}2x%q9tF90Q|V8 z9$UcQ@(xyEM!iqFw9iTtrJ4WwaZkPQEx18$5Z6OlSy^$Lo12-D!}zEm9QAUAdfy^Q z$h&wOrbDOG$wr|HM8x6;jQ}ZhcXyW=AoaSY0r!8@(*u;M2ml{<_wn)JK0ZGN(-8cW z{DkLLLl{KB+1Xj^`uf^&1pvl}0<1@`91IzH#HMS(DWkVK3 z07B9@!%r5!ch$=b5LXKIEJQ5eA4 z=P`ef^1(5?F$)Q5A7kv>AGu|bU}-am0F>9hABFj$Jc_HwsjF)4`w9t1R$n{ASP~|_ zI&=gS#ZhW*ZqD65+-FN&89C;pKioU*j?*G2W>;3$Yg&x?ejj|MCEfwgke(6@mgKv; zyUD{two@IsLo9TIQe0bKUHx5Gey&x$6b660Xx9e`xWKQLzy}8hStnM}DP^73JZ~6i z7-$%17-$%17-$&yUo%h|Ncd{0ytTFEPESvNTYf-)sa~3+P?nz%v>7Vu!a6oSbqt*- z0@4l0kZj|`=VO)pt{eq30sZJpl5R{Ac4AyP4~bP|jPJ4>1>`}7bVNqwC(!U>Qt>2>8QAd^*j^f4Pj9gx!N z#OEo5tE!a(!gGp9QCE3>02UWx zLtFp>M7X|ep|Y3=P@@DPC`wYm2re%E3YyeWzyi}xkciC_G^R1mFT$gX3z53u1JX zqQaCoIyx#nT!~S#=o_%W6h42lAQQ47qh&u3OaOx5?_r&d2O(C(!-Gakc#K3ZGzlyeo?sktz|4X968n|L)D3bx^Lp517b*TPpKpG1`rfx) zK)np{h39^n`2L+`y-4HJIm^qk)~gp3$a|HYQ91uP)GHt~ey-N%n9WSDmTl{*TA3St z*=93S+DS#j{j95AonEx1r^Y}#VV2s<_Iq0IR&M>w2r>{1{_KBusWLS7k4E-Ct3TYI z51w8$WvOb;qJ~6?re}9fRLF{-&s)S0`n6D|-eh+tQ?TOS)78&qol`;+00N|LMF0Q* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/kobold.rsi/l_foot.png b/Resources/Textures/Mobs/Animals/kobold.rsi/l_foot.png new file mode 100644 index 0000000000000000000000000000000000000000..bf8f9af0b08d2a81309cb7536b441c76130c3d78 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|7J9lkhE&XX zdu!v=Lk0pY0Y9rId0n)=(;3tLdIMJ>r(PPTM}-5!oSKXOccx7_zl;T_g@Hj{bE(Vy zsxNDg+ng_Sb6;!v>)PV2VwTSnWiNM3IL`m}x1GxO(Bme)no52kD?s2uoTlov(%w0r zFRc6(yY*V4@t^bN{YrUvy`wK(nzp?1kI&X?JO0F7DwJ{lwC~o9|BvM!%*``rVmJ^V Y!T9_)|=E1f>LRpd_i>vLBrqWXPpDLQ~Bp-N9yR%oH5vY-& z!T*Sa_qm-WzQKETUpAR4u{b+?l3v`xb+5hdf1k8u)v7(4@_+BkmSCG1d2`#@J-ZHS zZ&|lm_w=VOw(VU&kfL)> z3+rX}DHhz`_)o8Vj!=%2)0oO~n zKJu%+we8joh;|U!u)gQ<3&Ug4@0rdmnPSuO;Pj@LSqp#6ubj2)Qiqad`q|HGYVYgs r)sJ&H_p^4#hb7B0=gBbwwbegmUG`f$!!*bBG{_WBS3j3^P6DS1Dp zT~b{u%Ludq0&eiUueIAh|9z4B1AU+Sj}=?)?AuawZsoeyzEeJA$nL0%x%z!?kXK%( z!}hee2@{qq%RDn%;`^zP0|q?zwT;f@K7yL`$9{gBszYVEnCo1Sxt^|mF6*2UngE>1 Bg@phB literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/kobold.rsi/r_foot.png b/Resources/Textures/Mobs/Animals/kobold.rsi/r_foot.png new file mode 100644 index 0000000000000000000000000000000000000000..bd9f3e77c9d562ad05ead457bc5db08d1adeec06 GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|R(iTPhE&XX zd+VU@VF!V>i;l~d-VFNoz^TJScHN=&9RkxI6lWywSg4@qX~4Mf`?=Rwm+$@82h_*F z(4b%Se(RiRQGVWAuf5t{t+(}>-L0zk=38xJs|}3pWB06kef9poE&K0)YzBf4^*xU( zKI`mlKeOh{n#@`6=DnH!o#W;<-M;n5J33}P|EYMnB<<*w# z28M=kCyr@Bn*^HvTAx;5m8Gc~eD%?seM?rX(h?MW`8zJDXSa+~&&6HqgeSV+6LMw# z@Gs8n{N^Wf?u!4c(|i7AS*FnYy*j5i)i!U-EwB81{@X7nMzFCULZ)NYt*=E}3uV@3 z&f2f5*q(S}P5H&DKR0Ln{jGncbnnf`)oc&uOuqbcOXTOnR;S{@8V^XDi`wg}{MvZe P9%O{4tDnm{r-UW|6ytF- literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/kobold.rsi/r_leg.png b/Resources/Textures/Mobs/Animals/kobold.rsi/r_leg.png new file mode 100644 index 0000000000000000000000000000000000000000..e99fca61c956397db99b768c579d099b3b3e62cf GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|c6quuhE&XX zdutm~=dWSxRiv+%CpAohL1S;{U#}-g|8tP#+L9 z?7tMzw)cCb1e@n2oAb*ymq%SU^}e(%*Q)REmDj0~W#?XU{Zb2`zj}UaCgUWL@Tob9u_`ZD&t!dJ-kO=ljmryB^hi{=7qF?(>y}GNMizXZ0_A uul*=1ue%`gRXtzfxy<|DZ_uFs3c~AXbqhTGWsd_be-u$yV zIcX1LD?1jgC^{F!8sOzA;<{YbMmV`=^Ua)uwX6-3y9>UY(O8;dBlq~xW7a&o`&T|y z8%pq`m`EKgjWvriyV>kl@k}u0{(edKug~Wj54=Uyw+r7mlVmsl`Yzvp%Cpa;8T;g^ zGbk|hZ97)~yPkpJP1)}2oqf#7KDpxmS3fM!P+G6P;Qo7Ni#QHofLGP;W0ql>{iwD@ S|06J#89ZJ6T-G@yGywpuuIdZ` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/kobold.rsi/torso_f.png b/Resources/Textures/Mobs/Animals/kobold.rsi/torso_f.png new file mode 100644 index 0000000000000000000000000000000000000000..192d2b9849ec29a459a06aa9783a01e5c66f1a9c GIT binary patch literal 605 zcmV-j0;2tiP)Px%7fD1xRCt{2+A(h8Kokbx-vg!FjR03DC)i+off4lC0tIdY7jO<@Qm|R*kr6%K z3m_RGBnHSO>@8SEq2z@%Li>Lbg$uv;{AQTu4M0RhL`455NAgm?-_O_UHL@&&QVR8Y z9bp)XVo7v5o&53f(LS$MD~v`XQU0>zr8tf;=nw33_!>&Wh;6r9bYHqKI|HxgVK$qI zV~M)<{_{OQd>rhvSM%`vo^tw)?K@ez}lK rxvp#TYpoGQQQXh9YzPZ%_00000NkvXXu0mjfSqKLR literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/kobold.rsi/torso_m.png b/Resources/Textures/Mobs/Animals/kobold.rsi/torso_m.png new file mode 100644 index 0000000000000000000000000000000000000000..192d2b9849ec29a459a06aa9783a01e5c66f1a9c GIT binary patch literal 605 zcmV-j0;2tiP)Px%7fD1xRCt{2+A(h8Kokbx-vg!FjR03DC)i+off4lC0tIdY7jO<@Qm|R*kr6%K z3m_RGBnHSO>@8SEq2z@%Li>Lbg$uv;{AQTu4M0RhL`455NAgm?-_O_UHL@&&QVR8Y z9bp)XVo7v5o&53f(LS$MD~v`XQU0>zr8tf;=nw33_!>&Wh;6r9bYHqKI|HxgVK$qI zV~M)<{_{OQd>rhvSM%`vo^tw)?K@ez}lK rxvp#TYpoGQQQXh9YzPZ%_00000NkvXXu0mjfSqKLR literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/monkey.rsi/eyes.png b/Resources/Textures/Mobs/Animals/monkey.rsi/eyes.png new file mode 100644 index 0000000000000000000000000000000000000000..573a605e91a45e8b76783633b9bdd1ebaf18b663 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|EIeHtLn`LH zy|s~-!GPm{!N30v*)Q+#Zd6dLJ}KPE(9pPMKTs729EhD=-(b!NW-oZlxOo;^;*4a literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/monkey.rsi/full.png b/Resources/Textures/Mobs/Animals/monkey.rsi/full.png new file mode 100644 index 0000000000000000000000000000000000000000..c36e9abf8b8f3bec7ad2f8904b7326b938c36f7f GIT binary patch literal 519 zcmV+i0{H!jP)Px$!AV3xR9J=WmN8GlKorM+HO9dv#)U9+z%a1Yg&6$;Bn&L>os4mmk6?(O05&ET zc2^R=fJAPQ-MDlhF2(o-2JP%4)j$f1EK zL=FNtKdw$~oh!v{oKFYN8){{w=)>M_YI}HsNdnjR?*5#PpjJi>11R{j_JR+O2>{|s zVk7H=QHV4u`fUw9f&$v!sC-_cDBR*AaU2r_I_Gh##pTf*p!-69oQ;6f z5p=H9G_Vb`HuqgH&A@#5*dl5U@IXm(fER^5xh|C!9KDTtG{@<4SqXS1xZTN2x0_e8 zT@6Dk38p#aX~zp1h(cXLwX*)YnK`7jK8zRIt~4t7dcg*0)L36B literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/monkey.rsi/head_f.png b/Resources/Textures/Mobs/Animals/monkey.rsi/head_f.png new file mode 100644 index 0000000000000000000000000000000000000000..e84d4fbbb5f9d081bc23ed8ea79e54659ba59b6c GIT binary patch literal 477 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zr+d0MhE&XX zd&}Pckb?xt!>)9j~a-ELRcv z$xu*Klkz(My*z`!l=r4gI%^eo{?yvZwuSGOZ^w1jg0SfMTcY_N)^2~Jk)a*!y?ob~ z-S3~pB~UM%tFJ>`UbCeFDN*1rFhllUrBqv%d|K&qV}5_r4%!OlHrEq`hKW-gnh zudM3HBe_jsQu&+o=*v!#lYV4>+ra9X)X_8LyP?dFyaZ{Lu+4`9o&Rodt?YUe7rijj z{P?reznO9--D&aLm6iSaRJ?c6WzI)w|J%NQ`SB`pvg5MC*HaSw Mp00i_>zopr0G24y$N&HU literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/monkey.rsi/head_m.png b/Resources/Textures/Mobs/Animals/monkey.rsi/head_m.png new file mode 100644 index 0000000000000000000000000000000000000000..e84d4fbbb5f9d081bc23ed8ea79e54659ba59b6c GIT binary patch literal 477 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zr+d0MhE&XX zd&}Pckb?xt!>)9j~a-ELRcv z$xu*Klkz(My*z`!l=r4gI%^eo{?yvZwuSGOZ^w1jg0SfMTcY_N)^2~Jk)a*!y?ob~ z-S3~pB~UM%tFJ>`UbCeFDN*1rFhllUrBqv%d|K&qV}5_r4%!OlHrEq`hKW-gnh zudM3HBe_jsQu&+o=*v!#lYV4>+ra9X)X_8LyP?dFyaZ{Lu+4`9o&Rodt?YUe7rijj z{P?reznO9--D&aLm6iSaRJ?c6WzI)w|J%NQ`SB`pvg5MC*HaSw Mp00i_>zopr0G24y$N&HU literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/monkey.rsi/l_arm.png b/Resources/Textures/Mobs/Animals/monkey.rsi/l_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..b72718d59a50b6a3eee183c1e1b3ca685274d8bd GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|R(QHNhE&XX zdut=_Ap-%{3(Ol`t+;kg5fr|V+LCih?@Pz5TOu9P4q0j!eYwXFe{Fm0T~`K%16kXP zr`-G0KQr;OYLevbDI0nMpLy5iWii@%=|1?{H>2%OI8bQW!`buCa-ZPKDfHGYW(3;B zz_7r0>u%=E%?GcY7X1IGj6G}FrQI|5?8ABd$^#u-{^mJlF-F%lM=f8=KjGoO4riAs huQz=41Zr!Lt6@;ysburJXvs&AF`lk|F6*2UngFPxUT^>a literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/monkey.rsi/l_foot.png b/Resources/Textures/Mobs/Animals/monkey.rsi/l_foot.png new file mode 100644 index 0000000000000000000000000000000000000000..9856dd6faef0445c290d1fb95d13026530387295 GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|dOcknLn`LH zy|s{+$x(#mg5pByC#Hqd+!k>EdANc}MXG)h(~1~3tKfkH$|CwPI|lV{I7`lzgIoqseDq!_VcZV`$bQ7Hfb literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/monkey.rsi/l_hand.png b/Resources/Textures/Mobs/Animals/monkey.rsi/l_hand.png new file mode 100644 index 0000000000000000000000000000000000000000..5ac8ce3e608c687251deb4bcf59158a068b54510 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|$~;{hLn`LH zy=5ra;vnF9Q1gvI5>x8*Vo9xlCXOj*TqSNuN33`y_QCAN2Y(iz`UCPsbB(TRPPg2& zY4@3l>AN>c3mS$T+jl!|=I*`mi++7y|BeZ$3J5MNy54oWYIZ=Cd_m2zJmGK3dF)mB gKla{dXJDx4m2aPmdKI;Vst07+;=+5i9m literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/monkey.rsi/l_leg.png b/Resources/Textures/Mobs/Animals/monkey.rsi/l_leg.png new file mode 100644 index 0000000000000000000000000000000000000000..7907f130f4ccf8582e08f4fac96eeec7cef8c9e2 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|c6z!vhE&XX zdrOz^kb^+m!}TofD;=+zi0+um(wfusfTLPO@1X1sSN{tNA4^4L7;HtQWfZJ@IUm+u zne{iV{z(rD&esfK zFL*g+Yi-nh`FmT=&-)o18#n6#BSb%#{I9@vGt>Tj!4d7}&1=>jyI#Ki_-UK3ulGN_ q<$c^&>WakX`b|F>&g+BJewJpq#;h7>Y90XcB7>)^pUXO@geCyefM37> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/monkey.rsi/meta.json b/Resources/Textures/Mobs/Animals/monkey.rsi/meta.json index b62cac749ad..d22ab1556c9 100644 --- a/Resources/Textures/Mobs/Animals/monkey.rsi/meta.json +++ b/Resources/Textures/Mobs/Animals/monkey.rsi/meta.json @@ -1,15 +1,74 @@ { - "version": 1, - "size": { - "x": 32, - "y": 32 - }, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/tgstation/tgstation/commit/53d1f1477d22a11a99c6c6924977cd431075761b , edited by Alekshhh", - "states": [ - { - "name": "monkey", - "directions": 4 - } - ] + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/tgstation/tgstation/commit/53d1f1477d22a11a99c6c6924977cd431075761b , edited by Alekshhh, parts splitted up by Roudenn (GitHub)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "full" + }, + { + "name": "monkey", + "directions": 4 + }, + { + "name": "head_f", + "directions": 4 + }, + { + "name": "head_m", + "directions": 4 + }, + { + "name": "l_arm", + "directions": 4 + }, + { + "name": "l_foot", + "directions": 4 + }, + { + "name": "l_hand", + "directions": 4 + }, + { + "name": "l_leg", + "directions": 4 + }, + { + "name": "r_arm", + "directions": 4 + }, + { + "name": "r_foot", + "directions": 4 + }, + { + "name": "r_hand", + "directions": 4 + }, + { + "name": "r_leg", + "directions": 4 + }, + { + "name": "torso_f", + "directions": 4 + }, + { + "name": "torso_m", + "directions": 4 + }, + { + "name": "tail", + "directions": 4 + }, + { + "name": "eyes", + "directions": 4 + } + ] } diff --git a/Resources/Textures/Mobs/Animals/monkey.rsi/r_arm.png b/Resources/Textures/Mobs/Animals/monkey.rsi/r_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..db4a7b639a925c6d260b7a99b87d7c16b898a180 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|_ItWGhE&XX zdut=_Ap?1<#@*RF8K|*g z{W!ZU~<^n-bTz&X)1D+`eU#d~V);=#w~Y*PrPLF z_`+PWA?}0Yu6s*Q`|g%%EZVdA$mH8r5HnsJ6n4I(FE(YhZU)FePgg&ebxsLQ0FyOn A!T`SV--@&5M{_{RfuLsT zGC$4TulDWoe?I?3?OmO?Yx)0j5`TLp@w8t~-ExoN!22DH#u;jteZ1Gs0IBzM^>bP0 Hl+XkKm~&F- literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/monkey.rsi/r_hand.png b/Resources/Textures/Mobs/Animals/monkey.rsi/r_hand.png new file mode 100644 index 0000000000000000000000000000000000000000..f4e27204944ebaacad15d4ad5efc50ac6bcc8e51 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|Dm`5sLn`LH zy|t0I#es+Afbd&^ODt0-I+umksERnMswp|Y(0}lE!A!P2MZ2Ow#vbUb)DbN0SmB(K zzOyK0&hbyB=hi(v@G0_k@ZSq-e@5+_^-|N45vUFb{)K<@d(ii6d!~HBi94J*!Skc* h)4#vJ`5h=7m&pEENyElC&q@HK($m$?Wt~$(69AmXMt1-J literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/monkey.rsi/r_leg.png b/Resources/Textures/Mobs/Animals/monkey.rsi/r_leg.png new file mode 100644 index 0000000000000000000000000000000000000000..c470114e15d689def2bb01b8ba03e4675f3c60c4 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|c6quuhE&XX zdrOh;kb%U}kL(8%(*lgWS@}EzPN;G89SGdPQvN_}&H~3rg`zSHe|=3XoG#^^-1g!B z%rKq5ap}KRfMx)}gXNdq%u3qwy^3{<+H>xx~0`` ttoFrp1O=Dcr%(FJ@cvljWuTq|Q?@kyR1Li1l*$Uy>gnp|vd$@?2>{t>WNZKc literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/monkey.rsi/tail.png b/Resources/Textures/Mobs/Animals/monkey.rsi/tail.png new file mode 100644 index 0000000000000000000000000000000000000000..ddf07fb0ae89645accd3eeb21f7b16fd3dbe4dd9 GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zl{{S>Ln`LH zy=CjiY$(w7P`{(Etxay}cflC9Th4D}cQknGZ74sXs1#V#@}(pjj(C;k5m^r zY&!8fWLo-O>&Np?X)^+iWng%)ZB0^g$tIf(cb7-3U*`C2)9yLXO{Q#}+bcOYXR{xF z?zK%-PF1G7n|2+rlB?-rkGHFj=a-n9v-`T1pHq(arQ7cHyOq|ZWlvr1_^otO-2LZe z+1uyHHl7dGGPy5mE4E*y;^yUMk?!-qmmCuW+Xp5-yceC`^3!zF6g{!*kJoCvH<&0@oVxgW3``OJULJP`M#x#c^McQqCfHSd~1H%r!grTWSyt0pUXO@geCwW Ct(h$V literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/monkey.rsi/torso_f.png b/Resources/Textures/Mobs/Animals/monkey.rsi/torso_f.png new file mode 100644 index 0000000000000000000000000000000000000000..aa3c5ce5487eadfdf3ea0217bf7ebd232cd7322b GIT binary patch literal 465 zcmV;?0WSWDP)Px$i%CR5RCt{2+A(UwFcb#hmr^=3&@E(e!O*=&D4hyDL>EE#UZ4;Hy+BXkYZN>d zU888x5WJLtGh|T*qgsyLQa#HuZvGE~5`*%;$aV(#5di=I0KjpY`A&GgA+wmbj~6A; z%e(*gjh%nuJ3)OmL%WU-$>v;~pHWd(W1oEQ1=y5z0q(ddf0_}N&Drkujgg!0y#Pej zncwdAw3t_85$VUf`9wtaR_K$@T7duLlshr@SsyCjdjT$Q1wF1-L`0;urX)$K_v;0t8G5*G@5jg7qwmV ztLB8RmX)E|-h{dq9@Z7G4A7VmimhSEJPGV8;IM$$Mq7L#gi%U0UQ$Y00000NkvXX Hu0mjfccs+) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/monkey.rsi/torso_m.png b/Resources/Textures/Mobs/Animals/monkey.rsi/torso_m.png new file mode 100644 index 0000000000000000000000000000000000000000..aa3c5ce5487eadfdf3ea0217bf7ebd232cd7322b GIT binary patch literal 465 zcmV;?0WSWDP)Px$i%CR5RCt{2+A(UwFcb#hmr^=3&@E(e!O*=&D4hyDL>EE#UZ4;Hy+BXkYZN>d zU888x5WJLtGh|T*qgsyLQa#HuZvGE~5`*%;$aV(#5di=I0KjpY`A&GgA+wmbj~6A; z%e(*gjh%nuJ3)OmL%WU-$>v;~pHWd(W1oEQ1=y5z0q(ddf0_}N&Drkujgg!0y#Pej zncwdAw3t_85$VUf`9wtaR_K$@T7duLlshr@SsyCjdjT$Q1wF1-L`0;urX)$K_v;0t8G5*G@5jg7qwmV ztLB8RmX)E|-h{dq9@Z7G4A7VmimhSEJPGV8;IM$$Mq7L#gi%U0UQ$Y00000NkvXX Hu0mjfccs+) literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Space/Cobra/organs.rsi/heart-inhand-left.png b/Resources/Textures/_Shitmed/Mobs/Species/Space/Cobra/organs.rsi/heart-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..2e4fdc47c02209b9334661c1c039b2680be11cae GIT binary patch literal 467 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL9r6oh?3y^w370~qEv=}#LT=BJwMkF1yeo4 z@6F#Q166EEjqptK^weVD0CHFvq!?Kl7=bJ=AeM%*L2l7tWCn{f0ojI(ObmQLItqw0 z+gZTk89+7&Bmgl;Ka57Pl7X3lVFEh?3sBy`$k>2!0mMv@de#LHb0z`VAixAPg$b-O z$kGDHg6c9fFaXIWFHt)ZUPja^)0UHsCRp z-oO?Rpd9P(E?IIy$KlNRgVnvl;?wrs(gPX7U~)qz&2-+%I8*bxpGwxeKE0FAG|Knc z?Yp(t0v3P$yXla9kCqKsA;W?5zmG`mE)}-zo%Lwf`_l`feINZcoB5q%@t5ll85`86 Z7BSCN*FRG*)kg!Q-qY33Wt~$(69E4ibg2LU literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Space/Cobra/organs.rsi/heart-inhand-right.png b/Resources/Textures/_Shitmed/Mobs/Species/Space/Cobra/organs.rsi/heart-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..5b9eaa8bae0f153c7cc545420601850caf8f327b GIT binary patch literal 472 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL9r6oh?3y^w370~qEv=}#LT=BJwMkF1yeo4 z@6F#Q166EEjqptK^weVD0CHFvq!?Kl7=bJ=AeM%*L2l7tWCn{f0ojI(ObmQLItqw0 z+gZTk89+7&Bmgl;Ka57Pl7X3lVFEh?3sBy`$k>2!0mMv@de#LHb0z`VAixAPg$b-O z$kGDHg6c9fFaXIWFHt)ZTVJXE1ekiEd)NY~Yh+ zmcYAUL7$7id*wyN_tVD@F0t)=;2t4xTWeab^!oS>65BZ2 z9zQrV*LBMoRq_1?&a(X9Z}zgbqGF~bC(uX;I8YzSV;wfhCn#dF$hGuoZLb@<6OZrv z|4n51PTMm7RhtSQSRK}V&g!#0zES0@nSYnhihry2tmo~xe5Y=Y?e*u^9t0N7s@6VO z$@sR`dy+|gv`_rwJPz&T}SVawPqeKf8UL*=K0R(0t6yHtEY%EBwVpRw4&VQ&S(DA!}Ir_ zONioUVz`&LUU(Pl5lwl9g7PBOsHJN(`r8)SNVWZA`E&OA+J_F$k}hv*{d^^&cHNU8 z16}Jao)Od6M>k(#Idfc(VZqIJ$(Kq$-1zOVX-4?jY1{PnfB(5QwE2o014H*g5r%@A z;&n2svcguYHT0bjxdcS38~u0neX?CTuOV{ntPf!a7Ynb;vMZ}!`>QDFipJjyEA+z| zJ2KS2T{V#39VNUV)ZxWK>j-8+IJjuny~{q~a?(|K0n5vqT(A6PoGtdF;L4Vqi8{{; zE5G!m?e6!|+xn|6`)aGg2bLe_pD{kz_p#|{f>c)h0W*)ihyMj9{yz}!ub;GA+~X^I x#kbTC4NmnAPo96;ogn}3e`f~>ys-bx_?~5l>YWXGD}b@X;OXk;vd$@?2>?9{&fEY1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Space/Cobra/organs.rsi/meta.json b/Resources/Textures/_Shitmed/Mobs/Species/Space/Cobra/organs.rsi/meta.json new file mode 100644 index 00000000000..bfd6996bddb --- /dev/null +++ b/Resources/Textures/_Shitmed/Mobs/Species/Space/Cobra/organs.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by wyvernrer (337793232195026944)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "heart-inhand-left", + "directions": 4 + }, + { + "name": "heart-inhand-right", + "directions": 4 + }, + { + "name": "heart-off" + }, + { + "name": "heart-on", + "delays": [ + [ + 0.6, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Space/Goliath/organs.rsi/heart-inhand-left.png b/Resources/Textures/_Shitmed/Mobs/Species/Space/Goliath/organs.rsi/heart-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..0fb1681adc97e277b3972ef13e75c5f4ee3d24d7 GIT binary patch literal 479 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z7S|i^4G?;nXR^RR94I#R#qr}ninS!jFZe$YF#O)e7Yr2OEbxdd zW?jH>5lYndxU;>)L1XdYjX#r$Gbr~8MfMk=G zs2vIN`+Ek+O!IVc42f`mdu=1v0Rk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z7S|i^4G?;nXR^RR94I#R#qr}ninS!jFZe$YF#O)e7Yr2OEbxdd zW?jH>5lYndxU;>)L1XdYjX#r$Gbr~8MfMk=G zs2vIN`+Ek+%WJkCEwx5!oBMrO!ZM>I=FP{ z!|WfImhSXB@_BdTXM6qUALJ&ecus<#x+@u%v=Px$zez+vRCt{2+P_NzVHgMSZ;@aU99)P*ChB-N1Z_EpxI{zT7)?okLbw|AX9Qtm zV?^r_4!X1yN{f)vB_V-uOAZZhgI!%tzTPja?`MDgKE6H=2=4z+Rsm}YLMyx zLsx%==TcdC@hi-dUv4P4J8PrdP=c%BVlyEOT@|T#M%+ZBqS#4xH9T-6{oJLODK6qH8*z()Eb z@cEz2H+vD(Ee*Bq?aXyZA9NORcs~gA0{qCA8Ub6~(g2KS(rp1@=P$_~_-?mM@hd#o z{{>;^6A=*+5fKp)5fRb9683(8*XC+JzzmKNjeIfFI-^NAnhdpV_aybv-UA zSaY=?;Rosc0Q+s;>_tM`5Ac%I2u!}s+ucA!L_|bHM04g7I3vWlX5kW600000NkvXX Hu0mjfr=#1_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Space/Goliath/organs.rsi/meta.json b/Resources/Textures/_Shitmed/Mobs/Species/Space/Goliath/organs.rsi/meta.json new file mode 100644 index 00000000000..bfd6996bddb --- /dev/null +++ b/Resources/Textures/_Shitmed/Mobs/Species/Space/Goliath/organs.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by wyvernrer (337793232195026944)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "heart-inhand-left", + "directions": 4 + }, + { + "name": "heart-inhand-right", + "directions": 4 + }, + { + "name": "heart-off" + }, + { + "name": "heart-on", + "delays": [ + [ + 0.6, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Space/LaserRaptor/eyeball-l.png b/Resources/Textures/_Shitmed/Mobs/Species/Space/LaserRaptor/eyeball-l.png new file mode 100644 index 0000000000000000000000000000000000000000..14e728707a96ff43cf2e118f6d0d3681abcafff5 GIT binary patch literal 364 zcmV-y0h9iTP)p@G$ZbO+JRa(Y-sR21NopLg*T zMNvXfb4^vze|dRnh7XTlGF;z$0L4OB^iYy6@M@erv-iKhpF6|T=Pwz)ef`ex>gIih zV^dc!be}(p;s{UzB{w9P@L8UcoXa30BF~_$slvd|&&wd8rNm&J6~Rz$Xbq1RHbzEp z?jRT7bhYcc`(R6U`AIP_{Qt}F=kFVav*)icF#h?+up+k&u8tDl;|+ncuf8+vi8Wvl znR}lB>jFTOMRB!fDV9xfdK&iNO|VF)wHDm0000< KMNUMnLSTZYq^t7) literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Space/LaserRaptor/eyeball-r.png b/Resources/Textures/_Shitmed/Mobs/Species/Space/LaserRaptor/eyeball-r.png new file mode 100644 index 0000000000000000000000000000000000000000..d18f4d4572511fc96b0b85503ff875353b14fb34 GIT binary patch literal 354 zcmV-o0iFJdP)0j6Lt-DVo}a0SXPQ;Fg0Ng6x<90W@<&p@9|AYOy(hi5iYb z(l;Z^au8sl)N(dPMh1Q)V?c2a68ndw=Fk8C3?Kjh!I}^$cEIa@zd;6r*`;Hd-{tL&5O7#>+0nBoc&tZmvd`ow5>*)6XFCU)&f9vRu|HxU8F5t`CoB#j+c?QRS zemtUIzCU(&GuTqsb@%@>PQ3bGc;=1&zkfXXf91$_q8vbR8jzQl0n-PberI5)vSRr3 z>mLI%GcyCfj5tyHDR#j9hflyX9~%>cP~S-g2Wd_)|Iy>8lp0MuIC6ON|9`)qf};XN zA3eO8{^dT%5%1sJ_?SPcUMOUBpw54Ym^xdS&>o9?z{xUic&GF(yE S*8ZUrNQI}XpUXO@geCxj06vib literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Space/LaserRaptor/eyeballs-inhand-right.png b/Resources/Textures/_Shitmed/Mobs/Species/Space/LaserRaptor/eyeballs-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..4dfafd118d094ee7d309079fcfd50b503d69629f GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|GCW-zLn`LH zy|t0E!9jrK!207p!KXK}{WcMJbHwFCuiZtLCl76BtW3ziymtyvIRit*tlx&)&wV&{ zg}1bL+Trub{DB9y=~*uAa&@u%vrdE&tcJnC!WOa{-k~D`(@6+5D?=Ss3=^W RWw{Wfz|+;wWt~$(69BYSKK1|r literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Space/LaserRaptor/meta.json b/Resources/Textures/_Shitmed/Mobs/Species/Space/LaserRaptor/meta.json new file mode 100644 index 00000000000..a9447f20cda --- /dev/null +++ b/Resources/Textures/_Shitmed/Mobs/Species/Space/LaserRaptor/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by wyvernrer (337793232195026944)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "eyeballs-inhand-left", + "directions": 4 + }, + { + "name": "eyeballs-inhand-right", + "directions": 4 + }, + { + "name": "eyeball-l" + }, + { + "name": "eyeball-r" + } + ] +} diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/omnimed.rsi/evil-inhand-left.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/omnimed.rsi/evil-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..90cd76871c22b82b095f08f419df64c76180c95a GIT binary patch literal 459 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zTRmMILn`LH zy>&3_kb?;8h3vvqlg0)XmxT*DR-f7bBfoA&?9`-%0XY*K4qVGv(|z5wlQ$_k-AGyQ z-ObdA=K3=|&E7M)K!F(VapBIXLX)d~-(SAEA$G&9A6jQWY^*z;QPSW3^UtHLNlQ~U zRva{okAD9?yI9%$$beQ;TEXy~q#C zUw<`r-zob8D>FCi8{aptnlSVI=`AeL*ykPYifsoA{YIB}2ml!eL+Il{P<5j^l{v9U53tm4nW+^pd+_g%QDLBmi+*SKc yo@xuuRV|ZbTJ1aS^PlWkSbU;8x{*%g8<`S!-uLoW^@wxBZ!4p;)X4Q_~Ts!(|Z~QlyyR1*& z`0}Jx_xGP)vv=M$<2yMQCo%2TIP|)PlVL};$-0PTaogUmP>7IZxG;(7VcKlVZPV@) z+>T9+3i`?Y|HFCqgQq(D!$dEB6JDk&%CMu4xBlVbElY}S-?i^Q+;9CL*V5l_%ct}8 zZGK^XG29lXa|jxpWyO%-=6=RqnOFDQ~5$((_#!_4bZ0e~bE^ykELAZ2uwGiytk2 x?$$f0-*E1AY{{bNr|&GoV1cDBA5evONswPK!+)$` zLwE6gppqs}7sn8b-n)~$g&GVvoM-AdEZ_UT^6B;fZd-@V0q*lS-8%b(SAT1H!!g^y zB9!rvn9@471lt3lf{F7bO&5Mkuy?)3_2RS3VY4r*&v!h(B71~U$AN<}fcwRr{KI7# zvmCa$mM(m}&&}$J*Mc+k?qB$>eZF<@z3GK|U-b#EY|Z{3zF5Uz;?3gnM%5t&