ГНОМЫ (#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>
@@ -108,13 +108,18 @@ public partial class SeedData
|
||||
|
||||
/// <summary>
|
||||
/// If true, the properties of this seed cannot be modified.
|
||||
/// to spare others like me: this DOES NOT prevent mutations
|
||||
/// </summary>
|
||||
[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>
|
||||
/// 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.
|
||||
/// </summary>
|
||||
[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,
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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<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",
|
||||
("target", uid),
|
||||
("tool", args.Used!));
|
||||
|
||||
8
Content.Server/Speech/Components/GnomeAccentComponent.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace Content.Server.Speech.Components;
|
||||
|
||||
/// <summary>
|
||||
/// garden time
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
public sealed partial class GnomeAccentComponent : Component
|
||||
{}
|
||||
52
Content.Server/Speech/EntitySystems/GnomeAccentSystem.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,16 @@
|
||||
using Robust.Shared.Audio;
|
||||
|
||||
namespace Content.Server._White.Other.DeathGasps;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class DeathGaspsComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public SoundSpecifier DeathSounds = new SoundCollectionSpecifier("deathSounds");
|
||||
|
||||
[DataField]
|
||||
public SoundSpecifier HeartSounds = new SoundCollectionSpecifier("heartSounds");
|
||||
|
||||
[DataField]
|
||||
public bool CanOtherHearDeathSound;
|
||||
}
|
||||
|
||||
@@ -16,8 +16,7 @@ public sealed class OnDeath : EntitySystem
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
@@ -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)
|
||||
|
||||
BIN
Resources/Audio/Voice/Gnome/Gnome_Clumsy_Sound_Effect.ogg
Normal file
BIN
Resources/Audio/Voice/Gnome/Gnome_Woo_Sound_Effect.ogg
Normal file
BIN
Resources/Audio/White/Voice/Gnomes/Death1.ogg
Normal file
BIN
Resources/Audio/White/Voice/Gnomes/Death2.ogg
Normal file
BIN
Resources/Audio/White/Voice/Gnomes/Death3.ogg
Normal file
BIN
Resources/Audio/White/Voice/Gnomes/Death4.ogg
Normal file
BIN
Resources/Audio/White/Voice/Gnomes/Gnome1V1.ogg
Normal file
BIN
Resources/Audio/White/Voice/Gnomes/Gnome2V1.ogg
Normal file
BIN
Resources/Audio/White/Voice/Gnomes/Gnome3V1.ogg
Normal file
BIN
Resources/Audio/White/Voice/Gnomes/Gnome4V1.ogg
Normal file
BIN
Resources/Audio/White/Voice/Gnomes/Gnome5V1.ogg
Normal file
BIN
Resources/Audio/White/Voice/Gnomes/Gnome6V1.ogg
Normal file
BIN
Resources/Audio/White/Voice/Gnomes/Gnome7V1.ogg
Normal file
BIN
Resources/Audio/White/Voice/Gnomes/Gnome8V1.ogg
Normal file
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
6
Resources/Locale/ru-RU/_white/mobs/gnomes.ftl
Normal file
@@ -0,0 +1,6 @@
|
||||
ent-MobGnome = гном
|
||||
.desc = Добросовестный помощник по саду
|
||||
ent-GnomeSeeds = пакет семян гнома
|
||||
.desc = { ent-SeedBase.desc }
|
||||
ent-ClothingHeadHatGnome = шляпа гнома
|
||||
.desc = Шляпа настоящего садового помощника
|
||||
@@ -1,4 +1,4 @@
|
||||
- type: body
|
||||
- type: body
|
||||
id: Bot
|
||||
name: "bot"
|
||||
root: hand 1
|
||||
|
||||
19
Resources/Prototypes/Body/Prototypes/gnome.yml
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -37,5 +37,6 @@
|
||||
BerrySeeds: 5
|
||||
PeaSeeds: 5
|
||||
CottonSeeds: 5
|
||||
GnomeSeeds: 2
|
||||
emaggedInventory:
|
||||
FlyAmanitaSeeds: 1
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1514,6 +1514,8 @@
|
||||
- type: Tag
|
||||
tags:
|
||||
- DrinkSpaceGlue
|
||||
- type: Tool
|
||||
qualities: Gluing
|
||||
|
||||
- type: entity
|
||||
parent: BaseItem
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
8
Resources/Prototypes/_White/Sound/Speech/gnomes.yml
Normal file
@@ -0,0 +1,8 @@
|
||||
- type: speechSounds
|
||||
id: GnomesSpeech
|
||||
saySound:
|
||||
collection: GnomesSpeechCollection
|
||||
askSound:
|
||||
collection: GnomesSpeechCollection
|
||||
exclaimSound:
|
||||
collection: GnomesSpeechCollection
|
||||
19
Resources/Prototypes/_White/SoundCollections/gnomes.yml
Normal 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
|
||||
12
Resources/Prototypes/_White/Spawners/spawners.yml
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 }
|
||||
|
||||
|
After Width: | Height: | Size: 368 B |
BIN
Resources/Textures/Clothing/Head/Hats/hat_gnome.rsi/icon.png
Normal file
|
After Width: | Height: | Size: 631 B |
@@ -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"
|
||||
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
Resources/Textures/Mobs/Animals/gnome.rsi/0-equipped-HELMET.png
Normal file
|
After Width: | Height: | Size: 827 B |
BIN
Resources/Textures/Mobs/Animals/gnome.rsi/1-equipped-HELMET.png
Normal file
|
After Width: | Height: | Size: 827 B |
BIN
Resources/Textures/Mobs/Animals/gnome.rsi/Gnome-0.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
Resources/Textures/Mobs/Animals/gnome.rsi/Gnome-1.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
Resources/Textures/Mobs/Animals/gnome.rsi/dead-1.png
Normal file
|
After Width: | Height: | Size: 430 B |
63
Resources/Textures/Mobs/Animals/gnome.rsi/meta.json
Normal 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
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 444 B |
|
After Width: | Height: | Size: 443 B |
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 173 B |
|
After Width: | Height: | Size: 246 B |