diff --git a/code/__defines/species_languages.dm b/code/__defines/species_languages.dm
index 656b0dff2ab..821576a29bc 100644
--- a/code/__defines/species_languages.dm
+++ b/code/__defines/species_languages.dm
@@ -53,13 +53,14 @@
#define LANGUAGE_AKHANI "Akhani"
#define LANGUAGE_ALAI "Alai"
#define LANGUAGE_ZADDAT "Vedahq"
+#define LANGUAGE_PROMETHEAN "Promethean"
#define LANGUAGE_BLOB "Blob"
#define LANGUAGE_GIBBERISH "Babel"
// Language flags.
#define WHITELISTED 1 // Language is available if the speaker is whitelisted.
#define RESTRICTED 2 // Language can only be acquired by spawning or an admin.
-#define NONVERBAL 4 // Language has a significant non-verbal component. Speech is garbled without line-of-sight.
+#define NONVERBAL 4 // Language uses both verbal and non-verbal components completely to communicate. Out-of-sight speech is garbled.
#define SIGNLANG 8 // Language is completely non-verbal. Speech is displayed through emotes for those who can understand.
#define HIVEMIND 16 // Broadcast to all mobs with this language.
#define NONGLOBAL 32 // Do not add to general languages list.
diff --git a/code/datums/uplink/ammunition.dm b/code/datums/uplink/ammunition.dm
index 3ed884316a2..8b853aed632 100644
--- a/code/datums/uplink/ammunition.dm
+++ b/code/datums/uplink/ammunition.dm
@@ -65,6 +65,10 @@
name = "Anti-Materiel Rifle ammo box (14.5mm)"
path = /obj/item/weapon/storage/box/sniperammo
+/datum/uplink_item/item/ammo/sniperammo_highvel
+ name = "Anti-Materiel Rifle ammo box (14.5mm sabot)"
+ path = /obj/item/weapon/storage/box/sniperammo/highvel
+
/datum/uplink_item/item/ammo/c545
name = "Rifle Magazine (5.45mm)"
path = /obj/item/ammo_magazine/m545
diff --git a/code/datums/uplink/medical_vr.dm b/code/datums/uplink/medical_vr.dm
index cb6c9e62312..17a3ddf33a1 100644
--- a/code/datums/uplink/medical_vr.dm
+++ b/code/datums/uplink/medical_vr.dm
@@ -1,6 +1,26 @@
/**********
* Medical *
**********/
+/datum/uplink_item/item/medical/fire
+ name = "Fire medical kit"
+ item_cost = 10
+ path = /obj/item/weapon/storage/firstaid/fire
+
+/datum/uplink_item/item/medical/toxin
+ name = "Toxin medical kit"
+ item_cost = 10
+ path = /obj/item/weapon/storage/firstaid/toxin
+
+/datum/uplink_item/item/medical/o2
+ name = "Oxygen medical kit"
+ item_cost = 10
+ path = /obj/item/weapon/storage/firstaid/o2
+
+/datum/uplink_item/item/medical/adv
+ name = "Advanced medical kit"
+ item_cost = 10
+ path = /obj/item/weapon/storage/firstaid/adv
+
/datum/uplink_item/item/medical/mre
name = "Meal, Ready to eat (Random)"
item_cost = 5
@@ -26,6 +46,11 @@
item_cost = 5
path = /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity
+/datum/uplink_item/item/medical/pain
+ name = "Pain injector"
+ item_cost = 5
+ path = /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain
+
/datum/uplink_item/item/medical/brute
name = "Brute injector"
item_cost = 5
@@ -46,6 +71,11 @@
item_cost = 5
path = /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/oxy
+/datum/uplink_item/item/medical/organ
+ name = "Organ Repair injector"
+ item_cost = 10
+ path = /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ
+
/datum/uplink_item/item/medical/nanites
name = "Healing Nanite pill bottle"
item_cost = 30
diff --git a/code/datums/uplink/tools_vr.dm b/code/datums/uplink/tools_vr.dm
index 5a165f7aacc..34794c5cdf6 100644
--- a/code/datums/uplink/tools_vr.dm
+++ b/code/datums/uplink/tools_vr.dm
@@ -26,6 +26,11 @@
item_cost = 20
path = /obj/item/modular_computer/laptop/preset/custom_loadout/elite
+/datum/uplink_item/item/tools/inducer
+ name = "Inducer"
+ item_cost = 20
+ path = /obj/item/weapon/inducer/syndicate
+
/datum/uplink_item/item/tools/luxurycapsule
name = "Survival Capsule (Luxury)"
item_cost = 40
@@ -36,6 +41,11 @@
item_cost = 40
path = /obj/item/device/perfect_tele
+/datum/uplink_item/item/tools/uav
+ name = "Recon Skimmer"
+ item_cost = 40
+ path = /obj/item/device/uav
+
/datum/uplink_item/item/tools/barcapsule
name = "Survival Capsule (Bar)"
item_cost = 80
diff --git a/code/game/objects/effects/alien/aliens.dm b/code/game/objects/effects/alien/aliens.dm
index d8b0821a4d4..d0cb3dce97a 100644
--- a/code/game/objects/effects/alien/aliens.dm
+++ b/code/game/objects/effects/alien/aliens.dm
@@ -160,18 +160,30 @@
#define WEED_NODE_BASE "nodebase"
/obj/effect/alien/weeds
- name = "weeds"
- desc = "Weird purple weeds."
+ name = "growth"
+ desc = "Weird organic growth."
icon_state = "weeds"
-
anchored = 1
density = 0
plane = TURF_PLANE
layer = ABOVE_TURF_LAYER
+
var/health = 15
var/obj/effect/alien/weeds/node/linked_node = null
var/static/list/weedImageCache
+/obj/effect/alien/weeds/Initialize(var/mapload, node)
+ . = ..()
+ if(isspace(loc))
+ return INITIALIZE_HINT_QDEL
+
+ linked_node = node
+
+ if(icon_state == "weeds")
+ icon_state = pick("weeds", "weeds1", "weeds2")
+
+ fullUpdateWeedOverlays()
+
/obj/effect/alien/weeds/Destroy()
var/turf/T = get_turf(src)
// To not mess up the overlay updates.
@@ -181,50 +193,41 @@
W.updateWeedOverlays()
linked_node = null
- ..()
+ return ..()
/obj/effect/alien/weeds/node
icon_state = "weednode"
- name = "purple sac"
- desc = "Weird purple octopus-like thing."
+ name = "glowing growth"
+ desc = "Weird glowing organic growth."
layer = ABOVE_TURF_LAYER+0.01
light_range = NODERANGE
+
var/node_range = NODERANGE
-
var/set_color = null
-/obj/effect/alien/weeds/node/New()
- ..(src.loc, src)
+/obj/effect/alien/weeds/node/Initialize(var/mapload, var/newcolor = "#321D37")
+ . = ..()
-/obj/effect/alien/weeds/node/Initialize()
- ..()
- START_PROCESSING(SSobj, src)
+ for(var/obj/effect/alien/weeds/existing in loc)
+ if(existing == src)
+ continue
+ else
+ qdel(existing)
- spawn(1 SECOND)
- if(color)
- set_color = color
+ if(newcolor)
+ set_color = newcolor
+
+ START_PROCESSING(SSobj, src) // Only the node processes in a subsystem, the rest are process()'d by the node
/obj/effect/alien/weeds/node/Destroy()
STOP_PROCESSING(SSobj, src)
- ..()
-
-/obj/effect/alien/weeds/New(pos, node)
- ..()
- if(istype(loc, /turf/space))
- qdel(src)
- return
- linked_node = node
- if(icon_state == "weeds")icon_state = pick("weeds", "weeds1", "weeds2")
-
- fullUpdateWeedOverlays()
+ return ..()
/obj/effect/alien/weeds/proc/updateWeedOverlays()
+ cut_overlays()
- overlays.Cut()
-
- if(!weedImageCache || !weedImageCache.len)
+ if(!weedImageCache)
weedImageCache = list()
-// weedImageCache.len = 4
weedImageCache[WEED_NORTH_EDGING] = image('icons/mob/alien.dmi', "weeds_side_n", layer=2.11, pixel_y = -32)
weedImageCache[WEED_SOUTH_EDGING] = image('icons/mob/alien.dmi', "weeds_side_s", layer=2.11, pixel_y = 32)
weedImageCache[WEED_EAST_EDGING] = image('icons/mob/alien.dmi', "weeds_side_e", layer=2.11, pixel_x = -32)
@@ -234,18 +237,14 @@
var/turf/S = get_step(src, SOUTH)
var/turf/E = get_step(src, EAST)
var/turf/W = get_step(src, WEST)
- if(!locate(/obj/effect/alien) in N.contents)
- if(istype(N, /turf/simulated/floor))
- overlays += weedImageCache[WEED_SOUTH_EDGING]
- if(!locate(/obj/effect/alien) in S.contents)
- if(istype(S, /turf/simulated/floor))
- overlays += weedImageCache[WEED_NORTH_EDGING]
- if(!locate(/obj/effect/alien) in E.contents)
- if(istype(E, /turf/simulated/floor))
- overlays += weedImageCache[WEED_WEST_EDGING]
- if(!locate(/obj/effect/alien) in W.contents)
- if(istype(W, /turf/simulated/floor))
- overlays += weedImageCache[WEED_EAST_EDGING]
+ if(istype(N, /turf/simulated/floor) && !locate(/obj/effect/alien) in N.contents)
+ add_overlay(weedImageCache[WEED_SOUTH_EDGING])
+ if(istype(S, /turf/simulated/floor) && !locate(/obj/effect/alien) in S.contents)
+ add_overlay(weedImageCache[WEED_NORTH_EDGING])
+ if(istype(E, /turf/simulated/floor) && !locate(/obj/effect/alien) in E.contents)
+ add_overlay(weedImageCache[WEED_WEST_EDGING])
+ if(istype(W, /turf/simulated/floor) && !locate(/obj/effect/alien) in W.contents)
+ add_overlay(weedImageCache[WEED_EAST_EDGING])
/obj/effect/alien/weeds/proc/fullUpdateWeedOverlays()
for (var/obj/effect/alien/weeds/W in range(1,src))
@@ -253,70 +252,53 @@
return
+// NB: This is not actually called by a processing subsystem, it's called by the node processing
/obj/effect/alien/weeds/process()
set background = 1
var/turf/U = get_turf(src)
-/*
- if (locate(/obj/movable, U))
- U = locate(/obj/movable, U)
- if(U.density == 1)
- qdel(src)
- return
-Alien plants should do something if theres a lot of poison
- if(U.poison> 200000)
- health -= round(U.poison/200000)
- update()
- return
-*/
- if (istype(U, /turf/space))
+
+ if(isspace(U))
qdel(src)
return
- if(!linked_node || (get_dist(linked_node, src) > linked_node.node_range) )
+ if(!linked_node)
+ crash_with("Weeds somehow called process() with null linked_node")
return
- if(linked_node != src)
- color = linked_node.set_color
+ if(get_dist(linked_node, src) > linked_node.node_range)
+ return
- direction_loop:
- for(var/dirn in cardinal)
- var/turf/T = get_step(src, dirn)
+ for(var/dirn in cardinal)
+ var/turf/T1 = get_turf(src)
+ var/turf/T2 = get_step(src, dirn)
- if (!istype(T) || T.density || locate(/obj/effect/alien/weeds) in T || istype(T.loc, /area/arrival) || istype(T, /turf/space))
- continue
+ if(!istype(T2) || locate(/obj/effect/alien/weeds) in T2 || istype(T2.loc, /area/arrival) || isspace(T2))
+ continue
- // if (locate(/obj/movable, T)) // don't propogate into movables
- // continue
+ if(T1.c_airblock(T2) == BLOCKED)
+ continue
- for(var/obj/O in T)
- if(!O.CanZASPass(U))
- continue direction_loop
+ var/obj/effect/E = new /obj/effect/alien/weeds(T2, linked_node)
+ E.color = color
- var/obj/effect/E = new /obj/effect/alien/weeds(T, linked_node)
+/obj/effect/alien/weeds/node/process()
+ set background = 1
+ . = ..()
- E.color = color
+ var/list/nearby_weeds = list()
+ for(var/obj/effect/alien/weeds/W in orange(node_range, src))
+ nearby_weeds |= W
- if(istype(src, /obj/effect/alien/weeds/node))
- var/obj/effect/alien/weeds/node/N = src
- var/list/nearby_weeds = list()
- for(var/obj/effect/alien/weeds/W in range(N.node_range,src))
- nearby_weeds |= W
+ for(var/nbw in nearby_weeds)
+ var/obj/effect/alien/weeds/W = nbw
- for(var/obj/effect/alien/weeds/W in nearby_weeds)
- if(!W)
- continue
+ if(!W.linked_node)
+ W.linked_node = src
- if(!W.linked_node)
- W.linked_node = src
-
- W.color = W.linked_node.set_color
-
- if(W == src)
- continue
-
- if(prob(max(10, 40 - (5 * nearby_weeds.len))))
- W.process()
+ W.color = W.linked_node.set_color
+ if(prob(max(10, 40 - (5 * nearby_weeds.len))))
+ W.process()
/obj/effect/alien/weeds/ex_act(severity)
switch(severity)
diff --git a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm
index d4f65fc9d10..e48606a2acd 100644
--- a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm
+++ b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm
@@ -74,7 +74,7 @@
light_power = 0.5
light_color = "#8837A3"
-/obj/effect/projectile/tungsten/impact
+/obj/effect/projectile/impact/tungsten
icon_state = "impact_mhd_laser"
light_range = 4
light_power = 3
diff --git a/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm b/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm
index d901aeaa612..a5c70aab2c2 100644
--- a/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm
+++ b/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm
@@ -86,7 +86,7 @@
light_power = 0.5
light_color = "#FF0D00"
-/obj/effect/projectile/tungsten/muzzle
+/obj/effect/projectile/muzzle/tungsten
icon_state = "muzzle_mhd_laser"
light_range = 4
light_power = 3
diff --git a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm
index 59d56b6c7c4..4326bc536d6 100644
--- a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm
+++ b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm
@@ -109,12 +109,18 @@
light_power = 0.5
light_color = "#0066FF"
-/obj/effect/projectile/tungsten/tracer
+/obj/effect/projectile/tracer/tungsten
icon_state = "mhd_laser"
light_range = 4
light_power = 3
light_color = "#3300ff"
+/obj/effect/projectile/tracer/cannon
+ icon_state = "cannon"
+ light_range = 1
+ light_power = 0.5
+ light_color = "#f6f2b6"
+
//VOREStation edit: medigun
/obj/effect/projectile/tracer/medigun
icon = 'icons/obj/projectiles_vr.dmi'
@@ -122,4 +128,4 @@
light_range = 2
light_power = 0.5
light_color = "#80F5FF"
-//VOREStation edit ends
\ No newline at end of file
+//VOREStation edit ends
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index b0be23eb3f2..8f300aaaf78 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -418,7 +418,7 @@
. = ..()
if(.)
- user.visible_message("[user] cracks and shakes the glowstick.", "You crack and shake the glowstick, turning it on!")
+ user.visible_message("[user] cracks and shakes \the [name].", "You crack and shake \the [src], turning it on!")
START_PROCESSING(SSobj, src)
/obj/item/device/flashlight/glowstick/red
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index 317920e5dc2..f431bc74fe6 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -142,6 +142,10 @@
if(O)
gather_all(get_turf(src), user)
+/obj/item/weapon/storage/bag/ore/proc/rangedload(atom/A, mob/user)
+ var/obj/item/weapon/ore/O = locate() in get_turf(A)
+ if(O)
+ gather_all(get_turf(A), user)
/obj/item/weapon/storage/bag/ore/examine(mob/user)
. = ..()
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 346f8baa655..5128657811c 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -204,6 +204,11 @@
desc = "It has a picture of a gun and several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death."
starts_with = list(/obj/item/ammo_casing/a145 = 7)
+/obj/item/weapon/storage/box/sniperammo/highvel
+ name = "box of 14.5mm sabot shells"
+ desc = "It has a picture of a gun and several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death."
+ starts_with = list(/obj/item/ammo_casing/a145/highvel = 7)
+
/obj/item/weapon/storage/box/flashbangs
name = "box of flashbangs (WARNING)"
desc = "WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use."
diff --git a/code/game/objects/random/guns_and_ammo.dm b/code/game/objects/random/guns_and_ammo.dm
index 62dde5a3df0..a3411ef6fed 100644
--- a/code/game/objects/random/guns_and_ammo.dm
+++ b/code/game/objects/random/guns_and_ammo.dm
@@ -400,4 +400,136 @@
/obj/item/weapon/gun/projectile/shotgun/pump/combat,
/obj/item/weapon/storage/box/shotgunammo
)
- )
\ No newline at end of file
+ )
+
+// Not strictly a gun, but is used in PoIs to spawn the dropped guns of mercs, or a busted version.
+/obj/random/projectile/scrapped_gun
+ name = "broken gun spawner"
+ desc = "Spawns a random broken gun, or rarely a fully functional one."
+ icon = 'icons/obj/gun.dmi'
+ icon_state = "revolver"
+
+/obj/random/projectile/scrapped_gun/item_to_spawn()
+ return pickweight(list(
+ /obj/random/projectile/scrapped_pistol = 10,
+ /obj/random/projectile/scrapped_smg = 5,
+ /obj/random/projectile/scrapped_laser = 5,
+ /obj/random/projectile/scrapped_shotgun = 3,
+ /obj/random/projectile/scrapped_ionrifle = 3,
+ /obj/random/projectile/scrapped_bulldog = 1,
+ /obj/random/projectile/scrapped_flechette = 1,
+ /obj/random/projectile/scrapped_grenadelauncher = 1,
+ /obj/random/projectile/scrapped_dartgun = 1
+ ))
+
+/obj/random/projectile/scrapped_shotgun
+ name = "broken shotgun spawner"
+ desc = "Loot for PoIs, or their mobs."
+ icon = 'icons/obj/gun.dmi'
+ icon_state = "shotgun"
+
+/obj/random/projectile/scrapped_shotgun/item_to_spawn()
+ return pickweight(list(
+ /obj/item/weapon/broken_gun/pumpshotgun = 10,
+ /obj/item/weapon/broken_gun/pumpshotgun_combat = 5,
+ /obj/item/weapon/gun/projectile/shotgun/pump = 3,
+ /obj/item/weapon/gun/projectile/shotgun/pump/combat = 1
+ ))
+
+/obj/random/projectile/scrapped_smg
+ name = "broken smg spawner"
+ desc = "Loot for PoIs, or their mobs."
+ icon = 'icons/obj/gun.dmi'
+ icon_state = "revolver"
+
+/obj/random/projectile/scrapped_smg/item_to_spawn()
+ return pickweight(list(
+ /obj/item/weapon/broken_gun/c20r = 10,
+ /obj/item/weapon/gun/projectile/automatic/c20r = 3
+ ))
+
+/obj/random/projectile/scrapped_pistol
+ name = "broken pistol spawner"
+ desc = "Loot for PoIs, or their mobs."
+ icon = 'icons/obj/gun.dmi'
+ icon_state = "revolver"
+
+/obj/random/projectile/scrapped_pistol/item_to_spawn()
+ return pickweight(list(
+ /obj/item/weapon/broken_gun/silenced45 = 10,
+ /obj/item/weapon/gun/projectile/silenced = 3
+ ))
+
+/obj/random/projectile/scrapped_laser
+ name = "broken laser spawner"
+ desc = "Loot for PoIs, or their mobs."
+ icon = 'icons/obj/gun.dmi'
+ icon_state = "revolver"
+
+/obj/random/projectile/scrapped_laser/item_to_spawn()
+ return pickweight(list(
+ /obj/item/weapon/broken_gun/laserrifle = 10,
+ /obj/item/weapon/broken_gun/laser_retro = 5,
+ /obj/item/weapon/gun/energy/laser = 3,
+ /obj/item/weapon/gun/energy/retro = 1
+ ))
+
+/obj/random/projectile/scrapped_ionrifle
+ name = "broken ionrifle spawner"
+ desc = "Loot for PoIs, or their mobs."
+ icon = 'icons/obj/gun.dmi'
+ icon_state = "revolver"
+
+/obj/random/projectile/scrapped_ionrifle/item_to_spawn()
+ return pickweight(list(
+ /obj/item/weapon/broken_gun/ionrifle = 10,
+ /obj/item/weapon/gun/energy/ionrifle = 3
+ ))
+
+/obj/random/projectile/scrapped_bulldog
+ name = "broken z8 spawner"
+ desc = "Loot for PoIs, or their mobs."
+ icon = 'icons/obj/gun.dmi'
+ icon_state = "revolver"
+
+/obj/random/projectile/scrapped_bulldog/item_to_spawn()
+ return pickweight(list(
+ /obj/item/weapon/broken_gun/z8 = 10,
+ /obj/item/weapon/gun/projectile/automatic/z8 = 3
+ ))
+
+/obj/random/projectile/scrapped_flechette
+ name = "broken flechette spawner"
+ desc = "Loot for PoIs, or their mobs."
+ icon = 'icons/obj/gun.dmi'
+ icon_state = "revolver"
+
+/obj/random/projectile/scrapped_flechette/item_to_spawn()
+ return pickweight(list(
+ /obj/item/weapon/broken_gun/flechette = 10,
+ /obj/item/weapon/gun/magnetic/railgun/flechette = 3
+ ))
+
+/obj/random/projectile/scrapped_grenadelauncher
+ name = "broken grenadelauncher spawner"
+ desc = "Loot for PoIs, or their mobs."
+ icon = 'icons/obj/gun.dmi'
+ icon_state = "revolver"
+
+/obj/random/projectile/scrapped_grenadelauncher/item_to_spawn()
+ return pickweight(list(
+ /obj/item/weapon/broken_gun/grenadelauncher = 10,
+ /obj/item/weapon/gun/launcher/grenade = 3
+ ))
+
+/obj/random/projectile/scrapped_dartgun
+ name = "broken dartgun spawner"
+ desc = "Loot for PoIs, or their mobs."
+ icon = 'icons/obj/gun.dmi'
+ icon_state = "revolver"
+
+/obj/random/projectile/scrapped_dartgun/item_to_spawn()
+ return pickweight(list(
+ /obj/item/weapon/broken_gun/dartgun = 10,
+ /obj/item/weapon/gun/projectile/dartgun = 3
+ ))
diff --git a/code/game/objects/random/misc.dm b/code/game/objects/random/misc.dm
index 2c97432955e..fe53d2ef554 100644
--- a/code/game/objects/random/misc.dm
+++ b/code/game/objects/random/misc.dm
@@ -711,3 +711,16 @@
/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/purple,
/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/grey,
/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/brown)
+
+/obj/random/thermalponcho
+ name = "random thermal poncho"
+ desc = "This is a thermal poncho spawn."
+ icon = 'icons/obj/clothing/ties.dmi'
+ icon_state = "classicponcho"
+
+/obj/random/thermalponcho/item_to_spawn()
+ return pick(prob(5);/obj/item/clothing/accessory/poncho/thermal,
+ prob(3);/obj/item/clothing/accessory/poncho/thermal/red,
+ prob(3);/obj/item/clothing/accessory/poncho/thermal/green,
+ prob(3);/obj/item/clothing/accessory/poncho/thermal/purple,
+ prob(3);/obj/item/clothing/accessory/poncho/thermal/blue)
diff --git a/code/game/objects/random/mob.dm b/code/game/objects/random/mob.dm
index 430c8235c91..ac89272f529 100644
--- a/code/game/objects/random/mob.dm
+++ b/code/game/objects/random/mob.dm
@@ -104,6 +104,15 @@
prob(33);/mob/living/simple_mob/animal/giant_spider/frost,
prob(45);/mob/living/simple_mob/animal/sif/shantak)
+/obj/random/mob/sif/kururak
+ name = "Random Kururak"
+ desc = "This is a random kururak, either waking or hibernating. Will be hostile if more than one are waking."
+ icon_state = "frost"
+
+/obj/random/mob/sif/kururak/item_to_spawn()
+ return pick(prob(1);/mob/living/simple_mob/animal/sif/kururak/hibernate,
+ prob(20);/mob/living/simple_mob/animal/sif/kururak)
+
/obj/random/mob/spider
name = "Random Spider" //Spiders should patrol where they spawn.
desc = "This is a random boring spider."
@@ -163,6 +172,7 @@
/obj/random/mob/robotic/item_to_spawn() //Hivebots have a total number of 'lots' equal to the lesser drone, at 60.
return pick(prob(60);/mob/living/simple_mob/mechanical/combat_drone/lesser,
prob(50);/mob/living/simple_mob/mechanical/combat_drone,
+ prob(50);/mob/living/simple_mob/mechanical/mining_drone,
prob(15);/mob/living/simple_mob/mechanical/mecha/ripley,
prob(15);/mob/living/simple_mob/mechanical/mecha/odysseus,
prob(10);/mob/living/simple_mob/mechanical/hivebot,
@@ -174,6 +184,25 @@
prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong,
prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong/guard)
+/obj/random/mob/robotic/drone
+ name = "Random Drone"
+ desc = "This is a random drone."
+ icon_state = "drone_dead"
+
+ overwrite_hostility = 1
+
+ mob_faction = "malf_drone"
+ mob_returns_home = 1
+ mob_wander = 1
+ mob_wander_distance = 5
+ mob_hostile = 1
+ mob_retaliate = 1
+
+/obj/random/mob/robotic/drone/item_to_spawn()
+ return pick(prob(6);/mob/living/simple_mob/mechanical/combat_drone/lesser,
+ prob(1);/mob/living/simple_mob/mechanical/combat_drone,
+ prob(3);/mob/living/simple_mob/mechanical/mining_drone)
+
/obj/random/mob/robotic/hivebot
name = "Random Hivebot"
desc = "This is a random hivebot."
diff --git a/code/game/objects/structures/crates_lockers/closets/coffin.dm b/code/game/objects/structures/crates_lockers/closets/coffin.dm
index 9257c2d3a34..7ea80de7ff8 100644
--- a/code/game/objects/structures/crates_lockers/closets/coffin.dm
+++ b/code/game/objects/structures/crates_lockers/closets/coffin.dm
@@ -161,4 +161,7 @@
var/datum/gas_mixture/above_air = return_air()
grave_breath.adjust_gas(gasid, BREATH_MOLES)
grave_breath.temperature = (above_air.temperature) - 30 //Underground
- return grave_breath
\ No newline at end of file
+ return grave_breath
+
+/obj/structure/closet/grave/dirthole
+ name = "hole"
diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora/flora.dm
similarity index 92%
rename from code/game/objects/structures/flora.dm
rename to code/game/objects/structures/flora/flora.dm
index 1b5548cdb4a..a0f2c8c307d 100644
--- a/code/game/objects/structures/flora.dm
+++ b/code/game/objects/structures/flora/flora.dm
@@ -1,478 +1,493 @@
-
-/obj/structure/flora
- name = "flora"
- desc = "A perfectly generic plant."
-
- anchored = TRUE // Usually, plants don't move. Usually.
- plane = DECAL_PLANE
- layer = BELOW_MOB_LAYER
-
- var/randomize_size = FALSE
- var/max_x_scale = 1.25
- var/max_y_scale = 1.25
- var/min_x_scale = 0.9
- var/min_y_scale = 0.9
-
- var/harvest_tool = null // The type of item used to harvest the plant.
- var/harvest_count = 0
-
- var/randomize_harvest_count = TRUE
- var/max_harvests = 0
- var/min_harvests = -1
- var/list/harvest_loot = null // Should be an associative list for things to spawn, and their weights. An example would be a branch from a tree.
-
-/obj/structure/flora/Initialize()
- ..()
-
- if(randomize_size)
- icon_scale_x = rand(min_x_scale * 100, max_x_scale * 100) / 100
- icon_scale_y = rand(min_y_scale * 100, max_y_scale * 100) / 100
-
- if(prob(50))
- icon_scale_x *= -1
- update_transform()
-
- if(randomize_harvest_count)
- max_harvests = max(0, rand(min_harvests, max_harvests)) // Incase you want to weight it more toward 'not harvestable', set min_harvests to a negative value.
-
-/obj/structure/flora/examine(mob/user)
- . = ..()
- if(harvest_count < max_harvests)
- . += "It seems to have something hanging from it."
-
-/obj/structure/flora/attackby(var/obj/item/weapon/W, var/mob/living/user)
- if(can_harvest(W))
- var/harvest_spawn = pickweight(harvest_loot)
- var/atom/movable/AM = spawn_harvest(harvest_spawn, user)
-
- if(!AM)
- to_chat(user, "You fail to harvest anything from \the [src].")
-
- else
- to_chat(user, "You harvest \the [AM] from \the [src].")
- return
-
- ..(W, user)
-
-/obj/structure/flora/proc/can_harvest(var/obj/item/I)
- . = FALSE
- if(harvest_tool && istype(I, harvest_tool) && harvest_loot && harvest_loot.len && harvest_count < max_harvests)
- . = TRUE
- return .
-
-/obj/structure/flora/proc/spawn_harvest(var/path = null, var/mob/user = null)
- if(!ispath(path))
- return 0
- var/turf/Target = get_turf(src)
- if(user)
- Target = get_turf(user)
-
- var/atom/movable/AM = new path(Target)
-
- harvest_count++
- return AM
-
-//bushes
-/obj/structure/flora/bush
- name = "bush"
- icon = 'icons/obj/flora/snowflora.dmi'
- icon_state = "snowbush1"
-
-/obj/structure/flora/bush/New()
- ..()
- icon_state = "snowbush[rand(1, 6)]"
-
-/obj/structure/flora/pottedplant
- name = "potted plant"
- desc = "Really ties the room together."
- icon = 'icons/obj/plants.dmi'
- icon_state = "plant-26"
-
- anchored = FALSE
-
-//newbushes
-
-/obj/structure/flora/ausbushes
- name = "bush"
- icon = 'icons/obj/flora/ausflora.dmi'
- icon_state = "firstbush_1"
-
-/obj/structure/flora/ausbushes/New()
- ..()
- icon_state = "firstbush_[rand(1, 4)]"
-
-/obj/structure/flora/ausbushes/reedbush
- icon_state = "reedbush_1"
-
-/obj/structure/flora/ausbushes/reedbush/New()
- ..()
- icon_state = "reedbush_[rand(1, 4)]"
-
-/obj/structure/flora/ausbushes/leafybush
- icon_state = "leafybush_1"
-
-/obj/structure/flora/ausbushes/leafybush/New()
- ..()
- icon_state = "leafybush_[rand(1, 3)]"
-
-/obj/structure/flora/ausbushes/palebush
- icon_state = "palebush_1"
-
-/obj/structure/flora/ausbushes/palebush/New()
- ..()
- icon_state = "palebush_[rand(1, 4)]"
-
-/obj/structure/flora/ausbushes/stalkybush
- icon_state = "stalkybush_1"
-
-/obj/structure/flora/ausbushes/stalkybush/New()
- ..()
- icon_state = "stalkybush_[rand(1, 3)]"
-
-/obj/structure/flora/ausbushes/grassybush
- icon_state = "grassybush_1"
-
-/obj/structure/flora/ausbushes/grassybush/New()
- ..()
- icon_state = "grassybush_[rand(1, 4)]"
-
-/obj/structure/flora/ausbushes/fernybush
- icon_state = "fernybush_1"
-
-/obj/structure/flora/ausbushes/fernybush/New()
- ..()
- icon_state = "fernybush_[rand(1, 3)]"
-
-/obj/structure/flora/ausbushes/sunnybush
- icon_state = "sunnybush_1"
-
-/obj/structure/flora/ausbushes/sunnybush/New()
- ..()
- icon_state = "sunnybush_[rand(1, 3)]"
-
-/obj/structure/flora/ausbushes/genericbush
- icon_state = "genericbush_1"
-
-/obj/structure/flora/ausbushes/genericbush/New()
- ..()
- icon_state = "genericbush_[rand(1, 4)]"
-
-/obj/structure/flora/ausbushes/pointybush
- icon_state = "pointybush_1"
-
-/obj/structure/flora/ausbushes/pointybush/New()
- ..()
- icon_state = "pointybush_[rand(1, 4)]"
-
-/obj/structure/flora/ausbushes/lavendergrass
- icon_state = "lavendergrass_1"
-
-/obj/structure/flora/ausbushes/lavendergrass/New()
- ..()
- icon_state = "lavendergrass_[rand(1, 4)]"
-
-/obj/structure/flora/ausbushes/ywflowers
- icon_state = "ywflowers_1"
-
-/obj/structure/flora/ausbushes/ywflowers/New()
- ..()
- icon_state = "ywflowers_[rand(1, 3)]"
-
-/obj/structure/flora/ausbushes/brflowers
- icon_state = "brflowers_1"
-
-/obj/structure/flora/ausbushes/brflowers/New()
- ..()
- icon_state = "brflowers_[rand(1, 3)]"
-
-/obj/structure/flora/ausbushes/ppflowers
- icon_state = "ppflowers_1"
-
-/obj/structure/flora/ausbushes/ppflowers/New()
- ..()
- icon_state = "ppflowers_[rand(1, 3)]"
-
-/obj/structure/flora/ausbushes/sparsegrass
- icon_state = "sparsegrass_1"
-
-/obj/structure/flora/ausbushes/sparsegrass/New()
- ..()
- icon_state = "sparsegrass_[rand(1, 3)]"
-
-/obj/structure/flora/ausbushes/fullgrass
- icon_state = "fullgrass_1"
-
-/obj/structure/flora/ausbushes/fullgrass/New()
- ..()
- icon_state = "fullgrass_[rand(1, 3)]"
-
-/obj/structure/flora/skeleton
- name = "hanging skeleton model"
- icon = 'icons/obj/plants.dmi' //what an interesting plant
- icon_state = "hangskele"
- desc = "It's an anatomical model of a human skeletal system made of plaster."
-
- plane = OBJ_PLANE
-
-//potted plants credit: Flashkirby
-/obj/structure/flora/pottedplant
- name = "potted plant"
- desc = "Really brings the room together."
- icon = 'icons/obj/plants.dmi'
- icon_state = "plant-01"
-
- plane = OBJ_PLANE
- var/obj/item/stored_item
-
-/obj/structure/flora/pottedplant/examine(mob/user)
- . = ..()
- if(in_range(user, src) && stored_item)
- . += "You can see something in there..."
-
-/obj/structure/flora/pottedplant/attackby(obj/item/I, mob/user)
- if(stored_item)
- to_chat(user, "[I] won't fit in. There already appears to be something in here...")
- return
-
- if(I.w_class > ITEMSIZE_TINY)
- to_chat(user, "[I] is too big to fit inside [src].")
- return
-
- if(do_after(user, 10))
- user.drop_from_inventory(I, src)
- I.forceMove(src)
- stored_item = I
- src.visible_message("\icon[src] \icon[I] [user] places [I] into [src].")
- return
- else
- to_chat(user, "You refrain from putting things into the plant pot.")
- return
-
- ..()
-
-/obj/structure/flora/pottedplant/attack_hand(mob/user)
- if(!stored_item)
- to_chat(user, "You see nothing of interest in [src]...")
- else
- if(do_after(user, 10))
- to_chat(user, "You find \icon[stored_item] [stored_item] in [src]!")
- stored_item.forceMove(get_turf(src))
- stored_item = null
- ..()
-
-
-/obj/structure/flora/pottedplant/large
- name = "large potted plant"
- desc = "This is a large plant. Three branches support pairs of waxy leaves."
- icon_state = "plant-26"
-
-/obj/structure/flora/pottedplant/fern
- name = "potted fern"
- desc = "This is an ordinary looking fern. It looks like it could do with some water."
- icon_state = "plant-02"
-
-/obj/structure/flora/pottedplant/overgrown
- name = "overgrown potted plants"
- desc = "This is an assortment of colourful plants. Some parts are overgrown."
- icon_state = "plant-03"
-
-/obj/structure/flora/pottedplant/bamboo
- name = "potted bamboo"
- desc = "These are bamboo shoots. The tops looks like they've been cut short."
- icon_state = "plant-04"
-
-/obj/structure/flora/pottedplant/largebush
- name = "large potted bush"
- desc = "This is a large bush. The leaves stick upwards in an odd fashion."
- icon_state = "plant-05"
-
-/obj/structure/flora/pottedplant/thinbush
- name = "thin potted bush"
- desc = "This is a thin bush. It appears to be flowering."
- icon_state = "plant-06"
-
-/obj/structure/flora/pottedplant/mysterious
- name = "mysterious potted bulbs"
- desc = "This is a mysterious looking plant. Touching the bulbs cause them to shrink."
- icon_state = "plant-07"
- catalogue_data = list(/datum/category_item/catalogue/flora/eyebulbs)
-
-/obj/structure/flora/pottedplant/smalltree
- name = "small potted tree"
- desc = "This is a small tree. It is rather pleasant."
- icon_state = "plant-08"
-
-/obj/structure/flora/pottedplant/unusual
- name = "unusual potted plant"
- desc = "This is an unusual plant. It's bulbous ends emit a soft blue light."
- icon_state = "plant-09"
- light_range = 2
- light_power = 0.6
- light_color = "#33CCFF"
- catalogue_data = list(/datum/category_item/catalogue/flora/sif_tree)
-
-/obj/structure/flora/pottedplant/orientaltree
- name = "potted oriental tree"
- desc = "This is a rather oriental style tree. Its flowers are bright pink."
- icon_state = "plant-10"
-
-/obj/structure/flora/pottedplant/smallcactus
- name = "small potted cactus"
- desc = "This is a small cactus. Its needles are sharp."
- icon_state = "plant-11"
-
-/obj/structure/flora/pottedplant/tall
- name = "tall potted plant"
- desc = "This is a tall plant. Tiny pores line its surface."
- icon_state = "plant-12"
-
-/obj/structure/flora/pottedplant/sticky
- name = "sticky potted plant"
- desc = "This is an odd plant. Its sticky leaves trap insects."
- icon_state = "plant-13"
-
-/obj/structure/flora/pottedplant/smelly
- name = "smelly potted plant"
- desc = "This is some kind of tropical plant. It reeks of rotten eggs."
- icon_state = "plant-14"
-
-/obj/structure/flora/pottedplant/small
- name = "small potted plant"
- desc = "This is a pot of assorted small flora. Some look familiar."
- icon_state = "plant-15"
-
-/obj/structure/flora/pottedplant/aquatic
- name = "aquatic potted plant"
- desc = "This is apparently an aquatic plant. It's probably fake."
- icon_state = "plant-16"
-
-/obj/structure/flora/pottedplant/shoot
- name = "small potted shoot"
- desc = "This is a small shoot. It still needs time to grow."
- icon_state = "plant-17"
-
-/obj/structure/flora/pottedplant/flower
- name = "potted flower"
- desc = "This is a slim plant. Sweet smelling flowers are supported by spindly stems."
- icon_state = "plant-18"
-
-/obj/structure/flora/pottedplant/crystal
- name = "crystalline potted plant"
- desc = "These are rather cubic plants. Odd crystal formations grow on the end."
- icon_state = "plant-19"
-
-/obj/structure/flora/pottedplant/subterranean
- name = "subterranean potted plant"
- desc = "This is a subterranean plant. It's bulbous ends glow faintly."
- icon_state = "plant-20"
- light_range = 2
- light_power = 0.6
- light_color = "#FF6633"
-
-/obj/structure/flora/pottedplant/minitree
- name = "potted tree"
- desc = "This is a miniature tree. Apparently it was grown to 1/5 scale."
- icon_state = "plant-21"
-
-/obj/structure/flora/pottedplant/stoutbush
- name = "stout potted bush"
- desc = "This is a stout bush. Its leaves point up and outwards."
- icon_state = "plant-22"
-
-/obj/structure/flora/pottedplant/drooping
- name = "drooping potted plant"
- desc = "This is a small plant. The drooping leaves make it look like its wilted."
- icon_state = "plant-23"
-
-/obj/structure/flora/pottedplant/tropical
- name = "tropical potted plant"
- desc = "This is some kind of tropical plant. It hasn't begun to flower yet."
- icon_state = "plant-24"
-
-/obj/structure/flora/pottedplant/dead
- name = "dead potted plant"
- desc = "This is the dried up remains of a dead plant. Someone should replace it."
- icon_state = "plant-25"
-
-/obj/structure/flora/pottedplant/decorative
- name = "decorative potted plant"
- desc = "This is a decorative shrub. It's been trimmed into the shape of an apple."
- icon_state = "applebush"
-
-/obj/structure/flora/pottedplant/xmas
- name = "small christmas tree"
- desc = "This is a tiny well lit decorative christmas tree."
- icon_state = "plant-xmas"
-
-/obj/structure/flora/sif
- icon = 'icons/obj/flora/sifflora.dmi'
-
-/obj/structure/flora/sif/attack_hand(mob/user)
- if (user.a_intent == I_HURT)
- if(do_after(user, 5 SECONDS))
- user.visible_message("\The [user] digs up \the [src.name].", "You dig up \the [src.name].")
- qdel(src)
- else
- user.visible_message("\The [user] pokes \the [src.name].", "You poke \the [src.name].")
-
-/datum/category_item/catalogue/flora/subterranean_bulbs
- name = "Sivian Flora - Subterranean Bulbs"
- desc = "A plant which is native to Sif, it continues the trend of being a bioluminescent specimen. These plants \
- are generally suited for conditions experienced in caverns, which are generally dark and cold. It is not \
- known why this plant evolved to be bioluminescent, however this property has, unintentionally, allowed for \
- it to spread much farther than before, with the assistance of humans.\
-
\
- In Sif's early history, Sivian settlers found this plant while they were establishing mines. Their ability \
- to emit low, but consistant amounts of light made them desirable to the settlers. They would often cultivate \
- this plant inside man-made tunnels and mines to act as a backup source of light that would not need \
- electricity. This technique has saved many lost miners, and this practice continues to this day."
- value = CATALOGUER_REWARD_EASY
-
-/obj/structure/flora/sif/subterranean
- name = "subterranean plant"
- desc = "This is a subterranean plant. It's bulbous ends glow faintly."
- icon_state = "glowplant"
- light_range = 2
- light_power = 0.6
- light_color = "#FF6633"
- catalogue_data = list(/datum/category_item/catalogue/flora/subterranean_bulbs)
-
-/obj/structure/flora/sif/subterranean/Initialize()
- icon_state = "[initial(icon_state)][rand(1,2)]"
- . = ..()
-
-
-/datum/category_item/catalogue/flora/eyebulbs
- name = "Sivian Flora - Eyebulbs"
- desc = "A plant native to Sif. On the end of its stems are bulbs which visually resemble \
- eyes, which shrink when touched. One theory is that the bulbs are a result of mimicry, appearing as eyeballs to protect from predators.
\
- These plants have no known use."
- value = CATALOGUER_REWARD_EASY
-
-/obj/structure/flora/sif/eyes
- name = "mysterious bulbs"
- desc = "This is a mysterious looking plant. They kind of look like eyeballs. Creepy."
- icon_state = "eyeplant"
- catalogue_data = list(/datum/category_item/catalogue/flora/eyebulbs)
-
-/obj/structure/flora/sif/eyes/Initialize()
- icon_state = "[initial(icon_state)][rand(1,3)]"
- . = ..()
-
-/datum/category_item/catalogue/flora/mosstendrils
- name = "Sivian Flora - Moss Stalks"
- desc = "A plant native to Sif. The plant is most closely related to the common, dense moss found covering Sif's terrain. \
- It has evolved a method of camouflage utilizing white hairs on its dorsal sides to make it appear as a small mound of snow from \
- above. It has no known use, though it is a common furnishing in contemporary homes."
- value = CATALOGUER_REWARD_TRIVIAL
-
-/obj/structure/flora/sif/tendrils
- name = "stocky tendrils"
- desc = "A 'plant' made up of hardened moss. It has tiny hairs that bunch together to look like snow."
- icon_state = "grass"
- randomize_size = TRUE
- catalogue_data = list(/datum/category_item/catalogue/flora/mosstendrils)
-
-/obj/structure/flora/sif/tendrils/Initialize()
- icon_state = "[initial(icon_state)][rand(1,3)]"
- . = ..()
+
+/obj/structure/flora
+ name = "flora"
+ desc = "A perfectly generic plant."
+
+ anchored = TRUE // Usually, plants don't move. Usually.
+ plane = DECAL_PLANE
+ layer = BELOW_MOB_LAYER
+
+ var/randomize_size = FALSE
+ var/max_x_scale = 1.25
+ var/max_y_scale = 1.25
+ var/min_x_scale = 0.9
+ var/min_y_scale = 0.9
+
+ var/harvest_tool = null // The type of item used to harvest the plant.
+ var/harvest_count = 0
+
+ var/randomize_harvest_count = TRUE
+ var/max_harvests = 0
+ var/min_harvests = -1
+ var/list/harvest_loot = null // Should be an associative list for things to spawn, and their weights. An example would be a branch from a tree.
+
+/obj/structure/flora/Initialize()
+ ..()
+
+ if(randomize_size)
+ icon_scale_x = rand(min_x_scale * 100, max_x_scale * 100) / 100
+ icon_scale_y = rand(min_y_scale * 100, max_y_scale * 100) / 100
+
+ if(prob(50))
+ icon_scale_x *= -1
+ update_transform()
+
+ if(randomize_harvest_count)
+ max_harvests = max(0, rand(min_harvests, max_harvests)) // Incase you want to weight it more toward 'not harvestable', set min_harvests to a negative value.
+
+/obj/structure/flora/examine(mob/user)
+ . = ..()
+ if(harvest_count < max_harvests)
+ . += get_harvestable_desc()
+
+/obj/structure/flora/proc/get_harvestable_desc()
+ return "\The [src] seems to have something hanging from it."
+
+/obj/structure/flora/attackby(var/obj/item/weapon/W, var/mob/living/user)
+ if(can_harvest(W))
+ var/harvest_spawn = pickweight(harvest_loot)
+ var/atom/movable/AM = spawn_harvest(harvest_spawn, user)
+
+ if(!AM)
+ to_chat(user, "You fail to harvest anything from \the [src].")
+
+ else
+ to_chat(user, "You harvest \the [AM] from \the [src].")
+ return
+
+ ..(W, user)
+
+/obj/structure/flora/proc/can_harvest(var/obj/item/I)
+ . = FALSE
+ if(harvest_tool && istype(I, harvest_tool) && harvest_loot && harvest_loot.len && harvest_count < max_harvests)
+ . = TRUE
+ return .
+
+/obj/structure/flora/proc/spawn_harvest(var/path = null, var/mob/user = null)
+ if(!ispath(path))
+ return 0
+ var/turf/Target = get_turf(src)
+ if(user)
+ Target = get_turf(user)
+
+ var/atom/movable/AM = new path(Target)
+
+ harvest_count++
+ return AM
+
+//bushes
+/obj/structure/flora/bush
+ name = "bush"
+ icon = 'icons/obj/flora/snowflora.dmi'
+ icon_state = "snowbush1"
+
+/obj/structure/flora/bush/New()
+ ..()
+ icon_state = "snowbush[rand(1, 6)]"
+
+/obj/structure/flora/pottedplant
+ name = "potted plant"
+ desc = "Really ties the room together."
+ icon = 'icons/obj/plants.dmi'
+ icon_state = "plant-26"
+
+ anchored = FALSE
+
+//newbushes
+
+/obj/structure/flora/ausbushes
+ name = "bush"
+ icon = 'icons/obj/flora/ausflora.dmi'
+ icon_state = "firstbush_1"
+
+/obj/structure/flora/ausbushes/New()
+ ..()
+ icon_state = "firstbush_[rand(1, 4)]"
+
+/obj/structure/flora/ausbushes/reedbush
+ icon_state = "reedbush_1"
+
+/obj/structure/flora/ausbushes/reedbush/New()
+ ..()
+ icon_state = "reedbush_[rand(1, 4)]"
+
+/obj/structure/flora/ausbushes/leafybush
+ icon_state = "leafybush_1"
+
+/obj/structure/flora/ausbushes/leafybush/New()
+ ..()
+ icon_state = "leafybush_[rand(1, 3)]"
+
+/obj/structure/flora/ausbushes/palebush
+ icon_state = "palebush_1"
+
+/obj/structure/flora/ausbushes/palebush/New()
+ ..()
+ icon_state = "palebush_[rand(1, 4)]"
+
+/obj/structure/flora/ausbushes/stalkybush
+ icon_state = "stalkybush_1"
+
+/obj/structure/flora/ausbushes/stalkybush/New()
+ ..()
+ icon_state = "stalkybush_[rand(1, 3)]"
+
+/obj/structure/flora/ausbushes/grassybush
+ icon_state = "grassybush_1"
+
+/obj/structure/flora/ausbushes/grassybush/New()
+ ..()
+ icon_state = "grassybush_[rand(1, 4)]"
+
+/obj/structure/flora/ausbushes/fernybush
+ icon_state = "fernybush_1"
+
+/obj/structure/flora/ausbushes/fernybush/New()
+ ..()
+ icon_state = "fernybush_[rand(1, 3)]"
+
+/obj/structure/flora/ausbushes/sunnybush
+ icon_state = "sunnybush_1"
+
+/obj/structure/flora/ausbushes/sunnybush/New()
+ ..()
+ icon_state = "sunnybush_[rand(1, 3)]"
+
+/obj/structure/flora/ausbushes/genericbush
+ icon_state = "genericbush_1"
+
+/obj/structure/flora/ausbushes/genericbush/New()
+ ..()
+ icon_state = "genericbush_[rand(1, 4)]"
+
+/obj/structure/flora/ausbushes/pointybush
+ icon_state = "pointybush_1"
+
+/obj/structure/flora/ausbushes/pointybush/New()
+ ..()
+ icon_state = "pointybush_[rand(1, 4)]"
+
+/obj/structure/flora/ausbushes/lavendergrass
+ icon_state = "lavendergrass_1"
+
+/obj/structure/flora/ausbushes/lavendergrass/New()
+ ..()
+ icon_state = "lavendergrass_[rand(1, 4)]"
+
+/obj/structure/flora/ausbushes/ywflowers
+ icon_state = "ywflowers_1"
+
+/obj/structure/flora/ausbushes/ywflowers/New()
+ ..()
+ icon_state = "ywflowers_[rand(1, 3)]"
+
+/obj/structure/flora/ausbushes/brflowers
+ icon_state = "brflowers_1"
+
+/obj/structure/flora/ausbushes/brflowers/New()
+ ..()
+ icon_state = "brflowers_[rand(1, 3)]"
+
+/obj/structure/flora/ausbushes/ppflowers
+ icon_state = "ppflowers_1"
+
+/obj/structure/flora/ausbushes/ppflowers/New()
+ ..()
+ icon_state = "ppflowers_[rand(1, 3)]"
+
+/obj/structure/flora/ausbushes/sparsegrass
+ icon_state = "sparsegrass_1"
+
+/obj/structure/flora/ausbushes/sparsegrass/New()
+ ..()
+ icon_state = "sparsegrass_[rand(1, 3)]"
+
+/obj/structure/flora/ausbushes/fullgrass
+ icon_state = "fullgrass_1"
+
+/obj/structure/flora/ausbushes/fullgrass/New()
+ ..()
+ icon_state = "fullgrass_[rand(1, 3)]"
+
+/obj/structure/flora/skeleton
+ name = "hanging skeleton model"
+ icon = 'icons/obj/plants.dmi' //what an interesting plant
+ icon_state = "hangskele"
+ desc = "It's an anatomical model of a human skeletal system made of plaster."
+
+ plane = OBJ_PLANE
+
+//potted plants credit: Flashkirby
+/obj/structure/flora/pottedplant
+ name = "potted plant"
+ desc = "Really brings the room together."
+ icon = 'icons/obj/plants.dmi'
+ icon_state = "plant-01"
+
+ plane = OBJ_PLANE
+ var/obj/item/stored_item
+
+/obj/structure/flora/pottedplant/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) && stored_item)
+ . += "You can see something in there..."
+
+/obj/structure/flora/pottedplant/attackby(obj/item/I, mob/user)
+ if(stored_item)
+ to_chat(user, "[I] won't fit in. There already appears to be something in here...")
+ return
+
+ if(I.w_class > ITEMSIZE_TINY)
+ to_chat(user, "[I] is too big to fit inside [src].")
+ return
+
+ if(do_after(user, 10))
+ user.drop_from_inventory(I, src)
+ I.forceMove(src)
+ stored_item = I
+ src.visible_message("[bicon(src)] [bicon(I)] [user] places [I] into [src].")
+ return
+ else
+ to_chat(user, "You refrain from putting things into the plant pot.")
+ return
+
+ ..()
+
+/obj/structure/flora/pottedplant/attack_hand(mob/user)
+ if(!stored_item)
+ to_chat(user, "You see nothing of interest in [src]...")
+ else
+ if(do_after(user, 10))
+ to_chat(user, "You find [bicon(stored_item)] [stored_item] in [src]!")
+ stored_item.forceMove(get_turf(src))
+ stored_item = null
+ ..()
+
+
+/obj/structure/flora/pottedplant/large
+ name = "large potted plant"
+ desc = "This is a large plant. Three branches support pairs of waxy leaves."
+ icon_state = "plant-26"
+
+/obj/structure/flora/pottedplant/fern
+ name = "potted fern"
+ desc = "This is an ordinary looking fern. It looks like it could do with some water."
+ icon_state = "plant-02"
+
+/obj/structure/flora/pottedplant/overgrown
+ name = "overgrown potted plants"
+ desc = "This is an assortment of colourful plants. Some parts are overgrown."
+ icon_state = "plant-03"
+
+/obj/structure/flora/pottedplant/bamboo
+ name = "potted bamboo"
+ desc = "These are bamboo shoots. The tops looks like they've been cut short."
+ icon_state = "plant-04"
+
+/obj/structure/flora/pottedplant/largebush
+ name = "large potted bush"
+ desc = "This is a large bush. The leaves stick upwards in an odd fashion."
+ icon_state = "plant-05"
+
+/obj/structure/flora/pottedplant/thinbush
+ name = "thin potted bush"
+ desc = "This is a thin bush. It appears to be flowering."
+ icon_state = "plant-06"
+
+/obj/structure/flora/pottedplant/mysterious
+ name = "mysterious potted bulbs"
+ desc = "This is a mysterious looking plant. Touching the bulbs cause them to shrink."
+ icon_state = "plant-07"
+ catalogue_data = list(/datum/category_item/catalogue/flora/eyebulbs)
+
+/obj/structure/flora/pottedplant/smalltree
+ name = "small potted tree"
+ desc = "This is a small tree. It is rather pleasant."
+ icon_state = "plant-08"
+
+/obj/structure/flora/pottedplant/unusual
+ name = "unusual potted plant"
+ desc = "This is an unusual plant. It's bulbous ends emit a soft blue light."
+ icon_state = "plant-09"
+ light_range = 2
+ light_power = 0.6
+ light_color = "#33CCFF"
+ catalogue_data = list(/datum/category_item/catalogue/flora/sif_tree)
+
+/obj/structure/flora/pottedplant/orientaltree
+ name = "potted oriental tree"
+ desc = "This is a rather oriental style tree. Its flowers are bright pink."
+ icon_state = "plant-10"
+
+/obj/structure/flora/pottedplant/smallcactus
+ name = "small potted cactus"
+ desc = "This is a small cactus. Its needles are sharp."
+ icon_state = "plant-11"
+
+/obj/structure/flora/pottedplant/tall
+ name = "tall potted plant"
+ desc = "This is a tall plant. Tiny pores line its surface."
+ icon_state = "plant-12"
+
+/obj/structure/flora/pottedplant/sticky
+ name = "sticky potted plant"
+ desc = "This is an odd plant. Its sticky leaves trap insects."
+ icon_state = "plant-13"
+
+/obj/structure/flora/pottedplant/smelly
+ name = "smelly potted plant"
+ desc = "This is some kind of tropical plant. It reeks of rotten eggs."
+ icon_state = "plant-14"
+
+/obj/structure/flora/pottedplant/small
+ name = "small potted plant"
+ desc = "This is a pot of assorted small flora. Some look familiar."
+ icon_state = "plant-15"
+
+/obj/structure/flora/pottedplant/aquatic
+ name = "aquatic potted plant"
+ desc = "This is apparently an aquatic plant. It's probably fake."
+ icon_state = "plant-16"
+
+/obj/structure/flora/pottedplant/shoot
+ name = "small potted shoot"
+ desc = "This is a small shoot. It still needs time to grow."
+ icon_state = "plant-17"
+
+/obj/structure/flora/pottedplant/flower
+ name = "potted flower"
+ desc = "This is a slim plant. Sweet smelling flowers are supported by spindly stems."
+ icon_state = "plant-18"
+
+/obj/structure/flora/pottedplant/crystal
+ name = "crystalline potted plant"
+ desc = "These are rather cubic plants. Odd crystal formations grow on the end."
+ icon_state = "plant-19"
+
+/obj/structure/flora/pottedplant/subterranean
+ name = "subterranean potted plant"
+ desc = "This is a subterranean plant. It's bulbous ends glow faintly."
+ icon_state = "plant-20"
+ light_range = 2
+ light_power = 0.6
+ light_color = "#FF6633"
+
+/obj/structure/flora/pottedplant/minitree
+ name = "potted tree"
+ desc = "This is a miniature tree. Apparently it was grown to 1/5 scale."
+ icon_state = "plant-21"
+
+/obj/structure/flora/pottedplant/stoutbush
+ name = "stout potted bush"
+ desc = "This is a stout bush. Its leaves point up and outwards."
+ icon_state = "plant-22"
+
+/obj/structure/flora/pottedplant/drooping
+ name = "drooping potted plant"
+ desc = "This is a small plant. The drooping leaves make it look like its wilted."
+ icon_state = "plant-23"
+
+/obj/structure/flora/pottedplant/tropical
+ name = "tropical potted plant"
+ desc = "This is some kind of tropical plant. It hasn't begun to flower yet."
+ icon_state = "plant-24"
+
+/obj/structure/flora/pottedplant/dead
+ name = "dead potted plant"
+ desc = "This is the dried up remains of a dead plant. Someone should replace it."
+ icon_state = "plant-25"
+
+/obj/structure/flora/pottedplant/decorative
+ name = "decorative potted plant"
+ desc = "This is a decorative shrub. It's been trimmed into the shape of an apple."
+ icon_state = "applebush"
+
+/obj/structure/flora/pottedplant/xmas
+ name = "small christmas tree"
+ desc = "This is a tiny well lit decorative christmas tree."
+ icon_state = "plant-xmas"
+
+/obj/structure/flora/sif
+ icon = 'icons/obj/flora/sifflora.dmi'
+
+/obj/structure/flora/sif/attack_hand(mob/user)
+ if (user.a_intent == I_HURT)
+ if(do_after(user, 5 SECONDS))
+ user.visible_message("\The [user] digs up \the [src.name].", "You dig up \the [src.name].")
+ qdel(src)
+ else
+ user.visible_message("\The [user] pokes \the [src.name].", "You poke \the [src.name].")
+
+/datum/category_item/catalogue/flora/subterranean_bulbs
+ name = "Sivian Flora - Subterranean Bulbs"
+ desc = "A plant which is native to Sif, it continues the trend of being a bioluminescent specimen. These plants \
+ are generally suited for conditions experienced in caverns, which are generally dark and cold. It is not \
+ known why this plant evolved to be bioluminescent, however this property has, unintentionally, allowed for \
+ it to spread much farther than before, with the assistance of humans.\
+
\
+ In Sif's early history, Sivian settlers found this plant while they were establishing mines. Their ability \
+ to emit low, but consistant amounts of light made them desirable to the settlers. They would often cultivate \
+ this plant inside man-made tunnels and mines to act as a backup source of light that would not need \
+ electricity. This technique has saved many lost miners, and this practice continues to this day."
+ value = CATALOGUER_REWARD_EASY
+
+/obj/structure/flora/sif/subterranean
+ name = "subterranean plant"
+ desc = "This is a subterranean plant. It's bulbous ends glow faintly."
+ icon_state = "glowplant"
+ light_range = 2
+ light_power = 0.6
+ light_color = "#FF6633"
+ catalogue_data = list(/datum/category_item/catalogue/flora/subterranean_bulbs)
+
+/obj/structure/flora/sif/subterranean/Initialize()
+ icon_state = "[initial(icon_state)][rand(1,2)]"
+ . = ..()
+
+
+/datum/category_item/catalogue/flora/eyebulbs
+ name = "Sivian Flora - Eyebulbs"
+ desc = "A plant native to Sif. On the end of its stems are bulbs which visually resemble \
+ eyes, which shrink when touched. One theory is that the bulbs are a result of mimicry, appearing as eyeballs to protect from predators.
\
+ These plants have no known use."
+ value = CATALOGUER_REWARD_EASY
+
+/obj/structure/flora/sif/eyes
+ name = "mysterious bulbs"
+ desc = "This is a mysterious looking plant. They kind of look like eyeballs. Creepy."
+ icon_state = "eyeplant"
+ catalogue_data = list(/datum/category_item/catalogue/flora/eyebulbs)
+
+/obj/structure/flora/sif/eyes/Initialize()
+ icon_state = "[initial(icon_state)][rand(1,3)]"
+ . = ..()
+
+/datum/category_item/catalogue/flora/mosstendrils
+ name = "Sivian Flora - Moss Stalks"
+ desc = "A plant native to Sif. The plant is most closely related to the common, dense moss found covering Sif's terrain. \
+ It has evolved a method of camouflage utilizing white hairs on its dorsal sides to make it appear as a small mound of snow from \
+ above. It has no known use, though it is a common furnishing in contemporary homes."
+ value = CATALOGUER_REWARD_TRIVIAL
+
+/obj/structure/flora/sif/tendrils
+ name = "stocky tendrils"
+ desc = "A 'plant' made up of hardened moss. It has tiny hairs that bunch together to look like snow."
+ icon_state = "grass"
+ randomize_size = TRUE
+ catalogue_data = list(/datum/category_item/catalogue/flora/mosstendrils)
+
+ harvest_tool = /obj/item/weapon/material/knife
+ max_harvests = 1
+ min_harvests = -4
+ harvest_loot = list(
+ /obj/item/seeds/wabback = 15,
+ /obj/item/seeds/blackwabback = 1,
+ /obj/item/seeds/wildwabback = 30
+ )
+
+/obj/structure/flora/sif/tendrils/Initialize()
+ icon_state = "[initial(icon_state)][rand(1,3)]"
+ . = ..()
+
+/obj/structure/flora/sif/tendrils/get_harvestable_desc()
+ return "\The [src] seems to be growing over something."
diff --git a/code/game/objects/structures/flora_vr.dm b/code/game/objects/structures/flora/flora_vr.dm
similarity index 100%
rename from code/game/objects/structures/flora_vr.dm
rename to code/game/objects/structures/flora/flora_vr.dm
diff --git a/code/game/objects/structures/flora/grass.dm b/code/game/objects/structures/flora/grass.dm
index d5e7e965a87..92717f4beb4 100644
--- a/code/game/objects/structures/flora/grass.dm
+++ b/code/game/objects/structures/flora/grass.dm
@@ -11,7 +11,6 @@
..()
icon_state = "snowgrass[rand(1, 3)]bb"
-
/obj/structure/flora/grass/green
icon_state = "snowgrass1gb"
diff --git a/code/game/objects/structures/flora/trees.dm b/code/game/objects/structures/flora/trees.dm
index c67348a94ae..c4d8f58ebd9 100644
--- a/code/game/objects/structures/flora/trees.dm
+++ b/code/game/objects/structures/flora/trees.dm
@@ -273,7 +273,9 @@
max_harvests = 2
min_harvests = -4
harvest_loot = list(
- /obj/item/weapon/reagent_containers/food/snacks/siffruit = 5
+ /obj/item/weapon/reagent_containers/food/snacks/siffruit = 20,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/sifpod = 5,
+ /obj/item/seeds/sifbulb = 1
)
var/light_shift = 0
diff --git a/code/game/turfs/simulated/outdoors/grass.dm b/code/game/turfs/simulated/outdoors/grass.dm
index 5fd8214e57b..1dee4d79c50 100644
--- a/code/game/turfs/simulated/outdoors/grass.dm
+++ b/code/game/turfs/simulated/outdoors/grass.dm
@@ -12,6 +12,13 @@ var/list/grass_types = list(
)
var/grass_chance = 20
+ var/animal_chance = 1
+
+ // Weighted spawn list.
+ var/list/animal_types = list(
+ /mob/living/simple_mob/animal/passive/tindalos = 1
+ )
+
var/list/grass_types = list(
/obj/structure/flora/ausbushes/sparsegrass,
/obj/structure/flora/ausbushes/fullgrass
@@ -63,6 +70,11 @@ var/list/grass_types = list(
if(grass_chance && prob(grass_chance) && !check_density())
var/grass_type = pickweight(grass_types)
new grass_type(src)
+
+ if(animal_chance && prob(animal_chance) && !check_density())
+ var/animal_type = pickweight(animal_types)
+ new animal_type(src)
+
. = ..()
/turf/simulated/floor/outdoors/grass/forest
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 736ee2bc9af..283406d6bad 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -96,6 +96,42 @@
. = check
break
+// For now, these two temp procs only return TRUE or FALSE if they can provide resistance to a given temperature.
+/obj/item/clothing/proc/handle_low_temperature(var/tempcheck = T20C)
+ . = FALSE
+ if(LAZYLEN(accessories))
+ for(var/obj/item/clothing/C in accessories)
+ if(C.handle_low_temperature(tempcheck))
+ . = TRUE
+
+ if(min_cold_protection_temperature && min_cold_protection_temperature <= tempcheck)
+ . = TRUE
+
+/obj/item/clothing/proc/handle_high_temperature(var/tempcheck = T20C)
+ . = FALSE
+ if(LAZYLEN(accessories))
+ for(var/obj/item/clothing/C in accessories)
+ if(C.handle_low_temperature(tempcheck))
+ . = TRUE
+
+ if(max_heat_protection_temperature && max_heat_protection_temperature >= tempcheck)
+ . = TRUE
+
+// Returns the relative flag-vars for covered protection.
+/obj/item/clothing/proc/get_cold_protection_flags()
+ . = cold_protection
+
+ if(LAZYLEN(accessories))
+ for(var/obj/item/clothing/C in accessories)
+ . |= C.get_cold_protection_flags()
+
+/obj/item/clothing/proc/get_heat_protection_flags()
+ . = heat_protection
+
+ if(LAZYLEN(accessories))
+ for(var/obj/item/clothing/C in accessories)
+ . |= C.get_heat_protection_flags()
+
/obj/item/clothing/proc/refit_for_species(var/target_species)
if(!species_restricted)
return //this item doesn't use the species_restricted system
diff --git a/code/modules/clothing/spacesuits/rig/suits/alien.dm b/code/modules/clothing/spacesuits/rig/suits/alien.dm
index 56c7fe63676..692a5786906 100644
--- a/code/modules/clothing/spacesuits/rig/suits/alien.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/alien.dm
@@ -51,7 +51,13 @@
item_flags = THICKMATERIAL
siemens_coefficient = 0.2
offline_slowdown = 5
- allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit)
+ allowed = list(
+ /obj/item/weapon/gun,
+ /obj/item/device/flashlight,
+ /obj/item/weapon/tank,
+ /obj/item/device/suit_cooling_unit,
+ /obj/item/weapon/storage
+ )
air_type = /obj/item/weapon/tank/vox
diff --git a/code/modules/clothing/spacesuits/rig/suits/combat.dm b/code/modules/clothing/spacesuits/rig/suits/combat.dm
index f88f0579072..57e5f6601aa 100644
--- a/code/modules/clothing/spacesuits/rig/suits/combat.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/combat.dm
@@ -12,7 +12,14 @@
offline_vision_restriction = 1
helm_type = /obj/item/clothing/head/helmet/space/rig/combat
- allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton)
+ allowed = list(
+ /obj/item/weapon/gun,
+ /obj/item/device/flashlight,
+ /obj/item/weapon/tank,
+ /obj/item/device/suit_cooling_unit,
+ /obj/item/weapon/melee/baton,
+ /obj/item/weapon/storage
+ )
/obj/item/weapon/rig/combat/equipped
@@ -42,10 +49,26 @@
slowdown = 1
offline_slowdown = 3
offline_vision_restriction = 1
- allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/handcuffs, \
- /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/weldingtool, /obj/item/weapon/tool, /obj/item/device/multitool, \
- /obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \
- /obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/device/suit_cooling_unit)
+ allowed = list(
+ /obj/item/device/flashlight,
+ /obj/item/weapon/tank,
+ /obj/item/ammo_magazine,
+ /obj/item/ammo_casing,
+ /obj/item/weapon/handcuffs,
+ /obj/item/device/t_scanner,
+ /obj/item/weapon/rcd,
+ /obj/item/weapon/weldingtool,
+ /obj/item/weapon/tool,
+ /obj/item/device/multitool,
+ /obj/item/device/radio,
+ /obj/item/device/analyzer,
+ /obj/item/weapon/melee/baton,
+ /obj/item/weapon/gun,
+ /obj/item/weapon/storage,
+ /obj/item/weapon/reagent_containers/hypospray,
+ /obj/item/roller,
+ /obj/item/device/suit_cooling_unit
+ )
chest_type = /obj/item/clothing/suit/space/rig/military
helm_type = /obj/item/clothing/head/helmet/space/rig/military
diff --git a/code/modules/clothing/spacesuits/rig/suits/ert.dm b/code/modules/clothing/spacesuits/rig/suits/ert.dm
index 33b4e073515..0edd36c1d28 100644
--- a/code/modules/clothing/spacesuits/rig/suits/ert.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/ert.dm
@@ -14,10 +14,25 @@
siemens_coefficient= 0.5
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 100)
- allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/tool/crowbar, \
- /obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/device/multitool, \
- /obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \
- /obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller)
+ allowed = list(
+ /obj/item/device/flashlight,
+ /obj/item/weapon/tank,
+ /obj/item/device/t_scanner,
+ /obj/item/weapon/rcd,
+ /obj/item/weapon/tool/crowbar,
+ /obj/item/weapon/tool/screwdriver,
+ /obj/item/weapon/weldingtool,
+ /obj/item/weapon/tool/wirecutters,
+ /obj/item/weapon/tool/wrench,
+ /obj/item/device/multitool,
+ /obj/item/device/radio,
+ /obj/item/device/analyzer,
+ /obj/item/weapon/storage,
+ /obj/item/weapon/melee/baton,
+ /obj/item/weapon/gun,
+ /obj/item/weapon/reagent_containers/hypospray,
+ /obj/item/roller
+ )
initial_modules = list(
/obj/item/rig_module/ai_container,
diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm
index edf982464de..b2a525f24d8 100644
--- a/code/modules/clothing/spacesuits/rig/suits/light.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/light.dm
@@ -4,7 +4,17 @@
desc = "A lighter, less armoured rig suit."
icon_state = "ninja_rig"
suit_type = "light suit"
- allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/cell)
+ allowed = list(
+ /obj/item/weapon/gun,
+ /obj/item/ammo_magazine,
+ /obj/item/ammo_casing,
+ /obj/item/weapon/melee/baton,
+ /obj/item/weapon/handcuffs,
+ /obj/item/weapon/tank,
+ /obj/item/device/suit_cooling_unit,
+ /obj/item/weapon/cell,
+ /obj/item/weapon/storage
+ )
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
emp_protection = 10
slowdown = 0
diff --git a/code/modules/clothing/spacesuits/rig/suits/merc.dm b/code/modules/clothing/spacesuits/rig/suits/merc.dm
index 4724e2c733a..56435ff7f5f 100644
--- a/code/modules/clothing/spacesuits/rig/suits/merc.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/merc.dm
@@ -14,7 +14,18 @@
siemens_coefficient = 0.3
glove_type = /obj/item/clothing/gloves/gauntlets/rig/eva
helm_type = /obj/item/clothing/head/helmet/space/rig/merc
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs)
+ allowed = list(
+ /obj/item/device/flashlight,
+ /obj/item/weapon/tank,
+ /obj/item/device/suit_cooling_unit,
+ /obj/item/weapon/gun,
+ /obj/item/ammo_magazine,
+ /obj/item/ammo_casing,
+ /obj/item/weapon/melee/baton,
+ /obj/item/weapon/melee/energy/sword,
+ /obj/item/weapon/handcuffs,
+ /obj/item/weapon/storage
+ )
initial_modules = list(
/obj/item/rig_module/mounted,
diff --git a/code/modules/clothing/spacesuits/rig/suits/pmc.dm b/code/modules/clothing/spacesuits/rig/suits/pmc.dm
index b10e559977a..e312ee826a2 100644
--- a/code/modules/clothing/spacesuits/rig/suits/pmc.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/pmc.dm
@@ -12,10 +12,25 @@
req_access = list(access_cent_specops)
armor = list(melee = 60, bullet = 50, laser = 35,energy = 15, bomb = 30, bio = 100, rad = 95)
- allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/tool/crowbar, \
- /obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/device/multitool, \
- /obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \
- /obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller)
+ allowed = list(
+ /obj/item/device/flashlight,
+ /obj/item/weapon/tank,
+ /obj/item/device/t_scanner,
+ /obj/item/weapon/rcd,
+ /obj/item/weapon/tool/crowbar,
+ /obj/item/weapon/tool/screwdriver,
+ /obj/item/weapon/weldingtool,
+ /obj/item/weapon/tool/wirecutters,
+ /obj/item/weapon/tool/wrench,
+ /obj/item/device/multitool,
+ /obj/item/device/radio,
+ /obj/item/device/analyzer,
+ /obj/item/weapon/melee/baton,
+ /obj/item/weapon/gun,
+ /obj/item/weapon/storage,
+ /obj/item/weapon/reagent_containers/hypospray,
+ /obj/item/roller
+ )
/obj/item/weapon/rig/pmc/commander
name = "PMC-C hardsuit control module"
diff --git a/code/modules/clothing/spacesuits/rig/suits/station.dm b/code/modules/clothing/spacesuits/rig/suits/station.dm
index f9ef544a3a7..d506725759a 100644
--- a/code/modules/clothing/spacesuits/rig/suits/station.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/station.dm
@@ -35,8 +35,7 @@
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
- /obj/item/weapon/storage/briefcase,
- /obj/item/weapon/storage/secure/briefcase
+ /obj/item/weapon/storage,
)
req_access = list()
@@ -83,7 +82,7 @@
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
- /obj/item/weapon/storage/bag/ore,
+ /obj/item/weapon/storage,
/obj/item/device/t_scanner,
/obj/item/weapon/pickaxe,
/obj/item/weapon/rcd
@@ -121,7 +120,7 @@
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
- /obj/item/weapon/storage/briefcase/inflatable,
+ /obj/item/weapon/storage,
/obj/item/device/t_scanner,
/obj/item/weapon/rcd
)
@@ -168,7 +167,7 @@
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
- /obj/item/weapon/storage/briefcase/inflatable,
+ /obj/item/weapon/storage,
/obj/item/device/t_scanner,
/obj/item/weapon/rcd
)
@@ -212,7 +211,7 @@
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
/obj/item/stack/flag,
- /obj/item/weapon/storage/excavation,
+ /obj/item/weapon/storage,
/obj/item/weapon/pickaxe,
/obj/item/device/healthanalyzer,
/obj/item/device/measuring_tape,
@@ -222,8 +221,8 @@
/obj/item/device/gps,
/obj/item/device/beacon_locator,
/obj/item/device/radio/beacon,
- /obj/item/weapon/pickaxe/hand,
- /obj/item/weapon/storage/bag/fossils)
+ /obj/item/weapon/pickaxe/hand
+ )
req_access = list()
req_one_access = list()
@@ -256,7 +255,7 @@
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
- /obj/item/weapon/storage/firstaid,
+ /obj/item/weapon/storage,
/obj/item/device/healthanalyzer,
/obj/item/stack/medical,
/obj/item/roller
@@ -296,7 +295,8 @@
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
- /obj/item/weapon/melee/baton
+ /obj/item/weapon/melee/baton,
+ /obj/item/weapon/storage
)
req_access = list()
diff --git a/code/modules/clothing/under/accessories/armor.dm b/code/modules/clothing/under/accessories/armor.dm
index b440c0b8342..9ef80846eee 100644
--- a/code/modules/clothing/under/accessories/armor.dm
+++ b/code/modules/clothing/under/accessories/armor.dm
@@ -96,9 +96,16 @@
name = "mesh armor plate"
desc = "A mesh armor plate made of steel-reinforced synthetic fibers, great for dealing with small blades. Attaches to a plate carrier."
icon_state = "armor_stab"
- armor = list(melee = 25, bullet = 5, laser = 20, energy = 10, bomb = 15, bio = 0, rad = 0)
+ armor = list(melee = 30, bullet = 5, laser = 20, energy = 10, bomb = 15, bio = 0, rad = 0)
armorsoak = list(melee = 7, bullet = 5, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
+/obj/item/clothing/accessory/armor/armorplate/blast
+ name = "gel armor plate"
+ desc = "A gel armor plate made of high-grade polymers, great for dealing with localized blasts. Attaches to a plate carrier."
+ icon_state = "armor_blast"
+ armor = list(melee = 25, bullet = 25, laser = 10, energy = 0, bomb = 30, bio = 0, rad = 0)
+ armorsoak = list(melee = 5, bullet = 7, laser = 0, energy = 0, bomb = 40, bio = 0, rad = 0)
+
/obj/item/clothing/accessory/armor/armorplate/medium
name = "medium armor plate"
desc = "A plasteel-reinforced synthetic armor plate, providing good protection. Attaches to a plate carrier."
diff --git a/code/modules/clothing/under/accessories/temperature/poncho.dm b/code/modules/clothing/under/accessories/temperature/poncho.dm
new file mode 100644
index 00000000000..f1815760b8f
--- /dev/null
+++ b/code/modules/clothing/under/accessories/temperature/poncho.dm
@@ -0,0 +1,68 @@
+
+/obj/item/clothing/accessory/poncho/thermal
+ name = "thermal poncho"
+ desc = "A simple, comfortable poncho with a thermal foil layer."
+ slot_flags = SLOT_OCLOTHING | SLOT_TIE
+ body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
+
+ cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS
+ heat_protection = UPPER_TORSO|LOWER_TORSO|ARMS
+
+ slowdown = 0.2
+
+ min_cold_protection_temperature = T0C - 40
+ max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE
+
+/obj/item/clothing/accessory/poncho/thermal/green
+ name = "green thermal poncho"
+ desc = "A simple, comfortable poncho with a thermal foil layer. This one is green."
+ icon_state = "greenponcho"
+ item_state = "greenponcho"
+
+/obj/item/clothing/accessory/poncho/thermal/red
+ name = "red thermal poncho"
+ desc = "A simple, comfortable poncho with a thermal foil layer. This one is red."
+ icon_state = "redponcho"
+ item_state = "redponcho"
+
+/obj/item/clothing/accessory/poncho/thermal/purple
+ name = "purple thermal poncho"
+ desc = "A simple, comfortable poncho with a thermal foil layer. This one is purple."
+ icon_state = "purpleponcho"
+ item_state = "purpleponcho"
+
+/obj/item/clothing/accessory/poncho/thermal/blue
+ name = "blue thermal poncho"
+ desc = "A simple, comfortable poncho with a thermal foil layer. This one is blue."
+ icon_state = "blueponcho"
+ item_state = "blueponcho"
+
+/obj/item/clothing/accessory/poncho/thermal/security
+ name = "security thermal poncho"
+ desc = "A simple, comfortable poncho with a thermal foil layer. This one is black and red, standard NanoTrasen Security colors."
+ icon_state = "secponcho"
+ item_state = "secponcho"
+
+/obj/item/clothing/accessory/poncho/thermal/medical
+ name = "medical thermal poncho"
+ desc = "A simple, comfortable poncho with a thermal foil layer. This one is white with green and blue tint, standard Medical colors."
+ icon_state = "medponcho"
+ item_state = "medponcho"
+
+/obj/item/clothing/accessory/poncho/thermal/engineering
+ name = "engineering thermal poncho"
+ desc = "A simple, comfortable poncho with a thermal foil layer. This one is yellow and orange, standard Engineering colors."
+ icon_state = "engiponcho"
+ item_state = "engiponcho"
+
+/obj/item/clothing/accessory/poncho/thermal/science
+ name = "science thermal poncho"
+ desc = "A simple, comfortable poncho with a thermal foil layer. This one is white with purple trim, standard NanoTrasen Science colors."
+ icon_state = "sciponcho"
+ item_state = "sciponcho"
+
+/obj/item/clothing/accessory/poncho/thermal/cargo
+ name = "cargo thermal poncho"
+ desc = "A simple, comfortable poncho with a thermal foil layer. This one is tan and grey, the colors of Cargo."
+ icon_state = "cargoponcho"
+ item_state = "cargoponcho"
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index a0e794929f2..800ba8e3ecd 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -938,6 +938,11 @@ Uniforms and such
name = "explorer's jumpsuit"
icon_state = "explorer"
+/obj/item/clothing/under/explorer/armored
+ desc = "A green uniform for operating in hazardous environments. This one looks like it's been modified."
+ armor = list(melee = 10, bullet = 10, laser = 10,energy = 10, bomb = 10, bio = 10, rad = 30)
+ armorsoak = list(melee = 5, bullet = 5, laser = 5,energy = 5, bomb = 5, bio = 5, rad = 0)
+
/obj/item/clothing/under/cohesion
name = "black cohesion suit"
desc = "A plain black cohesion suit intended to assist Prometheans in maintaining their form and prevent direct skin exposure."
diff --git a/code/modules/hydroponics/grown_predefined.dm b/code/modules/hydroponics/grown_predefined.dm
index e44025de7b3..d8187fb24ef 100644
--- a/code/modules/hydroponics/grown_predefined.dm
+++ b/code/modules/hydroponics/grown_predefined.dm
@@ -2,4 +2,7 @@
plantname = "ambrosia"
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus
- plantname = "ambrosiadeus"
\ No newline at end of file
+ plantname = "ambrosiadeus"
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/sifpod
+ plantname = "sifbulb"
diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm
index 4c18c2aac3a..cbdeaca55ce 100644
--- a/code/modules/hydroponics/seed_datums.dm
+++ b/code/modules/hydroponics/seed_datums.dm
@@ -292,6 +292,26 @@
set_trait(TRAIT_PRODUCT_COLOUR,"#FFDD00")
set_trait(TRAIT_PLANT_COLOUR,"#D6B44D")
+/datum/seed/apple/sif
+ name = "sifbulb"
+ seed_name = "sivian tree"
+ display_name = "sivian tree"
+ kitchen_tag = "apple"
+ chems = list("nutriment" = list(1,5),"sifsap" = list(10,20))
+
+/datum/seed/apple/sif/New()
+ ..()
+ set_trait(TRAIT_HARVEST_REPEAT,1)
+ set_trait(TRAIT_MATURATION,3)
+ set_trait(TRAIT_PRODUCTION,10)
+ set_trait(TRAIT_YIELD,3)
+ set_trait(TRAIT_POTENCY,12)
+ set_trait(TRAIT_PRODUCT_ICON,"alien3")
+ set_trait(TRAIT_PRODUCT_COLOUR,"#0720c3")
+ set_trait(TRAIT_PLANT_ICON,"tree5")
+ set_trait(TRAIT_FLESH_COLOUR,"#05157d")
+ set_trait(TRAIT_IDEAL_LIGHT, 1)
+
//Ambrosia/varieties.
/datum/seed/ambrosia
name = "ambrosia"
diff --git a/code/modules/hydroponics/seed_packets.dm b/code/modules/hydroponics/seed_packets.dm
index 6ca62df220d..848b5a10e77 100644
--- a/code/modules/hydroponics/seed_packets.dm
+++ b/code/modules/hydroponics/seed_packets.dm
@@ -334,3 +334,6 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds)
/obj/item/seeds/gnomes
seed_type = "gnomes"
+
+/obj/item/seeds/sifbulb
+ seed_type = "sifbulb"
diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm
index 67fc8162980..01cfd9bc62e 100644
--- a/code/modules/materials/material_sheets.dm
+++ b/code/modules/materials/material_sheets.dm
@@ -386,6 +386,9 @@
strict_color_stacking = TRUE
drop_sound = 'sound/items/drop/clothing.ogg'
+/obj/item/stack/material/cloth/diyaab
+ color = "#c6ccf0"
+
/obj/item/stack/material/resin
name = "resin"
icon_state = "sheet-resin"
diff --git a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm
index b9b11d988d5..822dccaf577 100644
--- a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm
+++ b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm
@@ -41,7 +41,7 @@
new /datum/data/mining_equipment("Fulton Pack", /obj/item/extraction_pack, 1200),
new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/weapon/pickaxe/silver, 1200),
// new /datum/data/mining_equipment("Mining Conscription Kit", /obj/item/storage/backpack/duffelbag/mining_conscript, 1000),
- new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c100, 1000),
+ new /datum/data/mining_equipment("Thalers - 100", /obj/item/weapon/spacecash/c100, 1000),
new /datum/data/mining_equipment("Hardsuit - Control Module", /obj/item/weapon/rig/industrial/vendor, 2000),
new /datum/data/mining_equipment("Hardsuit - Plasma Cutter", /obj/item/rig_module/device/plasmacutter, 800),
new /datum/data/mining_equipment("Hardsuit - Drill", /obj/item/rig_module/device/drill, 5000),
@@ -58,6 +58,7 @@
new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500),
new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500),
new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/device/survivalcapsule/luxury, 3100),
+ new /datum/data/mining_equipment("Bar Shelter Capsule", /obj/item/device/survivalcapsule/luxurybar, 10000),
new /datum/data/mining_equipment("KA White Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer, 125),
new /datum/data/mining_equipment("KA Adjustable Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer/adjustable, 175),
new /datum/data/mining_equipment("KA Super Chassis", /obj/item/borg/upgrade/modkit/chassis_mod, 250),
@@ -82,7 +83,7 @@
new /datum/data/mining_equipment("Fishing Net", /obj/item/weapon/material/fishing_net, 500),
new /datum/data/mining_equipment("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 1000),
new /datum/data/mining_equipment("Durasteel Fishing Rod", /obj/item/weapon/material/fishing_rod/modern/strong, 7500),
- new /datum/data/mining_equipment("Bar Shelter Capsule", /obj/item/device/survivalcapsule/luxurybar, 10000)
+ new /datum/data/mining_equipment("Survival Equipment - Insulated Poncho", /obj/random/thermalponcho, 750)
)
//VOREStation Edit End
diff --git a/code/modules/mining/ore_redemption_machine/survey_vendor.dm b/code/modules/mining/ore_redemption_machine/survey_vendor.dm
index 7003c2b832c..65b7ccc76dd 100644
--- a/code/modules/mining/ore_redemption_machine/survey_vendor.dm
+++ b/code/modules/mining/ore_redemption_machine/survey_vendor.dm
@@ -38,9 +38,10 @@
new /datum/data/mining_equipment("Nanopaste Tube", /obj/item/stack/nanopaste, 100),
new /datum/data/mining_equipment("Mini-Translocator", /obj/item/device/perfect_tele/one_beacon, 120),
new /datum/data/mining_equipment("UAV - Recon Skimmer", /obj/item/device/uav, 400),
- new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c100, 100),
+ new /datum/data/mining_equipment("Thalers - 100", /obj/item/weapon/spacecash/c100, 100),
new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 250),
new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/device/survivalcapsule/luxury, 310),
+ new /datum/data/mining_equipment("Bar Shelter Capsule", /obj/item/device/survivalcapsule/luxurybar, 1000),
new /datum/data/mining_equipment("Industrial Equipment - Phoron Bore",/obj/item/weapon/gun/magnetic/matfed, 300),
new /datum/data/mining_equipment("Survey Tools - Shovel", /obj/item/weapon/shovel, 40),
new /datum/data/mining_equipment("Survey Tools - Mechanical Trap", /obj/item/weapon/beartrap, 50),
@@ -51,7 +52,7 @@
new /datum/data/mining_equipment("Fishing Net", /obj/item/weapon/material/fishing_net, 50),
new /datum/data/mining_equipment("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 100),
new /datum/data/mining_equipment("Durasteel Fishing Rod", /obj/item/weapon/material/fishing_rod/modern/strong, 750),
- new /datum/data/mining_equipment("Bar Shelter Capsule", /obj/item/device/survivalcapsule/luxurybar, 1000)
+ new /datum/data/mining_equipment("Survival Equipment - Insulated Poncho", /obj/random/thermalponcho, 75)
)
//VOREStation Edit End
diff --git a/code/modules/mob/language/station.dm b/code/modules/mob/language/station.dm
index d2ed3a38907..e7afc819f06 100644
--- a/code/modules/mob/language/station.dm
+++ b/code/modules/mob/language/station.dm
@@ -92,7 +92,7 @@
signlang_verb = list("gestures with their hands", "gestures with their ears and tail", "gestures with their ears, tail and hands")
colour = "tajaran"
key = "l"
- flags = WHITELISTED | SIGNLANG | NO_STUTTER | NONVERBAL
+ flags = WHITELISTED | SIGNLANG | NO_STUTTER //nonverbal define was not needed here, and i need to use it ~Layne
/datum/language/tajsign/broadcast(var/mob/living/speaker, var/message, var/speaker_mask)
log_say("(SIGN) [message]", speaker)
@@ -219,6 +219,19 @@
space_chance = 20
syllables = list("z", "dz", "i", "iv", "ti", "az", "hix", "xo", "av", "xo", "x", "za", "at", "vi")
+/datum/language/promethean
+ name = LANGUAGE_PROMETHEAN
+ desc = "A complex language composed of guttural noises and bioluminescent signals"
+ signlang_verb = list("flickers","flashes","rapidly flashes a light","quickly flickers a light")
+ speech_verb = "gurgles"
+ ask_verb = "gurgles"
+ exclaim_verb = "gurgles"
+ colour = "promethean"
+ key = "t"
+ flags = WHITELISTED | NONVERBAL
+ space_chance = 20
+ syllables = list("gur","gul","gug","gel","ger","geg","gir","gil","gig","gor","gol","gog","ug","ul","ur","uu","el","eg","er","oe","ig","il","ir","oi","og","ol","or","oo")
+
//Syllable Lists
/*
diff --git a/code/modules/mob/language/station_vr.dm b/code/modules/mob/language/station_vr.dm
index 1088a5d811d..1e2dac1a8b5 100644
--- a/code/modules/mob/language/station_vr.dm
+++ b/code/modules/mob/language/station_vr.dm
@@ -22,7 +22,7 @@
desc = "The dominant language of the Sergal homeworld, Vilous. It consists of aggressive low-pitched hissing and throaty growling."
speech_verb = "snarls"
colour = "sergal"
- key = "t"
+ key = "T"
syllables = list ("grr", "gah", "woof", "arf", "arra", "rah", "wor", "sarg")
/datum/language/vulpkanin
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index cb745aea2e8..00d28f1113c 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -151,6 +151,11 @@
if (prob(50) && !shielded)
Paralyse(10)
+ var/blastsoak = getsoak(null, "bomb")
+
+ b_loss = max(1, b_loss - blastsoak)
+ f_loss = max(1, f_loss - blastsoak)
+
var/update = 0
// focus most of the blast on one organ
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 34530434f1f..b73bac92e43 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -817,8 +817,8 @@
//Handle normal clothing
for(var/obj/item/clothing/C in list(head,wear_suit,w_uniform,shoes,gloves,wear_mask))
if(C)
- if(C.max_heat_protection_temperature && C.max_heat_protection_temperature >= temperature)
- . |= C.heat_protection
+ if(C.handle_low_temperature(temperature))
+ . |= C.get_heat_protection_flags()
//See proc/get_heat_protection_flags(temperature) for the description of this proc.
/mob/living/carbon/human/proc/get_cold_protection_flags(temperature)
@@ -826,8 +826,8 @@
//Handle normal clothing
for(var/obj/item/clothing/C in list(head,wear_suit,w_uniform,shoes,gloves,wear_mask))
if(C)
- if(C.min_cold_protection_temperature && C.min_cold_protection_temperature <= temperature)
- . |= C.cold_protection
+ if(C.handle_high_temperature(temperature))
+ . |= C.get_cold_protection_flags()
/mob/living/carbon/human/get_heat_protection(temperature) //Temperature is the temperature you're being exposed to.
var/thermal_protection_flags = get_heat_protection_flags(temperature)
diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans.dm b/code/modules/mob/living/carbon/human/species/station/prometheans.dm
index c6f71cad251..fd440fbc525 100644
--- a/code/modules/mob/living/carbon/human/species/station/prometheans.dm
+++ b/code/modules/mob/living/carbon/human/species/station/prometheans.dm
@@ -30,8 +30,8 @@ var/datum/species/shapeshifter/promethean/prometheans
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED
health_hud_intensity = 2
num_alternate_languages = 3
- species_language = LANGUAGE_SOL_COMMON
- secondary_langs = list(LANGUAGE_SOL_COMMON) // For some reason, having this as their species language does not allow it to be chosen.
+ species_language = LANGUAGE_PROMETHEAN
+ secondary_langs = list(LANGUAGE_PROMETHEAN, LANGUAGE_SOL_COMMON) // For some reason, having this as their species language does not allow it to be chosen.
assisted_langs = list(LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) // Prometheans are weird, let's just assume they can use basically any language.
breath_type = null
diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm
index 543acb842f2..f9c68c331f3 100644
--- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm
+++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm
@@ -121,9 +121,7 @@
if(check_alien_ability(50,1,O_RESIN))
visible_message("[src] has planted some alien weeds!")
- var/obj/O = new /obj/effect/alien/weeds/node(loc)
- if(O)
- O.color = "#321D37"
+ new /obj/effect/alien/weeds/node(get_turf(src), "#321D37")
return
/mob/living/carbon/human/proc/Spit(var/atom/A)
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index a67e6085497..51eae7933d8 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -286,8 +286,7 @@ proc/get_radio_key_from_channel(var/channel)
//Handle nonverbal languages here
for(var/datum/multilingual_say_piece/S in message_pieces)
if(S.speaking.flags & NONVERBAL)
- if(prob(30))
- custom_emote(1, "[pick(S.speaking.signlang_verb)].")
+ custom_emote(1, "[pick(S.speaking.signlang_verb)].")
//These will contain the main receivers of the message
var/list/listening = list()
diff --git a/code/modules/mob/living/simple_mob/defense.dm b/code/modules/mob/living/simple_mob/defense.dm
index c09bf272cc2..a8234ac970a 100644
--- a/code/modules/mob/living/simple_mob/defense.dm
+++ b/code/modules/mob/living/simple_mob/defense.dm
@@ -72,6 +72,23 @@
if(istype(O, /obj/item/weapon/material/knife))
harvest(user)
+ if(user.a_intent == I_HELP && harvest_tool && istype(O, harvest_tool) && stat != DEAD)
+ if(world.time > (harvest_recent + harvest_cooldown))
+ livestock_harvest(O, user)
+ return
+ else
+ to_chat(user, "\The [src] can't be [harvest_verb] so soon.")
+ return
+
+ if(can_tame(O, user))
+ to_chat(user, "You offer \the [src] \the [O].")
+ if(tame_prob(O, user))
+ to_chat(user, "\The [src] appears to accept \the [O], seemingly calmed.")
+ do_tame(O,user)
+ else
+ fail_tame(O, user)
+ return
+
return ..()
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm
index 6cd5ea9c5bb..3721168ff9b 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm
@@ -100,6 +100,12 @@
say_list_type = /datum/say_list/spider
+ tame_items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/xenomeat = 10,
+ /obj/item/weapon/reagent_containers/food/snacks/meat/crab = 40,
+ /obj/item/weapon/reagent_containers/food/snacks/meat = 20
+ )
+
var/poison_type = "spidertoxin" // The reagent that gets injected when it attacks.
var/poison_chance = 10 // Chance for injection to occur.
var/poison_per_bite = 5 // Amount added per injection.
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/phorogenic.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/phorogenic.dm
index 39e2edcb7d5..94bb77ee71c 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/phorogenic.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/phorogenic.dm
@@ -45,6 +45,11 @@
poison_per_bite = 0.5
poison_type = "phoron"
+ tame_items = list(
+ /obj/item/weapon/tank/phoron = 20,
+ /obj/item/stack/material/phoron = 30
+ )
+
var/exploded = FALSE
var/explosion_dev_range = 1
var/explosion_heavy_range = 2
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm
index 06d4eb4caaa..87c05b317d7 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm
@@ -47,7 +47,7 @@
/mob/living/simple_mob/animal/passive/crab/sif/Initialize()
..()
- adjust_scale(rand(5,15) / 10)
+ adjust_scale(rand(5,12) / 10)
// Meat!
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm
index 790681a3fc0..198f99a3f4a 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm
@@ -166,11 +166,15 @@
/mob/living/simple_mob/animal/passive/fish/icebass/update_icon()
overlays.Cut()
..()
+
if(!dorsal_image)
dorsal_image = image(icon, "[icon_state]_mask-body")
if(!belly_image)
belly_image = image(icon, "[icon_state]_mask-belly")
+ dorsal_image.icon_state = "[icon_state]_mask-body"
+ belly_image.icon_state = "[icon_state]_mask-belly"
+
dorsal_image.color = dorsal_color
belly_image.color = belly_color
@@ -237,6 +241,8 @@
if(!head_image)
head_image = image(icon, "[icon_state]_mask")
+ head_image.icon_state = "[icon_state]_mask"
+
head_image.color = head_color
overlays += head_image
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/diyaab.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/diyaab.dm
index 0845eacc71c..f934ab1ec86 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/diyaab.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/diyaab.dm
@@ -40,6 +40,23 @@
say_list_type = /datum/say_list/diyaab
ai_holder_type = /datum/ai_holder/simple_mob/retaliate/cooperative
+ // What do you hit the mob with (on help) to get something from it?
+ harvest_tool = /obj/item/weapon/tool/wirecutters
+ // How long do we have to wait until it's harvestable again?
+ harvest_cooldown = 10 MINUTES
+ // How long does it take to harvest?
+ harvest_delay = 30 SECONDS
+ // What world.time was the last harvest?
+ harvest_recent = 0
+ // How many times do we roll on the chance table?
+ harvest_per_hit = 1
+ // Verb for harvesting. "sheared" "clipped" etc.
+ harvest_verb = "sheared"
+ // Associative list of paths and their chances. path = straws in the lot
+ harvest_results = list(
+ /obj/item/stack/material/cloth/diyaab = 10
+ )
+
/datum/say_list/diyaab
speak = list("Awrr?", "Aowrl!", "Worrl.")
emote_see = list("sniffs the air cautiously","looks around")
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/duck.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/duck.dm
index 0aa74f9e6b7..10f7ddc2cf9 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/duck.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/duck.dm
@@ -10,7 +10,7 @@
Family units have been observed to form gangs and scavenge from Sivian domeciles and \
various food transports during stressful months. \
It is advised to seal and hide any form of food near even lone individuals, as they will become \
- increasingly aggressive."
+ increasingly aggressive in order to acquire it."
value = CATALOGUER_REWARD_EASY
/mob/living/simple_mob/animal/sif/duck
@@ -38,6 +38,11 @@
attack_edge = 1 // Razor-edged wings, and 'claws' made for digging through ice.
attacktext = list("nipped", "bit", "cut", "clawed")
+ tame_items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/sliceable/bread = 90,
+ /obj/item/weapon/reagent_containers/food/snacks/slice/bread = 25
+ )
+
say_list_type = /datum/say_list/duck
ai_holder_type = /datum/ai_holder/simple_mob/retaliate/cooperative
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/glitterfly.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/glitterfly.dm
index ae1abb363f8..3687a67c510 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/glitterfly.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/glitterfly.dm
@@ -52,6 +52,12 @@
attacktext = list("bit", "buffeted", "slashed")
+ tame_items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/grown = 90,
+ /obj/item/weapon/reagent_containers/food/snacks/meat/crab = 10,
+ /obj/item/weapon/reagent_containers/food/snacks/meat = 5
+ )
+
say_list_type = /datum/say_list/glitterfly
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive/glitterfly
@@ -81,6 +87,17 @@
/mob/living/simple_mob/animal/sif/glitterfly/rare/Initialize()
..()
+/mob/living/simple_mob/animal/sif/glitterfly/unique_tame_check(var/obj/O, var/mob/user)
+ . = ..()
+
+ if(.)
+ if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown))
+ var/obj/item/weapon/reagent_containers/food/snacks/grown/G = O
+
+ if(G.seed && G.seed.kitchen_tag == "berries")
+ return TRUE
+ return FALSE
+
/datum/say_list/glitterfly
speak = list("Pi..","Po...", "Pa...")
emote_see = list("vibrates","flutters", "twirls")
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/kururak.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/kururak.dm
index 22c2d020829..37ac83614e7 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/kururak.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/kururak.dm
@@ -28,7 +28,7 @@
icon_state = "bigcat"
icon_living = "bigcat"
icon_dead = "bigcat_dead"
- icon_rest = "bigcat_rest"
+ icon_rest = "bigcat_sleep"
icon = 'icons/mob/64x64.dmi'
default_pixel_x = -16
@@ -122,7 +122,7 @@
/mob/living/simple_mob/animal/sif/kururak/apply_melee_effects(atom/A) // Only gains instinct.
instinct += rand(1, 2)
- return
+ return ..()
/mob/living/simple_mob/animal/sif/kururak/should_special_attack(atom/A)
return has_modifier_of_type(/datum/modifier/ace)
@@ -136,6 +136,8 @@
set_AI_busy(TRUE)
rending_strike(A)
set_AI_busy(FALSE)
+ a_intent = I_HURT
+ return ..()
/mob/living/simple_mob/animal/sif/kururak/verb/do_flash()
set category = "Abilities"
@@ -329,6 +331,15 @@
else
remove_modifiers_of_type(/datum/modifier/ace)
+/mob/living/simple_mob/animal/sif/kururak/hibernate/Initialize()
+ ..()
+ lay_down()
+ instinct = 0
+
+/*
+ * Kururak AI
+ */
+
/datum/ai_holder/simple_mob/intentional/kururak
hostile = FALSE
retaliate = TRUE
@@ -359,6 +370,8 @@
else
hostile = initial(hostile)
+ return ..()
+
/datum/ai_holder/simple_mob/intentional/kururak/pre_special_attack(atom/A)
holder.a_intent = I_HURT
if(isliving(A))
@@ -378,9 +391,12 @@
else if(istype(A, /obj/mecha))
holder.a_intent = I_GRAB
+ return ..()
+
/datum/ai_holder/simple_mob/intentional/kururak/post_melee_attack()
if(holder.has_modifier_of_type(/datum/modifier/ace))
request_help()
+ return ..()
// Kururak Ace modifier, given to the one with the highest Instinct.
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm
index 2019859f3fc..f948da609f3 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm
@@ -187,6 +187,7 @@
desc = "What appears to be an oversized rodent with hands. This one has a curious look in its eyes."
ai_holder_type = /datum/ai_holder/simple_mob/intentional/sakimm
randomize_size = FALSE // Most likely to have a hat.
+ melee_attack_delay = 0 // For some reason, having a delay makes item pick-up not work.
/datum/ai_holder/simple_mob/intentional/sakimm
hostile = FALSE
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm
index abc8811372f..2dcb5b8b518 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm
@@ -44,6 +44,12 @@
player_msg = "You have the ability to berserk at will, which will grant strong physical bonuses for \
a short period of time, however it will tire you and you will be much weaker for awhile after it expires."
+ tame_items = list(
+ /obj/item/organ = 70,
+ /obj/item/weapon/reagent_containers/food/snacks/meat/crab = 30,
+ /obj/item/weapon/reagent_containers/food/snacks/meat = 20
+ )
+
say_list_type = /datum/say_list/savik
ai_holder_type = /datum/ai_holder/simple_mob/savik
@@ -57,6 +63,12 @@
if(health <= (maxHealth * 0.5)) // At half health, and fighting someone currently.
berserk()
+/mob/living/simple_mob/animal/sif/savik/fail_tame(var/obj/O, var/mob/user)
+ ..()
+
+ if(prob(30)) // They don't like people messing with them and their food.
+ berserk()
+
/datum/ai_holder/simple_mob/savik
mauling = TRUE
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm
index a6948a3e00b..64aa7fbadc6 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm
@@ -93,14 +93,16 @@
rally_pack()
return ..()
-
-// These ones only retaliate. Used for a PoI.
+// These ones only retaliate. Used for PoIs.
/mob/living/simple_mob/animal/sif/shantak/retaliate
ai_holder_type = /datum/ai_holder/simple_mob/retaliate
+/mob/living/simple_mob/animal/sif/shantak/leader/autofollow/retaliate
+ ai_holder_type = /datum/ai_holder/simple_mob/retaliate
+
//Vorestation Addition
/mob/living/simple_mob/animal/sif/shantak/scruffy
name = "Scruffy"
ai_holder_type = /datum/ai_holder/simple_mob/passive
makes_dirt = 0
- faction = "neutral"
\ No newline at end of file
+ faction = "neutral"
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/sif.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/sif.dm
index 8d19324cf25..dab82b850b9 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/sif.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/sif.dm
@@ -2,4 +2,9 @@
/mob/living/simple_mob/animal/sif
minbodytemp = 175
cold_resist = 0.75
- heat_resist = -0.5
\ No newline at end of file
+ heat_resist = -0.5
+
+ tame_items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/meat/crab = 20,
+ /obj/item/weapon/reagent_containers/food/snacks/meat = 10
+ )
diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm
index 3973a17add2..5bdddb9542e 100644
--- a/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm
@@ -89,6 +89,11 @@
firing_lanes = TRUE // But not your buddies!
conserve_ammo = TRUE // And don't go wasting bullets!
+/datum/ai_holder/simple_mob/merc/ranged/sniper
+ vision_range = 14 // We're a person with a long-ranged gun.
+
+/datum/ai_holder/simple_mob/merc/ranged/sniper/max_range(atom/movable/AM)
+ return holder.ICheckRangedAttack(AM) ? 14 : 1
////////////////////////////////
// Melee
@@ -174,6 +179,27 @@
base_attack_cooldown = 5 // Two attacks a second or so.
reload_max = 20
+// Rifles
+/mob/living/simple_mob/humanoid/merc/ranged/rifle
+ icon_state = "syndicateranged_rifle"
+ icon_living = "syndicateranged_rifle"
+
+ loot_list = list(/obj/item/weapon/gun/projectile/automatic/z8 = 100)
+
+ projectilesound = 'sound/weapons/Gunshot_heavy.ogg'
+ projectiletype = /obj/item/projectile/bullet/rifle/a762
+ projectile_dispersion = 8
+ projectile_accuracy = -15
+ base_attack_cooldown = 5
+ reload_max = 30
+
+/mob/living/simple_mob/humanoid/merc/ranged/rifle/mag
+ loot_list = list(/obj/item/weapon/gun/magnetic/railgun/flechette = 100)
+ projectiletype = /obj/item/projectile/bullet/magnetic/flechette
+
+ projectilesound = 'sound/weapons/rapidslice.ogg'
+ reload_max = 10
+
// Laser Rifle
/mob/living/simple_mob/humanoid/merc/ranged/laser
icon_state = "syndicateranged_laser"
@@ -214,6 +240,89 @@
projectile_accuracy = -40
special_attack_charges = 5
+// Technician, also kind of a miniboss. Carries a dartgun and manhack launcher.
+/mob/living/simple_mob/humanoid/merc/ranged/technician
+ icon_state = "syndicateranged_technician"
+ icon_living = "syndicateranged_technician"
+ projectiletype = /obj/item/projectile/fake_syringe/poison // Toxin dart.
+ projectilesound = 'sound/weapons/Gunshot_old.ogg'
+
+ loot_list = list(/obj/item/weapon/gun/projectile/dartgun = 100,
+ /obj/item/weapon/gun/launcher/grenade = 100,
+ /obj/item/weapon/grenade/spawnergrenade/manhacks/mercenary = 50,
+ /obj/item/weapon/grenade/spawnergrenade/manhacks/mercenary = 30
+ )
+
+ reload_max = 5
+ reload_time = 1 SECOND
+
+ // Manhacks.
+ grenade_type = /obj/item/weapon/grenade/spawnergrenade/manhacks/mercenary
+
+ projectile_dispersion = 8
+ projectile_accuracy = -40
+ special_attack_charges = 5
+
+// Sniper, definitely a miniboss, based on its massive range advantage, and method of battle.
+// Creates a beam for 2 seconds, fire after another .5, then a 5 second reload.
+/mob/living/simple_mob/humanoid/merc/ranged/sniper
+ icon_state = "syndicateranged_sniper"
+ icon_living = "syndicateranged_sniper"
+ projectiletype = /obj/item/projectile/bullet/rifle/a145/highvel // Really scary bullet.
+ projectilesound = 'sound/weapons/Gunshot_cannon.ogg'
+
+ projectile_accuracy = 75
+
+ reload_max = 1
+ reload_time = 5 SECONDS
+
+ ai_holder_type = /datum/ai_holder/simple_mob/merc/ranged/sniper
+
+ ranged_attack_delay = 2.5 SECONDS
+
+ loot_list = list(/obj/item/sniper_rifle_part/barrel = 50,
+ /obj/item/sniper_rifle_part/stock = 50,
+ /obj/item/sniper_rifle_part/trigger_group = 50,
+ /obj/item/weapon/grenade/spawnergrenade/manhacks/mercenary = 90
+ )
+
+ // Babyfrags.
+ grenade_type = /obj/item/weapon/grenade/explosive/mini
+ // Babyfrags go a long way.
+ special_attack_min_range = 6
+ special_attack_max_range = 10
+
+/mob/living/simple_mob/humanoid/merc/ranged/sniper/ranged_pre_animation(atom/A)
+ Beam(get_turf(A), icon_state = "sniper_beam", time = 2 SECONDS, maxdistance = 15)
+ . = ..()
+
+/mob/living/simple_mob/humanoid/merc/ranged/sniper/shoot_target(atom/A)
+ set waitfor = FALSE
+ setClickCooldown(get_attack_speed())
+
+ face_atom(A)
+
+ var/atom/orig_targ = A
+
+ if(ranged_attack_delay)
+ A = get_turf(orig_targ)
+ ranged_pre_animation(A)
+ handle_attack_delay(A, ranged_attack_delay) // This will sleep this proc for a bit, which is why waitfor is false.
+
+ if(needs_reload)
+ if(reload_count >= reload_max)
+ try_reload()
+ return FALSE
+
+ visible_message("\The [src] fires at \the [orig_targ]!")
+ shoot(A)
+ if(casingtype)
+ new casingtype(loc)
+
+ if(ranged_attack_delay)
+ ranged_post_animation(A)
+
+ return TRUE
////////////////////////////////
// Space Mercs
@@ -274,24 +383,39 @@
// PoI Mercs
////////////////////////////////
-// None of these drop weapons, until we have a better way to balance them
+// Most likely to drop a broken weapon matching them, if it's a gun.
/mob/living/simple_mob/humanoid/merc/melee/poi
- loot_list = list()
+ loot_list = list(/obj/item/weapon/material/knife/tacknife/combatknife = 100)
/mob/living/simple_mob/humanoid/merc/melee/sword/poi
- loot_list = list()
+ loot_list = list(/obj/item/weapon/melee/energy/sword/color = 20,
+ /obj/item/weapon/shield/energy = 40
+ )
/mob/living/simple_mob/humanoid/merc/ranged/poi
- loot_list = list()
+ loot_list = list(/obj/random/projectile/scrapped_pistol = 100)
/mob/living/simple_mob/humanoid/merc/ranged/smg/poi
- loot_list = list()
+ loot_list = list(/obj/random/projectile/scrapped_smg = 100)
/mob/living/simple_mob/humanoid/merc/ranged/laser/poi
- loot_list = list()
+ loot_list = list(/obj/random/projectile/scrapped_laser = 100)
-/mob/living/simple_mob/humanoid/merc/ranged/ionrifle
- loot_list = list()
+/mob/living/simple_mob/humanoid/merc/ranged/ionrifle/poi
+ loot_list = list(/obj/random/projectile/scrapped_ionrifle = 100)
/mob/living/simple_mob/humanoid/merc/ranged/grenadier/poi
- loot_list = list()
\ No newline at end of file
+ loot_list = list(/obj/random/projectile/scrapped_shotgun = 100)
+
+/mob/living/simple_mob/humanoid/merc/ranged/rifle/poi
+ loot_list = list(/obj/random/projectile/scrapped_bulldog = 100)
+
+/mob/living/simple_mob/humanoid/merc/ranged/rifle/mag/poi
+ loot_list = list(/obj/random/projectile/scrapped_flechette = 100)
+
+/mob/living/simple_mob/humanoid/merc/ranged/technician/poi
+ loot_list = list(/obj/random/projectile/scrapped_dartgun = 100,
+ /obj/random/projectile/scrapped_grenadelauncher = 100,
+ /obj/item/weapon/grenade/spawnergrenade/manhacks/mercenary = 50,
+ /obj/item/weapon/grenade/spawnergrenade/manhacks/mercenary = 30
+ )
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/combat_drone.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/combat_drone.dm
similarity index 100%
rename from code/modules/mob/living/simple_mob/subtypes/mechanical/combat_drone.dm
rename to code/modules/mob/living/simple_mob/subtypes/mechanical/drones/combat_drone.dm
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm
new file mode 100644
index 00000000000..5c6660e67c5
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm
@@ -0,0 +1,126 @@
+/*
+ Mining drones have a slow-firing, armor-piercing beam that can destroy rocks.
+ They will, if "tamed", collect ore and deposit it into nearby oreboxes when adjacent.
+*/
+
+/datum/category_item/catalogue/technology/drone/mining_drone
+ name = "Drone - Mining Drone"
+ desc = "A crude modification of the commonly seen combat drone model, usually created\
+ from the salvaged husks that litter debris fields. Capable of crude problem solving,\
+ the drone's targeting system has been repurposed for locating suitable ores, though even\
+ that is only functional in certain conditions.\
+
\
+ These drones are armed with high-power mining emitters, which makes their decrepit forms\
+ just as lethal as they were in their prime. Modified thrust vectoring devices allow them\
+ to gather ore effectively without expending mechanical energy."
+ value = CATALOGUER_REWARD_MEDIUM
+
+/mob/living/simple_mob/mechanical/mining_drone
+ name = "mining drone"
+ desc = "An automated drone with a worn-out appearance, but an ominous gaze."
+ catalogue_data = list(/datum/category_item/catalogue/technology/drone/mining_drone)
+
+ icon_state = "miningdrone"
+ icon_living = "miningdrone"
+ icon_dead = "miningdrone_dead"
+ has_eye_glow = TRUE
+
+ faction = "malf_drone"
+
+ maxHealth = 50
+ health = 50
+ movement_cooldown = 5
+ hovering = TRUE
+
+ base_attack_cooldown = 5
+ projectiletype = /obj/item/projectile/energy/excavate
+ projectilesound = 'sound/weapons/pulse3.ogg'
+
+ response_help = "pokes"
+ response_disarm = "gently pushes aside"
+ response_harm = "hits"
+
+ ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening
+ say_list_type = /datum/say_list/malf_drone
+
+ tame_items = list(
+ /obj/item/weapon/ore/verdantium = 90,
+ /obj/item/weapon/ore/hydrogen = 90,
+ /obj/item/weapon/ore/osmium = 70,
+ /obj/item/weapon/ore/diamond = 70,
+ /obj/item/weapon/ore/gold = 55,
+ /obj/item/weapon/ore/silver = 55,
+ /obj/item/weapon/ore/lead = 40,
+ /obj/item/weapon/ore/marble = 30,
+ /obj/item/weapon/ore/coal = 25,
+ /obj/item/weapon/ore/iron = 25,
+ /obj/item/weapon/ore/glass = 15,
+ /obj/item/weapon/ore = 5
+ )
+
+ var/datum/effect/effect/system/ion_trail_follow/ion_trail = null
+ var/obj/item/shield_projector/shields = null
+ var/obj/item/weapon/storage/bag/ore/my_storage = null
+
+ var/last_search = 0
+ var/search_cooldown = 5 SECONDS
+
+/mob/living/simple_mob/mechanical/mining_drone/Initialize()
+ ion_trail = new
+ ion_trail.set_up(src)
+ ion_trail.start()
+
+ my_storage = new /obj/item/weapon/storage/bag/ore(src)
+ shields = new /obj/item/shield_projector/rectangle/automatic/drone(src)
+ return ..()
+
+/mob/living/simple_mob/mechanical/mining_drone/Destroy()
+ QDEL_NULL(ion_trail)
+ QDEL_NULL(shields)
+ QDEL_NULL(my_storage)
+ return ..()
+
+/mob/living/simple_mob/mechanical/mining_drone/death()
+ my_storage.forceMove(get_turf(src))
+ my_storage = null
+ ..(null,"suddenly breaks apart.")
+ qdel(src)
+
+/mob/living/simple_mob/mechanical/mining_drone/Process_Spacemove(var/check_drift = 0)
+ return TRUE
+
+/mob/living/simple_mob/mechanical/mining_drone/IIsAlly(mob/living/L)
+ . = ..()
+
+ var/mob/living/carbon/human/H = L
+ if(!istype(H))
+ return .
+
+ if(!.)
+ var/has_tool = FALSE
+ var/obj/item/I = H.get_active_hand()
+ if(istype(I,/obj/item/weapon/pickaxe))
+ has_tool = TRUE
+ return has_tool
+
+/mob/living/simple_mob/mechanical/mining_drone/handle_special()
+ if(my_storage && (get_AI_stance() in list(STANCE_APPROACH, STANCE_IDLE, STANCE_FOLLOW)) && !is_AI_busy() && isturf(loc) && (world.time > last_search + search_cooldown) && (my_storage.contents.len < my_storage.max_storage_space))
+ last_search = world.time
+
+ for(var/turf/T in view(world.view,src))
+ if(my_storage.contents.len >= my_storage.max_storage_space)
+ break
+
+ if((locate(/obj/item/weapon/ore) in T) && prob(40))
+ src.Beam(T, icon_state = "holo_beam", time = 0.5 SECONDS)
+ my_storage.rangedload(T, src)
+
+ if(my_storage.contents.len >= my_storage.max_storage_space)
+ visible_message("\The [src] emits a shrill beep, indicating its storage is full.")
+
+ var/obj/structure/ore_box/OB = locate() in view(2, src)
+
+ if(istype(OB) && my_storage && my_storage.contents.len)
+ src.Beam(OB, icon_state = "rped_upgrade", time = 1 SECONDS)
+ for(var/obj/item/I in my_storage)
+ my_storage.remove_from_storage(I, OB)
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm
index f5baafcc24e..df0984878ed 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm
@@ -67,4 +67,12 @@
// Variant that starts in defense mode, perhaps for PoIs.
/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/Initialize()
set_defense_mode(TRUE)
- return ..()
+ return ..()
+
+/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/mercenary
+ desc = "An aging combat exosuit utilized by many corporations. It was originally developed to fight in the First Contact War.\
+ This one has been retrofitted into a turret."
+
+ projectiletype = /obj/item/projectile/beam/heavylaser/fakeemitter
+
+ pilot_type = /mob/living/simple_mob/humanoid/merc/ranged
diff --git a/code/modules/mob/living/simple_mob/taming.dm b/code/modules/mob/living/simple_mob/taming.dm
new file mode 100644
index 00000000000..e24b675c5be
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/taming.dm
@@ -0,0 +1,62 @@
+
+/mob/living/simple_mob
+ // Assoc list of items that can be given to a mob to befriend it, and the percent success.
+ var/list/tame_items
+ // List of mobs who are 'friends'.
+ var/list/tamers
+
+/mob/living/simple_mob/IIsAlly(mob/living/L)
+ . = ..()
+
+ if(!. && LAZYLEN(tamers))
+ listclearnulls(tamers)
+ if(L in tamers)
+ return TRUE
+
+/mob/living/simple_mob/proc/can_tame(var/obj/O, var/mob/user)
+ if(!LAZYLEN(tame_items))
+ return FALSE
+
+ if(!user)
+ return FALSE
+
+ if(!O)
+ return FALSE
+
+ for(var/path in tame_items)
+ if(istype(O, path) && unique_tame_check(O,user))
+ return TRUE
+
+ return FALSE
+
+/mob/living/simple_mob/proc/unique_tame_check(var/obj/O, var/mob/user)
+ if(do_after(user, 0.5 SECONDS, src))
+ return TRUE
+ return FALSE
+
+/mob/living/simple_mob/proc/tame_prob(var/obj/O, var/mob/user)
+ for(var/path in tame_items)
+ if(istype(O, path))
+ if(prob(tame_items[path]))
+ return TRUE
+ return FALSE
+
+/mob/living/simple_mob/proc/do_tame(var/obj/O, var/mob/user)
+ if(!user)
+ return
+
+ if(!LAZYLEN(tamers))
+ tamers = list()
+
+ handle_tame_item(O, user)
+
+ tamers |= user
+ ai_holder.forget_everything()
+
+/mob/living/simple_mob/proc/handle_tame_item(var/obj/O, var/mob/user)
+ user.drop_from_inventory(O)
+ qdel(O)
+
+/mob/living/simple_mob/proc/fail_tame(var/obj/O, var/mob/user)
+ user.drop_from_inventory(O)
+ qdel(O)
diff --git a/code/modules/projectiles/ammunition/rounds.dm b/code/modules/projectiles/ammunition/rounds.dm
index b187f325bdf..1dd8f6e149a 100644
--- a/code/modules/projectiles/ammunition/rounds.dm
+++ b/code/modules/projectiles/ammunition/rounds.dm
@@ -287,6 +287,14 @@
projectile_type = /obj/item/projectile/bullet/rifle/a145
matter = list(DEFAULT_WALL_MATERIAL = 1250)
+/obj/item/ammo_casing/a145/highvel
+ desc = "A 14.5mm sabot shell."
+ projectile_type = /obj/item/projectile/bullet/rifle/a145
+
+/obj/item/ammo_casing/a145/spent/Initialize()
+ ..()
+ expend()
+
/*
* 5.45mm
*/
diff --git a/code/modules/projectiles/broken.dm b/code/modules/projectiles/broken.dm
new file mode 100644
index 00000000000..99b6ffbfd10
--- /dev/null
+++ b/code/modules/projectiles/broken.dm
@@ -0,0 +1,134 @@
+
+/obj/item/weapon/broken_gun
+ desc = "The remains of an unfortunate firearm."
+
+ var/obj/item/weapon/gun/my_guntype = null
+
+ // Materials needed for repair. Associative list, path - number of items
+ var/list/material_needs
+
+ var/do_rotation = TRUE
+
+/obj/item/weapon/broken_gun/New(var/newloc, var/path)
+ ..()
+ if(path)
+ if(!setup_gun(path))
+ qdel(src)
+ return
+ setup_repair_needs()
+
+/obj/item/weapon/broken_gun/Initialize()
+ ..()
+ spawn(30 SECONDS)
+ if(!my_guntype && !QDELETED(src))
+ qdel(src)
+
+/obj/item/weapon/broken_gun/examine(mob/user)
+ ..()
+ if(get_dist(get_turf(user),get_turf(src)) <= 1)
+ to_chat(user, "You begin inspecting \the [src].")
+
+ if(do_after(user, 5 SECONDS))
+ to_chat(user, "\The [src] can possibly be restored with:")
+ for(var/resource in material_needs)
+ if(material_needs[resource] > 0)
+ to_chat(user, "- \icon [resource] x [material_needs[resource]] [resource]")
+
+/obj/item/weapon/broken_gun/proc/setup_gun(var/obj/item/weapon/gun/path)
+ if(ispath(path))
+ name = "[pick("busted", "broken", "shattered", "scrapped")] [initial(path.name)]"
+ icon = initial(path.icon)
+ icon_state = initial(path.icon_state)
+
+ my_guntype = path
+
+ w_class = initial(path.w_class)
+
+ if(do_rotation)
+ adjust_rotation(rand() * pick(-1,1) * rand(0, 45))
+
+ return TRUE
+
+ return FALSE
+
+/obj/item/weapon/broken_gun/proc/setup_repair_needs()
+ if(!LAZYLEN(material_needs))
+ material_needs = list()
+
+ if(prob(40))
+ var/chosen_mat = pick(/obj/item/stack/material/plastic, /obj/item/stack/material/plasteel, /obj/item/stack/material/glass)
+ material_needs[chosen_mat] = rand(1, 3)
+
+ if(prob(30))
+ var/component_needed = pick(/obj/item/weapon/stock_parts/gear,/obj/item/weapon/stock_parts/spring,/obj/item/weapon/stock_parts/manipulator)
+ material_needs[component_needed] = rand(1,3)
+
+ if(ispath(my_guntype, /obj/item/weapon/gun/energy) && prob(25))
+ var/component_needed = pick(/obj/item/stack/cable_coil, /obj/item/weapon/stock_parts/scanning_module,/obj/item/weapon/stock_parts/capacitor)
+ material_needs[component_needed] = rand(1,3)
+
+ if(ispath(my_guntype, /obj/item/weapon/gun/launcher) && prob(50))
+ var/component_needed = pick(/obj/item/weapon/tape_roll, /obj/item/weapon/material/wirerod)
+ material_needs[component_needed] = 1
+
+ if(ispath(my_guntype, /obj/item/weapon/gun/magnetic) && prob(70))
+ var/component_needed = pick(/obj/item/weapon/smes_coil, /obj/item/device/assembly/prox_sensor, /obj/item/weapon/module/power_control)
+ material_needs[component_needed] = 1
+
+ material_needs[/obj/item/stack/material/steel] = rand(1,5)
+
+/obj/item/weapon/broken_gun/attackby(obj/item/W as obj, mob/user as mob)
+ if(can_repair_with(W, user))
+ if(do_after(user, (rand() * 10 SECONDS) + 5 SECONDS))
+ repair_with(W, user)
+ return
+
+ ..()
+
+/obj/item/weapon/broken_gun/proc/can_repair_with(obj/item/I, mob/user)
+ for(var/path in material_needs)
+ if(ispath(path) && istype(I, path))
+ if(material_needs[path] > 0)
+ if(istype(I, /obj/item/stack))
+ var/obj/item/stack/S = I
+ if(S.can_use(material_needs[path]))
+ return TRUE
+ else
+ to_chat(user, "You do not have enough [path] to continue repairs.")
+ else
+ return TRUE
+
+ return FALSE
+
+/obj/item/weapon/broken_gun/proc/repair_with(obj/item/I, mob/user)
+ for(var/path in material_needs)
+ if(ispath(path) && istype(I, path))
+ if(material_needs[path] > 0)
+ if(istype(I, /obj/item/stack))
+ var/obj/item/stack/S = I
+ if(S.can_use(material_needs[path]))
+ S.use(material_needs[path])
+ material_needs[path] = 0
+ to_chat(user, "You repair some damage on \the [src] with \the [S].")
+ else
+ material_needs[path] = max(0, material_needs[path] - 1)
+ user.drop_from_inventory(I)
+ to_chat(user, "You repair some damage on \the [src] with \the [I].")
+ qdel(I)
+
+ check_complete_repair(user)
+
+ return
+
+/obj/item/weapon/broken_gun/proc/check_complete_repair(mob/user)
+ var/fully_repaired = TRUE
+ for(var/resource in material_needs)
+ if(material_needs[resource] > 0)
+ fully_repaired = FALSE
+ break
+
+ if(fully_repaired)
+ my_guntype = new my_guntype(get_turf(src))
+ my_guntype.name = "[pick("salvaged", "repaired", "old")] [initial(my_guntype.name)]"
+ to_chat(user, "You finish your repairs on \the [my_guntype].")
+ qdel(src)
diff --git a/code/modules/projectiles/brokenguns/energy.dm b/code/modules/projectiles/brokenguns/energy.dm
new file mode 100644
index 00000000000..6427e89c274
--- /dev/null
+++ b/code/modules/projectiles/brokenguns/energy.dm
@@ -0,0 +1,9 @@
+
+/obj/item/weapon/broken_gun/laserrifle/New(var/newloc)
+ ..(newloc, /obj/item/weapon/gun/energy/laser/empty)
+
+/obj/item/weapon/broken_gun/laser_retro/New(var/newloc)
+ ..(newloc, /obj/item/weapon/gun/energy/retro/empty)
+
+/obj/item/weapon/broken_gun/ionrifle/New(var/newloc)
+ ..(newloc, /obj/item/weapon/gun/energy/ionrifle/empty)
diff --git a/code/modules/projectiles/brokenguns/launcher.dm b/code/modules/projectiles/brokenguns/launcher.dm
new file mode 100644
index 00000000000..a66449de78d
--- /dev/null
+++ b/code/modules/projectiles/brokenguns/launcher.dm
@@ -0,0 +1,3 @@
+
+/obj/item/weapon/broken_gun/grenadelauncher/New(var/newloc)
+ ..(newloc, /obj/item/weapon/gun/launcher/grenade)
diff --git a/code/modules/projectiles/brokenguns/magnetic.dm b/code/modules/projectiles/brokenguns/magnetic.dm
new file mode 100644
index 00000000000..dd1c647fd8e
--- /dev/null
+++ b/code/modules/projectiles/brokenguns/magnetic.dm
@@ -0,0 +1,3 @@
+
+/obj/item/weapon/broken_gun/flechette/New(var/newloc)
+ ..(newloc, /obj/item/weapon/gun/magnetic/railgun/flechette)
diff --git a/code/modules/projectiles/brokenguns/projectile.dm b/code/modules/projectiles/brokenguns/projectile.dm
new file mode 100644
index 00000000000..741e4bf087d
--- /dev/null
+++ b/code/modules/projectiles/brokenguns/projectile.dm
@@ -0,0 +1,18 @@
+
+/obj/item/weapon/broken_gun/c20r/New(var/newloc)
+ ..(newloc, /obj/item/weapon/gun/projectile/automatic/c20r/empty)
+
+/obj/item/weapon/broken_gun/silenced45/New(var/newloc)
+ ..(newloc, /obj/item/weapon/gun/projectile/silenced/empty)
+
+/obj/item/weapon/broken_gun/pumpshotgun/New(var/newloc)
+ ..(newloc, /obj/item/weapon/gun/projectile/shotgun/pump/empty)
+
+/obj/item/weapon/broken_gun/pumpshotgun_combat/New(var/newloc)
+ ..(newloc, /obj/item/weapon/gun/projectile/shotgun/pump/combat/empty)
+
+/obj/item/weapon/broken_gun/z8/New(var/newloc)
+ ..(newloc, /obj/item/weapon/gun/projectile/automatic/z8/empty)
+
+/obj/item/weapon/broken_gun/dartgun/New(var/newloc)
+ ..(newloc, /obj/item/weapon/gun/projectile/dartgun)
diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm
index 45c6364c1b3..778b36694dc 100644
--- a/code/modules/projectiles/guns/energy/laser.dm
+++ b/code/modules/projectiles/guns/energy/laser.dm
@@ -19,6 +19,9 @@
list(mode_name="suppressive", fire_delay=5, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 60),
)
+/obj/item/weapon/gun/energy/laser/empty
+ cell_type = null
+
/obj/item/weapon/gun/energy/laser/mounted
self_recharge = 1
use_external_power = 1
@@ -175,7 +178,7 @@
force = 10
w_class = ITEMSIZE_HUGE // So it can't fit in a backpack.
accuracy = -45 //shooting at the hip
- scoped_accuracy = 0
+ scoped_accuracy = 50
one_handed_penalty = 60 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand.
/obj/item/weapon/gun/energy/sniperrifle/ui_action_click()
@@ -192,7 +195,8 @@
name = "antique mono-rifle"
desc = "An old laser rifle. This one can only fire once before requiring recharging."
description_fluff = "Modeled after ancient hunting rifles, this rifle was dubbed the 'Rainy Day Special' by some, due to its use as some barmens' fight-stopper of choice. One shot is all it takes, or so they say."
- icon_state = "eshotgun"
+ icon = 'icons/obj/energygun.dmi'
+ icon_state = "mono"
item_state = "shotgun"
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 4, TECH_POWER = 3)
projectile_type = /obj/item/projectile/beam/sniper
@@ -204,6 +208,7 @@
w_class = ITEMSIZE_LARGE
accuracy = 10
scoped_accuracy = 15
+ charge_meter = FALSE
var/scope_multiplier = 1.5
/obj/item/weapon/gun/energy/monorifle/ui_action_click()
@@ -220,7 +225,7 @@
name = "combat mono-rifle"
desc = "A modernized version of the mono-rifle. This one can fire twice before requiring recharging."
description_fluff = "A modern design produced by a company once working from Saint Columbia, based on the antique mono-rifle 'Rainy Day Special' design."
- icon_state = "ecshotgun"
+ icon_state = "cmono"
item_state = "cshotgun"
charge_cost = 1000
force = 12
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 3fe7a4f21c3..f47053cba00 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -13,6 +13,9 @@
/obj/item/weapon/gun/energy/ionrifle/emp_act(severity)
..(max(severity, 4)) //so it doesn't EMP itself, I guess
+/obj/item/weapon/gun/energy/ionrifle/empty
+ cell_type = null
+
/obj/item/weapon/gun/energy/ionrifle/pistol
name = "ion pistol"
desc = "The NT Mk63 EW Pan is a man portable anti-armor weapon designed to disable mechanical threats, produced by NT. This model sacrifices capacity for portability."
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index ab107fb0b5d..d3903c21a83 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -58,6 +58,9 @@
// one_handed_penalty = 15
+/obj/item/weapon/gun/projectile/automatic/c20r/empty
+ magazine_type = null
+
/obj/item/weapon/gun/projectile/automatic/c20r/update_icon()
..()
if(ammo_magazine)
@@ -192,6 +195,9 @@
else
. += "\The [launcher] is empty."
+/obj/item/weapon/gun/projectile/automatic/z8/empty
+ magazine_type = null
+
/obj/item/weapon/gun/projectile/automatic/l6_saw
name = "light machine gun"
desc = "A rather traditionally made L6 SAW with a pleasantly lacquered wooden pistol grip. 'Aussec Armoury-2531' is engraved on the reciever. Uses 5.45mm rounds. It's also compatible with magazines from STS-35 assault rifles."
diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm
index 8426448d6c9..435260b45ee 100644
--- a/code/modules/projectiles/guns/projectile/pistol.dm
+++ b/code/modules/projectiles/guns/projectile/pistol.dm
@@ -125,6 +125,9 @@
allowed_magazines = list(/obj/item/ammo_magazine/m45)
projectile_type = /obj/item/projectile/bullet/pistol/medium
+/obj/item/weapon/gun/projectile/silenced/empty
+ magazine_type = null
+
/obj/item/weapon/gun/projectile/deagle
name = "desert eagle"
desc = "The perfect handgun for shooters with a need to hit targets through a wall and behind a fridge in your neighbor's house. Uses .44 rounds."
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index 74896b6b6ab..9862b71b068 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -54,6 +54,9 @@
else
icon_state = "[icon_state]-empty"
+/obj/item/weapon/gun/projectile/shotgun/pump/empty
+ ammo_type = null
+
/obj/item/weapon/gun/projectile/shotgun/pump/slug
ammo_type = /obj/item/ammo_casing/a12g
@@ -67,6 +70,9 @@
ammo_type = /obj/item/ammo_casing/a12g
load_method = SINGLE_CASING|SPEEDLOADER
+/obj/item/weapon/gun/projectile/shotgun/pump/combat/empty
+ ammo_type = null
+
/obj/item/weapon/gun/projectile/shotgun/doublebarrel
name = "double-barreled shotgun"
desc = "A truely classic weapon. No need to change what works. Uses 12g rounds."
diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm
index e05739d194b..d1a6f22b4d8 100644
--- a/code/modules/projectiles/projectile/bullets.dm
+++ b/code/modules/projectiles/projectile/bullets.dm
@@ -216,6 +216,16 @@
armor_penetration = 80
hitscan = 1 //so the PTR isn't useless as a sniper weapon
+ icon_state = "bullet_alt"
+ tracer_type = /obj/effect/projectile/tracer/cannon
+
+/obj/item/projectile/bullet/rifle/a145/highvel
+ damage = 50
+ stun = 1
+ weaken = 0
+ penetrating = 15
+ armor_penetration = 90
+
/* Miscellaneous */
/obj/item/projectile/bullet/suffocationbullet//How does this even work?
diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm
index 132ac6ccf4a..ca3f1c8f51c 100644
--- a/code/modules/projectiles/projectile/energy.dm
+++ b/code/modules/projectiles/projectile/energy.dm
@@ -101,6 +101,19 @@
combustion = FALSE
+/obj/item/projectile/energy/excavate
+ name = "kinetic blast"
+ icon_state = "kinetic_blast"
+ fire_sound = 'sound/weapons/pulse3.ogg'
+ damage_type = BRUTE
+ damage = 30
+ armor_penetration = 60
+ excavation_amount = 200
+ check_armour = "melee"
+
+ vacuum_traversal = 0
+ combustion = FALSE
+
/obj/item/projectile/energy/dart
name = "dart"
icon_state = "toxin"
diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm
index 2cd05192853..ac039460cb4 100644
--- a/code/modules/projectiles/projectile/special.dm
+++ b/code/modules/projectiles/projectile/special.dm
@@ -277,9 +277,9 @@
light_power = 3
light_color = "#3300ff"
- muzzle_type = /obj/effect/projectile/tungsten/muzzle
- tracer_type = /obj/effect/projectile/tungsten/tracer
- impact_type = /obj/effect/projectile/tungsten/impact
+ muzzle_type = /obj/effect/projectile/muzzle/tungsten
+ tracer_type = /obj/effect/projectile/tracer/tungsten
+ impact_type = /obj/effect/projectile/impact/tungsten
/obj/item/projectile/beam/tungsten/on_hit(var/atom/target, var/blocked = 0)
if(isliving(target))
diff --git a/code/modules/vchat/css/ss13styles.css b/code/modules/vchat/css/ss13styles.css
index 375ebb5d808..51d0eb5467a 100644
--- a/code/modules/vchat/css/ss13styles.css
+++ b/code/modules/vchat/css/ss13styles.css
@@ -162,8 +162,10 @@ h1.alert, h2.alert {color: #000000;}
.vulpkanin {color: #B97A57;}
.enochian {color: #848A33; letter-spacing:-1pt; word-spacing:4pt; font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;}
.daemon {color: #5E339E; letter-spacing:-1pt; word-spacing:0pt; font-family: "Courier New", Courier, monospace;}
-.bug {color: #9e9e39;}
+.bug {color: #9e9e39;}
.vox {color: #AA00AA;}
+.promethean {color: #5A5A5A; font-family:"Comic Sans MS","Comic Sans",cursive;}
+.inverted .promethean {color: #A5A5A5; font-family:"Comic Sans MS","Comic Sans",cursive;}
.zaddat {color: #941C1C;}
.rough {font-family: "Trebuchet MS", cursive, sans-serif;}
.say_quote {font-family: Georgia, Verdana, sans-serif;}
diff --git a/code/modules/xenoarcheaology/artifacts/artifact.dm b/code/modules/xenoarcheaology/artifacts/artifact.dm
index 7ecf912cfb1..60e3543e196 100644
--- a/code/modules/xenoarcheaology/artifacts/artifact.dm
+++ b/code/modules/xenoarcheaology/artifacts/artifact.dm
@@ -9,19 +9,43 @@
var/datum/artifact_effect/secondary_effect
var/being_used = 0
+ var/predefined_effects = FALSE
+
+ var/predefined_primary
+ var/predefined_secondary
+
+ var/predefined_icon_num
+
+ var/predefined_triggers = FALSE
+
+ var/predefined_trig_primary
+ var/predefined_trig_secondary
+
/obj/machinery/artifact/New()
..()
- var/effecttype = pick(typesof(/datum/artifact_effect) - /datum/artifact_effect)
- my_effect = new effecttype(src)
+ if(predefined_effects && predefined_primary)
+ my_effect = new predefined_primary(src)
+
+ if(predefined_secondary)
+ secondary_effect = new predefined_secondary(src)
+ if(prob(75))
+ secondary_effect.ToggleActivate(0)
+
+ else
+ var/effecttype = pick(typesof(/datum/artifact_effect) - /datum/artifact_effect)
+ my_effect = new effecttype(src)
- if(prob(75))
- effecttype = pick(typesof(/datum/artifact_effect) - /datum/artifact_effect)
- secondary_effect = new effecttype(src)
if(prob(75))
- secondary_effect.ToggleActivate(0)
+ effecttype = pick(typesof(/datum/artifact_effect) - /datum/artifact_effect)
+ secondary_effect = new effecttype(src)
+ if(prob(75))
+ secondary_effect.ToggleActivate(0)
- icon_num = rand(0, 14)
+ if(!isnull(predefined_icon_num))
+ icon_num = predefined_icon_num
+ else
+ icon_num = rand(0, 14)
icon_state = "ano[icon_num]0"
if(icon_num == 7 || icon_num == 8)
@@ -53,6 +77,13 @@
if(prob(60))
my_effect.trigger = pick(TRIGGER_TOUCH, TRIGGER_HEAT, TRIGGER_COLD, TRIGGER_PHORON, TRIGGER_OXY, TRIGGER_CO2, TRIGGER_NITRO)
+ if(predefined_triggers)
+ if(predefined_trig_primary && my_effect)
+ my_effect.trigger = predefined_trig_primary
+
+ if(predefined_trig_secondary && secondary_effect)
+ secondary_effect.trigger = predefined_trig_secondary
+
/obj/machinery/artifact/proc/choose_effect()
var/effect_type = input(usr, "What type do you want?", "Effect Type") as null|anything in typesof(/datum/artifact_effect) - /datum/artifact_effect
if(effect_type)
diff --git a/code/modules/xenoarcheaology/artifacts/predefined/_predefined.dm b/code/modules/xenoarcheaology/artifacts/predefined/_predefined.dm
new file mode 100644
index 00000000000..edec0dd052f
--- /dev/null
+++ b/code/modules/xenoarcheaology/artifacts/predefined/_predefined.dm
@@ -0,0 +1,15 @@
+/obj/machinery/artifact/predefined
+ name = "alien artifact"
+ desc = "A large alien device."
+
+ predefined_effects = TRUE
+
+ predefined_primary = null
+ predefined_secondary = null
+
+ predefined_icon_num = null
+
+ predefined_triggers = FALSE
+
+ predefined_trig_primary = null
+ predefined_trig_secondary = null
diff --git a/code/modules/xenoarcheaology/artifacts/predefined/hungry_statue.dm b/code/modules/xenoarcheaology/artifacts/predefined/hungry_statue.dm
new file mode 100644
index 00000000000..6a81c02b8ba
--- /dev/null
+++ b/code/modules/xenoarcheaology/artifacts/predefined/hungry_statue.dm
@@ -0,0 +1,15 @@
+/obj/machinery/artifact/predefined/hungry_statue
+ name = "alien artifact"
+ desc = "A large alien device."
+
+ predefined_effects = TRUE
+
+ predefined_primary = /datum/artifact_effect/animate_anomaly
+ predefined_secondary = /datum/artifact_effect/vampire
+
+ predefined_icon_num = 14
+
+ predefined_triggers = TRUE
+
+ predefined_trig_primary = TRIGGER_OXY
+ predefined_trig_secondary = TRIGGER_OXY
diff --git a/code/stylesheet.dm b/code/stylesheet.dm
index 06ed2760b68..b11b716b668 100644
--- a/code/stylesheet.dm
+++ b/code/stylesheet.dm
@@ -106,6 +106,7 @@ h1.alert, h2.alert {color: #000000;}
.bug {color: #9e9e39;}
.vox {color: #AA00AA;}
.zaddat {color: #941C1C;}
+.promethean {color: #5A5A5A;}
.rough {font-family: "Trebuchet MS", cursive, sans-serif;}
.say_quote {font-family: Georgia, Verdana, sans-serif;}
.terminus {font-family: "Times New Roman", Times, serif, sans-serif}
diff --git a/config/alienwhitelist.txt b/config/alienwhitelist.txt
index 5db091ac833..75789017348 100644
--- a/config/alienwhitelist.txt
+++ b/config/alienwhitelist.txt
@@ -1,6 +1,5 @@
some~user - Species
-911earlyarther - Xenomorph Hybrid
admiraldragon - Vox
aetherelemental - Daemon
arandomalien - Xenochimera
@@ -9,9 +8,7 @@ aruis - Diona
aruis - Xenochimera
amarewolf - Xenochimera
azmodan412 - Xenochimera
-azmodan412 - Xenomorph Hybrid
bothnevarbackwards - Diona
-cameron653 - Xenomorph Hybrid
crossexonar - Protean
chillyfang - Black-Eyed Shadekin
flaktual - Vox
@@ -21,7 +18,6 @@ hollifex - Diona
inuzari - Diona
jademanique - Xenochimera
jemli - Gutter
-killerdragn - Xenomorph Hybrid
ktccd - Diona
mewchild - Diona
mewchild - Vox
@@ -32,14 +28,12 @@ paradoxspace - Xenochimera
rapidvalj - Vox
rapidvalj - Common Skrellian
rapidvalj - High Skrellian
-rikaru19xjenkins - Xenomorph Hybrid
rikaru19xjenkins - Xenochimera
rixunie - Diona
rixunie - Gutter
rykkastormheart - Xenochimera
seiga - Vox
sepulchre - Vox
-sepulchre - Xenomorph Hybrid
silvertalismen - Diona
silvertalismen - Vox
silvertalismen - Xenochimera
@@ -49,12 +43,8 @@ tastypred - Xenochimera
timidvi - Diona
varonis - Xenochimera
verkister - Xenochimera
-westfire - Xenomorph Hybrid
wickedtemp - Shadekin Empathy
-wtfismyname - Xenomorph Hybrid
xioen - Diona
xioen - Xenochimera
-xioen - Xenomorph Hybrid
zalvine - Shadekin Empathy
zammyman215 - Vox
-zekesturm - Xenomorph Hybrid
diff --git a/html/changelogs/Layne - Promethean Language.yml b/html/changelogs/Layne - Promethean Language.yml
new file mode 100644
index 00000000000..ed0f2e7ab34
--- /dev/null
+++ b/html/changelogs/Layne - Promethean Language.yml
@@ -0,0 +1,5 @@
+author: Layne
+delete-after: True
+changes:
+ - rscadd: "Promethean language."
+ - tweak: "NONVERBAL define was changed a bit."
diff --git a/html/changelogs/atlantiscze-hardsuit.yml b/html/changelogs/atlantiscze-hardsuit.yml
new file mode 100644
index 00000000000..92cea414723
--- /dev/null
+++ b/html/changelogs/atlantiscze-hardsuit.yml
@@ -0,0 +1,6 @@
+author: atlantiscze
+
+delete-after: True
+
+changes:
+ - rscadd: "Hardsuits now allow backpacks to be carried in storage slot. This is limited to hardsuits which are worn on the back slot."
\ No newline at end of file
diff --git a/html/changelogs/mechoid-newhorizon.yml b/html/changelogs/mechoid-newhorizon.yml
new file mode 100644
index 00000000000..e9740680a39
--- /dev/null
+++ b/html/changelogs/mechoid-newhorizon.yml
@@ -0,0 +1,44 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Mechoid
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Adds more interactions with animals, like shearing and taming."
+ - rscadd: "Sif moss turfs can now spawn animal groups."
+ - rscadd: "New PoIs"
+ - rscadd: "Thermal poncho attachment, has minor slowdown, but gives thermal protection to the armor it is attached to."
+ - rscadd: "Mercenaries now drop their guns again. Most likely to be broken, however they can be repaired. Examining when adjacent will allow you to inspect the gun for what is needed."
+ - rscadd: "Mercenary Snipers now exist. They will telegraph their shots approximately 2 seconds in advance, and can fire at 14 tiles away. Will occasionally drop pieces of their PTRs that survive combat."
+ - tweak: "Clothing can now check attachments for temperature resistance."
+ - bugfix: "MHD Howitzer beam effect actually exists again.
+ - bugfix: "Xenoresin ground cover is properly colored again."
diff --git a/icons/effects/beam.dmi b/icons/effects/beam.dmi
index 6c631498f65..4115b01ef2e 100644
Binary files a/icons/effects/beam.dmi and b/icons/effects/beam.dmi differ
diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi
index e956f358741..0c0dce59bc4 100644
Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ
diff --git a/icons/obj/clothing/modular_armor.dmi b/icons/obj/clothing/modular_armor.dmi
index 1372ff9a5eb..119f56d6b51 100644
Binary files a/icons/obj/clothing/modular_armor.dmi and b/icons/obj/clothing/modular_armor.dmi differ
diff --git a/icons/obj/energygun.dmi b/icons/obj/energygun.dmi
index 157c3c11f6d..73c39449bbe 100644
Binary files a/icons/obj/energygun.dmi and b/icons/obj/energygun.dmi differ
diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi
index 1b753e9c872..1a56a0be84d 100644
Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ
diff --git a/icons/obj/turrets.dmi b/icons/obj/turrets.dmi
index 34956832055..32346c5a5ef 100644
Binary files a/icons/obj/turrets.dmi and b/icons/obj/turrets.dmi differ
diff --git a/maps/submaps/surface_submaps/mountains/CaveTrench.dmm b/maps/submaps/surface_submaps/mountains/CaveTrench.dmm
index e44e5185f82..8d1de5b00c4 100644
--- a/maps/submaps/surface_submaps/mountains/CaveTrench.dmm
+++ b/maps/submaps/surface_submaps/mountains/CaveTrench.dmm
@@ -1,18 +1,39 @@
"a" = (/turf/template_noop,/area/template_noop)
-"b" = (/turf/template_noop,/area/submap/Cavelake)
-"c" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/Cavelake)
-"d" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake)
-"e" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake)
-"f" = (/turf/simulated/floor/outdoors/rocks,/area/submap/Cavelake)
-"g" = (/mob/living/simple_mob/animal/sif/hooligan_crab,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake)
-"h" = (/turf/simulated/floor/water,/area/submap/Cavelake)
-"i" = (/mob/living/simple_mob/animal/passive/fish/perch,/turf/simulated/floor/water,/area/submap/Cavelake)
-"j" = (/obj/machinery/crystal,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake)
-"k" = (/mob/living/simple_mob/animal/passive/fish/trout,/turf/simulated/floor/water,/area/submap/Cavelake)
-"l" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake)
-"m" = (/obj/random/mob/sif,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake)
-"n" = (/obj/item/clothing/mask/snorkel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake)
-"o" = (/obj/effect/decal/remains/mouse,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake)
+"b" = (/turf/template_noop,/area/submap/CaveTrench)
+"c" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/CaveTrench)
+"d" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"e" = (/turf/simulated/floor/outdoors/rocks,/area/submap/CaveTrench)
+"f" = (/turf/simulated/floor/water{outdoors = 0},/area/submap/CaveTrench)
+"g" = (/obj/random/mob/robotic/drone,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"h" = (/mob/living/simple_mob/animal/passive/fish/trout{faction = "malf_drone"},/turf/simulated/floor/water{outdoors = 0},/area/submap/CaveTrench)
+"i" = (/obj/effect/decal/remains/human,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"j" = (/turf/simulated/wall,/area/submap/CaveTrench)
+"k" = (/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"l" = (/mob/living/simple_mob/animal/passive/fish/trout,/turf/simulated/floor/water{outdoors = 0},/area/submap/CaveTrench)
+"m" = (/turf/simulated/wall/wood,/area/submap/CaveTrench)
+"n" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lantern,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"o" = (/obj/structure/table/woodentable,/obj/item/weapon/gun/projectile/shotgun/pump,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"p" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"q" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"r" = (/obj/structure/table/steel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"s" = (/obj/structure/table/steel,/obj/item/weapon/paper{info = "Rellek's telling me that we're in deep shit if the townies found out I'm cooking up drones out here. Like I give a fuck, We're minning our asses off only to dig into some bug nest to get our legs chewed. Well I'm not looking a gift horse in the mouth. Those drone dudes out in the wild hooked us up with these machines so long as they get some of the metal we dig up. Win win for us, Guess we're retiring early after all."; name = "Note"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"t" = (/obj/structure/table/steel,/obj/item/robot_parts/robot_component/actuator,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"u" = (/obj/effect/decal/cleanable/blood,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"v" = (/obj/structure/simple_door/wood,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"w" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"x" = (/obj/structure/table/steel,/obj/item/device/robotanalyzer,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"y" = (/obj/structure/table/steel,/obj/item/weapon/storage/toolbox,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"z" = (/obj/structure/table/bench/steel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"A" = (/obj/effect/decal/remains,/obj/item/clothing/under/rank/miner,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"B" = (/turf/simulated/shuttle/plating,/area/submap/CaveTrench)
+"C" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"D" = (/obj/structure/coatrack,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"E" = (/obj/structure/closet/secure_closet/miner,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"F" = (/obj/item/weapon/storage/box/shotgunammo,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"G" = (/obj/structure/table/steel,/obj/item/robot_parts/l_leg,/obj/item/robot_parts/head,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"H" = (/obj/effect/decal/cleanable/blood/gibs/robot,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"I" = (/obj/machinery/power/port_gen/pacman,/turf/simulated/shuttle/plating,/area/submap/CaveTrench)
+"J" = (/obj/machinery/drone_fabricator{fabricator_tag = "Unknown"},/turf/simulated/shuttle/plating,/area/submap/CaveTrench)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -55,4 +76,4 @@ abbbbbbbcccccccccccbbbbbccbbbbbbbbbbbbba
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-"}
\ No newline at end of file
+"}
diff --git a/maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle.dmm b/maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle.dmm
index 9b19efeea79..adeb82580f9 100644
--- a/maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle.dmm
+++ b/maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle.dmm
@@ -25,6 +25,7 @@
"ay" = (/obj/effect/decal/mecha_wreckage/gygax{anchored = 1},/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
"az" = (/obj/effect/gibspawner/generic,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
"aA" = (/obj/structure/closet/medical_wall,/turf/simulated/shuttle/wall/dark,/area/submap/crashedcontainmentshuttle)
+"aB" = (/obj/machinery/artifact/predefined/hungry_statue,/obj/structure/largecrate,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle)
"aC" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
"aD" = (/obj/structure/door_assembly/door_assembly_ext,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
"aE" = (/obj/structure/extinguisher_cabinet,/turf/simulated/shuttle/wall/dark,/area/submap/crashedcontainmentshuttle)
@@ -90,7 +91,7 @@
"bM" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
"bN" = (/obj/structure/toilet{dir = 8},/obj/effect/gibspawner/generic,/obj/effect/decal/remains/human,/obj/item/weapon/card/id/syndicate{age = "\\42"; blood_type = "\\O+"; desc = "A strange ID card."; dna_hash = "\[REDACTED]"; fingerprint_hash = "\\------"; name = "Aaron Presley's ID Card(Delivery Service) "; registered_name = "Aaron Presley"; sex = "\\Male"},/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle)
"bO" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/remains/human,/obj/item/weapon/flame/lighter/random,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-
+
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -103,7 +104,7 @@ aaaYaaaRacaaadadaZapbIbybIazbbadaNacanbJaaaaaaaaaa
aaaababdbeapapapadadadbIadadauadaNaAaeaTanaaaaataa
acaaaaaaapadauadadadacacaSacanadavacbhaeaeahaaaaaa
aPadaVaRacadadadbiadacbjafafacadadadbKbpaHaraaaaaa
-aaaPadaaacaMadbkadbbacbvafbwacaLadaSbKbqaHaoapaaaa
+aaaPadaaacaMadbkadbbacbvaBbwacaLadaSbKbqaHaoapaaaa
aPbxaVaRacaWadbbadbbanblbLbzanadbbasaebraFaIaabfaa
aPaPaaaaaaaabEazadadanacacacaEadadahaebpaHaoaaaiaa
aPaPadaaaJapbIadadaPaPadadadadadadacaeaeaeahaaaaaa
@@ -118,4 +119,3 @@ aaaaaaaaaaaaadaLaaaabmbMbObmbmaaaaaaaaaaaaaaaaaaaa
aaaaadadaaaaaaacaPbCbmbmbmaaajaaaaaaaaaaaaaaaaaaaa
aaaaaaadaaaaaaaPaPaaaaaabmaaaaaaaaaaaaaaaaaaaaaaaa
"}
-
diff --git a/maps/submaps/surface_submaps/mountains/excavation1.dmm b/maps/submaps/surface_submaps/mountains/excavation1.dmm
new file mode 100644
index 00000000000..169efe4eb5c
--- /dev/null
+++ b/maps/submaps/surface_submaps/mountains/excavation1.dmm
@@ -0,0 +1,51 @@
+"a" = (/turf/simulated/mineral,/area/template_noop)
+"b" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
+"c" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation)
+"d" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation)
+"e" = (/obj/structure/cliff/automatic,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation)
+"f" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 5},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation)
+"g" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation)
+"h" = (/obj/random/outcrop,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation)
+"i" = (/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation)
+"j" = (/obj/structure/cliff/automatic/corner,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation)
+"k" = (/obj/mecha/working/ripley,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation)
+"l" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 8},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation)
+"m" = (/obj/structure/table/sifwoodentable,/obj/item/mecha_parts/mecha_equipment/tool/drill/bore,/obj/item/weapon/ore/marble,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation)
+"n" = (/obj/item/weapon/ore,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation)
+"o" = (/obj/structure/table/sifwoodentable,/obj/item/mecha_parts/mecha_equipment/hardpoint_actuator,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation)
+"p" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 4},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation)
+"q" = (/obj/structure/table/sifwoodentable,/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation)
+"r" = (/obj/structure/table/sifwoodentable,/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy/rigged,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation)
+"s" = (/obj/item/weapon/ore/marble,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation)
+"t" = (/obj/item/weapon/ore/gold,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation)
+"u" = (/obj/item/weapon/ore/diamond,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation)
+"v" = (/mob/living/simple_mob/mechanical/mining_drone,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation)
+"w" = (/obj/structure/table/sifwoodentable,/obj/item/weapon/pickaxe/jackhammer,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation)
+"x" = (/obj/structure/table/sifwoodentable,/obj/random/projectile/scrapped_grenadelauncher,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation)
+"y" = (/obj/structure/table/sifwoodentable,/obj/random/medical/pillbottle,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation)
+"z" = (/obj/structure/table/sifwoodentable,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation)
+"A" = (/obj/structure/table/sifwoodentable,/obj/item/weapon/mining_scanner,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation)
+"B" = (/obj/structure/table/sifwoodentable,/obj/random/cigarettes,/obj/random/tool/powermaint,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Excavation)
+"C" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 10},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation)
+"D" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 2},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation)
+"E" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 10},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation)
+"F" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 6},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation)
+"G" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 6},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Excavation)
+
+(1,1,1) = {"
+aabbbbbbbaa
+accdeeefcca
+bcdghhijfcb
+bdghikihjfb
+bliimnoiipb
+blhiqirihpb
+bliniisnhpb
+blhtiuiiipb
+bliviinvhpb
+blhwinixipb
+blhynitzhpb
+bliAiniBhpb
+bliisinihpb
+aCDEniiFDGa
+aabbbbbbbaa
+"}
diff --git a/maps/submaps/surface_submaps/mountains/mountains.dm b/maps/submaps/surface_submaps/mountains/mountains.dm
index 62cb5c4a268..c6a7a2f6849 100644
--- a/maps/submaps/surface_submaps/mountains/mountains.dm
+++ b/maps/submaps/surface_submaps/mountains/mountains.dm
@@ -38,6 +38,7 @@
#include "Geyser2.dmm"
#include "Geyser3.dmm"
#include "Cliff1.dmm"
+#include "excavation1.dmm"
#endif
// The 'mountains' is the mining z-level, and has a lot of caves.
@@ -254,8 +255,8 @@
/datum/map_template/surface/mountains/normal/crashed_ufo_frigate //VOREStation Edit
name = "Crashed UFO Frigate"
- desc = "A (formerly) flying saucer that is now embedded into the mountain, yet its combat protocols still seem to be running..."
- mappath = 'maps/submaps/surface_submaps/mountains/crashed_ufo.dmm'
+ desc = "A (formerly) flying saucer that is now embedded into the mountain, yet the combat protocols still seem to be running..."
+ mappath = 'maps/submaps/surface_submaps/mountains/crashed_ufo_frigate.dmm'
cost = 60
discard_prob = 50
@@ -340,3 +341,9 @@
mappath = 'maps/submaps/surface_submaps/mountains/CrashedMedShuttle1_vr.dmm' //VOREStation Edit
cost = 20
fixed_orientation = TRUE
+
+/datum/map_template/surface/mountains/deep/excavation1
+ name = "Excavation Site"
+ desc = "An abandoned mining site."
+ mappath = 'maps/submaps/surface_submaps/mountains/excavation1.dmm'
+ cost = 20
diff --git a/maps/submaps/surface_submaps/mountains/mountains_areas.dm b/maps/submaps/surface_submaps/mountains/mountains_areas.dm
index 00700bd7dbf..a6968fac98b 100644
--- a/maps/submaps/surface_submaps/mountains/mountains_areas.dm
+++ b/maps/submaps/surface_submaps/mountains/mountains_areas.dm
@@ -134,4 +134,8 @@
/area/submap/lava_trench/outpost
name = "POI - Trench Outpost"
requires_power = FALSE
- icon_state = "submap2"
\ No newline at end of file
+ icon_state = "submap2"
+
+/area/submap/Excavation
+ name = "POI - Excavation Site"
+ ambience = AMBIENCE_FOREBODING
diff --git a/maps/submaps/surface_submaps/plains/BuriedTreasure.dmm b/maps/submaps/surface_submaps/plains/BuriedTreasure.dmm
new file mode 100644
index 00000000000..0018404dcab
--- /dev/null
+++ b/maps/submaps/surface_submaps/plains/BuriedTreasure.dmm
@@ -0,0 +1,10 @@
+"a" = (/turf/template_noop,/area/submap/BuriedTreasure)
+"b" = (/obj/structure/closet/grave,/obj/random/gun/random,/obj/random/contraband,/obj/random/cash,/obj/random/cigarettes,/obj/random/trash,/obj/random/junk,/obj/random/drinkbottle,/turf/template_noop,/area/submap/BuriedTreasure)
+
+(1,1,1) = {"
+aaaaa
+aaaaa
+aabaa
+aaaaa
+aaaaa
+"}
diff --git a/maps/submaps/surface_submaps/plains/BuriedTreasure2.dmm b/maps/submaps/surface_submaps/plains/BuriedTreasure2.dmm
new file mode 100644
index 00000000000..f10b287e69a
--- /dev/null
+++ b/maps/submaps/surface_submaps/plains/BuriedTreasure2.dmm
@@ -0,0 +1,10 @@
+"a" = (/turf/template_noop,/area/submap/BuriedTreasure)
+"b" = (/obj/structure/closet/grave,/obj/random/contraband,/obj/random/contraband,/obj/random/cash,/obj/random/cash,/obj/random/cash,/obj/random/cash,/obj/random/drinkbottle,/obj/random/mre,/obj/random/projectile/sec,/obj/item/clothing/under/explorer/armored,/turf/template_noop,/area/submap/BuriedTreasure)
+
+(1,1,1) = {"
+aaaaa
+aaaaa
+aabaa
+aaaaa
+aaaaa
+"}
diff --git a/maps/submaps/surface_submaps/plains/BuriedTreasure3.dmm b/maps/submaps/surface_submaps/plains/BuriedTreasure3.dmm
new file mode 100644
index 00000000000..fdc989871df
--- /dev/null
+++ b/maps/submaps/surface_submaps/plains/BuriedTreasure3.dmm
@@ -0,0 +1,10 @@
+"a" = (/turf/template_noop,/area/submap/BuriedTreasure)
+"b" = (/obj/structure/closet/grave,/obj/random/energy,/obj/random/drinkbottle,/obj/random/contraband,/obj/random/ammo,/obj/random/ammo,/obj/random/mre,/obj/random/tool/power,/obj/random/unidentified_medicine/fresh_medicine,/obj/random/unidentified_medicine/combat_medicine,/obj/random/medical/pillbottle,/obj/random/soap,/turf/template_noop,/area/submap/BuriedTreasure)
+
+(1,1,1) = {"
+aaaaa
+aaaaa
+aabaa
+aaaaa
+aaaaa
+"}
diff --git a/maps/submaps/surface_submaps/plains/PlainsKururak.dmm b/maps/submaps/surface_submaps/plains/PlainsKururak.dmm
new file mode 100644
index 00000000000..f3a43e4c917
--- /dev/null
+++ b/maps/submaps/surface_submaps/plains/PlainsKururak.dmm
@@ -0,0 +1,26 @@
+"a" = (/turf/template_noop,/area/template_noop)
+"b" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/PlainsKururak)
+"c" = (/obj/random/trash,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/PlainsKururak)
+"d" = (/obj/random/firstaid,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/PlainsKururak)
+"e" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/PlainsKururak)
+"f" = (/obj/random/projectile/sec,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/PlainsKururak)
+"g" = (/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/PlainsKururak)
+"h" = (/mob/living/simple_mob/animal/sif/kururak,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/PlainsKururak)
+"i" = (/obj/random/outcrop,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/PlainsKururak)
+"j" = (/obj/random/contraband,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/PlainsKururak)
+"k" = (/mob/living/simple_mob/animal/sif/diyaab,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/PlainsKururak)
+"l" = (/obj/random/trash,/turf/template_noop,/area/submap/PlainsKururak)
+"m" = (/turf/template_noop,/area/submap/PlainsKururak)
+
+(1,1,1) = {"
+aaaaaaaaaa
+abbbbbbbaa
+bbbcdefbaa
+bbgeehibba
+bbieebbbba
+bbbjebklma
+abbbckkbba
+aabbbbibba
+aaaabbbbaa
+aaaaaaaaaa
+"}
diff --git a/maps/submaps/surface_submaps/plains/Thiefc.dmm b/maps/submaps/surface_submaps/plains/Thiefc.dmm
index 57a27da7c56..f8b83273636 100644
--- a/maps/submaps/surface_submaps/plains/Thiefc.dmm
+++ b/maps/submaps/surface_submaps/plains/Thiefc.dmm
@@ -13,7 +13,7 @@
"m" = (/obj/structure/table/steel,/obj/item/weapon/paper{desc = "This is some bullshit. First chance we got to knick something that looks half decent turns out to be mostly junk. And now we're getting calls that the other stash we've got has got a spider problem. Fuck this, Between the shitty weather, The pissed of bugs, And now apparently some NT goon running around in the area there's hardly enough reason to stick around. I'm telling Carl I'm out tommorow."; name = "Note"},/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc)
"n" = (/obj/vehicle/train/trolley,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc)
"o" = (/obj/structure/closet/crate,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc)
-"p" = (/obj/structure/closet/crate,/obj/item/weapon/storage/box/shotgunammo,/obj/item/weapon/storage/box/practiceshells,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc)
+"p" = (/obj/structure/closet/crate,/obj/item/weapon/storage/box/shotgunammo,/obj/item/weapon/storage/box/practiceshells,/obj/random/projectile/scrapped_gun,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/maps/submaps/surface_submaps/plains/plains.dm b/maps/submaps/surface_submaps/plains/plains.dm
index f8f017af3db..cf05e432230 100644
--- a/maps/submaps/surface_submaps/plains/plains.dm
+++ b/maps/submaps/surface_submaps/plains/plains.dm
@@ -28,6 +28,10 @@
#include "SupplyDrop2.dmm"
#include "RationCache.dmm"
#include "Oldhouse.dmm"
+#include "PlainsKururak.dmm"
+#include "BuriedTreasure.dmm"
+#include "BuriedTreasure2.dmm"
+#include "BuriedTreasure3.dmm"
#endif
@@ -215,3 +219,30 @@
desc = "A dumped chemical canister. Looks dangerous."
mappath = 'maps/submaps/surface_submaps/plains/chemspill1_vr.dmm' //VOREStation Edit
cost = 10
+
+/datum/map_template/surface/plains/PlainsKururak
+ name = "Lone Kururak"
+ desc = "A lone Kururak's den."
+ mappath = 'maps/submaps/surface_submaps/plains/PlainsKururak.dmm'
+ cost = 10
+
+/datum/map_template/surface/plains/BuriedTreasure1
+ name = "Buried Treasure 1"
+ desc = "A hole in the ground, who knows what might be inside!"
+ mappath = 'maps/submaps/surface_submaps/plains/BuriedTreasure.dmm'
+ cost = 10
+ template_group = "Shallow Grave"
+
+/datum/map_template/surface/plains/BuriedTreasure2
+ name = "Buried Treasure 2"
+ desc = "A hole in the ground, who knows what might be inside!"
+ mappath = 'maps/submaps/surface_submaps/plains/BuriedTreasure2.dmm'
+ cost = 10
+ template_group = "Shallow Grave"
+
+/datum/map_template/surface/plains/BuriedTreasure3
+ name = "Buried Treasure 3"
+ desc = "A hole in the ground, who knows what might be inside!"
+ mappath = 'maps/submaps/surface_submaps/plains/BuriedTreasure3.dmm'
+ cost = 10
+ template_group = "Shallow Grave"
diff --git a/maps/submaps/surface_submaps/plains/plains_areas.dm b/maps/submaps/surface_submaps/plains/plains_areas.dm
index f6e6d9677c2..58895767572 100644
--- a/maps/submaps/surface_submaps/plains/plains_areas.dm
+++ b/maps/submaps/surface_submaps/plains/plains_areas.dm
@@ -61,6 +61,9 @@
/area/submap/Smol3
name = "POI - Merchant's Stand"
+/area/submap/PlainsKururak
+ name = "POI - Lone Kururak"
+
/area/submap/PooledR
name = "POI - Pooled Rocks"
ambience = AMBIENCE_SIF
@@ -103,3 +106,7 @@
/area/submap/ChemSpill1
name = "POI - Ruptured Canister"
ambience = AMBIENCE_TECH_RUINS
+
+/area/submap/BuriedTreasure
+ name = "POI - Buried Treasure"
+ ambience = AMBIENCE_FOREBODING
diff --git a/maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm b/maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm
index 7bf4c4d9213..426c4c67bfd 100644
--- a/maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm
+++ b/maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm
@@ -5,7 +5,7 @@
"ae" = (/obj/effect/decal/cleanable/blood,/turf/template_noop,/area/submap/Blackshuttledown)
"af" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/Blackshuttledown)
"ag" = (/obj/structure/table/steel,/turf/template_noop,/area/submap/Blackshuttledown)
-"ah" = (/mob/living/simple_mob/humanoid/merc/ranged/smg/poi,/turf/template_noop,/area/submap/Blackshuttledown)
+"ah" = (/obj/random/mob/merc/all,/turf/template_noop,/area/submap/Blackshuttledown)
"ai" = (/turf/template_noop,/turf/simulated/shuttle/wall/dark{icon_state = "dark6"; name = "Unknown Shuttle"},/area/submap/Blackshuttledown)
"aj" = (/turf/simulated/shuttle/wall/dark{icon_state = "dark0"; name = "Unknown Shuttle"},/area/submap/Blackshuttledown)
"ak" = (/turf/template_noop,/turf/simulated/shuttle/wall/dark{icon_state = "dark10"; name = "Unknown Shuttle"},/area/submap/Blackshuttledown)
@@ -63,16 +63,16 @@
"bk" = (/obj/structure/table/steel,/obj/item/weapon/material/knife,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
"bl" = (/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
"bm" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"bn" = (/mob/living/simple_mob/humanoid/merc/ranged/smg/poi,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bn" = (/obj/random/mob/merc/all,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
"bo" = (/obj/structure/table/steel,/obj/random/toolbox,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
-"bp" = (/obj/structure/table/steel,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
+"bp" = (/obj/structure/table/steel,/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/random/projectile/scrapped_gun,/obj/random/projectile/scrapped_gun,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
"bq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/submap/Blackshuttledown)
"br" = (/obj/structure/table/steel,/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
"bs" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
"bt" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/effect/floor_decal/borderfloor{dir = 4},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
"bu" = (/obj/item/weapon/stool,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
"bv" = (/obj/structure/table/steel,/obj/random/projectile,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
-"bw" = (/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
+"bw" = (/obj/machinery/fusion_fuel_compressor,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
"bx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/submap/Blackshuttledown)
"by" = (/obj/machinery/door/airlock/glass,/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
"bz" = (/obj/effect/floor_decal/corner/grey,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
@@ -86,7 +86,7 @@
"bH" = (/obj/machinery/power/apc{dir = 8; name = "BSD APC"; pixel_x = -24},/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
"bI" = (/mob/living/simple_mob/humanoid/merc/melee/sword/poi,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
"bJ" = (/obj/machinery/computer/area_atmos,/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"bK" = (/mob/living/simple_mob/humanoid/merc/ranged/laser/poi,/turf/template_noop,/area/submap/Blackshuttledown)
+"bK" = (/obj/machinery/fusion_fuel_injector/mapped{icon_state = "injector0"; dir = 4},/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
"bL" = (/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
"bM" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 4},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
"bN" = (/obj/structure/table/steel,/obj/item/weapon/paper{info = "We need to take a short stop. The engine's are in need of minor repairs due to turbulence, should be a week's time. We've got reserve food supplies but pleanty of locale fauna to subsist on too if need be. PCRC is keeping most of there assets near New Reykjavik and locale authorities are more mindful then most to travel in this kind of weather. Our outfit should be at the rendezvous point in less then ten days assuming the upper ecehelon hasn't dropped ties with us yet."; name = "Operation Progress/M-53"},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
@@ -130,17 +130,17 @@ aaabababababababababababababadadabababafabababafababaeababadadabababaa
aaababafabadadadababababafababababababababababababababababadadabababaa
aaabababababadadadabacababababagagagagagagabababababacabafabadabababaa
aaababababababadadabafababababagahabababagabababababababababababababaa
-aaabababababababaiajajajakababagabababbKagabababafaiajajajajakabababaa
+aaabababababababaiajajajakababagabababahagabababafaiajajajajakabababaa
aaabababababababajajajajajajajajajababajajajajajajajajajajajalamababaa
aaababababafababajajajajajajanaoajapapajaqarasatauajajajajajalamababaa
aaabababababababavajajawaxajayazajaAaAajaBaCaDaEaEaEaFajajaGababababaa
aaabababababababaHajajaIaJajayaKaLaLaMajaBaNaNaEaOaDaPajaGabababababaa
aaabafababababaHajaQajawaRajayaSaTaTaUajaVaWaEaXaYaZbaajababababafabaa
aaabababababaHajbbbcajbdajajayazajajajajajajbeajajajajajbfabababababaa
-aaabababababajbgbhazajbiaLaLbhazajbjbkblbmblbnblajbobobpajbfababababaa
+aaabababababajbgbhazajbiaLaLbhazajbjbkblbmbnblblajbobobpajbfababababaa
aaabababababbqbrblazajbsblblblbtajblblbububublblajbvblblbwalamabababaa
-aaabababababbxbrblaKbybhblbzblblbAblblbBbCbCblblbDblblblbwalamabababaa
-aaabababababbxbrblaSbEbFblblblblbAblblbCbCbCblblbDblblblbwalamabababaa
+aaabababababbxbrblaKbybhblbzblblbAblblbBbCbCblblbDblblblbKalamabababaa
+aaabababababbxbrblaSbEbFblblblblbAblblbCbCbCblblbDblblblbKalamabababaa
aaabababababbGbrblazajbsblblblbtajblblbububublblajbHblblbIalamabababaa
aaabababababajbJbFcsajbLaTaTbFbMajbNbOblbPbnblblajbQbRbSajaGababababaa
aaabababababavajbTbUajbdajajayazajajajajajajbAajajajajajaGabababababaa
@@ -149,7 +149,7 @@ aaabafabababababavajajcbccajayaSaTaTcdajceblbYblbYajcfajbfabafabababaa
aaabababababababaHajajcgchajaycrajaAaAajbYblbYblbYajciajajbfababababaa
aaabababababababajajajajajajcjckajapapajbYclcmcncoajajajajalamabababaa
aaabababababababajajajajajajajajajababajajajajajajajajajajalamabababaa
-aaababafababababcpajajajcqababagbKabababagabababcpajajajajcqababababaa
+aaababafababababcpajajajcqababagahabababagabababcpajajajajcqababababaa
aaabababadabababababafababababagabababahagababafabafabababadadadababaa
aaababadadabacababababafabababagagagagagagababababacababadadadadababaa
aaabadadadabababababababaeababababababababababadadabababadadadadababaa
diff --git a/maps/submaps/surface_submaps/wilderness/Chapel.dmm b/maps/submaps/surface_submaps/wilderness/Chapel.dmm
index 02560d6ea89..a681497ed86 100644
--- a/maps/submaps/surface_submaps/wilderness/Chapel.dmm
+++ b/maps/submaps/surface_submaps/wilderness/Chapel.dmm
@@ -48,7 +48,7 @@
"aV" = (/obj/item/weapon/flame/candle/candelabra,/obj/structure/table/sifwoodentable,/turf/simulated/floor/wood/sif/broken,/area/submap/Chapel1)
"aW" = (/obj/structure/table/sifwoodentable,/obj/item/weapon/flame/candle/candelabra,/turf/simulated/floor/wood/sif,/area/submap/Chapel1)
"aX" = (/obj/structure/table/sifwoodentable,/obj/item/glass_jar,/turf/simulated/floor/wood/sif,/area/submap/Chapel1)
-"aY" = (/obj/structure/closet/coffin,/obj/random/maintenance/cargo,/obj/effect/decal/remains/human,/turf/simulated/floor/wood/sif,/area/submap/Chapel1)
+"aY" = (/obj/structure/closet/coffin,/obj/random/maintenance/cargo,/obj/effect/decal/remains/human,/obj/random/projectile/scrapped_gun,/turf/simulated/floor/wood/sif,/area/submap/Chapel1)
"aZ" = (/obj/structure/simple_door/sifwood,/turf/simulated/floor/wood/sif,/area/submap/Chapel1)
"ba" = (/obj/structure/bed/padded,/turf/simulated/floor/wood/sif,/area/submap/Chapel1)
"bb" = (/obj/structure/closet/coffin,/obj/random/cash,/obj/effect/decal/remains/xeno,/turf/simulated/floor/wood/sif,/area/submap/Chapel1)
diff --git a/maps/submaps/surface_submaps/wilderness/DoomP.dmm b/maps/submaps/surface_submaps/wilderness/DoomP.dmm
index b856b7a229b..08c32f5710f 100644
--- a/maps/submaps/surface_submaps/wilderness/DoomP.dmm
+++ b/maps/submaps/surface_submaps/wilderness/DoomP.dmm
@@ -16,7 +16,7 @@
"ap" = (/obj/effect/decal/remains/mouse,/obj/random/landmine,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
"aq" = (/obj/structure/flora/tree/sif,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
"ar" = (/obj/machinery/light/small,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
-"as" = (/obj/machinery/porta_turret/poi,/turf/simulated/floor/plating,/area/submap/DoomP)
+"as" = (/obj/machinery/porta_turret/poi{faction = "syndicate"},/turf/simulated/floor/plating,/area/submap/DoomP)
"at" = (/turf/simulated/wall/r_wall,/area/submap/DoomP)
"au" = (/obj/structure/sign/warning/secure_area,/turf/simulated/wall/r_wall,/area/submap/DoomP)
"av" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/submap/DoomP)
@@ -24,7 +24,7 @@
"ax" = (/obj/effect/floor_decal/borderfloor{dir = 9},/turf/simulated/floor/tiled,/area/submap/DoomP)
"ay" = (/obj/structure/bed/chair,/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP)
"az" = (/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aA" = (/obj/effect/floor_decal/borderfloor{dir = 1},/mob/living/simple_mob/humanoid/merc/ranged/smg/poi,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aA" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/random/mob/merc/all,/turf/simulated/floor/tiled,/area/submap/DoomP)
"aB" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP)
"aC" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/borderfloor{dir = 5},/turf/simulated/floor/tiled,/area/submap/DoomP)
"aD" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP)
@@ -38,7 +38,7 @@
"aL" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/rocks,/area/submap/DoomP)
"aM" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP)
"aN" = (/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aO" = (/obj/structure/table/standard,/obj/item/pizzabox,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aO" = (/obj/structure/table/standard,/obj/random/pizzabox,/turf/simulated/floor/tiled,/area/submap/DoomP)
"aP" = (/turf/simulated/floor/tiled,/area/submap/DoomP)
"aQ" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/borderfloor{dir = 4},/turf/simulated/floor/tiled,/area/submap/DoomP)
"aR" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
@@ -56,7 +56,7 @@
"bd" = (/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled,/area/submap/DoomP)
"be" = (/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled,/area/submap/DoomP)
"bf" = (/obj/machinery/light/small,/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"bg" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/mob/living/simple_mob/humanoid/merc/ranged/laser/poi,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"bg" = (/obj/structure/table/standard,/obj/random/firstaid,/turf/simulated/floor/tiled,/area/submap/DoomP)
"bh" = (/obj/machinery/door/airlock/hatch,/turf/simulated/floor/tiled,/area/submap/DoomP)
"bi" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP)
"bj" = (/obj/machinery/door/airlock/highsecurity,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
@@ -73,7 +73,7 @@
"bu" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/lime{dir = 5},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
"bv" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/effect/floor_decal/corner/lime{dir = 5},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
"bw" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/obj/effect/floor_decal/corner/lime{dir = 5},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
-"bx" = (/obj/structure/table/standard,/obj/structure/bedsheetbin,/obj/effect/floor_decal/corner/lime{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"bx" = (/obj/effect/floor_decal/borderfloor,/obj/random/mob/merc/all,/turf/simulated/floor/tiled,/area/submap/DoomP)
"by" = (/turf/simulated/floor/tiled/white,/area/submap/DoomP)
"bz" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
"bA" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
@@ -88,6 +88,11 @@
"bJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/submap/DoomP)
"bK" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
"bL" = (/mob/living/simple_mob/humanoid/merc/melee/sword/poi,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
+"bM" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"bN" = (/mob/living/bot/cleanbot{faction = "syndicate"; name = "Fitz"},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"bO" = (/obj/structure/table/standard,/obj/structure/bedsheetbin,/obj/effect/floor_decal/corner/lime{dir = 1},/obj/random/soap,/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"bP" = (/obj/random/junk,/turf/simulated/floor/outdoors/rocks,/area/submap/DoomP)
+"bQ" = (/obj/random/junk,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -121,15 +126,15 @@ aaabababacafafafafafafafakakakakakafafafacadadasadadasadatauavavavauatadasadadas
aaabababacafafafafafafafakakakakakakafafacatatatatatatatatatatawatatatatatatatatatatatafafafafafakakakakafafafafacacabaa
aaabababacacafafafafafafakakakakakakafafacataxayaAayaBayazaCataDataEaFaFaFaGaHaIaJaKatafafafafafakakakakafafafafacacabaa
aaabababacacacafafafafakakakakakakakafasaLataMaNaOaNaNaNaPaQataPataRaSaSaSaTaUaVaWaVataXasafafafakakakafafafafafafacabaa
-aaabababababacacafafafakakakakakakakafafafataYaNaNaNaNaNaPaZatbaatatatatatatbbbcatatatafafafafafakakakafafafafafafacabaa
-aaababababababacafafafakakakakakakakakafafatbdbebebfbebebgaPbhaPaPbiaPaPaPaPaPbiaPaPatafafafafafakakakafafafafafafafacaa
+aaabababababacacafafafakakakakakakakafafafataYaNaNaNbgaNaPaZatbaatatatatatatbbbcatatatafafafafafakakakafafafafafafacabaa
+aaababababababacafafafakakakakakakakakafafatbdbebebfbebxbMaPbhaPbNbiaPaPaPaPaPbiaPaPatafafafafafakakakafafafafafafafacaa
aaabababagabababacafafakakakakakakakakasaXatbjatatatatatatatatatatatatatatbkatatatatataXasafafafakakakafafafafafafafacaa
-aaababababababacacafafafakakakakakakakakafatblbmbnbobpbqbrbsatbtbubvbwbvbxbybkbzbkbAatafafafafafakakakafafafafafafafacaa
+aaababababababacacafafafakakakakakakakakafatblbmbnbobpbqbrbsatbtbubvbwbvbObybkbzbkbAatafafafafafakakakafafafafafafafacaa
aaababababababacafafafafakakakakakakakakafatblblbBblbLbBblblatbCbDbDbDbDbDbEatbFatbGatafafafafakakakakakafafafafafafacaa
aaababababababacafafafafakakakakakakakakakatatatatatatatatatatatatbHbIbIbIbJatatatatatafafafafakakakakafafafafafafafacaa
-aaabababababacacafafafakakakakakakakakakakafafafafaLacacadadadadbKadadadadadbKacacafafafafafafakakakakafafafafafafafacaa
+aaabababababacacafafafakakakakakakakakakakafafafafaLacbPadadadadbKadadadadadbKacbPafafafafafafakakakakafafafafafafafacaa
aaabababababacafafafafakakakakakakakakakakakakafafasafacacacacacasadadadadadasacafafafafafafakakakakakafafafafafafacacaa
-aaababababacacafafafafakakakakakakakakakakakakakafafafafafafafacacadadadadadacacafafafafafakakakakakakafafafafafafacabaa
+aaababababacacafafafafakakakakakakakakakakakakakafafafafafafafacacadbQadadadacacafafafafafakakakakakakafafafafafafacabaa
aaababababacafafafafafafakakakakakakakakakakakakafafafafafafafafacacacacacacacafafafafafafafakakakakakafafafafafacacabaa
aaabababacacafafafafafafakakakakakakakakakakakakakafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafacababaa
aaabababacacafafafafafakakakakakakakakakakakakakakafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafacababaa
diff --git a/maps/submaps/surface_submaps/wilderness/Drugden.dmm b/maps/submaps/surface_submaps/wilderness/Drugden.dmm
index 3d8f3257a30..12d8173eaf0 100644
--- a/maps/submaps/surface_submaps/wilderness/Drugden.dmm
+++ b/maps/submaps/surface_submaps/wilderness/Drugden.dmm
@@ -45,6 +45,8 @@
"S" = (/obj/item/weapon/material/shard,/turf/simulated/floor,/area/submap/Drugd)
"T" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/turf/simulated/floor/carpet,/area/submap/Drugd)
"U" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/syringe/drugs,/turf/simulated/floor/carpet,/area/submap/Drugd)
+"V" = (/obj/structure/closet/cabinet,/obj/random/projectile/scrapped_gun,/obj/random/toy,/turf/simulated/floor/carpet,/area/submap/Drugd)
+"W" = (/obj/structure/closet/cabinet,/obj/random/mre,/obj/random/medical/lite,/turf/simulated/floor/carpet,/area/submap/Drugd)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaa
@@ -64,9 +66,9 @@ abcccccccccdllldvwxydccba
acccccddddddzlgmoooAdccba
acccccdBCDEdllfdFGHIdccba
acccccdJKgLdlfMddddddccba
-abccccdNllOdhlgdqPwwdccca
+abccccdNllOdhlgdVPwwdccca
abbcccdlQllelllmoooodccca
-abbcccdRlSldllhdqTUndccca
+abbcccdRlSldllhdWTUndccca
abbcccddddddludddddddccca
abbccccccccccccccccccccba
abbbcccccccccccccccccccba
diff --git a/maps/submaps/surface_submaps/wilderness/FrostflyNest.dmm b/maps/submaps/surface_submaps/wilderness/FrostflyNest.dmm
new file mode 100644
index 00000000000..ccb107a33f7
--- /dev/null
+++ b/maps/submaps/surface_submaps/wilderness/FrostflyNest.dmm
@@ -0,0 +1,25 @@
+"a" = (/turf/template_noop,/area/template_noop)
+"b" = (/turf/simulated/mineral/ignore_mapgen/sif,/area/submap/FrostflyNest)
+"c" = (/obj/structure/boulder,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/submap/FrostflyNest)
+"d" = (/turf/simulated/wall/solidrock,/area/submap/FrostflyNest)
+"e" = (/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/submap/FrostflyNest)
+"f" = (/obj/structure/outcrop/diamond,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/submap/FrostflyNest)
+"g" = (/obj/random/humanoidremains,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/submap/FrostflyNest)
+"h" = (/obj/structure/prop/nest{color = "#041164"; creature_types = list(/mob/living/simple_mob/animal/sif/frostfly); name = "frostfly den"; spawn_delay = 300},/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/submap/FrostflyNest)
+"i" = (/obj/random/medical/lite,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/submap/FrostflyNest)
+"j" = (/obj/random/humanoidremains,/obj/random/gun/random,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/submap/FrostflyNest)
+"k" = (/obj/random/medical/pillbottle,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/submap/FrostflyNest)
+"l" = (/obj/random/gun/random,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/submap/FrostflyNest)
+
+(1,1,1) = {"
+aabbbcbbaa
+abbddedbba
+bbddfgddbb
+bddhieiddb
+bdfjefefdb
+bdkeegeddb
+ceefefldbb
+bdddgdddba
+bbbdddbbba
+abbbbbbaaa
+"}
diff --git a/maps/submaps/surface_submaps/wilderness/Shack1.dmm b/maps/submaps/surface_submaps/wilderness/Shack1.dmm
index cc703458581..604b970b929 100644
--- a/maps/submaps/surface_submaps/wilderness/Shack1.dmm
+++ b/maps/submaps/surface_submaps/wilderness/Shack1.dmm
@@ -2,21 +2,21 @@
"b" = (/turf/simulated/wall/log_sif,/area/submap/Shack1)
"c" = (/turf/template_noop,/area/submap/Shack1)
"d" = (/turf/simulated/floor/outdoors/dirt,/area/submap/Shack1)
-"e" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/wood{ icon_state = "wood_broken1"},/area/submap/Shack1)
+"e" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken1"},/area/submap/Shack1)
"f" = (/obj/structure/table/wooden_reinforced,/obj/item/weapon/storage/fancy/candle_box,/obj/item/weapon/storage/box/matches,/turf/simulated/floor/wood,/area/submap/Shack1)
-"g" = (/obj/structure/closet/cabinet,/obj/item/clothing/suit/storage/apron/overalls,/obj/item/clothing/under/overalls,/turf/simulated/floor/wood,/area/submap/Shack1)
+"g" = (/obj/structure/closet/cabinet,/obj/item/clothing/suit/storage/apron/overalls,/obj/item/clothing/under/overalls,/obj/random/mre,/turf/simulated/floor/wood,/area/submap/Shack1)
"h" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/submap/Shack1)
"i" = (/turf/simulated/floor/wood,/area/submap/Shack1)
-"j" = (/turf/simulated/floor/holofloor/wood{ icon_state = "wood_broken0"},/area/submap/Shack1)
-"k" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/wood{ icon_state = "wood_broken5"},/area/submap/Shack1)
+"j" = (/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken0"},/area/submap/Shack1)
+"k" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken5"},/area/submap/Shack1)
"l" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/Shack1)
"m" = (/obj/structure/simple_door/wood,/turf/simulated/floor/wood,/area/submap/Shack1)
-"n" = (/turf/simulated/floor/holofloor/wood{ icon_state = "wood_broken3"},/area/submap/Shack1)
+"n" = (/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken3"},/area/submap/Shack1)
"o" = (/obj/structure/table/bench/wooden,/turf/simulated/floor/wood,/area/submap/Shack1)
"p" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table/wooden_reinforced,/obj/item/weapon/storage/toolbox,/turf/simulated/floor/wood,/area/submap/Shack1)
"q" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table/wooden_reinforced,/obj/item/weapon/material/twohanded/fireaxe/scythe,/turf/simulated/floor/wood,/area/submap/Shack1)
"r" = (/obj/effect/decal/cleanable/spiderling_remains,/turf/simulated/floor/wood,/area/submap/Shack1)
-"s" = (/turf/simulated/floor/holofloor/wood{ icon_state = "wood_broken6"},/area/submap/Shack1)
+"s" = (/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken6"},/area/submap/Shack1)
"t" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table/wooden_reinforced,/obj/item/device/flashlight/lamp,/turf/simulated/floor/wood,/area/submap/Shack1)
"u" = (/obj/structure/flora/tree/dead,/turf/template_noop,/area/submap/Shack1)
diff --git a/maps/submaps/surface_submaps/wilderness/Shelter.dmm b/maps/submaps/surface_submaps/wilderness/Shelter.dmm
index e041c8a5494..3b985d359b2 100644
--- a/maps/submaps/surface_submaps/wilderness/Shelter.dmm
+++ b/maps/submaps/surface_submaps/wilderness/Shelter.dmm
@@ -9,7 +9,7 @@
"i" = (/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Shelter1)
"j" = (/obj/structure/bonfire/sifwood,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Shelter1)
"k" = (/obj/random/mob/robotic,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Shelter1)
-"l" = (/obj/structure/bed/roller/adv,/obj/random/humanoidremains,/obj/random/cash,/obj/random/cigarettes,/obj/item/clothing/under/explorer,/obj/item/clothing/shoes/boots/winter/explorer,/obj/item/clothing/mask/gas/explorer,/obj/item/clothing/accessory/permit/gun/planetside,/obj/item/clothing/suit/armor/pcarrier/light/nt,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Shelter1)
+"l" = (/obj/structure/bed/roller/adv,/obj/random/humanoidremains,/obj/random/cash,/obj/random/cigarettes,/obj/item/clothing/under/explorer,/obj/item/clothing/shoes/boots/winter/explorer,/obj/item/clothing/mask/gas/explorer,/obj/item/clothing/accessory/permit/gun/planetside,/obj/item/clothing/suit/armor/pcarrier/light/nt,/obj/random/projectile/scrapped_smg,/obj/random/projectile/scrapped_pistol,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Shelter1)
"m" = (/obj/random/medical/lite,/obj/random/technology_scanner,/obj/random/toolbox,/obj/random/trash,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/Shelter1)
"n" = (/obj/structure/fence/corner{icon_state = "corner"; dir = 1},/turf/simulated/floor/outdoors/snow,/area/submap/Shelter1)
"o" = (/obj/structure/fence/door/locked{icon_state = "door_closed"; dir = 1},/turf/simulated/floor/outdoors/snow,/area/submap/Shelter1)
diff --git a/maps/submaps/surface_submaps/wilderness/kururakden.dmm b/maps/submaps/surface_submaps/wilderness/kururakden.dmm
new file mode 100644
index 00000000000..630c58204d2
--- /dev/null
+++ b/maps/submaps/surface_submaps/wilderness/kururakden.dmm
@@ -0,0 +1,23 @@
+"a" = (/turf/template_noop,/area/template_noop)
+"b" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/KururakDen)
+"c" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/KururakDen)
+"d" = (/obj/random/mob/sif/kururak,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/KururakDen)
+"e" = (/mob/living/simple_mob/animal/sif/kururak/leader,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/KururakDen)
+"f" = (/obj/random/outcrop,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/KururakDen)
+"g" = (/obj/random/junk,/obj/random/medical/pillbottle,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/KururakDen)
+"h" = (/obj/random/junk,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/KururakDen)
+"i" = (/obj/random/powercell,/obj/random/unidentified_medicine/old_medicine,/obj/random/trash,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/KururakDen)
+"j" = (/obj/random/humanoidremains,/obj/random/coin,/obj/random/contraband,/obj/random/projectile/random,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/KururakDen)
+
+(1,1,1) = {"
+aaaaaaaaaa
+aaaaabbaaa
+aaabbbbbaa
+aabbbfbbaa
+aacbgdccaa
+abhdccibaa
+abfcefbbaa
+abbdjbbaaa
+abbbbbbaaa
+aaaaaaaaaa
+"}
diff --git a/maps/submaps/surface_submaps/wilderness/wilderness.dm b/maps/submaps/surface_submaps/wilderness/wilderness.dm
index 7d084f4a853..af854a00178 100644
--- a/maps/submaps/surface_submaps/wilderness/wilderness.dm
+++ b/maps/submaps/surface_submaps/wilderness/wilderness.dm
@@ -22,6 +22,7 @@
#include "Rockybase.dmm"
#include "MHR.dmm"
#include "GovPatrol.dmm"
+#include "kururakden.dmm"
#include "DecoupledEngine.dmm"
#include "DoomP.dmm"
#include "CaveS.dmm"
@@ -202,6 +203,12 @@
mappath = 'maps/submaps/surface_submaps/wilderness/GovPatrol.dmm'
cost = 5
+/datum/map_template/surface/wilderness/normal/KururakDen
+ name = "Kururak Den"
+ desc = "The den of a Kururak pack. May contain hibernating members."
+ mappath = 'maps/submaps/surface_submaps/wilderness/kururakden.dmm'
+ cost = 5
+
/datum/map_template/surface/wilderness/normal/DecoupledEngine
name = "Decoupled Engine"
desc = "A damaged fission engine jettisoned from a starship long ago."
@@ -272,4 +279,10 @@
name = "Acrid Lake"
desc = "A pool of water contaminated with highly dangerous chemicals."
mappath = 'maps/submaps/surface_submaps/wilderness/chemspill2.dmm'
- cost = 10
\ No newline at end of file
+ cost = 10
+
+/datum/map_template/surface/wilderness/normal/FrostflyNest
+ name = "Frostfly Nest"
+ desc = "The nest of a Frostfly, or more."
+ mappath = 'maps/submaps/surface_submaps/wilderness/FrostflyNest.dmm'
+ cost = 20
diff --git a/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm b/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm
index 185ddd433f9..4f41a473f8a 100644
--- a/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm
+++ b/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm
@@ -95,6 +95,10 @@
name = "POI - Lost Government Patrol"
ambience = AMBIENCE_GHOSTLY
+/area/submap/KururakDen
+ name = "POI - Kururak Den"
+ ambience = AMBIENCE_SIF
+
/area/submap/DecoupledEngine
name = "POI - Decoupled Engine"
ambience = AMBIENCE_FOREBODING
@@ -138,3 +142,7 @@
/area/submap/ChemSpill2
name = "POI - Acrid Lake"
ambience = AMBIENCE_FOREBODING
+
+/area/submap/FrostflyNest
+ name = "POI - Frostfly Nest"
+ ambience = AMBIENCE_SIF
diff --git a/maps/tether/submaps/om_ships/curashuttle.dmm b/maps/tether/submaps/om_ships/curashuttle.dmm
index 10d24490bb5..91c134a7cd7 100644
--- a/maps/tether/submaps/om_ships/curashuttle.dmm
+++ b/maps/tether/submaps/om_ships/curashuttle.dmm
@@ -1076,7 +1076,7 @@
/obj/machinery/atmospherics/pipe/simple/visible/universal{
dir = 4
},
-/obj/machinery/autolathe,
+/obj/machinery/recharge_station,
/turf/simulated/floor/tiled/techfloor/grid,
/area/shuttle/curabitur/curashuttle/eng)
"bV" = (
@@ -1275,6 +1275,7 @@
/turf/simulated/floor/tiled/techfloor/grid,
/area/shuttle/curabitur/curashuttle/eng)
"cq" = (
+/obj/machinery/portable_atmospherics/canister/phoron,
/turf/simulated/floor/tiled/techfloor/grid,
/area/shuttle/curabitur/curashuttle/eng)
"cr" = (
@@ -1323,7 +1324,7 @@
/obj/machinery/atmospherics/pipe/simple/visible/red{
dir = 9
},
-/obj/machinery/portable_atmospherics/canister/phoron,
+/obj/machinery/autolathe,
/turf/simulated/floor/tiled/techfloor/grid,
/area/shuttle/curabitur/curashuttle/eng)
"cx" = (
diff --git a/maps/tether/submaps/om_ships/shelter_6.dmm b/maps/tether/submaps/om_ships/shelter_6.dmm
index 5d92740312d..e80de136a1c 100644
--- a/maps/tether/submaps/om_ships/shelter_6.dmm
+++ b/maps/tether/submaps/om_ships/shelter_6.dmm
@@ -1431,6 +1431,12 @@
dir = 9
},
/obj/item/weapon/inducer/hybrid,
+/obj/item/weapon/cell/device/weapon/recharge/alien/hybrid,
+/obj/item/weapon/cell/device/weapon/recharge/alien/hybrid,
+/obj/item/weapon/cell/device/weapon/recharge/alien/hybrid,
+/obj/item/weapon/cell/device/weapon/recharge/alien/hybrid,
+/obj/item/weapon/circuitboard/machine/abductor/core/hybrid,
+/obj/item/weapon/circuitboard/machine/abductor/core/hybrid,
/turf/simulated/floor/tiled/techmaint,
/area/shuttle/tabiranth)
"bk" = (
diff --git a/vorestation.dme b/vorestation.dme
index 0f2cb48d5df..5c3cfcf5b55 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -1342,8 +1342,6 @@
#include "code\game\objects\structures\fireaxe.dm"
#include "code\game\objects\structures\fitness.dm"
#include "code\game\objects\structures\fitness_vr.dm"
-#include "code\game\objects\structures\flora.dm"
-#include "code\game\objects\structures\flora_vr.dm"
#include "code\game\objects\structures\girders.dm"
#include "code\game\objects\structures\gravemarker.dm"
#include "code\game\objects\structures\grille.dm"
@@ -1419,6 +1417,8 @@
#include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\security.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\security_vr.dm"
+#include "code\game\objects\structures\flora\flora.dm"
+#include "code\game\objects\structures\flora\flora_vr.dm"
#include "code\game\objects\structures\flora\grass.dm"
#include "code\game\objects\structures\flora\trees.dm"
#include "code\game\objects\structures\ghost_pods\ghost_pods.dm"
@@ -1917,6 +1917,7 @@
#include "code\modules\clothing\under\accessories\storage.dm"
#include "code\modules\clothing\under\accessories\torch.dm"
#include "code\modules\clothing\under\accessories\torch_vr.dm"
+#include "code\modules\clothing\under\accessories\temperature\poncho.dm"
#include "code\modules\clothing\under\jobs\civilian.dm"
#include "code\modules\clothing\under\jobs\engineering.dm"
#include "code\modules\clothing\under\jobs\medsci.dm"
@@ -2582,11 +2583,13 @@
#include "code\modules\mob\living\simple_mob\combat.dm"
#include "code\modules\mob\living\simple_mob\defense.dm"
#include "code\modules\mob\living\simple_mob\hands.dm"
+#include "code\modules\mob\living\simple_mob\harvesting.dm"
#include "code\modules\mob\living\simple_mob\life.dm"
#include "code\modules\mob\living\simple_mob\on_click.dm"
#include "code\modules\mob\living\simple_mob\simple_hud.dm"
#include "code\modules\mob\living\simple_mob\simple_mob.dm"
#include "code\modules\mob\living\simple_mob\simple_mob_vr.dm"
+#include "code\modules\mob\living\simple_mob\taming.dm"
#include "code\modules\mob\living\simple_mob\subtypes\animal\animal.dm"
#include "code\modules\mob\living\simple_mob\subtypes\animal\borer\borer.dm"
#include "code\modules\mob\living\simple_mob\subtypes\animal\borer\borer_captive.dm"
@@ -2668,7 +2671,6 @@
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\mercs\mercs.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\mercs\mercs_vr.dm"
#include "code\modules\mob\living\simple_mob\subtypes\illusion\illusion.dm"
-#include "code\modules\mob\living\simple_mob\subtypes\mechanical\combat_drone.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\corrupt_maint_drone_vr.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\disbot_vr.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\golem.dm"
@@ -2677,6 +2679,8 @@
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mechanical_vr.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\viscerator.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\wahlem_vr.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\drones\combat_drone.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\drones\mining_drone.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\hivebot.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\hivebot_vr.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\ranged_damage.dm"
@@ -3044,6 +3048,7 @@
#include "code\modules\power\tesla\telsa_construction.dm"
#include "code\modules\power\tesla\tesla_act.dm"
#include "code\modules\projectiles\ammunition.dm"
+#include "code\modules\projectiles\broken.dm"
#include "code\modules\projectiles\dnalocking.dm"
#include "code\modules\projectiles\gun.dm"
#include "code\modules\projectiles\projectile.dm"
@@ -3052,6 +3057,10 @@
#include "code\modules\projectiles\ammunition\magnetic.dm"
#include "code\modules\projectiles\ammunition\rounds.dm"
#include "code\modules\projectiles\ammunition\smartmag.dm"
+#include "code\modules\projectiles\brokenguns\energy.dm"
+#include "code\modules\projectiles\brokenguns\launcher.dm"
+#include "code\modules\projectiles\brokenguns\magnetic.dm"
+#include "code\modules\projectiles\brokenguns\projectile.dm"
#include "code\modules\projectiles\guns\energy.dm"
#include "code\modules\projectiles\guns\launcher.dm"
#include "code\modules\projectiles\guns\modular_guns.dm"
@@ -3463,6 +3472,8 @@
#include "code\modules\xenoarcheaology\artifacts\crystal.dm"
#include "code\modules\xenoarcheaology\artifacts\gigadrill.dm"
#include "code\modules\xenoarcheaology\artifacts\replicator.dm"
+#include "code\modules\xenoarcheaology\artifacts\predefined\_predefined.dm"
+#include "code\modules\xenoarcheaology\artifacts\predefined\hungry_statue.dm"
#include "code\modules\xenoarcheaology\effects\animate_anomaly.dm"
#include "code\modules\xenoarcheaology\effects\badfeeling.dm"
#include "code\modules\xenoarcheaology\effects\berserk.dm"