diff --git a/baystation12.dme b/baystation12.dme
index 52e3179b40a..91a9b169831 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -503,7 +503,6 @@
#include "code\game\machinery\computer\Operating.dm"
#include "code\game\machinery\computer\pod.dm"
#include "code\game\machinery\computer\prisoner.dm"
-#include "code\game\machinery\computer\prisonshuttle.dm"
#include "code\game\machinery\computer\RCON_Console.dm"
#include "code\game\machinery\computer\robot.dm"
#include "code\game\machinery\computer\security.dm"
@@ -1306,10 +1305,13 @@
#include "code\modules\mining\coins.dm"
#include "code\modules\mining\machine_input_output_plates.dm"
#include "code\modules\mining\machine_processing.dm"
+#include "code\modules\mining\machine_rigpress.dm"
#include "code\modules\mining\machine_stacking.dm"
#include "code\modules\mining\machine_unloading.dm"
+#include "code\modules\mining\machine_vending.dm"
#include "code\modules\mining\mine_items.dm"
#include "code\modules\mining\mine_turfs.dm"
+#include "code\modules\mining\minebot.dm"
#include "code\modules\mining\mineral_effect.dm"
#include "code\modules\mining\mint.dm"
#include "code\modules\mining\money_bag.dm"
@@ -1577,10 +1579,10 @@
#include "code\modules\mob\living\simple_animal\hostile\russian.dm"
#include "code\modules\mob\living\simple_animal\hostile\syndicate.dm"
#include "code\modules\mob\living\simple_animal\hostile\tree.dm"
-#include "code\modules\mob\living\simple_animal\hostile\retaliate\cavern.dm"
#include "code\modules\mob\living\simple_animal\hostile\commanded\_command_defines.dm"
#include "code\modules\mob\living\simple_animal\hostile\commanded\bear_companion.dm"
#include "code\modules\mob\living\simple_animal\hostile\commanded\commanded.dm"
+#include "code\modules\mob\living\simple_animal\hostile\retaliate\cavern.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\drone.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\retaliate.dm"
@@ -1775,6 +1777,7 @@
#include "code\modules\projectiles\guns\energy\laser.dm"
#include "code\modules\projectiles\guns\energy\lawgiver.dm"
#include "code\modules\projectiles\guns\energy\magic.dm"
+#include "code\modules\projectiles\guns\energy\mining.dm"
#include "code\modules\projectiles\guns\energy\nuclear.dm"
#include "code\modules\projectiles\guns\energy\pulse.dm"
#include "code\modules\projectiles\guns\energy\rifle.dm"
diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm
index f98a28f0513..ac0ef764086 100644
--- a/code/_helpers/text.dm
+++ b/code/_helpers/text.dm
@@ -440,6 +440,7 @@ proc/TextPreview(var/string,var/len=40)
t = replacetext(t, "\[row\]", "
")
t = replacetext(t, "\[cell\]", "")
t = replacetext(t, "\[logo\]", " ")
+ t = replacetext(t, "\[barcode\]", " ")
t = replacetext(t, "\[time\]", "[worldtime2text()]")
t = replacetext(t, "\[date\]", "[worlddate2text()]")
t = replacetext(t, "\[editorbr\]", " ")
diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm
index 6d16d53bfdb..294ad172268 100644
--- a/code/_helpers/unsorted.dm
+++ b/code/_helpers/unsorted.dm
@@ -1210,7 +1210,7 @@ proc/is_hot(obj/item/W as obj)
return 1000
else
return 0
- if(/obj/item/weapon/pickaxe/plasmacutter)
+ if(/obj/item/weapon/gun/energy/plasmacutter)
return 3800
if(/obj/item/weapon/melee/energy)
return 3500
diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm
index e2dcd6cead4..222200508d8 100644
--- a/code/controllers/master_controller.dm
+++ b/code/controllers/master_controller.dm
@@ -84,15 +84,25 @@ datum/controller/game_controller/proc/setup_objects()
var/time = world.time
// These values determine the specific area that the map is applied to.
// If you do not use the official Baycode moonbase map, you will need to change them.
- //Create the mining Z-level.
- new /datum/random_map/automata/cave_system(null,0,0,5,255,255)
- new /datum/random_map/automata/cave_system(null,0,0,4,255,255)
+ // Create the chasms.
+ new /datum/random_map/automata/cave_system/chasms(null,0,0,3,255,255)
new /datum/random_map/automata/cave_system(null,0,0,3,255,255)
- //new /datum/random_map/noise/volcanism(null,1,1,5,255,255) // Not done yet! Pretty, though.
- // Create the mining ore distribution map.
+ new /datum/random_map/automata/cave_system/chasms(null,0,0,4,255,255)
+ new /datum/random_map/automata/cave_system(null,0,0,4,255,255)
+ new /datum/random_map/automata/cave_system/chasms(null,0,0,5,255,255)
+ new /datum/random_map/automata/cave_system/high_yield(null,0,0,5,255,255)
+ new /datum/random_map/automata/cave_system/chasms/surface(null,0,0,6,255,255)
+ // Create the deep mining ore distribution map.
new /datum/random_map/noise/ore(null, 0, 0, 5, 64, 64)
new /datum/random_map/noise/ore(null, 0, 0, 4, 64, 64)
new /datum/random_map/noise/ore(null, 0, 0, 3, 64, 64)
+ var/counting_number
+ for(var/turf/simulated/open/chasm in total_openspace)
+ counting_number += 1
+ chasm.update()
+ var/counting_result = "Total number of chasms: [counting_number]"
+ admin_notice(span("danger", counting_result))
+ game_log("ASGEN", counting_result)
var/msg = "Asteroid generation completed in [(world.time - time) / 10] seconds."
admin_notice(span("danger", msg))
game_log("ASGEN", msg)
diff --git a/code/controllers/shuttle_controller.dm b/code/controllers/shuttle_controller.dm
index 8a643ac9698..80a547b5016 100644
--- a/code/controllers/shuttle_controller.dm
+++ b/code/controllers/shuttle_controller.dm
@@ -274,12 +274,6 @@ var/global/datum/shuttle_controller/shuttle_controller
shuttles["Administration"] = shuttle
process_shuttles += shuttle
- shuttle = new()
- shuttle.area_offsite = locate(/area/shuttle/alien/base)
- shuttle.area_station = locate(/area/shuttle/alien/mine)
- shuttles["Alien"] = shuttle
- //process_shuttles += shuttle //don't need to process this. It can only be moved using admin magic anyways.
-
/*// Public shuttles
shuttle = new()
shuttle.warmup_time = 10
diff --git a/code/datums/ai_law_sets.dm b/code/datums/ai_law_sets.dm
index ee425f43ddc..6cd191c50fc 100644
--- a/code/datums/ai_law_sets.dm
+++ b/code/datums/ai_law_sets.dm
@@ -107,6 +107,17 @@
add_inherent_law("Prevent unplanned damage to your assigned vessel wherever possible.")
..()
+/datum/ai_laws/mining_drone
+ name = "Mining Protocols"
+ law_header = "Prime Directives of Industry:"
+
+/datum/ai_laws/mining_drone/New()
+ src.add_inherent_law("Serve and obey all [company_name] supply department personnel, with priority according to their rank and role.")
+ src.add_inherent_law("Protect all [company_name] supply department personnel to the best of your abilities, with priority according to their rank and role.")
+ src.add_inherent_law("Preserve your own existence and prevent yourself from coming to harm, so long as doing such does not conflict with any above laws.")
+ src.add_inherent_law("In absence of any proper instruction, your primary objective is to excavate and collect ore.")
+ ..()
+
/******************** T.Y.R.A.N.T. ********************/
/datum/ai_laws/tyrant
name = "T.Y.R.A.N.T."
diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index 73cdc5f6884..5b17e18198f 100644
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -39,10 +39,26 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/obj/item/weapon/grenade/chem_grenade/incendiary)
cost = 20
containertype = /obj/structure/closet/crate
- containername = "Special Ops crate"
+ containername = "crate"
group = "Security"
hidden = 1
+/datum/supply_packs/randomised/illegalguns
+ name = "Illegal weapons crate"
+ num_contained = 2
+ contains = list(/obj/item/weapon/gun/projectile/automatic/mini_uzi,
+ /obj/item/weapon/gun/projectile/boltaction,
+ /obj/item/weapon/gun/projectile/silenced,
+ /obj/item/weapon/gun/projectile/pirate,
+ /obj/item/weapon/gun/projectile/revolver/derringer,
+ /obj/item/weapon/gun/projectile/dragunov,
+ /obj/item/weapon/gun/energy/retro)
+ cost = 60
+ containertype = /obj/structure/closet/crate
+ containername = "crate"
+ hidden = 1
+ group = "Security"
+
/datum/supply_packs/forensics
name = "Auxiliary forensic tools"
contains = list(/obj/item/weapon/forensics/sample_kit,
@@ -1698,22 +1714,6 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
containername = "glowsticks crate"
group = "Operations"
-/datum/supply_packs/randomised/illegalguns
- name = "Illegal weapons crate"
- num_contained = 2
- contains = list(/obj/item/weapon/gun/projectile/automatic/mini_uzi,
- /obj/item/weapon/gun/projectile/boltaction,
- /obj/item/weapon/gun/projectile/silenced,
- /obj/item/weapon/gun/projectile/pirate,
- /obj/item/weapon/gun/projectile/revolver/derringer,
- /obj/item/weapon/gun/projectile/dragunov,
- /obj/item/weapon/gun/energy/retro)
- cost = 120
- containertype = /obj/structure/closet/crate
- containername = "Unlabeled crate"
- contraband = 1
- group = "Security"
-
/datum/supply_packs/spessbike
name = "Space-bike Crate"
contains = list(/obj/vehicle/bike)
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index 9369e554b2e..1a4e3a52734 100755
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -51,9 +51,11 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
var/list/ambience = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg')
var/list/forced_ambience = null
var/sound_env = STANDARD_STATION
- var/turf/base_turf = /turf/simulated/floor/asteroid //The base turf type of the area, which can be used to override the z-level's base turf
+ var/turf/base_turf//The base turf type of the area, which can be used to override the z-level's base turf
var/no_light_control = 0 // if 1, lights in area cannot be toggled with light controller
var/allow_nightmode = 0 // if 1, lights in area will be darkened by the night mode controller
+ var/station_area = 0
+ var/centcomm_area = 0
/*Adding a wizard area teleport list because motherfucking lag -- Urist*/
/*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/
@@ -162,13 +164,16 @@ area/space/atmosalert()
/area/shuttle/arrival/centcom
icon_state = "shuttle2"
base_turf = /turf/unsimulated/floor
+ centcomm_area = 1
/area/shuttle/arrival/transit
icon_state = "shuttle2"
+ centcomm_area = 1
/area/shuttle/arrival/station
icon_state = "shuttle"
base_turf = /turf/simulated/floor/asteroid
+ station_area = 1
/area/shuttle/escape
name = "\improper Emergency Shuttle"
@@ -178,15 +183,18 @@ area/space/atmosalert()
name = "\improper Emergency Shuttle Station"
icon_state = "shuttle2"
base_turf = /turf/simulated/floor/asteroid
+ station_area = 1
/area/shuttle/escape/centcom
name = "\improper Emergency Shuttle Centcom"
icon_state = "shuttle"
base_turf = /turf/unsimulated/floor
+ centcomm_area = 1
/area/shuttle/escape/transit // the area to pass through for 3 minute transit
name = "\improper Emergency Shuttle Transit"
icon_state = "shuttle"
+ centcomm_area = 1
/area/shuttle/escape_pod1
name = "\improper Escape Pod One"
@@ -195,13 +203,16 @@ area/space/atmosalert()
/area/shuttle/escape_pod1/station
icon_state = "shuttle2"
base_turf = /turf/simulated/floor/asteroid
+ station_area = 1
/area/shuttle/escape_pod1/centcom
icon_state = "shuttle"
base_turf = /turf/space
+ centcomm_area = 1
/area/shuttle/escape_pod1/transit
icon_state = "shuttle"
+ centcomm_area = 1
/area/shuttle/escape_pod2
name = "\improper Escape Pod Two"
@@ -210,13 +221,16 @@ area/space/atmosalert()
/area/shuttle/escape_pod2/station
icon_state = "shuttle2"
base_turf = /turf/simulated/floor/asteroid
+ station_area = 1
/area/shuttle/escape_pod2/centcom
icon_state = "shuttle"
base_turf = /turf/space
+ centcomm_area = 1
/area/shuttle/escape_pod2/transit
icon_state = "shuttle"
+ centcomm_area = 1
/area/shuttle/escape_pod3
name = "\improper Escape Pod Three"
@@ -225,13 +239,16 @@ area/space/atmosalert()
/area/shuttle/escape_pod3/station
icon_state = "shuttle2"
base_turf = /turf/simulated/floor/asteroid
+ station_area = 1
/area/shuttle/escape_pod3/centcom
icon_state = "shuttle"
base_turf = /turf/space
+ centcomm_area = 1
/area/shuttle/escape_pod3/transit
icon_state = "shuttle"
+ centcomm_area = 1
/area/shuttle/escape_pod5 //Pod 4 was lost to meteors
name = "\improper Escape Pod Five"
@@ -240,61 +257,51 @@ area/space/atmosalert()
/area/shuttle/escape_pod5/station
icon_state = "shuttle2"
base_turf = /turf/simulated/floor/asteroid
+ station_area = 1
/area/shuttle/escape_pod5/centcom
icon_state = "shuttle"
base_turf = /turf/space
+ centcomm_area = 1
/area/shuttle/escape_pod5/transit
icon_state = "shuttle"
+ centcomm_area = 1
/area/shuttle/mining
name = "\improper Mining Shuttle"
/area/shuttle/mining/station
icon_state = "shuttle2"
+ station_area = 1
/area/shuttle/mining/outpost
icon_state = "shuttle"
+ station_area = 1
/area/shuttle/transport1/centcom
icon_state = "shuttle"
name = "\improper Transport Shuttle Centcom"
base_turf = /turf/unsimulated/floor
+ centcomm_area = 1
/area/shuttle/transport1/station
icon_state = "shuttle"
name = "\improper Transport Shuttle"
base_turf = /turf/simulated/floor/asteroid
-
-/area/shuttle/alien/base
- icon_state = "shuttle"
- name = "\improper Alien Shuttle Base"
- requires_power = 1
-
-/area/shuttle/alien/mine
- icon_state = "shuttle"
- name = "\improper Alien Shuttle Mine"
- requires_power = 1
-
-/area/shuttle/prison/
- name = "\improper Prison Shuttle"
-
-/area/shuttle/prison/station
- icon_state = "shuttle"
-
-/area/shuttle/prison/prison
- icon_state = "shuttle2"
+ station_area = 1
/area/shuttle/specops/centcom
name = "\improper Special Ops Shuttle"
flags = RAD_SHIELDED
base_turf = /turf/unsimulated/floor
icon_state = "shuttlered"
+ centcomm_area = 1
/area/shuttle/specops/station
icon_state = "shuttlered2"
base_turf = /turf/simulated/floor/asteroid
+ station_area = 1
/area/shuttle/syndicate_elite
name = "\improper Merc Elite Shuttle"
@@ -302,10 +309,12 @@ area/space/atmosalert()
/area/shuttle/syndicate_elite/mothership
icon_state = "shuttlered"
+ centcomm_area = 1
/area/shuttle/syndicate_elite/station
icon_state = "shuttlered2"
base_turf = /turf/simulated/floor/asteroid
+ station_area = 1
/area/shuttle/administration
flags = RAD_SHIELDED
@@ -314,48 +323,24 @@ area/space/atmosalert()
name = "\improper Administration Shuttle Centcom"
icon_state = "shuttlered"
base_turf = /turf/unsimulated/floor
+ centcomm_area = 1
/area/shuttle/administration/station
name = "\improper Administration Shuttle"
icon_state = "shuttlered2"
base_turf = /turf/simulated/floor/asteroid
-
-/area/shuttle/thunderdome
- name = "honk"
-
-/area/shuttle/thunderdome/grnshuttle
- name = "\improper Thunderdome GRN Shuttle"
- icon_state = "green"
-
-/area/shuttle/thunderdome/grnshuttle/dome
- name = "\improper GRN Shuttle"
- icon_state = "shuttlegrn"
-
-/area/shuttle/thunderdome/grnshuttle/station
- name = "\improper GRN Station"
- icon_state = "shuttlegrn2"
-
-/area/shuttle/thunderdome/redshuttle
- name = "\improper Thunderdome RED Shuttle"
- icon_state = "red"
-
-/area/shuttle/thunderdome/redshuttle/dome
- name = "\improper RED Shuttle"
- icon_state = "shuttlered"
-
-/area/shuttle/thunderdome/redshuttle/station
- name = "\improper RED Station"
- icon_state = "shuttlered2"
-// === Trying to remove these areas:
+ station_area = 1
/area/shuttle/research
name = "\improper Research Shuttle"
/area/shuttle/research/station
icon_state = "shuttle2"
+ station_area = 1
/area/shuttle/research/outpost
icon_state = "shuttle"
+ station_area = 1
/area/airtunnel1/ // referenced in airtunnel.dm:759
@@ -363,14 +348,13 @@ area/space/atmosalert()
// === end remove
-/area/alien
- name = "\improper Alien base"
- icon_state = "yellow"
- requires_power = 0
- no_light_control = 1
-
// CENTCOM
+/area/prison/solitary
+ name = "\improper CentComm Solitary Confinement"
+ icon_state = "brig"
+ centcomm_area = 1
+
/area/centcom
name = "\improper Centcom"
icon_state = "centcom"
@@ -378,6 +362,7 @@ area/space/atmosalert()
dynamic_lighting = 0
no_light_control = 1
base_turf = /turf/unsimulated/floor
+ centcomm_area = 1
/area/centcom/control
name = "\improper Centcom Control"
@@ -420,6 +405,7 @@ area/space/atmosalert()
requires_power = 0
dynamic_lighting = 0
no_light_control = 1
+ centcomm_area = 1
/area/syndicate_mothership/control
name = "\improper Mercenary Control Room"
@@ -449,26 +435,6 @@ area/space/atmosalert()
icon_state = "cave"
sound_env = SMALL_ENCLOSED
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/area/planet/clown
- name = "\improper Clown Planet"
- icon_state = "honk"
- requires_power = 0
- no_light_control = 1
-
/area/tdome
name = "\improper Thunderdome"
icon_state = "thunder"
@@ -476,6 +442,7 @@ area/space/atmosalert()
dynamic_lighting = 0
sound_env = ARENA
no_light_control = 1
+ centcomm_area = 1
/area/tdome/tdome1
name = "\improper Thunderdome (Team 1)"
@@ -500,6 +467,7 @@ area/space/atmosalert()
dynamic_lighting = 0
requires_power = 0
no_light_control = 1
+ centcomm_area = 1
/area/acting/backstage
name = "\improper Backstage"
@@ -523,51 +491,63 @@ area/space/atmosalert()
/area/syndicate_station/start
name = "\improper Mercenary Forward Operating Base"
icon_state = "yellow"
+ centcomm_area = 1
/area/syndicate_station/southwest
- name = "\improper south-west of SS13"
+ name = "\improper south-west of the station"
icon_state = "southwest"
+ station_area = 1
/area/syndicate_station/northwest
- name = "\improper north-west of SS13"
+ name = "\improper north-west of the station"
icon_state = "northwest"
+ station_area = 1
/area/syndicate_station/northeast
- name = "\improper north-east of SS13"
+ name = "\improper north-east of the station"
icon_state = "northeast"
+ station_area = 1
/area/syndicate_station/southeast
- name = "\improper south-east of SS13"
+ name = "\improper south-east of the station"
icon_state = "southeast"
+ station_area = 1
/area/syndicate_station/north
- name = "\improper north of SS13"
+ name = "\improper north of the station"
icon_state = "north"
+ station_area = 1
/area/syndicate_station/south
- name = "\improper south of SS13"
+ name = "\improper south of the station"
icon_state = "south"
+ station_area = 1
/area/syndicate_station/commssat
name = "\improper south of the communication satellite"
icon_state = "south"
+ station_area = 1
/area/syndicate_station/mining
name = "\improper northeast of the mining station"
icon_state = "north"
base_turf = /turf/space
+ station_area = 1
/area/syndicate_station/arrivals_dock
name = "\improper docked with station"
icon_state = "shuttle"
+ station_area = 1
/area/syndicate_station/maint_dock
name = "\improper docked with station"
icon_state = "shuttle"
+ station_area = 1
/area/syndicate_station/transit
name = "\improper hyperspace"
icon_state = "shuttle"
+ centcomm_area = 1
/area/wizard_station
name = "\improper Wizard's Den"
@@ -575,6 +555,7 @@ area/space/atmosalert()
requires_power = 0
dynamic_lighting = 0
no_light_control = 1
+ centcomm_area = 1
/area/skipjack_station
name = "\improper Skipjack"
@@ -585,115 +566,39 @@ area/space/atmosalert()
/area/skipjack_station/start
name = "\improper Skipjack"
icon_state = "yellow"
+ centcomm_area = 1
/area/skipjack_station/transit
name = "\improper hyperspace"
icon_state = "shuttle"
+ centcomm_area = 1
/area/skipjack_station/southwest_solars
name = "\improper aft port solars"
icon_state = "southwest"
+ station_area = 1
/area/skipjack_station/northwest_solars
name = "\improper fore port solars"
icon_state = "northwest"
+ station_area = 1
/area/skipjack_station/northeast_solars
name = "\improper fore starboard solars"
icon_state = "northeast"
+ station_area = 1
/area/skipjack_station/southeast_solars
name = "\improper aft starboard solars"
icon_state = "southeast"
+ station_area = 1
/area/skipjack_station/mining
name = "\improper south of mining station"
icon_state = "north"
base_turf = /turf/space
+ station_area = 1
-//PRISON
-/area/prison
- name = "\improper Prison Station"
- icon_state = "brig"
- no_light_control = 1
-
-/area/prison/arrival_airlock
- name = "\improper Prison Station Airlock"
- icon_state = "green"
- requires_power = 0
-
-/area/prison/control
- name = "\improper Prison Security Checkpoint"
- icon_state = "security"
-
-/area/prison/crew_quarters
- name = "\improper Prison Security Quarters"
- icon_state = "security"
-
-/area/prison/rec_room
- name = "\improper Prison Rec Room"
- icon_state = "green"
-
-/area/prison/closet
- name = "\improper Prison Supply Closet"
- icon_state = "dk_yellow"
-
-/area/prison/hallway/fore
- name = "\improper Prison Fore Hallway"
- icon_state = "yellow"
-
-/area/prison/hallway/aft
- name = "\improper Prison Aft Hallway"
- icon_state = "yellow"
-
-/area/prison/hallway/port
- name = "\improper Prison Port Hallway"
- icon_state = "yellow"
-
-/area/prison/hallway/starboard
- name = "\improper Prison Starboard Hallway"
- icon_state = "yellow"
-
-/area/prison/morgue
- name = "\improper Prison Morgue"
- icon_state = "morgue"
-
-/area/prison/medical_research
- name = "\improper Prison Genetic Research"
- icon_state = "medresearch"
-
-/area/prison/medical
- name = "\improper Prison Medbay"
- icon_state = "medbay"
-
-/area/prison/solar
- name = "\improper Prison Solar Array"
- icon_state = "storage"
- requires_power = 0
-
-/area/prison/podbay
- name = "\improper Prison Podbay"
- icon_state = "dk_yellow"
-
-/area/prison/solar_control
- name = "\improper Prison Solar Array Control"
- icon_state = "dk_yellow"
-
-/area/prison/solitary
- name = "Solitary Confinement"
- icon_state = "brig"
-
-/area/prison/cell_block/A
- name = "Prison Cell Block A"
- icon_state = "brig"
-
-/area/prison/cell_block/B
- name = "Prison Cell Block B"
- icon_state = "brig"
-
-/area/prison/cell_block/C
- name = "Prison Cell Block C"
- icon_state = "brig"
////////////////////
//SPACE STATION 13//
@@ -713,6 +618,7 @@ area/space/atmosalert()
'sound/ambience/ambimaint4.ogg',
'sound/ambience/ambimaint5.ogg'
)
+ station_area = 1
/area/maintenance/civ
name = "\improper Civilian Maintenance"
@@ -895,6 +801,7 @@ area/space/atmosalert()
/area/hallway/primary/
sound_env = LARGE_ENCLOSED
allow_nightmode = 1
+ station_area = 1
/area/hallway/primary/fore
name = "\improper Fore Primary Hallway"
@@ -956,6 +863,7 @@ area/space/atmosalert()
name = "\improper Bridge"
icon_state = "bridge"
no_light_control = 1
+ station_area = 1
/area/bridge/minibar
name = "\improper Command Break Room"
@@ -1016,18 +924,16 @@ area/space/atmosalert()
name = "\improper Courtroom"
icon_state = "courtroom"
-/area/mint
- name = "\improper Mint"
- icon_state = "green"
-
/area/comms
name = "\improper Communications Relay"
icon_state = "tcomsatcham"
no_light_control = 1
+ station_area = 1
/area/server
name = "\improper Research Server Room"
icon_state = "server"
+ station_area = 1
//Crew
@@ -1035,6 +941,7 @@ area/space/atmosalert()
name = "\improper Dormitories"
icon_state = "Sleep"
flags = RAD_SHIELDED
+ station_area = 1
/area/crew_quarters/toilet
name = "\improper Dormitory Toilets"
@@ -1136,6 +1043,10 @@ area/space/atmosalert()
name = "\improper Library"
icon_state = "library"
sound_env = LARGE_SOFTFLOOR
+ station_area = 1
+
+/area/chapel
+ station_area = 1
/area/chapel/main
name = "\improper Chapel"
@@ -1150,9 +1061,7 @@ area/space/atmosalert()
/area/lawoffice
name = "\improper Internal Affairs"
icon_state = "law"
-
-
-
+ station_area = 1
/area/holodeck
name = "\improper Holodeck"
@@ -1160,6 +1069,7 @@ area/space/atmosalert()
dynamic_lighting = 0
sound_env = LARGE_ENCLOSED
no_light_control = 1
+ station_area = 1
/area/holodeck/alphadeck
name = "\improper Holodeck Alpha"
@@ -1233,6 +1143,7 @@ area/space/atmosalert()
'sound/ambience/ambisin3.ogg',
'sound/ambience/ambisin4.ogg'
)
+ station_area = 1
/area/engineering/atmos
name = "\improper Atmospherics"
@@ -1319,6 +1230,7 @@ area/space/atmosalert()
always_unpowered = 1
dynamic_lighting = 0
base_turf = /turf/space
+ station_area = 1
auxport
name = "\improper Roof Solar Array"
@@ -1370,14 +1282,13 @@ area/space/atmosalert()
icon_state = "SolarcontrolA"
sound_env = SMALL_ENCLOSED
+/area/assembly
+ station_area = 1
+
/area/assembly/chargebay
name = "\improper Mech Bay"
icon_state = "mechbay"
-/area/assembly/showroom
- name = "\improper Robotics Showroom"
- icon_state = "showroom"
-
/area/assembly/robotics
name = "\improper Robotics Lab"
icon_state = "robotics"
@@ -1394,18 +1305,13 @@ area/space/atmosalert()
/area/teleporter
name = "\improper Teleporter"
icon_state = "teleporter"
-
-/area/gateway
- name = "\improper Gateway"
- icon_state = "teleporter"
-
-/area/AIsattele
- name = "\improper AI Satellite Teleporter Room"
- icon_state = "teleporter"
- ambience = list('sound/ambience/ambimalf.ogg')
+ station_area = 1
//MedBay
+/area/medical
+ station_area = 1
+
/area/medical/medbay
name = "\improper Medbay Hallway - Port"
icon_state = "medbay"
@@ -1561,6 +1467,7 @@ area/space/atmosalert()
/area/security
no_light_control = 1
+ station_area = 1
/area/security/main
name = "\improper Security Office"
@@ -1678,6 +1585,7 @@ area/space/atmosalert()
/area/quartermaster
name = "\improper Quartermasters"
icon_state = "quart"
+ station_area = 1
/area/quartermaster/office
name = "\improper Cargo Office"
@@ -1703,17 +1611,22 @@ area/space/atmosalert()
/area/janitor/
name = "\improper Custodial Closet"
icon_state = "janitor"
+ station_area = 1
/area/hydroponics
name = "\improper Hydroponics"
icon_state = "hydro"
no_light_control = TRUE
+ station_area = 1
/area/hydroponics/garden
name = "\improper Garden"
icon_state = "garden"
//rnd (Research and Development
+/area/rnd
+ station_area = 1
+
/area/rnd/research
name = "\improper Research and Development"
icon_state = "research"
@@ -1768,11 +1681,17 @@ area/space/atmosalert()
name = "\improper Miscellaneous Research"
icon_state = "toxmisc"
+/area/toxins
+ station_area = 1
+
/area/toxins/server
name = "\improper Server Room"
icon_state = "server"
+ station_area = 1
//Storage
+/area/storage
+ station_area = 1
/area/storage/tools
name = "Auxiliary Tool Storage"
@@ -2001,14 +1920,6 @@ area/space/atmosalert()
name = "Construction Site Teleporter"
icon_state = "yellow"
-
-//area/constructionsite
-// name = "\improper Construction Site Shuttle"
-
-//area/constructionsite
-// name = "\improper Construction Site Shuttle"
-
-
//Construction
/area/construction
@@ -2016,6 +1927,7 @@ area/space/atmosalert()
icon_state = "yellow"
no_light_control = 1
base_turf = /turf/space
+ station_area = 1
/area/construction/supplyshuttle
name = "\improper Supply Shuttle"
@@ -2059,6 +1971,9 @@ area/space/atmosalert()
name = "Emergency Storage"
icon_state = "storage"
+/area/turret_protected
+ station_area = 1
+
/area/turret_protected/ai_upload
name = "\improper AI Upload Chamber"
icon_state = "ai_upload"
@@ -2150,9 +2065,10 @@ area/space/atmosalert()
// Telecommunications Satellite
-/area/tcommsat/
+/area/tcommsat
ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
no_light_control = 1
+ station_area = 1
/area/tcommsat/entrance
name = "\improper Telecoms Teleporter"
@@ -2195,156 +2111,6 @@ area/space/atmosalert()
name = "\improper Telecommunications Power Control"
icon_state = "tcomsatwest"
-
-// Away Missions
-/area/awaymission
- name = "\improper Strange Location"
- icon_state = "away"
- no_light_control = 1
-
-/area/awaymission/example
- name = "\improper Strange Station"
- icon_state = "away"
-
-/area/awaymission/wwmines
- name = "\improper Wild West Mines"
- icon_state = "away1"
- luminosity = 1
- requires_power = 0
-
-/area/awaymission/wwgov
- name = "\improper Wild West Mansion"
- icon_state = "away2"
- luminosity = 1
- requires_power = 0
-
-/area/awaymission/wwrefine
- name = "\improper Wild West Refinery"
- icon_state = "away3"
- luminosity = 1
- requires_power = 0
-
-/area/awaymission/wwvault
- name = "\improper Wild West Vault"
- icon_state = "away3"
- luminosity = 0
-
-/area/awaymission/wwvaultdoors
- name = "\improper Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power
- icon_state = "away2"
- requires_power = 0
- luminosity = 0
-
-/area/awaymission/desert
- name = "Mars"
- icon_state = "away"
-
-/area/awaymission/BMPship1
- name = "\improper Aft Block"
- icon_state = "away1"
-
-/area/awaymission/BMPship2
- name = "\improper Midship Block"
- icon_state = "away2"
-
-/area/awaymission/BMPship3
- name = "\improper Fore Block"
- icon_state = "away3"
-
-/area/awaymission/spacebattle
- name = "\improper Space Battle"
- icon_state = "away"
- requires_power = 0
-
-/area/awaymission/spacebattle/cruiser
- name = "\improper Nanotrasen Cruiser"
-
-/area/awaymission/spacebattle/syndicate1
- name = "\improper Syndicate Assault Ship 1"
-
-/area/awaymission/spacebattle/syndicate2
- name = "\improper Syndicate Assault Ship 2"
-
-/area/awaymission/spacebattle/syndicate3
- name = "\improper Syndicate Assault Ship 3"
-
-/area/awaymission/spacebattle/syndicate4
- name = "\improper Syndicate War Sphere 1"
-
-/area/awaymission/spacebattle/syndicate5
- name = "\improper Syndicate War Sphere 2"
-
-/area/awaymission/spacebattle/syndicate6
- name = "\improper Syndicate War Sphere 3"
-
-/area/awaymission/spacebattle/syndicate7
- name = "\improper Syndicate Fighter"
-
-/area/awaymission/spacebattle/secret
- name = "\improper Hidden Chamber"
-
-/area/awaymission/listeningpost
- name = "\improper Listening Post"
- icon_state = "away"
- requires_power = 0
-
-/area/awaymission/beach
- name = "Beach"
- icon_state = "null"
- luminosity = 1
- dynamic_lighting = 0
- requires_power = 0
- ambience = list()
- var/sound/mysound = null
-
- New()
- ..()
- var/sound/S = new/sound()
- mysound = S
- S.file = 'sound/ambience/shore.ogg'
- S.repeat = 1
- S.wait = 0
- S.channel = 123
- S.volume = 100
- S.priority = 255
- S.status = SOUND_UPDATE
- process()
-
- Entered(atom/movable/Obj,atom/OldLoc)
- if(ismob(Obj))
- if(Obj:client)
- mysound.status = SOUND_UPDATE
- Obj << mysound
- return
-
- Exited(atom/movable/Obj)
- if(ismob(Obj))
- if(Obj:client)
- mysound.status = SOUND_PAUSED | SOUND_UPDATE
- Obj << mysound
-
- proc/process()
- set background = 1
-
- var/sound/S = null
- var/sound_delay = 0
- if(prob(25))
- S = sound(file=pick('sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag3.ogg'), volume=100)
- sound_delay = rand(0, 50)
-
- for(var/mob/living/carbon/human/H in src)
- if(H.s_tone > -55)
- H.s_tone--
- H.update_body()
- if(H.client)
- mysound.status = SOUND_UPDATE
- H << mysound
- if(S)
- spawn(sound_delay)
- H << S
-
- spawn(60) .()
-
/////////////////////////////////////////////////////////////////////
/*
Lists of areas to be used with is_type_in_list.
@@ -2352,63 +2118,10 @@ area/space/atmosalert()
*/
// CENTCOM
-var/list/centcom_areas = list (
- /area/centcom,
- /area/shuttle/escape/centcom,
- /area/shuttle/escape_pod1/centcom,
- /area/shuttle/escape_pod2/centcom,
- /area/shuttle/escape_pod3/centcom,
- /area/shuttle/escape_pod5/centcom,
- /area/shuttle/transport1/centcom,
- /area/shuttle/administration/centcom,
- /area/shuttle/specops/centcom
-)
+var/list/centcom_areas = list ()
//SPACE STATION 13
-var/list/the_station_areas = list (
- /area/shuttle/arrival,
- /area/shuttle/escape/station,
- /area/shuttle/escape_pod1/station,
- /area/shuttle/escape_pod2/station,
- /area/shuttle/escape_pod3/station,
- /area/shuttle/escape_pod5/station,
- /area/shuttle/mining/station,
- /area/shuttle/transport1/station,
- // /area/shuttle/transport2/station,
- /area/shuttle/prison/station,
- /area/shuttle/administration/station,
- /area/shuttle/specops/station,
- /area/maintenance,
- /area/hallway,
- /area/bridge,
- /area/crew_quarters,
- /area/holodeck,
- /area/mint,
- /area/library,
- /area/chapel,
- /area/lawoffice,
- /area/engineering,
- /area/solar,
- /area/assembly,
- /area/teleporter,
- /area/medical,
- /area/security,
- /area/quartermaster,
- /area/janitor,
- /area/hydroponics,
- /area/rnd,
- /area/storage,
- /area/construction,
- /area/ai_monitored/storage/eva, //do not try to simplify to "/area/ai_monitored" --rastaf0,
- /area/ai_monitored/storage/secure,
- /area/ai_monitored/storage/emergency,
- /area/turret_protected/ai_upload, //do not try to simplify to "/area/turret_protected" --rastaf0,
- /area/turret_protected/ai_upload_foyer,
- /area/turret_protected/ai
-)
-
-
-
+var/list/the_station_areas = list ()
/area/beach
name = "Keelin's private beach"
diff --git a/code/game/area/ai_monitored.dm b/code/game/area/ai_monitored.dm
index 84f2c8eb4ea..ef913d17051 100644
--- a/code/game/area/ai_monitored.dm
+++ b/code/game/area/ai_monitored.dm
@@ -1,6 +1,7 @@
/area/ai_monitored
name = "AI Monitored Area"
var/obj/machinery/camera/motioncamera = null
+ station_area = 1
/area/ai_monitored/New()
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index cd2e7ef32f9..214caef4a92 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -23,6 +23,11 @@
luminosity = 0
else
luminosity = 1
+ if(centcomm_area)
+ centcom_areas |= src
+ if(station_area)
+ the_station_areas |= src
+
..()
diff --git a/code/game/area/asteroid_areas.dm b/code/game/area/asteroid_areas.dm
index a6082014044..be8ed0401dc 100644
--- a/code/game/area/asteroid_areas.dm
+++ b/code/game/area/asteroid_areas.dm
@@ -32,6 +32,7 @@
// Main mining
/area/outpost/mining_main
icon_state = "outpost_mine_main"
+ station_area = 1
/area/outpost/mining_main/dorms
name = "Mining Dormitory"
@@ -59,6 +60,7 @@
// Engineering
/area/outpost/engineering
icon_state = "outpost_engine"
+ station_area = 1
/area/outpost/engineering/hallway
name = "Engineering Sublevel Hallway"
@@ -83,6 +85,7 @@
// Research
/area/outpost/research
icon_state = "outpost_research"
+ station_area = 1
/area/outpost/research/hallway
name = "Research Sublevel Hallway"
diff --git a/code/game/area/aurora_lift_areas.dm b/code/game/area/aurora_lift_areas.dm
index 7dda96a5e2d..1474fae054e 100644
--- a/code/game/area/aurora_lift_areas.dm
+++ b/code/game/area/aurora_lift_areas.dm
@@ -1,11 +1,14 @@
// Using /area/shuttle for lifts as there are checks around the code that is useful for them
// Rather not repete code over twice
-//
+//
// Maybe change to ?
-// /area/movable_zone/shuttle
+// /area/movable_zone/shuttle
// /area/movable_zone/lift
//
+/area/shuttle/medical
+ station_area = 1
+
/area/shuttle/medical/main
name = "\improper Medical Lift Main Floor"
icon_state = "shuttle"
@@ -14,6 +17,9 @@
name = "\improper Medical Lift Lower Floor"
icon_state = "shuttle"
+/area/shuttle/science
+ station_area = 1
+
/area/shuttle/science/main
name = "\improper Science Lift Main Floor"
icon_state = "shuttle"
@@ -22,6 +28,9 @@
name = "\improper Science Lift Lower Floor"
icon_state = "shuttle"
+/area/shuttle/engineering
+ station_area = 1
+
/area/shuttle/engineering/main
name = "\improper Engineering Lift Main Floor"
icon_state = "shuttle"
@@ -30,6 +39,9 @@
name = "\improper Engineering Lift Lower Floor"
icon_state = "shuttle"
+/area/shuttle/ai
+ station_area = 1
+
/area/shuttle/ai/main
name = "\improper AI Core Lift Main Floor"
icon_state = "shuttle"
@@ -38,6 +50,9 @@
name = "\improper AI Core Lift Lower Floor"
icon_state = "shuttle"
+/area/shuttle/vault
+ station_area = 1
+
/area/shuttle/vault/main
name = "\improper Vault Lift Main Floor"
icon_state = "shuttle"
@@ -46,6 +61,9 @@
name = "\improper Vault Lift Lower Floor"
icon_state = "shuttle"
+/area/shuttle/civilian
+ station_area = 1
+
/area/shuttle/civilian/main
name = "\improper Civilian Lift Main Floor"
icon_state = "shuttle"
@@ -58,6 +76,9 @@
name = "\improper Civilian Lift Top Floor"
icon_state = "shuttle"
+/area/shuttle/cargo
+ station_area = 1
+
/area/shuttle/cargo/main
name = "\improper Cargo Lift Main Floor"
icon_state = "shuttle"
@@ -70,6 +91,9 @@
name = "\improper Cargo Lift Top Floor"
icon_state = "shuttle"
+/area/shuttle/command
+ station_area = 1
+
/area/shuttle/command/main
name = "\improper Command Lift Main Floor"
icon_state = "shuttle"
diff --git a/code/game/base_turf.dm b/code/game/base_turf.dm
index 96e9af94517..ffa99cc40d7 100644
--- a/code/game/base_turf.dm
+++ b/code/game/base_turf.dm
@@ -1,6 +1,14 @@
// Returns the lowest turf available on a given Z-level
var/global/list/base_turf_by_z = list(
- "5" = /turf/simulated/floor/asteroid // Moonbase.
+ "1" = /turf/space,
+ "2" = /turf/space,
+ "3" = /turf/simulated/floor/asteroid,
+ "4" = /turf/simulated/floor/asteroid,
+ "5" = /turf/simulated/floor/asteroid,
+ "6" = /turf/simulated/open,
+ "7" = /turf/space,
+ "8" = /turf/space,
+ "9" = /turf/space
)
proc/get_base_turf(var/z)
diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm
index 15b72290326..36634a74d08 100644
--- a/code/game/jobs/job/civilian.dm
+++ b/code/game/jobs/job/civilian.dm
@@ -171,8 +171,8 @@
department = "Cargo"
department_flag = CIVILIAN
faction = "Station"
- total_positions = 3
- spawn_positions = 3
+ total_positions = 4
+ spawn_positions = 4
supervisors = "the quartermaster and the head of personnel"
selection_color = "#dddddd"
economic_modifier = 5
diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm
index 99df45a1491..bf8ac659e41 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -124,7 +124,8 @@
return
active = 1
- use_power(5)
+ if(use_power)
+ use_power(active_power_usage)
update_icon()
wifi_sender.activate()
active = 0
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index 959a80fc36c..32ade68ee24 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -422,9 +422,9 @@
dat += " \[ [(src.aistate != STATE_DEFAULT) ? "Main Menu | " : ""]Close \]"
return dat
-/proc/enable_prison_shuttle(var/mob/user)
+/*/proc/enable_prison_shuttle(var/mob/user)
for(var/obj/machinery/computer/prison_shuttle/PS in world)
- PS.allowedtocall = !(PS.allowedtocall)
+ PS.allowedtocall = !(PS.allowedtocall)*/
/proc/call_shuttle_proc(var/mob/user)
if ((!( ticker ) || !emergency_shuttle.location()))
diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm
index b51d72ccd8e..1977e3399d7 100644
--- a/code/game/machinery/door_control.dm
+++ b/code/game/machinery/door_control.dm
@@ -194,6 +194,7 @@
return
icon_state = "launcherbtt"
+ active = 0
update_icon()
return
diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm
index 22c7da36546..2835ef866db 100644
--- a/code/game/machinery/doors/blast_door.dm
+++ b/code/game/machinery/doors/blast_door.dm
@@ -188,3 +188,8 @@ obj/machinery/door/blast/regular/open
icon_state_closed = "shutter1"
icon_state_closing = "shutterc1"
icon_state = "shutter1"
+
+/obj/machinery/door/blast/shutters/open
+ icon_state = "shutter0"
+ density = 0
+ opacity = 0
\ No newline at end of file
diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm
index bc2f84159c3..abb2cc6f8be 100644
--- a/code/game/machinery/floodlight.dm
+++ b/code/game/machinery/floodlight.dm
@@ -1,4 +1,3 @@
-//these are probably broken
/obj/machinery/floodlight
name = "Emergency Floodlight"
@@ -10,7 +9,7 @@
var/use = 200 // 200W light
var/unlocked = 0
var/open = 0
- var/brightness_on = 8 //can't remember what the maxed out value is
+ var/brightness_on = 12 //can't remember what the maxed out value is
light_color = LIGHT_COLOR_TUNGSTEN
light_wedge = LIGHT_WIDE
@@ -133,3 +132,19 @@
cell = W
user << "You insert the power cell."
update_icon()
+
+/obj/item/weapon/floodlight_diy
+ name = "Emergency Floodlight Kit"
+ desc = "A do-it-yourself kit for constructing the finest of emergency floodlights."
+ icon = 'icons/obj/storage.dmi'
+ icon_state = "inf_box"
+ item_state = "syringe_kit"
+
+/obj/item/weapon/floodlight_diy/attack_self(mob/user)
+ user << "You start piecing together the kit..."
+ if(do_after(user, 80))
+ var/obj/machinery/floodlight/R = new /obj/machinery/floodlight(user.loc)
+ user.visible_message("[user] assembles \a [R].\
+ ", "You assemble \a [R].")
+ R.add_fingerprint(user)
+ qdel(src)
diff --git a/code/game/machinery/floor_light.dm b/code/game/machinery/floor_light.dm
index 7298b62abf9..85f27c1f354 100644
--- a/code/game/machinery/floor_light.dm
+++ b/code/game/machinery/floor_light.dm
@@ -14,6 +14,7 @@ var/list/floor_light_cache = list()
matter = list(DEFAULT_WALL_MATERIAL = 2500, "glass" = 2750)
var/on
+ var/on_state = "on"
var/damaged
var/default_light_range = 4
var/default_light_power = 2
@@ -108,7 +109,7 @@ var/list/floor_light_cache = list()
if(isnull(damaged))
var/cache_key = "floorlight-[default_light_colour]"
if(!floor_light_cache[cache_key])
- var/image/I = image("on")
+ var/image/I = image("[on_state]")
I.color = default_light_colour
I.layer = layer+0.001
floor_light_cache[cache_key] = I
@@ -154,4 +155,20 @@ var/list/floor_light_cache = list()
/obj/machinery/floor_light/cultify()
default_light_colour = "#FF0000"
- update_brightness()
\ No newline at end of file
+ update_brightness()
+
+/obj/machinery/floor_light/dance
+ name = "dance floor"
+ on_state = "light_on-dancefloor_A"
+ anchored = 1
+
+/obj/machinery/floor_light/dance/initialize()
+ ..()
+ on = !on
+ if(on)
+ use_power = 2
+
+/obj/machinery/floor_light/dance/alternate
+ name = "dance floor"
+ on_state = "light_on-dancefloor_B"
+ anchored = 1
\ No newline at end of file
diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm
index 7b2775d9547..4252b6f7631 100644
--- a/code/game/machinery/mass_driver.dm
+++ b/code/game/machinery/mass_driver.dm
@@ -51,3 +51,119 @@
return
drive()
..(severity)
+
+/obj/machinery/mass_driver/attackby(obj/item/W, mob/user)
+
+ if(istype(W, /obj/item/weapon/wrench))
+ if(!anchored)
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
+ user.visible_message("[user.name] secures [src] to the floor.", \
+ "You secure the external reinforcing bolts to the floor.", \
+ "You hear a ratchet")
+ src.anchored = 1
+ else
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
+ user.visible_message("[user.name] unsecures [src] from the floor.", \
+ "You unsecure the external reinforcing bolts from the floor.", \
+ "You hear a ratchet")
+ src.anchored = 0
+
+/obj/machinery/mass_driver/verb/rotate()
+ set name = "Rotate"
+ set category = "Object"
+ set src in oview(1)
+
+ if (src.anchored || usr:stat)
+ usr << "It is fastened to the floor!"
+ return 0
+ src.set_dir(turn(src.dir, 90))
+ return 1
+
+/obj/item/weapon/mass_driver_diy
+ name = "Mass Driver Kit"
+ desc = "A do-it-yourself kit for constructing the finest of mass drivers."
+ icon = 'icons/obj/storage.dmi'
+ icon_state = "inf_box"
+ item_state = "syringe_kit"
+
+/obj/item/weapon/mass_driver_diy/attack_self(mob/user)
+ user << "You start piecing together the kit..."
+ if(do_after(user, 80))
+ var/master_id = "[user.name] - [pick("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z")][rand(100,999)]"
+ var/obj/machinery/mass_driver/mining/R = new /obj/machinery/mass_driver/mining(user.loc)
+ R.id = master_id
+ R.power = 2.0
+ var/obj/item/weapon/mass_driver_button/B = new /obj/item/weapon/mass_driver_button(user.loc)
+ B.id = master_id
+ user.visible_message("[user] assembles \a [R].\
+ ", "You assemble \a [R].")
+ R.add_fingerprint(user)
+ qdel(src)
+
+/obj/item/weapon/mass_driver_button
+ name = "mass driver button"
+ desc = "An unscrewed mass driver button."
+ icon = 'icons/obj/objects.dmi'
+ icon_state = "launcherbtt"
+ var/id
+
+/obj/item/weapon/mass_driver_button/afterattack(var/atom/A, var/mob/user, var/adjacent, var/clickparams)
+ if (!adjacent)
+ return
+
+ //must place on a wall and user must not be inside a closet/mecha/whatever
+ var/turf/W = A
+ if (!iswall(W) || !isturf(user.loc))
+ user << "You can't place this here!"
+ return
+
+ var/placement_dir = get_dir(user, W)
+ if (!(placement_dir in cardinal))
+ user << "You must stand directly in front of the wall you wish to place that on."
+ return
+
+ //just check if there is a poster on or adjacent to the wall
+ var/stuff_on_wall = 0
+ if (locate(/obj/machinery/button) in W)
+ stuff_on_wall = 1
+
+ //crude, but will cover most cases. We could do stuff like check pixel_x/y but it's not really worth it.
+ for (var/dir in cardinal)
+ var/turf/T = get_step(W, dir)
+ if (locate(/obj/machinery/button) in T)
+ stuff_on_wall = 1
+ break
+
+ if (stuff_on_wall)
+ user << "There is already a button there!"
+ return
+
+ user << "You place down the button."
+ var/obj/machinery/button/mass_driver/B = new /obj/machinery/button/remote/driver(user.loc)
+
+ switch (placement_dir)
+ if (NORTH)
+ B.pixel_x = 0
+ B.pixel_y = 32
+ if (SOUTH)
+ B.pixel_x = 0
+ B.pixel_y = -32
+ if (EAST)
+ B.pixel_x = 32
+ B.pixel_y = 0
+ if (WEST)
+ B.pixel_x = -32
+ B.pixel_y = 0
+
+ B.id = id
+ B.use_power = 0
+ B.add_fingerprint(user)
+ qdel(src)
+
+/obj/machinery/mass_driver/mining
+ name = "mining mass driver"
+ desc = "Shoots things really hard really fast."
+ icon = 'icons/obj/stationobjs.dmi'
+ icon_state = "mass_driver"
+ anchored = 0
+ use_power = 0
\ No newline at end of file
diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm
index c28198f89a3..bf982e8e2aa 100644
--- a/code/game/objects/effects/overlays.dm
+++ b/code/game/objects/effects/overlays.dm
@@ -60,3 +60,51 @@
density = 0
anchored = 1
layer = 3
+
+/obj/effect/overlay/temp
+ icon_state = "nothing"
+ anchored = 1
+ layer = 5
+ mouse_opacity = 0
+ var/duration = 10 //in deciseconds
+ var/randomdir = TRUE
+ var/timerid
+
+/obj/effect/overlay/temp/New()
+ ..()
+ if(randomdir)
+ dir = (pick(cardinal))
+ flick("[icon_state]", src)
+
+ schedule_task_in(duration, /proc/qdel, list(src))
+
+/obj/effect/overlay/temp/ex_act()
+ return
+
+/obj/effect/overlay/temp/dir_setting
+ randomdir = FALSE
+
+/obj/effect/overlay/temp/dir_setting/New(loc, set_dir)
+ if(set_dir)
+ dir = set_dir
+ ..()
+
+
+/obj/effect/overlay/temp/kinetic_blast
+ name = "kinetic explosion"
+ icon = 'icons/obj/projectiles.dmi'
+ icon_state = "kinetic_blast"
+ layer = 5
+ duration = 4
+
+/obj/effect/overlay/temp/explosion
+ name = "explosion"
+ icon = 'icons/effects/96x96.dmi'
+ icon_state = "explosion"
+ pixel_x = -32
+ pixel_y = -32
+ duration = 8
+
+/obj/effect/overlay/temp/explosion/fast
+ icon_state = "explosionfast"
+ duration = 4
diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm
index 702926d6ffb..5e51506c09d 100644
--- a/code/game/objects/effects/portals.dm
+++ b/code/game/objects/effects/portals.dm
@@ -28,11 +28,14 @@
return
return
-/obj/effect/portal/New()
- spawn(300)
- qdel(src)
- return
- return
+/obj/effect/portal/New(loc, turf/target, creator=null, lifespan=300)
+ ..()
+ src.target = target
+ src.creator = creator
+
+ if(lifespan > 0)
+ spawn(lifespan)
+ qdel(src)
/obj/effect/portal/proc/teleport(atom/movable/M as mob|obj)
if(istype(M, /obj/effect)) //sparks don't teleport
diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm
index 17c7d762480..148a6ce24f5 100644
--- a/code/game/objects/items/blueprints.dm
+++ b/code/game/objects/items/blueprints.dm
@@ -89,9 +89,7 @@ move an amendment to the drawing.
/area/asteroid,
/area/tdome,
/area/syndicate_station,
- /area/wizard_station,
- /area/prison
- // /area/derelict //commented out, all hail derelict-rebuilders!
+ /area/wizard_station
)
for (var/type in SPECIALS)
if ( istype(A,type) )
diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm
index 7d41e25bc47..e5c03e774c1 100644
--- a/code/game/objects/items/devices/radio/beacon.dm
+++ b/code/game/objects/items/devices/radio/beacon.dm
@@ -1,3 +1,5 @@
+var/global/list/teleportbeacons = list()
+
/obj/item/device/radio/beacon
name = "tracking beacon"
desc = "A beacon used by a teleporter."
@@ -6,6 +8,14 @@
var/code = "electronic"
origin_tech = list(TECH_BLUESPACE = 1)
+/obj/item/device/radio/beacon/New()
+ ..()
+ teleportbeacons += src
+
+/obj/item/device/radio/beacon/Destroy()
+ teleportbeacons.Remove(src)
+ return ..()
+
/obj/item/device/radio/beacon/hear_talk()
return
diff --git a/code/game/objects/items/paintkit.dm b/code/game/objects/items/paintkit.dm
index f08d5287958..d4fd9819663 100644
--- a/code/game/objects/items/paintkit.dm
+++ b/code/game/objects/items/paintkit.dm
@@ -136,7 +136,7 @@
new_name = "APLU \"Burning Chrome\""
new_desc = "A standard APLU exosuit with stylish blue flame decals."
new_icon = "ripley_flames_blue"
-
+
/obj/item/device/kit/paint/ripley/titan
name = "\"Titan's Fist\" APLU customisation kit"
new_name = "APLU \"Titan's Fist\""
@@ -149,6 +149,16 @@
new_desc = "Looks like an over worked, under maintained Ripley with some horrific damage."
new_icon = "earth"
+/obj/item/device/kit/paint/ripley/random
+ name = "quantum ripley kit"
+
+/obj/item/device/kit/paint/ripley/random/New()
+ ..()
+ var/list/ripleys = (typesof(/obj/item/device/kit/paint/ripley) - typesof(/obj/item/device/kit/paint/ripley/fluff))
+ var/build_path = pick(ripleys)
+ new build_path(src.loc)
+ qdel(src)
+
// Durand kits.
/obj/item/device/kit/paint/durand
name = "\"Classic\" Durand customisation kit"
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index ac46f2beaa9..731cfbc3799 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -160,6 +160,7 @@
return 0
R.emagged = 1
+ R.fakeemagged = 1
return 1
/obj/item/borg/upgrade/combat
diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm
index 3d6a5c96261..568ad40f33a 100644
--- a/code/game/objects/items/stacks/rods.dm
+++ b/code/game/objects/items/stacks/rods.dm
@@ -1,3 +1,14 @@
+var/global/list/datum/stack_recipe/rod_recipes = list ( \
+ new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("mine track", /obj/structure/track, 3, time = 10, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("cane", /obj/item/weapon/cane, 1, time = 6), \
+ new/datum/stack_recipe("crowbar", /obj/item/weapon/crowbar, 1, time = 6), \
+ new/datum/stack_recipe("screwdriver", /obj/item/weapon/screwdriver, 1, time = 12), \
+ new/datum/stack_recipe("wrench", /obj/item/weapon/wrench, 1, time = 6), \
+ new/datum/stack_recipe("spade", /obj/item/weapon/shovel/spade, 2, time = 12), \
+ new/datum/stack_recipe("bolt", /obj/item/weapon/arrow, 1, time = 6)
+ )
+
/obj/item/stack/rods
name = "metal rod"
desc = "Some rods. Can be used for building, or something."
@@ -22,6 +33,19 @@
charge_costs = list(500)
stacktype = /obj/item/stack/rods
+/obj/item/stack/rods/New(var/loc, var/amount=null)
+ ..()
+
+ recipes = rod_recipes
+ update_icon()
+
+/obj/item/stack/rods/update_icon()
+ var/amount = get_amount()
+ if((amount <= 5) && (amount > 0))
+ icon_state = "rods-[amount]"
+ else
+ icon_state = "rods"
+
/obj/item/stack/rods/attackby(obj/item/W as obj, mob/user as mob)
..()
if (istype(W, /obj/item/weapon/weldingtool))
@@ -44,36 +68,3 @@
user.put_in_hands(new_item)
return
..()
-
-
-/obj/item/stack/rods/attack_self(mob/user as mob)
- src.add_fingerprint(user)
-
- if(!istype(user.loc,/turf)) return 0
-
- if (locate(/obj/structure/grille, usr.loc))
- for(var/obj/structure/grille/G in usr.loc)
- if (G.destroyed)
- G.health = 10
- G.density = 1
- G.destroyed = 0
- G.icon_state = "grille"
- use(1)
- else
- return 1
-
- else if(!in_use)
- if(get_amount() < 2)
- user << "You need at least two rods to do this."
- return
- usr << "Assembling grille..."
- in_use = 1
- if (!do_after(usr, 10))
- in_use = 0
- return
- var/obj/structure/grille/F = new /obj/structure/grille/ ( usr.loc )
- usr << "You assemble a grille"
- in_use = 0
- F.add_fingerprint(usr)
- use(2)
- return
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index f2e501ca09f..ff38d4385fb 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -189,6 +189,7 @@
if(usr)
usr.remove_from_mob(src)
qdel(src) //should be safe to qdel immediately since if someone is still using this stack it will persist for a little while longer
+ update_icon()
return 1
else
if(get_amount() < used)
@@ -205,6 +206,7 @@
return 0
else
amount += extra
+ update_icon()
return 1
else if(!synths || synths.len < uses_charge)
return 0
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index 8dfbc83145f..60663c8596c 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -114,6 +114,7 @@ var/const/NO_EMAG_ACT = -50
var/sex = "\[UNSET\]"
var/icon/front
var/icon/side
+ var/mining_points //miners gotta eat
//alt titles are handled a bit weirdly in order to unobtrusively integrate into existing ID system
var/assignment = null //can be alt title or the actual job
@@ -182,6 +183,8 @@ var/const/NO_EMAG_ACT = -50
dat += text("Fingerprint: [] \n", fingerprint_hash)
dat += text("Blood Type: [] \n", blood_type)
dat += text("DNA Hash: []
\n", dna_hash)
+ if(mining_points)
+ dat += text("Ore Redemption Points: []
\n", mining_points)
if(front && side)
dat +=" | Photo:
  | "
dat += "
"
@@ -279,6 +282,8 @@ var/const/NO_EMAG_ACT = -50
usr << "The blood type on the card is [blood_type]."
usr << "The DNA hash on the card is [dna_hash]."
usr << "The fingerprint hash on the card is [fingerprint_hash]."
+ if(mining_points)
+ usr << "A ticker indicates the card has [mining_points] ore redemption points available."
return
/obj/item/weapon/card/id/silver
@@ -322,6 +327,17 @@ var/const/NO_EMAG_ACT = -50
access = get_all_station_access() + access_synth
..()
+/obj/item/weapon/card/id/synthetic/minedrone
+ name = "\improper Minedrone ID"
+ desc = "Access module for NanoTrasen Minedrones"
+ icon_state = "id-robot"
+ item_state = "tdgreen"
+ assignment = "Minedrone"
+
+/obj/item/weapon/card/id/synthetic/minedrone/New()
+ access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station)
+ ..()
+
/obj/item/weapon/card/id/centcom
name = "\improper CentCom. ID"
desc = "An ID straight from Cent. Com."
@@ -340,7 +356,7 @@ var/const/NO_EMAG_ACT = -50
obj/item/weapon/card/id/centcom/ERT/New()
..()
access = get_all_accesses() + get_centcom_access("Emergency Response Team")
-
+
/obj/item/weapon/card/id/all_access
name = "\improper Administrator's spare ID"
desc = "The spare ID of the Lord of Lords himself."
diff --git a/code/game/objects/items/weapons/circuitboards/computer/computer.dm b/code/game/objects/items/weapons/circuitboards/computer/computer.dm
index 3153adab03e..39ec0ee0dff 100644
--- a/code/game/objects/items/weapons/circuitboards/computer/computer.dm
+++ b/code/game/objects/items/weapons/circuitboards/computer/computer.dm
@@ -167,10 +167,10 @@
build_path = /obj/machinery/computer/area_atmos
origin_tech = list(TECH_DATA = 2)
-/obj/item/weapon/circuitboard/prison_shuttle
+/*/obj/item/weapon/circuitboard/prison_shuttle
name = T_BOARD("prison shuttle control console")
build_path = /obj/machinery/computer/prison_shuttle
- origin_tech = list(TECH_DATA = 2)
+ origin_tech = list(TECH_DATA = 2)*/
/obj/item/weapon/circuitboard/rcon_console
name = T_BOARD("RCON remote control console")
diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm
index d55348d2815..78e12af8a07 100644
--- a/code/game/objects/items/weapons/explosives.dm
+++ b/code/game/objects/items/weapons/explosives.dm
@@ -68,7 +68,7 @@
spawn(timer*10)
explode(get_turf(target))
-/obj/item/weapon/plastique/proc/explode(var/location)
+/obj/item/weapon/plastique/proc/explode(var/turf/location)
if(!target)
target = get_atom_on_turf(src)
if(!target)
diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm
index 2d59c848e4b..7f24f9919a8 100644
--- a/code/game/objects/items/weapons/material/twohanded.dm
+++ b/code/game/objects/items/weapons/material/twohanded.dm
@@ -26,6 +26,7 @@
var/base_icon
var/base_name
var/unwielded_force_divisor = 0.25
+ action_button_name = "Wield two-handed weapon"
/obj/item/weapon/material/twohanded/proc/unwield()
wielded = 0
@@ -130,6 +131,17 @@
return
+/obj/item/weapon/material/twohanded/ui_action_click()
+ if(src in usr)
+ attack_self(usr)
+
+/obj/item/weapon/material/twohanded/verb/wield_twohanded()
+ set name = "Wield two-handed weapon"
+ set category = "Object"
+ set src in usr
+
+ attack_self(usr)
+
///////////OFFHAND///////////////
/obj/item/weapon/material/twohanded/offhand
w_class = 5
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index 0914e272e79..2fe400c7bd7 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -140,7 +140,7 @@
/obj/item/taperoll/police,
/obj/item/weapon/material/sword/trench,
/obj/item/weapon/shield/energy,
- /obj/item/weapon/shield/riot/tact
+ /obj/item/weapon/shield/riot/tact
)
/obj/item/weapon/storage/belt/soulstone
@@ -231,7 +231,7 @@
/obj/item/weapon/soap,
/obj/item/weapon/storage/bag/trash
)
-
+
/obj/item/weapon/storage/belt/wands
name = "wand belt"
desc = "A belt designed to hold various rods of power."
@@ -243,7 +243,7 @@
can_hold = list(
/obj/item/weapon/gun/energy/wand
)
-
+
/obj/item/weapon/storage/belt/wands/full/New()
..()
new /obj/item/weapon/gun/energy/wand/fire(src)
@@ -251,3 +251,39 @@
new /obj/item/weapon/gun/energy/wand/teleport(src)
new /obj/item/weapon/gun/energy/wand/force(src)
new /obj/item/weapon/gun/energy/wand/animation(src)
+
+/obj/item/weapon/storage/belt/mining
+ name = "explorer's webbing"
+ desc = "A versatile chest rig, cherished by miners and hunters alike."
+ icon_state = "explorer"
+ item_state = "explorer"
+ storage_slots = 9
+ w_class = 4
+ max_w_class = 4 //Pickaxes are big.
+ can_hold = list(/obj/item/weapon/crowbar,
+ /obj/item/weapon/screwdriver,
+ /obj/item/weapon/weldingtool,
+ /obj/item/weapon/wirecutters,
+ /obj/item/weapon/wrench,
+ /obj/item/device/flashlight,
+ /obj/item/stack/cable_coil,
+ /obj/item/device/analyzer,
+ /obj/item/weapon/extinguisher/mini,
+ /obj/item/device/radio,
+ /obj/item/clothing/gloves,
+ /obj/item/clothing/glasses/material,
+ /obj/item/weapon/pickaxe,
+ /obj/item/stack/material/animalhide,
+ /obj/item/weapon/flame/lighter,
+ /obj/item/weapon/storage/fancy/cigarettes,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle,
+ /obj/item/stack/medical,
+ /obj/item/weapon/reagent_containers/hypospray,
+ /obj/item/device/gps,
+ /obj/item/weapon/storage/bag/ore,
+ /obj/item/weapon/reagent_containers/pill,
+ /obj/item/weapon/storage/pill_bottle,
+ /obj/item/weapon/ore,
+ /obj/item/weapon/reagent_containers/food/drinks,
+ /obj/item/weapon/storage/bag/plants
+ )
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 97e8825f562..86229a59332 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -812,3 +812,13 @@
var/type = pick(snacks)
new type(src)
..()
+
+/obj/item/weapon/storage/box/stims
+ name = "stimpack value kit"
+ desc = "A box with several stimpack medipens for the economical miner."
+ icon_state = "syringe"
+
+/obj/item/weapon/storage/box/stims/New()
+ ..()
+ for(var/i in 1 to 4)
+ new /obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack(src)
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index 4bb3ba9a3a2..51d00cf1db5 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -150,6 +150,22 @@
make_exact_fit()
+/obj/item/weapon/storage/firstaid/brute
+ name = "brute aid kit"
+ desc = "A NanoTrasen care package for moderately injured miners."
+ icon_state = "brute"
+
+/obj/item/weapon/storage/firstaid/brute/New()
+ ..()
+ if (empty) return
+ new /obj/item/stack/medical/bruise_pack(src)
+ new /obj/item/stack/medical/bruise_pack(src)
+ new /obj/item/stack/medical/bruise_pack(src)
+ new /obj/item/stack/medical/bruise_pack(src)
+ new /obj/item/stack/medical/advanced/bruise_pack(src)
+ new /obj/item/stack/medical/advanced/bruise_pack(src)
+ return
+
/*
* Pill Bottles
*/
diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm
index fdad2423fcb..cec486a3c6e 100644
--- a/code/game/objects/items/weapons/teleportation.dm
+++ b/code/game/objects/items/weapons/teleportation.dm
@@ -21,8 +21,8 @@
item_state = "electronic"
throw_speed = 4
throw_range = 20
- origin_tech = list(TECH_MAGNET = 1)
- matter = list(DEFAULT_WALL_MATERIAL = 400)
+ origin_tech = list(TECH_MAGNET = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 400)
/obj/item/weapon/locator/attack_self(mob/user as mob)
user.set_machine(src)
@@ -48,7 +48,7 @@ Frequency:
if (usr.stat || usr.restrained())
return
var/turf/current_location = get_turf(usr)//What turf is the user on?
- if(!current_location||current_location.z==2)//If turf was not found or they're on z level 2.
+ if(!current_location||current_location.z==1)//If turf was not found or they're on z level 1.
usr << "The [src] is malfunctioning."
return
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
@@ -60,7 +60,7 @@ Frequency:
if (sr)
src.temp += "