diff --git a/Content.Client/_DEN/Tool/EntitySystems/ToolOrganSystem.cs b/Content.Client/_DEN/Tool/EntitySystems/ToolOrganSystem.cs
new file mode 100644
index 0000000000..dc6e782190
--- /dev/null
+++ b/Content.Client/_DEN/Tool/EntitySystems/ToolOrganSystem.cs
@@ -0,0 +1,6 @@
+using Content.Shared._DEN.Tool.Components;
+
+namespace Content.Client._DEN.Tool.Components;
+
+public sealed partial class ToolOrganSystem : SharedToolOrganSystem
+{ }
diff --git a/Content.Server/_DEN/Tool/EntitySystems/ToolOrganSystem.cs b/Content.Server/_DEN/Tool/EntitySystems/ToolOrganSystem.cs
new file mode 100644
index 0000000000..038777af82
--- /dev/null
+++ b/Content.Server/_DEN/Tool/EntitySystems/ToolOrganSystem.cs
@@ -0,0 +1,6 @@
+using Content.Shared._DEN.Tool.Components;
+
+namespace Content.Server._DEN.Tool.Components;
+
+public sealed partial class ToolOrganSystem : SharedToolOrganSystem
+{ }
diff --git a/Content.Shared/Nutrition/Components/HungerComponent.cs b/Content.Shared/Nutrition/Components/HungerComponent.cs
index d5db991b1a..87a1bf037d 100644
--- a/Content.Shared/Nutrition/Components/HungerComponent.cs
+++ b/Content.Shared/Nutrition/Components/HungerComponent.cs
@@ -34,7 +34,7 @@ public sealed partial class HungerComponent : Component
///
/// Any time this is modified, should be called.
[DataField("baseDecayRate"), ViewVariables(VVAccess.ReadWrite)]
- public float BaseDecayRate = 0.01666666666f;
+ public float BaseDecayRate = BaseHumanoidHungerRate; // DEN: 0.01666666666f -> BaseHumanoidHungerRate
///
/// The actual amount at which decays.
diff --git a/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs b/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs
index b28455b02e..021c4eb9a6 100644
--- a/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs
+++ b/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs
@@ -158,6 +158,7 @@ private void DoHungerThresholdEffects(EntityUid uid, HungerComponent? component
if (component.HungerThresholdDecayModifiers.TryGetValue(component.CurrentThreshold, out var modifier))
{
component.ActualDecayRate = component.BaseDecayRate * modifier;
+ component.ActualDecayRate *= component.DecayRateMultiplier; // DEN - Decay rate multipliers
DirtyField(uid, component, nameof(HungerComponent.ActualDecayRate));
SetAuthoritativeHungerValue((uid, component), GetHunger(component));
}
diff --git a/Content.Shared/_DEN/Nutrition/Components/HungerComponent.cs b/Content.Shared/_DEN/Nutrition/Components/HungerComponent.cs
new file mode 100644
index 0000000000..b008651caa
--- /dev/null
+++ b/Content.Shared/_DEN/Nutrition/Components/HungerComponent.cs
@@ -0,0 +1,38 @@
+using Content.Shared.Nutrition.EntitySystems;
+
+namespace Content.Shared.Nutrition.Components;
+
+public sealed partial class HungerComponent : Component
+{
+ ///
+ /// How many tick intervals () it takes to drop hunger by
+ ///
+ public const float HungerDropTimeInIntervals = 50.0f;
+
+ ///
+ /// Amount of hunger lost in .
+ ///
+ public const float HungerDropAmount = 50.0f;
+
+ ///
+ /// How many ticks per "tick interval". 60 ticks at 1 tick / second = 1 minute.
+ ///
+ ///
+ /// This is a bad way of doing it but the better way is a huge breaking change
+ ///
+ private const float DropTickInterval = 60.0f;
+
+ ///
+ /// The hunger rate that humanoid species are balanced around.
+ ///
+ private static readonly float BaseHumanoidHungerRate = HungerDropAmount / (HungerDropTimeInIntervals * DropTickInterval);
+
+ ///
+ /// A flat multiplier applied to .
+ ///
+ ///
+ /// This value ideally should not change - this is to make species code more intuitive to write.
+ ///
+ [DataField, Access(typeof(HungerSystem), Friend = AccessPermissions.Read)]
+ public float DecayRateMultiplier = 1.0f;
+}
diff --git a/Content.Shared/_DEN/Tool/Components/ToolOrganComponent.cs b/Content.Shared/_DEN/Tool/Components/ToolOrganComponent.cs
new file mode 100644
index 0000000000..57040b102c
--- /dev/null
+++ b/Content.Shared/_DEN/Tool/Components/ToolOrganComponent.cs
@@ -0,0 +1,68 @@
+using Robust.Shared.Containers;
+using Robust.Shared.GameStates;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared._DEN.Tool.Components;
+
+///
+/// An organ that contains an entity representing a specific capability of the organ.
+/// For example: giving an organ a "sharp" tool if you want this organ to be usable for cutting.
+///
+[RegisterComponent]
+[NetworkedComponent, AutoGenerateComponentState]
+public sealed partial class ToolOrganComponent : Component
+{
+ ///
+ /// Whether or not tool interactions are enabled.
+ ///
+ [DataField, AutoNetworkedField]
+ public bool IsToolEnabled = false;
+
+ ///
+ /// The string ID used for the item container.
+ ///
+ [DataField]
+ public string ContainerId = "toggleable_tool";
+
+ ///
+ /// Text displayed when the action is enabled.
+ ///
+ [DataField]
+ public LocId? ToggleOnText = "action-popup-tool-interaction-enabled";
+
+ ///
+ /// Text displayed when the action is disabled.
+ ///
+ [DataField]
+ public LocId? ToggleOffText = "action-popup-tool-interaction-disabled";
+
+ ///
+ /// The entity to use for the toggle action.
+ ///
+ [DataField]
+ public EntProtoId ToolToggleAction = "ActionToolInteractionToggle";
+
+ ///
+ /// The entity to put in the mob's hand when this is toggled.
+ ///
+ [DataField(required: true)]
+ public EntProtoId Item = string.Empty;
+
+ ///
+ /// The entity representing the toggle action.
+ ///
+ [DataField, AutoNetworkedField]
+ public EntityUid? ToolToggleActionEntity;
+
+ ///
+ /// The container holding the tool item.
+ ///
+ [ViewVariables]
+ public Container? ItemContainer;
+
+ ///
+ /// The entity representing the toggleable item.
+ ///
+ [ViewVariables]
+ public EntityUid? ItemEntity;
+}
diff --git a/Content.Shared/_DEN/Tool/Components/ToolOrganPerformerComponent.cs b/Content.Shared/_DEN/Tool/Components/ToolOrganPerformerComponent.cs
new file mode 100644
index 0000000000..48b47ca53e
--- /dev/null
+++ b/Content.Shared/_DEN/Tool/Components/ToolOrganPerformerComponent.cs
@@ -0,0 +1,9 @@
+
+namespace Content.Shared._DEN.Tool.Components;
+
+///
+/// Represents an entity that can use s.
+///
+[RegisterComponent]
+public sealed partial class ToolOrganPerformerComponent : Component
+{ }
diff --git a/Content.Shared/_DEN/Tool/EntitySystems/SharedToolOrganSystem.cs b/Content.Shared/_DEN/Tool/EntitySystems/SharedToolOrganSystem.cs
new file mode 100644
index 0000000000..8eb853af24
--- /dev/null
+++ b/Content.Shared/_DEN/Tool/EntitySystems/SharedToolOrganSystem.cs
@@ -0,0 +1,149 @@
+using Content.Shared.Actions;
+using Content.Shared.Body;
+using Content.Shared.CombatMode;
+using Content.Shared.Inventory.VirtualItem;
+using Content.Shared.Popups;
+using Robust.Shared.Containers;
+using Robust.Shared.Utility;
+
+namespace Content.Shared._DEN.Tool.Components;
+
+///
+/// System logic for organs that contain pseudo-tools.
+/// Using these tools is toggled via action.
+///
+public abstract partial class SharedToolOrganSystem : EntitySystem
+{
+ [Dependency] private SharedActionsSystem _actions = default!;
+ [Dependency] private BodySystem _body = default!;
+ [Dependency] private SharedCombatModeSystem _combatMode = default!;
+ [Dependency] private SharedContainerSystem _container = default!;
+ [Dependency] private SharedVirtualItemSystem _virtualItem = default!;
+ [Dependency] private SharedPopupSystem _popup = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(_body.RelayEvent);
+
+ SubscribeLocalEvent(OnComponentInit);
+ SubscribeLocalEvent(OnOrganGotInserted);
+ SubscribeLocalEvent(OnOrganRemoved);
+ SubscribeLocalEvent>(OnGetToolOrgan);
+
+ SubscribeLocalEvent(OnPerformAction);
+ }
+
+ private void OnComponentInit(Entity ent, ref ComponentInit args)
+ {
+ ent.Comp.ItemContainer = _container.EnsureContainer(ent.Owner, ent.Comp.ContainerId);
+
+ var toolEnt = PredictedSpawnAtPosition(ent.Comp.Item, Transform(ent.Owner).Coordinates);
+ if (!_container.Insert(toolEnt, ent.Comp.ItemContainer))
+ {
+ DebugTools.Assert($"Could not insert {ToPrettyString(toolEnt)} into {ToPrettyString(ent)}. This is likely due to broken YAML!");
+ PredictedDel(toolEnt);
+ }
+ else
+ ent.Comp.ItemEntity = toolEnt;
+
+ Dirty(ent);
+ }
+
+ private void OnOrganGotInserted(Entity ent, ref OrganGotInsertedEvent args)
+ {
+ _actions.AddAction(args.Target, ref ent.Comp.ToolToggleActionEntity, ent.Comp.ToolToggleAction);
+ EnsureComp(ent.Owner);
+ Dirty(ent);
+ }
+
+ private void OnOrganRemoved(Entity ent, ref OrganGotRemovedEvent args)
+ {
+ _actions.RemoveAction(args.Target, ent.Comp.ToolToggleActionEntity);
+ TrySetToolInteractionEnabled(ent.Owner, false);
+ Dirty(ent);
+ }
+
+ private void OnPerformAction(Entity ent, ref ToggleToolInteractionActionEvent args)
+ {
+ if (args.Handled)
+ return;
+
+ var ev = new GetToolOrganEvent(Action: args.Action, Mob: ent.Owner);
+ RaiseLocalEvent(ent.Owner, ref ev);
+
+ if (ev.Handled)
+ args.Handled = true;
+ }
+
+ private void OnGetToolOrgan(Entity ent, ref BodyRelayedEvent args)
+ {
+ if (args.Args.Handled || args.Args.Action != ent.Comp.ToolToggleActionEntity)
+ return;
+
+ var mob = args.Args.Mob;
+ var value = !ent.Comp.IsToolEnabled;
+ if (!TrySetToolInteractionEnabled(ent.AsNullable(), value, mob))
+ return;
+
+ // Display message when toggled.
+ var msgLocId = value ? ent.Comp.ToggleOnText : ent.Comp.ToggleOffText;
+ if (msgLocId != null)
+ _popup.PopupClient(Loc.GetString(msgLocId), mob, mob);
+
+ args.Args = args.Args with { Handled = true };
+ }
+
+ ///
+ /// Sets whether or not this entity can use their empty-hand interactions to perform tool actions.
+ ///
+ /// The entity to set tool interaction status.
+ /// If tool interactions should be enabled.
+ public bool TrySetToolInteractionEnabled(Entity ent, bool enabled, EntityUid? mob = null)
+ {
+ if (!Resolve(ent.Owner, ref ent.Comp) // Not a tool organ
+ || ent.Comp.IsToolEnabled == enabled // Value is already set to this
+ || ent.Comp.ItemEntity == null // No tool entity
+ || TerminatingOrDeleted(ent.Comp.ItemEntity) // Tool entity is being deleted
+ || !TryComp(ent.Owner, out var organ) // Not an organ
+ || organ.Body == null) // Not attached to a mob
+ return false;
+
+ mob ??= organ.Body.Value;
+ var toolEnt = ent.Comp.ItemEntity.Value;
+
+ // Put the entity in your hands as a virtual entity
+ if (enabled && !_virtualItem.TrySpawnVirtualItemInHand(toolEnt, mob.Value, dropOthers: false))
+ return false;
+ else if (!enabled)
+ _virtualItem.DeleteInHandsMatching(mob.Value, toolEnt);
+
+ // Set the enabled state of the tool
+ ent.Comp.IsToolEnabled = enabled;
+ Dirty(ent);
+
+ if (ent.Comp.ToolToggleActionEntity != null)
+ _actions.SetToggled(ent.Comp.ToolToggleActionEntity, enabled);
+
+ if (enabled && TryComp(mob, out var combatMode))
+ _combatMode.SetInCombatMode(mob.Value, false, combatMode);
+
+ return true;
+ }
+}
+
+///
+/// Event fired when the "toggle tool interaction" action is used.
+///
+public sealed partial class ToggleToolInteractionActionEvent : InstantActionEvent
+{ }
+
+///
+/// Event fired to attempt to get the appropriate tool entity when it is toggled on.
+///
+/// The mob that is using this tool entity.
+/// The action that triggered this.
+/// Whether or not this event has been handled.
+[ByRefEvent]
+public record struct GetToolOrganEvent(EntityUid Action, EntityUid Mob, bool Handled = false);
diff --git a/Resources/Locale/en-US/_DEN/datasets/names/rodentia_first_female.ftl b/Resources/Locale/en-US/_DEN/datasets/names/rodentia_first_female.ftl
new file mode 100644
index 0000000000..25f02ec89a
--- /dev/null
+++ b/Resources/Locale/en-US/_DEN/datasets/names/rodentia_first_female.ftl
@@ -0,0 +1,166 @@
+# generic names
+names-rodentia-first-female-dataset-1 = Squeaks
+names-rodentia-first-female-dataset-2 = Squeaker
+names-rodentia-first-female-dataset-3 = Nibbles
+names-rodentia-first-female-dataset-4 = Pebbles
+names-rodentia-first-female-dataset-5 = Peanut
+names-rodentia-first-female-dataset-6 = Pinky
+names-rodentia-first-female-dataset-7 = Gadget
+names-rodentia-first-female-dataset-8 = Scurry
+names-rodentia-first-female-dataset-9 = Scamper
+names-rodentia-first-female-dataset-10 = Chitters
+names-rodentia-first-female-dataset-11 = Quill
+names-rodentia-first-female-dataset-12 = Whiskers
+names-rodentia-first-female-dataset-13 = Wiggles
+names-rodentia-first-female-dataset-14 = Button
+names-rodentia-first-female-dataset-15 = Sniffles
+names-rodentia-first-female-dataset-16 = Chip
+names-rodentia-first-female-dataset-17 = Pipsqueak
+names-rodentia-first-female-dataset-18 = Nugget
+names-rodentia-first-female-dataset-19 = Comet
+names-rodentia-first-female-dataset-20 = Dash
+names-rodentia-first-female-dataset-21 = Fudge
+names-rodentia-first-female-dataset-22 = Noodle
+names-rodentia-first-female-dataset-23 = Spud
+names-rodentia-first-female-dataset-24 = Muffin
+names-rodentia-first-female-dataset-25 = Sprout
+names-rodentia-first-female-dataset-26 = Jelly
+names-rodentia-first-female-dataset-27 = Fuzz
+names-rodentia-first-female-dataset-28 = Cheddar
+names-rodentia-first-female-dataset-29 = Tootsie
+names-rodentia-first-female-dataset-30 = Pickle
+names-rodentia-first-female-dataset-31 = Berry
+
+# gender-neutral
+names-rodentia-first-female-dataset-32 = Alex
+names-rodentia-first-female-dataset-33 = Riley
+names-rodentia-first-female-dataset-34 = Taylor
+names-rodentia-first-female-dataset-35 = Jordan
+names-rodentia-first-female-dataset-36 = Casey
+names-rodentia-first-female-dataset-37 = Avery
+names-rodentia-first-female-dataset-38 = Morgan
+names-rodentia-first-female-dataset-39 = Jamie
+names-rodentia-first-female-dataset-40 = Quinn
+names-rodentia-first-female-dataset-41 = Charlie
+names-rodentia-first-female-dataset-42 = Dakota
+names-rodentia-first-female-dataset-43 = Sydney
+names-rodentia-first-female-dataset-44 = Parker
+names-rodentia-first-female-dataset-45 = Cameron
+names-rodentia-first-female-dataset-46 = Finley
+names-rodentia-first-female-dataset-47 = Robin
+names-rodentia-first-female-dataset-48 = Emery
+names-rodentia-first-female-dataset-49 = Kendall
+names-rodentia-first-female-dataset-50 = Rowan
+names-rodentia-first-female-dataset-51 = Sawyer
+names-rodentia-first-female-dataset-52 = Bailey
+names-rodentia-first-female-dataset-53 = Jaden
+names-rodentia-first-female-dataset-54 = Addison
+names-rodentia-first-female-dataset-55 = Logan
+names-rodentia-first-female-dataset-56 = Devon
+names-rodentia-first-female-dataset-57 = Lane
+names-rodentia-first-female-dataset-58 = Blair
+names-rodentia-first-female-dataset-59 = Drew
+names-rodentia-first-female-dataset-60 = Jesse
+names-rodentia-first-female-dataset-61 = Skylar
+names-rodentia-first-female-dataset-62 = Sam
+names-rodentia-first-female-dataset-63 = Reese
+names-rodentia-first-female-dataset-64 = Terry
+names-rodentia-first-female-dataset-65 = Marley
+names-rodentia-first-female-dataset-66 = Elliot
+names-rodentia-first-female-dataset-67 = Harper
+names-rodentia-first-female-dataset-68 = Jules
+names-rodentia-first-female-dataset-69 = Ren
+names-rodentia-first-female-dataset-70 = Sloane
+names-rodentia-first-female-dataset-71 = Rylan
+names-rodentia-first-female-dataset-72 = Sage
+
+# feminine names
+names-rodentia-first-female-dataset-73 = Minnie
+names-rodentia-first-female-dataset-74 = Daisy
+names-rodentia-first-female-dataset-75 = Bella
+names-rodentia-first-female-dataset-76 = Luna
+names-rodentia-first-female-dataset-77 = Rosie
+names-rodentia-first-female-dataset-78 = Mia
+names-rodentia-first-female-dataset-79 = Lily
+names-rodentia-first-female-dataset-80 = Chloe
+names-rodentia-first-female-dataset-81 = Sophie
+names-rodentia-first-female-dataset-82 = Ruby
+names-rodentia-first-female-dataset-83 = Zoe
+names-rodentia-first-female-dataset-84 = Abby
+names-rodentia-first-female-dataset-85 = Ella
+names-rodentia-first-female-dataset-86 = Molly
+names-rodentia-first-female-dataset-87 = Lucy
+names-rodentia-first-female-dataset-88 = Nala
+names-rodentia-first-female-dataset-89 = Poppy
+names-rodentia-first-female-dataset-90 = Grace
+names-rodentia-first-female-dataset-91 = Ivy
+names-rodentia-first-female-dataset-92 = Hazel
+names-rodentia-first-female-dataset-93 = Emma
+names-rodentia-first-female-dataset-94 = Phoebe
+names-rodentia-first-female-dataset-95 = Willow
+names-rodentia-first-female-dataset-96 = Tilly
+names-rodentia-first-female-dataset-97 = Annie
+names-rodentia-first-female-dataset-98 = Alice
+names-rodentia-first-female-dataset-99 = Holly
+names-rodentia-first-female-dataset-100 = Olive
+names-rodentia-first-female-dataset-101 = Zoey
+names-rodentia-first-female-dataset-102 = Lila
+names-rodentia-first-female-dataset-103 = Pippa
+names-rodentia-first-female-dataset-104 = June
+names-rodentia-first-female-dataset-105 = Mabel
+names-rodentia-first-female-dataset-106 = Nellie
+names-rodentia-first-female-dataset-107 = Polly
+names-rodentia-first-female-dataset-108 = Sadie
+names-rodentia-first-female-dataset-109 = Isla
+
+# "surnames"
+names-rodentia-first-female-dataset-110 = Bramblewood
+names-rodentia-first-female-dataset-111 = Burrows
+names-rodentia-first-female-dataset-112 = Burrowsford
+names-rodentia-first-female-dataset-113 = Cheesetail
+names-rodentia-first-female-dataset-114 = Cloverfield
+names-rodentia-first-female-dataset-115 = Cloverwood
+names-rodentia-first-female-dataset-116 = Ferncroft
+names-rodentia-first-female-dataset-117 = Flopshire
+names-rodentia-first-female-dataset-118 = Flopshire
+names-rodentia-first-female-dataset-119 = Fluffbottom
+names-rodentia-first-female-dataset-120 = Furrington
+names-rodentia-first-female-dataset-121 = Furwell
+names-rodentia-first-female-dataset-122 = Furwood
+names-rodentia-first-female-dataset-123 = Gnawson
+names-rodentia-first-female-dataset-124 = Linden
+names-rodentia-first-female-dataset-125 = Little
+names-rodentia-first-female-dataset-126 = Maplewood
+names-rodentia-first-female-dataset-127 = Meadows
+names-rodentia-first-female-dataset-128 = Munchford
+names-rodentia-first-female-dataset-129 = Nibblesnout
+names-rodentia-first-female-dataset-130 = Nibbleston
+names-rodentia-first-female-dataset-131 = Nibblewood
+names-rodentia-first-female-dataset-132 = Oakcroft
+names-rodentia-first-female-dataset-133 = Oakley
+names-rodentia-first-female-dataset-134 = Pawsbrook
+names-rodentia-first-female-dataset-135 = Pawsford
+names-rodentia-first-female-dataset-136 = Pawsley
+names-rodentia-first-female-dataset-137 = Pawswell
+names-rodentia-first-female-dataset-138 = Pawsworth
+names-rodentia-first-female-dataset-139 = Scamperdale
+names-rodentia-first-female-dataset-140 = Scamperford
+names-rodentia-first-female-dataset-141 = Scamperley
+names-rodentia-first-female-dataset-142 = Scamperwood
+names-rodentia-first-female-dataset-143 = Scurryfoot
+names-rodentia-first-female-dataset-144 = Scuttleby
+names-rodentia-first-female-dataset-145 = Skitters
+names-rodentia-first-female-dataset-146 = Stilton
+names-rodentia-first-female-dataset-147 = Squeakerton
+names-rodentia-first-female-dataset-148 = Squeakson
+names-rodentia-first-female-dataset-149 = Squeaktooth
+names-rodentia-first-female-dataset-150 = Squeakwell
+names-rodentia-first-female-dataset-151 = Squeakwood
+names-rodentia-first-female-dataset-152 = Tailsbury
+names-rodentia-first-female-dataset-153 = Thumperton
+names-rodentia-first-female-dataset-154 = Thumpford
+names-rodentia-first-female-dataset-155 = Whiskerby
+names-rodentia-first-female-dataset-156 = Whiskerfield
+names-rodentia-first-female-dataset-157 = Whiskershire
+names-rodentia-first-female-dataset-158 = Whiskersnout
+names-rodentia-first-female-dataset-159 = Whiskervale
diff --git a/Resources/Locale/en-US/_DEN/datasets/names/rodentia_first_male.ftl b/Resources/Locale/en-US/_DEN/datasets/names/rodentia_first_male.ftl
new file mode 100644
index 0000000000..ee49397d8e
--- /dev/null
+++ b/Resources/Locale/en-US/_DEN/datasets/names/rodentia_first_male.ftl
@@ -0,0 +1,183 @@
+# generic names
+names-rodentia-first-male-dataset-1 = Squeaks
+names-rodentia-first-male-dataset-2 = Squeaker
+names-rodentia-first-male-dataset-3 = Nibbles
+names-rodentia-first-male-dataset-4 = Pebbles
+names-rodentia-first-male-dataset-5 = Peanut
+names-rodentia-first-male-dataset-6 = Pinky
+names-rodentia-first-male-dataset-7 = Gadget
+names-rodentia-first-male-dataset-8 = Scurry
+names-rodentia-first-male-dataset-9 = Scamper
+names-rodentia-first-male-dataset-10 = Chitters
+names-rodentia-first-male-dataset-11 = Quill
+names-rodentia-first-male-dataset-12 = Whiskers
+names-rodentia-first-male-dataset-13 = Wiggles
+names-rodentia-first-male-dataset-14 = Button
+names-rodentia-first-male-dataset-15 = Sniffles
+names-rodentia-first-male-dataset-16 = Chip
+names-rodentia-first-male-dataset-17 = Pipsqueak
+names-rodentia-first-male-dataset-18 = Nugget
+names-rodentia-first-male-dataset-19 = Comet
+names-rodentia-first-male-dataset-20 = Dash
+names-rodentia-first-male-dataset-21 = Fudge
+names-rodentia-first-male-dataset-22 = Noodle
+names-rodentia-first-male-dataset-23 = Spud
+names-rodentia-first-male-dataset-24 = Muffin
+names-rodentia-first-male-dataset-25 = Sprout
+names-rodentia-first-male-dataset-26 = Jelly
+names-rodentia-first-male-dataset-27 = Fuzz
+names-rodentia-first-male-dataset-28 = Cheddar
+names-rodentia-first-male-dataset-29 = Tootsie
+names-rodentia-first-male-dataset-30 = Pickle
+names-rodentia-first-male-dataset-31 = Berry
+
+# gender-neutral
+names-rodentia-first-male-dataset-32 = Alex
+names-rodentia-first-male-dataset-33 = Riley
+names-rodentia-first-male-dataset-34 = Taylor
+names-rodentia-first-male-dataset-35 = Jordan
+names-rodentia-first-male-dataset-36 = Casey
+names-rodentia-first-male-dataset-37 = Avery
+names-rodentia-first-male-dataset-38 = Morgan
+names-rodentia-first-male-dataset-39 = Jamie
+names-rodentia-first-male-dataset-40 = Quinn
+names-rodentia-first-male-dataset-41 = Charlie
+names-rodentia-first-male-dataset-42 = Dakota
+names-rodentia-first-male-dataset-43 = Sydney
+names-rodentia-first-male-dataset-44 = Parker
+names-rodentia-first-male-dataset-45 = Cameron
+names-rodentia-first-male-dataset-46 = Finley
+names-rodentia-first-male-dataset-47 = Robin
+names-rodentia-first-male-dataset-48 = Emery
+names-rodentia-first-male-dataset-49 = Kendall
+names-rodentia-first-male-dataset-50 = Rowan
+names-rodentia-first-male-dataset-51 = Sawyer
+names-rodentia-first-male-dataset-52 = Bailey
+names-rodentia-first-male-dataset-53 = Jaden
+names-rodentia-first-male-dataset-54 = Addison
+names-rodentia-first-male-dataset-55 = Logan
+names-rodentia-first-male-dataset-56 = Devon
+names-rodentia-first-male-dataset-57 = Lane
+names-rodentia-first-male-dataset-58 = Blair
+names-rodentia-first-male-dataset-59 = Drew
+names-rodentia-first-male-dataset-60 = Jesse
+names-rodentia-first-male-dataset-61 = Skylar
+names-rodentia-first-male-dataset-62 = Sam
+names-rodentia-first-male-dataset-63 = Reese
+names-rodentia-first-male-dataset-64 = Terry
+names-rodentia-first-male-dataset-65 = Marley
+names-rodentia-first-male-dataset-66 = Elliot
+names-rodentia-first-male-dataset-67 = Harper
+names-rodentia-first-male-dataset-68 = Jules
+names-rodentia-first-male-dataset-69 = Ren
+names-rodentia-first-male-dataset-70 = Sloane
+names-rodentia-first-male-dataset-71 = Rylan
+names-rodentia-first-male-dataset-72 = Sage
+
+# masculine names
+names-rodentia-first-male-dataset-73 = Basil
+names-rodentia-first-male-dataset-74 = Jerry
+names-rodentia-first-male-dataset-75 = Stuart
+names-rodentia-first-male-dataset-76 = Bert
+names-rodentia-first-male-dataset-77 = Jack
+names-rodentia-first-male-dataset-78 = Remy
+names-rodentia-first-male-dataset-79 = Geronimo
+names-rodentia-first-male-dataset-80 = Dale
+names-rodentia-first-male-dataset-81 = Flint
+names-rodentia-first-male-dataset-82 = Quincy
+names-rodentia-first-male-dataset-83 = Oliver
+names-rodentia-first-male-dataset-84 = Max
+names-rodentia-first-male-dataset-85 = Leo
+names-rodentia-first-male-dataset-86 = Milo
+names-rodentia-first-male-dataset-87 = Teddy
+names-rodentia-first-male-dataset-88 = Finn
+names-rodentia-first-male-dataset-89 = Jasper
+names-rodentia-first-male-dataset-90 = Simon
+names-rodentia-first-male-dataset-91 = Louie
+names-rodentia-first-male-dataset-92 = Toby
+names-rodentia-first-male-dataset-93 = Henry
+names-rodentia-first-male-dataset-94 = Oscar
+names-rodentia-first-male-dataset-95 = Felix
+names-rodentia-first-male-dataset-96 = George
+names-rodentia-first-male-dataset-97 = Archie
+names-rodentia-first-male-dataset-98 = Hugo
+names-rodentia-first-male-dataset-99 = Benny
+names-rodentia-first-male-dataset-100 = Eli
+names-rodentia-first-male-dataset-101 = Lucas
+names-rodentia-first-male-dataset-102 = Rufus
+names-rodentia-first-male-dataset-103 = Gus
+names-rodentia-first-male-dataset-104 = Alfie
+names-rodentia-first-male-dataset-105 = Monty
+names-rodentia-first-male-dataset-106 = Clyde
+names-rodentia-first-male-dataset-107 = Cosmo
+names-rodentia-first-male-dataset-108 = Ziggy
+names-rodentia-first-male-dataset-109 = Freddie
+names-rodentia-first-male-dataset-110 = Chester
+names-rodentia-first-male-dataset-111 = Rocco
+names-rodentia-first-male-dataset-112 = Perry
+names-rodentia-first-male-dataset-113 = Mickey
+names-rodentia-first-male-dataset-114 = Tim
+names-rodentia-first-male-dataset-115 = Chuck
+names-rodentia-first-male-dataset-116 = Frankie
+names-rodentia-first-male-dataset-117 = Willie
+names-rodentia-first-male-dataset-118 = Alvin
+names-rodentia-first-male-dataset-119 = Vinny
+names-rodentia-first-male-dataset-120 = Harvey
+names-rodentia-first-male-dataset-121 = Rudy
+names-rodentia-first-male-dataset-122 = Ollie
+names-rodentia-first-male-dataset-123 = Percy
+names-rodentia-first-male-dataset-124 = Theo
+names-rodentia-first-male-dataset-125 = Winston
+names-rodentia-first-male-dataset-126 = Ernie
+
+# "surnames"
+names-rodentia-first-male-dataset-127 = Bramblewood
+names-rodentia-first-male-dataset-128 = Burrows
+names-rodentia-first-male-dataset-129 = Burrowsford
+names-rodentia-first-male-dataset-130 = Cheesetail
+names-rodentia-first-male-dataset-131 = Cloverfield
+names-rodentia-first-male-dataset-132 = Cloverwood
+names-rodentia-first-male-dataset-133 = Ferncroft
+names-rodentia-first-male-dataset-134 = Flopshire
+names-rodentia-first-male-dataset-135 = Flopshire
+names-rodentia-first-male-dataset-136 = Fluffbottom
+names-rodentia-first-male-dataset-137 = Furrington
+names-rodentia-first-male-dataset-138 = Furwell
+names-rodentia-first-male-dataset-139 = Furwood
+names-rodentia-first-male-dataset-140 = Gnawson
+names-rodentia-first-male-dataset-141 = Linden
+names-rodentia-first-male-dataset-142 = Little
+names-rodentia-first-male-dataset-143 = Maplewood
+names-rodentia-first-male-dataset-144 = Meadows
+names-rodentia-first-male-dataset-145 = Munchford
+names-rodentia-first-male-dataset-146 = Nibblesnout
+names-rodentia-first-male-dataset-147 = Nibbleston
+names-rodentia-first-male-dataset-148 = Nibblewood
+names-rodentia-first-male-dataset-149 = Oakcroft
+names-rodentia-first-male-dataset-150 = Oakley
+names-rodentia-first-male-dataset-151 = Pawsbrook
+names-rodentia-first-male-dataset-152 = Pawsford
+names-rodentia-first-male-dataset-153 = Pawsley
+names-rodentia-first-male-dataset-154 = Pawswell
+names-rodentia-first-male-dataset-155 = Pawsworth
+names-rodentia-first-male-dataset-156 = Scamperdale
+names-rodentia-first-male-dataset-157 = Scamperford
+names-rodentia-first-male-dataset-158 = Scamperley
+names-rodentia-first-male-dataset-159 = Scamperwood
+names-rodentia-first-male-dataset-160 = Scurryfoot
+names-rodentia-first-male-dataset-161 = Scuttleby
+names-rodentia-first-male-dataset-162 = Skitters
+names-rodentia-first-male-dataset-163 = Stilton
+names-rodentia-first-male-dataset-164 = Squeakerton
+names-rodentia-first-male-dataset-165 = Squeakson
+names-rodentia-first-male-dataset-166 = Squeaktooth
+names-rodentia-first-male-dataset-167 = Squeakwell
+names-rodentia-first-male-dataset-168 = Squeakwood
+names-rodentia-first-male-dataset-169 = Tailsbury
+names-rodentia-first-male-dataset-170 = Thumperton
+names-rodentia-first-male-dataset-171 = Thumpford
+names-rodentia-first-male-dataset-172 = Whiskerby
+names-rodentia-first-male-dataset-173 = Whiskerfield
+names-rodentia-first-male-dataset-174 = Whiskershire
+names-rodentia-first-male-dataset-175 = Whiskersnout
+names-rodentia-first-male-dataset-176 = Whiskervale
diff --git a/Resources/Locale/en-US/_DEN/datasets/names/rodentia_last.ftl b/Resources/Locale/en-US/_DEN/datasets/names/rodentia_last.ftl
new file mode 100644
index 0000000000..6e04828aeb
--- /dev/null
+++ b/Resources/Locale/en-US/_DEN/datasets/names/rodentia_last.ftl
@@ -0,0 +1,86 @@
+names-rodentia-last-dataset-1 = Agile
+names-rodentia-last-dataset-2 = Beady-eyed
+names-rodentia-last-dataset-3 = Berry-picking
+names-rodentia-last-dataset-4 = Big
+names-rodentia-last-dataset-5 = Big-ears
+names-rodentia-last-dataset-6 = Big-eyed
+names-rodentia-last-dataset-7 = Big-heart
+names-rodentia-last-dataset-8 = Big-nose
+names-rodentia-last-dataset-9 = Blunt-nose
+names-rodentia-last-dataset-10 = Brave
+names-rodentia-last-dataset-11 = Break-neck
+names-rodentia-last-dataset-12 = Bright
+names-rodentia-last-dataset-13 = Bright-eyed
+names-rodentia-last-dataset-14 = Cheeky
+names-rodentia-last-dataset-15 = Crafty
+names-rodentia-last-dataset-16 = Cunning
+names-rodentia-last-dataset-17 = Curious
+names-rodentia-last-dataset-18 = Day-sleeping
+names-rodentia-last-dataset-19 = Eager
+names-rodentia-last-dataset-20 = Fast-moving
+names-rodentia-last-dataset-21 = Fast-paws
+names-rodentia-last-dataset-22 = Fat
+names-rodentia-last-dataset-23 = Fidgety
+names-rodentia-last-dataset-24 = Food-stealing
+names-rodentia-last-dataset-25 = Gentle
+names-rodentia-last-dataset-26 = Great
+names-rodentia-last-dataset-27 = Greedy
+names-rodentia-last-dataset-28 = Grumpy
+names-rodentia-last-dataset-29 = Hasty
+names-rodentia-last-dataset-30 = High-jumping
+names-rodentia-last-dataset-31 = Jumpy
+names-rodentia-last-dataset-32 = Keen
+names-rodentia-last-dataset-33 = Keen-eyes
+names-rodentia-last-dataset-34 = Light-foot
+names-rodentia-last-dataset-35 = Little
+names-rodentia-last-dataset-36 = Long
+names-rodentia-last-dataset-37 = Long-ears
+names-rodentia-last-dataset-38 = Long-legged
+names-rodentia-last-dataset-39 = Long-snout
+names-rodentia-last-dataset-40 = Long-tail
+names-rodentia-last-dataset-41 = Long-tooth
+names-rodentia-last-dataset-42 = Night-hunting
+names-rodentia-last-dataset-43 = Nimble
+names-rodentia-last-dataset-44 = No-eyes
+names-rodentia-last-dataset-45 = No-tail
+names-rodentia-last-dataset-46 = Nosy
+names-rodentia-last-dataset-47 = Quick-footed
+names-rodentia-last-dataset-48 = Quick-wits
+names-rodentia-last-dataset-49 = Quiet
+names-rodentia-last-dataset-50 = Ravenous
+names-rodentia-last-dataset-51 = Restless
+names-rodentia-last-dataset-52 = Rough
+names-rodentia-last-dataset-53 = Round-belly
+names-rodentia-last-dataset-54 = Rowdy
+names-rodentia-last-dataset-55 = Seed-stashing
+names-rodentia-last-dataset-56 = Shadow-dwelling
+names-rodentia-last-dataset-57 = Sharp
+names-rodentia-last-dataset-58 = Sharp-clawed
+names-rodentia-last-dataset-59 = Shifty
+names-rodentia-last-dataset-60 = Shiny-eyes
+names-rodentia-last-dataset-61 = Short-ears
+names-rodentia-last-dataset-62 = Short-legged
+names-rodentia-last-dataset-63 = Short-snout
+names-rodentia-last-dataset-64 = Short-tail
+names-rodentia-last-dataset-65 = Shy
+names-rodentia-last-dataset-66 = Silent
+names-rodentia-last-dataset-67 = Silver-tongue
+names-rodentia-last-dataset-68 = Skittish
+names-rodentia-last-dataset-69 = Small-ears
+names-rodentia-last-dataset-70 = Small-nose
+names-rodentia-last-dataset-71 = Sneaky
+names-rodentia-last-dataset-72 = Soft-fur
+names-rodentia-last-dataset-73 = Soft-paws
+names-rodentia-last-dataset-74 = Squeaking
+names-rodentia-last-dataset-75 = Squeaky
+names-rodentia-last-dataset-76 = Stout
+names-rodentia-last-dataset-77 = Stubborn
+names-rodentia-last-dataset-78 = Stubby
+names-rodentia-last-dataset-79 = Sweet
+names-rodentia-last-dataset-80 = Swift
+names-rodentia-last-dataset-81 = Thick-fur
+names-rodentia-last-dataset-82 = Thick-skin
+names-rodentia-last-dataset-83 = Thieving
+names-rodentia-last-dataset-84 = Trash-eating
+names-rodentia-last-dataset-85 = Tunnel-building
+names-rodentia-last-dataset-86 = Whisker-twitching
diff --git a/Resources/Locale/en-US/_DEN/species/species.ftl b/Resources/Locale/en-US/_DEN/species/species.ftl
new file mode 100644
index 0000000000..9d05943c31
--- /dev/null
+++ b/Resources/Locale/en-US/_DEN/species/species.ftl
@@ -0,0 +1 @@
+species-name-rodentia = Rodentia
diff --git a/Resources/Locale/en-US/_DEN/tool/tool-interaction-component.ftl b/Resources/Locale/en-US/_DEN/tool/tool-interaction-component.ftl
new file mode 100644
index 0000000000..391bffa470
--- /dev/null
+++ b/Resources/Locale/en-US/_DEN/tool/tool-interaction-component.ftl
@@ -0,0 +1,2 @@
+action-popup-tool-interaction-enabled = Tool interaction enabled
+action-popup-tool-interaction-disabled = Tool interaction disabled
diff --git a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml
index 2abfba6732..2dea1bb83d 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml
@@ -509,6 +509,9 @@
radius: 1.5
energy: 2.0
color: "#ad7c4b"
+ - type: Rummageable # DEN - make rummageable
+ table: !type:NestedSelector
+ tableId: RummageableVendingMachineHotDrinks
- type: entity
parent: VendingMachine
@@ -545,6 +548,9 @@
radius: 1.5
energy: 3.0
color: "#3c5eb5"
+ - type: Rummageable # DEN - make rummageable
+ table: !type:NestedSelector
+ tableId: RummageableVendingMachineCola
- type: entity
parent: VendingMachineCola
@@ -609,6 +615,9 @@
radius: 1.5
energy: 3.0
color: "#44964A"
+ - type: Rummageable # DEN - make rummageable
+ table: !type:NestedSelector
+ tableId: RummageableVendingMachineSpaceUp
- type: entity
parent: VendingMachineCola
@@ -631,6 +640,9 @@
radius: 1.5
energy: 3.0
color: "#CBC6BE"
+ - type: Rummageable # DEN - make rummageable
+ table: !type:NestedSelector
+ tableId: RummageableVendingMachineSoda
- type: entity
parent: VendingMachineCola
@@ -654,6 +666,9 @@
radius: 1.5
energy: 3.0
color: "#D3A44D"
+ - type: Rummageable # DEN - make rummageable
+ table: !type:NestedSelector
+ tableId: RummageableVendingMachineStarkist
- type: entity
parent: VendingMachine
@@ -688,6 +703,9 @@
radius: 1.5
energy: 3.0
color: "#66538F"
+ - type: Rummageable # DEN - make rummageable
+ table: !type:NestedSelector
+ tableId: RummageableVendingMachineShamblersJuice
- type: entity
parent: VendingMachine
@@ -724,6 +742,9 @@
radius: 1.5
energy: 3.0
color: "#6927C5"
+ - type: Rummageable # DEN - make rummageable
+ table: !type:NestedSelector
+ tableId: RummageableVendingMachineShamblersJuice
- type: entity
parent: VendingMachine
@@ -760,6 +781,9 @@
radius: 1.5
energy: 3.0
color: "#D82929"
+ - type: Rummageable # DEN - make rummageable
+ table: !type:NestedSelector
+ tableId: RummageableVendingMachineDrGibb
- type: entity
parent: VendingMachine
@@ -796,6 +820,9 @@
radius: 1.5
energy: 3.0
color: "#00E645"
+ - type: Rummageable # DEN - make rummageable
+ table: !type:NestedSelector
+ tableId: RummageableVendingMachineSmite
- type: entity
parent: VendingMachine
@@ -892,6 +919,9 @@
radius: 1.5
energy: 3.0
color: "#6148c7"
+ - type: Rummageable # DEN - make rummageable
+ table: !type:NestedSelector
+ tableId: RummageableVendingMachineDiscountDans
- type: entity
parent: VendingMachine
@@ -1126,6 +1156,9 @@
radius: 1.5
energy: 3.0
color: "#c73434"
+ - type: Rummageable # DEN - make rummageable
+ table: !type:NestedSelector
+ tableId: RummageableVendingMachineGetmoreChocolate
- type: entity
parent: VendingMachineSnack
@@ -1156,6 +1189,9 @@
radius: 1.5
energy: 3.0
color: "#737785"
+ - type: Rummageable # DEN - make rummageable
+ table: !type:NestedSelector
+ tableId: RummageableVendingMachineSustenance
- type: entity
parent: VendingMachineSnack
@@ -1273,6 +1309,9 @@
energy: 3.0
color: "#389690"
- type: RussianAccent
+ - type: Rummageable # DEN - make rummageable
+ table: !type:NestedSelector
+ tableId: RummageableVendingMachineBoda
- type: entity
parent: VendingMachine
@@ -1471,6 +1510,9 @@
radius: 1.5
energy: 3.0
color: "#ffe599"
+ - type: Rummageable # DEN - make rummageable
+ table: !type:NestedSelector
+ tableId: RummageableVendingMachineChang
- type: entity
parent: VendingMachine
diff --git a/Resources/Prototypes/Guidebook/species.yml b/Resources/Prototypes/Guidebook/species.yml
index c13dfa6107..b94ab7f324 100644
--- a/Resources/Prototypes/Guidebook/species.yml
+++ b/Resources/Prototypes/Guidebook/species.yml
@@ -15,6 +15,7 @@
- Human
- Moth
- Reptilian
+ - Rodentia # DEN
- SlimePerson
- Vox
- Vulpkanin
diff --git a/Resources/Prototypes/_DEN/Actions/species.yml b/Resources/Prototypes/_DEN/Actions/species.yml
new file mode 100644
index 0000000000..e59709eeb1
--- /dev/null
+++ b/Resources/Prototypes/_DEN/Actions/species.yml
@@ -0,0 +1,9 @@
+- type: entity
+ parent: ActionToolInteractionToggle
+ id: ActionGnawingToggle
+ name: "[color=cyan]Gnawing[/color]"
+ description: Use your teeth as a [color=yellow]Cutting[/color] tool.
+
+- type: entity
+ parent: [ActionGnawingToggle, ActionToolInteractionToggleOff]
+ id: ActionGnawingToggleOff
diff --git a/Resources/Prototypes/_DEN/Actions/types.yml b/Resources/Prototypes/_DEN/Actions/types.yml
new file mode 100644
index 0000000000..06db770252
--- /dev/null
+++ b/Resources/Prototypes/_DEN/Actions/types.yml
@@ -0,0 +1,22 @@
+# mental actions
+
+- type: entity
+ parent: BaseMentalAction
+ id: ActionToolInteractionToggle
+ name: "[color=cyan]Tool Interaction[/color]"
+ description: Use your empty hand as a tool
+ components:
+ - type: Action
+ icon: Interface/Actions/harmOff.png
+ iconOn: Interface/Actions/harm.png
+ priority: -90
+ - type: InstantAction
+ event: !type:ToggleToolInteractionActionEvent
+
+- type: entity
+ parent: ActionToolInteractionToggle
+ id: ActionToolInteractionToggleOff
+ components:
+ - type: Action
+ enabled: false
+ autoPopulate: false
diff --git a/Resources/Prototypes/_DEN/Body/Species/rodentia.yml b/Resources/Prototypes/_DEN/Body/Species/rodentia.yml
new file mode 100644
index 0000000000..402a0a6b9c
--- /dev/null
+++ b/Resources/Prototypes/_DEN/Body/Species/rodentia.yml
@@ -0,0 +1,251 @@
+- type: markingsGroup
+ parent: Undergarments
+ id: Rodentia
+ limits:
+ enum.HumanoidVisualLayers.Hair:
+ limit: 1
+ required: false
+ enum.HumanoidVisualLayers.FacialHair:
+ limit: 1
+ required: false
+ enum.HumanoidVisualLayers.Head:
+ limit: 6
+ required: false
+ enum.HumanoidVisualLayers.Chest:
+ limit: 6
+ required: false
+ enum.HumanoidVisualLayers.LArm:
+ limit: 6
+ required: false
+ enum.HumanoidVisualLayers.RArm:
+ limit: 6
+ required: false
+ enum.HumanoidVisualLayers.LLeg:
+ limit: 6
+ required: false
+ enum.HumanoidVisualLayers.RLeg:
+ limit: 6
+ required: false
+ enum.HumanoidVisualLayers.Overlay:
+ limit: 6
+ required: true
+ enum.HumanoidVisualLayers.HeadTop:
+ limit: 6
+ required: true
+ default: [ RodentiaHeadTopEarDefault ]
+ enum.HumanoidVisualLayers.HeadSide:
+ limit: 6
+ required: false
+ enum.HumanoidVisualLayers.Tail:
+ limit: 1
+ required: true
+ default: [ RodentiaTail ]
+ enum.HumanoidVisualLayers.Snout:
+ limit: 1
+ required: false
+
+# region Entities
+
+- type: entity
+ parent: BaseSpeciesAppearance
+ id: AppearanceRodentia
+ categories: [ HideSpawnMenu ]
+ name: rodentia appearance
+ components:
+ - type: Inventory
+ speciesId: rodentia
+ - type: InitialBody
+ organs:
+ # External
+ Torso: OrganRodentiaTorso
+ Head: OrganRodentiaHead
+ ArmLeft: OrganRodentiaArmLeft
+ ArmRight: OrganRodentiaArmRight
+ HandRight: OrganRodentiaHandRight
+ HandLeft: OrganRodentiaHandLeft
+ LegLeft: OrganRodentiaLegLeft
+ LegRight: OrganRodentiaLegRight
+ FootLeft: OrganRodentiaFootLeft
+ FootRight: OrganRodentiaFootRight
+ # Internal
+ Brain: OrganRodentiaBrain
+ Eyes: OrganRodentiaEyes
+ Tongue: OrganRodentiaTongue
+ Appendix: OrganRodentiaAppendix
+ Ears: OrganRodentiaEars
+ Lungs: OrganRodentiaLungs
+ Heart: OrganRodentiaHeart
+ Stomach: OrganRodentiaStomach
+ Liver: OrganRodentiaLiver
+ Kidneys: OrganRodentiaKidneys
+ - type: HumanoidProfile
+ species: Rodentia
+
+- type: entity
+ parent:
+ - AppearanceRodentia
+ - BaseSpeciesMobOrganic
+ id: MobRodentia
+ name: Urist McRat
+ components:
+ - type: Hunger # Faster hunger rate
+ decayRateMultiplier: 1.33
+ - type: MobThresholds # Lower crit + death threshold
+ thresholds:
+ 0: Alive
+ 90: Critical
+ 180: Dead
+ - type: Damageable # More shock + brute damage
+ damageModifierSet: Rodentia
+ - type: MeleeWeapon # Use teeth to deal sharp and piercing damage
+ angle: 0
+ animation: WeaponArcBite
+ damage:
+ types:
+ Piercing: 3
+ Slash: 2
+ - type: Rummager # Can rummage through objects
+ - type: ToolOrganPerformer
+
+# region Base organs
+
+- type: entity
+ parent: OrganBaseOrganic
+ id: OrganRodentia
+ abstract: true
+ suffix: Rodentia
+
+- type: entity
+ id: OrganRodentiaMetabolizer
+ abstract: true
+ components:
+ - type: Metabolizer
+ metabolizerTypes: [ Animal, Detritivore ]
+
+- type: entity
+ parent: OrganRodentia
+ id: OrganRodentiaInternal
+ abstract: true
+ components:
+ - type: Sprite
+ sprite: Mobs/Species/Human/organs.rsi # TODO: Rodentia organ sprites?
+
+- type: entity
+ id: OrganRodentiaVisual
+ abstract: true
+ components:
+ - type: VisualOrgan
+ data:
+ sprite: &rodentiaSprite _DEN/Mobs/Species/Rodentia/parts.rsi
+ - type: VisualOrganMarkings
+ markingData:
+ group: Rodentia
+
+- type: entity
+ parent: [ OrganRodentia, OrganRodentiaVisual ]
+ id: OrganRodentiaExternal
+ abstract: true
+ components:
+ - type: Sprite
+ sprite: *rodentiaSprite
+
+# region External
+
+- type: entity
+ parent: [ OrganBaseTorsoSexed, OrganBaseTorso, OrganRodentiaExternal ]
+ id: OrganRodentiaTorso
+ components:
+ - type: VisualOrganMarkings
+ hideableLayers:
+ - enum.HumanoidVisualLayers.Tail
+
+- type: entity
+ parent: [ OrganBaseHeadSexed, OrganBaseHead, OrganRodentiaExternal ]
+ id: OrganRodentiaHead
+ components:
+ - type: VisualOrganMarkings
+ hideableLayers:
+ - enum.HumanoidVisualLayers.Snout
+ - enum.HumanoidVisualLayers.HeadTop
+ - enum.HumanoidVisualLayers.HeadSide
+ - type: ToolOrgan # Incisors
+ toolToggleAction: ActionGnawingToggle
+ item: Wirecutter
+
+- type: entity
+ parent: [ OrganBaseArmLeft, OrganRodentiaExternal ]
+ id: OrganRodentiaArmLeft
+
+- type: entity
+ parent: [ OrganBaseArmRight, OrganRodentiaExternal ]
+ id: OrganRodentiaArmRight
+
+- type: entity
+ parent: [ OrganBaseHandLeft, OrganRodentiaExternal ]
+ id: OrganRodentiaHandLeft
+
+- type: entity
+ parent: [ OrganBaseHandRight, OrganRodentiaExternal ]
+ id: OrganRodentiaHandRight
+
+- type: entity
+ parent: [ OrganBaseLegLeft, OrganRodentiaExternal ]
+ id: OrganRodentiaLegLeft
+
+- type: entity
+ parent: [ OrganBaseLegRight, OrganRodentiaExternal ]
+ id: OrganRodentiaLegRight
+
+- type: entity
+ parent: [ OrganBaseFootLeft, OrganRodentiaExternal ]
+ id: OrganRodentiaFootLeft
+
+- type: entity
+ parent: [ OrganBaseFootRight, OrganRodentiaExternal ]
+ id: OrganRodentiaFootRight
+
+# region Internal
+
+- type: entity
+ parent: [ OrganBaseBrain, OrganSpriteHumanInternal, OrganRodentiaInternal ]
+ id: OrganRodentiaBrain
+
+- type: entity
+ parent: [ OrganBaseEyes, OrganRodentiaInternal, OrganRodentiaExternal ]
+ id: OrganRodentiaEyes
+ components:
+ - type: VisualOrgan
+ data:
+ sprite: Mobs/Customization/eyes.rsi
+
+- type: entity
+ parent: [ OrganBaseTongue, OrganRodentiaInternal ]
+ id: OrganRodentiaTongue
+
+- type: entity
+ parent: [ OrganBaseAppendix, OrganSpriteHumanInternal, OrganRodentiaInternal ]
+ id: OrganRodentiaAppendix
+
+- type: entity
+ parent: [ OrganBaseEars, OrganSpriteHumanInternal, OrganRodentiaInternal ]
+ id: OrganRodentiaEars
+
+- type: entity
+ parent: [ OrganBaseLungs, OrganRodentiaInternal, OrganRodentiaMetabolizer ]
+ id: OrganRodentiaLungs
+
+- type: entity
+ parent: [ OrganBaseHeart, OrganRodentiaInternal, OrganRodentiaMetabolizer ]
+ id: OrganRodentiaHeart
+
+- type: entity
+ parent: [ OrganBaseStomach, OrganRodentiaInternal, OrganRodentiaMetabolizer ]
+ id: OrganRodentiaStomach
+
+- type: entity
+ parent: [ OrganBaseLiver, OrganSpriteHumanInternal, OrganRodentiaInternal, OrganRodentiaMetabolizer ]
+ id: OrganRodentiaLiver
+
+- type: entity
+ parent: [ OrganBaseKidneys, OrganSpriteHumanInternal, OrganRodentiaInternal, OrganRodentiaMetabolizer ]
+ id: OrganRodentiaKidneys
diff --git a/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/drinks.yml b/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/drinks.yml
new file mode 100644
index 0000000000..e72ec8ae46
--- /dev/null
+++ b/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/drinks.yml
@@ -0,0 +1,361 @@
+- type: entityTable
+ id: RummageableVendingMachineBoda
+ table: !type:GroupSelector
+ children:
+ - &lootGeneric
+ !type:NestedSelector
+ tableId: RummageableVendingMachineGeneric
+ weight: 50
+ - !type:NestedSelector
+ tableId: TrashVendingMachineBoda
+ weight: 30
+ - !type:NestedSelector
+ tableId: LootVendingMachineBoda
+ weight: 20
+
+- type: entityTable
+ id: RummageableVendingMachineCola
+ table: !type:GroupSelector
+ children:
+ - *lootGeneric
+ - !type:NestedSelector
+ tableId: TrashVendingMachineCola
+ weight: 30
+ - !type:NestedSelector
+ tableId: LootVendingMachineCola
+ weight: 20
+
+- type: entityTable
+ id: RummageableVendingMachineDrGibb
+ table: !type:GroupSelector
+ children:
+ - *lootGeneric
+ - !type:NestedSelector
+ tableId: TrashVendingMachineDrGibb
+ weight: 30
+ - !type:NestedSelector
+ tableId: LootVendingMachineDrGibb
+ weight: 20
+
+- type: entityTable
+ id: RummageableVendingMachineHotDrinks
+ table: !type:GroupSelector
+ children:
+ - *lootGeneric
+ - !type:NestedSelector
+ tableId: TrashVendingMachineHotDrinks
+ weight: 30
+ - !type:NestedSelector
+ tableId: LootVendingMachineHotDrinks
+ weight: 20
+
+- type: entityTable
+ id: RummageableVendingMachinePwrGame
+ table: !type:GroupSelector
+ children:
+ - *lootGeneric
+ - !type:NestedSelector
+ tableId: TrashVendingMachinePwrGame
+ weight: 30
+ - !type:NestedSelector
+ tableId: LootVendingMachinePwrGame
+ weight: 20
+
+- type: entityTable
+ id: RummageableVendingMachineShamblersJuice
+ table: !type:GroupSelector
+ children:
+ - *lootGeneric
+ - !type:NestedSelector
+ tableId: TrashVendingMachineShamblersJuice
+ weight: 30
+ - !type:NestedSelector
+ tableId: LootVendingMachineShamblersJuice
+ weight: 20
+
+- type: entityTable
+ id: RummageableVendingMachineSmite
+ table: !type:GroupSelector
+ children:
+ - *lootGeneric
+ - !type:NestedSelector
+ tableId: TrashVendingMachineSmite
+ weight: 30
+ - !type:NestedSelector
+ tableId: LootVendingMachineSmite
+ weight: 20
+
+- type: entityTable
+ id: RummageableVendingMachineSoda
+ table: !type:GroupSelector
+ children:
+ - *lootGeneric
+ - !type:NestedSelector
+ tableId: TrashVendingMachineSoda
+ weight: 30
+ - !type:NestedSelector
+ tableId: LootVendingMachineSoda
+ weight: 20
+
+- type: entityTable
+ id: RummageableVendingMachineSpaceUp
+ table: !type:GroupSelector
+ children:
+ - *lootGeneric
+ - !type:NestedSelector
+ tableId: TrashVendingMachineSpaceUp
+ weight: 30
+ - !type:NestedSelector
+ tableId: LootVendingMachineSpaceUp
+ weight: 20
+
+- type: entityTable
+ id: RummageableVendingMachineStarkist
+ table: !type:GroupSelector
+ children:
+ - *lootGeneric
+ - !type:NestedSelector
+ tableId: TrashVendingMachineStarkist
+ weight: 30
+ - !type:NestedSelector
+ tableId: LootVendingMachineStarkist
+ weight: 20
+
+## Common
+
+- type: entityTable
+ id: LootVendingMachineDrinksCommon
+ table: !type:GroupSelector
+ children:
+ - id: DrinkGrapeCan
+ - id: DrinkRootBeerCan
+ - id: DrinkIcedTeaCan
+ - id: DrinkSolDryCan
+ - id: DrinkFourteenLokoCan
+ - id: DrinkChangelingStingCan
+
+- type: entityTable
+ id: TrashVendingMachineDrinksCommon
+ table: !type:GroupSelector
+ children:
+ - id: DrinkGrapeCanEmpty
+ - id: DrinkRootBeerCanEmpty
+ - id: DrinkIcedTeaCanEmpty
+ - id: DrinkSolDryCanEmpty
+ - id: DrinkFourteenLokoCanEmpty
+ - id: DrinkChangelingStingCanEmpty
+
+# Loot
+
+- type: entityTable
+ id: LootVendingMachineBoda
+ table: !type:GroupSelector
+ children:
+ - id: DrinkSodaWaterCan
+ weight: 5
+ - id: DrinkColaCan
+
+- type: entityTable
+ id: LootVendingMachineCola
+ table: !type:GroupSelector
+ children:
+ - id: DrinkColaCan
+ weight: 2
+ - id: DrinkLemonLimeCan
+ - id: DrinkLemonLimeCranberryCan
+ - &commonLootDrinks
+ !type:NestedSelector
+ tableId: LootVendingMachineDrinksCommon
+ weight: 6
+
+- type: entityTable
+ id: LootVendingMachineDrGibb
+ table: !type:GroupSelector
+ children:
+ - id: DrinkDrGibbCan
+ - id: DrinkLemonLimeCan
+ - id: DrinkLemonLimeCranberryCan
+ weight: 3
+ - *commonLootDrinks
+
+- type: entityTable
+ id: LootVendingMachineHotDrinks
+ table: !type:GroupSelector
+ children:
+ - id: DrinkHotCoffee
+ - id: DrinkCafeLatte
+ - id: DrinkTeacup
+ - id: DrinkGreenTea
+ - id: DrinkHotCoco
+
+- type: entityTable
+ id: LootVendingMachinePwrGame
+ table: !type:GroupSelector
+ children:
+ - id: DrinkPwrGameCan
+ weight: 2
+ - id: DrinkEnergyDrinkCan
+ weight: 2
+ - id: DrinkDrGibbCan
+ weight: 1.5
+ - *commonLootDrinks
+
+- type: entityTable
+ id: LootVendingMachineShamblersJuice
+ table: !type:GroupSelector
+ children:
+ - id: DrinkShamblersJuiceCan
+ weight: 2
+ - id: DrinkLemonLimeCan
+ - id: DrinkLemonLimeCranberryCan
+ - *commonLootDrinks
+
+- type: entityTable
+ id: LootVendingMachineSmite
+ table: !type:GroupSelector
+ children:
+ - id: DrinkLemonLimeCan
+ weight: 4
+ - id: DrinkLemonLimeCranberryCan
+ weight: 3
+ - id: DrinkColaCan
+ - id: DrinkSolDryCan
+ - id: DrinkStarkistCan
+ - id: DrinkChangelingStingCan
+
+- type: entityTable
+ id: LootVendingMachineSoda
+ table: !type:GroupSelector
+ children:
+ - id: DrinkColaCan
+ weight: 2
+ - id: DrinkLemonLimeCan
+ - id: DrinkLemonLimeCranberryCan
+ - *commonLootDrinks
+
+- type: entityTable
+ id: LootVendingMachineSpaceUp
+ table: !type:GroupSelector
+ children:
+ - id: DrinkSpaceUpCan
+ weight: 3
+ - id: DrinkSpaceMountainWindCan
+ weight: 3
+ - *commonLootDrinks
+
+- type: entityTable
+ id: LootVendingMachineStarkist
+ table: !type:GroupSelector
+ children:
+ - id: DrinkStarkistCan
+ weight: 3
+ - id: DrinkLemonLimeCan
+ - id: DrinkLemonLimeCranberryCan
+ - *commonLootDrinks
+
+# Trash
+
+- type: entityTable
+ id: TrashVendingMachineBoda
+ table: !type:GroupSelector
+ children:
+ - id: DrinkSodaWaterCanEmpty
+ weight: 5
+ - id: DrinkColaCanEmpty
+
+- type: entityTable
+ id: TrashVendingMachineCola
+ table: !type:GroupSelector
+ children:
+ - id: DrinkColaCanEmpty
+ weight: 2
+ - id: DrinkLemonLimeCanEmpty
+ - id: DrinkLemonLimeCranberryCanEmpty
+ - &commonTrashDrinks
+ !type:NestedSelector
+ tableId: TrashVendingMachineDrinksCommon
+ weight: 6
+
+- type: entityTable
+ id: TrashVendingMachineDrGibb
+ table: !type:GroupSelector
+ children:
+ - id: DrinkDrGibbCanEmpty
+ - id: DrinkLemonLimeCanEmpty
+ - id: DrinkLemonLimeCranberryCanEmpty
+ weight: 3
+ - *commonTrashDrinks
+
+- type: entityTable
+ id: TrashVendingMachineHotDrinks
+ table: !type:GroupSelector
+ children:
+ - id: DrinkHotCoffeeEmpty
+ - id: DrinkCafeLatteEmpty
+ - id: DrinkTeacupEmpty
+ - id: DrinkGreenTeaEmpty
+ - id: DrinkHotCocoEmpty
+
+- type: entityTable
+ id: TrashVendingMachinePwrGame
+ table: !type:GroupSelector
+ children:
+ - id: DrinkPwrGameCanEmpty
+ weight: 2
+ - id: DrinkEnergyDrinkCanEmpty
+ weight: 2
+ - id: DrinkDrGibbCanEmpty
+ weight: 1.5
+ - *commonTrashDrinks
+
+- type: entityTable
+ id: TrashVendingMachineShamblersJuice
+ table: !type:GroupSelector
+ children:
+ - id: DrinkShamblersJuiceCanEmpty
+ weight: 2
+ - id: DrinkLemonLimeCanEmpty
+ - id: DrinkLemonLimeCranberryCanEmpty
+ - *commonTrashDrinks
+
+- type: entityTable
+ id: TrashVendingMachineSmite
+ table: !type:GroupSelector
+ children:
+ - id: DrinkLemonLimeCanEmpty
+ weight: 4
+ - id: DrinkLemonLimeCranberryCanEmpty
+ weight: 3
+ - id: DrinkColaCanEmpty
+ - id: DrinkSolDryCanEmpty
+ - id: DrinkStarkistCanEmpty
+ - id: DrinkChangelingStingCanEmpty
+
+- type: entityTable
+ id: TrashVendingMachineSoda
+ table: !type:GroupSelector
+ children:
+ - id: DrinkColaCanEmpty
+ - id: DrinkLemonLimeCanEmpty
+ - id: DrinkLemonLimeCranberryCanEmpty
+ - *commonTrashDrinks
+
+- type: entityTable
+ id: TrashVendingMachineSpaceUp
+ table: !type:GroupSelector
+ children:
+ - id: DrinkSpaceUpCanEmpty
+ weight: 3
+ - id: DrinkSpaceMountainWindCanEmpty
+ weight: 3
+ - *commonTrashDrinks
+
+- type: entityTable
+ id: TrashVendingMachineStarkist
+ table: !type:GroupSelector
+ children:
+ - id: DrinkStarkistCanEmpty
+ weight: 3
+ - id: DrinkLemonLimeCanEmpty
+ - id: DrinkLemonLimeCranberryCanEmpty
+ - *commonTrashDrinks
diff --git a/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/food.yml b/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/food.yml
new file mode 100644
index 0000000000..4e04d203e3
--- /dev/null
+++ b/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/food.yml
@@ -0,0 +1,158 @@
+- type: entityTable
+ id: RummageableVendingMachineChang
+ table: !type:GroupSelector
+ children:
+ - &lootGeneric
+ !type:NestedSelector
+ tableId: RummageableVendingMachineGeneric
+ weight: 50
+ - !type:NestedSelector
+ tableId: TrashVendingMachineChang
+ weight: 30
+ - !type:NestedSelector
+ tableId: LootVendingMachineChang
+ weight: 20
+
+- type: entityTable
+ id: RummageableVendingMachineDiscountDans
+ table: !type:GroupSelector
+ children:
+ - *lootGeneric
+ - !type:NestedSelector
+ tableId: TrashVendingMachineDiscountDans
+ weight: 30
+ - !type:NestedSelector
+ tableId: LootVendingMachineDiscountDans
+ weight: 20
+
+- type: entityTable
+ id: RummageableVendingMachineGetmoreChocolate
+ table: !type:GroupSelector
+ children:
+ - *lootGeneric
+ - !type:NestedSelector
+ tableId: TrashVendingMachineGetmoreChocolate
+ weight: 30
+ - !type:NestedSelector
+ tableId: LootVendingMachineGetmoreChocolate
+ weight: 20
+
+- type: entityTable
+ id: RummageableVendingMachineSustenance
+ table: !type:GroupSelector
+ children:
+ - *lootGeneric
+ - !type:NestedSelector
+ tableId: TrashVendingMachineSustenance
+ weight: 30
+ - !type:NestedSelector
+ tableId: LootVendingMachineSustenance
+ weight: 20
+
+## Loot
+
+- type: entityTable
+ id: LootVendingMachineChang
+ table: !type:GroupSelector
+ children:
+ - id: FoodCondimentPacketSoy
+ - id: FoodSnackCookieFortune
+ - id: DrinkRamen
+ - id: DrinkHellRamen
+ - id: FoodSnackChowMein
+ - id: FoodSnackDanDanNoodles
+
+- type: entityTable
+ id: LootVendingMachineDiscountDans
+ table: !type:GroupSelector
+ children:
+ - id: FoodSnackCheesie
+ - id: FoodSnackChips
+ - id: FoodSnackBoritos
+ - id: DrinkEnergyDrinkCan
+ - id: FoodSnackPopcorn
+ - id: FoodSnackEnergy
+ - id: FoodSnackDanDanNoodles
+
+- type: entityTable
+ id: LootVendingMachineGetmoreChocolate
+ table: !type:GroupSelector
+ children:
+ - id: FoodSnackRaisins
+ - id: FoodSnackChocolate
+ - id: FoodSnackCnDs
+ - id: FoodSnackPistachios
+ - id: FoodSnackSus
+ - id: FoodSnackSemki
+ - id: FoodSnackSyndi
+ weight: 0.5
+
+- type: entityTable
+ id: LootVendingMachineSustenance
+ table: !type:GroupSelector
+ children:
+ - id: DrinkMREFlask
+ - id: FoodSnackNutribrick
+ - id: FoodSnackMREBrownie
+ - id: FoodCondimentPacketKetchup
+ - !type:GroupSelector
+ weight: 0.5
+ children:
+ - id: FoodTinMRE
+ - id: FoodTinBeans
+ - id: FoodTinPeaches
+ - id: DrinkBeerCan
+ weight: 0.5
+
+## Trash
+
+- type: entityTable
+ id: TrashVendingMachineChang
+ table: !type:GroupSelector
+ children:
+ - id: FoodCondimentPacketEmpty
+ - id: FoodCookieFortune
+ - id: FoodPacketCupRamenTrash
+ - id: FoodPacketChowMeinTrash
+ - id: FoodPacketDanDanTrash
+
+- type: entityTable
+ id: TrashVendingMachineDiscountDans
+ table: !type:GroupSelector
+ children:
+ - id: FoodPacketCheesieTrash
+ - id: FoodPacketChipsTrash
+ - id: FoodPacketBoritosTrash
+ - id: DrinkEnergyDrinkCanEmpty
+ - id: FoodPacketPopcornTrash
+ - id: FoodPacketEnergyTrash
+ - id: FoodPacketDanDanTrash
+
+- type: entityTable
+ id: TrashVendingMachineGetmoreChocolate
+ table: !type:GroupSelector
+ children:
+ - id: FoodPacketRaisinsTrash
+ - id: FoodPacketChocolateTrash
+ - id: FoodPacketCnDsTrash
+ - id: FoodPacketPistachioTrash
+ - id: FoodPacketSusTrash
+ - id: FoodPacketSemkiTrash
+ - id: FoodPacketSyndiTrash
+ weight: 0.5
+
+- type: entityTable
+ id: TrashVendingMachineSustenance
+ table: !type:GroupSelector
+ children:
+ - id: DrinkMREFlaskEmpty
+ - id: FoodPacketMRETrash
+ - id: FoodCondimentPacketEmpty
+ - !type:GroupSelector
+ weight: 0.5
+ children:
+ - id: FoodTinMRETrash
+ - id: FoodTinBeansTrash
+ - id: FoodTinPeachesTrash
+ - id: DrinkBeerCanEmpty
+ weight: 0.5
diff --git a/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/machines.yml b/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/machines.yml
new file mode 100644
index 0000000000..1c963e0360
--- /dev/null
+++ b/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/machines.yml
@@ -0,0 +1,40 @@
+- type: entityTable
+ id: RummageableVendingMachineGeneric
+ table: !type:GroupSelector
+ children:
+ # Miscellaneous trash
+ - !type:GroupSelector
+ weight: 30
+ children:
+ - !type:NestedSelector
+ tableId: AllBananaPeelsTable
+ - id: CigaretteSpent
+ - id: CigarSpent
+ weight: 0.3
+ - id: FoodFrozenPopsicleTrash
+ weight: 0.75
+ - id: BrokenBottle
+ - id: ShardGlass
+ # Spesos
+ - !type:GroupSelector
+ weight: 15
+ children:
+ - id: SpaceCash10
+ weight: 20
+ - id: SpaceCash100
+ weight: 10
+ - id: SpaceCash500
+ weight: 5
+ - id: SpaceCash1000
+ weight: 1
+ # Coins
+ - !type:NestedSelector
+ tableId: TreasureCoinPile
+ weight: 10
+ # Vermin
+ - !type:GroupSelector
+ weight: 3
+ children:
+ - id: MobCockroach
+ - id: MobMouse
+ - id: MobMouseDead
diff --git a/Resources/Prototypes/_DEN/Damage/rodentia.yml b/Resources/Prototypes/_DEN/Damage/rodentia.yml
new file mode 100644
index 0000000000..5492558d83
--- /dev/null
+++ b/Resources/Prototypes/_DEN/Damage/rodentia.yml
@@ -0,0 +1,7 @@
+- type: damageModifierSet
+ id: Rodentia
+ coefficients:
+ Blunt: 1.15
+ Slash: 1.10
+ Piercing: 1.10
+ Shock: 1.15
diff --git a/Resources/Prototypes/_DEN/Datasets/Names/rodentia.yml b/Resources/Prototypes/_DEN/Datasets/Names/rodentia.yml
new file mode 100644
index 0000000000..a7a8ecd7d9
--- /dev/null
+++ b/Resources/Prototypes/_DEN/Datasets/Names/rodentia.yml
@@ -0,0 +1,30 @@
+# Rodentia have a name scheme of "LastName FirstName", because first names are gendered here.
+#
+# "Last names" are more like adjective titles, which makes names sound like animal xenofiction characters, or mobsters.
+# By "animal xenofiction", think, like, Warrior Cats, or Redwall, or Watership Down.
+# ("Stout", "Light-foot", "Gentle", "Cunning", "Brave", "Quick-wits", "Shiny-eyes")
+#
+# First names are more "standard", with emphasis on:
+# - Names you'd give pets, especially pet rodents (Nibbles, Pipsqueak, Spud)
+# - "Standard" first names with a "sentient woodland animal" or "mobster" feel (Rowan, Willow, Louie, Frankie)
+# - What I can only describe as "rodent-themed British village names" (Furwell, Oakley, Squeakwood)
+#
+# Examples: "Stubborn Stanley", "Fat Louie", "Long-tail Nellie", "Big Cheddar", "Hasty Nibbleston"
+
+- type: localizedDataset
+ id: NamesRodentiaFirstMale
+ values:
+ prefix: names-rodentia-first-male-dataset-
+ count: 176
+
+- type: localizedDataset
+ id: NamesRodentiaFirstFemale
+ values:
+ prefix: names-rodentia-first-female-dataset-
+ count: 159
+
+- type: localizedDataset
+ id: NamesRodentiaLast
+ values:
+ prefix: names-rodentia-last-dataset-
+ count: 86
diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_empty.yml b/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_empty.yml
new file mode 100644
index 0000000000..a2d64e56e6
--- /dev/null
+++ b/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_empty.yml
@@ -0,0 +1,112 @@
+- type: entity
+ abstract: true
+ id: DrinkEmpty
+ suffix: Empty
+ components:
+ - type: Solution
+ solution:
+ reagents: []
+
+- type: entity
+ abstract: true
+ parent: DrinkEmpty
+ id: DrinkCanEmpty
+ components:
+ - type: Openable
+ opened: true
+
+- type: entity
+ parent: [DrinkCanEmpty, DrinkBeerCan]
+ id: DrinkBeerCanEmpty
+
+- type: entity
+ parent: [DrinkEmpty, DrinkCafeLatte]
+ id: DrinkCafeLatteEmpty
+
+- type: entity
+ parent: [DrinkCanEmpty, DrinkChangelingStingCan]
+ id: DrinkChangelingStingCanEmpty
+
+- type: entity
+ parent: [DrinkCanEmpty, DrinkColaCan]
+ id: DrinkColaCanEmpty
+
+- type: entity
+ parent: [DrinkCanEmpty, DrinkDrGibbCan]
+ id: DrinkDrGibbCanEmpty
+
+- type: entity
+ parent: [DrinkCanEmpty, DrinkEnergyDrinkCan]
+ id: DrinkEnergyDrinkEmpty
+
+- type: entity
+ parent: [DrinkCanEmpty, DrinkMREFlask]
+ id: DrinkMREFlaskEmpty
+
+- type: entity
+ parent: [DrinkCanEmpty, DrinkFourteenLokoCan]
+ id: DrinkFourteenLokoCanEmpty
+
+- type: entity
+ parent: [DrinkCanEmpty, DrinkGrapeCan]
+ id: DrinkGrapeCanEmpty
+
+- type: entity
+ parent: [DrinkEmpty, DrinkGreenTea]
+ id: DrinkGreenTeaEmpty
+
+- type: entity
+ parent: [DrinkEmpty, DrinkHotCoco]
+ id: DrinkHotCocoEmpty
+
+- type: entity
+ parent: [DrinkEmpty, DrinkHotCoffee]
+ id: DrinkHotCoffeeEmpty
+
+- type: entity
+ parent: [DrinkCanEmpty, DrinkIcedTeaCan]
+ id: DrinkIcedTeaCanEmpty
+
+- type: entity
+ parent: [DrinkCanEmpty, DrinkLemonLimeCan]
+ id: DrinkLemonLimeCanEmpty
+
+- type: entity
+ parent: [DrinkCanEmpty, DrinkLemonLimeCranberryCan]
+ id: DrinkLemonLimeCranberryCanEmpty
+
+- type: entity
+ parent: [DrinkCanEmpty, DrinkPwrGameCan]
+ id: DrinkPwrGameCanEmpty
+
+- type: entity
+ parent: [DrinkCanEmpty, DrinkRootBeerCan]
+ id: DrinkRootBeerCanEmpty
+
+- type: entity
+ parent: [DrinkCanEmpty, DrinkShamblersJuiceCan]
+ id: DrinkShamblersJuiceCanEmpty
+
+- type: entity
+ parent: [DrinkCanEmpty, DrinkSodaWaterCan]
+ id: DrinkSodaWaterCanEmpty
+
+- type: entity
+ parent: [DrinkCanEmpty, DrinkSolDryCan]
+ id: DrinkSolDryCanEmpty
+
+- type: entity
+ parent: [DrinkCanEmpty, DrinkSpaceMountainWindCan]
+ id: DrinkSpaceMountainWindCanEmpty
+
+- type: entity
+ parent: [DrinkCanEmpty, DrinkSpaceUpCan]
+ id: DrinkSpaceUpCanEmpty
+
+- type: entity
+ parent: [DrinkCanEmpty, DrinkStarkistCan]
+ id: DrinkStarkistCanEmpty
+
+- type: entity
+ parent: [DrinkEmpty, DrinkTeacup]
+ id: DrinkTeacupEmpty
diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Food/Containers/empty.yml b/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Food/Containers/empty.yml
new file mode 100644
index 0000000000..0201217730
--- /dev/null
+++ b/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Food/Containers/empty.yml
@@ -0,0 +1,8 @@
+- type: entity
+ parent: BaseFoodCondimentPacket
+ id: FoodCondimentPacketEmpty
+ name: empty condiment packet
+ description: This can probably go in the trash.
+ components:
+ - type: Openable
+ opened: true
diff --git a/Resources/Prototypes/_DEN/Guidebook/species.yml b/Resources/Prototypes/_DEN/Guidebook/species.yml
new file mode 100644
index 0000000000..82e8c53cdd
--- /dev/null
+++ b/Resources/Prototypes/_DEN/Guidebook/species.yml
@@ -0,0 +1,4 @@
+- type: guideEntry
+ id: Rodentia
+ name: species-name-rodentia
+ text: "/ServerInfo/_DEN/Guidebook/Mobs/Rodentia.xml"
diff --git a/Resources/Prototypes/_DEN/Species/rodentia.yml b/Resources/Prototypes/_DEN/Species/rodentia.yml
new file mode 100644
index 0000000000..410cec9a02
--- /dev/null
+++ b/Resources/Prototypes/_DEN/Species/rodentia.yml
@@ -0,0 +1,35 @@
+- type: species
+ id: Rodentia
+ name: species-name-rodentia
+ roundStart: true
+ prototype: MobRodentia
+ dollPrototype: AppearanceRodentia
+ defaultSkinTone: "#747474"
+ skinColoration: Hues
+ maleFirstNames: NamesRodentiaFirstMale
+ femaleFirstNames: NamesRodentiaFirstFemale
+ lastNames: NamesRodentiaLast
+
+#
+# Rodentia are a species of anthropomorphic rodent-people, and other "small mammal"-type species that aren't rodents.
+# (Moles, bats, possums, shrews, and rabbits are all sort of included.)
+#
+# Rodentia are naturally detritivorous, allowing them to consume gastrotoxin, mold, and processed trash safely,
+# and even derive nutrition from doing so! However, like other animals, they are sensitive to allicin and theobromine.
+# They have red blood.
+#
+# TODO: Rodentia can rummage through disposal chutes, usually netting junk, but occasionally digging up snacks
+# or treasure.
+#
+# TODO: Rodentia can use their incisors for "Cutting" interactions without needing wirecutters - such as snipping
+# through cables or door wires. However, they will still be electrocuted without insulation.
+# They get hungrier 33% faster.
+#
+# TODO: Rodentia are somewhat clumsy, and can't help but hurt themselves on mouse traps and glass shards, even
+# when they're wearing shoes.
+#
+# TODO: Rodentia take more brute and shock damage, but use their teeth to inflict Sharp and Piercing damage.
+# They also have a lower critical *and* death threshold than other species - 90 to crit, 180 to die.
+#
+# TODO: Rodentia are small enough to fit in duffel bags.
+#
diff --git a/Resources/ServerInfo/_DEN/Guidebook/Mobs/Rodentia.xml b/Resources/ServerInfo/_DEN/Guidebook/Mobs/Rodentia.xml
new file mode 100644
index 0000000000..496684cff0
--- /dev/null
+++ b/Resources/ServerInfo/_DEN/Guidebook/Mobs/Rodentia.xml
@@ -0,0 +1,64 @@
+
+ # Rodentia
+
+
+
+
+
+ Rodentia are a species of anthropomorphic rodent-like humanoids widespread throughout interstellar society. They are highly diverse, and despite their name, have been known to resemble non-rodent species' physiology as well, from bats, to marsupials, to insectivorous mammals like hedgehogs.
+
+ ## Physiology
+
+ Rodentia on average have light-weight, nimble builds. They have red blood and an omnivorous scavenger diet. They will be poisoned by allicin (onions, garlic) and theobromine (chocolate, coffee, tea), but are [color=#1e90ff]capable of digesting rotten meat, mold, and reprocessed trash safely.[/color]
+
+ Rodentia are physically fragile. They [color=#ffa500]will take 15% more Blunt and Shock damage, as well as 10% more Slash and Piercing damage.[/color] In addition, [color=red]they will enter critical condition at 90 damage, and die at 180 damage.[/color]
+
+ They tend to be clumsy with their feet and tails when they move, and [color=#ffa500]will trip on glass shards and mousetraps, even if wearing shoes.[/color]
+
+ ## Rummaging
+
+
+
+
+
+
+
+
+ Rodentia are highly effective scavengers, capable of [color=#1e90ff]rummaging through certain appliances.[/color] Most of them contain junk, but who knows! You might get lucky and sift treasure out of the trash.
+
+
+
+
+
+
+
+
+
+
+ ## Gnawing
+
+
+
+
+
+ Rodentia have powerful adapted incisors that deal [color=red]Sharp[/color] and [color=red]Piercing[/color] damage, and make for an effective [color=cyan]Cutting[/color] tool. Watch out for electric shocks!
+
+ ## Rodentia Naming Conventions
+
+ Rodentia are typically given a "standard" first name (dependent on individual culture), traditionally prefixed with an adjective descriptor. These descriptors may be selected by the rodentia themselves, but are often assigned by their peers - especially based on physical quality, temperament, or social reputation.
+
+ Rodentian cultures are frequently heavily communal and place less emphasis on individual families - surnames are uncommon in unmarried rodentia. In some societies, a rodentia may opt to adapt their descriptor into a surname.
+
+ - [color=#449944]Acceptable:[/color] Grumpy Rufus
+ - [color=#449944]Acceptable:[/color] Long-tail Ruby
+ - [color=#449944]Acceptable:[/color] Sneaky Whiskershire
+ - [color=#449944]Acceptable:[/color] Fat Frankie
+ - [color=#449944]Acceptable:[/color] Cheeky Spud
+ - [color=#449944]Acceptable:[/color] Oliver Haste
+ - [color=#449944]Acceptable:[/color] Willow Sharpclaws
+ - [color=#994444]Bad:[/color] Speedy Gonzales
+ - [color=#994444]Bad:[/color] Snotfuck the Rat
+ - [color=#994444]Bad:[/color] Tella Tubby
+ - [color=#994444]Bad:[/color] Big Dick
+
+
diff --git a/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/full.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/full.png
new file mode 100755
index 0000000000..fe76b69c18
Binary files /dev/null and b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/full.png differ
diff --git a/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/head_f.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/head_f.png
new file mode 100755
index 0000000000..f612f55205
Binary files /dev/null and b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/head_f.png differ
diff --git a/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/head_m.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/head_m.png
new file mode 100755
index 0000000000..6ee304577d
Binary files /dev/null and b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/head_m.png differ
diff --git a/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/l_arm.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/l_arm.png
new file mode 100755
index 0000000000..3c356949c9
Binary files /dev/null and b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/l_arm.png differ
diff --git a/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/l_foot.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/l_foot.png
new file mode 100755
index 0000000000..d692606fda
Binary files /dev/null and b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/l_foot.png differ
diff --git a/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/l_hand.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/l_hand.png
new file mode 100755
index 0000000000..3127e8b271
Binary files /dev/null and b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/l_hand.png differ
diff --git a/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/l_leg.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/l_leg.png
new file mode 100755
index 0000000000..0cb1306724
Binary files /dev/null and b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/l_leg.png differ
diff --git a/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/meta.json b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/meta.json
new file mode 100644
index 0000000000..6e15cadeae
--- /dev/null
+++ b/Resources/Textures/_DEN/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 (GitHub)",
+ "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/_DEN/Mobs/Species/Rodentia/parts.rsi/r_arm.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/r_arm.png
new file mode 100755
index 0000000000..4bda91b236
Binary files /dev/null and b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/r_arm.png differ
diff --git a/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/r_foot.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/r_foot.png
new file mode 100755
index 0000000000..74785fb854
Binary files /dev/null and b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/r_foot.png differ
diff --git a/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/r_hand.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/r_hand.png
new file mode 100755
index 0000000000..857b2c5e82
Binary files /dev/null and b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/r_hand.png differ
diff --git a/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/r_leg.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/r_leg.png
new file mode 100755
index 0000000000..a06acc58fe
Binary files /dev/null and b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/r_leg.png differ
diff --git a/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/torso_f.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/torso_f.png
new file mode 100755
index 0000000000..a1cd66af5f
Binary files /dev/null and b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/torso_f.png differ
diff --git a/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/torso_m.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/torso_m.png
new file mode 100755
index 0000000000..fa9e2a1737
Binary files /dev/null and b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/torso_m.png differ