diff --git a/Content.Server/GameTicking/Rules/Components/LoadMapRuleComponent.cs b/Content.Server/GameTicking/Rules/Components/LoadMapRuleComponent.cs
index 90eab5b206d..817aa6d94eb 100644
--- a/Content.Server/GameTicking/Rules/Components/LoadMapRuleComponent.cs
+++ b/Content.Server/GameTicking/Rules/Components/LoadMapRuleComponent.cs
@@ -1,4 +1,9 @@
+using Content.Server.GameTicking.Rules;
+using Content.Server.Maps;
+using Content.Shared._DV.Planet;
using Content.Shared.GridPreloader.Prototypes;
+using Content.Shared.Weather;
+using Content.Shared.GridPreloader.Prot
using Content.Shared.Maps;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
diff --git a/Content.Server/_Mono/Planets/PlanetMapComponent.cs b/Content.Server/_Mono/Planets/PlanetMapComponent.cs
index 229409a8295..a11a6913c1b 100644
--- a/Content.Server/_Mono/Planets/PlanetMapComponent.cs
+++ b/Content.Server/_Mono/Planets/PlanetMapComponent.cs
@@ -1,3 +1,5 @@
+using Content.Shared.Weather;
+using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
namespace Content.Server._Mono.Planets;
@@ -7,5 +9,17 @@ public sealed partial class PlanetMapComponent : Component
{
[DataField]
public string Parallax = "bedrock";
+
+ ///
+ /// If theres a planet prototype set, loads this weather onto it.
+ ///
+ [DataField]
+ public ProtoId? PlanetWeather;
+
+ ///
+ /// How much time until the thing ends or whatever who cares.
+ ///
+ [DataField]
+ public double PlanetWeatherEndTime;
}
// Only excludes a grid from garbage clean really.
diff --git a/Resources/Locale/en-US/_Mono/biomes.ftl b/Resources/Locale/en-US/_Mono/biomes.ftl
index 80029677110..e9d52781149 100644
--- a/Resources/Locale/en-US/_Mono/biomes.ftl
+++ b/Resources/Locale/en-US/_Mono/biomes.ftl
@@ -2,3 +2,5 @@ salvage-biome-mod-mono-desert = Desert
# todo - get a better name than "desert planet" lmao
shuttle-destination-desert-planet = Desert Planet
+
+shuttle-destination-planet-zone = Landing Zone
diff --git a/Resources/Locale/en-US/_Mono/events/planets.ftl b/Resources/Locale/en-US/_Mono/events/planets.ftl
new file mode 100644
index 00000000000..ff82add8282
--- /dev/null
+++ b/Resources/Locale/en-US/_Mono/events/planets.ftl
@@ -0,0 +1,3 @@
+mono-planet-event-start-announcement = New planetary landing zone temporarily available for resource extraction. Estimated 30 minutes before intense weather blocks landing.
+mono-planet-event-warning-announcement = Estimated 5 minutes before intense weather blocks landing.
+mono-planet-event-end-announcement = Planetary landing zone blocked fully by weather. Await further notice.
diff --git a/Resources/Prototypes/Tiles/planet.yml b/Resources/Prototypes/Tiles/planet.yml
index 2694a4dbff9..598ec69c9c8 100644
--- a/Resources/Prototypes/Tiles/planet.yml
+++ b/Resources/Prototypes/Tiles/planet.yml
@@ -94,6 +94,7 @@
- type: tile
id: FloorDesertPlanet
+ suffix: Planet
name: tiles-desert-floor
sprite: /Textures/_Mono/Tiles/planet/auto_sand/sand_1_var.png
variants: 16
@@ -164,6 +165,7 @@
- type: tile
id: FloorRiverbed
+ suffix: Riverbed
name: tiles-low-desert-floor
sprite: /Textures/_RMC14/Tiles/planet/desert/desert.png
variants: 6
@@ -185,6 +187,7 @@
- type: tile
id: FloorAsteroidSandUnvariantizedPlanet
+ suffix: Planet
name: tiles-asteroid-sand
sprite: /Textures/Tiles/Asteroid/asteroid0.png
isSubfloor: true
@@ -212,6 +215,7 @@
- type: tile
id: FloorAsteroidSandPlanet
+ suffix: Planet
name: tiles-asteroid-sand
sprite: /Textures/Tiles/Asteroid/asteroid.png
variants: 13
diff --git a/Resources/Prototypes/_Mono/Entities/Markers/Spawners/Random/mobs_hostile_contractors.yml b/Resources/Prototypes/_Mono/Entities/Markers/Spawners/Random/mobs_hostile_contractors.yml
new file mode 100644
index 00000000000..2ff4d1c34af
--- /dev/null
+++ b/Resources/Prototypes/_Mono/Entities/Markers/Spawners/Random/mobs_hostile_contractors.yml
@@ -0,0 +1,62 @@
+- type: entity
+ name: PMC spawner
+ id: SpawnMobMonoPMCT1
+ parent: MarkerBase
+ suffix: AI, Hostile, T1
+ components:
+ - type: Sprite
+ layers:
+ - state: red
+ - state: ai
+ - type: RandomSpawner
+ prototypes:
+ - MobMonoPMCT1Soldier
+ - MobMonoPMCT1Handguns
+ chance: 1
+ offset: 0.0
+ rarePrototypes:
+ - SpawnMobMonoPMCT2
+ - MobMonoPMCT1Rifleman
+ rareChance: 0.3
+
+- type: entity
+ name: PMC spawner
+ id: SpawnMobMonoPMCT2
+ parent: MarkerBase
+ suffix: AI, Hostile, T2
+ components:
+ - type: Sprite
+ layers:
+ - state: red
+ - state: ai
+ - type: RandomSpawner
+ prototypes:
+ - MobMonoPMCSubmachineGunT2
+ - MobMonoPMCShotgunT2
+ chance: 1
+ offset: 0.0
+ rarePrototypes:
+ - SpawnMobMonoPMCT3
+ - MobMonoPMCSniperT2
+ - MobMonoPMCJackdawT2
+ rareChance: 0.2
+
+- type: entity
+ name: PMC spawner
+ id: SpawnMobMonoPMCT3
+ parent: MarkerBase
+ suffix: AI, Hostile, T3
+ components:
+ - type: Sprite
+ layers:
+ - state: red
+ - state: ai
+ - type: RandomSpawner
+ prototypes:
+ - MobMonoPMCAssaultT3
+ chance: 1
+ offset: 0.0
+ rarePrototypes:
+ - MobMonoPMCAutoriflemanT3
+ - MobMonoPMCGrenadierT3
+ rareChance: 0.1
diff --git a/Resources/Prototypes/_Mono/Entities/Mobs/NPCs/mob_hostile_mercenaries.yml b/Resources/Prototypes/_Mono/Entities/Mobs/NPCs/mob_hostile_mercenaries.yml
new file mode 100644
index 00000000000..a2ef53fa36b
--- /dev/null
+++ b/Resources/Prototypes/_Mono/Entities/Mobs/NPCs/mob_hostile_mercenaries.yml
@@ -0,0 +1,720 @@
+# Base
+- type: entity
+ name: PMC
+ abstract: true
+ parent:
+ - BaseC3MobHuman
+ - MobNonHumanHostileBase
+ - MobHumanoidInvetorySimplified
+ - MobHumanoidHostileAISimpleRanged
+ - NFMobRestrictions
+ id: MobMonoPMCBase
+ description: A private military contractor. Unreasonable filth.
+ suffix: PMC NPC
+ components:
+ - type: Damageable
+ damageModifierSet: MobMercenaryDamageModifierSet
+ - type: NpcFactionMember
+ factions:
+ - PMCExpeditionMono
+ - type: MobThresholds
+ thresholds:
+ 0: Alive
+ 100: Critical
+ 110: Dead
+ - type: SlowOnDamage
+ speedModifierThresholds:
+ 60: 0.9
+ 80: 0.6
+ - type: Stamina
+ critThreshold: 100
+ - type: DamageStateVisuals
+ rotate: true
+ - type: RotationVisuals
+ defaultRotation: 90
+ horizontalRotation: 90
+ - type: Butcherable
+ butcheringType: Spike
+ spawned:
+ - id: FoodMeatHuman
+ amount: 5
+ - type: RechargeBasicEntityAmmo
+ rechargeCooldown: 1.5
+ rechargeSound:
+ path: /Audio/_NF/Effects/silence.ogg
+ - type: Advertise
+ pack: mercenaryhumanoidchatter
+ minimumWait: 30
+ maximumWait: 120
+ nextAdvertisementTime: 10
+ - type: AutoWakeUp
+ - type: MovementSpeedModifier
+ baseWalkSpeed : 2.5
+ baseSprintSpeed : 4.5
+ - type: FootstepModifier
+ footstepSoundCollection:
+ collection: FootstepTile
+
+# Variations
+## Tier 1
+
+- type: entity
+ parent: MobMonoPMCBase
+ id: MobMonoPMCT1Soldier
+ suffix: T1, AK-220
+ components:
+ - type: Sprite
+ drawdepth: Mobs
+ layers:
+ - sprite: _NF/Mobs/Species/Templates/human.rsi
+ state: human
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-uniform
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-gloves
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-boots
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-vest
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-webbing
+ - sprite: Objects/Tanks/oxygen.rsi
+ state: equipped-BACKPACK
+ - sprite: _Mono/Clothing/Balaclavas/balaclava_ski_mask.rsi
+ state: equipped-BALACLAVA
+ color: "#1F1F1F"
+ - sprite: _Mono/Clothing/Eyes/Glasses/ballistic_goggles_red.rsi
+ state: equipped-EYES
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-gasmask
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-helmet
+ - sprite: _Mono/Objects/Weapons/Guns/SMGs/ak220.rsi
+ state: wielded-inhand-right
+ - type: BasicEntityAmmoProvider
+ proto: Cartridge9x19mmFMJ
+ capacity: 30
+ count: 30
+ - type: Gun
+ minAngle: 2
+ maxAngle: 6
+ fireRate: 6
+ angleIncrease: 21
+ angleDecay: 14
+ selectedMode: FullAuto
+ soundGunshot:
+ path: /Audio/_Mono/Weapons/Guns/SmallArms/Gunshots/smg.ogg
+ availableModes:
+ - FullAuto
+ - type: MobThresholds
+ thresholds:
+ 0: Alive
+ 100: Critical
+ 110: Dead
+ - type: SlowOnDamage
+ speedModifierThresholds:
+ 70: 0.9
+ 80: 0.6
+
+- type: entity
+ parent: MobMonoPMCBase
+ id: MobMonoPMCT1Rifleman
+ suffix: T1, AKM
+ components:
+ - type: Sprite
+ drawdepth: Mobs
+ layers:
+ - sprite: _NF/Mobs/Species/Templates/human.rsi
+ state: human
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-uniform
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-gloves
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-boots
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-vest
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-webbing
+ - sprite: Objects/Tanks/oxygen.rsi
+ state: equipped-BACKPACK
+ - sprite: _Mono/Clothing/Balaclavas/balaclava_ski_mask.rsi
+ state: equipped-BALACLAVA
+ color: "#1F1F1F"
+ - sprite: _Mono/Clothing/Eyes/Glasses/ballistic_goggles_red.rsi
+ state: equipped-EYES
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-gasmask
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-helmet
+ - sprite: _Mono/Objects/Weapons/Guns/Rifles/akm_inhands_32x.rsi
+ state: wielded-inhand-right
+ - type: BasicEntityAmmoProvider
+ proto: Cartridge762x39mmFMJ
+ capacity: 30
+ count: 30
+ - type: Gun
+ minAngle: 1
+ maxAngle: 2
+ fireRate: 5
+ projectileSpeed: 55
+ selectedMode: FullAuto
+ availableModes:
+ - FullAuto
+ soundGunshot:
+ path: /Audio/Weapons/Guns/Gunshots/rifle2.ogg
+ - type: MobThresholds
+ thresholds:
+ 0: Alive
+ 100: Critical
+ 110: Dead
+ - type: SlowOnDamage
+ speedModifierThresholds:
+ 70: 0.9
+ 80: 0.6
+
+- type: entity
+ parent: MobMonoPMCBase
+ id: MobMonoPMCT1Handguns
+ suffix: T1, Pollock
+ components:
+ - type: Sprite
+ drawdepth: Mobs
+ layers:
+ - sprite: _NF/Mobs/Species/Templates/human.rsi
+ state: human
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-uniform
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-gloves
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-boots
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-vest
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-webbing
+ - sprite: Objects/Tanks/oxygen.rsi
+ state: equipped-BACKPACK
+ - sprite: _Mono/Clothing/Balaclavas/balaclava_ski_mask.rsi
+ state: equipped-BALACLAVA
+ color: "#1F1F1F"
+ - sprite: _Mono/Clothing/Eyes/Glasses/ballistic_goggles_red.rsi
+ state: equipped-EYES
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-gasmask
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-helmet
+ - sprite: _DV/Objects/Weapons/Guns/Pistols/pollock.rsi
+ state: inhand-right
+ - type: BasicEntityAmmoProvider
+ proto: Cartridge9x19mmFMJ
+ capacity: 17
+ count: 17
+ - type: Gun
+ minAngle: 1
+ maxAngle: 2
+ fireRate: 5
+ projectileSpeed: 40
+ selectedMode: SemiAuto
+ availableModes:
+ - SemiAuto
+ soundGunshot:
+ path: /Audio/Weapons/Guns/Gunshots/pistol.ogg
+ - type: MobThresholds
+ thresholds:
+ 0: Alive
+ 100: Critical
+ 110: Dead
+ - type: SlowOnDamage
+ speedModifierThresholds:
+ 80: 0.9
+ 90: 0.75
+
+## Tier 2
+
+- type: startingGear
+ id: MobHumanoidMonoPMCGearTier2
+ equipment:
+ back: ClothingBackpackDuffelMonoTier2PMC
+
+- type: entity
+ name: PMC operator
+ parent: MobMonoPMCBase
+ id: MobMonoPMCSubmachineGunT2
+ suffix: T2, 9mm Vector
+ components:
+ - type: Loadout
+ prototypes:
+ - MobHumanoidMonoPMCGearTier2
+ - type: Sprite
+ drawdepth: Mobs
+ layers:
+ - sprite: _NF/Mobs/Species/Templates/human.rsi
+ state: human
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-jumpsuit
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-gloves
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-boots
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-vest
+ - sprite: Objects/Tanks/oxygen.rsi
+ state: equipped-BACKPACK
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: bag-equipped
+ - sprite: _Mono/Clothing/Balaclavas/balaclava_ski_mask.rsi
+ state: equipped-BALACLAVA
+ color: "#1F1F1F"
+ - sprite: _Mono/Clothing/Eyes/Glasses/ballistic_goggles_red.rsi
+ state: equipped-EYES
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-gasmask
+ - sprite: _Mono/Objects/Weapons/Guns/SMGs/vector.rsi
+ state: wielded-inhand-right
+ - type: BasicEntityAmmoProvider
+ proto: Cartridge9x19mmFMJ
+ capacity: 25
+ count: 25
+ - type: Gun
+ minAngle: 2
+ maxAngle: 16
+ fireRate: 7.5
+ angleIncrease: 3
+ angleDecay: 16
+ projectileSpeed: 50 # Mono
+ selectedMode: Burst
+ soundGunshot:
+ path: /Audio/Weapons/Guns/Gunshots/atreides.ogg
+ availableModes:
+ - Burst
+ burstCooldown: 0.5
+ burstFireRate: 14
+ shotsPerBurst: 3
+ - type: MobThresholds
+ thresholds:
+ 0: Alive
+ 120: Critical
+ 150: Dead
+ - type: SlowOnDamage
+ speedModifierThresholds:
+ 40: 0.9
+ 80: 0.6
+
+- type: entity
+ name: PMC operator
+ parent: MobMonoPMCBase
+ id: MobMonoPMCJackdawT2
+ suffix: T2, CAWS-25 Jackdaw
+ components:
+ - type: Loadout
+ prototypes:
+ - MobHumanoidMonoPMCGearTier2
+ - type: Sprite
+ drawdepth: Mobs
+ layers:
+ - sprite: _NF/Mobs/Species/Templates/human.rsi
+ state: human
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-jumpsuit
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-gloves
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-boots
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-vest
+ - sprite: Objects/Tanks/oxygen.rsi
+ state: equipped-BACKPACK
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: bag-equipped
+ - sprite: _Mono/Clothing/Balaclavas/balaclava_ski_mask.rsi
+ state: equipped-BALACLAVA
+ color: "#1F1F1F"
+ - sprite: _Mono/Clothing/Eyes/Glasses/ballistic_goggles_red.rsi
+ state: equipped-EYES
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-gasmask
+ - sprite: _DV/Objects/Weapons/Guns/Rifles/jackdaw.rsi
+ state: inhand-right
+ - type: BasicEntityAmmoProvider
+ proto: Cartridge635x40mmCaseless
+ capacity: 30
+ count: 30
+ - type: Gun
+ minAngle: 2
+ maxAngle: 4
+ angleIncrease: 2
+ angleDecay: 8
+ fireRate: 8
+ projectileSpeed: 35
+ selectedMode: FullAuto
+ availableModes:
+ - FullAuto
+ soundGunshot:
+ path: /Audio/Weapons/Guns/Gunshots/silenced.ogg
+ params:
+ volume: -1
+ - type: MobThresholds
+ thresholds:
+ 0: Alive
+ 120: Critical
+ 150: Dead
+ - type: SlowOnDamage
+ speedModifierThresholds:
+ 40: 0.9
+ 80: 0.6
+
+- type: entity
+ name: PMC marksman
+ parent: MobMonoPMCBase
+ id: MobMonoPMCSniperT2
+ suffix: T2, AK-410
+ components:
+ - type: Loadout
+ prototypes:
+ - MobHumanoidMonoPMCGearTier2
+ - type: Sprite
+ drawdepth: Mobs
+ layers:
+ - sprite: _NF/Mobs/Species/Templates/human.rsi
+ state: human
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-jumpsuit
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-gloves
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-boots
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-vest
+ - sprite: Objects/Tanks/oxygen.rsi
+ state: equipped-BACKPACK
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: bag-equipped
+ - sprite: _Mono/Clothing/Balaclavas/balaclava_ski_mask.rsi
+ state: equipped-BALACLAVA
+ color: "#1F1F1F"
+ - sprite: _Mono/Clothing/Eyes/Glasses/ballistic_goggles_red.rsi
+ state: equipped-EYES
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-gasmask
+ - sprite: _Mono/Objects/Weapons/Guns/Snipers/ak410_inhands_32x.rsi
+ state: wielded-inhand-right
+ - type: BasicEntityAmmoProvider
+ proto: Cartridge762x54mmRFMJ
+ capacity: 10
+ count: 10
+ - type: Gun
+ minAngle: 0
+ maxAngle: 3
+ fireRate: 1.5
+ selectedMode: SemiAuto
+ availableModes:
+ - SemiAuto
+ soundGunshot:
+ path: /Audio/Weapons/Guns/Gunshots/rifle2.ogg
+ - type: MobThresholds
+ thresholds:
+ 0: Alive
+ 120: Critical
+ 150: Dead
+ - type: SlowOnDamage
+ speedModifierThresholds:
+ 40: 0.9
+ 80: 0.6
+
+- type: startingGear
+ id: MobHumanoidMonoPMCGearTier2Shotgun
+ equipment:
+ back: ClothingBackpackDuffelMonoTier2PMCShotgun
+
+- type: entity
+ name: PMC breacher
+ parent: MobMonoPMCBase
+ id: MobMonoPMCShotgunT2
+ suffix: T2, Big Buddy
+ components:
+ - type: Loadout
+ prototypes:
+ - MobHumanoidMonoPMCGearTier2Shotgun
+ - type: Sprite
+ drawdepth: Mobs
+ layers:
+ - sprite: _NF/Mobs/Species/Templates/human.rsi
+ state: human
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-jumpsuit
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-gloves
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-boots
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-vest
+ - sprite: Objects/Tanks/oxygen.rsi
+ state: equipped-BACKPACK
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: bag-equipped
+ - sprite: _Mono/Clothing/Balaclavas/balaclava_ski_mask.rsi
+ state: equipped-BALACLAVA
+ color: "#1F1F1F"
+ - sprite: _Mono/Clothing/Eyes/Glasses/ballistic_goggles_red.rsi
+ state: equipped-EYES
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-gasmask
+ - sprite: _Mono/Objects/Weapons/Guns/Shotguns/BigBuddy_inhands_64x.rsi
+ state: wielded-inhand-right
+ - type: BasicEntityAmmoProvider
+ proto: ShellShotgun23x75mmBuckshot
+ capacity: 6
+ count: 6
+ - type: Gun
+ fireRate: 0.5
+ projectileSpeed: 40
+ selectedMode: SemiAuto
+ availableModes:
+ - SemiAuto
+ soundGunshot:
+ path: /Audio/_Mono/Weapons/Guns/SmallArms/Gunshots/bigshotgun_fire.ogg
+ soundEmpty:
+ path: /Audio/Weapons/Guns/Empty/empty.ogg
+ - type: MobThresholds
+ thresholds:
+ 0: Alive
+ 120: Critical
+ 150: Dead
+ - type: SlowOnDamage
+ speedModifierThresholds:
+ 40: 0.9
+ 80: 0.6
+
+## Tier 3
+
+- type: startingGear
+ id: MobHumanoidMonoPMCGearTier3
+ equipment:
+ back: ClothingBackpackDuffelMonoTier3PMC
+
+- type: entity
+ name: PMC assaulter
+ parent: MobMonoPMCBase
+ id: MobMonoPMCAssaultT3
+ suffix: T3, LTR-556
+ components:
+ - type: Loadout
+ prototypes:
+ - MobHumanoidMonoPMCGearTier3
+ - type: Sprite
+ drawdepth: Mobs
+ layers:
+ - sprite: _NF/Mobs/Species/Templates/human.rsi
+ state: human
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-jumpsuit
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-hardsuit
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-webbing
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-hardsuit-head
+ - sprite: Objects/Tanks/oxygen.rsi
+ state: equipped-BACKPACK
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: bag-equipped
+ - sprite: _Mono/Objects/Weapons/Guns/Rifles/NTSF-LTR-556 # TODO - KILL AVTOMATA WITH LARGE HAMMERS AND SAWS FOR NOT .RSI-ING THIS!!!!!!
+ state: wielded-inhand-right
+ - type: BasicEntityAmmoProvider
+ proto: Cartridge68x52mmCaseless
+ capacity: 30
+ count: 30
+ - type: Gun
+ minAngle: 13
+ maxAngle: 10
+ angleIncrease: 6
+ angleDecay: 40
+ fireRate: 9
+ selectedMode: FullAuto
+ availableModes:
+ - FullAuto
+ soundGunshot:
+ path: /Audio/_Mono/Weapons/Guns/SmallArms/Gunshots/light_rifle_3.ogg
+ - type: MobThresholds
+ thresholds:
+ 0: Alive
+ 140: Critical
+ 150: Dead
+ - type: SlowOnDamage
+ speedModifierThresholds:
+ 70: 0.9
+ 100: 0.6
+
+- type: entity
+ name: PMC autorifleman
+ parent: MobMonoPMCBase
+ id: MobMonoPMCAutoriflemanT3
+ suffix: T3, Grizzly
+ components:
+ - type: Loadout
+ prototypes:
+ - MobHumanoidMonoPMCGearTier3
+ - type: Sprite
+ drawdepth: Mobs
+ layers:
+ - sprite: _NF/Mobs/Species/Templates/human.rsi
+ state: human
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-jumpsuit
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-hardsuit
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-webbing
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-hardsuit-head
+ - sprite: Objects/Tanks/oxygen.rsi
+ state: equipped-BACKPACK
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: bag-equipped
+ - sprite: _Mono/Objects/Weapons/Guns/LMGs/grizzly/Grizzly-inhands.rsi
+ state: wielded-inhand-right
+ - type: BasicEntityAmmoProvider
+ proto: Cartridge68x52mmCaseless
+ capacity: 80
+ count: 80
+ - type: Gun
+ minAngle: 0
+ maxAngle: 12
+ angleIncrease: 1
+ angleDecay: 12
+ fireRate: 8
+ selectedMode: FullAuto
+ availableModes:
+ - FullAuto
+ soundGunshot:
+ path: /Audio/_Mono/Weapons/Guns/SmallArms/Gunshots/heavy_rifle_1.ogg
+ - type: MobThresholds
+ thresholds:
+ 0: Alive
+ 140: Critical
+ 150: Dead
+ - type: SlowOnDamage
+ speedModifierThresholds:
+ 70: 0.9
+ 100: 0.6
+
+- type: entity
+ name: PMC grenadier
+ parent: MobMonoPMCBase
+ id: MobMonoPMCGrenadierT3
+ suffix: T3, Anubis
+ components:
+ - type: Loadout
+ prototypes:
+ - MobHumanoidMonoPMCGearTier3
+ - type: Sprite
+ drawdepth: Mobs
+ layers:
+ - sprite: _NF/Mobs/Species/Templates/human.rsi
+ state: human
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-jumpsuit
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-hardsuit
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-webbing
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-hardsuit-head
+ - sprite: Objects/Tanks/oxygen.rsi
+ state: equipped-BACKPACK
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: bag-equipped
+ - sprite: _Mono/Objects/Weapons/Guns/Launchers/mk6-tpgl_inhands_32x.rsi
+ state: wielded-inhand-right
+ - type: BasicEntityAmmoProvider
+ proto: Cartridge35mmGrenadeSAPHE
+ capacity: 6
+ count: 6
+ - type: Gun
+ minAngle: 0
+ maxAngle: 3
+ projectileSpeed: 70
+ fireRate: 0.2
+ selectedMode: SemiAuto
+ availableModes:
+ - SemiAuto
+ soundGunshot:
+ path: /Audio/_Harmony/Weapons/Guns/Gunshots/hristov_fire_alt.ogg
+ soundEmpty:
+ path: /Audio/Weapons/Guns/Empty/empty.ogg
+ - type: LaserPointer
+ targetedColor: "#ff0037"
+ defaultColor: "#03c2fc"
+ - type: MobThresholds
+ thresholds:
+ 0: Alive
+ 140: Critical
+ 150: Dead
+ - type: SlowOnDamage
+ speedModifierThresholds:
+ 70: 0.9
+ 100: 0.6
+
+## Tier 4 - Boss
+
+- type: startingGear
+ id: MobHumanoidMonoPMCGearTier4
+ equipment:
+ back: ClothingBackpackDuffelMonoTier4PMC
+
+- type: entity
+ name: PMC field commander
+ parent: [ MobMonoPMCBase, NFMobBossRestrictions ]
+ id: MobMonoPMCBoss
+ suffix: T4, MR-8B
+ components:
+ - type: Loadout
+ prototypes:
+ - MobHumanoidMonoPMCGearTier4
+ - type: Sprite
+ drawdepth: Mobs
+ layers:
+ - sprite: _NF/Mobs/Species/Templates/human.rsi
+ state: human
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-jumpsuit
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-hardsuit-heavy
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-webbing
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-hardsuit-heavy-head
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: pmc-hardsuit-heavy-head-unshaded
+ shader: unshaded
+ - sprite: Objects/Tanks/oxygen.rsi
+ state: equipped-BACKPACK
+ - sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: bag-equipped
+ - sprite: _Mono/Objects/Weapons/Guns/LMGs/mr8b.rsi
+ state: wielded-inhand-right
+ - type: BasicEntityAmmoProvider
+ proto: Cartridge8x65mmSKR
+ capacity: 200
+ count: 200
+ - type: Gun
+ minAngle: 4
+ maxAngle: 16
+ angleIncrease: 3
+ angleDecay: 34
+ fireRate: 6 # 360 rpm
+ selectedMode: FullAuto
+ availableModes:
+ - FullAuto
+ soundGunshot:
+ path: /Audio/_Mono/Weapons/Guns/SmallArms/Gunshots/heavy_rifle_1.ogg
+ - type: MobThresholds
+ thresholds:
+ 0: Alive
+ 200: Critical
+ 250: Dead
+ - type: SlowOnDamage
+ speedModifierThresholds:
+ 60: 0.9
+ 120: 0.6
diff --git a/Resources/Prototypes/_Mono/Entities/Mobs/NPCs/mob_hostile_mercenaries_loot.yml b/Resources/Prototypes/_Mono/Entities/Mobs/NPCs/mob_hostile_mercenaries_loot.yml
new file mode 100644
index 00000000000..fe66082f056
--- /dev/null
+++ b/Resources/Prototypes/_Mono/Entities/Mobs/NPCs/mob_hostile_mercenaries_loot.yml
@@ -0,0 +1,191 @@
+# BASE
+## BACK - for gear and cash
+- type: entity
+ parent: BaseItem
+ id: MonoPMCDuffelGiftBox
+ name: PMC gear bundle
+ description: Loot boxes? Here?
+ abstract: true
+ suffix: NPC Loot
+ components:
+ - type: Sprite
+ sprite: _Mono/Clothing/NPC/pmc.rsi
+ state: bag
+ - type: Item
+ size: Normal
+ - type: Clothing
+ sprite: _Mono/Clothing/NPC/pmc.rsi
+ clothingVisuals:
+ back:
+ - state: bag-equipped
+ quickEquip: false
+ slots:
+ - back
+
+- type: entity
+ parent: MonoPMCDuffelGiftBox
+ id: ClothingBackpackDuffelMonoTier2PMC
+ suffix: NPC Loot, T2
+ components:
+ - type: SpawnItemsOnUse
+ items:
+ - id: Magazine9x19mmSubMachineGunFMJ
+ prob: 0.6
+ - id: Magazine9x19mmSubMachineGunFMJ
+ prob: 0.6
+ - id: Magazine762x39mmFMJ
+ prob: 0.6
+ - id: Magazine762x39mmFMJ
+ prob: 0.6
+ - id: Magazine762x54mmRFMJ
+ prob: 0.4
+ - id: AmmoBox762x39mmFMJ
+ prob: 0.2
+ - id: Magazine635x40mmCaseless
+ prob: 0.2
+ - id: Tourniquet
+ prob: 0.4
+ - id: SpawnDungeonLootMaterialsValuableFull
+ prob: 0.05
+ - id: SpaceCash500
+ prob: 0.2
+ - id: SpawnLootMonoPMCMisc
+ prob: 0.4
+ sound:
+ path: /Audio/Items/jumpsuit_equip.ogg
+
+- type: entity
+ parent: MonoPMCDuffelGiftBox
+ id: ClothingBackpackDuffelMonoTier2PMCShotgun
+ suffix: NPC Loot, T2 Shotgun
+ components:
+ - type: SpawnItemsOnUse
+ items:
+ - id: AmmoBox23x75mmBuckshot
+ prob: 0.9
+ - id: AmmoBox23x75mmDozd
+ prob: 0.2
+ - id: AmmoBox23x75mmSlug
+ prob: 0.2
+ - id: AmmoBox23x75mmFlashbang
+ prob: 0.1
+ - id: SpawnDungeonLootMaterialsValuableFull
+ prob: 0.05
+ - id: SpaceCash500
+ prob: 0.2
+ - id: SpawnLootMonoPMCMisc
+ prob: 0.4
+ sound:
+ path: /Audio/Items/jumpsuit_equip.ogg
+
+- type: entity
+ parent: MonoPMCDuffelGiftBox
+ id: ClothingBackpackDuffelMonoTier3PMC
+ suffix: NPC Loot, T3
+ components:
+ - type: SpawnItemsOnUse
+ items:
+ - id: Magazine68x52mmCaseless
+ prob: 0.6
+ - id: Magazine68x52mmCaseless
+ prob: 0.6
+ - id: AmmoBox68x52mmCaseless
+ prob: 0.7
+ - id: Tourniquet
+ prob: 0.4
+ - id: SpawnDungeonLootMaterialsValuableFull
+ prob: 0.2
+ - id: SpaceCash500
+ prob: 0.65
+ - id: SpaceCash500
+ prob: 0.45
+ - id: SpawnLootMonoPMCMisc
+ prob: 0.4
+ sound:
+ path: /Audio/Items/jumpsuit_equip.ogg
+
+- type: entity
+ parent: MonoPMCDuffelGiftBox
+ id: ClothingBackpackDuffelMonoTier4PMC
+ suffix: NPC Loot, T4
+ components:
+ - type: SpawnItemsOnUse
+ items:
+ # Cash
+ - id: SpaceCash2500
+ prob: 0.9
+ - id: SpaceCash500
+ prob: 0.65
+ - id: SpaceCash500
+ prob: 0.45
+ - id: SpaceCash2500
+ prob: 0.1
+ - id: SpaceCash2500
+ prob: 0.1
+ # Weapons
+ - id: WeaponRifleMR8C # mono
+ prob: 0.3
+ # Items
+ - id: Magazine8x65mmSKR
+ prob: 0.9
+ - id: AmmoBox8x65mmSKR
+ prob: 0.4
+ - id: AmmoTechFabCircuitboard
+ prob: 0.1
+ # Bonus Loot T4
+ - id: SpaceCash2500
+ prob: 0.9
+ - id: SpawnDungeonLootFlatpacks
+ prob: 0.9
+ - id: SpaceCash1000
+ prob: 0.7
+ - id: SpawnDungeonLootMaterialsValuableFull
+ prob: 0.7
+ - id: SpawnDungeonLootPartsEngi
+ amount: 2
+ prob: 0.7
+ - id: SpawnDungeonLootVaultGuns
+ prob: 0.4
+ - id: BlueprintWeaponRifleNtsfLtr
+ prob: 0.05
+ - id: SpawnLootMonoPMCMisc
+ prob: 0.4
+ sound:
+ path: /Audio/Items/jumpsuit_equip.ogg
+
+- type: entity
+ name: random MonoPMC misc loot drop
+ id: SpawnLootMonoPMCMisc
+ parent: MarkerBasePlaceFree
+ components:
+ - type: Sprite
+ layers:
+ - state: green
+ - sprite: _NF/Markers/general.rsi
+ state: questionmark
+ color: white
+ - type: RandomSpawner
+ prototypes:
+ - MedkitFilled
+ - GunAttachmentGripErebusVFG
+ - GunAttachmentGripErebusLAM
+ - GunAttachmentOpticErebus2x
+ - GunAttachmentOpticErebus4x
+ - GunAttachmentOpticErebus8x
+ - GunAttachmentSuppressorMulticalPistol
+ - GunAttachmentSuppressorMulticalRifle
+ - POILootWeaponsAmmoMarker
+ - FentanylSolidified
+ - SpaceCash2500
+ - SpaceCash2000
+ - SpaceCash1000
+ - SpaceCash500
+ - SpawnDungeonLootPartsEngi
+ chance: 0.4
+ offset: 0.0
+ rarePrototypes:
+ - StimkitFilled
+ - BlueprintWeaponRifleNtsfLtr
+ - BlueprintWeaponSubMachineGunVectorNtsfHclm
+ - BlueprintLauncherRocket # Its hilarious, and it has a really low chance to actually happen.
+ rareChance: 0.01
diff --git a/Resources/Prototypes/_Mono/GameRules/planets.yml b/Resources/Prototypes/_Mono/GameRules/planets.yml
new file mode 100644
index 00000000000..979f2ed5566
--- /dev/null
+++ b/Resources/Prototypes/_Mono/GameRules/planets.yml
@@ -0,0 +1,38 @@
+- type: entity
+ id: MonoPlanetmapSpawnerScheduler
+ parent: BaseGameRule
+ components:
+ - type: BasicStationEventScheduler
+ scheduledGameRules: !type:NestedSelector
+ tableId: PlanetMapsTable
+ minimumTimeUntilFirstEvent: 1800 # 30 minutes
+ minMaxEventTiming:
+ min: 3900 # 65 minutes between events - 5 min buffer between
+ max: 3900 # 65 minutes between events - 5 min buffer between
+
+- type: entityTable
+ id: PlanetMapsTable
+ table: !type:AllSelector # we need to pass a list of rules, since rules have further restrictions to consider via StationEventComp
+ children:
+ - id: PlanetZoneSnowA
+
+- type: entity
+ parent: BaseRandomShuttleRule
+ id: PlanetZoneSnowA
+ components:
+ - type: StationEvent
+ startAnnouncement: mono-planet-event-start-announcement
+ startAudio:
+ path: /Audio/Misc/notice2.ogg
+ warningAnnouncement: mono-planet-event-warning-announcement
+ warningAudio:
+ path: /Audio/Misc/notice1.ogg
+ endAnnouncement: mono-planet-event-end-announcement
+ duration: 3600 # This means nothing outside of announcements if you're trying to change this, it uses a TimedDespawn comp added to the map prototype.
+ maxDuration: 3600 # Same as above.
+ weight: 2
+ maxOccurrences: 1
+ - type: GameRule
+ minPlayers: 15
+ - type: LoadMapRule
+ gameMap: SnowZoneA
diff --git a/Resources/Prototypes/_Mono/Planets/Maps/Snow/zone_a.yml b/Resources/Prototypes/_Mono/Planets/Maps/Snow/zone_a.yml
new file mode 100644
index 00000000000..72564f067c2
--- /dev/null
+++ b/Resources/Prototypes/_Mono/Planets/Maps/Snow/zone_a.yml
@@ -0,0 +1,19 @@
+- type: gameMap
+ id: SnowZoneA
+ mapName: 'Landing Zone'
+ mapPath: /Maps/_Mono/Planet/Snow/ # Nothing to use yet lol im ignoring fail
+ maxRandomOffset: 0
+ randomRotation: false
+ minPlayers: 0
+ maxPlayers: 100
+ stations:
+ Planet:
+ stationProto: StandardNanotrasenStation
+ gridComponents:
+ - type: TimedDespawn
+ lifetime: 3600
+ components:
+ - type: StationNameSetup
+ mapNameTemplate: 'Landing Zone'
+ - type: StationBiome
+ biome: MonoSnowEventPlanet
diff --git a/Resources/Prototypes/_Mono/Planets/events.yml b/Resources/Prototypes/_Mono/Planets/events.yml
new file mode 100644
index 00000000000..7923b2fb312
--- /dev/null
+++ b/Resources/Prototypes/_Mono/Planets/events.yml
@@ -0,0 +1,307 @@
+- type: planet
+ id: GameruleDesertWorld60Minutes
+ biome: MonoDesertEventPlanet
+ mapName: shuttle-destination-planet-zone
+ mapLight: "#FEFEFE"
+ addedComponents:
+ - type: FTLDestination
+ - type: TimedDespawn
+ lifetime: 3600
+ atmosphere:
+ volume: 2500
+ temperature: 303.6 # 30.45 celsius
+ moles:
+ - 32.458
+ - 68.213
+
+- type: biomeTemplate
+ id: MonoDesertEventPlanet
+ layers:
+ # Boulder Placement
+ - !type:BiomeEntityLayer
+ threshold: 0.975
+ noise:
+ seed: 0
+ frequency: 5
+ noiseType: OpenSimplex2
+ allowedTiles:
+ - FloorDesert
+ - FloorDesertRocky
+ - FloorDesertPlanet
+ - FloorAsteroidSandUnvariantizedPlanet
+ entities:
+ - FloraRockSolidPlanet
+ # Flora Placement
+ # Piluma
+ - !type:BiomeEntityLayer
+ threshold: 0.915
+ noise:
+ seed: 0
+ frequency: 2
+ noiseType: OpenSimplex2
+ allowedTiles:
+ - FloorDesert
+ - FloorDesertPlanet
+ - FloorAsteroidSandUnvariantizedPlanet
+ entities:
+ - FloraPilumaPlant
+ # Orakim
+ - !type:BiomeEntityLayer
+ threshold: 0.925
+ noise:
+ seed: 0
+ frequency: 2
+ noiseType: OpenSimplex2
+ allowedTiles:
+ - FloorDesert
+ - FloorDesertPlanet
+ entities:
+ - FloraOrakimPlant
+ # Rock decals
+ - !type:BiomeDecalLayer
+ allowedTiles:
+ - FloorDesert
+ - FloorDesertRocky
+ - FloorDesertPlanet
+ - FloorAsteroidSandUnvariantizedPlanet
+ - FloorAsteroidSandPlanet
+ threshold: 0.9
+ divisions: 1
+ noise:
+ seed: 1
+ frequency: 5
+ decals:
+ - Basalt1
+ - Basalt2
+ - Basalt3
+ - Basalt4
+ - Basalt5
+ - Basalt6
+ - Basalt7
+ - Basalt8
+ - Basalt9
+ # Bush decals
+ - !type:BiomeDecalLayer
+ allowedTiles:
+ - FloorDesert
+ - FloorDesertPlanet
+ threshold: 0.9
+ divisions: 1
+ noise:
+ seed: 1
+ frequency: 0.9
+ decals:
+ - Bushj1
+ - Bushj2
+ - Bushj3
+ # Large rock areas
+ - !type:BiomeEntityLayer
+ allowedTiles:
+ - FloorAsteroidSandUnvariantizedPlanet
+ threshold: -0.05
+ noise:
+ seed: 0
+ noiseType: Cellular
+ frequency: 0.05
+ lacunarity: 5
+ fractalType: FBm
+ octaves: 2
+ cellularDistanceFunction: Euclidean
+ cellularReturnType: Distance2
+ entities:
+ - WallRockSand
+ - !type:BiomeDummyLayer
+ id: Loot
+ # Fill layer
+ # Base tiles
+ - !type:BiomeTileLayer
+ threshold: -1
+ tile: FloorAsteroidSandPlanet
+ # Apply planet desert tile as noise so it doesnt look flat and boring
+ - !type:BiomeTileLayer
+ threshold: -0.40
+ tile: FloorDesertPlanet
+ noise:
+ seed: 0
+ noiseType: Cellular
+ frequency: 0.2
+ lacunarity: 2
+ fractalType: FBm
+ octaves: 2
+ cellularDistanceFunction: Euclidean
+ cellularReturnType: Distance2
+ # Unvariantized tile for rock walls to be placed on
+ - !type:BiomeTileLayer
+ tile: FloorAsteroidSandUnvariantizedPlanet
+ threshold: -0.30
+ noise:
+ seed: 0
+ noiseType: Cellular
+ frequency: 0.05
+ lacunarity: 2
+ fractalType: FBm
+ octaves: 5
+ cellularDistanceFunction: Euclidean
+ cellularReturnType: Distance2
+
+- type: planet
+ id: GameruleSnowWorld60Minutes
+ biome: MonoSnowEventPlanet
+ mapName: shuttle-destination-planet-zone
+ mapLight: "#FEFEFE"
+ addedComponents:
+ - type: FTLDestination
+ - type: TimedDespawn
+ lifetime: 3600
+ atmosphere:
+ volume: 2500
+ temperature: 237.55 # -35.6 celsius
+ moles:
+ - 32.458
+ - 68.213
+
+- type: biomeTemplate
+ id: MonoSnowEventPlanet
+ layers:
+ # Sparse vegetation
+ - !type:BiomeDecalLayer
+ allowedTiles:
+ - FloorSnow
+ divisions: 2
+ threshold: -0.50
+ noise:
+ seed: 0
+ noiseType: Cellular
+ frequency: 1
+ decals:
+ - grasssnowa1
+ - grasssnowa2
+ - grasssnowa3
+ - grasssnowb1
+ - grasssnowb2
+ - grasssnowb3
+ - grasssnowc1
+ - grasssnowc2
+ - grasssnowc3
+ # Dense, bland grass
+ - !type:BiomeDecalLayer
+ allowedTiles:
+ - FloorSnow
+ divisions: 1
+ threshold: -0.35
+ noise:
+ seed: 0
+ noiseType: Cellular
+ frequency: 0.2
+ fractalType: FBm
+ octaves: 5
+ lacunarity: 2
+ cellularDistanceFunction: Euclidean
+ cellularReturnType: Distance2
+ decals:
+ - grasssnow
+ - grasssnow01
+ - grasssnow02
+ - grasssnow03
+ - grasssnow04
+ - grasssnow05
+ - grasssnow06
+ - grasssnow07
+ - grasssnow08
+ - grasssnow09
+ - grasssnow10
+ - grasssnow11
+ - grasssnow12
+ - grasssnow13
+ # Little bit of coloured grass
+ - !type:BiomeDecalLayer
+ allowedTiles:
+ - FloorSnow
+ divisions: 1
+ threshold: -0.0
+ noise:
+ seed: 0
+ noiseType: Cellular
+ frequency: 1
+ fractalType: None
+ cellularDistanceFunction: Euclidean
+ cellularReturnType: Distance2
+ decals:
+ - bushsnowa1
+ - bushsnowa2
+ - bushsnowa3
+ - bushsnowb3
+ - bushsnowb2
+ - bushsnowb3
+ - !type:BiomeEntityLayer
+ threshold: 0.3
+ noise:
+ seed: 0
+ noiseType: OpenSimplex2
+ fractalType: FBm
+ frequency: 2
+ allowedTiles:
+ - FloorSnow
+ entities:
+ - FloraTreeConifer
+ # Boulder Placement
+ - !type:BiomeEntityLayer
+ threshold: 0.975
+ noise:
+ seed: 0
+ frequency: 5
+ noiseType: OpenSimplex2
+ allowedTiles:
+ - FloorSnow
+ - FloorSnowDug
+ entities:
+ - FloraRockSolidPlanet
+ # Large rock areas
+ - !type:BiomeEntityLayer
+ allowedTiles:
+ - FloorCave
+ threshold: -1
+ noise:
+ seed: 0
+ noiseType: Cellular
+ frequency: 0.05
+ lacunarity: 5
+ fractalType: FBm
+ octaves: 2
+ cellularDistanceFunction: Euclidean
+ cellularReturnType: Distance2
+ entities:
+ - WallRockBasalt
+ - !type:BiomeDummyLayer
+ id: Loot
+ # Fill layer
+ # Base tiles
+ - !type:BiomeTileLayer
+ threshold: -1
+ tile: FloorSnowDug
+ # Apply planet desert tile as noise so it doesnt look flat and boring
+ - !type:BiomeTileLayer
+ threshold: -0.40
+ tile: FloorSnow
+ noise:
+ seed: 0
+ noiseType: Cellular
+ frequency: 0.4
+ lacunarity: 2
+ fractalType: FBm
+ octaves: 4
+ cellularDistanceFunction: Euclidean
+ cellularReturnType: Distance2
+ # Unvariantized tile for rock walls to be placed on
+ - !type:BiomeTileLayer
+ tile: FloorCave
+ threshold: -0.2
+ noise:
+ seed: 0
+ noiseType: Cellular
+ frequency: 0.03
+ lacunarity: 2
+ fractalType: FBm
+ octaves: 5
+ cellularDistanceFunction: Euclidean
+ cellularReturnType: Distance2
diff --git a/Resources/Prototypes/_Mono/Planets/salvage_mods.yml b/Resources/Prototypes/_Mono/Planets/salvage_mods.yml
index 09da0548d17..1ca3201cdb7 100644
--- a/Resources/Prototypes/_Mono/Planets/salvage_mods.yml
+++ b/Resources/Prototypes/_Mono/Planets/salvage_mods.yml
@@ -9,3 +9,121 @@
color: "#FFFFFF" # Genius!
biomes:
- Desert
+
+# Weather mods
+
+- type: salvageWeatherMod
+ id: Hail
+ desc: salvage-weather-mod-hail
+ weather: Hail
+ cost: 2
+ biomes:
+ - Snow
+
+- type: salvageWeatherMod
+ id: SnowfallHeavy
+ desc: salvage-weather-mod-heavy-snowfall
+ weather: MonoBlizzard
+ cost: 1
+ biomes:
+ - Snow
+
+- type: salvageWeatherMod
+ id: SnowfallMedium
+ desc: salvage-weather-mod-medium-snowfall
+ weather: MonoSnow
+ cost: 1
+ biomes:
+ - Grasslands
+ - Snow
+
+- type: salvageWeatherMod
+ id: SnowfallLight
+ desc: salvage-weather-mod-light-snowfall
+ weather: MonoSnowLight
+ cost: 1
+ biomes:
+ - Grasslands
+ - Snow
+
+- type: salvageWeatherMod
+ id: AshfallHeavy
+ desc: salvage-weather-mod-heavy-ashfall
+ weather: AshfallHeavy
+ cost: 5
+ biomes:
+ - Lava
+
+- type: salvageWeatherMod
+ id: Ashfall
+ desc: salvage-weather-mod-medium-ashfall
+ weather: Ashfall
+ cost: 2
+ biomes:
+ - Lava
+ - Shadow
+
+- type: salvageWeatherMod
+ id: AshfallLight
+ desc: salvage-weather-mod-light-ashfall
+ weather: AshfallLight
+ cost: 1
+ biomes:
+ - Lava
+ - Shadow
+ - Caves
+ - Desert
+
+- type: salvageWeatherMod
+ id: Fallout
+ desc: salvage-weather-mod-fallout
+ weather: Fallout
+ cost: 1
+ biomes:
+ - Lava
+ - Shadow
+
+- type: salvageWeatherMod
+ id: SandstormHeavy
+ desc: salvage-weather-mod-heavy-sandstorm
+ weather: SandstormHeavy
+ cost: 1
+ biomes:
+ - Caves
+ - Desert
+
+- type: salvageWeatherMod
+ id: Sandstorm
+ desc: salvage-weather-mod-sandstorm
+ weather: Sandstorm
+ biomes:
+ - Caves
+ - Lava
+ - Desert
+
+- type: salvageWeatherMod
+ id: LightRain
+ desc: salvage-weather-mod-rain-light
+ weather: MonoLightRain
+ biomes:
+ - Grasslands
+ - Lava # primordial planet or something idk
+
+- type: salvageWeatherMod
+ id: Rain
+ desc: salvage-weather-mod-rain
+ weather: MonoRain
+ biomes:
+ - Grasslands
+
+- type: salvageWeatherMod
+ id: Storm
+ desc: salvage-weather-mod-storm
+ weather: MonoStorm
+ biomes:
+ - Grasslands
+
+- type: salvageWeatherMod
+ id: ClearWeather
+ desc: salvage-weather-mod-none
+ weather: ClearWeather
diff --git a/Resources/Prototypes/_Mono/ai_factions.yml b/Resources/Prototypes/_Mono/ai_factions.yml
index 37f3308888f..125aa78eae4 100644
--- a/Resources/Prototypes/_Mono/ai_factions.yml
+++ b/Resources/Prototypes/_Mono/ai_factions.yml
@@ -70,3 +70,7 @@
friendly:
- AberrantFleshExpeditionNF
defaultHostile: true
+
+- type: npcFaction
+ id: PMCExpeditionMono
+ defaultHostile: true
diff --git a/Resources/Prototypes/_NF/Entities/Markers/Spawners/Random/dungeon_items_general.yml b/Resources/Prototypes/_NF/Entities/Markers/Spawners/Random/dungeon_items_general.yml
index 16d1d71c439..2d6e8d0e22c 100644
--- a/Resources/Prototypes/_NF/Entities/Markers/Spawners/Random/dungeon_items_general.yml
+++ b/Resources/Prototypes/_NF/Entities/Markers/Spawners/Random/dungeon_items_general.yml
@@ -53,7 +53,7 @@
- type: entity
name: random pen
id: SpawnDungeonLootBureaucracyPen
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
parent: MarkerBasePlaceFree
suffix: Dungeon
components:
@@ -585,7 +585,7 @@
id: SpawnDungeonMachineFrame
parent: MarkerBase
suffix: Dungeon
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
@@ -608,7 +608,7 @@
id: SpawnDungeonComputerFrame
parent: MarkerBase
suffix: Dungeon
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
@@ -631,7 +631,7 @@
id: SpawnDungeonCanisterBroken
parent: MarkerBase
suffix: Dungeon
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
diff --git a/Resources/Prototypes/_NF/Entities/Markers/Spawners/Random/dungeon_items_weapons.yml b/Resources/Prototypes/_NF/Entities/Markers/Spawners/Random/dungeon_items_weapons.yml
index 18b05abaa7e..82be650872f 100644
--- a/Resources/Prototypes/_NF/Entities/Markers/Spawners/Random/dungeon_items_weapons.yml
+++ b/Resources/Prototypes/_NF/Entities/Markers/Spawners/Random/dungeon_items_weapons.yml
@@ -4,7 +4,7 @@
id: SpawnDungeonLootMeleeT1
parent: MarkerBasePlaceFree
suffix: "Dungeon, Melee, T1"
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
@@ -39,7 +39,7 @@
id: SpawnDungeonLootGunT1
parent: MarkerBasePlaceFree
suffix: "Dungeon, Gun, T1"
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
@@ -76,7 +76,7 @@
id: SpawnDungeonLootExplosivesT1
parent: MarkerBasePlaceFree
suffix: "Dungeon, Explosives, T1"
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
@@ -102,7 +102,7 @@
id: SpawnDungeonLootMeleeT2
parent: MarkerBasePlaceFree
suffix: "Dungeon, Melee, T2"
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
@@ -133,7 +133,7 @@
id: SpawnDungeonLootGunT2
parent: MarkerBasePlaceFree
suffix: "Dungeon, Gun, T2"
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
@@ -168,7 +168,7 @@
id: SpawnDungeonLootExplosivesT2
parent: MarkerBasePlaceFree
suffix: "Dungeon, Explosives, T2"
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
@@ -194,7 +194,7 @@
id: SpawnDungeonLootMeleeT3
parent: MarkerBasePlaceFree
suffix: "Dungeon, Melee, T3"
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
@@ -223,7 +223,7 @@
id: SpawnDungeonLootGunT3
parent: MarkerBasePlaceFree
suffix: "Dungeon, Gun, T3"
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
@@ -264,7 +264,7 @@
id: SpawnDungeonLootExplosivesT3
parent: MarkerBasePlaceFree
suffix: "Dungeon, Explosives, T3"
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
@@ -291,7 +291,7 @@
id: SpawnDungeonLootMeleeT4
parent: MarkerBasePlaceFree
suffix: "Dungeon, Melee, T4"
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
@@ -320,7 +320,7 @@
id: SpawnDungeonLootGunT4
parent: MarkerBasePlaceFree
suffix: "Dungeon, Gun, T4"
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
@@ -354,7 +354,7 @@
id: SpawnDungeonLootExplosivesT4
parent: MarkerBasePlaceFree
suffix: "Dungeon, Explosives, T4"
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
@@ -380,7 +380,7 @@
id: SpawnDungeonLootMeleeT5
parent: MarkerBasePlaceFree
suffix: "Dungeon, Melee, T5"
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
@@ -402,7 +402,7 @@
id: SpawnDungeonLootGunT5
parent: MarkerBasePlaceFree
suffix: "Dungeon, Gun, T5"
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
@@ -434,7 +434,7 @@
id: SpawnDungeonLootExplosivesT5
parent: MarkerBasePlaceFree
suffix: "Dungeon, Explosives, T5"
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
@@ -457,7 +457,7 @@
id: SpawnDungeonLootAmmoLethal
parent: MarkerBasePlaceFree
suffix: "Dungeon, Ammo, Lethal"
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
@@ -493,7 +493,7 @@
id: SpawnDungeonLootAmmoRubber
parent: MarkerBasePlaceFree
suffix: "Dungeon, Ammo, Rubber"
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
@@ -521,7 +521,7 @@
id: SpawnDungeonLootAmmoPractice
parent: MarkerBasePlaceFree
suffix: "Dungeon, Ammo, Practice"
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
@@ -545,7 +545,7 @@
id: SpawnDungeonLootAmmoIncendiary
parent: MarkerBasePlaceFree
suffix: "Dungeon, Ammo, Incendiary"
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
@@ -571,7 +571,7 @@
id: SpawnDungeonLootAmmoUranium
parent: MarkerBasePlaceFree
suffix: "Dungeon, Ammo, Uranium"
- categories: [ HideSpawnMenu ]
+ #categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
diff --git a/Resources/Prototypes/_NF/Procedural/salvage_mods.yml b/Resources/Prototypes/_NF/Procedural/salvage_mods.yml
index 5f7fe419699..7a7312bf6ea 100644
--- a/Resources/Prototypes/_NF/Procedural/salvage_mods.yml
+++ b/Resources/Prototypes/_NF/Procedural/salvage_mods.yml
@@ -120,124 +120,6 @@
maxDuration: 840 # Frontier
cost: 1
-# Weather mods
-
-- type: salvageWeatherMod
- id: Hail
- desc: salvage-weather-mod-hail
- weather: Hail
- cost: 2
- biomes:
- - Snow
-
-- type: salvageWeatherMod
- id: SnowfallHeavy
- desc: salvage-weather-mod-heavy-snowfall
- weather: MonoBlizzard
- cost: 1
- biomes:
- - Snow
-
-- type: salvageWeatherMod
- id: SnowfallMedium
- desc: salvage-weather-mod-medium-snowfall
- weather: MonoSnow
- cost: 1
- biomes:
- - Grasslands
- - Snow
-
-- type: salvageWeatherMod
- id: SnowfallLight
- desc: salvage-weather-mod-light-snowfall
- weather: MonoSnowLight
- cost: 1
- biomes:
- - Grasslands
- - Snow
-
-- type: salvageWeatherMod
- id: AshfallHeavy
- desc: salvage-weather-mod-heavy-ashfall
- weather: AshfallHeavy
- cost: 5
- biomes:
- - Lava
-
-- type: salvageWeatherMod
- id: Ashfall
- desc: salvage-weather-mod-medium-ashfall
- weather: Ashfall
- cost: 2
- biomes:
- - Lava
- - Shadow
-
-- type: salvageWeatherMod
- id: AshfallLight
- desc: salvage-weather-mod-light-ashfall
- weather: AshfallLight
- cost: 1
- biomes:
- - Lava
- - Shadow
- - Caves
- - Desert
-
-- type: salvageWeatherMod
- id: Fallout
- desc: salvage-weather-mod-fallout
- weather: Fallout
- cost: 1
- biomes:
- - Lava
- - Shadow
-
-- type: salvageWeatherMod
- id: SandstormHeavy
- desc: salvage-weather-mod-heavy-sandstorm
- weather: SandstormHeavy
- cost: 1
- biomes:
- - Caves
- - Desert
-
-- type: salvageWeatherMod
- id: Sandstorm
- desc: salvage-weather-mod-sandstorm
- weather: Sandstorm
- biomes:
- - Caves
- - Lava
- - Desert
-
-- type: salvageWeatherMod
- id: LightRain
- desc: salvage-weather-mod-rain-light
- weather: MonoLightRain
- biomes:
- - Grasslands
- - Lava # primordial planet or something idk
-
-- type: salvageWeatherMod
- id: Rain
- desc: salvage-weather-mod-rain
- weather: MonoRain
- biomes:
- - Grasslands
-
-- type: salvageWeatherMod
- id: Storm
- desc: salvage-weather-mod-storm
- weather: MonoStorm
- biomes:
- - Grasslands
-
-- type: salvageWeatherMod
- id: ClearWeather
- desc: salvage-weather-mod-none
- weather: ClearWeather
-
# Air mixtures
- type: salvageAirMod
id: Space
diff --git a/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/bag-equipped.png b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/bag-equipped.png
new file mode 100644
index 00000000000..8bb1faae7ba
Binary files /dev/null and b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/bag-equipped.png differ
diff --git a/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/bag.png b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/bag.png
new file mode 100644
index 00000000000..6d32ef3331b
Binary files /dev/null and b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/bag.png differ
diff --git a/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/meta.json b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/meta.json
new file mode 100644
index 00000000000..c3e96c96dd2
--- /dev/null
+++ b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/meta.json
@@ -0,0 +1,70 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from SS13 Shiptest.",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "pmc-hardsuit-heavy",
+ "directions": 4
+ },
+ {
+ "name": "pmc-hardsuit-heavy-head",
+ "directions": 4
+ },
+ {
+ "name": "pmc-hardsuit-heavy-head-unshaded",
+ "directions": 4
+ },
+ {
+ "name": "pmc-hardsuit",
+ "directions": 4
+ },
+ {
+ "name": "pmc-hardsuit-head",
+ "directions": 4
+ },
+ {
+ "name": "pmc-webbing",
+ "directions": 4
+ },
+ {
+ "name": "pmc-gasmask",
+ "directions": 4
+ },
+ {
+ "name": "pmc-helmet",
+ "directions": 4
+ },
+ {
+ "name": "pmc-jumpsuit",
+ "directions": 4
+ },
+ {
+ "name": "pmc-uniform",
+ "directions": 4
+ },
+ {
+ "name": "pmc-vest",
+ "directions": 4
+ },
+ {
+ "name": "pmc-boots",
+ "directions": 4
+ },
+ {
+ "name": "pmc-gloves",
+ "directions": 4
+ },
+ {
+ "name": "bag-equipped",
+ "directions": 4
+ },
+ {
+ "name": "bag"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-boots.png b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-boots.png
new file mode 100644
index 00000000000..143bf2f751e
Binary files /dev/null and b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-boots.png differ
diff --git a/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-gasmask.png b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-gasmask.png
new file mode 100644
index 00000000000..0908dffaf85
Binary files /dev/null and b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-gasmask.png differ
diff --git a/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-gloves.png b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-gloves.png
new file mode 100644
index 00000000000..331c9018885
Binary files /dev/null and b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-gloves.png differ
diff --git a/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-hardsuit-head.png b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-hardsuit-head.png
new file mode 100644
index 00000000000..d25d1432b90
Binary files /dev/null and b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-hardsuit-head.png differ
diff --git a/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-hardsuit-heavy-head-unshaded.png b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-hardsuit-heavy-head-unshaded.png
new file mode 100644
index 00000000000..4cd7df9e735
Binary files /dev/null and b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-hardsuit-heavy-head-unshaded.png differ
diff --git a/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-hardsuit-heavy-head.png b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-hardsuit-heavy-head.png
new file mode 100644
index 00000000000..4cd7df9e735
Binary files /dev/null and b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-hardsuit-heavy-head.png differ
diff --git a/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-hardsuit-heavy.png b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-hardsuit-heavy.png
new file mode 100644
index 00000000000..779e186d705
Binary files /dev/null and b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-hardsuit-heavy.png differ
diff --git a/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-hardsuit.png b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-hardsuit.png
new file mode 100644
index 00000000000..7541699af2f
Binary files /dev/null and b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-hardsuit.png differ
diff --git a/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-helmet.png b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-helmet.png
new file mode 100644
index 00000000000..1b7c2c21379
Binary files /dev/null and b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-helmet.png differ
diff --git a/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-jumpsuit.png b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-jumpsuit.png
new file mode 100644
index 00000000000..63504fcdee0
Binary files /dev/null and b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-jumpsuit.png differ
diff --git a/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-uniform.png b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-uniform.png
new file mode 100644
index 00000000000..981f9d5ce58
Binary files /dev/null and b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-uniform.png differ
diff --git a/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-vest.png b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-vest.png
new file mode 100644
index 00000000000..2cc115c88bc
Binary files /dev/null and b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-vest.png differ
diff --git a/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-webbing.png b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-webbing.png
new file mode 100644
index 00000000000..374d11a1faa
Binary files /dev/null and b/Resources/Textures/_Mono/Clothing/NPC/pmc.rsi/pmc-webbing.png differ