diff --git a/Content.Shared/Atmos/Rotting/PerishableComponent.cs b/Content.Shared/Atmos/Rotting/PerishableComponent.cs
index 6983b872b8..99b30fc906 100644
--- a/Content.Shared/Atmos/Rotting/PerishableComponent.cs
+++ b/Content.Shared/Atmos/Rotting/PerishableComponent.cs
@@ -45,6 +45,12 @@ public sealed partial class PerishableComponent : Component
[DataField, AutoNetworkedField]
public int Stage;
+
+ ///
+ /// If true, rot will always progress.
+ ///
+ [DataField, AutoNetworkedField]
+ public bool ForceRotProgression;
}
diff --git a/Content.Shared/Atmos/Rotting/SharedRottingSystem.cs b/Content.Shared/Atmos/Rotting/SharedRottingSystem.cs
index 840818dee5..60c89c012a 100644
--- a/Content.Shared/Atmos/Rotting/SharedRottingSystem.cs
+++ b/Content.Shared/Atmos/Rotting/SharedRottingSystem.cs
@@ -115,6 +115,10 @@ public abstract class SharedRottingSystem : EntitySystem
if (!Resolve(uid, ref perishable, false))
return false;
+ // Overrides all the other checks.
+ if (perishable.ForceRotProgression)
+ return true;
+
// only dead things or inanimate objects can rot
if (TryComp(uid, out var mobState) && !_mobState.IsDead(uid, mobState))
return false;
diff --git a/Content.Shared/Damage/Components/IgnoreSlowOnDamageComponent.cs b/Content.Shared/Damage/Components/IgnoreSlowOnDamageComponent.cs
new file mode 100644
index 0000000000..e933eb1a79
--- /dev/null
+++ b/Content.Shared/Damage/Components/IgnoreSlowOnDamageComponent.cs
@@ -0,0 +1,9 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Damage.Components;
+
+///
+/// This is used for an effect that nullifies and adds an alert.
+///
+[RegisterComponent, NetworkedComponent, Access(typeof(SlowOnDamageSystem))]
+public sealed partial class IgnoreSlowOnDamageComponent : Component;
diff --git a/Content.Shared/Damage/Systems/SlowOnDamageSystem.cs b/Content.Shared/Damage/Systems/SlowOnDamageSystem.cs
index 3e50ee3557..6b5f57c595 100644
--- a/Content.Shared/Damage/Systems/SlowOnDamageSystem.cs
+++ b/Content.Shared/Damage/Systems/SlowOnDamageSystem.cs
@@ -22,6 +22,10 @@ namespace Content.Shared.Damage
SubscribeLocalEvent(OnExamined);
SubscribeLocalEvent(OnGotEquipped);
SubscribeLocalEvent(OnGotUnequipped);
+
+ SubscribeLocalEvent(OnIgnoreStartup);
+ SubscribeLocalEvent(OnIgnoreShutdown);
+ SubscribeLocalEvent(OnIgnoreModifySpeed);
}
private void OnRefreshMovespeed(EntityUid uid, SlowOnDamageComponent component, RefreshMovementSpeedModifiersEvent args)
@@ -84,6 +88,21 @@ namespace Content.Shared.Damage
{
_movementSpeedModifierSystem.RefreshMovementSpeedModifiers(args.Wearer);
}
+
+ private void OnIgnoreStartup(Entity ent, ref ComponentStartup args)
+ {
+ _movementSpeedModifierSystem.RefreshMovementSpeedModifiers(ent);
+ }
+
+ private void OnIgnoreShutdown(Entity ent, ref ComponentShutdown args)
+ {
+ _movementSpeedModifierSystem.RefreshMovementSpeedModifiers(ent);
+ }
+
+ private void OnIgnoreModifySpeed(Entity ent, ref ModifySlowOnDamageSpeedEvent args)
+ {
+ args.Speed = 1f;
+ }
}
[ByRefEvent]
diff --git a/Content.Shared/Weapons/Ranged/Components/RechargeBasicEntityAmmoComponent.cs b/Content.Shared/Weapons/Ranged/Components/RechargeBasicEntityAmmoComponent.cs
index f478405bec..25d0453b59 100644
--- a/Content.Shared/Weapons/Ranged/Components/RechargeBasicEntityAmmoComponent.cs
+++ b/Content.Shared/Weapons/Ranged/Components/RechargeBasicEntityAmmoComponent.cs
@@ -17,7 +17,7 @@ public sealed partial class RechargeBasicEntityAmmoComponent : Component
[DataField("rechargeSound")]
[AutoNetworkedField]
- public SoundSpecifier RechargeSound = new SoundPathSpecifier("/Audio/Magic/forcewall.ogg")
+ public SoundSpecifier? RechargeSound = new SoundPathSpecifier("/Audio/Magic/forcewall.ogg")
{
Params = AudioParams.Default.WithVolume(-5f)
};
@@ -27,4 +27,7 @@ public sealed partial class RechargeBasicEntityAmmoComponent : Component
AutoNetworkedField]
[AutoPausedField]
public TimeSpan? NextCharge;
+
+ [DataField, AutoNetworkedField]
+ public bool ShowExamineText = true;
}
diff --git a/Content.Shared/Weapons/Ranged/Systems/RechargeBasicEntityAmmoSystem.cs b/Content.Shared/Weapons/Ranged/Systems/RechargeBasicEntityAmmoSystem.cs
index 9d6d552400..3316df0b96 100644
--- a/Content.Shared/Weapons/Ranged/Systems/RechargeBasicEntityAmmoSystem.cs
+++ b/Content.Shared/Weapons/Ranged/Systems/RechargeBasicEntityAmmoSystem.cs
@@ -66,6 +66,9 @@ public sealed class RechargeBasicEntityAmmoSystem : EntitySystem
private void OnExamined(EntityUid uid, RechargeBasicEntityAmmoComponent component, ExaminedEvent args)
{
+ if (!component.ShowExamineText)
+ return;
+
if (!TryComp(uid, out var ammo)
|| ammo.Count == ammo.Capacity ||
component.NextCharge == null)
diff --git a/Resources/Locale/en-US/alerts/alerts.ftl b/Resources/Locale/en-US/alerts/alerts.ftl
index 319809da40..37af416c3a 100644
--- a/Resources/Locale/en-US/alerts/alerts.ftl
+++ b/Resources/Locale/en-US/alerts/alerts.ftl
@@ -96,6 +96,9 @@ alerts-bleed-desc = You're [color=red]bleeding[/color].
alerts-pacified-name = [color=green]Pacified[/color]
alerts-pacified-desc = You're pacified; you won't be able to harm living creatures.
+alerts-adrenaline-name = [color=red]Adrenaline[/color]
+alerts-adrenaline-desc = You're full of adrenaline: pain won't slow you down.
+
alerts-suit-power-name = Suit Power
alerts-suit-power-desc = How much power your space ninja suit has.
diff --git a/Resources/Locale/en-US/guidebook/chemistry/statuseffects.ftl b/Resources/Locale/en-US/guidebook/chemistry/statuseffects.ftl
index 9a8f2f6c8a..13d9ed5d6b 100644
--- a/Resources/Locale/en-US/guidebook/chemistry/statuseffects.ftl
+++ b/Resources/Locale/en-US/guidebook/chemistry/statuseffects.ftl
@@ -13,3 +13,4 @@ reagent-effect-status-effect-RatvarianLanguage = ratvarian language patterns
reagent-effect-status-effect-StaminaModifier = modified stamina
reagent-effect-status-effect-RadiationProtection = radiation protection
reagent-effect-status-effect-Drowsiness = drowsiness
+reagent-effect-status-effect-Adrenaline = adrenaline
diff --git a/Resources/Locale/en-US/reagents/meta/chemicals.ftl b/Resources/Locale/en-US/reagents/meta/chemicals.ftl
index 1d70ff65ff..ad9d12e26f 100644
--- a/Resources/Locale/en-US/reagents/meta/chemicals.ftl
+++ b/Resources/Locale/en-US/reagents/meta/chemicals.ftl
@@ -28,3 +28,5 @@ reagent-desc-sodium-polyacrylate = A super-absorbent polymer with assorted indus
reagent-name-cellulose = cellulose fibers
reagent-desc-cellulose = A crystaline polydextrose polymer, plants swear by this stuff.
+reagent-name-rororium = rororium
+reagent-desc-rororium = A strange substance which fills the cores of the hivelords that roam the mining asteroid. Thought to be the source of their regenerative powers.
diff --git a/Resources/Prototypes/Alerts/alerts.yml b/Resources/Prototypes/Alerts/alerts.yml
index 4ee4fdce0c..80fcc44a55 100644
--- a/Resources/Prototypes/Alerts/alerts.yml
+++ b/Resources/Prototypes/Alerts/alerts.yml
@@ -427,6 +427,14 @@
name: alerts-pacified-name
description: alerts-pacified-desc
+- type: alert
+ id: Adrenaline
+ icons:
+ - sprite: Mobs/Species/Human/organs.rsi
+ state: heart-on
+ name: alerts-adrenaline-name
+ description: alerts-adrenaline-desc
+
- type: alert
id: Debug1
icons:
diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/Salvage/spawners.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/Salvage/spawners.yml
index d16499aa76..7e147ba711 100644
--- a/Resources/Prototypes/Entities/Markers/Spawners/Random/Salvage/spawners.yml
+++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/Salvage/spawners.yml
@@ -476,3 +476,21 @@
amount: !type:ConstantNumberSelector
value: 3
+- type: entity
+ parent: MarkerBase
+ id: SalvageSpawnerMobMiningAsteroid
+ name: Mining Asteroid Mob Spawner
+ components:
+ - type: Sprite
+ layers:
+ - state: green
+ - sprite: Mobs/Aliens/Asteroid/goliath.rsi
+ state: goliath
+ - type: EntityTableSpawner
+ table: !type:GroupSelector
+ children:
+ - id: MobGoliath
+ weight: 65
+ - id: MobHivelord
+ weight: 35
+
diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml b/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml
index 8cbd40b5cc..877dd40cc3 100644
--- a/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml
+++ b/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml
@@ -26,6 +26,7 @@
- TemporaryBlindness
- RadiationProtection
- Drowsiness
+ - Adrenaline
- type: StandingState
- type: Tag
tags:
@@ -180,3 +181,156 @@
state: goliath_tentacle_retract
- type: EffectVisuals
- type: AnimationPlayer
+
+- type: entity
+ id: MobHivelord
+ parent: [ BaseMobAsteroid, FlyingMobBase ]
+ name: hivelord
+ description: A truly alien creature, it is a mass of unknown organic material, constantly fluctuating. When attacking, pieces of it split off and attack in tandem with the original.
+ components:
+ - type: Sprite
+ sprite: Mobs/Aliens/Asteroid/hivelord.rsi
+ layers:
+ - map: ["enum.DamageStateVisualLayers.Base"]
+ state: hivelord
+ - type: DamageStateVisuals
+ states:
+ Alive:
+ Base: hivelord
+ Dead:
+ Base: hivelord_dead
+ - type: MovementSpeedModifier
+ baseWalkSpeed : 3.5
+ baseSprintSpeed : 4.0
+ - type: MobThresholds
+ thresholds:
+ 0: Alive
+ 75: Dead
+ - type: MeleeWeapon
+ damage:
+ types:
+ Blunt: 0
+ - type: Gun
+ fireRate: 0.66
+ selectedMode: SemiAuto
+ showExamineText: false
+ availableModes:
+ - SemiAuto
+ soundGunshot: null
+ - type: RechargeBasicEntityAmmo
+ showExamineText: false
+ rechargeCooldown: 0
+ rechargeSound: null
+ - type: BasicEntityAmmoProvider
+ proto: MobHivelordBrood
+ capacity: 1
+ count: 1
+ - type: NpcFactionMember
+ factions:
+ - SimpleHostile
+ - type: HTN
+ rootTask:
+ task: SimpleRangedHostileCompound
+ blackboard:
+ VisionRadius: !type:Single
+ 4
+ AggroVisionRadius: !type:Single
+ 9
+ - type: Butcherable
+ spawned:
+ - id: FoodHivelordRemains
+
+- type: entity
+ id: MobHivelordBrood
+ parent: [ BaseMobAsteroid, FlyingMobBase ]
+ name: hivelord brood
+ description: A fragment of the original hivelord, rallying behind its original. One isn't much of a threat, but...
+ components:
+ - type: Sprite
+ sprite: Mobs/Aliens/Asteroid/hivelord.rsi
+ layers:
+ - state: hivelordbrood
+ - type: MovementSpeedModifier
+ baseWalkSpeed : 3.5
+ baseSprintSpeed : 4.0
+ - type: MobThresholds
+ thresholds:
+ 0: Alive
+ 5: Dead
+ - type: MeleeWeapon
+ soundHit:
+ path: /Audio/Weapons/bladeslice.ogg
+ angle: 0
+ attackRate: 1.0
+ range: 0.75
+ animation: WeaponArcPunch
+ damage:
+ types:
+ Slash: 7
+ - type: Ammo
+ muzzleFlash: null
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 5
+ behaviors:
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - type: NpcFactionMember
+ factions:
+ - SimpleHostile
+ - type: HTN
+ rootTask:
+ task: SimpleHostileCompound
+ blackboard: # highly aggressive
+ VisionRadius: !type:Single
+ 15
+ AggroVisionRadius: !type:Single
+ 15
+ - type: TimedDespawn
+ lifetime: 100
+
+- type: entity
+ id: FoodHivelordRemains
+ parent: FoodBase
+ name: hivelord remains
+ description: All that remains of a hivelord, it seems to be what allows it to break pieces of itself off without being hurt... its healing properties will soon become inert if not used quickly. Try not to think about what you're eating.
+ components:
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ maxVol: 5
+ reagents:
+ - ReagentId: Rororium
+ Quantity: 5
+ - type: Sprite
+ sprite: Objects/Consumable/Food/rorocore.rsi
+ state: boiled
+ - type: Item
+ size: Normal
+ - type: Perishable
+ rotAfter: 120 # rot after 2 minutes
+ molsPerSecondPerUnitMass: 0
+ forceRotProgression: true
+ - type: RotInto
+ entity: FoodHivelordRemainsInert
+ stage: 1
+ - type: StaticPrice
+ price: 5000
+
+- type: entity
+ id: FoodHivelordRemainsInert
+ parent: BaseItem
+ name: inert hivelord remains
+ description: All that remains of a hivelord... Now all is truly lost.
+ components:
+ - type: Sprite
+ sprite: Objects/Consumable/Food/rorocore.rsi
+ state: boiled
+ color: "#664444"
+ - type: SpaceGarbage
+ - type: Item
+ size: Normal
+ - type: StaticPrice
+ price: 500
diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml b/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml
index 8deefe9b8e..f400680eb0 100644
--- a/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml
+++ b/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml
@@ -29,6 +29,7 @@
- Flashed
- RadiationProtection
- Drowsiness
+ - Adrenaline
- type: Buckle
- type: StandingState
- type: Tag
@@ -106,6 +107,7 @@
- Flashed
- RadiationProtection
- Drowsiness
+ - Adrenaline
- type: Bloodstream
bloodMaxVolume: 150
- type: MobPrice
diff --git a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml
index fe2416510e..16e3038fcd 100644
--- a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml
+++ b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml
@@ -106,6 +106,7 @@
- Pacified
- RadiationProtection
- Drowsiness
+ - Adrenaline
- type: Temperature
heatDamageThreshold: 800
- type: Metabolizer
diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml
index cbe09c29ad..2349eddd3a 100644
--- a/Resources/Prototypes/Entities/Mobs/Species/base.yml
+++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml
@@ -135,6 +135,7 @@
- Flashed
- RadiationProtection
- Drowsiness
+ - Adrenaline
- type: Body
prototype: Human
requiredLegs: 2
diff --git a/Resources/Prototypes/Procedural/vgroid.yml b/Resources/Prototypes/Procedural/vgroid.yml
index 05ab652ece..0747a58b30 100644
--- a/Resources/Prototypes/Procedural/vgroid.yml
+++ b/Resources/Prototypes/Procedural/vgroid.yml
@@ -180,7 +180,7 @@
minCount: 8
maxCount: 15
groups:
- - id: MobGoliath
+ - id: SalvageSpawnerMobMiningAsteroid
amount: 1
#- type: dungeonConfig
@@ -207,10 +207,10 @@
# Mobs
# If you want exterior dungeon mobs add them under the prototype.
- !type:MobsDunGen
- minCount: 20
- maxCount: 30
+ minCount: 25
+ maxCount: 35
groups:
- - id: MobGoliath
+ - id: SalvageSpawnerMobMiningAsteroid
amount: 1
#- type: dungeonConfig
diff --git a/Resources/Prototypes/Reagents/chemicals.yml b/Resources/Prototypes/Reagents/chemicals.yml
index b2b4850c8f..769b7748f3 100644
--- a/Resources/Prototypes/Reagents/chemicals.yml
+++ b/Resources/Prototypes/Reagents/chemicals.yml
@@ -166,3 +166,23 @@
color: "#E6E6DA"
physicalDesc: reagent-physical-desc-crystalline
slippery: false
+
+- type: reagent
+ id: Rororium
+ name: reagent-name-rororium
+ desc: reagent-desc-rororium
+ group: Biological
+ flavor: tingly
+ physicalDesc: reagent-physical-desc-refreshing
+ color: "#bf1365"
+ metabolisms:
+ Medicine:
+ effects:
+ - !type:HealthChange
+ damage:
+ groups:
+ Brute: -4
+ - !type:GenericStatusEffect
+ key: Adrenaline
+ component: IgnoreSlowOnDamage
+ time: 120
diff --git a/Resources/Prototypes/status_effects.yml b/Resources/Prototypes/status_effects.yml
index 96379323fd..49e5ccc579 100644
--- a/Resources/Prototypes/status_effects.yml
+++ b/Resources/Prototypes/status_effects.yml
@@ -68,3 +68,7 @@
- type: statusEffect
id: Drowsiness #blurs your vision and makes you randomly fall asleep
+
+- type: statusEffect
+ id: Adrenaline
+ alert: Adrenaline
diff --git a/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord.png b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord.png
new file mode 100644
index 0000000000..09d70265e6
Binary files /dev/null and b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord.png differ
diff --git a/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_alert.png b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_alert.png
new file mode 100644
index 0000000000..e9ecab5eb7
Binary files /dev/null and b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_alert.png differ
diff --git a/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_alert_nocore.png b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_alert_nocore.png
new file mode 100644
index 0000000000..dc61d81d2b
Binary files /dev/null and b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_alert_nocore.png differ
diff --git a/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_dead.png b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_dead.png
new file mode 100644
index 0000000000..4e09b49b40
Binary files /dev/null and b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_dead.png differ
diff --git a/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_dead_nocore.png b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_dead_nocore.png
new file mode 100644
index 0000000000..5f2a004190
Binary files /dev/null and b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_dead_nocore.png differ
diff --git a/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_nocore.png b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_nocore.png
new file mode 100644
index 0000000000..7d38dbfe89
Binary files /dev/null and b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelord_nocore.png differ
diff --git a/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelordbrood.png b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelordbrood.png
new file mode 100644
index 0000000000..ddce7a9b19
Binary files /dev/null and b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/hivelordbrood.png differ
diff --git a/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/meta.json b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/meta.json
new file mode 100644
index 0000000000..b11726cf73
--- /dev/null
+++ b/Resources/Textures/Mobs/Aliens/Asteroid/hivelord.rsi/meta.json
@@ -0,0 +1,74 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from vgstation13 at https://github.com/vgstation-coders/vgstation13/blob/9bd459b27c73575fd5e3bf2efea13b816d0ac7c8/icons/mob/animal.dmi",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "hivelord",
+ "delays": [
+ [
+ 0.5,
+ 0.5,
+ 0.5,
+ 0.5
+ ]
+ ]
+ },
+ {
+ "name": "hivelord_nocore",
+ "delays": [
+ [
+ 0.5,
+ 0.5,
+ 0.5,
+ 0.5
+ ]
+ ]
+ },
+ {
+ "name": "hivelord_alert",
+ "delays": [
+ [
+ 0.5,
+ 0.5,
+ 0.5,
+ 0.5
+ ]
+ ]
+ },
+ {
+ "name": "hivelord_alert_nocore",
+ "delays": [
+ [
+ 0.5,
+ 0.5,
+ 0.5,
+ 0.5
+ ]
+ ]
+ },
+ {
+ "name": "hivelord_dead"
+ },
+ {
+ "name": "hivelord_dead_nocore"
+ },
+ {
+ "name": "hivelordbrood",
+ "delays": [
+ [
+ 0.5,
+ 0.5,
+ 0.5,
+ 0.5,
+ 0.5,
+ 0.5
+ ]
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Resources/Textures/Objects/Consumable/Food/rorocore.rsi/boiled.png b/Resources/Textures/Objects/Consumable/Food/rorocore.rsi/boiled.png
new file mode 100644
index 0000000000..1a1d0c92dc
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/rorocore.rsi/boiled.png differ
diff --git a/Resources/Textures/Objects/Consumable/Food/rorocore.rsi/icon.png b/Resources/Textures/Objects/Consumable/Food/rorocore.rsi/icon.png
new file mode 100644
index 0000000000..de235cca3c
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/rorocore.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Consumable/Food/rorocore.rsi/meta.json b/Resources/Textures/Objects/Consumable/Food/rorocore.rsi/meta.json
new file mode 100644
index 0000000000..84b5983a1c
--- /dev/null
+++ b/Resources/Textures/Objects/Consumable/Food/rorocore.rsi/meta.json
@@ -0,0 +1,17 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from https://github.com/vgstation-coders/vgstation13 at 1dbcf389b0ec6b2c51b002df5fef8dd1519f8068",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "boiled"
+ }
+ ]
+}