From 7c38da32b05db3013dcd741f28005a2b117e0789 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Sat, 7 Sep 2024 22:04:34 -0400 Subject: [PATCH 1/9] Rats --- .../Abilities/CrawlUnderObjectsSystem.cs | 44 ++ .../Abilities/CrawlUnderObjectsSystem.cs | 140 +++++ .../EntitySystems/MouthStorageSystem.cs | 41 ++ Content.Server/Mousetrap/MousetrapSystem.cs | 5 + .../AlwaysTriggerMousetrapComponent.cs | 5 + .../Abilities/CrawlUnderObjectsComponent.cs | 47 ++ .../DeltaV/Abilities/RummagerComponent.cs | 5 + .../SharedCrawlUnderObjectsSystem.cs | 25 + .../Components/MouthStorageComponent.cs | 32 + .../EntitySystems/SharedMouthStorageSystem.cs | 84 +++ Content.Shared/Humanoid/NamingSystem.cs | 8 +- .../Humanoid/Prototypes/SpeciesPrototype.cs | 1 + .../RatKing/RatKingRummageableComponent.cs | 13 + Content.Shared/RatKing/SharedRatKingSystem.cs | 24 +- .../Storage/EntitySystems/DumpableSystem.cs | 27 +- .../en-US/_NF/actions/crawl-under-objects.ftl | 2 + .../en-US/_NF/chat/managers/chat_manager.ftl | 11 +- .../Locale/en-US/deltav/markings/rodentia.ftl | 199 ++++++ .../en-US/deltav/species/namepreset.ftl | 1 + .../Locale/en-US/deltav/species/species.ftl | 1 + .../storage/mouth-storage-component.ftl | 1 + Resources/Prototypes/DeltaV/Actions/types.yml | 36 ++ .../Prototypes/DeltaV/Body/Parts/rodentia.yml | 160 +++++ .../DeltaV/Body/Prototypes/rodentia.yml | 49 ++ .../DeltaV/Damage/modifier_sets.yml | 22 +- .../DeltaV/Detasets/Names/rodentia_female.yml | 169 +++++ .../DeltaV/Detasets/Names/rodentia_last.yml | 92 +++ .../DeltaV/Detasets/Names/rodentia_male.yml | 177 ++++++ .../Mobs/Customization/Markings/rodentia.yml | 579 ++++++++++++++++++ .../DeltaV/Entities/Mobs/Player/rodentia.yml | 5 + .../DeltaV/Entities/Mobs/Species/rodentia.yml | 126 ++++ .../Entities/Objects/Misc/mouth_storage.yml | 24 + .../Prototypes/DeltaV/Guidebook/species.yml | 5 + .../Prototypes/DeltaV/Species/rodentia.yml | 152 +++++ .../DeltaV/Voice/speech_emote_sounds.yml | 86 ++- .../Prototypes/DeltaV/Voice/speech_verbs.yml | 9 + .../Prototypes/DeltaV/typing_indicator.yml | 7 + .../Mobs/Customization/Markings/gauze.yml | 32 +- .../Mobs/Customization/Markings/scars.yml | 4 +- .../Mobs/Customization/Markings/tattoos.yml | 4 +- .../Entities/Mobs/NPCs/regalrat.yml | 10 +- Resources/Prototypes/Guidebook/species.yml | 3 +- .../Nyanotrasen/metempsychoticHumanoids.yml | 14 + .../Prototypes/Species/species_weights.yml | 11 +- .../Guidebook/Mobs/DeltaV/Rodentia.xml | 33 + .../ServerInfo/Guidebook/Mobs/Species.xml | 1 + .../creampie.rsi/creampie_rodentia.png | Bin 0 -> 327 bytes .../DeltaV/Effects/creampie.rsi/meta.json | 20 +- .../DeltaV/Effects/speech.rsi/meta.json | 19 +- .../DeltaV/Effects/speech.rsi/rodentia0.png | Bin 0 -> 780 bytes .../DeltaV/Effects/speech.rsi/rodentia1.png | Bin 0 -> 622 bytes .../DeltaV/Effects/speech.rsi/rodentia2.png | Bin 0 -> 614 bytes .../Interface/Actions/mouthStorageOpen.png | Bin 0 -> 314 bytes .../body_markings.rsi/countershade.png | Bin 0 -> 377 bytes .../body_markings.rsi/countershade_f.png | Bin 0 -> 397 bytes .../body_markings.rsi/countershade_lleg.png | Bin 0 -> 240 bytes .../body_markings.rsi/countershade_rleg.png | Bin 0 -> 238 bytes .../Rodentia/body_markings.rsi/fawn.png | Bin 0 -> 390 bytes .../Rodentia/body_markings.rsi/hooded.png | Bin 0 -> 362 bytes .../Rodentia/body_markings.rsi/hooded_f.png | Bin 0 -> 373 bytes .../Rodentia/body_markings.rsi/meta.json | 36 ++ .../Rodentia/cheek_markings.rsi/cheeks.png | Bin 0 -> 280 bytes .../cheek_markings.rsi/cheeks_overlay.png | Bin 0 -> 186 bytes .../Rodentia/cheek_markings.rsi/fluff.png | Bin 0 -> 288 bytes .../Rodentia/cheek_markings.rsi/fluff_alt.png | Bin 0 -> 266 bytes .../cheek_markings.rsi/fluff_alt_overlay.png | Bin 0 -> 251 bytes .../cheek_markings.rsi/fluff_overlay.png | Bin 0 -> 248 bytes .../Rodentia/cheek_markings.rsi/meta.json | 36 ++ .../Rodentia/cheek_markings.rsi/whiskers.png | Bin 0 -> 227 bytes .../Rodentia/ear_markings.rsi/bat.png | Bin 0 -> 331 bytes .../Rodentia/ear_markings.rsi/bat_large.png | Bin 0 -> 358 bytes .../Rodentia/ear_markings.rsi/hamster.png | Bin 0 -> 264 bytes .../ear_markings.rsi/hamster_overlay.png | Bin 0 -> 169 bytes .../Rodentia/ear_markings.rsi/long.png | Bin 0 -> 339 bytes .../ear_markings.rsi/long_overlay.png | Bin 0 -> 182 bytes .../Rodentia/ear_markings.rsi/meta.json | 68 ++ .../Rodentia/ear_markings.rsi/mouse.png | Bin 0 -> 322 bytes .../Rodentia/ear_markings.rsi/mouse_large.png | Bin 0 -> 334 bytes .../ear_markings.rsi/mouse_large_overlay.png | Bin 0 -> 267 bytes .../ear_markings.rsi/mouse_overlay.png | Bin 0 -> 263 bytes .../Rodentia/ear_markings.rsi/none.png | Bin 0 -> 146 bytes .../Rodentia/ear_markings.rsi/pointy.png | Bin 0 -> 242 bytes .../Rodentia/ear_markings.rsi/rabbit.png | Bin 0 -> 380 bytes .../ear_markings.rsi/rabbit_overlay.png | Bin 0 -> 243 bytes .../Rodentia/ear_markings.rsi/small.png | Bin 0 -> 275 bytes .../Rodentia/head_markings.rsi/blaze.png | Bin 0 -> 312 bytes .../Rodentia/head_markings.rsi/meta.json | 16 + .../Rodentia/head_markings.rsi/round.png | Bin 0 -> 300 bytes .../Rodentia/snout_markings.rsi/bat.png | Bin 0 -> 305 bytes .../Rodentia/snout_markings.rsi/bat_nose.png | Bin 0 -> 270 bytes .../snout_markings.rsi/bat_overlay.png | Bin 0 -> 240 bytes .../Rodentia/snout_markings.rsi/flat.png | Bin 0 -> 271 bytes .../Rodentia/snout_markings.rsi/flat_nose.png | Bin 0 -> 169 bytes .../snout_markings.rsi/flat_overlay.png | Bin 0 -> 241 bytes .../Rodentia/snout_markings.rsi/meta.json | 44 ++ .../Rodentia/snout_markings.rsi/round.png | Bin 0 -> 282 bytes .../snout_markings.rsi/round_nose.png | Bin 0 -> 181 bytes .../snout_markings.rsi/round_overlay.png | Bin 0 -> 251 bytes .../Rodentia/tail_markings.rsi/beaver.png | Bin 0 -> 324 bytes .../Rodentia/tail_markings.rsi/hamster.png | Bin 0 -> 219 bytes .../Rodentia/tail_markings.rsi/long.png | Bin 0 -> 345 bytes .../tail_markings.rsi/long_overlay.png | Bin 0 -> 319 bytes .../Rodentia/tail_markings.rsi/long_tip.png | Bin 0 -> 271 bytes .../Rodentia/tail_markings.rsi/meta.json | 52 ++ .../Rodentia/tail_markings.rsi/mouse.png | Bin 0 -> 436 bytes .../Rodentia/tail_markings.rsi/rabbit.png | Bin 0 -> 293 bytes .../tail_markings.rsi/rabbit_overlay.png | Bin 0 -> 234 bytes .../Rodentia/tail_markings.rsi/short.png | Bin 0 -> 267 bytes .../Rodentia/tail_markings.rsi/squirrel.png | Bin 0 -> 398 bytes .../tail_markings.rsi/squirrel_overlay.png | Bin 0 -> 355 bytes .../Mobs/Species/Rodentia/parts.rsi/full.png | Bin 0 -> 412 bytes .../Species/Rodentia/parts.rsi/head_f.png | Bin 0 -> 336 bytes .../Species/Rodentia/parts.rsi/head_m.png | Bin 0 -> 336 bytes .../Mobs/Species/Rodentia/parts.rsi/l_arm.png | Bin 0 -> 251 bytes .../Species/Rodentia/parts.rsi/l_foot.png | Bin 0 -> 248 bytes .../Species/Rodentia/parts.rsi/l_hand.png | Bin 0 -> 239 bytes .../Mobs/Species/Rodentia/parts.rsi/l_leg.png | Bin 0 -> 224 bytes .../Mobs/Species/Rodentia/parts.rsi/meta.json | 62 ++ .../Mobs/Species/Rodentia/parts.rsi/r_arm.png | Bin 0 -> 259 bytes .../Species/Rodentia/parts.rsi/r_foot.png | Bin 0 -> 253 bytes .../Species/Rodentia/parts.rsi/r_hand.png | Bin 0 -> 246 bytes .../Mobs/Species/Rodentia/parts.rsi/r_leg.png | Bin 0 -> 226 bytes .../Species/Rodentia/parts.rsi/torso_f.png | Bin 0 -> 470 bytes .../Species/Rodentia/parts.rsi/torso_m.png | Bin 0 -> 444 bytes 124 files changed, 2821 insertions(+), 58 deletions(-) create mode 100644 Content.Client/DeltaV/Abilities/CrawlUnderObjectsSystem.cs create mode 100644 Content.Server/DeltaV/Abilities/CrawlUnderObjectsSystem.cs create mode 100644 Content.Server/DeltaV/Storage/EntitySystems/MouthStorageSystem.cs create mode 100644 Content.Shared/DeltaV/Abilities/AlwaysTriggerMousetrapComponent.cs create mode 100644 Content.Shared/DeltaV/Abilities/CrawlUnderObjectsComponent.cs create mode 100644 Content.Shared/DeltaV/Abilities/RummagerComponent.cs create mode 100644 Content.Shared/DeltaV/Abilities/SharedCrawlUnderObjectsSystem.cs create mode 100644 Content.Shared/DeltaV/Storage/Components/MouthStorageComponent.cs create mode 100644 Content.Shared/DeltaV/Storage/EntitySystems/SharedMouthStorageSystem.cs create mode 100644 Resources/Locale/en-US/_NF/actions/crawl-under-objects.ftl create mode 100644 Resources/Locale/en-US/deltav/markings/rodentia.ftl create mode 100644 Resources/Locale/en-US/deltav/species/namepreset.ftl create mode 100644 Resources/Locale/en-US/deltav/storage/mouth-storage-component.ftl create mode 100644 Resources/Prototypes/DeltaV/Actions/types.yml create mode 100644 Resources/Prototypes/DeltaV/Body/Parts/rodentia.yml create mode 100644 Resources/Prototypes/DeltaV/Body/Prototypes/rodentia.yml create mode 100644 Resources/Prototypes/DeltaV/Detasets/Names/rodentia_female.yml create mode 100644 Resources/Prototypes/DeltaV/Detasets/Names/rodentia_last.yml create mode 100644 Resources/Prototypes/DeltaV/Detasets/Names/rodentia_male.yml create mode 100644 Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/rodentia.yml create mode 100644 Resources/Prototypes/DeltaV/Entities/Mobs/Player/rodentia.yml create mode 100644 Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml create mode 100644 Resources/Prototypes/DeltaV/Entities/Objects/Misc/mouth_storage.yml create mode 100644 Resources/Prototypes/DeltaV/Species/rodentia.yml create mode 100644 Resources/Prototypes/Nyanotrasen/metempsychoticHumanoids.yml create mode 100644 Resources/ServerInfo/Guidebook/Mobs/DeltaV/Rodentia.xml create mode 100644 Resources/Textures/DeltaV/Effects/creampie.rsi/creampie_rodentia.png create mode 100644 Resources/Textures/DeltaV/Effects/speech.rsi/rodentia0.png create mode 100644 Resources/Textures/DeltaV/Effects/speech.rsi/rodentia1.png create mode 100644 Resources/Textures/DeltaV/Effects/speech.rsi/rodentia2.png create mode 100644 Resources/Textures/DeltaV/Interface/Actions/mouthStorageOpen.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/body_markings.rsi/countershade.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/body_markings.rsi/countershade_f.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/body_markings.rsi/countershade_lleg.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/body_markings.rsi/countershade_rleg.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/body_markings.rsi/fawn.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/body_markings.rsi/hooded.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/body_markings.rsi/hooded_f.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/body_markings.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi/cheeks.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi/cheeks_overlay.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi/fluff.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi/fluff_alt.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi/fluff_alt_overlay.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi/fluff_overlay.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi/whiskers.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/bat.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/bat_large.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/hamster.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/hamster_overlay.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/long.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/long_overlay.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/mouse.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/mouse_large.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/mouse_large_overlay.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/mouse_overlay.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/none.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/pointy.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/rabbit.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/rabbit_overlay.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/small.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/head_markings.rsi/blaze.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/head_markings.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/head_markings.rsi/round.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/bat.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/bat_nose.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/bat_overlay.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/flat.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/flat_nose.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/flat_overlay.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/round.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/round_nose.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/round_overlay.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/beaver.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/hamster.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/long.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/long_overlay.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/long_tip.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/mouse.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/rabbit.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/rabbit_overlay.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/short.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/squirrel.png create mode 100644 Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/squirrel_overlay.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/full.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/head_f.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/head_m.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/l_arm.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/l_foot.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/l_hand.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/l_leg.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/r_arm.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/r_foot.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/r_hand.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/r_leg.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/torso_f.png create mode 100644 Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/torso_m.png diff --git a/Content.Client/DeltaV/Abilities/CrawlUnderObjectsSystem.cs b/Content.Client/DeltaV/Abilities/CrawlUnderObjectsSystem.cs new file mode 100644 index 00000000000..879a5efee55 --- /dev/null +++ b/Content.Client/DeltaV/Abilities/CrawlUnderObjectsSystem.cs @@ -0,0 +1,44 @@ +using Content.Shared.DeltaV.Abilities; +using Content.Shared.Popups; +using Robust.Client.GameObjects; +using DrawDepth = Content.Shared.DrawDepth.DrawDepth; + +namespace Content.Client.DeltaV.Abilities; + +public sealed partial class HideUnderTableAbilitySystem : SharedCrawlUnderObjectsSystem +{ + [Dependency] private readonly AppearanceSystem _appearance = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnAppearanceChange); + } + + private void OnAppearanceChange(EntityUid uid, + CrawlUnderObjectsComponent component, + AppearanceChangeEvent args) + { + if (!TryComp(uid, out var sprite)) + return; + + _appearance.TryGetData(uid, SneakMode.Enabled, out bool enabled); + if (enabled) + { + if (component.OriginalDrawDepth != null) + return; + + component.OriginalDrawDepth = sprite.DrawDepth; + sprite.DrawDepth = (int) DrawDepth.SmallMobs; + } + else + { + if (component.OriginalDrawDepth == null) + return; + + sprite.DrawDepth = (int) component.OriginalDrawDepth; + component.OriginalDrawDepth = null; + } + } +} diff --git a/Content.Server/DeltaV/Abilities/CrawlUnderObjectsSystem.cs b/Content.Server/DeltaV/Abilities/CrawlUnderObjectsSystem.cs new file mode 100644 index 00000000000..3b7b464f91b --- /dev/null +++ b/Content.Server/DeltaV/Abilities/CrawlUnderObjectsSystem.cs @@ -0,0 +1,140 @@ +using Content.Shared.Actions; +using Content.Shared.Climbing.Components; +using Content.Shared.Climbing.Events; +using Content.Shared.DeltaV.Abilities; +using Content.Shared.Maps; +using Content.Shared.Movement.Systems; +using Content.Shared.Physics; +using Robust.Server.GameObjects; +using Robust.Shared.Physics; +using Robust.Shared.Physics.Systems; + +namespace Content.Server.DeltaV.Abilities; + +public sealed partial class CrawlUnderObjectsSystem : SharedCrawlUnderObjectsSystem +{ + [Dependency] private readonly AppearanceSystem _appearance = default!; + [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; + [Dependency] private readonly MovementSpeedModifierSystem _movespeed = default!; + [Dependency] private readonly SharedPhysicsSystem _physics = default!; + [Dependency] private readonly TurfSystem _turf = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnAbilityToggle); + SubscribeLocalEvent(OnAttemptClimb); + SubscribeLocalEvent(OnRefreshMovespeed); + } + + private bool IsOnCollidingTile(EntityUid uid) + { + var xform = Transform(uid); + var tile = xform.Coordinates.GetTileRef(); + if (tile == null) + return false; + + return _turf.IsTileBlocked(tile.Value, CollisionGroup.MobMask); + } + + private void OnInit(EntityUid uid, CrawlUnderObjectsComponent component, ComponentInit args) + { + if (component.ToggleHideAction != null) + return; + + _actionsSystem.AddAction(uid, ref component.ToggleHideAction, component.ActionProto); + } + + private bool EnableSneakMode(EntityUid uid, CrawlUnderObjectsComponent component) + { + if (component.Enabled + || (TryComp(uid, out var climbing) + && climbing.IsClimbing == true)) + return false; + + component.Enabled = true; + Dirty(uid, component); + RaiseLocalEvent(uid, new CrawlingUpdatedEvent(component.Enabled)); + + if (TryComp(uid, out FixturesComponent? fixtureComponent)) + { + foreach (var (key, fixture) in fixtureComponent.Fixtures) + { + var newMask = (fixture.CollisionMask + & (int)~CollisionGroup.HighImpassable + & (int)~CollisionGroup.MidImpassable) + | (int)CollisionGroup.InteractImpassable; + if (fixture.CollisionMask == newMask) + continue; + + component.ChangedFixtures.Add((key, fixture.CollisionMask)); + _physics.SetCollisionMask(uid, + key, + fixture, + newMask, + manager: fixtureComponent); + } + } + return true; + } + + private bool DisableSneakMode(EntityUid uid, CrawlUnderObjectsComponent component) + { + if (!component.Enabled + || IsOnCollidingTile(uid) + || (TryComp(uid, out var climbing) + && climbing.IsClimbing == true)) + return false; + + component.Enabled = false; + Dirty(uid, component); + RaiseLocalEvent(uid, new CrawlingUpdatedEvent(component.Enabled)); + + // Restore normal collision masks + if (TryComp(uid, out FixturesComponent? fixtureComponent)) + foreach (var (key, originalMask) in component.ChangedFixtures) + if (fixtureComponent.Fixtures.TryGetValue(key, out var fixture)) + _physics.SetCollisionMask(uid, key, fixture, originalMask, fixtureComponent); + + component.ChangedFixtures.Clear(); + return true; + } + + private void OnAbilityToggle(EntityUid uid, + CrawlUnderObjectsComponent component, + ToggleCrawlingStateEvent args) + { + if (args.Handled) + return; + + bool result; + + if (component.Enabled) + result = DisableSneakMode(uid, component); + else + result = EnableSneakMode(uid, component); + + if (TryComp(uid, out var app)) + _appearance.SetData(uid, SneakMode.Enabled, component.Enabled, app); + + _movespeed.RefreshMovementSpeedModifiers(uid); + + args.Handled = result; + } + + private void OnAttemptClimb(EntityUid uid, + CrawlUnderObjectsComponent component, + AttemptClimbEvent args) + { + if (component.Enabled == true) + args.Cancelled = true; + } + + private void OnRefreshMovespeed(EntityUid uid, CrawlUnderObjectsComponent component, RefreshMovementSpeedModifiersEvent args) + { + if (component.Enabled) + args.ModifySpeed(component.SneakSpeedModifier, component.SneakSpeedModifier); + } +} diff --git a/Content.Server/DeltaV/Storage/EntitySystems/MouthStorageSystem.cs b/Content.Server/DeltaV/Storage/EntitySystems/MouthStorageSystem.cs new file mode 100644 index 00000000000..e5e7d6755e6 --- /dev/null +++ b/Content.Server/DeltaV/Storage/EntitySystems/MouthStorageSystem.cs @@ -0,0 +1,41 @@ +using Content.Server.Nutrition; +using Content.Server.Speech; +using Content.Server.Speech.EntitySystems; +using Content.Shared.DeltaV.Storage.Components; +using Content.Shared.DeltaV.Storage.EntitySystems; +using Content.Shared.Storage; + +namespace Content.Server.DeltaV.Storage.EntitySystems; + +public sealed class MouthStorageSystem : SharedMouthStorageSystem +{ + [Dependency] private readonly ReplacementAccentSystem _replacement = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnAccent); + SubscribeLocalEvent(OnIngestAttempt); + } + + // Force you to mumble if you have items in your mouth + private void OnAccent(EntityUid uid, MouthStorageComponent component, AccentGetEvent args) + { + if (IsMouthBlocked(component)) + args.Message = _replacement.ApplyReplacements(args.Message, "mumble"); + } + + // Attempting to eat or drink anything with items in your mouth won't work + private void OnIngestAttempt(EntityUid uid, MouthStorageComponent component, IngestionAttemptEvent args) + { + if (!IsMouthBlocked(component)) + return; + + if (!TryComp(component.MouthId, out var storage)) + return; + + var firstItem = storage.Container.ContainedEntities[0]; + args.Blocker = firstItem; + args.Cancel(); + } +} diff --git a/Content.Server/Mousetrap/MousetrapSystem.cs b/Content.Server/Mousetrap/MousetrapSystem.cs index e3aaab364dd..ef7dcc1ce6b 100644 --- a/Content.Server/Mousetrap/MousetrapSystem.cs +++ b/Content.Server/Mousetrap/MousetrapSystem.cs @@ -1,6 +1,7 @@ using Content.Server.Damage.Systems; using Content.Server.Explosion.EntitySystems; using Content.Server.Popups; +using Content.Shared.Abilities; using Content.Shared.Interaction.Events; using Content.Shared.Inventory; using Content.Shared.Mousetrap; @@ -39,6 +40,10 @@ private void OnUseInHand(EntityUid uid, MousetrapComponent component, UseInHandE private void OnStepTriggerAttempt(EntityUid uid, MousetrapComponent component, ref StepTriggerAttemptEvent args) { + // DeltaV: Entities with this component always trigger mouse traps, even if wearing shoes + if (HasComp(args.Tripper)) + args.Cancelled = false; + args.Continue |= component.IsActive; } diff --git a/Content.Shared/DeltaV/Abilities/AlwaysTriggerMousetrapComponent.cs b/Content.Shared/DeltaV/Abilities/AlwaysTriggerMousetrapComponent.cs new file mode 100644 index 00000000000..a80d2ec65f0 --- /dev/null +++ b/Content.Shared/DeltaV/Abilities/AlwaysTriggerMousetrapComponent.cs @@ -0,0 +1,5 @@ +using Robust.Shared.GameStates; +namespace Content.Shared.Abilities; + +[RegisterComponent, NetworkedComponent] +public sealed partial class AlwaysTriggerMousetrapComponent : Component; diff --git a/Content.Shared/DeltaV/Abilities/CrawlUnderObjectsComponent.cs b/Content.Shared/DeltaV/Abilities/CrawlUnderObjectsComponent.cs new file mode 100644 index 00000000000..1e7f17a0de0 --- /dev/null +++ b/Content.Shared/DeltaV/Abilities/CrawlUnderObjectsComponent.cs @@ -0,0 +1,47 @@ +using Content.Shared.Actions; +using DrawDepth = Content.Shared.DrawDepth.DrawDepth; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.DeltaV.Abilities; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class CrawlUnderObjectsComponent : Component +{ + [DataField] + public EntityUid? ToggleHideAction; + + [DataField] + public EntProtoId? ActionProto; + + [DataField] + public bool Enabled = false; + + /// + /// List of fixtures that had their collision mask changed. + /// Required for re-adding the collision mask. + /// + [DataField, AutoNetworkedField] + public List<(string key, int originalMask)> ChangedFixtures = new(); + + [DataField] + public int? OriginalDrawDepth; + + [DataField] + public float SneakSpeedModifier = 0.7f; +} + +[Serializable, NetSerializable] +public enum SneakMode : byte +{ + Enabled +} + +public sealed partial class ToggleCrawlingStateEvent : InstantActionEvent { } + +[Serializable, NetSerializable] +public sealed partial class CrawlingUpdatedEvent(bool enabled = false) : EventArgs +{ + public readonly bool Enabled = enabled; +} diff --git a/Content.Shared/DeltaV/Abilities/RummagerComponent.cs b/Content.Shared/DeltaV/Abilities/RummagerComponent.cs new file mode 100644 index 00000000000..0aa1b8f6732 --- /dev/null +++ b/Content.Shared/DeltaV/Abilities/RummagerComponent.cs @@ -0,0 +1,5 @@ +using Robust.Shared.GameStates; +namespace Content.Shared.Abilities; + +[RegisterComponent, NetworkedComponent] +public sealed partial class RummagerComponent : Component; diff --git a/Content.Shared/DeltaV/Abilities/SharedCrawlUnderObjectsSystem.cs b/Content.Shared/DeltaV/Abilities/SharedCrawlUnderObjectsSystem.cs new file mode 100644 index 00000000000..56f1d11ee27 --- /dev/null +++ b/Content.Shared/DeltaV/Abilities/SharedCrawlUnderObjectsSystem.cs @@ -0,0 +1,25 @@ + +using Content.Shared.Popups; + +namespace Content.Shared.DeltaV.Abilities; +public abstract class SharedCrawlUnderObjectsSystem : EntitySystem +{ + [Dependency] private readonly SharedPopupSystem _popup = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnCrawlingUpdated); + } + + private void OnCrawlingUpdated(EntityUid uid, + CrawlUnderObjectsComponent component, + CrawlingUpdatedEvent args) + { + if (args.Enabled) + _popup.PopupEntity(Loc.GetString("crawl-under-objects-toggle-on"), uid); + else + _popup.PopupEntity(Loc.GetString("crawl-under-objects-toggle-off"), uid); + } +} diff --git a/Content.Shared/DeltaV/Storage/Components/MouthStorageComponent.cs b/Content.Shared/DeltaV/Storage/Components/MouthStorageComponent.cs new file mode 100644 index 00000000000..ecc90363a0b --- /dev/null +++ b/Content.Shared/DeltaV/Storage/Components/MouthStorageComponent.cs @@ -0,0 +1,32 @@ +using Content.Shared.DeltaV.Storage.EntitySystems; +using Content.Shared.FixedPoint; +using Robust.Shared.Containers; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +namespace Content.Shared.DeltaV.Storage.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +[Access(typeof(SharedMouthStorageSystem))] +public sealed partial class MouthStorageComponent : Component +{ + public const string MouthContainerId = "mouth"; + + [DataField, AutoNetworkedField] + public EntProtoId? OpenStorageAction; + + [DataField, AutoNetworkedField] + public EntityUid? Action; + + [DataField] + public EntProtoId MouthProto = "ActionOpenMouthStorage"; + + [ViewVariables] + public Container Mouth = default!; + + [DataField] + public EntityUid? MouthId; + + // Mimimum inflicted damage on hit to spit out items + [DataField] + public FixedPoint2 SpitDamageThreshold = FixedPoint2.New(2); +} diff --git a/Content.Shared/DeltaV/Storage/EntitySystems/SharedMouthStorageSystem.cs b/Content.Shared/DeltaV/Storage/EntitySystems/SharedMouthStorageSystem.cs new file mode 100644 index 00000000000..df3ed835e26 --- /dev/null +++ b/Content.Shared/DeltaV/Storage/EntitySystems/SharedMouthStorageSystem.cs @@ -0,0 +1,84 @@ +using Content.Shared.Actions; +using Content.Shared.CombatMode; +using Content.Shared.Damage; +using Content.Shared.DeltaV.Storage.Components; +using Content.Shared.Examine; +using Content.Shared.IdentityManagement; +using Content.Shared.Standing; +using Content.Shared.Storage; +using Content.Shared.Storage.EntitySystems; +using Robust.Shared.Containers; +using Robust.Shared.Map; + +namespace Content.Shared.DeltaV.Storage.EntitySystems; + +public abstract class SharedMouthStorageSystem : EntitySystem +{ + [Dependency] private readonly DumpableSystem _dumpableSystem = default!; + [Dependency] private readonly SharedContainerSystem _containerSystem = default!; + [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMouthStorageInit); + SubscribeLocalEvent(DropAllContents); + SubscribeLocalEvent(DropAllContents); + SubscribeLocalEvent(OnDamageModified); + SubscribeLocalEvent(OnExamined); + } + + protected bool IsMouthBlocked(MouthStorageComponent component) + { + if (!TryComp(component.MouthId, out var storage)) + return false; + + return storage.Container.ContainedEntities.Count > 0; + } + + private void OnMouthStorageInit(EntityUid uid, MouthStorageComponent component, MapInitEvent args) + { + if (string.IsNullOrWhiteSpace(component.MouthProto)) + return; + + component.Mouth = _containerSystem.EnsureContainer(uid, MouthStorageComponent.MouthContainerId); + component.Mouth.ShowContents = false; + component.Mouth.OccludesLight = false; + + var mouth = Spawn(component.MouthProto, new EntityCoordinates(uid, 0, 0)); + _containerSystem.Insert(mouth, component.Mouth); + component.MouthId = mouth; + + if (!string.IsNullOrWhiteSpace(component.OpenStorageAction) && component.Action == null) + _actionsSystem.AddAction(uid, ref component.Action, component.OpenStorageAction, mouth); + } + + private void DropAllContents(EntityUid uid, MouthStorageComponent component, EntityEventArgs args) + { + if (component.MouthId == null) + return; + + _dumpableSystem.DumpContents(component.MouthId.Value, uid, uid); + } + + private void OnDamageModified(EntityUid uid, MouthStorageComponent component, DamageChangedEvent args) + { + if (args.DamageDelta == null + || !args.DamageIncreased + || args.DamageDelta.GetTotal() < component.SpitDamageThreshold) + return; + + DropAllContents(uid, component, args); + } + + // Other people can see if this person has items in their mouth. + private void OnExamined(EntityUid uid, MouthStorageComponent component, ExaminedEvent args) + { + if (IsMouthBlocked(component)) + { + var subject = Identity.Entity(uid, EntityManager); + args.PushMarkup(Loc.GetString("mouth-storage-examine-condition-occupied", ("entity", subject))); + } + } +} diff --git a/Content.Shared/Humanoid/NamingSystem.cs b/Content.Shared/Humanoid/NamingSystem.cs index c786a839501..fca036bf002 100644 --- a/Content.Shared/Humanoid/NamingSystem.cs +++ b/Content.Shared/Humanoid/NamingSystem.cs @@ -35,11 +35,9 @@ public string GetName(string species, Gender? gender = null) case SpeciesNaming.FirstDashFirst: return Loc.GetString("namepreset-firstdashfirst", ("first1", GetFirstName(speciesProto, gender)), ("first2", GetFirstName(speciesProto, gender))); - // Start of Nyano - Summary: for Oni naming - case SpeciesNaming.LastNoFirst: - return Loc.GetString("namepreset-lastnofirst", - ("first", GetFirstName(speciesProto, gender)), ("last", GetLastName(speciesProto))); - // End of Nyano - Summary: for Oni naming + case SpeciesNaming.LastFirst: // DeltaV: Rodentia name scheme + return Loc.GetString("namepreset-lastfirst", + ("last", GetLastName(speciesProto)), ("first", GetFirstName(speciesProto, gender))); case SpeciesNaming.FirstLast: default: return Loc.GetString("namepreset-firstlast", diff --git a/Content.Shared/Humanoid/Prototypes/SpeciesPrototype.cs b/Content.Shared/Humanoid/Prototypes/SpeciesPrototype.cs index 2bf65477d51..6e33a074fa7 100644 --- a/Content.Shared/Humanoid/Prototypes/SpeciesPrototype.cs +++ b/Content.Shared/Humanoid/Prototypes/SpeciesPrototype.cs @@ -129,4 +129,5 @@ public enum SpeciesNaming : byte FirstDashFirst, LastNoFirst, // Nyano - Summary: for Oni naming TheFirstofLast, + LastFirst, // DeltaV } diff --git a/Content.Shared/RatKing/RatKingRummageableComponent.cs b/Content.Shared/RatKing/RatKingRummageableComponent.cs index f3a389ef764..283400c1442 100644 --- a/Content.Shared/RatKing/RatKingRummageableComponent.cs +++ b/Content.Shared/RatKing/RatKingRummageableComponent.cs @@ -20,6 +20,19 @@ public sealed partial class RatKingRummageableComponent : Component [AutoNetworkedField] public bool Looted; + /// + /// DeltaV: Last time the object was looted, used to check if cooldown has expired + /// + [ViewVariables] + public TimeSpan? LastLooted; + + /// + /// DeltaV: Minimum time between rummage attempts + /// + [DataField("rummageCooldown"), ViewVariables(VVAccess.ReadWrite)] + [AutoNetworkedField] + public TimeSpan RummageCooldown = TimeSpan.FromMinutes(5); + /// /// How long it takes to rummage through a rummageable container. /// diff --git a/Content.Shared/RatKing/SharedRatKingSystem.cs b/Content.Shared/RatKing/SharedRatKingSystem.cs index ea489e332db..b2c4e4f29a2 100644 --- a/Content.Shared/RatKing/SharedRatKingSystem.cs +++ b/Content.Shared/RatKing/SharedRatKingSystem.cs @@ -1,4 +1,5 @@ -using Content.Shared.Actions; +using Content.Shared.Abilities; +using Content.Shared.Actions; using Content.Shared.DoAfter; using Content.Shared.Random; using Content.Shared.Random.Helpers; @@ -9,11 +10,13 @@ using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Serialization; +using Robust.Shared.Timing; namespace Content.Shared.RatKing; public abstract class SharedRatKingSystem : EntitySystem { + [Dependency] private readonly IGameTiming _gameTiming = default!; // Used for rummage cooldown [Dependency] private readonly INetManager _net = default!; [Dependency] protected readonly IPrototypeManager PrototypeManager = default!; [Dependency] protected readonly IRobustRandom Random = default!; @@ -105,7 +108,12 @@ private void UpdateActions(EntityUid uid, RatKingComponent? component = null) private void OnGetVerb(EntityUid uid, RatKingRummageableComponent component, GetVerbsEvent args) { - if (!HasComp(args.User) || component.Looted) + if (!HasComp(args.User) + || component.Looted + || _gameTiming.CurTime < component.LastLooted + component.RummageCooldown) + // DeltaV - Use RummagerComponent instead of RatKingComponent + // (This is so we can give Rodentia rummage abilities) + // Additionally, adds a cooldown check return; args.Verbs.Add(new AlternativeVerb @@ -128,10 +136,18 @@ private void OnGetVerb(EntityUid uid, RatKingRummageableComponent component, Get private void OnDoAfterComplete(EntityUid uid, RatKingRummageableComponent component, RatKingRummageDoAfterEvent args) { - if (args.Cancelled || component.Looted) + // DeltaV - Rummaging an object updates the looting cooldown rather than a "previously looted" check. + // Note that the "Looted" boolean can still be checked (by mappers/admins) + // to disable rummaging on the object indefinitely, but rummaging will no + // longer permanently prevent future rummaging. + var time = _gameTiming.CurTime; + if (args.Cancelled + || component.Looted + || time < component.LastLooted + component.RummageCooldown) return; - component.Looted = true; + component.LastLooted = time; + // End DeltaV change Dirty(uid, component); _audio.PlayPredicted(component.Sound, uid, args.User); diff --git a/Content.Shared/Storage/EntitySystems/DumpableSystem.cs b/Content.Shared/Storage/EntitySystems/DumpableSystem.cs index 93c4b69e4dd..6ebbef171de 100644 --- a/Content.Shared/Storage/EntitySystems/DumpableSystem.cs +++ b/Content.Shared/Storage/EntitySystems/DumpableSystem.cs @@ -6,6 +6,7 @@ using Content.Shared.Placeable; using Content.Shared.Storage.Components; using Content.Shared.Verbs; +using JetBrains.Annotations; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; using Robust.Shared.Prototypes; @@ -139,27 +140,41 @@ private void StartDoAfter(EntityUid storageUid, EntityUid targetUid, EntityUid u private void OnDoAfter(EntityUid uid, DumpableComponent component, DumpableDoAfterEvent args) { - if (args.Handled || args.Cancelled || !TryComp(uid, out var storage) || storage.Container.ContainedEntities.Count == 0) + if (args.Handled || args.Cancelled) + return; + + DumpContents(uid, args.Args.Target, args.Args.User, component); + } + + // DeltaV: Refactor to allow dumping that doesn't require a verb + [PublicAPI] + public void DumpContents(EntityUid uid, EntityUid? target, EntityUid user, DumpableComponent? component = null) + { + if (!TryComp(uid, out var storage) + || !Resolve(uid, ref component)) + return; + + if (storage.Container.ContainedEntities.Count == 0) return; var dumpQueue = new Queue(storage.Container.ContainedEntities); var dumped = false; - if (_disposalUnitSystem.HasDisposals(args.Args.Target)) + if (_disposalUnitSystem.HasDisposals(target)) { dumped = true; foreach (var entity in dumpQueue) { - _disposalUnitSystem.DoInsertDisposalUnit(args.Args.Target.Value, entity, args.Args.User); + _disposalUnitSystem.DoInsertDisposalUnit(target.Value, entity, user); } } - else if (HasComp(args.Args.Target)) + else if (HasComp(target)) { dumped = true; - var (targetPos, targetRot) = _transformSystem.GetWorldPositionRotation(args.Args.Target.Value); + var (targetPos, targetRot) = _transformSystem.GetWorldPositionRotation(target.Value); foreach (var entity in dumpQueue) { @@ -179,7 +194,7 @@ private void OnDoAfter(EntityUid uid, DumpableComponent component, DumpableDoAft if (dumped) { - _audio.PlayPredicted(component.DumpSound, uid, args.User); + _audio.PlayPredicted(component.DumpSound, uid, user); } } } diff --git a/Resources/Locale/en-US/_NF/actions/crawl-under-objects.ftl b/Resources/Locale/en-US/_NF/actions/crawl-under-objects.ftl new file mode 100644 index 00000000000..629c4bb9d4e --- /dev/null +++ b/Resources/Locale/en-US/_NF/actions/crawl-under-objects.ftl @@ -0,0 +1,2 @@ +crawl-under-objects-toggle-on = Now sneaking +crawl-under-objects-toggle-off = Now standing diff --git a/Resources/Locale/en-US/_NF/chat/managers/chat_manager.ftl b/Resources/Locale/en-US/_NF/chat/managers/chat_manager.ftl index 897a4cb0375..86b75108cd8 100644 --- a/Resources/Locale/en-US/_NF/chat/managers/chat_manager.ftl +++ b/Resources/Locale/en-US/_NF/chat/managers/chat_manager.ftl @@ -17,9 +17,8 @@ chat-speech-verb-harpy-2 = tweets chat-speech-verb-harpy-3 = caws chat-speech-verb-harpy-4 = trills -chat-speech-verb-name-goblin = Goblin -chat-speech-verb-goblin-1 = jabbers -chat-speech-verb-goblin-2 = vokers -chat-speech-verb-goblin-3 = blurts out -chat-speech-verb-goblin-4 = patters -chat-speech-verb-goblin-5 = cuts +chat-speech-verb-name-rodentia = Rodentia +chat-speech-verb-rodentia-1 = squeaks +chat-speech-verb-rodentia-2 = pieps +chat-speech-verb-rodentia-3 = chatters +chat-speech-verb-rodentia-4 = squeals diff --git a/Resources/Locale/en-US/deltav/markings/rodentia.ftl b/Resources/Locale/en-US/deltav/markings/rodentia.ftl new file mode 100644 index 00000000000..f569aa208eb --- /dev/null +++ b/Resources/Locale/en-US/deltav/markings/rodentia.ftl @@ -0,0 +1,199 @@ +# head markings + +## patterns + +marking-RodentiaHeadBlaze = Head - Blaze +marking-RodentiaHeadBlaze-head_m = Head +marking-RodentiaHeadBlaze-blaze = Pattern + +marking-RodentiaHeadRound = Head - Face Color +marking-RodentiaHeadRound-head_m = Head +marking-RodentiaHeadRound-round = Pattern + +## ears + +marking-RodentiaHeadTopEarBat = Ears - Bat +marking-RodentiaHeadTopEarBat-bat = Outer ear + +marking-RodentiaHeadTopEarBatLarge = Ears - Bat (Large) +marking-RodentiaHeadTopEarBatLarge-bat_large = Outer ear + +marking-RodentiaHeadTopEarHamster = Ears - Hamster +marking-RodentiaHeadTopEarHamster-hamster = Outer ear +marking-RodentiaHeadTopEarHamster-hamster_overlay = Inner ear + +marking-RodentiaHeadTopEarLong = Ears - Long +marking-RodentiaHeadTopEarLong-long = Outer ear +marking-RodentiaHeadTopEarLong-long_overlay = Inner ear + +marking-RodentiaHeadTopEarMouse = Ears - Mouse +marking-RodentiaHeadTopEarMouse-mouse = Outer ear +marking-RodentiaHeadTopEarMouse-mouse_overlay = Inner ear + +marking-RodentiaHeadTopEarMouseLarge = Ears - Mouse (Large) +marking-RodentiaHeadTopEarMouseLarge-mouse_large = Outer +marking-RodentiaHeadTopEarMouseLarge-mouse_large_overlay = Inner ear + +marking-RodentiaHeadTopEarNone = Ears - Hidden +marking-RodentiaHeadTopEarNone-none = None + +marking-RodentiaHeadTopEarPointy = Ears - Pointy +marking-RodentiaHeadTopEarPointy-pointy = Outer ear + +marking-RodentiaHeadTopEarRabbit = Ears - Rabbit +marking-RodentiaHeadTopEarRabbit-rabbit = Outer ear +marking-RodentiaHeadTopEarRabbit-rabbit_overlay = Inner ear + +marking-RodentiaHeadTopEarSmall = Ears - Small +marking-RodentiaHeadTopEarSmall-small = Outer Ear + +## snout + +marking-RodentiaSnoutBat = Snout - Bat +marking-RodentiaSnoutBat-bat = Snout +marking-RodentiaSnoutBat-bat_nose = Nose + +marking-RodentiaSnoutBatCounter = Snout - Bat, Two-tone +marking-RodentiaSnoutBatCounter-bat = Snout +marking-RodentiaSnoutBatCounter-bat_nose = Nose +marking-RodentiaSnoutBatCounter-bat_overlay = Countershade + +marking-RodentiaSnoutFlat = Snout - Flat +marking-RodentiaSnoutFlat-flat = Snout +marking-RodentiaSnoutFlat-flat_nose = Nose + +marking-RodentiaSnoutFlatCounter = Snout - Flat, Two-tone +marking-RodentiaSnoutFlatCounter-flat = Snout +marking-RodentiaSnoutFlatCounter-flat_nose = Nose +marking-RodentiaSnoutFlatCounter-flat_overlay = Countershade + +marking-RodentiaSnoutRound = Snout - Round +marking-RodentiaSnoutRound-round = Snout +marking-RodentiaSnoutRound-round_nose = Nose + +marking-RodentiaSnoutRoundCounter = Snout - Round, Two-tone +marking-RodentiaSnoutRoundCounter-round = Snout +marking-RodentiaSnoutRoundCounter-round_nose = Nose +marking-RodentiaSnoutRoundCounter-round_overlay = Countershade + +## cheeks + +marking-RodentiaCheeksRound = Cheeks - Round +marking-RodentiaCheeksRound-cheeks = Cheek + +marking-RodentiaCheeksRoundCounter = Cheeks - Round, Two-tone +marking-RodentiaCheeksRoundCounter-cheeks = Cheek +marking-RodentiaCheeksRoundCounter-cheeks_overlay = Countershade + +marking-RodentiaCheeksFluff = Cheeks - Fluff +marking-RodentiaCheeksFluff-fluff = Cheek fluff + +marking-RodentiaCheeksFluffCounter = Cheeks - Fluff, Two-tone +marking-RodentiaCheeksFluffCounter-fluff = Cheek fluff +marking-RodentiaCheeksFluffCounter-fluff_overlay = Countershade + +marking-RodentiaCheeksFluffAlt = Cheeks - Fluff, Alt +marking-RodentiaCheeksFluffAlt-fluff_alt = Cheek fluff + +marking-RodentiaCheeksFluffAltCounter = Cheeks - Fluff, Alt, Two-tone +marking-RodentiaCheeksFluffAltCounter-fluff_alt = Cheek fluff +marking-RodentiaCheeksFluffAltCounter-fluff_alt_overlay = Countershade + +marking-RodentiaCheeksWhiskers = Whiskers +marking-RodentiaCheeksWhiskers-whiskers = Whiskers + +# body markings + +## tail + +marking-RodentiaTailBeaver = Tail - Beaver +marking-RodentiaTailBeaver-beaver = Tail + +marking-RodentiaTailHamster = Tail - Hamster +marking-RodentiaTailHamster-hamster = Tail + +marking-RodentiaTailLong = Tail - Long +marking-RodentiaTailLong-long = Tail + +marking-RodentiaTailLongCounter = Tail - Long, Two-tone +marking-RodentiaTailLongCounter-long = Tail +marking-RodentiaTailLongCounter-long_overlay = Countershade + +marking-RodentiaTailLongCounterTip = Tail - Long, Three-tone +marking-RodentiaTailLongCounterTip-long = Tail +marking-RodentiaTailLongCounterTip-long_overlay = Countershade +marking-RodentiaTailLongCounterTip-long_tip = Tip + +marking-RodentiaTailMouse = Tail - Mouse +marking-RodentiaTailMouse-mouse = Tail + +marking-RodentiaTailRabbit = Tail - Rabbit +marking-RodentiaTailRabbit-rabbit = Tail + +marking-RodentiaTailRabbitCounter = Tail - Rabbit, Two-tone +marking-RodentiaTailRabbitCounter-rabbit = Tail +marking-RodentiaTailRabbitCounter-rabbit_overlay = Countershade + +marking-RodentiaTailShort = Tail - Short +marking-RodentiaTailShort-short = Tail + +marking-RodentiaTailSquirrel = Tail - Squirrel +marking-RodentiaTailSquirrel-squirrel = Tail + +marking-RodentiaTailSquirrelBicolor = Tail - Squirrel, Two-tone +marking-RodentiaTailSquirrelBicolor-squirrel = Tail +marking-RodentiaTailSquirrelBicolor-squirrel_overlay = Secondary + +## patterns + +marking-RodentiaChestCountershade = Chest - Countershade +marking-RodentiaChestCountershade-countershade = Countershade + +marking-RodentiaChestCountershadeF = Chest - Countershade +marking-RodentiaChestCountershadeF-countershade_f = Countershade + +marking-RodentiaLegLeftCountershade = Left Leg - Countershade +marking-RodentiaLegLeftCountershade-l_leg = Leg +marking-RodentiaLegLeftCountershade-countershade_lleg = Countershade + +marking-RodentiaLegRightCountershade = Right Leg - Countershade +marking-RodentiaLegRightCountershade-r_leg = Leg +marking-RodentiaLegRightCountershade-countershade_rleg = Countershade + +marking-RodentiaChestFawn = Chest - Fawn +marking-RodentiaChestFawn-fawn = Pattern + +marking-RodentiaChestHooded = Chest - Hooded +marking-RodentiaChestHooded-hooded = Pattern + +marking-RodentiaChestHoodedF = Chest - Hooded +marking-RodentiaChestHoodedF-hooded_f = Pattern + +# base parts + +marking-RodentiaHeadBasic = Head - Basic +marking-RodentiaHeadBasic-head_m = Head + +marking-RodentiaArmLeftBasic = Left Arm - Basic +marking-RodentiaArmLeftBasic-l_arm = Arm + +marking-RodentiaArmRightBasic = Right Arm - Basic +marking-RodentiaArmRightBasic-r_arm = Arm + +marking-RodentiaLegLeftBasic = Left Leg - Basic +marking-RodentiaLegLeftBasic-l_leg = Leg + +marking-RodentiaLegRightBasic = Right Leg - Basic +marking-RodentiaLegRightBasic-r_leg = Leg + +marking-RodentiaHandLeftBasic = Left Hand - Basic +marking-RodentiaHandLeftBasic-l_hand = Hand + +marking-RodentiaHandRightBasic = Right Hand - Basic +marking-RodentiaHandRightBasic-r_hand = Hand + +marking-RodentiaFootLeftBasic = Left Foot - Basic +marking-RodentiaFootLeftBasic-l_foot = Foot + +marking-RodentiaFootRightBasic = Right Foot - Basic +marking-RodentiaFootRightBasic-r_foot = Foot diff --git a/Resources/Locale/en-US/deltav/species/namepreset.ftl b/Resources/Locale/en-US/deltav/species/namepreset.ftl new file mode 100644 index 00000000000..8ac28ddeb99 --- /dev/null +++ b/Resources/Locale/en-US/deltav/species/namepreset.ftl @@ -0,0 +1 @@ +namepreset-lastfirst = {$last} {$first} diff --git a/Resources/Locale/en-US/deltav/species/species.ftl b/Resources/Locale/en-US/deltav/species/species.ftl index 83437bd651f..545858ef4ab 100644 --- a/Resources/Locale/en-US/deltav/species/species.ftl +++ b/Resources/Locale/en-US/deltav/species/species.ftl @@ -2,3 +2,4 @@ species-name-vulpkanin = Vulpkanin species-name-harpy = Harpy +species-name-rodentia = Rodentia diff --git a/Resources/Locale/en-US/deltav/storage/mouth-storage-component.ftl b/Resources/Locale/en-US/deltav/storage/mouth-storage-component.ftl new file mode 100644 index 00000000000..86f2faea6a5 --- /dev/null +++ b/Resources/Locale/en-US/deltav/storage/mouth-storage-component.ftl @@ -0,0 +1 @@ +mouth-storage-examine-condition-occupied=[color=yellow]{CAPITALIZE(SUBJECT($entity))} has something in {POSS-ADJ($entity)} mouth.[/color] diff --git a/Resources/Prototypes/DeltaV/Actions/types.yml b/Resources/Prototypes/DeltaV/Actions/types.yml new file mode 100644 index 00000000000..64656e3bdc4 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Actions/types.yml @@ -0,0 +1,36 @@ +# - type: entity +# id: ActionOpenRadioImplant +# name: Open Radio Implant +# description: Opens the bluespace key compartment of the radio implant embedded in your skull. +# components: +# - type: InstantAction +# itemIconStyle: BigAction +# priority: -20 +# icon: +# sprite: Clothing/Ears/Headsets/base.rsi +# state: icon +# event: !type:OpenStorageImplantEvent + +- type: entity + id: ActionOpenMouthStorage + name: Open cheek storage + description: Allows you to store items in your cheeks. + components: + - type: InstantAction + itemIconStyle: BigAction + priority: -10 + icon: DeltaV/Interface/Actions/mouthStorageOpen.png + event: !type:OpenStorageImplantEvent + +- type: entity + id: ActionToggleSneakMode + name: Toggle sneak mode + description: Sneak underneath tables. + components: + - type: InstantAction + itemIconStyle: BigAction + useDelay: 3 + icon: + sprite: Structures/Furniture/Tables/generic.rsi + state: full + event: !type:ToggleCrawlingStateEvent diff --git a/Resources/Prototypes/DeltaV/Body/Parts/rodentia.yml b/Resources/Prototypes/DeltaV/Body/Parts/rodentia.yml new file mode 100644 index 00000000000..150c31cda88 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Body/Parts/rodentia.yml @@ -0,0 +1,160 @@ +- type: entity + id: PartRodentia + parent: BaseItem + name: "rodentia body part" + abstract: true + components: + - type: Sprite + sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + - type: Icon + sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + - type: Damageable + damageContainer: Biological + - type: BodyPart + - type: ContainerContainer + containers: + bodypart: !type:Container + ents: [] + - type: StaticPrice #DynamicPrice + price: 100 + - type: Tag + tags: + - Trash + +- type: entity + id: TorsoRodentia + name: "rodentia torso" + parent: PartRodentia + components: + - type: Sprite + state: "torso_m" + - type: Icon + state: "torso_m" + - type: BodyPart + partType: Torso + +- type: entity + id: HeadRodentia + name: "rodentia head" + parent: PartRodentia + components: + - type: Sprite + state: "head_m" + - type: Icon + state: "head_m" + - type: BodyPart + partType: Head + vital: true + - type: Input + context: "ghost" + - type: InputMover + - type: GhostOnMove + - type: Tag + tags: + - Head + +- type: entity + id: LeftArmRodentia + name: "left rodentia arm" + parent: PartRodentia + components: + - type: Sprite + state: "l_arm" + - type: Icon + state: "l_arm" + - type: BodyPart + partType: Arm + symmetry: Left + +- type: entity + id: RightArmRodentia + name: "right rodentia arm" + parent: PartRodentia + components: + - type: Sprite + state: "r_arm" + - type: Icon + state: "r_arm" + - type: BodyPart + partType: Arm + symmetry: Right + +- type: entity + id: LeftHandRodentia + name: "left rodentia hand" + parent: PartRodentia + components: + - type: Sprite + state: "l_hand" + - type: Icon + state: "l_hand" + - type: BodyPart + partType: Hand + symmetry: Left + +- type: entity + id: RightHandRodentia + name: "right rodentia hand" + parent: PartRodentia + components: + - type: Sprite + state: "r_hand" + - type: Icon + state: "r_hand" + - type: BodyPart + partType: Hand + symmetry: Right + +- type: entity + id: LeftLegRodentia + name: "left rodentia leg" + parent: PartRodentia + components: + - type: Sprite + state: "l_leg" + - type: Icon + state: "l_leg" + - type: BodyPart + partType: Leg + symmetry: Left + - type: MovementBodyPart + +- type: entity + id: RightLegRodentia + name: "right rodentia leg" + parent: PartRodentia + components: + - type: Sprite + state: "r_leg" + - type: Icon + state: "r_leg" + - type: BodyPart + partType: Leg + symmetry: Right + - type: MovementBodyPart + +- type: entity + id: LeftFootRodentia + name: "left rodentia foot" + parent: PartRodentia + components: + - type: Sprite + state: "l_foot" + - type: Icon + state: "l_foot" + - type: BodyPart + partType: Foot + symmetry: Left + +- type: entity + id: RightFootRodentia + name: "right rodentia foot" + parent: PartRodentia + components: + - type: Sprite + state: "r_foot" + - type: Icon + state: "r_foot" + - type: BodyPart + partType: Foot + symmetry: Right diff --git a/Resources/Prototypes/DeltaV/Body/Prototypes/rodentia.yml b/Resources/Prototypes/DeltaV/Body/Prototypes/rodentia.yml new file mode 100644 index 00000000000..0e62f397940 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Body/Prototypes/rodentia.yml @@ -0,0 +1,49 @@ +- type: body + name: species-name-rodentia + id: Rodentia + root: torso + slots: + head: + part: HeadRodentia + connections: + - torso + organs: + brain: OrganHumanBrain + eyes: OrganHumanEyes + torso: + part: TorsoRodentia + organs: + heart: OrganAnimalHeart + lungs: OrganHumanLungs + stomach: OrganAnimalStomach + liver: OrganAnimalLiver + kidneys: OrganHumanKidneys + connections: + - right arm + - left arm + - right leg + - left leg + right arm: + part: RightArmRodentia + connections: + - right hand + left arm: + part: LeftArmRodentia + connections: + - left hand + right hand: + part: RightHandRodentia + left hand: + part: LeftHandRodentia + right leg: + part: RightLegRodentia + connections: + - right foot + left leg: + part: LeftLegRodentia + connections: + - left foot + right foot: + part: RightFootRodentia + left foot: + part: LeftFootRodentia diff --git a/Resources/Prototypes/DeltaV/Damage/modifier_sets.yml b/Resources/Prototypes/DeltaV/Damage/modifier_sets.yml index 3d90f3c3165..a7a16dca9a0 100644 --- a/Resources/Prototypes/DeltaV/Damage/modifier_sets.yml +++ b/Resources/Prototypes/DeltaV/Damage/modifier_sets.yml @@ -8,4 +8,24 @@ coefficients: Blunt: 1.15 Slash: 1.15 - Piercing: 1.15 \ No newline at end of file + Piercing: 1.15 + +- type: damageModifierSet + id: Rodentia + coefficients: + Blunt: 1.3 + Slash: 1.15 + Piercing: 1.15 + +- type: damageModifierSet + id: StorageTank + coefficients: + Blunt: 0.7 + Slash: 0.5 + Piercing: 0.7 + Shock: 1.2 + flatReductions: + Blunt: 5 + Slash: 5 + Piercing: 5 + Heat: 5 diff --git a/Resources/Prototypes/DeltaV/Detasets/Names/rodentia_female.yml b/Resources/Prototypes/DeltaV/Detasets/Names/rodentia_female.yml new file mode 100644 index 00000000000..879c711d650 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Detasets/Names/rodentia_female.yml @@ -0,0 +1,169 @@ +- type: dataset + id: names_rodentia_female + values: + # generic names + - Squeaks + - Squeaker + - Nibbles + - Pebbles + - Peanut + - Pinky + - Gadget + - Scurry + - Scamper + - Chitters + - Quill + - Whiskers + - Wiggles + - Button + - Sniffles + - Chip + - Pipsqueak + - Nugget + - Comet + - Dash + - Fudge + - Noodle + - Spud + - Muffin + - Sprout + - Jelly + - Fuzz + - Cheddar + - Tootsie + - Pickle + - Berry + + # gender-neutral + - Alex + - Riley + - Taylor + - Jordan + - Casey + - Avery + - Morgan + - Jamie + - Quinn + - Charlie + - Dakota + - Sydney + - Parker + - Cameron + - Finley + - Robin + - Emery + - Kendall + - Rowan + - Sawyer + - Bailey + - Jaden + - Addison + - Logan + - Devon + - Lane + - Blair + - Drew + - Jesse + - Skylar + - Sam + - Reese + - Terry + - Marley + - Elliot + - Harper + - Jules + - Ren + - Sloane + - Rylan + - Sage + + # feminine names + - Minnie + - Daisy + - Bella + - Luna + - Rosie + - Mia + - Lily + - Chloe + - Sophie + - Ruby + - Zoe + - Abby + - Ella + - Molly + - Lucy + - Nala + - Poppy + - Grace + - Ivy + - Hazel + - Emma + - Phoebe + - Willow + - Tilly + - Annie + - Alice + - Holly + - Olive + - Zoey + - Lila + - Pippa + - June + - Mabel + - Nellie + - Polly + - Sadie + - Isla + + # "surnames" + - Bramblewood + - Burrows + - Burrowsford + - Cheesetail + - Cloverfield + - Cloverwood + - Ferncroft + - Flopshire + - Flopshire + - Fluffbottom + - Furrington + - Furwell + - Furwood + - Gnawson + - Linden + - Little + - Maplewood + - Meadows + - Munchford + - Nibblesnout + - Nibbleston + - Nibblewood + - Oakcroft + - Oakley + - Pawsbrook + - Pawsford + - Pawsley + - Pawswell + - Pawsworth + - Scamperdale + - Scamperford + - Scamperley + - Scamperwood + - Scurryfoot + - Scuttleby + - Skitters + - Stilton + - Squeakerton + - Squeakson + - Squeaktooth + - Squeakwell + - Squeakwood + - Tailsbury + - Thumperton + - Thumpford + - Whiskerby + - Whiskerfield + - Whiskershire + - Whiskersnout + - Whiskervale diff --git a/Resources/Prototypes/DeltaV/Detasets/Names/rodentia_last.yml b/Resources/Prototypes/DeltaV/Detasets/Names/rodentia_last.yml new file mode 100644 index 00000000000..13f8d70791d --- /dev/null +++ b/Resources/Prototypes/DeltaV/Detasets/Names/rodentia_last.yml @@ -0,0 +1,92 @@ +# rodentia name scheme is "adjective-trait name", like "long-ears monty" + +- type: dataset + id: names_rodentia_last + values: + - Agile + - Beady-eyed + - Berry-picking + - Big + - Big-ears + - Big-eyed + - Big-heart + - Big-nose + - Blunt-nose + - Brave + - Break-neck + - Bright + - Bright-eyed + - Cheeky + - Crafty + - Cunning + - Curious + - Day-sleeping + - Eager + - Fast-moving + - Fast-paws + - Fat + - Fidgety + - Food-stealing + - Gentle + - Great + - Greedy + - Grumpy + - Hasty + - High-jumping + - Jumpy + - Keen + - Keen-eyes + - Light-foot + - Little + - Long + - Long-ears + - Long-legged + - Long-snout + - Long-tail + - Long-tooth + - Night-hunting + - Nimble + - No-eyes + - No-tail + - Nosy + - Quick-footed + - Quick-wits + - Quiet + - Ravenous + - Ravenous + - Restless + - Rough + - Round-belly + - Rowdy + - Seed-stashing + - Shadow-dwelling + - Sharp + - Sharp-clawed + - Shifty + - Shiny-eyes + - Short-ears + - Short-legged + - Short-snout + - Short-tail + - Shy + - Silent + - Silver-tongue + - Skittish + - Small-ears + - Small-nose + - Sneaky + - Soft-fur + - Soft-paws + - Squeaking + - Squeaky + - Stout + - Stubborn + - Stubby + - Sweet + - Swift + - Thick-fur + - Thick-skin + - Thieving + - Trash-eating + - Tunnel-building + - Whisker-twitching diff --git a/Resources/Prototypes/DeltaV/Detasets/Names/rodentia_male.yml b/Resources/Prototypes/DeltaV/Detasets/Names/rodentia_male.yml new file mode 100644 index 00000000000..35c930feba2 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Detasets/Names/rodentia_male.yml @@ -0,0 +1,177 @@ +- type: dataset + id: names_rodentia_male + values: + # generic names + - Squeaks + - Squeaker + - Nibbles + - Pebbles + - Peanut + - Pinky + - Gadget + - Scurry + - Scamper + - Chitters + - Quill + - Whiskers + - Wiggles + - Button + - Sniffles + - Chip + - Pipsqueak + - Nugget + - Comet + - Dash + - Fudge + - Noodle + - Spud + - Muffin + - Sprout + - Jelly + - Fuzz + - Cheddar + - Tootsie + - Pickle + - Berry + + # gender-neutral + - Alex + - Riley + - Taylor + - Jordan + - Casey + - Avery + - Morgan + - Jamie + - Quinn + - Charlie + - Dakota + - Sydney + - Parker + - Cameron + - Finley + - Robin + - Emery + - Kendall + - Rowan + - Sawyer + - Bailey + - Jaden + - Addison + - Logan + - Devon + - Lane + - Blair + - Drew + - Jesse + - Skylar + - Sam + - Reese + - Terry + - Marley + - Elliot + - Harper + - Jules + - Ren + - Sloane + - Rylan + - Sage + + # masculine names + - Basil + - Jerry + - Stuart + - Bert + - Jack + - Remy + - Geronimo + - Dale + - Flint + - Quincy + - Oliver + - Max + - Leo + - Milo + - Teddy + - Finn + - Jasper + - Simon + - Louie + - Toby + - Henry + - Oscar + - Felix + - George + - Archie + - Hugo + - Benny + - Eli + - Lucas + - Rufus + - Gus + - Alfie + - Monty + - Clyde + - Cosmo + - Ziggy + - Freddie + - Chester + - Harvey + - Rudy + - Ollie + - Percy + - Theo + - Winston + - Ernie + + # "surnames" + - Bramblewood + - Burrows + - Burrowsford + - Cheesetail + - Cloverfield + - Cloverwood + - Ferncroft + - Flopshire + - Flopshire + - Fluffbottom + - Furrington + - Furwell + - Furwood + - Gnawson + - Linden + - Little + - Maplewood + - Meadows + - Munchford + - Nibblesnout + - Nibbleston + - Nibblewood + - Oakcroft + - Oakley + - Pawsbrook + - Pawsford + - Pawsley + - Pawswell + - Pawsworth + - Scamperdale + - Scamperford + - Scamperley + - Scamperwood + - Scurryfoot + - Scuttleby + - Skitters + - Stilton + - Squeakerton + - Squeakson + - Squeaktooth + - Squeakwell + - Squeakwood + - Tailsbury + - Thumperton + - Thumpford + - Whiskerby + - Whiskerfield + - Whiskershire + - Whiskersnout + - Whiskervale diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/rodentia.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/rodentia.yml new file mode 100644 index 00000000000..4d5d8003e66 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/rodentia.yml @@ -0,0 +1,579 @@ +# HEAD + +## DEFAULTS + +- type: marking + id: RodentiaHeadTopEarDefault + markingCategory: HeadTop + bodyPart: HeadTop + speciesRestriction: [] + coloring: + default: + type: !type:TattooColoring + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi + state: mouse + - sprite: DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi + state: mouse_overlay + +- type: marking + id: RodentiaTailDefault + markingCategory: Tail + bodyPart: Tail + speciesRestriction: [] + coloring: + default: + type: !type:TattooColoring + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi + state: mouse + +## EARS + +- type: marking + id: RodentiaHeadTopEarBat + markingCategory: HeadTop + bodyPart: HeadTop + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi + state: bat + +- type: marking + id: RodentiaHeadTopEarBatLarge + markingCategory: HeadTop + bodyPart: HeadTop + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi + state: bat_large + +- type: marking + id: RodentiaHeadTopEarHamster + markingCategory: HeadTop + bodyPart: HeadTop + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi + state: hamster + - sprite: DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi + state: hamster_overlay + +- type: marking + id: RodentiaHeadTopEarLong + markingCategory: HeadTop + bodyPart: HeadTop + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi + state: long + - sprite: DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi + state: long_overlay + +- type: marking + id: RodentiaHeadTopEarMouse + markingCategory: HeadTop + bodyPart: HeadTop + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi + state: mouse + - sprite: DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi + state: mouse_overlay + +- type: marking + id: RodentiaHeadTopEarMouseLarge + markingCategory: HeadTop + bodyPart: HeadTop + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi + state: mouse_large + - sprite: DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi + state: mouse_large_overlay + +- type: marking + id: RodentiaHeadTopEarNone + markingCategory: HeadTop + bodyPart: HeadTop + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi + state: none + +- type: marking + id: RodentiaHeadTopEarPointy + markingCategory: HeadTop + bodyPart: HeadTop + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi + state: pointy + +- type: marking + id: RodentiaHeadTopEarRabbit + markingCategory: HeadTop + bodyPart: HeadTop + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi + state: rabbit + - sprite: DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi + state: rabbit_overlay + +- type: marking + id: RodentiaHeadTopEarSmall + markingCategory: HeadTop + bodyPart: HeadTop + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi + state: small + +## SNOUTS + +- type: marking + id: RodentiaSnoutBat + markingCategory: Snout + bodyPart: Snout + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi + state: bat + - sprite: DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi + state: bat_nose + +- type: marking + id: RodentiaSnoutBatCounter + markingCategory: Snout + bodyPart: Snout + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi + state: bat + - sprite: DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi + state: bat_nose + - sprite: DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi + state: bat_overlay + +- type: marking + id: RodentiaSnoutFlat + markingCategory: Snout + bodyPart: Snout + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi + state: flat + - sprite: DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi + state: flat_nose + +- type: marking + id: RodentiaSnoutFlatCounter + markingCategory: Snout + bodyPart: Snout + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi + state: flat + - sprite: DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi + state: flat_nose + - sprite: DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi + state: flat_overlay + +- type: marking + id: RodentiaSnoutRound + markingCategory: Snout + bodyPart: Snout + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi + state: round + - sprite: DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi + state: round_nose + +- type: marking + id: RodentiaSnoutRoundCounter + markingCategory: Snout + bodyPart: Snout + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi + state: round + - sprite: DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi + state: round_nose + - sprite: DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi + state: round_overlay + +## CHEEKS + +- type: marking + id: RodentiaCheeksRound + markingCategory: HeadSide + bodyPart: HeadSide + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi + state: cheeks + +- type: marking + id: RodentiaCheeksRoundCounter + markingCategory: HeadSide + bodyPart: HeadSide + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi + state: cheeks + - sprite: DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi + state: cheeks_overlay + +- type: marking + id: RodentiaCheeksFluff + markingCategory: HeadSide + bodyPart: HeadSide + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi + state: fluff + +- type: marking + id: RodentiaCheeksFluffCounter + markingCategory: HeadSide + bodyPart: HeadSide + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi + state: fluff + - sprite: DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi + state: fluff_overlay + +- type: marking + id: RodentiaCheeksFluffAlt + markingCategory: HeadSide + bodyPart: HeadSide + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi + state: fluff_alt + +- type: marking + id: RodentiaCheeksFluffAltCounter + markingCategory: HeadSide + bodyPart: HeadSide + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi + state: fluff_alt + - sprite: DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi + state: fluff_alt_overlay + +- type: marking + id: RodentiaCheeksWhiskers + markingCategory: Head # for no-cost markings + bodyPart: HeadTop # for layering + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi + state: whiskers + +# BODY + +## TAIL + +- type: marking + id: RodentiaTailBeaver + markingCategory: Tail + bodyPart: Tail + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi + state: beaver + +- type: marking + id: RodentiaTailHamster + markingCategory: Tail + bodyPart: Tail + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi + state: hamster + +- type: marking + id: RodentiaTailLong + markingCategory: Tail + bodyPart: Tail + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi + state: long + +- type: marking + id: RodentiaTailLongCounter + markingCategory: Tail + bodyPart: Tail + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi + state: long + - sprite: DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi + state: long_overlay + +- type: marking + id: RodentiaTailLongCounterTip + markingCategory: Tail + bodyPart: Tail + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi + state: long + - sprite: DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi + state: long_overlay + - sprite: DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi + state: long_tip + +- type: marking + id: RodentiaTailMouse + markingCategory: Tail + bodyPart: Tail + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi + state: mouse + +- type: marking + id: RodentiaTailRabbit + markingCategory: Tail + bodyPart: Tail + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi + state: rabbit + +- type: marking + id: RodentiaTailRabbitCounter + markingCategory: Tail + bodyPart: Tail + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi + state: rabbit + - sprite: DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi + state: rabbit_overlay + +- type: marking + id: RodentiaTailShort + markingCategory: Tail + bodyPart: Tail + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi + state: short + +- type: marking + id: RodentiaTailSquirrel + markingCategory: Tail + bodyPart: Tail + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi + state: squirrel + +- type: marking + id: RodentiaTailSquirrelBicolor + markingCategory: Tail + bodyPart: Tail + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi + state: squirrel + - sprite: DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi + state: squirrel_overlay + +## PATTERNS + +- type: marking + id: RodentiaChestCountershade + markingCategory: Chest + bodyPart: Chest + speciesRestriction: [Rodentia] + sexRestriction: Male + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/body_markings.rsi + state: countershade + +- type: marking + id: RodentiaChestCountershadeF + markingCategory: Chest + bodyPart: Chest + speciesRestriction: [Rodentia] + sexRestriction: Female + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/body_markings.rsi + state: countershade_f + +- type: marking + id: RodentiaLegLeftCountershade + markingCategory: Legs + bodyPart: LLeg + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: l_leg + - sprite: DeltaV/Mobs/Customization/Rodentia/body_markings.rsi + state: countershade_lleg + +- type: marking + id: RodentiaLegRightCountershade + markingCategory: Legs + bodyPart: RLeg + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: r_leg + - sprite: DeltaV/Mobs/Customization/Rodentia/body_markings.rsi + state: countershade_rleg + +- type: marking + id: RodentiaChestFawn + markingCategory: Chest + bodyPart: Chest + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/body_markings.rsi + state: fawn + +- type: marking + id: RodentiaChestHooded + markingCategory: Chest + bodyPart: Chest + speciesRestriction: [Rodentia] + sexRestriction: Male + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/body_markings.rsi + state: hooded + +- type: marking + id: RodentiaChestHoodedF + markingCategory: Chest + bodyPart: Chest + speciesRestriction: [Rodentia] + sexRestriction: Female + sprites: + - sprite: DeltaV/Mobs/Customization/Rodentia/body_markings.rsi + state: hooded_f + +### HEAD PATTERNS + +- type: marking + id: RodentiaHeadBlaze + markingCategory: Head + bodyPart: Head + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: head_m + - sprite: DeltaV/Mobs/Customization/Rodentia/head_markings.rsi + state: blaze + +- type: marking + id: RodentiaHeadRound + markingCategory: Head + bodyPart: Head + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: head_m + - sprite: DeltaV/Mobs/Customization/Rodentia/head_markings.rsi + state: round + +# BASE BODY PARTS + +## HEAD + +- type: marking + id: RodentiaHeadBasic + markingCategory: Head + bodyPart: Head + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: head_m + +## ARMS + +- type: marking + id: RodentiaArmLeftBasic + markingCategory: Arms + bodyPart: LArm + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: l_arm + +- type: marking + id: RodentiaArmRightBasic + markingCategory: Arms + bodyPart: RArm + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: r_arm + +## LEGS + +- type: marking + id: RodentiaLegLeftBasic + markingCategory: Legs + bodyPart: LLeg + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: l_leg + +- type: marking + id: RodentiaLegRightBasic + markingCategory: Legs + bodyPart: RLeg + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: r_leg + +## HANDS + +- type: marking + id: RodentiaHandLeftBasic + markingCategory: Arms + bodyPart: LHand + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: l_hand + +- type: marking + id: RodentiaHandRightBasic + markingCategory: Arms + bodyPart: RHand + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: r_hand + +## FEET + +- type: marking + id: RodentiaFootLeftBasic + markingCategory: Legs + bodyPart: LFoot + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: l_foot + +- type: marking + id: RodentiaFootRightBasic + markingCategory: Legs + bodyPart: RFoot + speciesRestriction: [Rodentia] + sprites: + - sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: r_foot diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Player/rodentia.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Player/rodentia.yml new file mode 100644 index 00000000000..f1a0ee3e308 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Player/rodentia.yml @@ -0,0 +1,5 @@ +- type: entity + save: false + name: Urist McRat + parent: BaseMobRodentia + id: MobRodentia diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml new file mode 100644 index 00000000000..c80cbebe42a --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml @@ -0,0 +1,126 @@ +- type: entity + save: false + name: Urist McRat + parent: BaseMobSpeciesOrganic + id: BaseMobRodentia + abstract: true + components: + - type: HumanoidAppearance + species: Rodentia + - type: Hunger + baseDecayRate: 0.0467 # 33% faster than usual + - type: Carriable # Carrying system from nyanotrasen. + - type: Inventory + speciesId: rodentia + - type: Icon + sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: full + - type: Body + prototype: Rodentia + - type: Speech + speechVerb: Rodentia + speechSounds: Squeak + allowedEmotes: ['Squeak'] + - type: Fixtures + fixtures: # TODO: This needs a second fixture just for mob collisions. + fix1: + shape: + !type:PhysShapeCircle + radius: 0.28 + density: 140 + restitution: 0.0 + mask: + - MobMask + layer: + - MobLayer + - type: Sprite + scale: 0.8, 0.8 + layers: + - map: [ "enum.HumanoidVisualLayers.Chest" ] + - map: [ "enum.HumanoidVisualLayers.Head" ] + - map: [ "enum.HumanoidVisualLayers.Snout" ] + - map: [ "enum.HumanoidVisualLayers.Eyes" ] + - map: [ "enum.HumanoidVisualLayers.RArm" ] + - map: [ "enum.HumanoidVisualLayers.LArm" ] + - map: [ "enum.HumanoidVisualLayers.RLeg" ] + - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - map: [ "jumpsuit" ] + - map: [ "enum.HumanoidVisualLayers.LHand" ] + - map: [ "enum.HumanoidVisualLayers.RHand" ] + - map: [ "enum.HumanoidVisualLayers.LFoot" ] + - map: [ "enum.HumanoidVisualLayers.RFoot" ] + - map: [ "enum.HumanoidVisualLayers.Handcuffs" ] + color: "#ffffff" + sprite: Objects/Misc/handcuffs.rsi + state: body-overlay-2 + visible: false + - map: [ "id" ] + - map: [ "gloves" ] + - map: [ "shoes" ] + - map: [ "ears" ] + - map: [ "outerClothing" ] + - map: [ "eyes" ] + - map: [ "belt" ] + - map: [ "neck" ] + - map: [ "back" ] + - map: [ "enum.HumanoidVisualLayers.FacialHair" ] + - map: [ "enum.HumanoidVisualLayers.Hair" ] + - map: [ "enum.HumanoidVisualLayers.HeadSide" ] + - map: [ "enum.HumanoidVisualLayers.HeadTop" ] + - map: [ "enum.HumanoidVisualLayers.Tail" ] + - map: [ "mask" ] + - map: [ "head" ] + - map: [ "pocket1" ] + - map: [ "pocket2" ] + - map: [ "clownedon" ] # Dynamically generated + sprite: "DeltaV/Effects/creampie.rsi" + state: "creampie_rodentia" + visible: false + - type: MeleeWeapon + soundHit: + path: /Audio/Weapons/pierce.ogg + angle: 30 + animation: WeaponArcClaw + damage: + types: + Blunt: 2 + Slash: 3 + - type: Damageable + damageModifierSet: Rodentia + - type: Butcherable + spawned: + - id: FoodMeatRat + amount: 5 + - type: TypingIndicator + proto: rodentia + - type: Vocal + sounds: + Male: MaleRodentia + Female: FemaleRodentia + Unsexed: MaleRodentia + - type: Rummager + - type: AlwaysTriggerMousetrap + - type: PseudoItem + storedOffset: -10,0 + shape: + - 0, 0, 3, 2 + - 0, 2, 5, 4 + - type: MouthStorage + mouthProto: CheekStorage + openStorageAction: ActionOpenMouthStorage + spitDamageThreshold: 3 + - type: CrawlUnderObjects + actionProto: ActionToggleSneakMode + +- type: entity + save: false + name: Rodentia Dummy + parent: MobHumanDummy + id: MobRodentiaDummy + noSpawn: true + description: A dummy rodentia meant to be used in character setup. + components: + - type: HumanoidAppearance + species: Rodentia + - type: Inventory + speciesId: rodentia diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Misc/mouth_storage.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/mouth_storage.yml new file mode 100644 index 00000000000..78ccec5b983 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/mouth_storage.yml @@ -0,0 +1,24 @@ +- type: entity + id: CheekStorage + name: cheek storage + description: The cheeks of an animal, capable of storing small objects. + noSpawn: true + components: + - type: Storage + clickInsert: false + grid: + - 0,0,1,1 + maxItemSize: Small + blacklist: + components: + - Sharp + - MindContainer + - type: ContainerContainer + containers: + storagebase: !type:Container + ents: [ ] + - type: UserInterface + interfaces: + enum.StorageUiKey.Key: + type: StorageBoundUserInterface + - type: Dumpable diff --git a/Resources/Prototypes/DeltaV/Guidebook/species.yml b/Resources/Prototypes/DeltaV/Guidebook/species.yml index 627e6e4f4d4..f790970bcc8 100644 --- a/Resources/Prototypes/DeltaV/Guidebook/species.yml +++ b/Resources/Prototypes/DeltaV/Guidebook/species.yml @@ -17,3 +17,8 @@ id: Oni name: species-name-oni text: "/ServerInfo/Guidebook/Mobs/DeltaV/Oni.xml" + +- type: guideEntry + id: Rodentia + name: species-name-rodentia + text: "/ServerInfo/Guidebook/Mobs/DeltaV/Rodentia.xml" diff --git a/Resources/Prototypes/DeltaV/Species/rodentia.yml b/Resources/Prototypes/DeltaV/Species/rodentia.yml new file mode 100644 index 00000000000..4916af1fe7d --- /dev/null +++ b/Resources/Prototypes/DeltaV/Species/rodentia.yml @@ -0,0 +1,152 @@ +- type: species + id: Rodentia + name: species-name-rodentia + roundStart: true + prototype: MobRodentia + sprites: MobRodentiaSprites + defaultSkinTone: "#747474" + markingLimits: MobRodentiaMarkingLimits + dollPrototype: MobRodentiaDummy + skinColoration: Hues + maleFirstNames: names_rodentia_male + femaleFirstNames: names_rodentia_female + lastNames: names_rodentia_last + naming: LastFirst + +- type: speciesBaseSprites + id: MobRodentiaSprites + sprites: + Head: MobRodentiaHead + Hair: MobHumanoidAnyMarking + FacialHair: MobHumanoidAnyMarking + Snout: MobHumanoidAnyMarking + Chest: MobRodentiaTorso + HeadTop: MobHumanoidAnyMarking + HeadSide: MobHumanoidAnyMarking + Tail: MobHumanoidAnyMarking + Eyes: MobHumanoidEyes + LArm: MobRodentiaLArm + RArm: MobRodentiaRArm + LHand: MobRodentiaLHand + RHand: MobRodentiaRHand + LLeg: MobRodentiaLLeg + RLeg: MobRodentiaRLeg + LFoot: MobRodentiaLFoot + RFoot: MobRodentiaRFoot + +- type: markingPoints + id: MobRodentiaMarkingLimits + points: + Hair: + points: 1 + required: false + FacialHair: + points: 1 + required: false + Tail: + points: 1 + required: true + defaultMarkings: [ RodentiaTailDefault ] + Legs: + points: 4 + required: false + Arms: + points: 4 + required: false + Snout: + points: 1 + required: false + HeadTop: + points: 1 + required: true + defaultMarkings: [ RodentiaHeadTopEarDefault ] + HeadSide: + points: 1 + required: false + Chest: + points: 2 + required: false + +- type: humanoidBaseSprite + id: MobRodentiaHead + baseSprite: + sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobRodentiaHeadMale + baseSprite: + sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobRodentiaHeadFemale + baseSprite: + sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: head_f + +- type: humanoidBaseSprite + id: MobRodentiaTorso + baseSprite: + sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobRodentiaTorsoMale + baseSprite: + sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobRodentiaTorsoFemale + baseSprite: + sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: torso_f + +- type: humanoidBaseSprite + id: MobRodentiaLLeg + baseSprite: + sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: l_leg + +- type: humanoidBaseSprite + id: MobRodentiaLHand + baseSprite: + sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: l_hand + +- type: humanoidBaseSprite + id: MobRodentiaLArm + baseSprite: + sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: l_arm + +- type: humanoidBaseSprite + id: MobRodentiaLFoot + baseSprite: + sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: l_foot + +- type: humanoidBaseSprite + id: MobRodentiaRLeg + baseSprite: + sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: r_leg + +- type: humanoidBaseSprite + id: MobRodentiaRHand + baseSprite: + sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: r_hand + +- type: humanoidBaseSprite + id: MobRodentiaRArm + baseSprite: + sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: r_arm + +- type: humanoidBaseSprite + id: MobRodentiaRFoot + baseSprite: + sprite: DeltaV/Mobs/Species/Rodentia/parts.rsi + state: r_foot diff --git a/Resources/Prototypes/DeltaV/Voice/speech_emote_sounds.yml b/Resources/Prototypes/DeltaV/Voice/speech_emote_sounds.yml index fede51cb568..a89d1bc7529 100644 --- a/Resources/Prototypes/DeltaV/Voice/speech_emote_sounds.yml +++ b/Resources/Prototypes/DeltaV/Voice/speech_emote_sounds.yml @@ -160,7 +160,85 @@ collection: VulpkaninHowls Awoo: collection: VulpkaninHowls - Gasp: - collection: FemaleGasp - DefaultDeathgasp: - collection: FemaleDeathGasp + +- type: emoteSounds + id: MobDog + params: + variation: 0.125 + sounds: + Growl: + collection: VulpkaninGrowls + Snarl: + collection: VulpkaninSnarls + Bark: + collection: VulpkaninBarks + Whine: + collection: VulpkaninWhines + Howl: + collection: VulpkaninHowls + Awoo: + collection: VulpkaninHowls + +- type: emoteSounds + id: MaleRodentia + params: + variation: 0.125 + sounds: + Scream: + path: /Audio/Animals/mouse_squeak.ogg + Laugh: + collection: MaleLaugh + Sneeze: + collection: MaleSneezes + Cough: + collection: MaleCoughs + Yawn: + collection: MaleYawn + Snore: + collection: Snores + Honk: + collection: BikeHorn + Sigh: + collection: MaleSigh + Crying: + collection: MaleCry + Whistle: + collection: Whistles + Weh: + collection: Weh + Squeak: + path: /Audio/Animals/mouse_squeak.ogg + Belch: # Frontier + collection: Belch # Frontier + +- type: emoteSounds + id: FemaleRodentia + params: + variation: 0.125 + sounds: + Scream: + path: /Audio/Animals/mouse_squeak.ogg + Laugh: + collection: FemaleLaugh + Sneeze: + collection: FemaleSneezes + Cough: + collection: FemaleCoughs + Yawn: + collection: FemaleYawn + Snore: + collection: Snores + Honk: + collection: CluwneHorn + Sigh: + collection: FemaleSigh + Crying: + collection: FemaleCry + Whistle: + collection: Whistles + Weh: + collection: Weh + Squeak: + path: /Audio/Animals/mouse_squeak.ogg + Belch: # Frontier + collection: Belch # Frontier diff --git a/Resources/Prototypes/DeltaV/Voice/speech_verbs.yml b/Resources/Prototypes/DeltaV/Voice/speech_verbs.yml index a0de46a60aa..f13ce6d669f 100644 --- a/Resources/Prototypes/DeltaV/Voice/speech_verbs.yml +++ b/Resources/Prototypes/DeltaV/Voice/speech_verbs.yml @@ -25,3 +25,12 @@ - chat-speech-verb-harpy-2 - chat-speech-verb-harpy-3 - chat-speech-verb-harpy-4 + +- type: speechVerb + id: Rodentia + name: chat-speech-verb-name-rodentia + speechVerbStrings: + - chat-speech-verb-rodentia-1 + - chat-speech-verb-rodentia-2 + - chat-speech-verb-rodentia-3 + - chat-speech-verb-rodentia-4 diff --git a/Resources/Prototypes/DeltaV/typing_indicator.yml b/Resources/Prototypes/DeltaV/typing_indicator.yml index a3fc2fbcfb9..bce9d46c4b3 100644 --- a/Resources/Prototypes/DeltaV/typing_indicator.yml +++ b/Resources/Prototypes/DeltaV/typing_indicator.yml @@ -3,3 +3,10 @@ spritePath: /Textures/DeltaV/Effects/speech.rsi typingState: felinid0 offset: 0, 0.2 # 0625 + +- type: typingIndicator + id: rodentia + spritePath: /Textures/DeltaV/Effects/speech.rsi + typingState: rodentia0 + offset: 0, 0.2 # 0625 + diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml index 88d1fddfd28..34ab77e61a0 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml @@ -2,7 +2,7 @@ id: GauzeLefteyePatch bodyPart: Eyes markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Arachnid, Goblin, Felinid, Oni] # Frontier: added Felinid, Oni, Goblin + speciesRestriction: [Dwarf, Human, Arachnid, Goblin, Felinid, Oni, Vulpkanin, Rodentia] # Delta V - Felinid, Oni, Vulpkanin, Rodentia coloring: default: type: @@ -16,7 +16,7 @@ id: GauzeLefteyePad bodyPart: Eyes markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Goblin, Felinid, Oni] # Frontier: added Felinid, Oni, Goblin + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Goblin, Felinid, Oni, Vulpkanin, Rodentia] # Delta V - Felinid, Oni, Vulpkanin, Rodentia coloring: default: type: @@ -30,7 +30,7 @@ id: GauzeRighteyePatch bodyPart: Eyes markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Arachnid, Goblin, Felinid, Oni] # Frontier: added Felinid, Oni, Goblin + speciesRestriction: [Dwarf, Human, Arachnid, Goblin, Felinid, Oni, Vulpkanin, Rodentia] # Delta V - Felinid, Oni, Vulpkanin, Rodentia coloring: default: type: @@ -44,7 +44,7 @@ id: GauzeRighteyePad bodyPart: Eyes markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Goblin, Felinid, Oni] # Frontier: added Felinid, Oni, Goblin + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Goblin, Felinid, Oni, Vulpkanin, Rodentia] # Delta V - Felinid, Oni, Vulpkanin, Rodentia coloring: default: type: @@ -58,7 +58,7 @@ id: GauzeBlindfold bodyPart: Eyes markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Arachnid, Goblin, Felinid, Oni] # Frontier: added Felinid, Oni, Goblin + speciesRestriction: [Dwarf, Human, Arachnid, Goblin, Felinid, Oni, Harpy, Vulpkanin, Rodentia] # Delta V - Felinid, Oni, Harpy, Vulpkanin, Rodentia coloring: default: type: @@ -72,7 +72,7 @@ id: GauzeShoulder bodyPart: Chest markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Goblin, Felinid, Oni] # Frontier: added Felinid, Oni, Goblin + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Goblin, Felinid, Oni, Vulpkanin, Rodentia] # Delta V - Felinid, Oni, Vulpkanin, Rodentia coloring: default: type: @@ -86,7 +86,7 @@ id: GauzeStomach bodyPart: Chest markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Goblin, Felinid, Oni] # Frontier: added Felinid, Oni, Goblin + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Goblin, Felinid, Oni, Vulpkanin, Rodentia] # Delta V - Felinid, Oni, Vulpkanin, Rodentia coloring: default: type: @@ -100,7 +100,7 @@ id: GauzeUpperArmRight bodyPart: RArm markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Goblin, Felinid, Oni] # Frontier: added Felinid, Oni, Goblin + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Goblin, SlimePerson, Felinid, Oni, Vulpkanin, Rodentia] # Delta V - Felinid, Oni, Vulpkanin, Rodentia coloring: default: type: @@ -114,7 +114,7 @@ id: GauzeLowerArmRight bodyPart: RArm, RHand markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Goblin, Felinid, Oni] # Frontier: added Felinid, Oni, Goblin + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Goblin, SlimePerson, Felinid, Oni, Vulpkanin, Rodentia] # Delta V - Felinid, Oni, Vulpkanin, Rodentia coloring: default: type: @@ -128,7 +128,7 @@ id: GauzeLeftArm bodyPart: LArm, LHand markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Goblin, Felinid, Oni] # Frontier: added Felinid, Oni, Goblin + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Goblin, Felinid, Oni, Vulpkanin, Rodentia] # Delta V - Felinid, Oni, Vulpkanin, Rodentia coloring: default: type: @@ -142,7 +142,7 @@ id: GauzeLowerLegLeft bodyPart: LFoot markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Arachnid, Goblin, Felinid, Oni] # Frontier: added Felinid, Oni, Goblin + speciesRestriction: [Dwarf, Human, Arachnid, Goblin, Felinid, Oni, Vulpkanin, Rodentia] # Delta V - Felinid, Oni, Vulpkanin, Rodentia coloring: default: type: @@ -156,7 +156,7 @@ id: GauzeUpperLegLeft bodyPart: LLeg markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Goblin, Felinid, Oni] # Frontier: added Felinid, Oni, Goblin + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Goblin, Felinid, Oni, Vulpkanin, Rodentia] # Delta V - Felinid, Oni, Vulpkanin, Rodentia coloring: default: type: @@ -170,7 +170,7 @@ id: GauzeUpperLegRight bodyPart: RLeg markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Goblin, Felinid, Oni] # Frontier: added Felinid, Oni, Goblin + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Goblin, Felinid, Oni, Vulpkanin, Rodentia] # Delta V - Felinid, Oni, Vulpkanin, Rodentia coloring: default: type: @@ -184,7 +184,7 @@ id: GauzeLowerLegRight bodyPart: RFoot markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Arachnid, Goblin, Felinid, Oni] # Frontier: added Felinid, Oni, Goblin + speciesRestriction: [Dwarf, Human, Arachnid, Goblin, Felinid, Oni, Vulpkanin, Rodentia] # Delta V - Felinid, Oni, Vulpkanin, Rodentia coloring: default: type: @@ -198,7 +198,7 @@ id: GauzeBoxerWrapRight bodyPart: RHand markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Goblin, Felinid, Oni] # Frontier: added Felinid, Oni, Goblin + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Goblin, Felinid, Oni, Vulpkanin, Rodentia] # Delta V - Felinid, Oni, Vulpkanin, Rodentia coloring: default: type: @@ -212,7 +212,7 @@ id: GauzeBoxerWrapLeft bodyPart: LHand markingCategory: Overlay - speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Goblin, Felinid, Oni] # Frontier: added Felinid, Oni, Goblin + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Goblin, Felinid, Oni, Vulpkanin, Rodentia] # Delta V - Felinid, Oni, Vulpkanin, Rodentia coloring: default: type: diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/scars.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/scars.yml index b9d48dac265..b03dcd42d1b 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/scars.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/scars.yml @@ -2,7 +2,7 @@ id: ScarEyeRight bodyPart: Head markingCategory: Head - speciesRestriction: [Human, Dwarf, Goblin, Felinid, Oni] # Frontier: added Felinid, Oni, Goblin + speciesRestriction: [Human, Dwarf, Goblin, Felinid, Oni, Rodentia] # Frontier: added Felinid, Oni, Goblin, Rodentia followSkinColor: true sprites: - sprite: Mobs/Customization/scars.rsi @@ -12,7 +12,7 @@ id: ScarEyeLeft bodyPart: Head markingCategory: Head - speciesRestriction: [Human, Dwarf, Goblin, Felinid, Oni] # Frontier: added Felinid, Oni, Goblin + speciesRestriction: [Human, Dwarf, Goblin, Felinid, Oni, Rodentia] # Frontier: added Felinid, Oni, Goblin, Rodentia followSkinColor: true sprites: - sprite: Mobs/Customization/scars.rsi diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml index a274d24154f..515c1ff323f 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml @@ -114,7 +114,7 @@ id: TattooEyeRight bodyPart: Eyes markingCategory: Head - speciesRestriction: [Human, SlimePerson, Reptilian, Dwarf, Goblin, Felinid, Vulpkanin, Oni, Harpy] # Delta V - Felinid, Vulpkanin, Oni, Harpy + speciesRestriction: [Human, SlimePerson, Reptilian, Dwarf, Goblin, Felinid, Vulpkanin, Oni, Harpy, Rodentia] # Delta V - Felinid, Vulpkanin, Oni, Harpy coloring: default: type: @@ -128,7 +128,7 @@ id: TattooEyeLeft bodyPart: Eyes markingCategory: Head - speciesRestriction: [Human, SlimePerson, Reptilian, Dwarf, Goblin, Felinid, Vulpkanin, Oni, Harpy] # Delta V - Felinid, Vulpkanin, Oni, Harpy + speciesRestriction: [Human, SlimePerson, Reptilian, Dwarf, Goblin, Felinid, Vulpkanin, Oni, Harpy, Rodentia] # Delta V - Felinid, Vulpkanin, Oni, Harpy coloring: default: type: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml index 51f717381d2..6de02c4fb4a 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml @@ -102,6 +102,7 @@ - type: RatKing hungerPerArmyUse: 25 hungerPerDomainUse: 50 + - type: Rummager # DeltaV: Make rummaging a generic component - type: MobsterAccent - type: Speech speechVerb: SmallMob @@ -294,10 +295,11 @@ - type: weightedRandomEntity id: RatKingLoot - weights: - RandomSpawner100: 66 #garbage - FoodCheese: 28 #food - IngotGold1: 5 #loot + weights: # DeltaV: Rebalanced for Rodentia rummaging because we don't have Rat King + RandomSpawner100: 70 #garbage + FoodCheeseSlice: 15 #food + RandomSnacks: 10 + RandomFoodSingle: 5 - type: entity id: ActionRatKingRaiseArmy diff --git a/Resources/Prototypes/Guidebook/species.yml b/Resources/Prototypes/Guidebook/species.yml index a8f74f800bf..81f0a65993f 100644 --- a/Resources/Prototypes/Guidebook/species.yml +++ b/Resources/Prototypes/Guidebook/species.yml @@ -6,16 +6,17 @@ - Arachnid - Diona - Dwarf - - Goblin # Frontier - Human - Moth - Reptilian - SlimePerson - Vox + - Goblin # Frontier - Vulpkanin # DeltaV - Harpy # DeltaV - Felinid # DeltaV - Oni # DeltaV + - Rodentia # DeltaV - type: guideEntry id: Arachnid diff --git a/Resources/Prototypes/Nyanotrasen/metempsychoticHumanoids.yml b/Resources/Prototypes/Nyanotrasen/metempsychoticHumanoids.yml new file mode 100644 index 00000000000..a4d96c109e8 --- /dev/null +++ b/Resources/Prototypes/Nyanotrasen/metempsychoticHumanoids.yml @@ -0,0 +1,14 @@ +- type: weightedRandom + id: MetempsychoticHumanoidPool # Species prototypes + weights: + Human: 1 + Felinid: 1 + Oni: 1 + Arachnid: 1 + Harpy: 1 + Moth: 1 + Diona: 0.5 + Reptilian: 0.5 + SlimePerson: 0.5 + Vulpkanin: 0.5 + Rodentia: 0.5 diff --git a/Resources/Prototypes/Species/species_weights.yml b/Resources/Prototypes/Species/species_weights.yml index a147fbe2d4f..b19f0eefe4f 100644 --- a/Resources/Prototypes/Species/species_weights.yml +++ b/Resources/Prototypes/Species/species_weights.yml @@ -6,11 +6,12 @@ Reptilian: 4 SlimePerson: 4 Moth: 3 - Felinid: 3 - Vulpkanin: 3 + Felinid: 3 # Frontier + Vulpkanin: 3 # Frontier Arachnid: 3 - Oni: 2 + Oni: 2 # Frontier Dwarf: 2 Diona: 2 - Goblin: 2 - Harpy: 1 + Rodentia: 2 # DeltaV - Rodentia, see Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml + Goblin: 2 # Frontier + Harpy: 1 # Frontier diff --git a/Resources/ServerInfo/Guidebook/Mobs/DeltaV/Rodentia.xml b/Resources/ServerInfo/Guidebook/Mobs/DeltaV/Rodentia.xml new file mode 100644 index 00000000000..7c1f8bde141 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/Mobs/DeltaV/Rodentia.xml @@ -0,0 +1,33 @@ + + # Rodentia + + + + + + Rodentia are a race of humanoid beings resembling rodents. Resourceful, evasive, sneaky, but fragile. + + ## Diet + + - Can eat raw meat. + - Will get poisoned by Theobromine (Chocolate, Tea, Coffee) and Allicin (Onion, Garlic). + + ## Benefits + + - Uses their claws to do some Slashing and Blunt damage. + - Smaller than humans. + - Can fit in duffelbags. + + ## Special + + - Can Rummage in disposal chutes, which can sometimes dig up food. + - Can store small items in their cheeks. Having items in their mouth makes their speech unintelligible, and they will drop all items in their mouth if attacked, stunned, or shoved. + - Can "sneak" underneath tables, but not doors. + + ## Drawbacks + + - Takes 30% more Blunt damage, and 15% more Slash and Piercing damage. + - Always triggers mousetraps, regardless of whether or not they are wearing shoes. + - Gets hungry 33% faster. + + diff --git a/Resources/ServerInfo/Guidebook/Mobs/Species.xml b/Resources/ServerInfo/Guidebook/Mobs/Species.xml index e270175c8ef..8eb44abe310 100644 --- a/Resources/ServerInfo/Guidebook/Mobs/Species.xml +++ b/Resources/ServerInfo/Guidebook/Mobs/Species.xml @@ -26,6 +26,7 @@ + diff --git a/Resources/Textures/DeltaV/Effects/creampie.rsi/creampie_rodentia.png b/Resources/Textures/DeltaV/Effects/creampie.rsi/creampie_rodentia.png new file mode 100644 index 0000000000000000000000000000000000000000..6b275ef411fbc803a84680a614a705bc1a26a5e4 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z{y&)Z`OdTt7mIH!RtJjdF24T@NU@d#`33(60*2q)_=14~oCO|{ z#S9F5he4R}c>anMpx_2i7srqY_qS6Wg^nn2un7M6KU+K~Bz0=1>h9?>FJu-Om6?cp z{C`r)Bo+F2j=EfoiBI8e`&Di4xBRFx_Bhi&gXKsP|6iQ|HEV{#Gv{XL*ZggkkT>FP z+4+q4Tx04UFukvU5PQ51zg6E|Wcg%%PlQm9xch=N#31Z|>462YyRnQTIqVP=8^ zTfxR6U?JML75)Ql1zQC{Py`W6Yqv&Zye|nPh!(!#&HXrU&gH%{;E807oZUPLxx8aV zXTqU{#idZ&Gah^dXeFo_wmBP{j`QdGxTQ(en_<<9|E-Qh(l(%}U3lCuEk{_UA+qL} zinoNjjf|EMJ`f(VWI*9drR!CGQk<^xn_?>-oszq$o}qLD>kVvVteo(ma9=K4G-~sx zoA{IY`Iyw8>|Si5%n&AoPLWlzI1Ee8OJ=|OMk>BJ3gR*3ZBoJ#N1BXyheRz(*QC^x z=t+69lvM6N^R!cAqt)*IFtj|n?rT4^ZNpdDbw3YX_v;9}4{)BZ`wNoO#JlL_y4JT3 zfekplsB8KToNYqSy{TDRMe@q_q*Cy50-cM{bq&7dYF4##j_)A8F2CpscK2XFz7MQ? z1JOBW^w>}-VE_OC32;bRa{vGf5dZ)S5dnW>Uy%R+0X<1XK~#8N?b^|8!!Qg*QMXH_ z19)r?;A~YrK{RAp(U(L5!99RM_a{#!*#v03RnBrn3CaH{^*oLv-|YLY@|S<`6PEv5 zYRjh4n~KMj-12W5pzhlwYSmN}Ue{T|@~r`Ktzl2InzI`qA^G+vpcjl3mahin&X2mk z*eyRz`ju~-e0mccS+V|?)QESv{bXwX<72R=^CmP~SiTxyFRFS|t)OV0002Mmumm}>MbOn=L1S@*))1n@tBfZKFc@vhOHy~a1 z;y2Y=s;p{2bpDVgqtN4Tx04UFukvmHRK@^2QqY}|*3N1t|Qm9xch=OP*5lj;;Vgz5!W|B>WJeJ)A z3ATcbMZiL|@m2T_v=wX>1VIr*EUkSt64pCLNDwWYW%hoY*>kyb7Chm!$~X-Zkjdul zNGKSXUsw!ypYYI(k2b~)E%xdOfIn@xRp)PdEzdnuJG{W#@%u8p5l2 zOY^31he{c7;eFu&TLu)q(0Z)GkD8Mee${M8Ba?DB-7}D^;aCl;l${ao7w*ZV3+j6w zeG^|IJ2xw}OLjL75kdqB5Tn2fY4Qw8%}Qp!`-Z-JGvvgh$^ndrT9akD+w|+OME_sgl+AIY+k;U6WsQ2|K&cC*S** zKLH;QXc(2}e-How010qNS#tmY3lRVS3lRZ-WM7d0005pzL_t(oNA1(W4S*mJ1VFSY zEr7Bq0K3v9Y;q{-L*V01VorT{$AZp?`5J1rk<~D&|?hfITX7R)2 zH>{}~!e%f4KU$mv;7~mWc!Oln)DCwUw7206MMOkI4Tx04UFukvmHRK@^2QqY}|*3N1t|Qm9xch=OP*5lj;;Vgz5!W|B>WJeJ)A z3ATcbMZiL|@m2T_v=wX>1VIr*EUkSt64pCLNDwWYW%hoY*>kyb7Chm!$~X-Zkjdul zNGKSXUsw!ypYYI(k2b~)E%xdOfIn@xRp)PdEzdnuJG{W#@%u8p5l2 zOY^31he{c7;eFu&TLu)q(0Z)GkD8Mee${M8Ba?DB-7}D^;aCl;l${ao7w*ZV3+j6w zeG^|IJ2xw}OLjL75kdqB5Tn2fY4Qw8%}Qp!`-Z-JGvvgh$^ndrT9akD+w|+OME_sgl+AIY+k;U6WsQ2|K&cC*S** zKLH;QXc(2}e-How010qNS#tmY3lRVS3lRZ-WM7d0005RrL_t(oNA1(w4S*mF1yFP; z8Gx}FfU%^cHRTbFvGC(Pi2?nv^%k9y_*!b?HN_aqCWJtXFERSD47 zOA?w&g^KI-GfBX=#q<5aTX}9)RFeiwV|{~0a2>!q&EYg3K}V0EVLFQLHyjxpLNjFq z`I47cq^X$=JfUQ$sBW%nbhhOM0RR91;7^=80ib&_+yt5p1ONa407*qoM6N<$f)5`7 AZ2$lO literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Interface/Actions/mouthStorageOpen.png b/Resources/Textures/DeltaV/Interface/Actions/mouthStorageOpen.png new file mode 100644 index 0000000000000000000000000000000000000000..a3f6b83f0a1f0e61bb18100ba731fd2344f6d155 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCikt0(?STeO%q@>+9V-)1u>Qs_W(fh1aced<~@7N`m}?|APR-=KV|d14TFs zJR*x382Ao>Fr%o3R|8ORzNd?0h=u>w$$@-F6gXG|PyJoL$Hrx8*en0?No-R)1B5*J zCInPEUJhEZETHkhY~A_XXP)p18Y-_l#LBusuke$AUMPc@MP#+Zp^bn190c!7;F`PF zpm*B;_JG&A@-1c-EqfpQPi1UAB+1dlyTQLgz}w;C`LgE9=4Sy_rb+xB?cb!#59)7p xQJk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x?%lih`}gk`E?ju=;>Dsxi-5x78>*K9DYlXzzu^BMz_5A$lKnst z&H|6fVg?4j!ywFfJby(BQ1G6oi(^QH``c;Jd`A>G7#P3)3y%xPSrrz(y>15YidKmJ_rfVaJZq%5Me6zUs*_S(Y9whxMh@%x!(@H!!j?XY0tMa1>y}{58N50Q~0)+ z?7MTsq;=72?b)oEoVR8@-XLjVCZKb7anysSW*OOiP7j{49l36k&0TkZMNPmbf$58?t6NPB^)^qk}ntpb9dbFc+g>T<_eR&9{;WLZ`JgYn(PHyJ}~Yz@qKR6zEB0| OQwC30KbLh*2~7Yum6BEf literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/body_markings.rsi/countershade_f.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/body_markings.rsi/countershade_f.png new file mode 100644 index 0000000000000000000000000000000000000000..8485bd78fb29c89852de9e1cf7c132e2c3687649 GIT binary patch literal 397 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x?%lih`}gk`E?ju=;zfOZJy2N2d);p!#a0sJ7yKUt7&h-;vL7hI zS>O>_%)r2R2!t6$HM|;tf}cEH977`9-%exXJFLLL!20t4ew%_Dp_!f6)S|`o43GM* z3-eXU?QT(EIdr*cN?PyP3I-RJ3-=`49oZT#ZLvS%=rH5H!b^Q+8P?9p-n%sun3tW& zRofryqEu(^`*b_gO#AxAZ^trNH}&jL`tggWg4?40mCRSBNtYMwHI#C^d2nj(9%l|G z1(5OlTnBbbY0iAKP`seBAooE{aNQTCossKUi#}$=SPI9i^WM4BWZjqMpH*L2)g0$r zpNx00j+<{C*Q)F~q0PE%*FJ~E{O7sD>wAQPH_zrg*c4$T;}}B7gZM zRKY43KD5_WGj4Xfn*PQ5_ucaELOsWi|BO1#HX-Pix8~yA@4^@ikJV1;=Tx-$$CeO! a`x|T76g4iTcZ*sG+x3>;*GAjzO229q{Iozdl&S=dc zqc=&-4@`B|G#-6ZtpQXSi4-x$|a)i6x| zb6Fm&fPrC-^k$~ywcA##mq`DY6y{i6bM1H(--2sWMd#M?o&$u literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/body_markings.rsi/fawn.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/body_markings.rsi/fawn.png new file mode 100644 index 0000000000000000000000000000000000000000..277a5d2097f4eb2a211c05c2e464b5d6f31484d9 GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%xe*gac!i5VjUc6YeXwlxidx66J>?X!QimfEbFZe$QFl^qxWIs@Z zv%n*=n1O-sFbFdq&tH)O6nyRJ;usR){&pH8*I@$=S7G7z^-nWj?8-=9EOJc3?pV}{ z%HLKQK_3(~Js3ad9^7i9vf}ym_6~*>dp@MAU2{rgtW;BTv|jglF4L2wG{1y())MEp zCSPq*&DwhD*KEaiLJ6&gPJ!EnW+?qDJdnk8?~ckt#uIW*x(WfpU7<|f$D9{1+!oV0 zcIe*mzn(4zBD>DdNO0r|I-ttZEqhl!pC^Ef+R|J(1Z z_F)aXNOZT)1MY{2`ydk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%xE?Ttc!i5Wa_wN1v{rig-FMz_VuS-0E6kAD+ zXMsm#F#`kNVGw3Kp1&dmD0tq}#W5tp{q41be1{Bpm@ioP{{KI{)0_3|6`tNgr;SH6 zKK)9F33_QB?7(=&pHXmymWs3MmW7#brt@ElVt#Oaufn~)Xs7*5&%RcuGFYp9(PpS- z<7`+i@LTi(X9iQw?+sx;L{I*kF7R7+8q))3CA-A3&t{MP4gQ@e*JHf9X6D(iXG{|& zGjSzwX*6g)_|Ne0kH7okqJF#%q)34l;i|9|@+#)=vc)v4i)^KL%AD--u5&R&hYDF?hQAxvXk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x*4NixxNu?b-o4+ye}D1f1yFeNxu%CeimfEbFZe$QFl^qxWIs@Z zv%n*=n1O-s5C}7hYIrpO1#fw}IEF;HznylG?~nn9>&_{E|LdQAE2X>HWah6Fi^9oI zrzJnE=p;|qEekWxEN9PL%lP532shuS*`acezE5@j6WH~_+wH>{tVr?OaECOo5kM|l1V$8bEUbu ziB(mDQPYvrgY%!i!kqsvGfMunJY;XVVZ6`t{e8)*|3?L~&Rg0RGq%5eD!!=U^6dqW zfAZS)D?~Tee`8vA^IgIf&EK*|F3uO|Hz@uq2r}y6^`^%a46^Hdqqw^H*8zRW;OXk; Jvd$@?2>_Q1m?i)K literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/body_markings.rsi/meta.json b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/body_markings.rsi/meta.json new file mode 100644 index 00000000000..7ce5650bc55 --- /dev/null +++ b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/body_markings.rsi/meta.json @@ -0,0 +1,36 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/tgstation/tgstation/blob/8024397cc81c5f47f74cf4279e35728487d0a1a7/icons/mob/human_parts_greyscale.dmi, modified by DrSmugleaf and portfiend", + "size": {"x": 32, "y": 32}, + "states": [ + { + "name": "countershade", + "directions": 4 + }, + { + "name": "countershade_f", + "directions": 4 + }, + { + "name": "countershade_lleg", + "directions": 4 + }, + { + "name": "countershade_rleg", + "directions": 4 + }, + { + "name": "fawn", + "directions": 4 + }, + { + "name": "hooded", + "directions": 4 + }, + { + "name": "hooded_f", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi/cheeks.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi/cheeks.png new file mode 100644 index 0000000000000000000000000000000000000000..9b0a8498e0770840bd7304e30c160e57e23d14f1 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}zE?Tr`@7}!^E?ju=;ssD_1COyAkYX(f@(cbC1Ps5o@dX0~I14-? ziy0XB4uLSEsD@VqP_WU{#W5tp{q41bd<_ab%mEUA{+sVM;@cI_Q<1A*ELm+Bx8%!w z!3hl+J9f^xzdOi%rBB2;`G(#kk%+VQjH2v4`yDw->|3_X-*>{1g~I`gQWiwa_BYY} zyH|eh`|aWf`9E;GF+?+d=6%p~RJZjQ|B|VZ{mKpuNVIHlIM8@T=J#G3W1t2Q_@EzZdhP9xS?li2Htl&K<6iQe86;febA*LA VM!B5r&co#(zNf37%Q~loCIH#&IEVlM literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi/fluff.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi/fluff.png new file mode 100644 index 0000000000000000000000000000000000000000..5d1a0daeb8b76722e14995f4f4fce5855dbf5cb1 GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}zE?Ttc!i5Wa_wIf1;ssD_EBBYjK#H{_$S?Rm5HS4S#up3};4JWn zEM{QfI{?CrS=Tx_fr6c$E{-7)?r*0#@*Pm%U=jTLfA;IB++E8gE`Qrm+{iLRME~e1 zcak44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z*4NjsUAuPg-n|ztTmXt~32P1oQmiFGe!>5NfZ_KxzF?pLXMsm# zF#`kNK@eu#F){lsP_Wq3#W5tp{p~bsp#}vWm(RQZ&otFKYLt?2;ZRaMV@iYji?Bzk zB7b}ovaaV?ZR@h*zR|w*mt|Gq{=FA|ZZzQE{_0=Fe!IOKtRgBR0TTio9GwmxZ<=PH xmf+C9_pZfoA-BSh)>gS+3@umLpz@AK7_WQU=R4eWUj?+D!PC{xWt~$(6974cU+4e; literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi/fluff_alt_overlay.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi/fluff_alt_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..b7857aae731c3909a6dba0b45790f1a6c4afa655 GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z*4NjsUAy+eg$sN4?gff1Dg5gXq*zOW{DS`j0mJWYe8E5g&H|6f zVg?4jgCNYfV`BDOpkRupi(^QH``c^YTn7|*7%u*KSN}{ZM$=cjG&m(qvE!3K_{1AL z4=fz6+{%htxaeM({Q2X((KD|1@3LN>ug}IXfsrAFfkE=X`v$wjJtn*gkGX&Ge7a$> nK<0aAJQKqS28K<(3Xhn0tL+!Y8@-zjw2#5l)z4*}Q$iB}fsI&5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi/fluff_overlay.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi/fluff_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..c0f4d4c531826e55a5468de7eb042542ead61ded GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}zE?Ttc!i5Wa_wIf1;ssD_EBBYjK#H{_$S?Rm5HS4S#up3};4JWn zEM{QfI|#yzJ0@no1qvp5x;TbJxWB#T&2>P5$MvF0+W+iz{&PHhH7zus-fNVfV%+yM zkzqgcnd8qyvljBpo&H^QF<0kz+54~Wr!z8W0IgwIz+lJzg>%u_d2tDnm{r-UW|2}D)y literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi/meta.json b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi/meta.json new file mode 100644 index 00000000000..b21820c229d --- /dev/null +++ b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi/meta.json @@ -0,0 +1,36 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/tgstation/tgstation/blob/8024397cc81c5f47f74cf4279e35728487d0a1a7/icons/mob/human_parts_greyscale.dmi, modified by DrSmugleaf and portfiend", + "size": {"x": 32, "y": 32}, + "states": [ + { + "name": "cheeks", + "directions": 4 + }, + { + "name": "cheeks_overlay", + "directions": 4 + }, + { + "name": "fluff", + "directions": 4 + }, + { + "name": "fluff_overlay", + "directions": 4 + }, + { + "name": "fluff_alt", + "directions": 4 + }, + { + "name": "fluff_alt_overlay", + "directions": 4 + }, + { + "name": "whiskers", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi/whiskers.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/cheek_markings.rsi/whiskers.png new file mode 100644 index 0000000000000000000000000000000000000000..dc8c9b4eb786cce856a901f9a8e4fdb013245d37 GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBuf-vKbiP>*~f)$=Fjv*CsZ*QLDZBP(k4S3V^Z}nns-eVOC zh1^}YtHl*`4$rA)X!!qXSz)l(%K6I{OFXVA&wa16^Vq!d@AFm%nZ>NL*EZjE<;|^o zk?+>=15E^i4^dYwt7e{vn|pTqx^j>1ieD22EB=L??%%qO9VC6gyv2Y)l|8ulV88oH OkbtMFpUXO@geCyOo>8m- literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/bat.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/bat.png new file mode 100644 index 0000000000000000000000000000000000000000..8e037c228ab6b764cebfc8e1da57e5761fffaf63 GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x*4Nj+c=2NI-n|ztTv)qyEl`*<;mt}Q#a0sJ7yKUt7&h-;vL7T- z;1OBOz`%D1gc(IOyc&Rl8$4YcLn7SYPCLzaM1jLq@XP=D$^-7qye4PQ=)Aw#!OFi( zdSRiX`o1QQdEcA1nWgWY{CsaidYe>u)65&G?D_)lc9l$XQrPWyqMGq^%+fuLXV^{` zpLq0VPu=#k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x*4Nj+c=6)Gg$sN4?p?cfEl`*zU7H6;v6Te*1^)*DhRyqz><5Z) z7I;J!GcfQS24TkI`72U@f~P%Q977`9-%fKBJFLLr!ua)H_`3z1E0%7neLHEs>oJ}l zPcx^p3!-O7bk<%!Vk4#&=5gw&_{=}iLbtrGie7DMv1O`zc+Z3B=|0vCAv?Ji%)96K zd*^5VaNWCDu$G@O{)t2RsyM=xiz76_k1@*gu}MeIJZYzJ$M^_ikND|751Lr7*;F5SFy*-D8TP}H!iOgAdT0E$WB%u| t`qZ_*S3GqA8Ze1baskLZd$uj#7>r7N!)JYB;{$q&!PC{xWt~$(69D{Kj*9>Q literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/hamster.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/hamster.png new file mode 100644 index 0000000000000000000000000000000000000000..884516a3c7eb3e29d8e0f8fce424a3c543466c68 GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`211o(uw*4NixxNzacix)rvM?T3?kh+o}zu^D>|1&sft^5Mya~60+7BevL z9R^{>r z)IQV{us3kp$gin8Fzopr00~Z3 AU;qFB literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/hamster_overlay.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/hamster_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..4864c9111d75dbd2182e093e6c6afb325689c6c2 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucK|4G+x3@O(GAQscJHEHi+}6<6*5py5 za5r>X`VWRXD^_iM_UsEYP%Q}5S8ZgypblX>D9^N*$#?fuc*!D=fTydU%Q~loCICo# BFsT3l literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/long.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/long.png new file mode 100644 index 0000000000000000000000000000000000000000..c3ec74cd44aa64b3e6bddb8be2efe7d1c2fc98a8 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z*4Nj+c=6)Gg$rxft_6xc5Nb;RQmiFGe!>5NfZ_KxzF?pLXMsm# zF#`kNVGw3Kp1&dmD7eSd#W5tp{q3~Ve1{cySk6BFzkg@k;~gy4?H*IBZcbbzq0b{I zu4Fu6b>Abux%JtZxx9;Ze4gO0xp%F@=WCl8-<~i(9Gdv|1LtCc7n|gEp6j(?xivXW zwJW!~bwzQ7UCDNp11DS7SRGq#bH0X?RfK^{gFz&Kp-x}m!BG+x92x<9x&ixahUiw{G!n;r)Ud_ z7^z3+G~dk<|38(-{eyev>N64;^ei1j#^P^RnZzopr07~gLU;qFB literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/meta.json b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/meta.json new file mode 100644 index 00000000000..6d71db0e993 --- /dev/null +++ b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/meta.json @@ -0,0 +1,68 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "portfiend", + "size": {"x": 32, "y": 32}, + "states": [ + { + "name": "bat", + "directions": 4 + }, + { + "name": "bat_large", + "directions": 4 + }, + { + "name": "hamster", + "directions": 4 + }, + { + "name": "hamster_overlay", + "directions": 4 + }, + { + "name": "long", + "directions": 4 + }, + { + "name": "long_overlay", + "directions": 4 + }, + { + "name": "mouse", + "directions": 4 + }, + { + "name": "mouse_overlay", + "directions": 4 + }, + { + "name": "mouse_large", + "directions": 4 + }, + { + "name": "mouse_large_overlay", + "directions": 4 + }, + { + "name": "none", + "directions": 4 + }, + { + "name": "pointy", + "directions": 4 + }, + { + "name": "rabbit", + "directions": 4 + }, + { + "name": "rabbit_overlay", + "directions": 4 + }, + { + "name": "small", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/mouse.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/mouse.png new file mode 100644 index 0000000000000000000000000000000000000000..92b5a4ce69d69e5d8888b9420af3cb41beb1ae3c GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x*4Nj+c=6)Gg$rxfuHCzLFHpGSEt?#WVk-&q3;quR44d~a*$))q zEbxddW?#S<~OJ^DG zOHpxCz9pnJX7ya)3Vh#UCeT9YtjSNieOdKJh_N8ZizfP=M{~G9I22WQ% Jmvv4FO#l#Ae}Vu2 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/mouse_large.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/mouse_large.png new file mode 100644 index 0000000000000000000000000000000000000000..9b7bc47f2e644894c583890eabe51f1442d35d38 GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z*4Nj+c=6)Gg$sN4?gffnwsm<1q*zOW{DS`j0mJWYe8E5g&H|6f zVg?4j!ywFfJby(BP;k4ai(^QH``c;WLPr!hSQ+>JpUG|zm~tY0Roc%gWwsX)c`d(M zGIGwD20st?Ig_)y`0Rv&&o#-MKP9u~%diGXZmIvPAkpM-WdG!KQyqRUQ+VQh#l>bq z;iMkfgUxRl92ZQV+&tGR{`x-#76AzXhXe{`F^m7t&DundRP8V6zi&=B zy=Z|PkI+sXt`Y|g^=4jak44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`211o(uwUbt{!@7}%j_4PmjyVKXFfYg-)`33*~|DVA@YvmUppR>RtvY3H^ z?+^$xifVW@00k>NT^vIq+}}<+&2>P5hh_24|Mlx$G7D*Lx+IsbCm5+Ncm0p@ey%lh z7w38g-#GJ2qV~*dC#BTee=oe7pYbGhqrHFU-23~Q7#tfQXaU!eq=4j~He5{?c$S6S x{29`tdU@KfMcj9jPH|{oS8xyjqX+Nm7&eyZPj{PbzX9k522WQ%mvv4FO#t=gVHE%X literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/mouse_overlay.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/mouse_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..c181e346233d7bb4a353bcdf4f9eb0cbdf3dd60c GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}zUbt{!?b@~V_4RxA?gffHK3`l0q*zOW{DS`j0mJWYe8E5g&H|6f zVg?4j!ywFfJby(BP_V$$#W5tp{p~eFz6J#zhl@&k|IggIggIBlJ4WVTd>5z9&5$q2 z|CyHbUfgz}a`XI>OH&plk??B5>WdUE>W z4--DLKQeth@zQ$NJ0VriwHO$<84fTp1ccf$-c7Mzd->O{-9Wn;JYD@<);T3K0RX@G BVmAN) literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/none.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/none.png new file mode 100644 index 0000000000000000000000000000000000000000..be6bd7855c95da1c668449dcedf42dd0895d77a1 GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL3K|T$B>G+w+9({fxJTtzWe9$nJWO9$lyT? XuY&^vBX_Z%EJ)bX)z4*}Q$iB}0~{am literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/pointy.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/pointy.png new file mode 100644 index 0000000000000000000000000000000000000000..485dcae23dae494dfb9627d27e76574fa5ab5178 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!FEp<$B>G+x3?U*4l4+-2HfuMZvU)zPw8Ni zxGrx=&%PTX**5d9$za2i`pYUpCba cs&1P=7-M7H*PXk*M1w>;UHx3vIVCg!07`jWl>h($ literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/rabbit.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/rabbit.png new file mode 100644 index 0000000000000000000000000000000000000000..81ace74d25285fb466d22f9e0ef485e7fe39b829 GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z*4NixxNzacix+Fxt_6xYf6uo7QmiFGe!>5NfZ_KxzF?pLXMsm# zF#`kNArNL1)$nQn3O@C8aSVxYe>=^Q?}!42tKi=MGuf|bMU-Tu8ODAP7uEhRI$4e3 zsrz0YhCQqKqp$6}D)*3IJH$gtPpT2RX6FR@FOaXL&)n6klI{Ni_Qo(7BULFQ8S4Znot7;;z@7}hYb zG>A5QXXM*_@It2Df_aw@H?Ppw4377_V;9SCwK_fG@1(tg-@`UrU;gvpqxm5j!?Xuq z^;d=;5H~o+6|7ah<{wkZCxgb_45xg*YX>~}w)zgcUNj>IgEj+W!e8ltQ|x~h*)BgQ SFzq$a!wjCTelF{r5}E)GM~|)m literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/rabbit_overlay.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/rabbit_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..88c40e63cc90e0b43414d4e7f8e84badfcf4c7cc GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!46Ls$B>G+w>KTR4l4+-UbxU*&9nZg;U3rS zqc>TVmQ3T^v;Crq!2h1pmJAGGU+u735Z+HL*LxG3FsoxVT=K;T^O&-i7M59ZpO zK73Jt{c6qtG9H?Y=(ZHiTV3}tvz$JeXXyAeeT+&x^_K1x1|iWzqHlV e25CPaFMFJQ3rCvxg4|zIKmwkwelF{r5}E+YVpo&^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/small.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/ear_markings.rsi/small.png new file mode 100644 index 0000000000000000000000000000000000000000..1d51eabf07b9a7a02806f7cf67ab6f886175327c GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z*4NjsUAy+hix(FzTmXta*s3`21FD)`#$*Uq1+E!P({=53$n;#4X93D6@G%_=?@UcV+FeWfBpBl&P z&5+L$k)Zt8Z+)X{&s%Yer~O~%e~g@z#%Fd7rdD9ZD!U)P_KAM8{5pZ|VDNPHb6Mw< G&;$U)onZ+8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/head_markings.rsi/blaze.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/head_markings.rsi/blaze.png new file mode 100644 index 0000000000000000000000000000000000000000..c3f9106f6887618acd6734a5084f77f6e8662c01 GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%xE?Ttc#fukf*RH*A;lkd%dx657S_Kh6imfEbFZe$QFl^qxWIsrv zz$3Dlfr0N32s4Umcr^e8=X$z0hD5l(o#rTXSb@XU@zLM)F()thi8{_Lxp=gGc0z;s zLEeSGCj1v()1qg;FQGc`bGGBdq>Flc8=g)&od1I5$}fG%<)>b*_I$G8e(WPd0fz++ z42?{TET=RSyr$Z{J#A??;r^b{an^LB{Ts55)gkL literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/head_markings.rsi/meta.json b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/head_markings.rsi/meta.json new file mode 100644 index 00000000000..7695bef06bf --- /dev/null +++ b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/head_markings.rsi/meta.json @@ -0,0 +1,16 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/tgstation/tgstation/blob/8024397cc81c5f47f74cf4279e35728487d0a1a7/icons/mob/human_parts_greyscale.dmi, modified by DrSmugleaf and portfiend", + "size": {"x": 32, "y": 32}, + "states": [ + { + "name": "blaze", + "directions": 4 + }, + { + "name": "round", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/head_markings.rsi/round.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/head_markings.rsi/round.png new file mode 100644 index 0000000000000000000000000000000000000000..0d8c619529696dc5d379dc50b9f8c6223520afc8 GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%xzIgFs?b@{$E?n5VcW-@tJy2MBJHuNb#a0sJ7yKUt7&h-;vL7hI zS>O>_%)r2R7=#&*=dVZs3QqKNaSVxYe>?3WUxNaNtKi4~^_CH9czc$8y>!@i?b+2u z*Qyw$&XvT1soC_7#bNF zS&sc@v68=XH?TrZK4{yoFz#D9Ggw2+GTz=Tdv|iDpg?HT=PQ#ZKYCujK-yopO{%8U mF!v1;BMTdgfP_F#A;Y`-ep5U2UGD)M$KdJe=d#Wzp$Pz@XmLLP literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/bat.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/bat.png new file mode 100644 index 0000000000000000000000000000000000000000..08096103534f643d150b7eccb7e39988fea6a137 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0(2Ka=yUbt}K#fukf*REZ(Xwlxid+Y1#fig`tc1M5|dr6RA@P9C1kn(1B z0}62#ctjR6Fz_7&Va6R3v)=**CwaO!hD5l(o#x1QK!JlL()IuUCtjx)3i)KsQnP&% z)54Veb;+0M0UsI@q9xcED!xpKRA5d0EdT7AmeSS7?K$%;ofui!SVbg60uug&PN)x! zSKoB4Eo4E4+}+N#j~f-b-JRmNnl3VkoZa@y_jKg9E1XQXnI@g%KOFk?4Cl&QKa%Ps pd<54S-8*OoG$6pC(b4feyU4A$wX4%Aq=2qt@O1TaS?83{1OVXua`ONH literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/bat_nose.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/bat_nose.png new file mode 100644 index 0000000000000000000000000000000000000000..957bd20691b15984e2141a96055aef748744d47d GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%xUbt}K#fukf*RI{WcW-@tJy6)_)a(o(#a0sJ7yKUt7&h-;vL7hI zS>O>_%)r2R2!t6$HM|;tg2kRLjv*25Z?8G>H7M}71bW^69UnQXq%p-O# zF7H_M^DM_6hA9W1G76r&o5y`&>GQnp$NxK8GO;Lu(W3oKKSGLaTitvW79{PQ&Aj;S zqe%vR7faR^$6j20N93;TgX3XJ4hkUj!S+EN!_Slc3yxji{}gCFgQu&X%Q~loCIG4F BXLbMp literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/bat_overlay.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/bat_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..e5ad9decb389d4bcb8965d7cc0267c7303172443 GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}zE?Ttc!i5VjUc9KUuLp`PGC$u3q*zOW{DS`j0mJWYe8E5g&H|6f zVg?4jLmI0;r(8biquQ~4!_ia* zhAh@uGi4_|t^1%1G?!rk14D@GfxBy;@41?*Q#|i&!#VqR?FvfIw|Dv5@G>|sGOX}c bc*K~y&;C^6uDG>8OBg&|{an^LB{Ts5mN`+V literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/flat.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/flat.png new file mode 100644 index 0000000000000000000000000000000000000000..694c9ab8457c39e1368777f19e11a33ac6ec38c7 GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}zUbt{!@7}$O7A<=5;ssEwWku8jAjMh|TrXbw^#6X2_W4Gkj^6IWyM?U4 BVXOcE literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/flat_nose.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/flat_nose.png new file mode 100644 index 0000000000000000000000000000000000000000..116e2e5a9fc6091b127645fb43d54c6dd2080ee0 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucK|4G+x3>%h859JV4}RBIwu_TC(MWhE zePivqt|k$Nf~C8!djeI0zyoE^V|L7wZ-Y4pUavA+@t2eFVe6KEAOTNTKbLh*2~7ab C%rGwi literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/flat_overlay.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/flat_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..12709de35525d96cb371f9347bee15fbef7f4dcf GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z?%lih!i5Wq7A<=5;ssF5@ra-ckYX(f@(cbC1Ps5o@dX0~I14-? ziy0XB4uUY_j)~cCfr3$k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%xUbt{!@7}$O7A>l;uYd941yFcijNwio#a0sJ7yKUt7&h-;vL7hI zS>O>_%)r2R2!t6$HM|;tg7uy*jv*25ZznkN9Z=w4x!(2vf6>u3?3%t=RhhHqb}JbO zU5HaU$j+*<``Fff-``7J`^0?U;BV(L^?eGBEPX6O7D65m{)7Z*>oam8 zYO$w4kI?3r11io!ERQGGG*~*ldEnW#{r;EVLc10jC={~a_E2b425DbAH>%q|SkkkV Q6X+BMPgg&ebxsLQ04U&QBLDyZ literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/round_nose.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/round_nose.png new file mode 100644 index 0000000000000000000000000000000000000000..69a0e41e18f6228d6d37bf423f57ac235dfb3ad0 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1en(96@sF{C2y?aht62MjnE9L>^=$`X{_r|oH2 z9Po5q(=%6p28Q(^SFMzRYC+(SXIkIhGwQeJzkFv}_#*G!w@5~?xSp%c;$9KfFR~6^ OAik%opUXO@geCw=B{WI^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/round_overlay.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/snout_markings.rsi/round_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..668949758b257e7a526e55dfe7fa59655ce25b2e GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x?%lih!i5Wq7A<=5;zfOZJy7`TiiKuCimfEbFZe$QFl^qxWIs@Z zv%n*=n1O-sAP6(=n3(+*D45{s;usR){`P_+*8v3{*1+U5f7i#@FKPAS7BzQG3u8PR zz2ry|gEiC9w4=ZOXQi1w@BjOb?K2~T1_J{t!vY35hVt#xJ_l_6H{~4ST*bG*&mBU4*>z@DiL#+*dK)V<`UHx3vIVCg!0M(va!2kdN literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/beaver.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/beaver.png new file mode 100644 index 0000000000000000000000000000000000000000..a8608c7944a7ee8e50aa64b1d6a5b4c2e15c3308 GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z*4Nj+c=6)Gg$rxft_6xc5Nb;RQmiFGe!>5NfZ_KxzF?pLXMsm# zF#`kNVGw3Kp1&dmD7eGdu{gzrHouAgX@Ik$!7q_6jo!mx^1+_qjGkCiC KxvXG+x3_ll9#G(6b(qo^F;P^qSy#w1 zsX;^DRjj->c2>HT22dr#1o!OR`EPS?uQ}}{?U1wo+OJc(9_oB|tM4C|NRKsY5nwzc z22#er@L*@p`t{-I`~KJ~1ar(kv#W+d(V1hW7%Rhv#X)>!-ujw*xpvrq6neV)xvXk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}zu3fwK#fujgE?lUuuLp{$>}%-&QmiFGe!>5NfZ_KxzF?pLXMsm# zF#`kNVGw3Kp1&dmD0s-z#W5tp{q41bLQaYttO26`|IeN*DblLB_vRw0caKgwolB7R z`f9|;a^R<>g6i!CrkykRBsMT{O_{Tv!JdidhG0O0`wr$8pE!9Vq5~RE$v*g%s4zLi z_Ji;f8ArzH3``GL1Q?!2GwlDi{iW`w((L-_+myo@L`shH9nkB!ev$3xuK&EVU!1s< zHvOAk)&FFN#=4^~tKMfViLO5HZ1urnw&qjEWtG2AHifXyyl36zRicw}>ABW{7LnOH j-_stfW%bP0l+XkKn5>Bc literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/long_overlay.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/long_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..271a9105a8ee3407a514df222fa52e4e5ab6e35b GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}zzIgHC!i5WK*RHLvuLp|#xN=w)NU@d#`33(60*2q)_=14~oCO|{ z#S9F5he4R}c>anMpx_Em7srqY_qWq7@---MxGMhrpP#p`TQmEtwyo*8$vZ8SavQHG zXnHs*vr01s>M-a}U|!wLdvFeuZoqV=_#-k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`211o(uwu3fwK#fujgE?fW#y!>+e8%SMAkYDis|Nj{rv{rrr@;M7UB8wRq z_zr_Gk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%xu3fvfzP|p&ix+$M?!9o~0#JCxg4>ZmimfEbFZe$QFl^qxWIs@Z zv%n*=n1O-sFbFdq&tH)Ov_R6+#W5tp{q3~3e9a0xuF-b){!hJrdr=uz^u_pSi_VU= zY6lahtL-`mg&OV)2^6okRAaf)d7k6f&xH?)>L>K~Cx~yju<8IOTdc{6D50fuHf6tJ zSvvQ3!Ng@9rx}7Qc^|1tG#$|(M$ZkqZ6V+xcA4oXTCqnHQ6^wQ`h4CRf$_y+H#qM znsXWg`X?AR-@G@wRJ+*g{qF7l8%(D1PT!jM_}Jbbv!4`wxyJJR?{o2(*S-a_RV#E> ad}Uo7@5}$mCs6k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%xu3fwK!i5Wa_wKE)uYd941yDFPOePsfv6Te*1^)*DhRyqz><5Z) z7I;J!GcfQS24TkI`72U@f?b|2jv*25Z?9eCYEa;5eR%fl_xh(&J!x7`Kd3$W6R!Ma z@vgvCvl$r@fGD*wu~taoo%s_6t(aZ1mJSh-HQy#Rtjc3te&OwTCZMGe5G2o};(D>v zh0P#FR&J5S6X^v%wgk*%JY}bQr0~@7>iN^z=f`E|OP+1-KJxf@9=C9Po?L@G!&bSx X4*$#(Zjldwu43?X^>bP0l+XkKKp<@$B>G+w>J;+9#-IC4Y;LwLu{jB@&;Ee zr3qEuSKLC^?kP94YxuFxiV>)qA#uyKZIyp+6kjWF`!VP9b!QIChM-e&brPjts*BZ? zOWxP+POSi`1A=wiu3gy7`}oq;pHfaOj%(`Y@&2Fj^}_Gwt=BGpuhTpv&)85u@e=pa W07stMADX8?Iy_zdT-G@yGywn^^i^&E literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/short.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/short.png new file mode 100644 index 0000000000000000000000000000000000000000..41430a92b3812748e4c79491d3f4195f8b4edd9a GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`211o(uwu3fvfzP|p&ix(gTXO~X`Q6)is!TJ3`31=5EbxddW?mdKI;Vst0Kv{) A9{>OV literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/squirrel.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/squirrel.png new file mode 100644 index 0000000000000000000000000000000000000000..de21ef39c04db6942ecf3267e75b2b097f846bfc GIT binary patch literal 398 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x*4NixxNzacix+FxuHCzLFHm^vJoV>5imfEbFZe$QFl^qxWIs@Z zv%n*=n1O-sFbFdq&tH)O6#VSz;usR){&re7-(dv~SJ!9%|9`63Y87P8b9$2LJrhxB zi%a4WQ9;rh7}xA)p7MzK8Uw4=jt*6Zqv8G$%mFoPIT^SZa+gJ&Zs44;lhxtK9b<-u zGsYhKSu1(<9$jyEGTr0d$@+&*Anm+6L>sh@GG%|*Hu3dZ{jlQRdsZ2jyM>nQlD`^y zu59V4sSQ`6uU{7SmH$|wHevU&0w#uVh7*?M4vQ^iliH4)ZroPM8t{0T&Xt~yF#BD5 zcsErVXfH^dUdXT`bEf2l3lGm-%#Xd-b?L92LN)iCrbx!GELIK02Co+%+rKPYd~f|C j@#6_+Vx$Y09kTs9KKiU%t?8%*^ge^9tDnm{r-UW|)Zd_v literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/squirrel_overlay.png b/Resources/Textures/DeltaV/Mobs/Customization/Rodentia/tail_markings.rsi/squirrel_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..972b461ae735d9f83c1db849bcf1a03c93f227ea GIT binary patch literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z*4NixxNzacix+Fxt_6xYf6uo7QmiFGe!>5NfZ_KxzF?pLXMsm# zF#`kNVGw3Kp1&dmD0s%x#W5tp{q3|szQYO}4hJj$8}nqfazHwQ^UrC>I^;>B|lhZ1Ua2#ea@jW!KaWbO-|iG=GupEu7CD7lr2i>3O2Z2 z%_^+O!6@7m&iUe6$&OuFoh8|R*PqSWw~OV$=1VyX>g?i{mR3Ji|B`c>cgm}xJyQ2e z&bBsvJYc^>G@Nlpc*8_dm8?$_GnPzS%@8AefoE&r;_Rlpw%07F`jMHt!yf<4KloYl tSG@1(xHY#&0<;4C>Ch9&G?GoTcE!fJYD@<);T3K0RUj-jG+Jk literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/full.png b/Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/full.png new file mode 100644 index 0000000000000000000000000000000000000000..7530b03183a4a9a8838f277b0f519e4b6f004abf GIT binary patch literal 412 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCilI0(?STBO@ahEm|~b(xl4D%KG~H7cX9{UAy+eg$sN4?*0D#dqF|LzJ2>v zuU-vQo_?s(7D(}x1o;L3M+OY82kx8z%5WBVL>2=T90p;=;ZQkDJ*lYkp9T;_UKu-?}1ri2S0N(2=r*$F)Lj2uF-4cY2xu$t+;KL za^OuT;{(2qtHVMFrmcMOkz^{73lJ(%d;#b~fqk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x*4Nj+c=2NG+O>Q4?!9o~0#JCp#*bG(imfEbFZe$QFl^qxWIs@Z zv%n*=n1O-s5C}7hYIrpO1-E*-IEF;Hzn$jI*J8lqJh|>&{nJj(ZcpzZ7HP4v)_{~x z8i^0R>Q|m;bSZlD>UUI#sdCJZbuIG+*Zui_>Q9okiia)3)%{=gIA7Wlx?7I9Cm`4L zulm97=bdwOU$*amqhI}J8ixXdQUgN=1JeS|grD=3!tYOa|DnqAqg literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/head_m.png b/Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/head_m.png new file mode 100644 index 0000000000000000000000000000000000000000..f99d1da03102790c205ae0e474cdbfb81839bc6a GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x*4Nj+c=2NG+O>Q4?!9o~0#JCp#*bG(imfEbFZe$QFl^qxWIs@Z zv%n*=n1O-s5C}7hYIrpO1-E*-IEF;Hzn$jI*J8lqJh|>&{nJj(ZcpzZ7HP4v)_{~x z8i^0R>Q|m;bSZlD>UUI#sdCJZbuIG+*Zui_>Q9okiia)3)%{=gIA7Wlx?7I9Cm`4L zulm97=bdwOU$*amqhI}J8ixXdQUgN=1JeS|grD=3!tYOa|DnqAqg literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/l_arm.png b/Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/l_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..dce36d7b8ff9551f2b822fc4feaff61e9bedfbd5 GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`211o(uw*4Nj+c=6)Gg$qD|&?R-6$|7UQ}TKNUY=PdAuEM{Qf zI|Ravq8eTeK*0=87srqY_qW$Javf0MalLrt&wu;t4&t|;3p6b~ymzvP#jcgE#taQ_ zmN$fP?_O7S_WjXWY%K|K3_eUnCCok7xBS##c(mg#s~=-41A`Gm0}q43Z@Gf_`8SOW m{&U(Ua53})g&WKS3K=`{^fOND%*_Vc$>8bg=d#Wzp$Pz2>r`X_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/l_foot.png b/Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/l_foot.png new file mode 100644 index 0000000000000000000000000000000000000000..bbcb08b548b48d26ff0813b4b00a13480e79a64f GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`211o(uw78De$UcGwXzI{M}{ThGPgVdD-`33*~|DVA@YvmUppR>RtvY3H^ z?;r>>?wFYU7ATnN>Eaj?;r{lTBVU68kITiNclGI#i#r!8AKdY`o?SIRdeMI#1_wq4 z4F(3*goX^sxZV?C>U<|koO*uiK6qngQ!Tk;`FtjZ00sswpfVAM)3vF6vi55$m~~h_ jyU$?!&$&bU@jd>q>-veyDj!w>EoAU?^>bP0l+XkK!-G)e literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/l_hand.png b/Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/l_hand.png new file mode 100644 index 0000000000000000000000000000000000000000..5b561d4b6154a6e222523b911a836d44c23e1374 GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufG}g$wN6f;V2h`VV@O5Z+gk@YofQRG9Xz$aCF@>GV=PP3 zmTY9%WFSHRL=-Hpv5jpWgPM<7b2R?yr3__;(bQ@7EQ$hb0r}G6t2gML-oVYD zsCPTzroBat{?9818V{cF1S)1=IFM-h{9=^!-tUIj3;%Rf{$FGK`fg};cg!?47d>xg zB}TBKhT8mdtZ#mv<%*dr{=rge=bHVw4w_GcvwQDW#yO~LSTtqdgx%)7mBEkZgOq!^ L`njxgN@xNA6E{nx literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/meta.json b/Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/meta.json new file mode 100644 index 00000000000..94baae25898 --- /dev/null +++ b/Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/meta.json @@ -0,0 +1,62 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/tgstation/tgstation/blob/8024397cc81c5f47f74cf4279e35728487d0a1a7/icons/mob/human_parts_greyscale.dmi, modified by DrSmugleaf and portfiend", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "full" + }, + { + "name": "head_f", + "directions": 4 + }, + { + "name": "head_m", + "directions": 4 + }, + { + "name": "l_arm", + "directions": 4 + }, + { + "name": "l_foot", + "directions": 4 + }, + { + "name": "l_hand", + "directions": 4 + }, + { + "name": "l_leg", + "directions": 4 + }, + { + "name": "r_arm", + "directions": 4 + }, + { + "name": "r_foot", + "directions": 4 + }, + { + "name": "r_hand", + "directions": 4 + }, + { + "name": "r_leg", + "directions": 4 + }, + { + "name": "torso_f", + "directions": 4 + }, + { + "name": "torso_m", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/r_arm.png b/Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/r_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..ec1e2e825a11ca888ae3102e797e05800d09169f GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`211o(uw*4Nj+c=6)Gg$qD|&?R-6$|7UQ}TKNUY=PdAuEM{Qf zI|Ravq8eTeK*0h}7srqY_qSIa`5F{>TrN(#_y622mP-?7I5f5zeh!bl!oE)6b`JyN z```n6T4x(}UrU^`PgZ*t$cZ-`cidLHIElfFgYiuL{~LB}I_?b(5L7O*k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`211o(uw78Dfh+qZA^>eWDjBXZFPKGHb`&n;nAk-dP`w85md@ z7BDb~9N;zh99Dhp&a>F-x9-?8z5BfJ@y+n`$4~d}S^IA>2ZIA6g9cFP1jf5}tvB^E qR5C?0_I@yNQc;NgxAJT85k|w!`r$frzsdq_W$<+Mb6Mw<&;$TFNLjl8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/r_hand.png b/Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/r_hand.png new file mode 100644 index 0000000000000000000000000000000000000000..598fdb8236f1521a2cd638411d2bb47d5ce5e4bf GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBuf-vKbiP>*~g591jjv*CsZ*LvsWL6Yl4e-?dmaKa%jj=3A zmy^v|k9)V`&E7-R3Uzxlnzzpcs%K!xw|ri`_Uq0nx#PjVzntB^@x7O3ugU&vw>*CH zi7%L9bm>o0kMduK|8A>m{!bUZ&jZ%O;IqtJ_P?od!Li!*+mEBy&6Bivyl*{M!Phef iOpLjHy=P!pqu0W&Z)2PEU2OUrkQPr@KbLh*2~7Z8VOMql literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/r_leg.png b/Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/r_leg.png new file mode 100644 index 0000000000000000000000000000000000000000..e7a95e3eb3722057193af161e8d7a4d62844c858 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`211o(uw*4Nj+c=6)Gg$qD|&?R-6$|7UQ}TKNUY=PdAuEM{Qf zI|Ravq8eTeKtX>`7srqY_qSIKxfm39SPo|V`=7qoh>J^W#fE70%kzGwF)(m3I56&E zi#Sz$zKF}6p}lb_1A_=d0~13)d*iO?!X3AMeXSOd_*c)MQzBiUpCY8M{4<>EC(vjH MPgg&ebxsLQ0EG=kYXATM literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/torso_f.png b/Resources/Textures/DeltaV/Mobs/Species/Rodentia/parts.rsi/torso_f.png new file mode 100644 index 0000000000000000000000000000000000000000..bb92f94860416f58725f8732fa0d2f58efcbca63 GIT binary patch literal 470 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x*4NixxNu?b-o4+ye}D1f1yFeNxu%CeimfEbFZe$QFl^qxWIs@Z zv%n*=n1O-s5C}7hYIrpOEwJ`?3VU$X*FOZ0*7^-p8DBQ2IBZ2B7^mUr={ zOpSZGsXE_q~F< z^FN*1dPn}i9mX|hjhIE|i}|(e+H&qda1Uo`UyO`o!>!${3l1D>@HgJ@>c2vBh3t>w zzUhtpiM&b-H5zy19GZB~C3QEy2>Zu=S6XMb{YAzk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x*4NixxNu?b-o4+ye}D1f1yFeNxu%CeimfEbFZe$QFl^qxWIs@Z zv%n*=n1O-s5C}7hYIrpOEl~7yaSVxYe>?3V-ysE_mfM^5{@1R4E9NZ8Zv463a8986 zx*FCyIjQw4SR)v&hchZ=rD^eKCAoH|?w9h=bPfG@Q=Q`uhi4t{jfCT~8SWIT?q_>Z z=E3Q}@ANIZVJ?Gm!@BwF&R$=T@^AKpzdSEkLWFu*D% Date: Sat, 14 Sep 2024 19:10:47 +0300 Subject: [PATCH 2/9] Update NamingSystem.cs --- Content.Shared/Humanoid/NamingSystem.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Content.Shared/Humanoid/NamingSystem.cs b/Content.Shared/Humanoid/NamingSystem.cs index fca036bf002..b3f1c69a65d 100644 --- a/Content.Shared/Humanoid/NamingSystem.cs +++ b/Content.Shared/Humanoid/NamingSystem.cs @@ -29,6 +29,11 @@ public string GetName(string species, Gender? gender = null) case SpeciesNaming.First: return Loc.GetString("namepreset-first", ("first", GetFirstName(speciesProto, gender))); + // Start of Nyano - Summary: for Oni naming + case SpeciesNaming.LastNoFirst: + return Loc.GetString("namepreset-lastnofirst", + ("first", GetFirstName(speciesProto, gender)), ("last", GetLastName(speciesProto))); + // End of Nyano - Summary: for Oni naming case SpeciesNaming.TheFirstofLast: return Loc.GetString("namepreset-thefirstoflast", ("first", GetFirstName(speciesProto, gender)), ("last", GetLastName(speciesProto))); From 3f7910af417df78ef561527af8e0c9a8259b34d0 Mon Sep 17 00:00:00 2001 From: Dvir Date: Sat, 14 Sep 2024 19:32:13 +0300 Subject: [PATCH 3/9] Fixup --- .../en-US/_NF/chat/managers/chat_manager.ftl | 7 +++++++ .../DeltaV/Entities/Mobs/Species/rodentia.yml | 4 +++- .../Prototypes/Entities/Mobs/NPCs/regalrat.yml | 8 ++++---- .../Nyanotrasen/metempsychoticHumanoids.yml | 14 -------------- .../Prototypes/_NF/Loadouts/loadout_effects.yml | 3 +++ 5 files changed, 17 insertions(+), 19 deletions(-) delete mode 100644 Resources/Prototypes/Nyanotrasen/metempsychoticHumanoids.yml diff --git a/Resources/Locale/en-US/_NF/chat/managers/chat_manager.ftl b/Resources/Locale/en-US/_NF/chat/managers/chat_manager.ftl index 86b75108cd8..e2d17109221 100644 --- a/Resources/Locale/en-US/_NF/chat/managers/chat_manager.ftl +++ b/Resources/Locale/en-US/_NF/chat/managers/chat_manager.ftl @@ -17,6 +17,13 @@ chat-speech-verb-harpy-2 = tweets chat-speech-verb-harpy-3 = caws chat-speech-verb-harpy-4 = trills +chat-speech-verb-name-goblin = Goblin +chat-speech-verb-goblin-1 = jabbers +chat-speech-verb-goblin-2 = vokers +chat-speech-verb-goblin-3 = blurts out +chat-speech-verb-goblin-4 = patters +chat-speech-verb-goblin-5 = cuts + chat-speech-verb-name-rodentia = Rodentia chat-speech-verb-rodentia-1 = squeaks chat-speech-verb-rodentia-2 = pieps diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml index c80cbebe42a..c3a3c635a05 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml @@ -20,7 +20,9 @@ - type: Speech speechVerb: Rodentia speechSounds: Squeak - allowedEmotes: ['Squeak'] + allowedEmotes: + - Squeak + - Belch # Frontier - type: Fixtures fixtures: # TODO: This needs a second fixture just for mob collisions. fix1: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml index 6de02c4fb4a..c89a324a15e 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml @@ -296,10 +296,10 @@ - type: weightedRandomEntity id: RatKingLoot weights: # DeltaV: Rebalanced for Rodentia rummaging because we don't have Rat King - RandomSpawner100: 70 #garbage - FoodCheeseSlice: 15 #food - RandomSnacks: 10 - RandomFoodSingle: 5 + RandomSpawner100: 100 #garbage +# FoodCheeseSlice: 15 #food +# RandomSnacks: 10 +# RandomFoodSingle: 5 - type: entity id: ActionRatKingRaiseArmy diff --git a/Resources/Prototypes/Nyanotrasen/metempsychoticHumanoids.yml b/Resources/Prototypes/Nyanotrasen/metempsychoticHumanoids.yml deleted file mode 100644 index a4d96c109e8..00000000000 --- a/Resources/Prototypes/Nyanotrasen/metempsychoticHumanoids.yml +++ /dev/null @@ -1,14 +0,0 @@ -- type: weightedRandom - id: MetempsychoticHumanoidPool # Species prototypes - weights: - Human: 1 - Felinid: 1 - Oni: 1 - Arachnid: 1 - Harpy: 1 - Moth: 1 - Diona: 0.5 - Reptilian: 0.5 - SlimePerson: 0.5 - Vulpkanin: 0.5 - Rodentia: 0.5 diff --git a/Resources/Prototypes/_NF/Loadouts/loadout_effects.yml b/Resources/Prototypes/_NF/Loadouts/loadout_effects.yml index c2e72c66ec0..b1c83790608 100644 --- a/Resources/Prototypes/_NF/Loadouts/loadout_effects.yml +++ b/Resources/Prototypes/_NF/Loadouts/loadout_effects.yml @@ -23,6 +23,7 @@ - Felinid - Vulpkanin - Harpy + - Rodentia - type: loadoutEffectGroup id: PantsCapableNF @@ -41,6 +42,7 @@ - Oni - Felinid - Vulpkanin + - Rodentia - type: loadoutEffectGroup id: ShoesCapableNF @@ -59,6 +61,7 @@ - Felinid - Vulpkanin - Harpy + - Rodentia - type: loadoutEffectGroup id: NotStcNF From b795a6f8fffffd610387b68b65e00d0f35f7b345 Mon Sep 17 00:00:00 2001 From: Dvir <39403717+dvir001@users.noreply.github.com> Date: Thu, 19 Sep 2024 15:45:37 +0300 Subject: [PATCH 4/9] Update rodentia.yml --- Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml index c3a3c635a05..bd64d2d6a9e 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml @@ -7,6 +7,7 @@ components: - type: HumanoidAppearance species: Rodentia + - type: Thirst - type: Hunger baseDecayRate: 0.0467 # 33% faster than usual - type: Carriable # Carrying system from nyanotrasen. From eaca84cbd19787d947c1fbcf8f8fb769ea50fd9c Mon Sep 17 00:00:00 2001 From: Dvir <39403717+dvir001@users.noreply.github.com> Date: Thu, 19 Sep 2024 15:46:49 +0300 Subject: [PATCH 5/9] Update rodentia.yml --- Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml index bd64d2d6a9e..df78222010d 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml @@ -120,7 +120,7 @@ name: Rodentia Dummy parent: MobHumanDummy id: MobRodentiaDummy - noSpawn: true + categories: [ HideSpawnMenu ] description: A dummy rodentia meant to be used in character setup. components: - type: HumanoidAppearance From a5485efdd1102b4aa84158dd07e001c468bcfc16 Mon Sep 17 00:00:00 2001 From: Dvir <39403717+dvir001@users.noreply.github.com> Date: Thu, 19 Sep 2024 15:47:24 +0300 Subject: [PATCH 6/9] Update mouth_storage.yml --- .../Prototypes/DeltaV/Entities/Objects/Misc/mouth_storage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Misc/mouth_storage.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/mouth_storage.yml index 78ccec5b983..2c1fafdf3ee 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Misc/mouth_storage.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/mouth_storage.yml @@ -2,7 +2,7 @@ id: CheekStorage name: cheek storage description: The cheeks of an animal, capable of storing small objects. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Storage clickInsert: false From 94d0950c1c61b207d01f53541ae7ec539d20b22d Mon Sep 17 00:00:00 2001 From: Dvir Date: Fri, 20 Sep 2024 11:38:37 +0300 Subject: [PATCH 7/9] Update SharedRatKingSystem.cs --- Content.Shared/RatKing/SharedRatKingSystem.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Content.Shared/RatKing/SharedRatKingSystem.cs b/Content.Shared/RatKing/SharedRatKingSystem.cs index b2c4e4f29a2..dc8d2b8909d 100644 --- a/Content.Shared/RatKing/SharedRatKingSystem.cs +++ b/Content.Shared/RatKing/SharedRatKingSystem.cs @@ -1,4 +1,4 @@ -using Content.Shared.Abilities; +using Content.Shared.Abilities; using Content.Shared.Actions; using Content.Shared.DoAfter; using Content.Shared.Random; @@ -35,6 +35,8 @@ public override void Initialize() SubscribeLocalEvent>(OnGetVerb); SubscribeLocalEvent(OnDoAfterComplete); + + SubscribeLocalEvent(OnComponentInit); // Goobstation - #660 } private void OnStartup(EntityUid uid, RatKingComponent component, ComponentStartup args) @@ -106,6 +108,12 @@ private void UpdateActions(EntityUid uid, RatKingComponent? component = null) _action.StartUseDelay(component.ActionOrderLooseEntity); } + public void OnComponentInit(EntityUid uid, RatKingRummageableComponent component, ComponentInit args) // Goobstation - #660 Disposal unit rummage cooldown now start on spawn to prevent rummage abuse. + { + component.LastLooted = _gameTiming.CurTime; + Dirty(uid, component); + } + private void OnGetVerb(EntityUid uid, RatKingRummageableComponent component, GetVerbsEvent args) { if (!HasComp(args.User) From 618d0c0d7d4a9a3e6e98c2fc32eb5ce1120e87b3 Mon Sep 17 00:00:00 2001 From: Dvir Date: Fri, 20 Sep 2024 11:58:41 +0300 Subject: [PATCH 8/9] What rats? --- .../Prototypes/DeltaV/Guidebook/species.yml | 8 +++---- .../Prototypes/DeltaV/Species/rodentia.yml | 2 +- Resources/Prototypes/Guidebook/species.yml | 2 +- .../Prototypes/Species/species_weights.yml | 2 +- .../_NF/Entities/Mobs/Species/goblin.yml | 2 ++ .../Guidebook/Mobs/DeltaV/Rodentia.xml | 2 +- .../ServerInfo/Guidebook/Mobs/Species.xml | 2 +- .../ServerInfo/_NF/Guidebook/Mobs/Goblin.xml | 21 ++++++++++++++++--- 8 files changed, 29 insertions(+), 12 deletions(-) diff --git a/Resources/Prototypes/DeltaV/Guidebook/species.yml b/Resources/Prototypes/DeltaV/Guidebook/species.yml index f790970bcc8..8487ec32dd2 100644 --- a/Resources/Prototypes/DeltaV/Guidebook/species.yml +++ b/Resources/Prototypes/DeltaV/Guidebook/species.yml @@ -18,7 +18,7 @@ name: species-name-oni text: "/ServerInfo/Guidebook/Mobs/DeltaV/Oni.xml" -- type: guideEntry - id: Rodentia - name: species-name-rodentia - text: "/ServerInfo/Guidebook/Mobs/DeltaV/Rodentia.xml" +# - type: guideEntry + # id: Rodentia + # name: species-name-rodentia + # text: "/ServerInfo/Guidebook/Mobs/DeltaV/Rodentia.xml" diff --git a/Resources/Prototypes/DeltaV/Species/rodentia.yml b/Resources/Prototypes/DeltaV/Species/rodentia.yml index 4916af1fe7d..3e463c5aaa7 100644 --- a/Resources/Prototypes/DeltaV/Species/rodentia.yml +++ b/Resources/Prototypes/DeltaV/Species/rodentia.yml @@ -1,7 +1,7 @@ - type: species id: Rodentia name: species-name-rodentia - roundStart: true + roundStart: false # Frontier - off prototype: MobRodentia sprites: MobRodentiaSprites defaultSkinTone: "#747474" diff --git a/Resources/Prototypes/Guidebook/species.yml b/Resources/Prototypes/Guidebook/species.yml index 81f0a65993f..230dbe98725 100644 --- a/Resources/Prototypes/Guidebook/species.yml +++ b/Resources/Prototypes/Guidebook/species.yml @@ -16,7 +16,7 @@ - Harpy # DeltaV - Felinid # DeltaV - Oni # DeltaV - - Rodentia # DeltaV +# - Rodentia # DeltaV - type: guideEntry id: Arachnid diff --git a/Resources/Prototypes/Species/species_weights.yml b/Resources/Prototypes/Species/species_weights.yml index b19f0eefe4f..f021d6a8ec2 100644 --- a/Resources/Prototypes/Species/species_weights.yml +++ b/Resources/Prototypes/Species/species_weights.yml @@ -12,6 +12,6 @@ Oni: 2 # Frontier Dwarf: 2 Diona: 2 - Rodentia: 2 # DeltaV - Rodentia, see Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml +# Rodentia: 2 # DeltaV - Rodentia, see Prototypes/DeltaV/Entities/Mobs/Species/rodentia.yml Goblin: 2 # Frontier Harpy: 1 # Frontier diff --git a/Resources/Prototypes/_NF/Entities/Mobs/Species/goblin.yml b/Resources/Prototypes/_NF/Entities/Mobs/Species/goblin.yml index e65a9e6b0d5..1ecff17d73e 100644 --- a/Resources/Prototypes/_NF/Entities/Mobs/Species/goblin.yml +++ b/Resources/Prototypes/_NF/Entities/Mobs/Species/goblin.yml @@ -105,6 +105,8 @@ - !type:Emote emote: Scream probability: 0.2 + - type: Rummager # DeltaV Code + - type: AlwaysTriggerMousetrap # DeltaV Code - type: entity save: false diff --git a/Resources/ServerInfo/Guidebook/Mobs/DeltaV/Rodentia.xml b/Resources/ServerInfo/Guidebook/Mobs/DeltaV/Rodentia.xml index 7c1f8bde141..b0aef744966 100644 --- a/Resources/ServerInfo/Guidebook/Mobs/DeltaV/Rodentia.xml +++ b/Resources/ServerInfo/Guidebook/Mobs/DeltaV/Rodentia.xml @@ -20,7 +20,7 @@ ## Special - - Can Rummage in disposal chutes, which can sometimes dig up food. + - Can Rummage in disposal chutes, which can dig up trash. - Can store small items in their cheeks. Having items in their mouth makes their speech unintelligible, and they will drop all items in their mouth if attacked, stunned, or shoved. - Can "sneak" underneath tables, but not doors. diff --git a/Resources/ServerInfo/Guidebook/Mobs/Species.xml b/Resources/ServerInfo/Guidebook/Mobs/Species.xml index 8eb44abe310..5274409fcbf 100644 --- a/Resources/ServerInfo/Guidebook/Mobs/Species.xml +++ b/Resources/ServerInfo/Guidebook/Mobs/Species.xml @@ -26,7 +26,7 @@ - + diff --git a/Resources/ServerInfo/_NF/Guidebook/Mobs/Goblin.xml b/Resources/ServerInfo/_NF/Guidebook/Mobs/Goblin.xml index c7236cddbd5..02d8e7fe497 100644 --- a/Resources/ServerInfo/_NF/Guidebook/Mobs/Goblin.xml +++ b/Resources/ServerInfo/_NF/Guidebook/Mobs/Goblin.xml @@ -5,10 +5,25 @@ - Their small stature allows goblins to dive into toilets and mailing units. They don't like to be sprayed with water or space cleaner. + Goblins are a race of humanoid beings, small, very loud and fragile. - When unarmed, their claws deal [color=red]Slash[/color] damage instead of Blunt. + ## Benefits - Due to their unusual dietary choices goblins take [color=lime]20% less Toxin damage[/color], but because of their small size they take [color=#ffa500]10% more Brute (Blunt/Slash/Piercing) damage[/color]. + - Due to their unusual dietary choices goblins take [color=lime]25% less Toxin damage[/color], + - When unarmed, their claws deal [color=red]Slash[/color] damage instead of Blunt. + - Smaller than humans. + - Can fit in duffelbags. + + ## Special + + - Can Rummage in disposal chutes, which can dig up trash. + - Their small stature allows goblins to dive into toilets and mailing units. + - Uniqe chants and goblin speak. + + ## Drawbacks + + - Because of their small size they take [color=#ffa500]20% more Brute (Blunt/Slash/Piercing) damage[/color]. + - Always triggers mousetraps, regardless of whether or not they are wearing shoes. + - They don't like to be sprayed with water or space cleaner. From 3011ca9490bf0129587568f7a6f35cc8b79fbb58 Mon Sep 17 00:00:00 2001 From: Whatstone Date: Mon, 30 Sep 2024 10:38:48 -0400 Subject: [PATCH 9/9] Rummager cooldown (30s), goblin guidebook rewrite --- .../DeltaV/Abilities/RummagerComponent.cs | 19 ++++++++++++++++++- Content.Shared/RatKing/SharedRatKingSystem.cs | 18 +++++++++++++++--- .../Storage/EntitySystems/DumpableSystem.cs | 4 ++-- .../ServerInfo/_NF/Guidebook/Mobs/Goblin.xml | 11 ++++++----- 4 files changed, 41 insertions(+), 11 deletions(-) diff --git a/Content.Shared/DeltaV/Abilities/RummagerComponent.cs b/Content.Shared/DeltaV/Abilities/RummagerComponent.cs index 0aa1b8f6732..59914b2fa3d 100644 --- a/Content.Shared/DeltaV/Abilities/RummagerComponent.cs +++ b/Content.Shared/DeltaV/Abilities/RummagerComponent.cs @@ -2,4 +2,21 @@ namespace Content.Shared.Abilities; [RegisterComponent, NetworkedComponent] -public sealed partial class RummagerComponent : Component; +[AutoGenerateComponentState] +public sealed partial class RummagerComponent : Component +{ + // Frontier: cooldowns per-rummager + /// + /// Frontier: Last time this entity has rummaged, used to check if cooldown has expired + /// + [ViewVariables] + public TimeSpan? LastRummaged; + + /// + // Frontier: Minimum time between this entity's rummage attempts + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + [AutoNetworkedField] + public TimeSpan Cooldown = TimeSpan.FromSeconds(30.0f); + // End Frontier +} diff --git a/Content.Shared/RatKing/SharedRatKingSystem.cs b/Content.Shared/RatKing/SharedRatKingSystem.cs index dc8d2b8909d..d15cf8ce066 100644 --- a/Content.Shared/RatKing/SharedRatKingSystem.cs +++ b/Content.Shared/RatKing/SharedRatKingSystem.cs @@ -37,6 +37,7 @@ public override void Initialize() SubscribeLocalEvent(OnDoAfterComplete); SubscribeLocalEvent(OnComponentInit); // Goobstation - #660 + SubscribeLocalEvent(OnRummgerComponentInit); // Frontier } private void OnStartup(EntityUid uid, RatKingComponent component, ComponentStartup args) @@ -114,11 +115,18 @@ public void OnComponentInit(EntityUid uid, RatKingRummageableComponent component Dirty(uid, component); } + public void OnRummgerComponentInit(EntityUid uid, RummagerComponent component, ComponentInit args) // Frontier - per-rummager cooldown + { + component.LastRummaged = _gameTiming.CurTime; + Dirty(uid, component); + } + private void OnGetVerb(EntityUid uid, RatKingRummageableComponent component, GetVerbsEvent args) { - if (!HasComp(args.User) + if (!TryComp(args.User, out var rummager) || component.Looted - || _gameTiming.CurTime < component.LastLooted + component.RummageCooldown) + || _gameTiming.CurTime < component.LastLooted + component.RummageCooldown + || _gameTiming.CurTime < rummager.LastRummaged + rummager.Cooldown) // Frontier: cooldown per rummager // DeltaV - Use RummagerComponent instead of RatKingComponent // (This is so we can give Rodentia rummage abilities) // Additionally, adds a cooldown check @@ -151,11 +159,15 @@ private void OnDoAfterComplete(EntityUid uid, RatKingRummageableComponent compon var time = _gameTiming.CurTime; if (args.Cancelled || component.Looted - || time < component.LastLooted + component.RummageCooldown) + || time < component.LastLooted + component.RummageCooldown + || !TryComp(args.User, out var rummager) // Frontier: must be a rummager (also, verify cooldowns) + || time < rummager.LastRummaged + rummager.Cooldown) // Frontier: check cooldown return; component.LastLooted = time; // End DeltaV change + rummager.LastRummaged = time; // Frontier: set rummager cooldown + Dirty(uid, component); _audio.PlayPredicted(component.Sound, uid, args.User); diff --git a/Content.Shared/Storage/EntitySystems/DumpableSystem.cs b/Content.Shared/Storage/EntitySystems/DumpableSystem.cs index 6ebbef171de..c29dc5c6e7f 100644 --- a/Content.Shared/Storage/EntitySystems/DumpableSystem.cs +++ b/Content.Shared/Storage/EntitySystems/DumpableSystem.cs @@ -140,10 +140,10 @@ private void StartDoAfter(EntityUid storageUid, EntityUid targetUid, EntityUid u private void OnDoAfter(EntityUid uid, DumpableComponent component, DumpableDoAfterEvent args) { - if (args.Handled || args.Cancelled) + if (args.Handled || args.Cancelled) // DeltaV: conditions pushed into DumpContents return; - DumpContents(uid, args.Args.Target, args.Args.User, component); + DumpContents(uid, args.Args.Target, args.Args.User, component); // DeltaV } // DeltaV: Refactor to allow dumping that doesn't require a verb diff --git a/Resources/ServerInfo/_NF/Guidebook/Mobs/Goblin.xml b/Resources/ServerInfo/_NF/Guidebook/Mobs/Goblin.xml index 02d8e7fe497..1d93c210852 100644 --- a/Resources/ServerInfo/_NF/Guidebook/Mobs/Goblin.xml +++ b/Resources/ServerInfo/_NF/Guidebook/Mobs/Goblin.xml @@ -5,7 +5,7 @@ - Goblins are a race of humanoid beings, small, very loud and fragile. + Goblins are a race of humanoid beings. They tend to be small, very loud and fragile. ## Benefits @@ -16,14 +16,15 @@ ## Special - - Can Rummage in disposal chutes, which can dig up trash. - - Their small stature allows goblins to dive into toilets and mailing units. - - Uniqe chants and goblin speak. + - Can rummage in disposal chutes to dig up trash. + - Can dive into toilets and mailing units because of their small size. + - Unique chants. + - Inherently speak in Goblin Cant. ## Drawbacks - Because of their small size they take [color=#ffa500]20% more Brute (Blunt/Slash/Piercing) damage[/color]. - - Always triggers mousetraps, regardless of whether or not they are wearing shoes. + - Always triggers mousetraps, even when wearing shoes. - They don't like to be sprayed with water or space cleaner.