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