diff --git a/Content.Server/Botany/SeedPrototype.cs b/Content.Server/Botany/SeedPrototype.cs
index 1a3c0473a4..896e1e944c 100644
--- a/Content.Server/Botany/SeedPrototype.cs
+++ b/Content.Server/Botany/SeedPrototype.cs
@@ -108,13 +108,18 @@ public partial class SeedData
///
/// If true, the properties of this seed cannot be modified.
+ /// to spare others like me: this DOES NOT prevent mutations
///
[DataField("immutable")] public bool Immutable;
+ ///
+ /// If true, you cannot clip this plant for more seeds, used for special plants such as the gnome plant
+ ///
+ [DataField("unclippable")] public bool Unclippable;
+
///
/// If true, there is only a single reference to this seed and it's properties can be directly modified without
/// needing to clone the seed.
- ///
[ViewVariables]
public bool Unique = false; // seed-prototypes or yaml-defined seeds for entity prototypes will not generally be unique.
#endregion
@@ -255,6 +260,7 @@ public partial class SeedData
{
DebugTools.Assert(!Immutable, "There should be no need to clone an immutable seed.");
+
var newSeed = new SeedData
{
Name = Name,
@@ -290,6 +296,7 @@ public partial class SeedData
HarvestRepeat = HarvestRepeat,
Potency = Potency,
+ Unclippable = Unclippable,
Seedless = Seedless,
Viable = Viable,
Slip = Slip,
diff --git a/Content.Server/Botany/Systems/PlantHolderSystem.cs b/Content.Server/Botany/Systems/PlantHolderSystem.cs
index 4e35495f43..e47e703364 100644
--- a/Content.Server/Botany/Systems/PlantHolderSystem.cs
+++ b/Content.Server/Botany/Systems/PlantHolderSystem.cs
@@ -245,6 +245,13 @@ public sealed class PlantHolderSystem : EntitySystem
_popup.PopupCursor(Loc.GetString("plant-holder-component-nothing-to-sample-message"), args.User);
return;
}
+ //rejects clipping of unclippable plants
+ if (component.Seed.Unclippable)
+ {
+ _popup.PopupCursor(Loc.GetString("plant-holder-component-nothing-to-sample-message"), args.User);
+ return;
+ }
+
if (component.Sampled)
{
diff --git a/Content.Server/Repairable/RepairableSystem.cs b/Content.Server/Repairable/RepairableSystem.cs
index 5bd580756d..57afea39cd 100644
--- a/Content.Server/Repairable/RepairableSystem.cs
+++ b/Content.Server/Repairable/RepairableSystem.cs
@@ -6,15 +6,37 @@ using Content.Shared.Popups;
using Content.Shared.Repairable;
using Content.Shared.Tools;
using SharedToolSystem = Content.Shared.Tools.Systems.SharedToolSystem;
+using Content.Server.DoAfter;
+using Content.Server.EUI;
+using Content.Server.Ghost;
+using Content.Server.Popups;
+using Content.Shared.Damage;
+using Content.Shared.DoAfter;
+using Content.Shared.Interaction;
+using Content.Shared.Interaction.Components;
+using Content.Shared.Interaction.Events;
+using Content.Shared.Mind;
+using Content.Shared.Mobs;
+using Content.Shared.Mobs.Components;
+using Content.Shared.Mobs.Systems;
+using Robust.Shared.Player;
+using Robust.Shared.Timing;
+using Content.Shared.Tools.Components;
+using Content.Server.Construction.Conditions;
+//many of these arent reqired but some seem neessesary so ill leave them for now
namespace Content.Server.Repairable
{
public sealed class RepairableSystem : SharedRepairableSystem
{
+ [Dependency] private readonly EuiManager _euiManager = default!;
[Dependency] private readonly SharedToolSystem _toolSystem = default!;
[Dependency] private readonly DamageableSystem _damageableSystem = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly IAdminLogManager _adminLogger= default!;
+ [Dependency] private readonly MobStateSystem _mobState = default!;
+ [Dependency] private readonly MobThresholdSystem _mobThreshold = default!;
+ [Dependency] private readonly SharedMindSystem _mind = default!;
public override void Initialize()
{
@@ -24,6 +46,8 @@ namespace Content.Server.Repairable
private void OnRepairFinished(EntityUid uid, RepairableComponent component, RepairFinishedEvent args)
{
+ ICommonSession? session = null;
+
if (args.Cancelled)
return;
@@ -34,15 +58,36 @@ namespace Content.Server.Repairable
{
var damageChanged = _damageableSystem.TryChangeDamage(uid, component.Damage, true, false, origin: args.User);
_adminLogger.Add(LogType.Healed, $"{ToPrettyString(args.User):user} repaired {ToPrettyString(uid):target} by {damageChanged?.GetTotal()}");
- }
-
+ }
else
{
// Repair all damage
_damageableSystem.SetAllDamage(uid, damageable, 0);
_adminLogger.Add(LogType.Healed, $"{ToPrettyString(args.User):user} repaired {ToPrettyString(uid):target} back to full health");
- }
+ // this is to revive gnomes and call their ghost back
+ //check for target for threshholds, i hardly understand WHY this works but it does so i wont touch it
+ if (TryComp(uid, out MobThresholdsComponent? mobthresholds))
+ {
+ if (_mobThreshold.TryGetThresholdForState(uid, MobState.Dead, out var threshold) &&
+ TryComp(uid, out var damageableComponent) &&
+ damageableComponent.TotalDamage < threshold)
+ {
+ _mobState.ChangeMobState(uid, MobState.Alive, null, uid);
+ }
+ if (_mind.TryGetMind(uid, out _, out var mind) &&
+ mind.Session is { } playerSession)
+ {
+ session = playerSession;
+ // notify them they're being revived.
+ if (mind.CurrentEntity != uid)
+ {
+ _euiManager.OpenEui(new ReturnToBodyEui(mind, _mind), session);
+ }
+ }
+ }
+
+ }
var str = Loc.GetString("comp-repairable-repair",
("target", uid),
("tool", args.Used!));
diff --git a/Content.Server/Speech/Components/GnomeAccentComponent.cs b/Content.Server/Speech/Components/GnomeAccentComponent.cs
new file mode 100644
index 0000000000..939df9f753
--- /dev/null
+++ b/Content.Server/Speech/Components/GnomeAccentComponent.cs
@@ -0,0 +1,8 @@
+namespace Content.Server.Speech.Components;
+
+///
+/// garden time
+///
+[RegisterComponent]
+public sealed partial class GnomeAccentComponent : Component
+{}
diff --git a/Content.Server/Speech/EntitySystems/GnomeAccentSystem.cs b/Content.Server/Speech/EntitySystems/GnomeAccentSystem.cs
new file mode 100644
index 0000000000..0ea3a311cc
--- /dev/null
+++ b/Content.Server/Speech/EntitySystems/GnomeAccentSystem.cs
@@ -0,0 +1,52 @@
+using Content.Server.Speech.Components;
+using System.Text.RegularExpressions;
+
+namespace Content.Server.Speech.EntitySystems;
+
+///
+/// System that Gnomes the Gnomes talking
+///
+public sealed class GnomeAccentSystem : EntitySystem
+{
+ [Dependency] private readonly ReplacementAccentSystem _replacement = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnAccentGet);
+ }
+ public string Accentuate(string message, GnomeAccentComponent component)
+ {
+ var msg = message;
+
+ msg = _replacement.ApplyReplacements(msg, "gnome");
+
+ // Пиздец, а не код
+
+ msg = Regex.Replace(msg, @"(? _playingStreams = new();
- private static readonly SoundSpecifier DeathSounds = new SoundCollectionSpecifier("deathSounds");
- private static readonly SoundSpecifier HeartSounds = new SoundCollectionSpecifier("heartSounds");
+
private void HandleDeathEvent(EntityUid uid, DeathGaspsComponent component, MobStateChangedEvent args)
{
@@ -31,23 +30,23 @@ public sealed class OnDeath : EntitySystem
StopPlayingStream(uid);
break;
case MobState.Critical:
- PlayPlayingStream(uid);
+ PlayPlayingStream(uid, component);
break;
case MobState.Dead:
StopPlayingStream(uid);
- PlayDeathSound(uid);
+ PlayDeathSound(uid, component);
break;
}
}
- private void PlayPlayingStream(EntityUid uid)
+ private void PlayPlayingStream(EntityUid uid, DeathGaspsComponent component)
{
if (_playingStreams.TryGetValue(uid, out var currentStream))
{
_audio.Stop(currentStream);
}
- var newStream = _audio.PlayEntity(HeartSounds, uid, uid, AudioParams.Default.WithLoop(true));
+ var newStream = _audio.PlayEntity(component.HeartSounds, uid, uid, AudioParams.Default.WithLoop(true));
if (newStream.HasValue)
{
@@ -64,9 +63,12 @@ public sealed class OnDeath : EntitySystem
_playingStreams.Remove(uid);
}
- private void PlayDeathSound(EntityUid uid)
+ private void PlayDeathSound(EntityUid uid, DeathGaspsComponent component)
{
- _audio.PlayEntity(DeathSounds, uid, uid, AudioParams.Default);
+ if (component.CanOtherHearDeathSound)
+ _audio.PlayPvs(component.DeathSounds, uid, AudioParams.Default);
+ else
+ _audio.PlayEntity(component.DeathSounds, uid, uid, AudioParams.Default);
}
private void OnDetach(EntityUid uid, DeathGaspsComponent component, PlayerDetachedEvent args)
diff --git a/Resources/Audio/Voice/Gnome/Gnome_Clumsy_Sound_Effect.ogg b/Resources/Audio/Voice/Gnome/Gnome_Clumsy_Sound_Effect.ogg
new file mode 100644
index 0000000000..b72ca67320
Binary files /dev/null and b/Resources/Audio/Voice/Gnome/Gnome_Clumsy_Sound_Effect.ogg differ
diff --git a/Resources/Audio/Voice/Gnome/Gnome_Woo_Sound_Effect.ogg b/Resources/Audio/Voice/Gnome/Gnome_Woo_Sound_Effect.ogg
new file mode 100644
index 0000000000..23f7efbe11
Binary files /dev/null and b/Resources/Audio/Voice/Gnome/Gnome_Woo_Sound_Effect.ogg differ
diff --git a/Resources/Audio/White/Voice/Gnomes/Death1.ogg b/Resources/Audio/White/Voice/Gnomes/Death1.ogg
new file mode 100644
index 0000000000..df3cc6a5f6
Binary files /dev/null and b/Resources/Audio/White/Voice/Gnomes/Death1.ogg differ
diff --git a/Resources/Audio/White/Voice/Gnomes/Death2.ogg b/Resources/Audio/White/Voice/Gnomes/Death2.ogg
new file mode 100644
index 0000000000..fc71df7e87
Binary files /dev/null and b/Resources/Audio/White/Voice/Gnomes/Death2.ogg differ
diff --git a/Resources/Audio/White/Voice/Gnomes/Death3.ogg b/Resources/Audio/White/Voice/Gnomes/Death3.ogg
new file mode 100644
index 0000000000..1a9874d3f9
Binary files /dev/null and b/Resources/Audio/White/Voice/Gnomes/Death3.ogg differ
diff --git a/Resources/Audio/White/Voice/Gnomes/Death4.ogg b/Resources/Audio/White/Voice/Gnomes/Death4.ogg
new file mode 100644
index 0000000000..70a8fc22ca
Binary files /dev/null and b/Resources/Audio/White/Voice/Gnomes/Death4.ogg differ
diff --git a/Resources/Audio/White/Voice/Gnomes/Gnome1V1.ogg b/Resources/Audio/White/Voice/Gnomes/Gnome1V1.ogg
new file mode 100644
index 0000000000..3062f7385e
Binary files /dev/null and b/Resources/Audio/White/Voice/Gnomes/Gnome1V1.ogg differ
diff --git a/Resources/Audio/White/Voice/Gnomes/Gnome2V1.ogg b/Resources/Audio/White/Voice/Gnomes/Gnome2V1.ogg
new file mode 100644
index 0000000000..229079183a
Binary files /dev/null and b/Resources/Audio/White/Voice/Gnomes/Gnome2V1.ogg differ
diff --git a/Resources/Audio/White/Voice/Gnomes/Gnome3V1.ogg b/Resources/Audio/White/Voice/Gnomes/Gnome3V1.ogg
new file mode 100644
index 0000000000..3f122101ff
Binary files /dev/null and b/Resources/Audio/White/Voice/Gnomes/Gnome3V1.ogg differ
diff --git a/Resources/Audio/White/Voice/Gnomes/Gnome4V1.ogg b/Resources/Audio/White/Voice/Gnomes/Gnome4V1.ogg
new file mode 100644
index 0000000000..a2ce742c72
Binary files /dev/null and b/Resources/Audio/White/Voice/Gnomes/Gnome4V1.ogg differ
diff --git a/Resources/Audio/White/Voice/Gnomes/Gnome5V1.ogg b/Resources/Audio/White/Voice/Gnomes/Gnome5V1.ogg
new file mode 100644
index 0000000000..14bbc3f65e
Binary files /dev/null and b/Resources/Audio/White/Voice/Gnomes/Gnome5V1.ogg differ
diff --git a/Resources/Audio/White/Voice/Gnomes/Gnome6V1.ogg b/Resources/Audio/White/Voice/Gnomes/Gnome6V1.ogg
new file mode 100644
index 0000000000..9028e4f9c0
Binary files /dev/null and b/Resources/Audio/White/Voice/Gnomes/Gnome6V1.ogg differ
diff --git a/Resources/Audio/White/Voice/Gnomes/Gnome7V1.ogg b/Resources/Audio/White/Voice/Gnomes/Gnome7V1.ogg
new file mode 100644
index 0000000000..14a47dc500
Binary files /dev/null and b/Resources/Audio/White/Voice/Gnomes/Gnome7V1.ogg differ
diff --git a/Resources/Audio/White/Voice/Gnomes/Gnome8V1.ogg b/Resources/Audio/White/Voice/Gnomes/Gnome8V1.ogg
new file mode 100644
index 0000000000..1aa31c7422
Binary files /dev/null and b/Resources/Audio/White/Voice/Gnomes/Gnome8V1.ogg differ
diff --git a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl
index 23a178d282..2db4d291aa 100644
--- a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl
+++ b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl
@@ -232,3 +232,7 @@ ghost-role-information-artifact-name = Sentient Artifact
ghost-role-information-artifact-description =
Enact your eldritch whims.
Forcibly activate your nodes for good or for evil.
+
+
+ghost-role-information-gnome-name = Garden Gnome
+ghost-role-information-gnome-description = You are the trusted keeper of the station garden, keep your domain safe.
diff --git a/Resources/Locale/en-US/seeds/seeds.ftl b/Resources/Locale/en-US/seeds/seeds.ftl
index b398378288..965c9c6100 100644
--- a/Resources/Locale/en-US/seeds/seeds.ftl
+++ b/Resources/Locale/en-US/seeds/seeds.ftl
@@ -111,3 +111,5 @@ seeds-pumpkin-name = pumpkin
seeds-pumpkin-display-name = pumpkins
seeds-cotton-name = cotton
seeds-cotton-display-name = cotton plant
+seeds-gome-name = gnome
+seeds-gnome-display-name = gnome plant
diff --git a/Resources/Locale/ru-RU/_white/mobs/gnomes.ftl b/Resources/Locale/ru-RU/_white/mobs/gnomes.ftl
new file mode 100644
index 0000000000..0ac3fc7794
--- /dev/null
+++ b/Resources/Locale/ru-RU/_white/mobs/gnomes.ftl
@@ -0,0 +1,6 @@
+ent-MobGnome = гном
+ .desc = Добросовестный помощник по саду
+ent-GnomeSeeds = пакет семян гнома
+ .desc = { ent-SeedBase.desc }
+ent-ClothingHeadHatGnome = шляпа гнома
+ .desc = Шляпа настоящего садового помощника
diff --git a/Resources/Prototypes/Body/Prototypes/bot.yml b/Resources/Prototypes/Body/Prototypes/bot.yml
index 848db2a4fd..9662860427 100644
--- a/Resources/Prototypes/Body/Prototypes/bot.yml
+++ b/Resources/Prototypes/Body/Prototypes/bot.yml
@@ -1,4 +1,4 @@
-- type: body
+- type: body
id: Bot
name: "bot"
root: hand 1
diff --git a/Resources/Prototypes/Body/Prototypes/gnome.yml b/Resources/Prototypes/Body/Prototypes/gnome.yml
new file mode 100644
index 0000000000..617c3f7ef3
--- /dev/null
+++ b/Resources/Prototypes/Body/Prototypes/gnome.yml
@@ -0,0 +1,19 @@
+- type: body
+ id: gnome
+ name: "gnome"
+ root: torso
+ slots:
+ torso:
+ part: TorsoAnimal
+ connections:
+ - hands
+ - legs
+ organs:
+ hands:
+ part: HandsAnimal
+ legs:
+ part: LegsAnimal
+ connections:
+ - feet
+ feet:
+ part: FeetAnimal
diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml b/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml
index bf2a25d723..b54e42b8f8 100644
--- a/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml
+++ b/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml
@@ -125,7 +125,19 @@
- id: Soap
prob: 0.10
- id: PlushieCarp
- prob: 0.1
+ prob: 0.2
+ orGroup: carp
+ - id: ClothingHeadHatGnome
+ prob: 0.2
+ - id: PlushieHolocarp
+ prob: 0.05
+ orGroup: carp
+ - id: PlushieMagicarp
+ prob: 0.05
+ orGroup: carp
+ - id: PlushieRainbowCarp
+ prob: 0.03
+ orGroup: carp
- id: PlushieSlime
prob: 0.1
- id: PlushieSnake
diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/seeds.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/seeds.yml
index a9646559d9..291ccdbb12 100644
--- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/seeds.yml
+++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/seeds.yml
@@ -37,5 +37,6 @@
BerrySeeds: 5
PeaSeeds: 5
CottonSeeds: 5
+ GnomeSeeds: 2
emaggedInventory:
FlyAmanitaSeeds: 1
diff --git a/Resources/Prototypes/Entities/Clothing/Head/hats.yml b/Resources/Prototypes/Entities/Clothing/Head/hats.yml
index a420eab361..d2704c317b 100644
--- a/Resources/Prototypes/Entities/Clothing/Head/hats.yml
+++ b/Resources/Prototypes/Entities/Clothing/Head/hats.yml
@@ -1108,3 +1108,19 @@
sprite: Clothing/Head/Hats/beret_medic.rsi
- type: Clothing
sprite: Clothing/Head/Hats/beret_medic.rsi
+
+- type: entity
+ parent: ClothingHeadBase
+ id: ClothingHeadHatGnome
+ name: gnome hat
+ description: The cap of a true garden helper
+ components:
+ - type: Sprite
+ sprite: Clothing/Head/Hats/hat_gnome.rsi
+ - type: Clothing
+ sprite: Clothing/Head/Hats/hat_gnome.rsi
+ - type: Seed
+ seedId: gnome
+ - type: AddAccentClothing
+ accent: GnomeAccent
+
diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml b/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml
index 2e719e4dcc..30c152dbc0 100644
--- a/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml
+++ b/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml
@@ -819,3 +819,180 @@
# - type: AlwaysRevolutionaryConvertible
- type: StealTarget
stealGroup: AnimalTropico
+
+
+- type: entity #WHY MUST YOU THROW ERRORS HOW DARE YOU
+ name: Gnome #this thing is covered in comments, its for my sanity, ignore them please.
+ parent: [BaseSimpleMob, MobCombat, MobAtmosExposed]
+ id: MobGnome
+ description: "A garden's trusty helper"
+ components:
+ - type: Inventory
+ templateId: gnome
+ speciesId: gnome
+ - type: InventorySlots
+ - type: RotationVisuals
+ defaultRotation: 90
+ horizontalRotation: 90
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeCircle #displays error, works anyways so i wont touch it, whatever it does
+ radius: 0.2
+ density: 80
+ mask:
+ - SmallMobMask #lets em go under doors for escapes from sec/greytide/hunting mice
+ layer:
+ - SmallMobLayer
+ - type: Stripping
+ - type: Strippable
+ - type: UserInterface
+ interfaces:
+ - key: enum.StrippingUiKey.Key
+ type: StrippableBoundUserInterface
+ - type: GhostRole
+ prob: 1
+ makeSentient: true
+ allowSpeech: true
+ allowMovement: true
+ name: ghost-role-information-gnome-name
+ description: ghost-role-information-gnome-description
+ - type: GhostTakeoverAvailable
+ - type: Flashable
+ - type: Tag
+ tags:
+ - CannotSuicide
+ - VimPilot
+ - type: MobThresholds
+ thresholds: #VERY easy to kill, if it was harder to kill them the sneaky fuckers would rule the world
+ 0: Alive
+ 10: Dead
+ - type: DamageStateVisuals
+ states:
+ Alive:
+ Base: Gnome-0
+ Dead:
+ Base: dead-1
+ - type: GnomeAccent
+ - type: NameIdentifier
+ group: Gnome
+ - type: Sprite
+ drawdepth: SmallMobs
+ sprite: Mobs/Animals/gnome.rsi
+ layers:
+ - map: ["enum.DamageStateVisualLayers.Base"]
+ state: Gnome-0
+ - type: Item
+ size: Small
+ - type: Clothing #TO VALLHALLA
+ quickEquip: false
+ sprite: Mobs/Animals/gnome.rsi
+ equippedPrefix: 1
+ slots:
+ - HEAD
+ - type: IdExaminable
+ - type: InteractionPopup
+ interactSuccessString: hugging-success-generic
+ interactSuccessSound: /Audio/Effects/thudswoosh.ogg
+ messagePerceivedByOthers: hugging-success-generic-others
+ - type: MeleeWeapon
+ soundHit:
+ collection: ToySqueak
+ angle: 30
+ animation: WeaponArcPunch
+ damage:
+ types:
+ Piercing: 3
+ - type: Puller #dont need hands because they are at a disadvantage anyway, this way they can hold a light and drag a box for a backpack
+ needsHands: false
+ - type: CanHostGuardian #touch this stuff to make the fuckers hold still when not possesed (NOT THE GAURDIAN)
+ - type: FactionException
+ - type: NpcFactionMember
+ factions:
+ - Passive
+ - type: Hands #gives em hands, the item sprites for holding things look all strange but its FINE, I DONT WANNA FIX IT ITS FINE ILL DO IT LATER
+ - type: Body #gives em a body, is needed for organs and hands
+ prototype: gnome
+ requiredLegs: 0
+ - type: Clumsy #no guns for youuuu if they shoot a gun they die >:3
+ clumsyDamage:
+ types:
+ Blunt: 2
+ Piercing: 7
+ groups:
+ Burn: 2
+ clumsySound:
+ path: /Audio/Voice/Gnome/Gnome_Clumsy_Sound_Effect.ogg
+ - type: Barotrauma #gnomes instantly explode in space, gnomes shouldnt go in space
+ damage:
+ types:
+ Blunt: 60 #per second, scales with pressure and other constants.
+ - type: Repairable
+ fuelCost: 5
+ qualityNeeded: Gluing
+ doAfterDelay: 8
+ - type: ZombieImmune
+ - type: Damageable
+ damageContainer: StructuralInorganic
+ - type: CanEscapeInventory
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTypeTrigger #gnomes gib once they are in enough bits that they cant be glued back together
+ damageType: Blunt
+ damage: 60
+ behaviors:
+ - !type:PlaySoundBehavior
+ sound:
+ collection: GlassBreak
+ - !type:SpawnEntitiesBehavior
+ spawn:
+ ClothingHeadHatGnome:
+ min: 1
+ max: 1
+ ShardGlass:
+ min: 1
+ max: 3
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - type: DamageOnHighSpeedImpact #gnomes break when thrown, another anti gnometide device
+ minimumSpeed: 10
+ damage:
+ types:
+ Blunt: 20
+ soundHit:
+ collection: GlassBreak
+ - type: Vocal
+ sounds:
+ Male: Gnome
+ Female: Gnome
+ Unsexed: Gnome
+ wilhelmProbability: 0.0001
+ - type: Unrevivable
+ - type: Tool
+ qualities:
+ - Screwing
+ useSound:
+ collection: Screwdriver
+ - type: FelinidFood
+ - type: Speech
+ speechSounds: GnomesSpeech
+ speechVerb: SmallMob
+ - type: Extractable
+ grindableSolutionName: food
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ reagents:
+ - ReagentId: UnstableMutagen
+ Quantity: 5
+ - type: BadFood
+ - type: DeathGasps
+ deathSounds:
+ collection: GnomesDeathCollection
+ canOtherHearDeathSound: True
+ - type: Thieving
+ stripTimeReduction: 4
+ - type: Pacified
+
diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_fun.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_fun.yml
index 2fd2331f91..338d6f8089 100644
--- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_fun.yml
+++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_fun.yml
@@ -19,6 +19,8 @@
map: [ "enum.SolutionContainerLayers.Overlay" ]
- type: Appearance
- type: Glue
+ - type: RefillableSolution
+ solution: drink
- type: SolutionContainerManager
solutions:
drink:
@@ -26,6 +28,11 @@
reagents:
- ReagentId: SpaceGlue
Quantity: 30
+ Welder:
+ reagents:
+ - ReagentId: SpaceGlue
+ Quantity: 30
+ maxVol: 30
- type: SolutionContainerVisuals
maxFillLevels: 6
fillBaseName: fill
@@ -38,8 +45,15 @@
- type: Tag
tags:
- DrinkSpaceGlue
+ - GlueTool
- type: TrashOnSolutionEmpty
solution: drink
+ - type: Tool
+ qualities: Gluing
+ - type: Welder #this here uses welding code to take fuel out of the bottle (fuel being glue)
+ fuelSolutionName: drink
+ fuelReagent: SpaceGlue
+ hiddenInfo: true
- type: entity
parent: DrinkBase
diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml
index 5ca48cbbe0..d5c01ce77a 100644
--- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml
+++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml
@@ -1514,6 +1514,8 @@
- type: Tag
tags:
- DrinkSpaceGlue
+ - type: Tool
+ qualities: Gluing
- type: entity
parent: BaseItem
diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml
index 2b232d643d..172aa932fb 100644
--- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml
+++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml
@@ -571,3 +571,13 @@
seedId: cotton
- type: Sprite
sprite: Objects/Specific/Hydroponics/cotton.rsi
+
+- type: entity #you should never see this, this is for testing, if someone has these then I FUCKED UP and you should ping BITTERLYNX
+ parent: SeedBase
+ name: packet of Gnome seeds
+ id: GnomeSeeds
+ components:
+ - type: Seed
+ seedId: gnome
+ - type: Sprite
+ sprite: Objects/Specific/Hydroponics/cotton.rsi
diff --git a/Resources/Prototypes/Hydroponics/seeds.yml b/Resources/Prototypes/Hydroponics/seeds.yml
index eae58ce94a..be95649d93 100644
--- a/Resources/Prototypes/Hydroponics/seeds.yml
+++ b/Resources/Prototypes/Hydroponics/seeds.yml
@@ -1501,3 +1501,22 @@
Max: 10
PotencyDivisor: 20
+- type: seed #once again, replacing learning with comments because ive been in this file for 10 hours
+ id: gnome
+ name: seeds-gome-name #the name of the seeds
+ noun: seeds-noun-seeds
+ displayName: seeds-gnome-display-name #name of the plant when looking at the tray
+ plantRsi: Objects/Specific/Hydroponics/gnome.rsi
+ packetPrototype: GnomeSeeds #seeds you get when clipping? BUT YOU CANT CLIP THIS PLANT TAKE THAT BOTANISTS!
+ productPrototypes:
+ - MobGnome #THE THING THAT SPAWNS!
+ lifespan: 25
+ maturation: 10
+ production: 1
+ yield: 1
+ potency: 1
+ idealLight: 8
+ growthStages: 2
+ waterConsumption: 0
+ seedless: true #fuckin does nothing but im keeping it just in case someone wants botany to riot
+ unclippable: true
diff --git a/Resources/Prototypes/InventoryTemplates/gome_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/gome_inventory_template.yml
new file mode 100644
index 0000000000..e80dbe8e22
--- /dev/null
+++ b/Resources/Prototypes/InventoryTemplates/gome_inventory_template.yml
@@ -0,0 +1,13 @@
+- type: inventoryTemplate
+ id: gnome
+ #slots: i was on the fence to give them an id slot so ill comment this out for now
+ # - name: id
+ # slotTexture: id
+ # slotFlags: IDCARD
+ # slotGroup: SecondHotbar
+ # stripTime: 6
+ # uiWindowPos: 2,1
+ # strippingWindowPos: 2,4
+ # dependsOn: jumpsuit
+ # displayName: ID
+
diff --git a/Resources/Prototypes/Voice/speech_emote_sounds.yml b/Resources/Prototypes/Voice/speech_emote_sounds.yml
index 7c1e75327f..f5f4b921be 100644
--- a/Resources/Prototypes/Voice/speech_emote_sounds.yml
+++ b/Resources/Prototypes/Voice/speech_emote_sounds.yml
@@ -524,3 +524,13 @@
path: /Audio/Animals/parrot_raught.ogg
params:
variation: 0.125
+
+- type: emoteSounds
+ id: Gnome
+ params:
+ variation: 0.125
+ sounds:
+ Scream:
+ path: /Audio/Voice/Gnome/Gnome_Woo_Sound_Effect.ogg
+ Weh:
+ collection: Weh
diff --git a/Resources/Prototypes/_White/Sound/Speech/gnomes.yml b/Resources/Prototypes/_White/Sound/Speech/gnomes.yml
new file mode 100644
index 0000000000..d7e8b9f819
--- /dev/null
+++ b/Resources/Prototypes/_White/Sound/Speech/gnomes.yml
@@ -0,0 +1,8 @@
+- type: speechSounds
+ id: GnomesSpeech
+ saySound:
+ collection: GnomesSpeechCollection
+ askSound:
+ collection: GnomesSpeechCollection
+ exclaimSound:
+ collection: GnomesSpeechCollection
diff --git a/Resources/Prototypes/_White/SoundCollections/gnomes.yml b/Resources/Prototypes/_White/SoundCollections/gnomes.yml
new file mode 100644
index 0000000000..daec0b9ea3
--- /dev/null
+++ b/Resources/Prototypes/_White/SoundCollections/gnomes.yml
@@ -0,0 +1,19 @@
+- type: soundCollection
+ id: GnomesSpeechCollection
+ files:
+ - /Audio/White/Voice/Gnomes/Gnome1V1.ogg
+ - /Audio/White/Voice/Gnomes/Gnome2V1.ogg
+ - /Audio/White/Voice/Gnomes/Gnome3V1.ogg
+ - /Audio/White/Voice/Gnomes/Gnome4V1.ogg
+ - /Audio/White/Voice/Gnomes/Gnome5V1.ogg
+ - /Audio/White/Voice/Gnomes/Gnome6V1.ogg
+ - /Audio/White/Voice/Gnomes/Gnome7V1.ogg
+ - /Audio/White/Voice/Gnomes/Gnome8V1.ogg
+
+- type: soundCollection
+ id: GnomesDeathCollection
+ files:
+ - /Audio/White/Voice/Gnomes/Death1.ogg
+ - /Audio/White/Voice/Gnomes/Death2.ogg
+ - /Audio/White/Voice/Gnomes/Death3.ogg
+ - /Audio/White/Voice/Gnomes/Death4.ogg
diff --git a/Resources/Prototypes/_White/Spawners/spawners.yml b/Resources/Prototypes/_White/Spawners/spawners.yml
new file mode 100644
index 0000000000..31a9fc1bba
--- /dev/null
+++ b/Resources/Prototypes/_White/Spawners/spawners.yml
@@ -0,0 +1,12 @@
+- type: entity
+ name: Gnome spawner
+ id: SpawnMobGnome
+ parent: MarkerBase
+ components:
+ - type: Sprite
+ layers:
+ - state: green
+ - state: ai
+ - type: ConditionalSpawner
+ prototypes:
+ - MobGnome
diff --git a/Resources/Prototypes/name_identifier_groups.yml b/Resources/Prototypes/name_identifier_groups.yml
index 7df370035e..d9193df161 100644
--- a/Resources/Prototypes/name_identifier_groups.yml
+++ b/Resources/Prototypes/name_identifier_groups.yml
@@ -1,8 +1,12 @@
-# Non-fungible apes, anyone?
+# Non-fungible apes, anyone?
- type: nameIdentifierGroup
id: Monkey
prefix: MK
+- type: nameIdentifierGroup
+ id: Gnome
+ prefix: GN
+
- type: nameIdentifierGroup
id: Kobold
prefix: KB
diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml
index caf19f85f2..7095a48641 100644
--- a/Resources/Prototypes/tags.yml
+++ b/Resources/Prototypes/tags.yml
@@ -644,6 +644,9 @@
- type: Tag
id: Grenade
+- type: Tag # tag to make a glue tool use glue on repair
+ id: GlueTool
+
- type: Tag
id: HudMedical
@@ -1187,7 +1190,7 @@
- type: Tag
id: SuitEVA
-
+
- type: Tag
id: Sunglasses
@@ -1322,5 +1325,3 @@
- type: Tag
id: WriteIgnoreStamps
-
-# ALPHABETICAL
diff --git a/Resources/Prototypes/tool_qualities.yml b/Resources/Prototypes/tool_qualities.yml
index e62fa5bfed..24301573a7 100644
--- a/Resources/Prototypes/tool_qualities.yml
+++ b/Resources/Prototypes/tool_qualities.yml
@@ -74,3 +74,10 @@
toolName: tool-quality-rolling-tool-name
spawn: RollingPin
icon: { sprite: Objects/Tools/rolling_pin.rsi, state: icon }
+
+- type: tool
+ id: Gluing
+ name: tool-quality-gluing-name
+ toolName: tool-quality-rolling-tool-name
+ spawn: DrinkSpaceGlue
+ icon: { sprite: Objects/Tools/rolling_pin.rsi, state: icon }
diff --git a/Resources/Textures/Clothing/Head/Hats/hat_gnome.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Hats/hat_gnome.rsi/equipped-HELMET.png
new file mode 100644
index 0000000000..ef8104f306
Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/hat_gnome.rsi/equipped-HELMET.png differ
diff --git a/Resources/Textures/Clothing/Head/Hats/hat_gnome.rsi/icon.png b/Resources/Textures/Clothing/Head/Hats/hat_gnome.rsi/icon.png
new file mode 100644
index 0000000000..f3ea78c5e5
Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/hat_gnome.rsi/icon.png differ
diff --git a/Resources/Textures/Clothing/Head/Hats/hat_gnome.rsi/meta.json b/Resources/Textures/Clothing/Head/Hats/hat_gnome.rsi/meta.json
new file mode 100644
index 0000000000..2a989f0557
--- /dev/null
+++ b/Resources/Textures/Clothing/Head/Hats/hat_gnome.rsi/meta.json
@@ -0,0 +1,21 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Sprited by DanoftheE (Discord)",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+
+ {
+ "name": "equipped-HELMET",
+ "directions": 4
+ },
+
+ {
+ "name": "icon"
+
+ }
+ ]
+}
diff --git a/Resources/Textures/Mobs/Animals/gnome.rsi/0-equipped-HELMET.png b/Resources/Textures/Mobs/Animals/gnome.rsi/0-equipped-HELMET.png
new file mode 100644
index 0000000000..6e48f410a0
Binary files /dev/null and b/Resources/Textures/Mobs/Animals/gnome.rsi/0-equipped-HELMET.png differ
diff --git a/Resources/Textures/Mobs/Animals/gnome.rsi/1-equipped-HELMET.png b/Resources/Textures/Mobs/Animals/gnome.rsi/1-equipped-HELMET.png
new file mode 100644
index 0000000000..6e48f410a0
Binary files /dev/null and b/Resources/Textures/Mobs/Animals/gnome.rsi/1-equipped-HELMET.png differ
diff --git a/Resources/Textures/Mobs/Animals/gnome.rsi/Gnome-0.png b/Resources/Textures/Mobs/Animals/gnome.rsi/Gnome-0.png
new file mode 100644
index 0000000000..b51b957e15
Binary files /dev/null and b/Resources/Textures/Mobs/Animals/gnome.rsi/Gnome-0.png differ
diff --git a/Resources/Textures/Mobs/Animals/gnome.rsi/Gnome-1.png b/Resources/Textures/Mobs/Animals/gnome.rsi/Gnome-1.png
new file mode 100644
index 0000000000..b51b957e15
Binary files /dev/null and b/Resources/Textures/Mobs/Animals/gnome.rsi/Gnome-1.png differ
diff --git a/Resources/Textures/Mobs/Animals/gnome.rsi/dead-1.png b/Resources/Textures/Mobs/Animals/gnome.rsi/dead-1.png
new file mode 100644
index 0000000000..e07631d60a
Binary files /dev/null and b/Resources/Textures/Mobs/Animals/gnome.rsi/dead-1.png differ
diff --git a/Resources/Textures/Mobs/Animals/gnome.rsi/meta.json b/Resources/Textures/Mobs/Animals/gnome.rsi/meta.json
new file mode 100644
index 0000000000..77a8f27d03
--- /dev/null
+++ b/Resources/Textures/Mobs/Animals/gnome.rsi/meta.json
@@ -0,0 +1,63 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Sprited by DanoftheE (Discord)",
+ "states": [
+ {
+ "name": "dead-1",
+ "delays": [
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "Gnome-0",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "Gnome-1",
+ "directions": 4,
+ "delays": [
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ],
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "name": "0-equipped-HELMET",
+ "directions": 4
+ },
+ {
+ "name": "1-equipped-HELMET",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/gnome.rsi/dead.png b/Resources/Textures/Objects/Specific/Hydroponics/gnome.rsi/dead.png
new file mode 100644
index 0000000000..a6830d5b5a
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/gnome.rsi/dead.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/gnome.rsi/harvest.png b/Resources/Textures/Objects/Specific/Hydroponics/gnome.rsi/harvest.png
new file mode 100644
index 0000000000..c31348eab2
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/gnome.rsi/harvest.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/gnome.rsi/meta.json b/Resources/Textures/Objects/Specific/Hydroponics/gnome.rsi/meta.json
new file mode 100644
index 0000000000..cf5c98cf9d
--- /dev/null
+++ b/Resources/Textures/Objects/Specific/Hydroponics/gnome.rsi/meta.json
@@ -0,0 +1,23 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Sprited by DanoftheE (Discord)",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "dead"
+ },
+ {
+ "name": "harvest"
+ },
+ {
+ "name": "stage-1"
+ },
+ {
+ "name": "stage-2"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/gnome.rsi/stage-1.png b/Resources/Textures/Objects/Specific/Hydroponics/gnome.rsi/stage-1.png
new file mode 100644
index 0000000000..439131961a
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/gnome.rsi/stage-1.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/gnome.rsi/stage-2.png b/Resources/Textures/Objects/Specific/Hydroponics/gnome.rsi/stage-2.png
new file mode 100644
index 0000000000..c601075335
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/gnome.rsi/stage-2.png differ