diff --git a/code/datums/uplink/ammunition.dm b/code/datums/uplink/ammunition.dm
index 3ed884316a..8b853aed63 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/game/objects/effects/alien/aliens.dm b/code/game/objects/effects/alien/aliens.dm
index d8b0821a4d..a8f8e6a634 100644
--- a/code/game/objects/effects/alien/aliens.dm
+++ b/code/game/objects/effects/alien/aliens.dm
@@ -160,8 +160,8 @@
#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
@@ -185,25 +185,28 @@
/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/New(var/newloc, var/newcolor = "#321D37")
+ var/obj/effect/alien/weeds/existing = locate() in get_turf(newloc)
+ if(existing)
+ qdel(existing)
+
+ if(newcolor)
+ set_color = newcolor
+
+ ..(newloc, src)
/obj/effect/alien/weeds/node/Initialize()
..()
START_PROCESSING(SSobj, src)
- spawn(1 SECOND)
- if(color)
- set_color = color
-
/obj/effect/alien/weeds/node/Destroy()
STOP_PROCESSING(SSobj, src)
..()
@@ -272,12 +275,15 @@ Alien plants should do something if theres a lot of poison
qdel(src)
return
- if(!linked_node || (get_dist(linked_node, src) > linked_node.node_range) )
+ if(!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)
diff --git a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm
index d4f65fc9d1..e48606a2ac 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 d901aeaa61..a5c70aab2c 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 59d56b6c7c..36cef4e4c4 100644
--- a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm
+++ b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm
@@ -109,12 +109,13 @@
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"
+<<<<<<< HEAD
//VOREStation edit: medigun
/obj/effect/projectile/tracer/medigun
icon = 'icons/obj/projectiles_vr.dmi'
@@ -122,4 +123,11 @@
light_range = 2
light_power = 0.5
light_color = "#80F5FF"
-//VOREStation edit ends
\ No newline at end of file
+//VOREStation edit ends
+=======
+/obj/effect/projectile/tracer/cannon
+ icon_state = "cannon"
+ light_range = 1
+ light_power = 0.5
+ light_color = "#f6f2b6"
+>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960)
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index b0be23eb3f..8f300aaaf7 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 317920e5dc..f431bc74fe 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 346f8baa65..5128657811 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 62dde5a3df..a3411ef6fe 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 2c97432955..fe53d2ef55 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 966498a2bd..426f6f7986 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."
@@ -203,3 +232,129 @@
prob(30);/mob/living/simple_mob/animal/passive/mouse/brown,
prob(30);/mob/living/simple_mob/animal/passive/mouse/gray,
prob(25);/obj/random/mouseremains) //because figuring out how to come up with it picking nothing is beyond my coding ability.
+
+// Mercs
+/obj/random/mob/merc
+ name = "Random Mercenary"
+ desc = "This is a random PoI mercenary."
+ icon_state = "syndicate"
+
+ mob_faction = "syndicate"
+ mob_returns_home = 1
+ mob_wander_distance = 7 // People like to wander, and these people probably have a lot of stuff to guard.
+
+/obj/random/mob/merc/item_to_spawn()
+ return pick(prob(60);/mob/living/simple_mob/humanoid/merc/melee/poi,
+ prob(40);/mob/living/simple_mob/humanoid/merc/melee/sword/poi,
+ prob(40);/mob/living/simple_mob/humanoid/merc/ranged/poi,
+ prob(30);/mob/living/simple_mob/humanoid/merc/ranged/smg/poi,
+ prob(20);/mob/living/simple_mob/humanoid/merc/ranged/laser/poi,
+ prob(5);/mob/living/simple_mob/humanoid/merc/ranged/ionrifle/poi,
+ prob(10);/mob/living/simple_mob/humanoid/merc/ranged/grenadier/poi,
+ prob(10);/mob/living/simple_mob/humanoid/merc/ranged/rifle/poi,
+ prob(15);/mob/living/simple_mob/humanoid/merc/ranged/rifle/mag/poi,
+ prob(10);/mob/living/simple_mob/humanoid/merc/ranged/technician/poi
+ )
+
+/obj/random/mob/merc/armored
+ name = "Random Armored Infantry Merc"
+ desc = "This is a random PoI exo or robot for mercs."
+ icon_state = "drone3"
+
+/obj/random/mob/merc/armored/item_to_spawn()
+ return pick(prob(30);/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark,
+ prob(40);/mob/living/simple_mob/mechanical/mecha/combat/gygax/medgax,
+ prob(40);/mob/living/simple_mob/mechanical/mecha/combat/gygax,
+ prob(10);/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/mercenary,
+ prob(60);/mob/living/simple_mob/mechanical/mecha/hoverpod/manned,
+ prob(5);/mob/living/simple_mob/mechanical/mecha/combat/marauder,
+ prob(1);/mob/living/simple_mob/mechanical/mecha/combat/marauder/seraph,
+ prob(15);/mob/living/simple_mob/mechanical/mecha/odysseus/manned,
+ prob(15);/mob/living/simple_mob/mechanical/mecha/odysseus/murdysseus/manned,
+ prob(60);/mob/living/simple_mob/mechanical/mecha/ripley/manned
+ )
+
+/obj/random/mob/merc/all
+ name = "Random Mercenary All"
+ desc = "A random PoI mercenary, including armored."
+
+/obj/random/mob/merc/all/item_to_spawn()
+ return pick(prob(20);/obj/random/mob/merc,
+ prob(1);/obj/random/mob/merc/armored
+ )
+
+// Multiple mobs, one spawner.
+/obj/random/mob/multiple
+ name = "Random Multiple Mob Spawner"
+ desc = "A base multiple-mob spawner. Takes lists of lists."
+
+/obj/random/mob/multiple/spawn_item()
+ var/list/things_to_make = item_to_spawn()
+
+ for(var/new_type in things_to_make)
+
+ var/mob/living/simple_mob/M = new new_type(src.loc)
+
+ if(!istype(M))
+ continue
+
+ if(M.has_AI())
+ var/datum/ai_holder/AI = M.ai_holder
+ AI.go_sleep() //Don't fight eachother while we're still setting up!
+ AI.returns_home = mob_returns_home
+ AI.wander = mob_wander
+ AI.max_home_distance = mob_wander_distance
+ if(overwrite_hostility)
+ AI.hostile = mob_hostile
+ AI.retaliate = mob_retaliate
+ AI.go_wake() //Now you can kill eachother if your faction didn't override.
+
+ if(pixel_x || pixel_y)
+ M.pixel_x = pixel_x
+ M.pixel_y = pixel_y
+
+/obj/random/mob/multiple/sifmobs
+ name = "Random Sifmob Pack"
+ desc = "A pack of random neutral sif mobs."
+
+/obj/random/mob/multiple/sifmobs/item_to_spawn()
+ return pick(
+ prob(60);list(
+ /mob/living/simple_mob/animal/sif/diyaab,
+ /mob/living/simple_mob/animal/sif/diyaab,
+ /mob/living/simple_mob/animal/sif/diyaab
+ ),
+ prob(30);list(
+ /mob/living/simple_mob/animal/sif/shantak/retaliate,
+ /mob/living/simple_mob/animal/sif/shantak/retaliate,
+ /mob/living/simple_mob/animal/sif/shantak/retaliate,
+ /mob/living/simple_mob/animal/sif/shantak/leader/autofollow/retaliate
+ ),
+ prob(20);list(
+ /mob/living/simple_mob/animal/sif/duck,
+ /mob/living/simple_mob/animal/sif/duck,
+ /mob/living/simple_mob/animal/sif/duck
+ ),
+ prob(10);list(
+ /mob/living/simple_mob/animal/sif/kururak/leader,
+ /mob/living/simple_mob/animal/sif/kururak,
+ /mob/living/simple_mob/animal/sif/kururak
+ ),
+ prob(5);list(
+ /mob/living/simple_mob/animal/sif/glitterfly,
+ /mob/living/simple_mob/animal/sif/glitterfly,
+ /mob/living/simple_mob/animal/sif/glitterfly,
+ /mob/living/simple_mob/animal/sif/glitterfly,
+ /mob/living/simple_mob/animal/sif/glitterfly
+ ),
+ prob(1);list(
+ /mob/living/simple_mob/animal/goat,
+ /mob/living/simple_mob/animal/goat
+ ),
+ prob(1);list(
+ /mob/living/simple_mob/animal/sif/sakimm/intelligent,
+ /mob/living/simple_mob/animal/sif/sakimm,
+ /mob/living/simple_mob/animal/sif/sakimm,
+ /mob/living/simple_mob/animal/sif/sakimm
+ )
+ )
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/coffin.dm b/code/game/objects/structures/crates_lockers/closets/coffin.dm
index 9257c2d3a3..7ea80de7ff 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 1b5548cdb4..a0f2c8c307 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/grass.dm b/code/game/objects/structures/flora/grass.dm
index d5e7e965a8..92717f4beb 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 c67348a94a..c4d8f58ebd 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 e557fb16da..ad30c8bb88 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
@@ -32,6 +39,12 @@ var/list/grass_types = list(
grass_chance = 5
var/tree_chance = 2
+ animal_chance = 0.5
+
+ animal_types = list(
+ /obj/random/mob/multiple/sifmobs = 1
+ )
+
grass_types = list(
/obj/structure/flora/sif/eyes = 1,
/obj/structure/flora/sif/tendrils = 10
@@ -53,6 +66,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 736ee2bc9a..283406d6ba 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/under/accessories/armor.dm b/code/modules/clothing/under/accessories/armor.dm
index b440c0b834..9ef80846ee 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 0000000000..f1815760b8
--- /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 a0e794929f..800ba8e3ec 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 e44025de7b..d8187fb24e 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 4c18c2aac3..cbdeaca55c 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 6ca62df220..848b5a10e7 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 67fc816298..01cfd9bc62 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/survey_vendor.dm b/code/modules/mining/ore_redemption_machine/survey_vendor.dm
index 7003c2b832..49c16763b3 100644
--- a/code/modules/mining/ore_redemption_machine/survey_vendor.dm
+++ b/code/modules/mining/ore_redemption_machine/survey_vendor.dm
@@ -21,6 +21,7 @@
new /datum/data/mining_equipment("Laser Pointer", /obj/item/device/laser_pointer, 90),
new /datum/data/mining_equipment("Geiger Counter", /obj/item/device/geiger, 75),
new /datum/data/mining_equipment("Plush Toy", /obj/random/plushie, 30),
+<<<<<<< HEAD
new /datum/data/mining_equipment("Extraction Equipment - Fulton Beacon",/obj/item/fulton_core, 300),
new /datum/data/mining_equipment("Extraction Equipment - Fulton Pack",/obj/item/extraction_pack, 125),
new /datum/data/mining_equipment("Umbrella", /obj/item/weapon/melee/umbrella/random, 20),
@@ -52,6 +53,30 @@
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("Umbrella", /obj/item/weapon/melee/umbrella/random, 10),
+ new /datum/data/mining_equipment("Extraction Equipment - Fulton Beacon", /obj/item/fulton_core, 100),
+ new /datum/data/mining_equipment("Extraction Equipment - Fulton Pack", /obj/item/extraction_pack, 50),
+ new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card/survey, 50),
+ 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, 50),
+ new /datum/data/mining_equipment("Direct Payment - 1000", /obj/item/weapon/spacecash/c1000, 500),
+ new /datum/data/mining_equipment("Industrial Equipment - Phoron Bore", /obj/item/weapon/gun/magnetic/matfed, 500),
+ new /datum/data/mining_equipment("Survey Tools - Shovel", /obj/item/weapon/shovel, 20),
+ new /datum/data/mining_equipment("Survey Tools - Mechanical Trap", /obj/item/weapon/beartrap, 30),
+ new /datum/data/mining_equipment("Digital Tablet - Standard", /obj/item/modular_computer/tablet/preset/custom_loadout/standard, 100),
+ new /datum/data/mining_equipment("Digital Tablet - Advanced", /obj/item/modular_computer/tablet/preset/custom_loadout/advanced, 300),
+ new /datum/data/mining_equipment("Injector (L) - Glucose",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, 30),
+ new /datum/data/mining_equipment("Injector (L) - Panacea",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity, 30),
+ new /datum/data/mining_equipment("Injector (L) - Trauma",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute, 50),
+ new /datum/data/mining_equipment("Nanopaste Tube", /obj/item/stack/nanopaste, 50),
+ new /datum/data/mining_equipment("Defense Equipment - Phase Pistol",/obj/item/weapon/gun/energy/phasegun/pistol, 15),
+ new /datum/data/mining_equipment("Defense Equipment - Smoke Bomb",/obj/item/weapon/grenade/smokebomb, 50),
+ new /datum/data/mining_equipment("Defense Equipment - Razor Drone Deployer",/obj/item/weapon/grenade/spawnergrenade/manhacks/station, 50),
+ new /datum/data/mining_equipment("Defense Equipment - Sentry Drone Deployer",/obj/item/weapon/grenade/spawnergrenade/ward, 100),
+ new /datum/data/mining_equipment("Defense Equipment - Steel Machete", /obj/item/weapon/material/knife/machete, 50),
+ new /datum/data/mining_equipment("Survival Equipment - Insulated Poncho", /obj/random/thermalponcho, 75)
+>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960)
)
//VOREStation Edit End
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index cb745aea2e..00d28f1113 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 34530434f1..b73bac92e4 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/xenomorphs/alien_powers.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm
index 543acb842f..f9c68c331f 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/simple_mob/defense.dm b/code/modules/mob/living/simple_mob/defense.dm
index c09bf272cc..a8234ac970 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/harvesting.dm b/code/modules/mob/living/simple_mob/harvesting.dm
new file mode 100644
index 0000000000..74991920a8
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/harvesting.dm
@@ -0,0 +1,42 @@
+
+/mob/living/simple_mob
+ // What do you hit the mob with (on help) to get something from it?
+ var/obj/harvest_tool
+ // How long do we have to wait until it's harvestable again?
+ var/harvest_cooldown = 10 MINUTES
+ // How long does it take to harvest?
+ var/harvest_delay = 30 SECONDS
+ // What world.time was the last harvest?
+ var/harvest_recent = 0
+ // How many times can we roll at max on the chance table?
+ var/harvest_per_hit = 1
+ // Verb for harvesting. "sheared" "clipped" etc.
+ var/harvest_verb = "harvested"
+ // Associative list of paths and their chances. path = straws in the lot
+ var/list/harvest_results
+
+/mob/living/simple_mob/examine(mob/user)
+ ..(user)
+ if(user && harvest_tool && (get_dist(user, src) <= 3))
+ to_chat(user, "\The [src] can be [harvest_verb] with a [initial(harvest_tool.name)] every [round(harvest_cooldown, 0.1)] minutes.")
+ var/time_to_harvest = (harvest_recent + harvest_cooldown) - world.time
+ if(time_to_harvest > 0)
+ to_chat(user, "It can be [harvest_verb] in [time_to_harvest / (1 MINUTE)] second(s).")
+ else
+ to_chat(user, "It can be [harvest_verb] now.")
+
+/mob/living/simple_mob/proc/livestock_harvest(var/obj/item/tool, var/mob/living/user)
+ if(!LAZYLEN(harvest_results)) // Might be a unique interaction of an object using the proc to do something weird, or just someone's a donk.
+ harvest_recent = world.time
+ return
+
+ if(istype(tool, harvest_tool)) // Sanity incase something incorrect is passed in.
+ harvest_recent = world.time
+
+ var/max_harvests = rand(1,harvest_per_hit)
+
+ for(var/I = 1 to max_harvests)
+ var/new_path = pickweight(harvest_results)
+ new new_path(get_turf(user))
+
+ 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 6cd5ea9c5b..3721168ff9 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 39e2edcb7d..94bb77ee71 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 06d4eb4caa..87c05b317d 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 790681a3fc..198f99a3f4 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 0845eacc71..f934ab1ec8 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 0aa74f9e6b..10f7ddc2cf 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 ae1abb363f..3687a67c51 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 22c2d02082..37ac83614e 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 2019859f3f..f948da609f 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 abc8811372..2dcb5b8b51 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 a6948a3e00..88321f6bd4 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,18 @@
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
+<<<<<<< HEAD
//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"
+=======
+/mob/living/simple_mob/animal/sif/shantak/leader/autofollow/retaliate
+ ai_holder_type = /datum/ai_holder/simple_mob/retaliate
+>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960)
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 8d19324cf2..dab82b850b 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 3973a17add..5bdddb9542 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 0000000000..5c6660e67c
--- /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 f5baafcc24..a8aff85526 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,16 @@
// Variant that starts in defense mode, perhaps for PoIs.
/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/Initialize()
set_defense_mode(TRUE)
+<<<<<<< HEAD
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
+>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960)
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 0000000000..e24b675c5b
--- /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 b187f325bd..1dd8f6e149 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 0000000000..99b6ffbfd1
--- /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 0000000000..6427e89c27
--- /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 0000000000..a66449de78
--- /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 0000000000..dd1c647fd8
--- /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 0000000000..741e4bf087
--- /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 45c6364c1b..778b36694d 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 3fe7a4f21c..f47053cba0 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 ab107fb0b5..d3903c21a8 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 8426448d6c..435260b45e 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 74896b6b6a..9862b71b06 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 e05739d194..d1a6f22b4d 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 132ac6ccf4..ca3f1c8f51 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 2cd0519285..ac039460cb 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/xenoarcheaology/artifacts/artifact.dm b/code/modules/xenoarcheaology/artifacts/artifact.dm
index 7ecf912cfb..60e3543e19 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 0000000000..edec0dd052
--- /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 0000000000..6a81c02b8b
--- /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/html/changelogs/mechoid-newhorizon.yml b/html/changelogs/mechoid-newhorizon.yml
new file mode 100644
index 0000000000..e9740680a3
--- /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 6c631498f6..4115b01ef2 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 e956f35874..0c0dce59bc 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 1372ff9a5e..119f56d6b5 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 157c3c11f6..73c39449bb 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 1b753e9c87..1a56a0be84 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 3495683205..32346c5a5e 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 e44e5185f8..909a59a7f2 100644
--- a/maps/submaps/surface_submaps/mountains/CaveTrench.dmm
+++ b/maps/submaps/surface_submaps/mountains/CaveTrench.dmm
@@ -1,4 +1,5 @@
"a" = (/turf/template_noop,/area/template_noop)
+<<<<<<< HEAD
"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)
@@ -13,6 +14,43 @@
"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)
+>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle.dmm b/maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle.dmm
index 9b19efeea7..adeb82580f 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 0000000000..169efe4eb5
--- /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 62cb5c4a26..e9433c68f3 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
@@ -337,6 +338,17 @@
/datum/map_template/surface/mountains/normal/crashedmedshuttle //VOREStation Edit
name = "Crashed Med Shuttle"
desc = "A medical response shuttle that went missing some time ago. So this is where they went."
+<<<<<<< HEAD
mappath = 'maps/submaps/surface_submaps/mountains/CrashedMedShuttle1_vr.dmm' //VOREStation Edit
cost = 20
fixed_orientation = TRUE
+=======
+ mappath = 'maps/submaps/surface_submaps/mountains/CrashedMedShuttle1.dmm'
+ cost = 20
+
+/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
+>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960)
diff --git a/maps/submaps/surface_submaps/mountains/mountains_areas.dm b/maps/submaps/surface_submaps/mountains/mountains_areas.dm
index 00700bd7db..a6968fac98 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 0000000000..0018404dca
--- /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 0000000000..f10b287e69
--- /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 0000000000..fdc989871d
--- /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 0000000000..f3a43e4c91
--- /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 57a27da7c5..f8b8327363 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 f8f017af3d..6c8293c325 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
@@ -213,5 +217,37 @@
/datum/map_template/surface/plains/ChemSpill1
name = "Ruptured Canister"
desc = "A dumped chemical canister. Looks dangerous."
+<<<<<<< HEAD
mappath = 'maps/submaps/surface_submaps/plains/chemspill1_vr.dmm' //VOREStation Edit
cost = 10
+=======
+ mappath = 'maps/submaps/surface_submaps/plains/chemspill1.dmm'
+ 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"
+>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960)
diff --git a/maps/submaps/surface_submaps/plains/plains_areas.dm b/maps/submaps/surface_submaps/plains/plains_areas.dm
index f6e6d9677c..5889576757 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 7bf4c4d921..426c4c67bf 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 02560d6ea8..a681497ed8 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 b856b7a229..08c32f5710 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 3d8f3257a3..12d8173eaf 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 0000000000..ccb107a33f
--- /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 cc70345858..604b970b92 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 e041c8a549..3b985d359b 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 0000000000..630c58204d
--- /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 7d084f4a85..af854a0017 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 185ddd433f..4f41a473f8 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/vorestation.dme b/vorestation.dme
index 0f2cb48d5d..ddf721bcb3 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -1341,9 +1341,12 @@
#include "code\game\objects\structures\fence.dm"
#include "code\game\objects\structures\fireaxe.dm"
#include "code\game\objects\structures\fitness.dm"
+<<<<<<< HEAD:vorestation.dme
#include "code\game\objects\structures\fitness_vr.dm"
#include "code\game\objects\structures\flora.dm"
#include "code\game\objects\structures\flora_vr.dm"
+=======
+>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960):polaris.dme
#include "code\game\objects\structures\girders.dm"
#include "code\game\objects\structures\gravemarker.dm"
#include "code\game\objects\structures\grille.dm"
@@ -1418,7 +1421,11 @@
#include "code\game\objects\structures\crates_lockers\closets\secure\scientist.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\security.dm"
+<<<<<<< HEAD:vorestation.dme
#include "code\game\objects\structures\crates_lockers\closets\secure\security_vr.dm"
+=======
+#include "code\game\objects\structures\flora\flora.dm"
+>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960):polaris.dme
#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"
@@ -1916,7 +1923,11 @@
#include "code\modules\clothing\under\accessories\permits_vr.dm"
#include "code\modules\clothing\under\accessories\storage.dm"
#include "code\modules\clothing\under\accessories\torch.dm"
+<<<<<<< HEAD:vorestation.dme
#include "code\modules\clothing\under\accessories\torch_vr.dm"
+=======
+#include "code\modules\clothing\under\accessories\temperature\poncho.dm"
+>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960):polaris.dme
#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 +2593,16 @@
#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"
+<<<<<<< HEAD:vorestation.dme
#include "code\modules\mob\living\simple_mob\simple_mob_vr.dm"
+=======
+#include "code\modules\mob\living\simple_mob\taming.dm"
+>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960):polaris.dme
#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,15 +2684,23 @@
#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"
+<<<<<<< HEAD:vorestation.dme
#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"
+=======
+>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960):polaris.dme
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\golem.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\golem_vr.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mechanical.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mechanical_vr.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\viscerator.dm"
+<<<<<<< HEAD:vorestation.dme
#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"
+>>>>>>> aafd4b4... Explorer Expansion: New Horizons (#6960):polaris.dme
#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 +3068,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 +3077,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 +3492,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"