ГНОМЫ (#411)

* This adds the basic wirework for the gnomes, very unfinished

* GNOMES ARE DONE EXCEPT FOR GLUE WOOO

* removes gnome id, fixes ai and punch sounds, comments out the code for glue to take fuel

* changed sounds to non meme versions

* HAT NOW GIVES THE GNOME ACCENT TOO

* fixes a typo with Unclippable being Unclipable

* removed cuffable component (iforgotaboutit)

* added unrevivable to gnomes so defibs wont try (it was immpossible anyways but this is better)

* removes scrap code i put in the repair system

* remove the carrot mutation code i made (its bad)
clean up some things in the repairable system

* changes accent system from rplacging g to replacing no

* Fix the conflict (plz work)

* adds another comment bleh bleh im trying to fix things

* PAIN.jpeg

* work plz?

* FIX FOR REAL

* camel case mayhaps?

* adds unfinished glue use code (you can still see lit or not lit when held >:/   )

* temporary fix

* add: GNOMES REVAMPED

* fix: fix accent, sounds and add spawners

* add: gnome seeds to seed vendor

---------

Co-authored-by: BITTERLYNX <gagestemmerman@gmail.com>
This commit is contained in:
ThereDrD0
2024-07-02 12:55:25 +03:00
committed by GitHub
parent 80d87a255f
commit a0d346096d
56 changed files with 612 additions and 18 deletions

View File

@@ -108,13 +108,18 @@ public partial class SeedData
/// <summary> /// <summary>
/// If true, the properties of this seed cannot be modified. /// If true, the properties of this seed cannot be modified.
/// to spare others like me: this DOES NOT prevent mutations
/// </summary> /// </summary>
[DataField("immutable")] public bool Immutable; [DataField("immutable")] public bool Immutable;
/// <summary>
/// If true, you cannot clip this plant for more seeds, used for special plants such as the gnome plant
/// </summary>
[DataField("unclippable")] public bool Unclippable;
/// <summary> /// <summary>
/// If true, there is only a single reference to this seed and it's properties can be directly modified without /// 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. /// needing to clone the seed.
/// </summary>
[ViewVariables] [ViewVariables]
public bool Unique = false; // seed-prototypes or yaml-defined seeds for entity prototypes will not generally be unique. public bool Unique = false; // seed-prototypes or yaml-defined seeds for entity prototypes will not generally be unique.
#endregion #endregion
@@ -255,6 +260,7 @@ public partial class SeedData
{ {
DebugTools.Assert(!Immutable, "There should be no need to clone an immutable seed."); DebugTools.Assert(!Immutable, "There should be no need to clone an immutable seed.");
var newSeed = new SeedData var newSeed = new SeedData
{ {
Name = Name, Name = Name,
@@ -290,6 +296,7 @@ public partial class SeedData
HarvestRepeat = HarvestRepeat, HarvestRepeat = HarvestRepeat,
Potency = Potency, Potency = Potency,
Unclippable = Unclippable,
Seedless = Seedless, Seedless = Seedless,
Viable = Viable, Viable = Viable,
Slip = Slip, Slip = Slip,

View File

@@ -245,6 +245,13 @@ public sealed class PlantHolderSystem : EntitySystem
_popup.PopupCursor(Loc.GetString("plant-holder-component-nothing-to-sample-message"), args.User); _popup.PopupCursor(Loc.GetString("plant-holder-component-nothing-to-sample-message"), args.User);
return; 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) if (component.Sampled)
{ {

View File

@@ -6,15 +6,37 @@ using Content.Shared.Popups;
using Content.Shared.Repairable; using Content.Shared.Repairable;
using Content.Shared.Tools; using Content.Shared.Tools;
using SharedToolSystem = Content.Shared.Tools.Systems.SharedToolSystem; 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 namespace Content.Server.Repairable
{ {
public sealed class RepairableSystem : SharedRepairableSystem public sealed class RepairableSystem : SharedRepairableSystem
{ {
[Dependency] private readonly EuiManager _euiManager = default!;
[Dependency] private readonly SharedToolSystem _toolSystem = default!; [Dependency] private readonly SharedToolSystem _toolSystem = default!;
[Dependency] private readonly DamageableSystem _damageableSystem = default!; [Dependency] private readonly DamageableSystem _damageableSystem = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly IAdminLogManager _adminLogger= 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() public override void Initialize()
{ {
@@ -24,6 +46,8 @@ namespace Content.Server.Repairable
private void OnRepairFinished(EntityUid uid, RepairableComponent component, RepairFinishedEvent args) private void OnRepairFinished(EntityUid uid, RepairableComponent component, RepairFinishedEvent args)
{ {
ICommonSession? session = null;
if (args.Cancelled) if (args.Cancelled)
return; return;
@@ -34,15 +58,36 @@ namespace Content.Server.Repairable
{ {
var damageChanged = _damageableSystem.TryChangeDamage(uid, component.Damage, true, false, origin: args.User); 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()}"); _adminLogger.Add(LogType.Healed, $"{ToPrettyString(args.User):user} repaired {ToPrettyString(uid):target} by {damageChanged?.GetTotal()}");
} }
else else
{ {
// Repair all damage // Repair all damage
_damageableSystem.SetAllDamage(uid, damageable, 0); _damageableSystem.SetAllDamage(uid, damageable, 0);
_adminLogger.Add(LogType.Healed, $"{ToPrettyString(args.User):user} repaired {ToPrettyString(uid):target} back to full health"); _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<DamageableComponent>(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", var str = Loc.GetString("comp-repairable-repair",
("target", uid), ("target", uid),
("tool", args.Used!)); ("tool", args.Used!));

View File

@@ -0,0 +1,8 @@
namespace Content.Server.Speech.Components;
/// <summary>
/// garden time
/// </summary>
[RegisterComponent]
public sealed partial class GnomeAccentComponent : Component
{}

View File

@@ -0,0 +1,52 @@
using Content.Server.Speech.Components;
using System.Text.RegularExpressions;
namespace Content.Server.Speech.EntitySystems;
/// <summary>
/// System that Gnomes the Gnomes talking
/// </summary>
public sealed class GnomeAccentSystem : EntitySystem
{
[Dependency] private readonly ReplacementAccentSystem _replacement = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<GnomeAccentComponent, AccentGetEvent>(OnAccentGet);
}
public string Accentuate(string message, GnomeAccentComponent component)
{
var msg = message;
msg = _replacement.ApplyReplacements(msg, "gnome");
// Пиздец, а не код
msg = Regex.Replace(msg, @"(?<!\w)\bне", "ГНЕМ", RegexOptions.IgnoreCase);
msg = Regex.Replace(msg, @"(?<!\w)\bнет", "ГНЕМТ", RegexOptions.IgnoreCase);
msg = Regex.Replace(msg, @"(?<!\w)\bнахуй", "ГНАМХУЙ", RegexOptions.IgnoreCase);
msg = Regex.Replace(msg, @"(?<!\w)\bпидоры", "ГНОМЕРЫ", RegexOptions.IgnoreCase);
msg = Regex.Replace(msg, @"(?<!\w)\bхуесос", "ГНОХУСОМ", RegexOptions.IgnoreCase);
msg = Regex.Replace(msg, @"(?<!\w)\bебал", "ГНОМИЛ", RegexOptions.IgnoreCase);
msg = Regex.Replace(msg, @"(?<!\w)\bзаебал", "ЗАГНОМИЛ", RegexOptions.IgnoreCase);
msg = Regex.Replace(msg, @"(?<!\w)\bубил", "УГНОМИЛ", RegexOptions.IgnoreCase);
msg = Regex.Replace(msg, @"(?<!\w)\bубит", "УГНОМЛЕН", RegexOptions.IgnoreCase);
msg = Regex.Replace(msg, @"(?<!\w)\bебнул", "УГНОМЛЕН", RegexOptions.IgnoreCase);
msg = Regex.Replace(msg, @"(?<!\w)\bстрелял", "СТРЕГНОМИЛ", RegexOptions.IgnoreCase);
msg = Regex.Replace(msg, @"(?<!\w)\bзаколол", "СГНОМИЛ", RegexOptions.IgnoreCase);
msg = Regex.Replace(msg, @"(?<!\w)\bмой", "муй", RegexOptions.None);
msg = Regex.Replace(msg, @"(?<!\w)\bдруг", "бро", RegexOptions.None);
msg = Regex.Replace(msg, @"(?<!\w)\bдрузья", "друганы", RegexOptions.None);
return msg;
}
private void OnAccentGet(EntityUid uid, GnomeAccentComponent component, AccentGetEvent args)
{
args.Message = Accentuate(args.Message, component);
}
}

View File

@@ -1,6 +1,16 @@
using Robust.Shared.Audio;
namespace Content.Server._White.Other.DeathGasps; namespace Content.Server._White.Other.DeathGasps;
[RegisterComponent] [RegisterComponent]
public sealed partial class DeathGaspsComponent : Component public sealed partial class DeathGaspsComponent : Component
{ {
[DataField]
public SoundSpecifier DeathSounds = new SoundCollectionSpecifier("deathSounds");
[DataField]
public SoundSpecifier HeartSounds = new SoundCollectionSpecifier("heartSounds");
[DataField]
public bool CanOtherHearDeathSound;
} }

View File

@@ -16,8 +16,7 @@ public sealed class OnDeath : EntitySystem
} }
private readonly Dictionary<EntityUid, EntityUid> _playingStreams = new(); private readonly Dictionary<EntityUid, EntityUid> _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) private void HandleDeathEvent(EntityUid uid, DeathGaspsComponent component, MobStateChangedEvent args)
{ {
@@ -31,23 +30,23 @@ public sealed class OnDeath : EntitySystem
StopPlayingStream(uid); StopPlayingStream(uid);
break; break;
case MobState.Critical: case MobState.Critical:
PlayPlayingStream(uid); PlayPlayingStream(uid, component);
break; break;
case MobState.Dead: case MobState.Dead:
StopPlayingStream(uid); StopPlayingStream(uid);
PlayDeathSound(uid); PlayDeathSound(uid, component);
break; break;
} }
} }
private void PlayPlayingStream(EntityUid uid) private void PlayPlayingStream(EntityUid uid, DeathGaspsComponent component)
{ {
if (_playingStreams.TryGetValue(uid, out var currentStream)) if (_playingStreams.TryGetValue(uid, out var currentStream))
{ {
_audio.Stop(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) if (newStream.HasValue)
{ {
@@ -64,9 +63,12 @@ public sealed class OnDeath : EntitySystem
_playingStreams.Remove(uid); _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) private void OnDetach(EntityUid uid, DeathGaspsComponent component, PlayerDetachedEvent args)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -232,3 +232,7 @@ ghost-role-information-artifact-name = Sentient Artifact
ghost-role-information-artifact-description = ghost-role-information-artifact-description =
Enact your eldritch whims. Enact your eldritch whims.
Forcibly activate your nodes for good or for evil. 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.

View File

@@ -111,3 +111,5 @@ seeds-pumpkin-name = pumpkin
seeds-pumpkin-display-name = pumpkins seeds-pumpkin-display-name = pumpkins
seeds-cotton-name = cotton seeds-cotton-name = cotton
seeds-cotton-display-name = cotton plant seeds-cotton-display-name = cotton plant
seeds-gome-name = gnome
seeds-gnome-display-name = gnome plant

View File

@@ -0,0 +1,6 @@
ent-MobGnome = гном
.desc = Добросовестный помощник по саду
ent-GnomeSeeds = пакет семян гнома
.desc = { ent-SeedBase.desc }
ent-ClothingHeadHatGnome = шляпа гнома
.desc = Шляпа настоящего садового помощника

View File

@@ -1,4 +1,4 @@
- type: body - type: body
id: Bot id: Bot
name: "bot" name: "bot"
root: hand 1 root: hand 1

View File

@@ -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

View File

@@ -125,7 +125,19 @@
- id: Soap - id: Soap
prob: 0.10 prob: 0.10
- id: PlushieCarp - 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 - id: PlushieSlime
prob: 0.1 prob: 0.1
- id: PlushieSnake - id: PlushieSnake

View File

@@ -37,5 +37,6 @@
BerrySeeds: 5 BerrySeeds: 5
PeaSeeds: 5 PeaSeeds: 5
CottonSeeds: 5 CottonSeeds: 5
GnomeSeeds: 2
emaggedInventory: emaggedInventory:
FlyAmanitaSeeds: 1 FlyAmanitaSeeds: 1

View File

@@ -1108,3 +1108,19 @@
sprite: Clothing/Head/Hats/beret_medic.rsi sprite: Clothing/Head/Hats/beret_medic.rsi
- type: Clothing - type: Clothing
sprite: Clothing/Head/Hats/beret_medic.rsi 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

View File

@@ -819,3 +819,180 @@
# - type: AlwaysRevolutionaryConvertible # - type: AlwaysRevolutionaryConvertible
- type: StealTarget - type: StealTarget
stealGroup: AnimalTropico 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

View File

@@ -19,6 +19,8 @@
map: [ "enum.SolutionContainerLayers.Overlay" ] map: [ "enum.SolutionContainerLayers.Overlay" ]
- type: Appearance - type: Appearance
- type: Glue - type: Glue
- type: RefillableSolution
solution: drink
- type: SolutionContainerManager - type: SolutionContainerManager
solutions: solutions:
drink: drink:
@@ -26,6 +28,11 @@
reagents: reagents:
- ReagentId: SpaceGlue - ReagentId: SpaceGlue
Quantity: 30 Quantity: 30
Welder:
reagents:
- ReagentId: SpaceGlue
Quantity: 30
maxVol: 30
- type: SolutionContainerVisuals - type: SolutionContainerVisuals
maxFillLevels: 6 maxFillLevels: 6
fillBaseName: fill fillBaseName: fill
@@ -38,8 +45,15 @@
- type: Tag - type: Tag
tags: tags:
- DrinkSpaceGlue - DrinkSpaceGlue
- GlueTool
- type: TrashOnSolutionEmpty - type: TrashOnSolutionEmpty
solution: drink 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 - type: entity
parent: DrinkBase parent: DrinkBase

View File

@@ -1514,6 +1514,8 @@
- type: Tag - type: Tag
tags: tags:
- DrinkSpaceGlue - DrinkSpaceGlue
- type: Tool
qualities: Gluing
- type: entity - type: entity
parent: BaseItem parent: BaseItem

View File

@@ -571,3 +571,13 @@
seedId: cotton seedId: cotton
- type: Sprite - type: Sprite
sprite: Objects/Specific/Hydroponics/cotton.rsi 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

View File

@@ -1501,3 +1501,22 @@
Max: 10 Max: 10
PotencyDivisor: 20 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

View File

@@ -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

View File

@@ -524,3 +524,13 @@
path: /Audio/Animals/parrot_raught.ogg path: /Audio/Animals/parrot_raught.ogg
params: params:
variation: 0.125 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

View File

@@ -0,0 +1,8 @@
- type: speechSounds
id: GnomesSpeech
saySound:
collection: GnomesSpeechCollection
askSound:
collection: GnomesSpeechCollection
exclaimSound:
collection: GnomesSpeechCollection

View File

@@ -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

View File

@@ -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

View File

@@ -1,8 +1,12 @@
# Non-fungible apes, anyone? # Non-fungible apes, anyone?
- type: nameIdentifierGroup - type: nameIdentifierGroup
id: Monkey id: Monkey
prefix: MK prefix: MK
- type: nameIdentifierGroup
id: Gnome
prefix: GN
- type: nameIdentifierGroup - type: nameIdentifierGroup
id: Kobold id: Kobold
prefix: KB prefix: KB

View File

@@ -644,6 +644,9 @@
- type: Tag - type: Tag
id: Grenade id: Grenade
- type: Tag # tag to make a glue tool use glue on repair
id: GlueTool
- type: Tag - type: Tag
id: HudMedical id: HudMedical
@@ -1187,7 +1190,7 @@
- type: Tag - type: Tag
id: SuitEVA id: SuitEVA
- type: Tag - type: Tag
id: Sunglasses id: Sunglasses
@@ -1322,5 +1325,3 @@
- type: Tag - type: Tag
id: WriteIgnoreStamps id: WriteIgnoreStamps
# ALPHABETICAL

View File

@@ -74,3 +74,10 @@
toolName: tool-quality-rolling-tool-name toolName: tool-quality-rolling-tool-name
spawn: RollingPin spawn: RollingPin
icon: { sprite: Objects/Tools/rolling_pin.rsi, state: icon } 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 }

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 631 B

View File

@@ -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"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 827 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 827 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 430 B

View File

@@ -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
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 444 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 B

View File

@@ -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"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B