diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index c616d1ee5b0..673e3663132 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -112,7 +112,7 @@ Class Procs:
var/panel_open = 0
var/global/gl_uid = 1
var/interact_offline = 0 // Can the machine be interacted with while de-powered.
- var/circuit = null
+ var/obj/item/weapon/circuitboard/circuit = null
/obj/machinery/New(l, d=0)
..(l)
@@ -402,7 +402,7 @@ Class Procs:
if(A.frame_type.circuit)
A.need_circuit = 0
- if(A.frame_type.frame_class == "machine")
+ if(A.frame_type.frame_class == FRAME_CLASS_MACHINE)
for(var/obj/D in component_parts)
D.forceMove(src.loc)
if(A.components)
@@ -412,15 +412,15 @@ Class Procs:
component_parts = list()
A.check_components()
- if(A.frame_type.frame_class == "alarm")
- A.state = 2
- else if(A.frame_type.frame_class == "computer" || A.frame_type.frame_class == "display")
+ if(A.frame_type.frame_class == FRAME_CLASS_ALARM)
+ A.state = FRAME_FASTENED
+ else if(A.frame_type.frame_class == FRAME_CLASS_COMPUTER || A.frame_type.frame_class == FRAME_CLASS_DISPLAY)
if(stat & BROKEN)
- A.state = 3
+ A.state = FRAME_WIRED
else
- A.state = 4
+ A.state = FRAME_PANELED
else
- A.state = 3
+ A.state = FRAME_WIRED
A.set_dir(dir)
A.pixel_x = pixel_x
@@ -430,4 +430,4 @@ Class Procs:
M.loc = null
M.deconstruct(src)
qdel(src)
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm
index e858100e637..47fa55be1a3 100644
--- a/code/game/objects/effects/mines.dm
+++ b/code/game/objects/effects/mines.dm
@@ -1,6 +1,6 @@
/obj/effect/mine
- name = "mine"
- desc = "A small explosive mine with 'HE' and a grenade symbol on the side."
+ name = "land mine" //The name and description are deliberately NOT modified, so you can't game the mines you find.
+ desc = "A small explosive land mine."
density = 0
anchored = 1
icon = 'icons/obj/weapons.dmi'
@@ -21,6 +21,7 @@
s.set_up(3, 1, src)
s.start()
explosion(loc, 0, 2, 3, 4) //land mines are dangerous, folks.
+ visible_message("\The [src.name] detonates!")
qdel(s)
qdel(src)
@@ -38,10 +39,12 @@
/obj/effect/mine/Bumped(mob/M as mob|obj)
- if(triggered) return
+ if(triggered)
+ return
if(istype(M, /mob/living/))
- explode(M)
+ if(!M.hovering)
+ explode(M)
/obj/effect/mine/attackby(obj/item/W as obj, mob/living/user as mob)
if(isscrewdriver(W))
@@ -62,8 +65,6 @@
wires.Interact(user)
/obj/effect/mine/dnascramble
- name = "radiation mine"
- desc = "A small explosive mine with a radiation symbol on the side."
mineitemtype = /obj/item/weapon/mine/dnascramble
/obj/effect/mine/dnascramble/explode(var/mob/living/M)
@@ -71,31 +72,31 @@
triggered = 1
s.set_up(3, 1, src)
s.start()
- M.radiation += 50
- randmutb(M)
- domutcheck(M,null)
+ if(M)
+ M.radiation += 50
+ randmutb(M)
+ domutcheck(M,null)
+ visible_message("\The [src.name] flashes violently before disintegrating!")
spawn(0)
qdel(s)
qdel(src)
/obj/effect/mine/stun
- name = "stun mine"
- desc = "A small explosive mine with a lightning bolt symbol on the side."
mineitemtype = /obj/item/weapon/mine/stun
/obj/effect/mine/stun/explode(var/mob/living/M)
triggered = 1
- M.Stun(30)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
s.set_up(3, 1, src)
s.start()
+ if(M)
+ M.Stun(30)
+ visible_message("\The [src.name] flashes violently before disintegrating!")
spawn(0)
qdel(s)
qdel(src)
/obj/effect/mine/n2o
- name = "nitrous oxide mine"
- desc = "A small explosive mine with three Z's on the side."
mineitemtype = /obj/item/weapon/mine/n2o
/obj/effect/mine/n2o/explode(var/mob/living/M)
@@ -103,12 +104,11 @@
for (var/turf/simulated/floor/target in range(1,src))
if(!target.blocks_air)
target.assume_gas("sleeping_agent", 30)
+ visible_message("\The [src.name] detonates!")
spawn(0)
qdel(src)
/obj/effect/mine/phoron
- name = "incendiary mine"
- desc = "A small explosive mine with a fire symbol on the side."
mineitemtype = /obj/item/weapon/mine/phoron
/obj/effect/mine/phoron/explode(var/mob/living/M)
@@ -117,12 +117,11 @@
if(!target.blocks_air)
target.assume_gas("phoron", 30)
target.hotspot_expose(1000, CELL_VOLUME)
+ visible_message("\The [src.name] detonates!")
spawn(0)
qdel(src)
/obj/effect/mine/kick
- name = "kick mine"
- desc = "Concentrated war crimes. Handle with care."
mineitemtype = /obj/item/weapon/mine/kick
/obj/effect/mine/kick/explode(var/mob/living/M)
@@ -130,14 +129,13 @@
triggered = 1
s.set_up(3, 1, src)
s.start()
- qdel(M.client)
+ if(M)
+ qdel(M.client)
spawn(0)
qdel(s)
qdel(src)
/obj/effect/mine/frag
- name = "fragmentation mine"
- desc = "A small explosive mine with 'FRAG' and a grenade symbol on the side."
mineitemtype = /obj/item/weapon/mine/frag
var/fragment_types = list(/obj/item/projectile/bullet/pellet/fragment)
var/num_fragments = 20 //total number of fragments produced by the grenade
@@ -153,13 +151,14 @@
if(!O)
return
src.fragmentate(O, 20, 7, list(/obj/item/projectile/bullet/pellet/fragment)) //only 20 weak fragments because you're stepping directly on it
+ visible_message("\The [src.name] detonates!")
spawn(0)
qdel(s)
qdel(src)
-/obj/effect/mine/training
- name = "training mine"
- desc = "A mine with its payload removed, for EOD training and demonstrations."
+/obj/effect/mine/training //Name and Desc commented out so it's possible to trick people with the training mines
+// name = "training mine"
+// desc = "A mine with its payload removed, for EOD training and demonstrations."
mineitemtype = /obj/item/weapon/mine/training
/obj/effect/mine/training/explode(var/mob/living/M)
@@ -170,56 +169,62 @@
qdel(src)
/obj/effect/mine/emp
- name = "EMP Mine"
- desc = "A small explosive mine with a lightning bolt symbol on the side."
mineitemtype = /obj/item/weapon/mine/emp
/obj/effect/mine/emp/explode(var/mob/living/M)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
s.set_up(3, 1, src)
s.start()
+ visible_message("\The [src.name] flashes violently before disintegrating!")
empulse(loc, 2, 4, 7, 10, 1) // As strong as an EMP grenade
spawn(0)
qdel(src)
+/obj/effect/mine/incendiary
+ mineitemtype = /obj/item/weapon/mine/incendiary
+
+/obj/effect/mine/incendiary/explode(var/mob/living/M)
+ triggered = 1
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
+ s.set_up(3, 1, src)
+ s.start()
+ if(M)
+ M.adjust_fire_stacks(5)
+ M.fire_act()
+ visible_message("\The [src.name] bursts into flames!")
+ spawn(0)
+ qdel(src)
+
+/////////////////////////////////////////////
+// The held item version of the above mines
+/////////////////////////////////////////////
/obj/item/weapon/mine
name = "mine"
desc = "A small explosive mine with 'HE' and a grenade symbol on the side."
icon = 'icons/obj/weapons.dmi'
icon_state = "uglymine"
- var/arming = 0
var/countdown = 10
- var/minetype = /obj/effect/mine
+ var/minetype = /obj/effect/mine //This MUST be an /obj/effect/mine type, or it'll runtime.
-/obj/item/weapon/mine/attack_self(mob/user as mob)
- if(!arming)
- to_chat(user, "You prime \the [name]! [countdown] seconds!")
- icon_state = initial(icon_state) + "armed"
- arming = 1
+/obj/item/weapon/mine/attack_self(mob/user as mob) // You do not want to move or throw a land mine while priming it... Explosives + Sudden Movement = Bad Times
+ add_fingerprint(user)
+ msg_admin_attack("[user.name] ([user.ckey]) primed \a [src] (JMP)")
+ user.visible_message("[user] starts priming \the [src.name].", "You start priming \the [src.name]. Hold still!")
+ if(do_after(user, 10 SECONDS))
playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
- add_fingerprint(user)
- if(iscarbon(user))
- var/mob/living/carbon/C = user
- C.throw_mode_on()
- spawn(countdown*10)
- if(arming)
- prime()
- if(user)
- msg_admin_attack("[user.name] ([user.ckey]) primed \a [src] (JMP)")
- return
+ prime(user)
else
- to_chat(user, "You cancel \the [name]'s priming sequence.")
- arming = 0
- countdown = initial(countdown)
- icon_state = initial(icon_state)
- add_fingerprint(user)
+ visible_message("[user] triggers \the [src.name]!", "You accidentally trigger \the [src.name]!")
+ prime(user, TRUE)
return
-/obj/item/weapon/mine/proc/prime(mob/user as mob)
+/obj/item/weapon/mine/proc/prime(mob/user as mob, var/explode_now = FALSE)
visible_message("\The [src.name] beeps as the priming sequence completes.")
- var/atom/R = new minetype(get_turf(src))
+ var/obj/effect/mine/R = new minetype(get_turf(src))
src.transfer_fingerprints_to(R)
R.add_fingerprint(user)
+ if(explode_now)
+ R.explode(user)
spawn(0)
qdel(src)
@@ -262,3 +267,8 @@
name = "emp mine"
desc = "A small explosive mine with a lightning bolt symbol on the side."
minetype = /obj/effect/mine/emp
+
+/obj/item/weapon/mine/incendiary
+ name = "incendiary mine"
+ desc = "A small explosive mine with a fire symbol on the side."
+ minetype = /obj/effect/mine/incendiary
\ No newline at end of file
diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm
index 16e9daf9cc3..6c1afb2c834 100644
--- a/code/game/objects/items/robot/robot_items.dm
+++ b/code/game/objects/items/robot/robot_items.dm
@@ -54,6 +54,8 @@
/obj/item/borg/sight/material
name = "\proper material scanner vision"
sight_mode = BORGMATERIAL
+ icon_state = "material"
+ icon = 'icons/obj/clothing/glasses.dmi'
/obj/item/borg/sight/hud
name = "hud"
diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm
index 18674db086d..05ba702853c 100644
--- a/code/game/objects/random/random.dm
+++ b/code/game/objects/random/random.dm
@@ -1123,4 +1123,18 @@ var/list/multi_point_spawns
/obj/item/clothing/suit/space/void/mining/alt,
/obj/item/clothing/head/helmet/space/void/mining/alt
)
- )
\ No newline at end of file
+ )
+
+/obj/random/landmine
+ name = "Random Land Mine"
+ desc = "This is a random land mine."
+ icon = 'icons/obj/weapons.dmi'
+ icon_state = "uglymine"
+ spawn_nothing_percentage = 25
+
+/obj/random/landmine/item_to_spawn()
+ return pick(prob(30);/obj/effect/mine,
+ prob(25);/obj/effect/mine/frag,
+ prob(25);/obj/effect/mine/emp,
+ prob(10);/obj/effect/mine/stun,
+ prob(10);/obj/effect/mine/incendiary,)
\ No newline at end of file
diff --git a/code/game/objects/structures/snowman.dm b/code/game/objects/structures/snowman.dm
new file mode 100644
index 00000000000..b3947621b9a
--- /dev/null
+++ b/code/game/objects/structures/snowman.dm
@@ -0,0 +1,24 @@
+/obj/structure/snowman
+ name = "snowman"
+ icon = 'icons/obj/snowman.dmi'
+ icon_state = "snowman"
+ desc = "A happy little snowman smiles back at you!"
+ anchored = 1
+
+/obj/structure/snowman/attack_hand(mob/user as mob)
+ if(user.a_intent == I_HURT)
+ user << "In one hit, [src] easily crumples into a pile of snow. You monster."
+ var/turf/simulated/floor/F = get_turf(src)
+ if (istype(F))
+ new /obj/item/stack/material/snow(F)
+ qdel(src)
+
+/obj/structure/snowman/borg
+ name = "snowborg"
+ icon_state = "snowborg"
+ desc = "A snowy little robot. It even has a monitor for a head."
+
+/obj/structure/snowman/spider
+ name = "snow spider"
+ icon_state = "snowspider"
+ desc = "An impressively crafted snow spider. Not nearly as creepy as the real thing."
\ No newline at end of file
diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm
index 699125e0b30..f187a54c8f2 100644
--- a/code/game/turfs/simulated/wall_types.dm
+++ b/code/game/turfs/simulated/wall_types.dm
@@ -39,6 +39,8 @@
..(newloc,"silver","gold")
/turf/simulated/wall/sandstonediamond/New(var/newloc)
..(newloc,"sandstone","diamond")
+/turf/simulated/wall/snowbrick/New(var/newloc)
+ ..(newloc,"packed snow")
// Kind of wondering if this is going to bite me in the butt.
/turf/simulated/wall/skipjack/New(var/newloc)
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 7258b265a2d..04740237f11 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -59,7 +59,6 @@ var/list/admin_verbs_admin = list(
/client/proc/check_antagonists,
/client/proc/admin_memo, //admin memo system. show/delete/write. +SERVER needed to delete admin memos of others,
/client/proc/dsay, //talk in deadchat using our ckey/fakekey,
- /client/proc/ghost_view, //let us see ghosts WHENEVERRRR
// /client/proc/toggle_hear_deadcast, //toggles whether we hear deadchat,
/client/proc/investigate_show, //various admintools for investigation. Such as a singulo grief-log,
/client/proc/secrets,
@@ -213,7 +212,6 @@ var/list/admin_verbs_debug = list(
/client/proc/jumptomob,
/client/proc/jumptocoord,
/client/proc/dsay,
- /client/proc/ghost_view,
/client/proc/toggle_debug_logs,
/client/proc/admin_ghost, //allows us to ghost/reenter body at will,
/datum/admins/proc/view_runtimes,
@@ -326,7 +324,6 @@ var/list/admin_verbs_mod = list(
/datum/admins/proc/show_player_info,
/client/proc/player_panel_new,
/client/proc/dsay,
- /client/proc/ghost_view,
/datum/admins/proc/show_skills,
/datum/admins/proc/show_player_panel,
/client/proc/check_antagonists,
@@ -351,7 +348,6 @@ var/list/admin_verbs_event_manager = list(
/client/proc/admin_ghost,
/datum/admins/proc/show_player_info,
/client/proc/dsay,
- /client/proc/ghost_view,
/client/proc/cmd_admin_subtle_message,
/client/proc/debug_variables,
/client/proc/check_antagonists,
@@ -491,26 +487,6 @@ var/list/admin_verbs_event_manager = list(
body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus
feedback_add_details("admin_verb","O") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-/client/proc/ghost_view()
- set category = "Admin"
- set name = "Ghost View"
- set desc = "Toggles ability to see ghosts, even while in a mob."
- if(!holder) return
- if(!mob.plane_holder) return
-
- var/choice = alert(src,"Do you want to see ghosts, or not?","Ghost viewing","Show 'em!","Cancel","Hide 'em!")
- if(choice == "Cancel")
- return
-
- if(choice == "Show 'em!" && mob.plane_holder)
- mob.plane_holder.set_vis(VIS_GHOSTS,TRUE)
- usr.see_invisible = SEE_INVISIBLE_CULT
- to_chat(src,"Ghosts are now visible (while in this mob).")
- else if(mob.plane_holder)
- mob.plane_holder.set_vis(VIS_GHOSTS,FALSE)
- usr.see_invisible = initial(mob.see_invisible)
- to_chat(src,"Ghosts are now hidden (while in this mob).")
-
/client/proc/invisimin()
set name = "Invisimin"
set category = "Admin"
@@ -1046,7 +1022,7 @@ var/list/admin_verbs_event_manager = list(
set category = "Fun"
set name = "Man Up"
set desc = "Tells mob to man up and deal with it."
-
+
if(alert("Are you sure you want to tell them to man up?","Confirmation","Deal with it","No")=="No") return
T << "Man up and deal with it."
@@ -1059,7 +1035,7 @@ var/list/admin_verbs_event_manager = list(
set category = "Fun"
set name = "Man Up Global"
set desc = "Tells everyone to man up and deal with it."
-
+
if(alert("Are you sure you want to tell the whole server up?","Confirmation","Deal with it","No")=="No") return
for (var/mob/T as mob in mob_list)
diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm
index 370306539ae..ef9d0e713db 100644
--- a/code/modules/clothing/gloves/color.dm
+++ b/code/modules/clothing/gloves/color.dm
@@ -9,10 +9,11 @@
desc = "These gloves are cheap copies of proper insulated gloves. No way this can end badly."
name = "budget insulated gloves"
icon_state = "yellow"
- siemens_coefficient = 1 //Set to a default of 1, gets overridden in New()
+ siemens_coefficient = 1 //Set to a default of 1, gets overridden in initialize()
permeability_coefficient = 0.05
-/obj/item/clothing/gloves/fyellow/New()
+/obj/item/clothing/gloves/fyellow/initialize()
+ . = ..()
//Picks a value between 0 and 1, in 5% increments
var/shock_pick = rand(0,20)
siemens_coefficient = shock_pick * 0.05
diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm
index 6a10383f76b..bb5a4674f44 100644
--- a/code/modules/materials/material_recipes.dm
+++ b/code/modules/materials/material_recipes.dm
@@ -167,4 +167,19 @@
/material/snow/generate_recipes()
recipes = list()
- recipes += new/datum/stack_recipe("snowball", /obj/item/weapon/material/snow/snowball, 1, time = 10)
\ No newline at end of file
+ recipes += new/datum/stack_recipe("snowball", /obj/item/weapon/material/snow/snowball, 1, time = 10)
+ recipes += new/datum/stack_recipe("snow brick", /obj/item/stack/material/snowbrick, 2, time = 10)
+ recipes += new/datum/stack_recipe("snowman", /obj/structure/snowman, 2, time = 15)
+ recipes += new/datum/stack_recipe("snow robot", /obj/structure/snowman/borg, 2, time = 10)
+ recipes += new/datum/stack_recipe("snow spider", /obj/structure/snowman/spider, 3, time = 20)
+
+/material/snowbrick/generate_recipes()
+ recipes = list()
+ recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
+ recipes += new/datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
+ recipes += new/datum/stack_recipe("[display_name] stool", /obj/item/weapon/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
+ recipes += new/datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
+ recipes += new/datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
+ recipes += new/datum/stack_recipe("[display_name] double bed", /obj/structure/bed/double, 4, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
+ recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
+ recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
\ No newline at end of file
diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm
index d212851071e..54d56fd7731 100644
--- a/code/modules/materials/material_sheets.dm
+++ b/code/modules/materials/material_sheets.dm
@@ -269,10 +269,16 @@
/obj/item/stack/material/snow
name = "snow"
- desc = "The temptation to build a snowfort rises."
+ desc = "The temptation to build a snowman rises."
icon_state = "sheet-snow"
default_type = "snow"
+/obj/item/stack/material/snowbrick
+ name = "snow brick"
+ desc = "For all of your igloo building needs."
+ icon_state = "sheet-snowbrick"
+ default_type = "packed snow"
+
/obj/item/stack/material/leather
name = "leather"
desc = "The by-product of mob grinding."
diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm
index 2aad17f1804..9137fb416c9 100644
--- a/code/modules/materials/materials.dm
+++ b/code/modules/materials/materials.dm
@@ -752,6 +752,7 @@ var/list/name_to_material
stack_origin_tech = list(TECH_MATERIAL = 1)
door_icon_base = "wood"
destruction_desc = "crumples"
+ radiation_resistance = 1
/material/snow
name = MAT_SNOW
@@ -769,6 +770,25 @@ var/list/name_to_material
destruction_desc = "crumples"
sheet_singular_name = "pile"
sheet_plural_name = "pile" //Just a bigger pile
+ radiation_resistance = 1
+
+/material/snowbrick //only slightly stronger than snow, used to make igloos mostly
+ name = "packed snow"
+ flags = MATERIAL_BRITTLE
+ stack_type = /obj/item/stack/material/snowbrick
+ icon_base = "stone"
+ icon_reinf = "reinf_stone"
+ icon_colour = "#D8FDFF"
+ integrity = 50
+ weight = 2
+ hardness = 2
+ protectiveness = 0 // 0%
+ stack_origin_tech = list(TECH_MATERIAL = 1)
+ melting_point = T0C+1
+ destruction_desc = "crumbles"
+ sheet_singular_name = "brick"
+ sheet_plural_name = "bricks"
+ radiation_resistance = 1
/material/cloth //todo
name = "cloth"
diff --git a/code/modules/mob/_modifiers/traits_phobias.dm b/code/modules/mob/_modifiers/traits_phobias.dm
index c96c6890e64..0fbe099c22e 100644
--- a/code/modules/mob/_modifiers/traits_phobias.dm
+++ b/code/modules/mob/_modifiers/traits_phobias.dm
@@ -204,6 +204,9 @@
if(istype(thing, /obj/item/toy/plushie/spider)) // Plushies are spooky so people can be assholes with them.
fear_amount += 1
+ if(istype(thing, /obj/structure/snowman/spider)) //Snow spiders are also spooky so people can be assholes with those too.
+ fear_amount += 1
+
if(istype(thing, /mob/living/simple_animal/hostile/giant_spider)) // Actual giant spiders are the scariest of them all.
var/mob/living/simple_animal/hostile/giant_spider/S = thing
if(S.stat == DEAD) // Dead giant spiders are less scary than alive ones.
@@ -437,7 +440,7 @@
fear_amount += 1
if(istype(S.species, /datum/species/shapeshifter/promethean))
fear_amount += 4
-
+
return fear_amount
/datum/modifier/trait/phobia/trypanophobe
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index c8250088377..5faa78f10d4 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -214,6 +214,10 @@
return FALSE
/mob/living/proc/handle_darksight()
+ if(!seedarkness) //Cheap 'always darksight' var
+ dsoverlay.alpha = 255
+ return
+
var/darksightedness = min(see_in_dark/world.view,1.0) //A ratio of how good your darksight is, from 'nada' to 'really darn good'
var/current = dsoverlay.alpha/255 //Our current adjustedness
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index 82992581846..349432e3d2f 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -151,7 +151,7 @@
return 1
/mob/living/silicon/robot/handle_regular_hud_updates()
-
+ var/fullbright = FALSE
if (src.stat == 2 || (XRAY in mutations) || (src.sight_mode & BORGXRAY))
src.sight |= SEE_TURFS
src.sight |= SEE_MOBS
@@ -163,18 +163,22 @@
src.sight |= SEE_MOBS
src.see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM
+ fullbright = TRUE
else if (src.sight_mode & BORGMESON)
src.sight |= SEE_TURFS
src.see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM
+ fullbright = TRUE
else if (src.sight_mode & BORGMATERIAL)
src.sight |= SEE_OBJS
src.see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM
+ fullbright = TRUE
else if (src.sight_mode & BORGTHERM)
src.sight |= SEE_MOBS
src.see_in_dark = 8
src.see_invisible = SEE_INVISIBLE_LEVEL_TWO
+ fullbright = TRUE
else if (!seedarkness)
src.sight &= ~SEE_MOBS
src.sight &= ~SEE_TURFS
@@ -188,7 +192,7 @@
src.see_in_dark = 8 // see_in_dark means you can FAINTLY see in the dark, humans have a range of 3 or so, tajaran have it at 8
src.see_invisible = SEE_INVISIBLE_LIVING // This is normal vision (25), setting it lower for normal vision means you don't "see" things like darkness since darkness
// has a "invisible" value of 15
-
+ plane_holder.set_vis(VIS_FULLBRIGHT,fullbright)
..()
if (src.healths)
diff --git a/code/modules/mob/living/simple_animal/aliens/alien.dm b/code/modules/mob/living/simple_animal/aliens/alien.dm
index 62a3b5e767f..0f7cc35c778 100644
--- a/code/modules/mob/living/simple_animal/aliens/alien.dm
+++ b/code/modules/mob/living/simple_animal/aliens/alien.dm
@@ -25,7 +25,7 @@
melee_damage_lower = 25
melee_damage_upper = 25
- attacktext = "slashed"
+ attacktext = list("slashed")
attack_sound = 'sound/weapons/bladeslice.ogg'
a_intent = I_HURT
diff --git a/code/modules/mob/living/simple_animal/aliens/creature.dm b/code/modules/mob/living/simple_animal/aliens/creature.dm
index 3de6d687af0..980623c0174 100644
--- a/code/modules/mob/living/simple_animal/aliens/creature.dm
+++ b/code/modules/mob/living/simple_animal/aliens/creature.dm
@@ -16,7 +16,7 @@
melee_damage_lower = 5
melee_damage_upper = 5
- attacktext = "chomped"
+ attacktext = list("chomped")
attack_sound = 'sound/weapons/bite.ogg'
speak_emote = list("gibbers")
diff --git a/code/modules/mob/living/simple_animal/aliens/drone.dm b/code/modules/mob/living/simple_animal/aliens/drone.dm
index c3ae697448b..35e09030ddb 100644
--- a/code/modules/mob/living/simple_animal/aliens/drone.dm
+++ b/code/modules/mob/living/simple_animal/aliens/drone.dm
@@ -25,6 +25,7 @@
projectiletype = /obj/item/projectile/beam/drone
projectilesound = 'sound/weapons/laser3.ogg'
destroy_surroundings = 0
+ hovering = TRUE
//Drones aren't affected by atmos.
min_oxy = 0
diff --git a/code/modules/mob/living/simple_animal/aliens/faithless.dm b/code/modules/mob/living/simple_animal/aliens/faithless.dm
index 24eacae40e9..09de8a24fbf 100644
--- a/code/modules/mob/living/simple_animal/aliens/faithless.dm
+++ b/code/modules/mob/living/simple_animal/aliens/faithless.dm
@@ -20,7 +20,7 @@
melee_damage_lower = 5
melee_damage_upper = 5
- attacktext = "gripped"
+ attacktext = list("gripped")
attack_sound = 'sound/hallucinations/growl1.ogg'
min_oxy = 0
diff --git a/code/modules/mob/living/simple_animal/aliens/hivebot.dm b/code/modules/mob/living/simple_animal/aliens/hivebot.dm
index 0a7fcd76130..03776d7178c 100644
--- a/code/modules/mob/living/simple_animal/aliens/hivebot.dm
+++ b/code/modules/mob/living/simple_animal/aliens/hivebot.dm
@@ -20,7 +20,7 @@
melee_damage_lower = 15
melee_damage_upper = 15
- attacktext = "clawed"
+ attacktext = list("clawed")
projectilesound = 'sound/weapons/Gunshot.ogg'
projectiletype = /obj/item/projectile/bullet/hivebot
diff --git a/code/modules/mob/living/simple_animal/aliens/mimic.dm b/code/modules/mob/living/simple_animal/aliens/mimic.dm
index 77ba92ff6a6..8230256086f 100644
--- a/code/modules/mob/living/simple_animal/aliens/mimic.dm
+++ b/code/modules/mob/living/simple_animal/aliens/mimic.dm
@@ -24,7 +24,7 @@
harm_intent_damage = 5
melee_damage_lower = 8
melee_damage_upper = 12
- attacktext = "attacked"
+ attacktext = list("attacked")
attack_sound = 'sound/weapons/bite.ogg'
min_oxy = 0
@@ -55,7 +55,7 @@
// Aggro when you try to open them. Will also pickup loot when spawns and drop it when dies.
/mob/living/simple_animal/hostile/mimic/crate
- attacktext = "bitten"
+ attacktext = list("bitten")
stop_automated_movement = 1
wander = 0
diff --git a/code/modules/mob/living/simple_animal/aliens/shade.dm b/code/modules/mob/living/simple_animal/aliens/shade.dm
index 2d502bc10a6..e8da069e1dd 100644
--- a/code/modules/mob/living/simple_animal/aliens/shade.dm
+++ b/code/modules/mob/living/simple_animal/aliens/shade.dm
@@ -20,7 +20,7 @@
melee_damage_lower = 5
melee_damage_upper = 15
- attacktext = "drained the life from"
+ attacktext = list("drained the life from")
minbodytemp = 0
maxbodytemp = 4000
diff --git a/code/modules/mob/living/simple_animal/animals/bat.dm b/code/modules/mob/living/simple_animal/animals/bat.dm
index a429b2ca7fa..726c94f1431 100644
--- a/code/modules/mob/living/simple_animal/animals/bat.dm
+++ b/code/modules/mob/living/simple_animal/animals/bat.dm
@@ -24,7 +24,7 @@
melee_damage_upper = 3
environment_smash = 1
- attacktext = "bites"
+ attacktext = list("bites")
attack_sound = 'sound/weapons/bite.ogg'
min_oxy = 0
diff --git a/code/modules/mob/living/simple_animal/animals/carp.dm b/code/modules/mob/living/simple_animal/animals/carp.dm
index 91266421979..4dc4daffdaf 100644
--- a/code/modules/mob/living/simple_animal/animals/carp.dm
+++ b/code/modules/mob/living/simple_animal/animals/carp.dm
@@ -8,6 +8,7 @@
faction = "carp"
intelligence_level = SA_ANIMAL
+ hovering = TRUE
maxHealth = 25
health = 25
speed = 4
@@ -20,7 +21,7 @@
harm_intent_damage = 8
melee_damage_lower = 15
melee_damage_upper = 15
- attacktext = "bitten"
+ attacktext = list("bitten")
attack_sound = 'sound/weapons/bite.ogg'
//Space carp aren't affected by atmos.
diff --git a/code/modules/mob/living/simple_animal/animals/cat.dm b/code/modules/mob/living/simple_animal/animals/cat.dm
index 039540ed309..81cd043ce0b 100644
--- a/code/modules/mob/living/simple_animal/animals/cat.dm
+++ b/code/modules/mob/living/simple_animal/animals/cat.dm
@@ -9,7 +9,6 @@
icon_dead = "cat2_dead"
icon_rest = "cat2_rest"
- hostile = 1 //To mice, anyway.
investigates = 1
specific_targets = 1 //Only targets with Found()
run_at_them = 0 //DOMESTICATED
diff --git a/code/modules/mob/living/simple_animal/animals/farm_animals.dm b/code/modules/mob/living/simple_animal/animals/farm_animals.dm
index 2fe58dc76fb..213aff73bfc 100644
--- a/code/modules/mob/living/simple_animal/animals/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/animals/farm_animals.dm
@@ -19,7 +19,7 @@
melee_damage_lower = 1
melee_damage_upper = 5
- attacktext = "kicked"
+ attacktext = list("kicked")
speak_chance = 1
speak = list("EHEHEHEHEH","eh?")
@@ -98,7 +98,7 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
- attacktext = "kicked"
+ attacktext = list("kicked")
speak_chance = 1
speak = list("moo?","moo","MOOOOOO")
@@ -168,7 +168,7 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
- attacktext = "kicked"
+ attacktext = list("kicked")
has_langs = list("Bird")
speak_chance = 2
@@ -216,7 +216,7 @@ var/global/chicken_count = 0
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
- attacktext = "kicked"
+ attacktext = list("kicked")
has_langs = list("Bird")
speak_chance = 2
diff --git a/code/modules/mob/living/simple_animal/animals/goose.dm b/code/modules/mob/living/simple_animal/animals/goose.dm
index a2ac8515b87..dd3b93c4795 100644
--- a/code/modules/mob/living/simple_animal/animals/goose.dm
+++ b/code/modules/mob/living/simple_animal/animals/goose.dm
@@ -21,7 +21,7 @@
harm_intent_damage = 5
melee_damage_lower = 5 //they're meant to be annoying, not threatening.
melee_damage_upper = 5 //unless there's like a dozen of them, then you're screwed.
- attacktext = "pecked"
+ attacktext = list("pecked")
attack_sound = 'sound/weapons/bite.ogg'
//SPACE geese aren't affected by atmos.
diff --git a/code/modules/mob/living/simple_animal/animals/lizard.dm b/code/modules/mob/living/simple_animal/animals/lizard.dm
index e9032a96ef1..38822faf0df 100644
--- a/code/modules/mob/living/simple_animal/animals/lizard.dm
+++ b/code/modules/mob/living/simple_animal/animals/lizard.dm
@@ -15,7 +15,7 @@
response_disarm = "shoos"
response_harm = "stomps on"
- attacktext = "bitten"
+ attacktext = list("bitten")
melee_damage_lower = 1
melee_damage_upper = 2
diff --git a/code/modules/mob/living/simple_animal/animals/penguin.dm b/code/modules/mob/living/simple_animal/animals/penguin.dm
index 13ecb0d0cad..4bb985d1acb 100644
--- a/code/modules/mob/living/simple_animal/animals/penguin.dm
+++ b/code/modules/mob/living/simple_animal/animals/penguin.dm
@@ -18,7 +18,7 @@
harm_intent_damage = 5
melee_damage_lower = 10
melee_damage_upper = 15
- attacktext = "pecked"
+ attacktext = list("pecked")
has_langs = list("Bird")
speak_chance = 0
diff --git a/code/modules/mob/living/simple_animal/animals/spiderbot.dm b/code/modules/mob/living/simple_animal/animals/spiderbot.dm
index ff3f03bf57c..7ae8edfb7a3 100644
--- a/code/modules/mob/living/simple_animal/animals/spiderbot.dm
+++ b/code/modules/mob/living/simple_animal/animals/spiderbot.dm
@@ -21,7 +21,7 @@
melee_damage_lower = 1
melee_damage_upper = 3
- attacktext = "shocked"
+ attacktext = list("shocked")
min_oxy = 0
max_tox = 0
diff --git a/code/modules/mob/living/simple_animal/animals/tomato.dm b/code/modules/mob/living/simple_animal/animals/tomato.dm
index d1bffc6fe13..48882fea57c 100644
--- a/code/modules/mob/living/simple_animal/animals/tomato.dm
+++ b/code/modules/mob/living/simple_animal/animals/tomato.dm
@@ -18,6 +18,6 @@
harm_intent_damage = 5
melee_damage_upper = 15
melee_damage_lower = 10
- attacktext = "mauled"
+ attacktext = list("mauled")
meat_type = /obj/item/weapon/reagent_containers/food/snacks/tomatomeat
diff --git a/code/modules/mob/living/simple_animal/animals/tree.dm b/code/modules/mob/living/simple_animal/animals/tree.dm
index 3db514345f3..37169d42a18 100644
--- a/code/modules/mob/living/simple_animal/animals/tree.dm
+++ b/code/modules/mob/living/simple_animal/animals/tree.dm
@@ -22,7 +22,7 @@
harm_intent_damage = 5
melee_damage_lower = 8
melee_damage_upper = 12
- attacktext = "bitten"
+ attacktext = list("bitten")
attack_sound = 'sound/weapons/bite.ogg'
min_oxy = 0
diff --git a/code/modules/mob/living/simple_animal/animals/worm.dm b/code/modules/mob/living/simple_animal/animals/worm.dm
index 48ed6039c55..da30dbf8fd1 100644
--- a/code/modules/mob/living/simple_animal/animals/worm.dm
+++ b/code/modules/mob/living/simple_animal/animals/worm.dm
@@ -56,7 +56,7 @@
melee_damage_lower = 10
melee_damage_upper = 15
- attacktext = "bitten"
+ attacktext = list("bitten")
animate_movement = SLIDE_STEPS
diff --git a/code/modules/mob/living/simple_animal/borer/borer.dm b/code/modules/mob/living/simple_animal/borer/borer.dm
index e18a3450662..b89e2f2af67 100644
--- a/code/modules/mob/living/simple_animal/borer/borer.dm
+++ b/code/modules/mob/living/simple_animal/borer/borer.dm
@@ -16,7 +16,7 @@
a_intent = I_HURT
stop_automated_movement = 1
status_flags = CANPUSH
- attacktext = "nipped"
+ attacktext = list("nipped")
friendly = "prods"
wander = 0
pass_flags = PASSTABLE
diff --git a/code/modules/mob/living/simple_animal/constructs/constructs.dm b/code/modules/mob/living/simple_animal/constructs/constructs.dm
index 412f37f1727..c0034b19080 100644
--- a/code/modules/mob/living/simple_animal/constructs/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs/constructs.dm
@@ -8,6 +8,7 @@
response_disarm = "flailed at"
response_harm = "punched"
intelligence_level = SA_HUMANOID // Player controlled.
+ hovering = TRUE
icon_dead = "shade_dead"
speed = -1
a_intent = I_HURT
@@ -100,7 +101,7 @@
harm_intent_damage = 0
melee_damage_lower = 30
melee_damage_upper = 30
- attacktext = "smashed their armoured gauntlet into"
+ attacktext = list("smashed their armoured gauntlet into")
mob_size = MOB_HUGE
speed = 3
environment_smash = 2
@@ -152,7 +153,7 @@
health = 75
melee_damage_lower = 25
melee_damage_upper = 25
- attacktext = "slashed"
+ attacktext = list("slashed")
speed = -1
environment_smash = 1
see_in_dark = 7
@@ -177,7 +178,7 @@
harm_intent_damage = 5
melee_damage_lower = 5
melee_damage_upper = 5
- attacktext = "rammed"
+ attacktext = list("rammed")
speed = 0
environment_smash = 1
attack_sound = 'sound/weapons/rapidslice.ogg'
@@ -206,7 +207,7 @@
harm_intent_damage = 0
melee_damage_lower = 50
melee_damage_upper = 50
- attacktext = "brutally crushed"
+ attacktext = list("brutally crushed")
speed = 5
environment_smash = 2
attack_sound = 'sound/weapons/heavysmash.ogg'
@@ -230,7 +231,7 @@
health = 150
melee_damage_lower = 25
melee_damage_upper = 25
- attacktext = "violently stabbed"
+ attacktext = list("violently stabbed")
speed = -1
environment_smash = 1
see_in_dark = 7
diff --git a/code/modules/mob/living/simple_animal/humanoids/clown.dm b/code/modules/mob/living/simple_animal/humanoids/clown.dm
index ee1341ff38a..5751a058c48 100644
--- a/code/modules/mob/living/simple_animal/humanoids/clown.dm
+++ b/code/modules/mob/living/simple_animal/humanoids/clown.dm
@@ -26,7 +26,7 @@
harm_intent_damage = 8
melee_damage_lower = 10
melee_damage_upper = 10
- attacktext = "attacked"
+ attacktext = list("attacked")
attack_sound = 'sound/items/bikehorn.ogg'
min_oxy = 5
diff --git a/code/modules/mob/living/simple_animal/humanoids/mechamobs.dm b/code/modules/mob/living/simple_animal/humanoids/mechamobs.dm
index 975d938ea9b..c7645d2352a 100644
--- a/code/modules/mob/living/simple_animal/humanoids/mechamobs.dm
+++ b/code/modules/mob/living/simple_animal/humanoids/mechamobs.dm
@@ -28,7 +28,7 @@
harm_intent_damage = 0
melee_damage_lower = 35
melee_damage_upper = 35
- attacktext = "slashed"
+ attacktext = list("slashed")
attack_sound = 'sound/weapons/bladeslice.ogg'
min_oxy = 0
diff --git a/code/modules/mob/living/simple_animal/humanoids/pirate.dm b/code/modules/mob/living/simple_animal/humanoids/pirate.dm
index f0c7c05ddc0..8921f3c519a 100644
--- a/code/modules/mob/living/simple_animal/humanoids/pirate.dm
+++ b/code/modules/mob/living/simple_animal/humanoids/pirate.dm
@@ -28,7 +28,7 @@
harm_intent_damage = 5
melee_damage_lower = 30
melee_damage_upper = 30
- attacktext = "slashed"
+ attacktext = list("slashed")
attack_sound = 'sound/weapons/bladeslice.ogg'
min_oxy = 5
diff --git a/code/modules/mob/living/simple_animal/humanoids/russian.dm b/code/modules/mob/living/simple_animal/humanoids/russian.dm
index 1589fe2a7da..2c3fc68c713 100644
--- a/code/modules/mob/living/simple_animal/humanoids/russian.dm
+++ b/code/modules/mob/living/simple_animal/humanoids/russian.dm
@@ -30,7 +30,7 @@
harm_intent_damage = 5
melee_damage_lower = 15
melee_damage_upper = 15
- attacktext = "punched"
+ attacktext = list("punched")
min_oxy = 5
max_oxy = 0
diff --git a/code/modules/mob/living/simple_animal/humanoids/syndicate.dm b/code/modules/mob/living/simple_animal/humanoids/syndicate.dm
index b053094663b..b525cf6141f 100644
--- a/code/modules/mob/living/simple_animal/humanoids/syndicate.dm
+++ b/code/modules/mob/living/simple_animal/humanoids/syndicate.dm
@@ -31,7 +31,7 @@
melee_damage_lower = 10
melee_damage_upper = 15
environment_smash = 1
- attacktext = "punched"
+ attacktext = list("punched")
min_oxy = 5
max_oxy = 0
@@ -75,7 +75,7 @@
melee_damage_lower = 20
melee_damage_upper = 25
- attacktext = "slashed"
+ attacktext = list("slashed")
status_flags = 0
@@ -167,6 +167,7 @@
icon_state = "viscerator_attack"
icon_living = "viscerator_attack"
intelligence_level = SA_ROBOTIC
+ hovering = TRUE
faction = "syndicate"
maxHealth = 15
@@ -177,7 +178,7 @@
melee_damage_lower = 15
melee_damage_upper = 15
attack_sound = 'sound/weapons/bladeslice.ogg'
- attacktext = "cut"
+ attacktext = list("cut")
min_oxy = 0
max_oxy = 0
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 12aaa9a2d0a..696688ab427 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -110,8 +110,8 @@
//Mob melee settings
var/melee_damage_lower = 2 // Lower bound of randomized melee damage
var/melee_damage_upper = 6 // Upper bound of randomized melee damage
- var/attacktext = "attacked" // "You are [attacktext] by the mob!"
- var/friendly = "nuzzles" // What mobs do to people when they aren't really hostile
+ var/list/attacktext = list("attacked") // "You are [attacktext] by the mob!"
+ var/list/friendly = list("nuzzles") // "The mob [friendly] the person."
var/attack_sound = null // Sound to play when I attack
var/environment_smash = 0 // How much environment damage do I do when I hit stuff?
var/melee_miss_chance = 15 // percent chance to miss a melee attack.
@@ -131,14 +131,14 @@
//Damage resistances
var/resistance = 0 // Damage reduction for all types
- var/list/resistances = list(
- HALLOSS = 0,
- BRUTE = 1,
- BURN = 1,
- TOX = 1,
- OXY = 0,
- CLONE = 0
- )
+ var/list/armor = list( // Values for normal getarmor() checks
+ "melee" = 0,
+ "bullet" = 0,
+ "laser" = 0,
+ "energy" = 0,
+ "bomb" = 0,
+ "bio" = 100,
+ "rad" = 100)
//Scary debug things
var/debug_ai = 0 // Logging level for this mob (1,2,3)
@@ -523,7 +523,7 @@
stop_automated_movement = 0
//Search for targets while idle
- if(hostile)
+ if(hostile || specific_targets)
FindTarget()
if(STANCE_FOLLOW)
annoyed = 15
@@ -531,7 +531,7 @@
if(follow_until_time && world.time > follow_until_time)
LoseFollow()
return
- if(hostile)
+ if(hostile || specific_targets)
FindTarget()
if(STANCE_ATTACK)
annoyed = 50
@@ -611,7 +611,8 @@
react_to_attack(M)
if(I_HURT)
- adjustBruteLoss(harm_intent_damage)
+ var/armor = run_armor_check(def_zone = null, attack_flag = "melee")
+ apply_damage(damage = harm_intent_damage, damagetype = BURN, def_zone = null, blocked = armor, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE)
M.visible_message("[M] [response_harm] \the [src]!")
M.do_attack_animation(src)
ai_log("attack_hand() I was hit by: [M]",2)
@@ -735,18 +736,20 @@
/mob/living/simple_animal/ex_act(severity)
if(!blinded)
flash_eyes()
+ var/armor = run_armor_check(def_zone = null, attack_flag = "bomb")
+ var/bombdam = 500
switch (severity)
if (1.0)
- adjustBruteLoss(500)
- gib()
- return
-
+ bombdam = 500
if (2.0)
- adjustBruteLoss(60)
+ bombdam = 60
+ if (3.0)
+ bombdam = 30
+ apply_damage(damage = bombdam, damagetype = BRUTE, def_zone = null, blocked = armor, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE)
- if(3.0)
- adjustBruteLoss(30)
+ if(bombdam > maxHealth)
+ gib()
// Check target_mob if worthy of attack (i.e. check if they are dead or empty mecha)
/mob/living/simple_animal/proc/SA_attackable(target_mob)
@@ -1273,6 +1276,7 @@
if(A.attack_generic(src, damage_to_do, pick(attacktext)) && attack_sound)
playsound(src, attack_sound, 75, 1)
+
return TRUE
//The actual top-level ranged attack proc
@@ -1430,23 +1434,23 @@
for(var/obj/structure/window/obstacle in problem_turf)
if(obstacle.dir == reverse_dir[dir]) // So that windows get smashed in the right order
ai_log("DestroySurroundings() directional window hit",3)
- obstacle.attack_generic(src, damage_to_do, attacktext)
+ obstacle.attack_generic(src, damage_to_do, pick(attacktext))
return
else if(obstacle.is_fulltile())
ai_log("DestroySurroundings() full tile window hit",3)
- obstacle.attack_generic(src, damage_to_do, attacktext)
+ obstacle.attack_generic(src, damage_to_do, pick(attacktext))
return
var/obj/structure/obstacle = locate(/obj/structure, problem_turf)
if(istype(obstacle, /obj/structure/window) || istype(obstacle, /obj/structure/closet) || istype(obstacle, /obj/structure/table) || istype(obstacle, /obj/structure/grille))
ai_log("DestroySurroundings() generic structure hit [obstacle]",3)
- obstacle.attack_generic(src, damage_to_do ,attacktext)
+ obstacle.attack_generic(src, damage_to_do, pick(attacktext))
return
for(var/obj/machinery/door/baddoor in problem_turf) //Required since firelocks take up the same turf
if(baddoor.density)
ai_log("DestroySurroundings() door hit [baddoor]",3)
- baddoor.attack_generic(src, damage_to_do ,attacktext)
+ baddoor.attack_generic(src, damage_to_do, pick(attacktext))
return
//Check for shuttle bumrush
@@ -1494,7 +1498,7 @@
if (shock_damage < 1)
return 0
- adjustFireLoss(shock_damage)
+ apply_damage(damage = shock_damage, damagetype = BURN, def_zone = null, blocked = null, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE)
playsound(loc, "sparks", 50, 1, -1)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
@@ -1506,14 +1510,15 @@
if(taser_kill)
var/stunDam = 0
var/agonyDam = 0
+ var/armor = run_armor_check(def_zone = null, attack_flag = "energy")
if(stun_amount)
stunDam += stun_amount * 0.5
- adjustFireLoss(stunDam)
+ apply_damage(damage = stunDam, damagetype = BURN, def_zone = null, blocked = armor, blocked = resistance, used_weapon = used_weapon, sharp = FALSE, edge = FALSE)
if(agony_amount)
agonyDam += agony_amount * 0.5
- adjustFireLoss(agonyDam)
+ apply_damage(damage = agonyDam, damagetype = BURN, def_zone = null, blocked = armor, blocked = resistance, used_weapon = used_weapon, sharp = FALSE, edge = FALSE)
/mob/living/simple_animal/emp_act(severity)
if(!isSynthetic())
@@ -1528,6 +1533,13 @@
if(4)
adjustFireLoss(rand(1, 6))
+/mob/living/simple_animal/getarmor(def_zone, attack_flag)
+ var/armorval = armor[attack_flag]
+ if(!armorval)
+ return 0
+ else
+ return armorval
+
// Force it to target something
/mob/living/simple_animal/proc/taunt(var/mob/living/new_target, var/forced = FALSE)
if(intelligence_level == SA_HUMANOID && !forced)
diff --git a/code/modules/organs/internal/eyes.dm b/code/modules/organs/internal/eyes.dm
index 07d70bc6e2c..77350a73db8 100644
--- a/code/modules/organs/internal/eyes.dm
+++ b/code/modules/organs/internal/eyes.dm
@@ -93,3 +93,7 @@
/obj/item/organ/internal/eyes/proc/additional_flash_effects(var/intensity)
return -1
+
+/obj/item/organ/internal/eyes/emp_act(severity)
+ ..() //Returns if the organ isn't robotic
+ owner.eye_blurry += (4/severity)
\ No newline at end of file
diff --git a/code/modules/organs/subtypes/machine.dm b/code/modules/organs/subtypes/machine.dm
index b775f93a8e0..55e3f2cd5f8 100644
--- a/code/modules/organs/subtypes/machine.dm
+++ b/code/modules/organs/subtypes/machine.dm
@@ -17,6 +17,9 @@
owner.stat = 0
owner.visible_message("\The [owner] twitches visibly!")
+/obj/item/organ/internal/cell/emp_act(severity)
+ ..()
+ owner.nutrition = max(0, owner.nutrition - rand(10/severity, 50/severity))
// Used for an MMI or posibrain being installed into a human.
/obj/item/organ/internal/mmi_holder
@@ -83,6 +86,10 @@
holder_mob.drop_from_inventory(src)
qdel(src)
+/obj/item/organ/internal/mmi_holder/emp_act(severity)
+ ..()
+ owner.adjustToxLoss(rand(6/severity, 12/severity))
+
/obj/item/organ/internal/mmi_holder/posibrain
name = "positronic brain interface"
brain_type = /obj/item/device/mmi/digital/posibrain
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 8bda4d37ac0..d574938d98d 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -22,7 +22,7 @@
force = 5
slot_flags = SLOT_BELT|SLOT_HOLSTER
charge_cost = 480
- projectile_type = /obj/item/projectile/ion
+ projectile_type = /obj/item/projectile/ion/pistol
/obj/item/weapon/gun/energy/phasegun
name = "phase pistol"
diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm
index e86ff4c864a..4e366bed6d7 100644
--- a/code/modules/projectiles/projectile/special.dm
+++ b/code/modules/projectiles/projectile/special.dm
@@ -9,15 +9,26 @@
light_range = 2
light_power = 0.5
light_color = "#55AAFF"
- var/pulse_range = 1
-
+ var/sev1_range = 0
+ var/sev2_range = 1
+ var/sev3_range = 1
+ var/sev4_range = 2
/obj/item/projectile/ion/on_hit(var/atom/target, var/blocked = 0)
- empulse(target, pulse_range, pulse_range, pulse_range, pulse_range)
+ empulse(target, sev1_range, sev2_range, sev3_range, sev4_range)
return 1
/obj/item/projectile/ion/small
- pulse_range = 0
+ sev1_range = -1
+ sev2_range = 0
+ sev3_range = 0
+ sev4_range = 1
+
+/obj/item/projectile/ion/pistol
+ sev1_range = 0
+ sev2_range = 0
+ sev3_range = 0
+ sev4_range = 0
/obj/item/projectile/bullet/gyro
name ="explosive bolt"
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index 7dd4bbeadda..37634ac28a4 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -2210,9 +2210,8 @@
name = "Deuterium"
id = "deuterium"
result = null
- required_reagents = list("water" = 10)
- catalysts = list("hydrophoron" = 5)
- result_amount = 1
+ required_reagents = list("hydrophoron" = 5, "water" = 10)
+ result_amount = 15
/datum/chemical_reaction/deuterium/on_reaction(var/datum/reagents/holder, var/created_volume)
var/turf/T = get_turf(holder.my_atom)
diff --git a/html/changelogs/Anewbe - Mines.yml b/html/changelogs/Anewbe - Mines.yml
new file mode 100644
index 00000000000..502771f2484
--- /dev/null
+++ b/html/changelogs/Anewbe - Mines.yml
@@ -0,0 +1,40 @@
+################################
+# 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: Anewbe
+
+# 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: "Added a random mine spawner, for use in PoIs. Replaces mines in PoIs with the random spawner."
+ - rscadd: "Mines now give a visible message when they go off."
+ - tweak: "Land mines on the ground can no longer be told apart from one another, to prevent gaming the system."
+ - bugfix: "Hovering mobs (viscerators, drones, Poly, carp) no longer set off land mines."
+ - tweak: "Arming a land mine now takes concentration. If you move, it will boom."
diff --git a/html/changelogs/BattlefieldCommander-doyouwannabuildasnowman.yml b/html/changelogs/BattlefieldCommander-doyouwannabuildasnowman.yml
new file mode 100644
index 00000000000..4ee55c61148
--- /dev/null
+++ b/html/changelogs/BattlefieldCommander-doyouwannabuildasnowman.yml
@@ -0,0 +1,38 @@
+################################
+# 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: battlefieldCommander
+
+# 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: "Added packed snow brick material. Craft it using snow piles."
+ - recadd: "Added snow girders and igloo walls. Craft them using snow bricks."
+ - rscadd: "Added various snowmen. Craft them using snow piles. Punch 'em to destroy."
\ No newline at end of file
diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi
index 75249fb4abd..c497e7c73db 100644
Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ
diff --git a/icons/obj/snowman.dmi b/icons/obj/snowman.dmi
new file mode 100644
index 00000000000..ba6444df3f8
Binary files /dev/null and b/icons/obj/snowman.dmi differ
diff --git a/icons/obj/stacks.dmi b/icons/obj/stacks.dmi
index 51465980512..f25ca29526b 100644
Binary files a/icons/obj/stacks.dmi and b/icons/obj/stacks.dmi differ
diff --git a/maps/southern_cross/loadout/loadout_accessories.dm b/maps/southern_cross/loadout/loadout_accessories.dm
index 31e900f89b8..1a23e18e9c7 100644
--- a/maps/southern_cross/loadout/loadout_accessories.dm
+++ b/maps/southern_cross/loadout/loadout_accessories.dm
@@ -27,3 +27,8 @@
display_name = "drop pouches, white"
path = /obj/item/clothing/accessory/storage/white_drop_pouches
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Search and Rescue","Explorer","Shaft Miner")
+
+/datum/gear/accessory/holster
+ display_name = "holster selection (Security, CD, HoP)"
+ path = /obj/item/clothing/accessory/holster
+ allowed_roles = list("Colony Director","Head of Personnel","Security Officer","Warden","Head of Security","Detective","Explorer")
\ No newline at end of file
diff --git a/maps/submaps/surface_submaps/wilderness/CaveS.dmm b/maps/submaps/surface_submaps/wilderness/CaveS.dmm
index 36d0d00ca51..9f5a411ec5e 100644
--- a/maps/submaps/surface_submaps/wilderness/CaveS.dmm
+++ b/maps/submaps/surface_submaps/wilderness/CaveS.dmm
@@ -3,35 +3,39 @@
"c" = (/obj/item/ammo_casing/a45,/turf/template_noop,/area/submap/CaveS)
"d" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/CaveS)
"e" = (/obj/item/ammo_casing/a45,/obj/item/weapon/reagent_containers/food/snacks/xenomeat/spidermeat,/turf/template_noop,/area/submap/CaveS)
-"f" = (/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
-"g" = (/obj/effect/spider/stickyweb,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
-"h" = (/obj/item/ammo_casing/a45,/obj/item/ammo_casing/a45,/turf/template_noop,/area/submap/CaveS)
-"i" = (/obj/item/weapon/reagent_containers/food/snacks/xenomeat/spidermeat,/turf/template_noop,/area/submap/CaveS)
-"j" = (/obj/item/clothing/accessory/storage/webbing,/obj/item/weapon/material/knife/tacknife/combatknife,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
-"k" = (/mob/living/simple_animal/hostile/giant_spider,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
-"l" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
-"m" = (/mob/living/simple_animal/hostile/giant_spider/lurker,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
-"n" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
-"o" = (/obj/effect/mine,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
-"p" = (/mob/living/simple_animal/hostile/giant_spider/webslinger,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
-"q" = (/obj/effect/decal/cleanable/cobweb2,/mob/living/simple_animal/hostile/giant_spider/lurker,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
-"r" = (/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/CaveS)
-"s" = (/mob/living/simple_animal/hostile/giant_spider/hunter,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
-"t" = (/obj/structure/flora/tree/sif,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/CaveS)
-"u" = (/turf/simulated/floor,/area/submap/CaveS)
-"v" = (/obj/structure/closet/crate,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/weapon/storage/toolbox,/obj/random/toolbox,/turf/simulated/floor,/area/submap/CaveS)
-"w" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/floor,/area/submap/CaveS)
-"x" = (/obj/structure/table/woodentable,/turf/simulated/floor,/area/submap/CaveS)
-"y" = (/obj/machinery/power/port_gen/pacman,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor,/area/submap/CaveS)
-"z" = (/turf/simulated/wall,/area/submap/CaveS)
-"A" = (/obj/structure/closet/crate,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/obj/item/weapon/reagent_containers/pill/antitox,/obj/item/weapon/reagent_containers/pill/antitox,/obj/item/weapon/reagent_containers/pill/antitox,/obj/item/weapon/reagent_containers/pill/paracetamol,/obj/random/firstaid,/turf/simulated/floor,/area/submap/CaveS)
-"B" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor,/area/submap/CaveS)
-"C" = (/obj/structure/closet/crate,/obj/random/contraband,/obj/random/contraband,/obj/random/contraband,/obj/random/energy,/obj/item/weapon/material/star,/obj/item/weapon/material/star,/obj/item/weapon/material/star,/obj/item/weapon/material/star,/obj/item/weapon/material/star,/turf/simulated/floor,/area/submap/CaveS)
-"D" = (/obj/effect/spider/stickyweb,/mob/living/simple_animal/hostile/giant_spider/lurker,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
-"E" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/submap/CaveS)
-"F" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/submap/CaveS)
-"G" = (/obj/machinery/computer/communications,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/submap/CaveS)
-"H" = (/obj/structure/loot_pile/maint/boxfort,/turf/simulated/floor,/area/submap/CaveS)
+"f" = (/obj/random/landmine,/turf/template_noop,/area/submap/CaveS)
+"g" = (/obj/item/ammo_casing/a45,/obj/random/landmine,/turf/template_noop,/area/submap/CaveS)
+"h" = (/obj/random/landmine,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
+"i" = (/obj/effect/spider/stickyweb,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
+"j" = (/obj/item/ammo_casing/a45,/obj/item/ammo_casing/a45,/turf/template_noop,/area/submap/CaveS)
+"k" = (/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
+"l" = (/obj/item/weapon/reagent_containers/food/snacks/xenomeat/spidermeat,/turf/template_noop,/area/submap/CaveS)
+"m" = (/obj/item/clothing/accessory/storage/webbing,/obj/item/weapon/material/knife/tacknife/combatknife,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
+"n" = (/mob/living/simple_animal/hostile/giant_spider,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
+"o" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
+"p" = (/mob/living/simple_animal/hostile/giant_spider/lurker,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
+"q" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
+"r" = (/mob/living/simple_animal/hostile/giant_spider/webslinger,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
+"s" = (/obj/effect/decal/cleanable/cobweb2,/mob/living/simple_animal/hostile/giant_spider/lurker,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
+"t" = (/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/CaveS)
+"u" = (/mob/living/simple_animal/hostile/giant_spider/hunter,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
+"v" = (/obj/structure/flora/tree/sif,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/CaveS)
+"w" = (/obj/random/landmine,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/CaveS)
+"x" = (/turf/simulated/floor,/area/submap/CaveS)
+"y" = (/obj/structure/closet/crate,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/weapon/storage/toolbox,/obj/random/toolbox,/turf/simulated/floor,/area/submap/CaveS)
+"z" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/floor,/area/submap/CaveS)
+"A" = (/obj/structure/table/woodentable,/turf/simulated/floor,/area/submap/CaveS)
+"B" = (/obj/random/landmine,/turf/simulated/floor,/area/submap/CaveS)
+"C" = (/obj/machinery/power/port_gen/pacman,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor,/area/submap/CaveS)
+"D" = (/turf/simulated/wall,/area/submap/CaveS)
+"E" = (/obj/structure/closet/crate,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/obj/item/weapon/reagent_containers/pill/antitox,/obj/item/weapon/reagent_containers/pill/antitox,/obj/item/weapon/reagent_containers/pill/antitox,/obj/item/weapon/reagent_containers/pill/paracetamol,/obj/random/firstaid,/obj/random/landmine,/turf/simulated/floor,/area/submap/CaveS)
+"F" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor,/area/submap/CaveS)
+"G" = (/obj/structure/closet/crate,/obj/random/contraband,/obj/random/contraband,/obj/random/contraband,/obj/random/energy,/obj/item/weapon/material/star,/obj/item/weapon/material/star,/obj/item/weapon/material/star,/obj/item/weapon/material/star,/obj/item/weapon/material/star,/turf/simulated/floor,/area/submap/CaveS)
+"H" = (/obj/effect/spider/stickyweb,/mob/living/simple_animal/hostile/giant_spider/lurker,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
+"I" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/submap/CaveS)
+"J" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/submap/CaveS)
+"K" = (/obj/machinery/computer/communications,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/submap/CaveS)
+"L" = (/obj/structure/loot_pile/maint/boxfort,/turf/simulated/floor,/area/submap/CaveS)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -42,34 +46,34 @@ abbbbbbbbbbbbbbbbbbbbbcbbbbbbbbbbbbbbbba
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba
abbbbbbbbbbbbbbbcbbbbbbcccdddddbbbbbbbba
abbbbbbbbbbbbbbbbbbbbbbbeddddddddbbddbba
-abbbbbbbbbbbbbbbbbbbbbbbdddddddddddddbba
-abbbbdddddbbbbcbbbbcbbbfgddddddddddddbba
-abbbbddddddddbbbbbhbbbbffddddddddddddbba
-abbbddddddddddbbbbcbibdgfggdddddddddbbba
-abbbdddddddddddbbbbbbdddgfffdddddddbbbba
-abbbddddddddddddbbbbddddddffgddddddbbbba
-abbdddddjdffgdddbbddddddddffffffddddbbba
-abbdddkffffffdddbbdddddddlffffffkdddbbba
-abbdddgfffffmddbbddddddddfffffffdddddbba
-abbddddfffffdddbdddddddddffddddfnddddbba
-abdddddddffffddddddddddddofddddffdddddba
-abdddddddffffndddddlfkffffddddlfddddddba
-abddddddddffffffffffffffffddddofddddddda
-abdddddddddpfffffffffffffffqddffddddddda
-abdddddrrdddddffdddmdddddgffffffddddddba
-abdddrrrrdddddffddddddddddofffsddddddbba
-abddrtrrrdddddffmdddddddddddddddddddbbba
-abddrrrrrrdddddfffffddddddddmfddddddbbba
-abdddrrrtrgddddfffofffogdddfffffdddbbbba
-abdddrrrrrfffffffdfffffgddffuuvfffddbbba
-abddrrrrrrrffffgdddgffffffffuuuwfdddbbba
-abddrrrrrrffddddddddfofffffuxxuuffddbbba
-abdddrrrrrffmddddddfffgdffuyzzAfffdddbba
-abdddddtrffddddddgffffddffuBzzCffddddbba
-abdddddddrgddddddDffffddffuEFGuuddddbbba
-abbddddddddddddddfffffdddffuuuudddddbbba
-abbdddddddddddddddfgdddddfffuHdddddbbbba
-abbdddddddddddddddddddddddmffddddbbbbbba
+abbbbbbbbbbbbbbbbbbbbbfbdddddddddddddbba
+abbbbdddddbbbbcbbbbgbbbhiddddddddddddbba
+abbbbddddddddbbbbbjbbfbkkddddddddddddbba
+abbbddddddddddbbbbcblbdikiidddddddddbbba
+abbbdddddddddddbbbbbbdddikkkdddddddbbbba
+abbbddddddddddddbbbbddddddhkiddddddbbbba
+abbdddddmdkkidddbbddddddddkkkkkkddddbbba
+abbdddnkkkkkkdddbbdddddddokkkkkkndddbbba
+abbdddikkkkkpddbbddddddddkkkkkkkdddddbba
+abbddddkkkkkdddbdddddddddkkddddkqddddbba
+abdddddddkkkkddddddddddddhkddddkkdddddba
+abdddddddkkkkqdddddoknkkkkddddokddddddba
+abddddddddkkkkkkkkkkkkkkkkddddhkddddddda
+abdddddddddrkkkkkkkkkkkkkkksddkkddddddda
+abdddddttdddddkkdddpdddddikkkkkkddddddba
+abdddttttdddddkkddddddddddkkkkuddddddbba
+abddtvtttdddddkkpdddddddddddddddddddbbba
+abddttwtttdddddkkkkkddddddddpkddddddbbba
+abdddtttvtiddddkkkkkkkhidddkkkkkdddbbbba
+abdddtttwtkkkkkkkdkkkkkiddkkxxykkkddbbba
+abddtttttttkkkkidddikkkhkkkkxxxzkdddbbba
+abddttttttkkddddddddkhkkkkkxAABxkkddbbba
+abdddtttttkkpddddddkkkidkkxCDDEkkkdddbba
+abdddddvtkkddddddikkkkddkkxFDDGkkddddbba
+abdddddddtiddddddHkkkkddkkxIJKBxddddbbba
+abbddddddddddddddkkkkkdddkkxxxxdddddbbba
+abbdddddddddddddddkidddddkkkxLdddddbbbba
+abbdddddddddddddddddddddddpkkddddbbbbbba
abbbdddddddddddddddddddddddddddbbbbbbbba
abbbddddbbbbdddddddbbdddddddddbbbbbbbbba
abbbddbbbbbbbddddbbbbdbbdddddbbbbbbbbbba
diff --git a/maps/submaps/surface_submaps/wilderness/DoomP.dmm b/maps/submaps/surface_submaps/wilderness/DoomP.dmm
index c98433cff4d..761eac23e40 100644
--- a/maps/submaps/surface_submaps/wilderness/DoomP.dmm
+++ b/maps/submaps/surface_submaps/wilderness/DoomP.dmm
@@ -5,126 +5,129 @@
"ae" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/template_noop,/area/submap/DoomP)
"af" = (/turf/simulated/floor/water,/area/submap/DoomP)
"ag" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/DoomP)
-"ah" = (/obj/effect/mine,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"ah" = (/obj/random/landmine,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
"ai" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
-"aj" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"aj" = (/obj/effect/decal/cleanable/blood,/obj/random/landmine,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
"ak" = (/turf/simulated/floor/water/deep,/area/submap/DoomP)
-"al" = (/obj/effect/decal/remains/mouse,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
-"am" = (/obj/effect/decal/remains/deer,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
-"an" = (/obj/structure/flora/tree/sif,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
-"ao" = (/obj/machinery/light/small,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
-"ap" = (/obj/machinery/porta_turret,/turf/simulated/floor/plating,/area/submap/DoomP)
-"aq" = (/turf/simulated/wall/r_wall,/area/submap/DoomP)
-"ar" = (/obj/structure/sign/warning/secure_area,/turf/simulated/wall/r_wall,/area/submap/DoomP)
-"as" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/submap/DoomP)
-"at" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/submap/DoomP)
-"au" = (/obj/effect/floor_decal/borderfloor{dir = 9},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"av" = (/obj/structure/bed/chair,/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aw" = (/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"ax" = (/obj/structure/bed/chair,/obj/effect/floor_decal/borderfloor{dir = 1},/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Even less friendly than he looks."; speak = list("Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Anyone else smell that?")},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"ay" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"az" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/borderfloor{dir = 5},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aA" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aB" = (/obj/machinery/power/smes/buildable/point_of_interest,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/submap/DoomP)
-"aC" = (/obj/machinery/power/smes/buildable/point_of_interest,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/submap/DoomP)
-"aD" = (/obj/machinery/power/apc{dir = 1; name = "PAPC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
-"aE" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/plating,/area/submap/DoomP)
-"aF" = (/obj/structure/table/standard,/obj/random/toolbox,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
-"aG" = (/obj/structure/table/standard,/obj/item/stack/material/phoron{amount = 25},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
-"aH" = (/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
-"aI" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/rocks,/area/submap/DoomP)
-"aJ" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 8},/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Even less friendly than he looks."; speak = list("Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Anyone else smell that?")},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aK" = (/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aL" = (/obj/structure/table/standard,/obj/item/pizzabox,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aM" = (/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aN" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/borderfloor{dir = 4},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aO" = (/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)
-"aP" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
-"aQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
-"aR" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
-"aS" = (/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
-"aT" = (/obj/machinery/light/small,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
-"aU" = (/obj/structure/lattice,/turf/simulated/floor/water,/area/submap/DoomP)
-"aV" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aW" = (/obj/machinery/vending/cola,/obj/effect/floor_decal/borderfloor/corner{dir = 4},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aX" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aY" = (/obj/machinery/door/airlock/engineering,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
-"aZ" = (/obj/structure/sign/electricshock,/turf/simulated/wall/r_wall,/area/submap/DoomP)
-"ba" = (/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"bb" = (/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"bc" = (/obj/machinery/light/small,/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"bd" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"be" = (/obj/machinery/door/airlock/hatch,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"bf" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"bg" = (/obj/machinery/door/airlock/highsecurity,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
-"bh" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/white,/area/submap/DoomP)
-"bi" = (/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
-"bj" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
-"bk" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syndie_kit/spy,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
-"bl" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/smokes,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
-"bm" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/handcuffs,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
-"bn" = (/obj/structure/table/rack,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
-"bo" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/laser/mounted,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
-"bp" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/contender,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
-"bq" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/toy/plushie/spider,/obj/effect/floor_decal/corner/lime/full{dir = 8},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
-"br" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/lime{dir = 5},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
-"bs" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/effect/floor_decal/corner/lime{dir = 5},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
-"bt" = (/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)
-"bu" = (/obj/structure/table/standard,/obj/structure/bedsheetbin,/obj/effect/floor_decal/corner/lime{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
-"bv" = (/turf/simulated/floor/tiled/white,/area/submap/DoomP)
-"bw" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
-"bx" = (/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)
-"by" = (/obj/machinery/light/small,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
-"bz" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled/white,/area/submap/DoomP)
-"bA" = (/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
-"bB" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
-"bC" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/white,/area/submap/DoomP)
-"bD" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
-"bE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/submap/DoomP)
-"bF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/submap/DoomP)
-"bG" = (/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)
-"bH" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"al" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"am" = (/obj/random/landmine,/turf/simulated/floor/outdoors/rocks,/area/submap/DoomP)
+"an" = (/obj/effect/decal/remains/mouse,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"ao" = (/obj/effect/decal/remains/deer,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"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,/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)
+"aw" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/submap/DoomP)
+"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/structure/bed/chair,/obj/effect/floor_decal/borderfloor{dir = 1},/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Even less friendly than he looks."; speak = list("Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Anyone else smell that?")},/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)
+"aE" = (/obj/machinery/power/smes/buildable/point_of_interest,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/submap/DoomP)
+"aF" = (/obj/machinery/power/smes/buildable/point_of_interest,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/submap/DoomP)
+"aG" = (/obj/machinery/power/apc{dir = 1; name = "PAPC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
+"aH" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/plating,/area/submap/DoomP)
+"aI" = (/obj/structure/table/standard,/obj/random/toolbox,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
+"aJ" = (/obj/structure/table/standard,/obj/item/stack/material/phoron{amount = 25},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
+"aK" = (/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
+"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},/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Even less friendly than he looks."; speak = list("Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Anyone else smell that?")},/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)
+"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)
+"aS" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
+"aT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
+"aU" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
+"aV" = (/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
+"aW" = (/obj/machinery/light/small,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
+"aX" = (/obj/structure/lattice,/turf/simulated/floor/water,/area/submap/DoomP)
+"aY" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aZ" = (/obj/machinery/vending/cola,/obj/effect/floor_decal/borderfloor/corner{dir = 4},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"ba" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"bb" = (/obj/machinery/door/airlock/engineering,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
+"bc" = (/obj/structure/sign/electricshock,/turf/simulated/wall/r_wall,/area/submap/DoomP)
+"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},/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)
+"bk" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"bl" = (/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
+"bm" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
+"bn" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syndie_kit/spy,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
+"bo" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/smokes,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
+"bp" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/handcuffs,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
+"bq" = (/obj/structure/table/rack,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
+"br" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/laser/mounted,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
+"bs" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/contender,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
+"bt" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/toy/plushie/spider,/obj/effect/floor_decal/corner/lime/full{dir = 8},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"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)
+"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)
+"bB" = (/obj/machinery/light/small,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
+"bC" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"bD" = (/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"bE" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"bF" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"bG" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"bH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/submap/DoomP)
+"bI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/submap/DoomP)
+"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)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaabababababababababababababababababababababababababababababababababababacacacacacacacacabababababababadadadabababaeabaa
aaaeabababababababababababababababababababababababababababababababababacacafafafafafafacacacacababacadadadadadacacacabaa
aaababacacacacacacacabababababababagababababacacacacacacacacababacacacacafafafafafafafafafafacacacacadadahadacafafacabaa
-aaabacacafafafafafacacacacacacababaeabacacacacafafafafacacacacacafafafafafafafafafafafafafacacadadadadadacacacafafacabaa
+aaabacacafafafafafacacacacacacababaeabacacacacafafafafacacacacacafafafafafafafafafafafafafacacadadahadadacacacafafacabaa
aaabacafafafafafafafafafafafacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafacacadaiadadajacacafafafafacacaa
-aaabacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacadadadadadadacafafafafafafacaa
-aaabacafafafafakakakakakakafafafafafafafafafafafafafakakakakakakakafafafafafafafafacacadajadadahadadadacafafafafafafacaa
-aaabacafafafafafakakakakakafafafafafafafafafakakakakakakakakakakakakakakafafafafafacadahadadadadadadacacafafafafafafacaa
-aaabacacafafafafafakakakakafafafafafafafafafakakakakakakakakakakakakakafafafafafacacaladadadamadahacacafafafafafafafacaa
-aaababacafafafafafafakakakakakafafafakakakakakakakakakakakakakakakakakakakakakafafacacadadadadadacacafafafafafafafafacaa
-aaababacafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakakafafafafafafacadadadaiadacacafafafafafafafacacaa
-aaababacacafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakafafafafafacacadahadadacacafafafafafafafafacabaa
+aaabacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacahadadadadadacafafafafafafacaa
+aaabacafafafafakakakakakakafafafafafafafafafafafafafakakakakakakakafafafafafafafafacacadaladadahadadadacafafafafafafacaa
+aaabacafafafafafakakakakakafafafafafafafafafakakakakakakakakakakakakakakafafafafafacadahadadadadadadamacafafafafafafacaa
+aaabacacafafafafafakakakakafafafafafafafafafakakakakakakakakakakakakakafafafafafacacanadadadaoadahacacafafafafafafafacaa
+aaababacafafafafafafakakakakakafafafakakakakakakakakakakakakakakakakakakakakakafafacacadadahadadacacafafafafafafafafacaa
+aaababacafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakakafafafafafafacadadadaiadacamafafafafafafafacacaa
+aaababacacafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakafafafafafacamadahadadacacafafafafafafafafacabaa
aaabababacafafafafafafafakakakakakakakakakakakakafafakakakakakakakakakafafafafafafacacadadadadacafafafafafafafafafacabaa
-aaabababacacafafafafafafafakakakakakakakakakakafafafafakakakakakakakakakafafafafafacacadadalacacafafafafafafafacacacabaa
+aaabababacacafafafafafafafakakakakakakakakakakafafafafakakakakakakakakakafafafafafamacadadapacacafafafafafafafacacacabaa
aaababababacafafafafafafakakakakakakakakakafafafafafafafafafafafafafafafafafafacacacadadadadacafafafafakafafafacacababaa
-aaababababacacafafafafafafakakakakakakafafafafafafafafafafafafafafafafafafafacacadadadadadacacafafafakakafafafafacababaa
-aaababababacacafafafafafakakakakakafafafafafafafafafafafafafafafafafafafafacacadadadadacacacafafafafakakakafafafacacabaa
-aaababababaeacafafafafakakakakakafafafafafafafafafafafafafafafafafafafafacacadadadacacacafafafafafafakakakafafafafacabaa
-aaababababacacafafakakakakakakakakafafafafafafafafafacacacacacacacafafacacadadacacacafafafafafafafafakakakafafafafacabaa
+aaababababacacafafafafafafakakakakakakafafafafafafafafafafafafafafafafafafafacacadahadahadacacafafafakakafafafafacababaa
+aaababababacacafafafafafakakakakakafafafafafafafafafafafafafafafafafafafafacacahadadadacacacafafafafakakakafafafacacabaa
+aaababababaeacafafafafakakakakakafafafafafafafafafafafafafafafafafafafafacacadadadamacacafafafafafafakakakafafafafacabaa
+aaababababacacafafakakakakakakakakafafafafafafafafafacacacacacacacafafacamadadacacacafafafafafafafafakakakafafafafacabaa
aaababababacafafafakakakakakakakakakakafafafafafacacacadadadadadacacacacadadacacafafafafafafafakafakakakafafafafafacabaa
-aaabababacacafafafafakakakakakakakafafafafafafacacadadanadadadadadadadadadadacafafafafafafafafakakakakakafafafafafacabaa
-aaabababacafafafafafafakakakakakafafafafafafacacadadadadadadanadadadadadadadacafafafafafafafakakakakakakafafafafacacabaa
+aaabababacacafafafafakakakakakakakafafafafafafacacadadaqadadadadadadadadadadacafafafafafafafafakakakakakafafafafafacabaa
+aaabababacafafafafafafakakakakakafafafafafafacacadadadadadadaqadadadahadadadamafafafafafafafakakakakakakafafafafacacabaa
aaabababacafafafafafafakakakakakafafafafafacacadadadadadadadadadadadadadadacacafafafafafafafakakakakakakakakafafacacabaa
aaabababacafafafafafafafakakakakafafafafacacadadadadadadadadadadadadadadadadacacafafafafafafakakakakakakakakafafafacabaa
aaabababacafafafafafafafakakakafafafafafacadadadadadadadadadadadadadadadadadadacacafafafafafafakakakakakakafafafafacabaa
-aaabababacafafafafafafafakakakakakafafafacadadadadadadadaoadadadadadaoadadadadadacacafafafafafafakakakakafafafafafacabaa
-aaabababacafafafafafafafakakakakakafafafacadadapadadapadaqarasasasaraqadapadadapadacafafafafafafakakakakafafafafafacabaa
-aaabababacafafafafafafafakakakakakakafafacaqaqaqaqaqaqaqaqaqaqataqaqaqaqaqaqaqaqaqaqaqafafafafafakakakakafafafafacacabaa
-aaabababacacafafafafafafakakakakakakafafacaqauavawaxayaxawazaqaAaqaBaCaCaCaDaEaFaGaHaqafafafafafakakakakafafafafacacabaa
-aaabababacacacafafafafakakakakakakakafapaIaqaJaKaLaKaKaKaMaNaqaMaqaOaPaPaPaQaRaSaTaSaqaUapafafafakakakafafafafafafacabaa
-aaabababababacacafafafakakakakakakakafafafaqaVaKaKaKaKaKaMaWaqaXaqaqaqaqaqaqaYaZaqaqaqafafafafafakakakafafafafafafacabaa
-aaababababababacafafafakakakakakakakakafafaqbabbbbbcbbbbbdaMbeaMaMbfaMaMaMaMaMbfaMaMaqafafafafafakakakafafafafafafafacaa
-aaabababagabababacafafakakakakakakakakapaUaqbgaqaqaqaqaqaqaqaqaqaqaqaqaqaqbhaqaqaqaqaqaUapafafafakakakafafafafafafafacaa
-aaababababababacacafafafakakakakakakakakafaqbibjbkblbmbnbobpaqbqbrbsbtbsbubvbhbwbhbxaqafafafafafakakakafafafafafafafacaa
-aaababababababacafafafafakakakakakakakakafaqbibibybibibybibiaqbzbAbAbAbAbAbBaqbCaqbDaqafafafafakakakakakafafafafafafacaa
-aaababababababacafafafafakakakakakakakakakaqaqaqaqaqaqaqaqaqaqaqaqbEbFbFbFbGaqaqaqaqaqafafafafakakakakafafafafafafafacaa
-aaabababababacacafafafakakakakakakakakakakafafafafaIacacadadadadbHadadadadadbHacacafafafafafafakakakakafafafafafafafacaa
-aaabababababacafafafafakakakakakakakakakakakakafafapafacacacacacapadadadadadapacafafafafafafakakakakakafafafafafafacacaa
+aaabababacafafafafafafafakakakakakafafafacadadadadadadadaradadadadadaradadadadadacacafafafafafafakakakakafafafafafacabaa
+aaabababacafafafafafafafakakakakakafafafacadadasadadasadatauavavavauatadasadadasadacafafafafafafakakakakafafafafafacabaa
+aaabababacafafafafafafafakakakakakakafafacatatatatatatatatatatawatatatatatatatatatatatafafafafafakakakakafafafafacacabaa
+aaabababacacafafafafafafakakakakakakafafacataxayazaAaBaAazaCataDataEaFaFaFaGaHaIaJaKatafafafafafakakakakafafafafacacabaa
+aaabababacacacafafafafakakakakakakakafasaLataMaNaOaNaNaNaPaQataPataRaSaSaSaTaUaVaWaVataXasafafafakakakafafafafafafacabaa
+aaabababababacacafafafakakakakakakakafafafataYaNaNaNaNaNaPaZatbaatatatatatatbbbcatatatafafafafafakakakafafafafafafacabaa
+aaababababababacafafafakakakakakakakakafafatbdbebebfbebebgaPbhaPaPbiaPaPaPaPaPbiaPaPatafafafafafakakakafafafafafafafacaa
+aaabababagabababacafafakakakakakakakakasaXatbjatatatatatatatatatatatatatatbkatatatatataXasafafafakakakafafafafafafafacaa
+aaababababababacacafafafakakakakakakakakafatblbmbnbobpbqbrbsatbtbubvbwbvbxbybkbzbkbAatafafafafafakakakafafafafafafafacaa
+aaababababababacafafafafakakakakakakakakafatblblbBblblbBblblatbCbDbDbDbDbDbEatbFatbGatafafafafakakakakakafafafafafafacaa
+aaababababababacafafafafakakakakakakakakakatatatatatatatatatatatatbHbIbIbIbJatatatatatafafafafakakakakafafafafafafafacaa
+aaabababababacacafafafakakakakakakakakakakafafafafaLacacadadadadbKadadadadadbKacacafafafafafafakakakakafafafafafafafacaa
+aaabababababacafafafafakakakakakakakakakakakakafafasafacacacacacasadadadadadasacafafafafafafakakakakakafafafafafafacacaa
aaababababacacafafafafakakakakakakakakakakakakakafafafafafafafacacadadadadadacacafafafafafakakakakakakafafafafafafacabaa
aaababababacafafafafafafakakakakakakakakakakakakafafafafafafafafacacacacacacacafafafafafafafakakakakakafafafafafacacabaa
aaabababacacafafafafafafakakakakakakakakakakakakakafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafacababaa
diff --git a/maps/submaps/surface_submaps/wilderness/MCamp1.dmm b/maps/submaps/surface_submaps/wilderness/MCamp1.dmm
index 3033ffdf626..bebe7a2de80 100644
--- a/maps/submaps/surface_submaps/wilderness/MCamp1.dmm
+++ b/maps/submaps/surface_submaps/wilderness/MCamp1.dmm
@@ -1,53 +1,60 @@
"a" = (/turf/template_noop,/area/template_noop)
"b" = (/turf/template_noop,/area/submap/MilitaryCamp1)
"c" = (/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1)
-"d" = (/obj/effect/mine,/turf/template_noop,/area/submap/MilitaryCamp1)
+"d" = (/obj/random/landmine,/turf/template_noop,/area/submap/MilitaryCamp1)
"e" = (/obj/structure/flora/bush,/turf/template_noop,/area/submap/MilitaryCamp1)
"f" = (/obj/effect/decal/cleanable/blood,/turf/template_noop,/area/submap/MilitaryCamp1)
-"g" = (/obj/effect/decal/remains,/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1)
-"h" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/MilitaryCamp1)
-"i" = (/obj/item/stack/rods,/turf/template_noop,/area/submap/MilitaryCamp1)
-"j" = (/obj/effect/mine,/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1)
-"k" = (/turf/simulated/wall,/area/submap/MilitaryCamp1)
-"l" = (/turf/simulated/floor,/area/submap/MilitaryCamp1)
-"m" = (/obj/item/weapon/material/shard,/turf/template_noop,/area/submap/MilitaryCamp1)
-"n" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1)
-"o" = (/obj/structure/girder,/turf/simulated/floor,/area/submap/MilitaryCamp1)
-"p" = (/obj/machinery/computer/communications,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1)
-"q" = (/obj/structure/table/standard,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1)
-"r" = (/obj/effect/mine,/turf/simulated/floor,/area/submap/MilitaryCamp1)
-"s" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/MilitaryCamp1)
-"t" = (/obj/machinery/computer/security,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1)
-"u" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1)
-"v" = (/obj/machinery/door/airlock,/turf/simulated/floor,/area/submap/MilitaryCamp1)
-"w" = (/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1)
-"x" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/template_noop,/area/submap/MilitaryCamp1)
-"y" = (/obj/structure/table,/turf/simulated/floor,/area/submap/MilitaryCamp1)
-"z" = (/obj/structure/table/standard,/obj/random/firstaid,/turf/simulated/floor,/area/submap/MilitaryCamp1)
-"A" = (/obj/machinery/door/airlock,/obj/effect/mine,/turf/simulated/floor,/area/submap/MilitaryCamp1)
-"B" = (/obj/structure/flora/tree/dead,/turf/template_noop,/area/submap/MilitaryCamp1)
-"C" = (/obj/structure/table/standard,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/simulated/floor,/area/submap/MilitaryCamp1)
-"D" = (/obj/structure/table/standard,/obj/item/weapon/gun/energy/gun,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"g" = (/obj/random/landmine,/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1)
+"h" = (/obj/effect/decal/remains,/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1)
+"i" = (/obj/effect/mine,/turf/template_noop,/area/submap/MilitaryCamp1)
+"j" = (/obj/effect/decal/remains,/obj/random/landmine,/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1)
+"k" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/MilitaryCamp1)
+"l" = (/obj/item/stack/rods,/turf/template_noop,/area/submap/MilitaryCamp1)
+"m" = (/turf/simulated/wall,/area/submap/MilitaryCamp1)
+"n" = (/obj/random/landmine,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"o" = (/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"p" = (/obj/item/weapon/material/shard,/turf/template_noop,/area/submap/MilitaryCamp1)
+"q" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"r" = (/obj/structure/girder,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"s" = (/obj/machinery/computer/communications,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"t" = (/obj/structure/table/standard,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"u" = (/obj/effect/mine,/obj/random/landmine,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"v" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"w" = (/obj/machinery/computer/security,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"x" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"y" = (/obj/item/weapon/material/shard,/obj/random/landmine,/turf/template_noop,/area/submap/MilitaryCamp1)
+"z" = (/obj/machinery/door/airlock,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"A" = (/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"B" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/template_noop,/area/submap/MilitaryCamp1)
+"C" = (/obj/structure/table,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"D" = (/obj/structure/table/standard,/obj/random/firstaid,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"E" = (/obj/machinery/door/airlock,/obj/effect/mine,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"F" = (/obj/structure/flora/tree/dead,/turf/template_noop,/area/submap/MilitaryCamp1)
+"G" = (/obj/random/landmine,/turf/template_noop,/area/template_noop)
+"H" = (/obj/effect/decal/cleanable/dirt,/obj/random/landmine,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"I" = (/obj/structure/table/standard,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"J" = (/obj/structure/table/standard,/obj/item/weapon/gun/energy/gun,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"K" = (/obj/effect/decal/cleanable/blood,/obj/random/landmine,/turf/template_noop,/area/submap/MilitaryCamp1)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaa
abbcbdbefdbbbbbbbbba
-acgcbbbbbbbfdbcgbbba
-abccbbdbbhibbbccjhba
-abhbbikkllkklkmcbbba
-abbbbkkkllkkkkkbdbda
-abbdkknllokpqnkkbeba
-abbbkknorsktuukkbbba
-abbmkkvkkwkkkvkoxdba
-abbblknllslnwskkbbba
-afdblknllyznsskkbdba
-abbbokvAkkkkvvkobBba
-abbxkknlosssnnkkbbba
-aBbbkkCDkllnnnkkmbfa
-abbebkkkkvlkkkkbdbba
-abdbbbkkkslkkkbccdba
-abcbbbbkkbmkkbjcbbba
-acgcdbbbddbibbcghbba
-abccebdbhfbbdccbbbba
+aghcdbbbbbbfibcjbbba
+abccbbdbbklbbbccgkba
+adkbblmmnommnmpcbbba
+abbbbmmmonmmmmmbdbda
+abbdmmqoormstqmmbeba
+abbbmmqruvmwxxmmbbda
+abbymmzmmAmmmzmrBdba
+abbbomqoovoqAvmmbbba
+afdbomqooCDqvvmmbida
+abbbrmzEmmmmzzmrbFba
+GbbBmmqorvHvqqmmbbba
+aFbbmmIJmooqqqmmpbKa
+abbebmmmmzommmmbibba
+abddbbmmmvommmbcciba
+abcbbdbmmbymmbgcbbba
+acjcdbbbidblbdcjkbba
+abccebdbkfbbdccbbbba
aaaaaaaaaaaaaaaaaaaa
"}
diff --git a/polaris.dme b/polaris.dme
index aa7eb48930f..e026cf9978b 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -1046,6 +1046,7 @@
#include "code\game\objects\structures\safe.dm"
#include "code\game\objects\structures\signs.dm"
#include "code\game\objects\structures\simple_doors.dm"
+#include "code\game\objects\structures\snowman.dm"
#include "code\game\objects\structures\tank_dispenser.dm"
#include "code\game\objects\structures\target_stake.dm"
#include "code\game\objects\structures\transit_tubes.dm"