diff --git a/baystation12.dme b/baystation12.dme
index 8eac216fe68..28a9fa0df46 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -404,6 +404,7 @@
#include "code\game\events\EventProcs\ninja_equipment.dm"
#include "code\game\events\EventProcs\space_ninja.dm"
#include "code\game\events\EventProcs\spacevines.dm"
+#include "code\game\events\EventProcs\wormholes.dm"
#include "code\game\events\Events\AlienInfestation.dm"
#include "code\game\events\Events\Appendicitis.dm"
#include "code\game\events\Events\ElectricalStorm.dm"
@@ -434,6 +435,7 @@
#include "code\game\gamemodes\changeling\traitor_chan.dm"
#include "code\game\gamemodes\cult\cult.dm"
#include "code\game\gamemodes\cult\cult_items.dm"
+#include "code\game\gamemodes\cult\cult_structures.dm"
#include "code\game\gamemodes\epidemic\epidemic.dm"
#include "code\game\gamemodes\extended\extended.dm"
#include "code\game\gamemodes\malfunction\Malf_Modules.dm"
diff --git a/code/datums/configuration.dm b/code/datums/configuration.dm
index 3cef703980d..59c5c6543d9 100644
--- a/code/datums/configuration.dm
+++ b/code/datums/configuration.dm
@@ -2,9 +2,6 @@
var/server_name = null // server name (for world name / status)
var/server_suffix = 0 // generate numeric suffix based on server port
- var/medal_hub = null // medal hub name
- var/medal_password = null // medal hub password
-
var/log_ooc = 0 // log OOC channek
var/log_access = 0 // log login/logout
var/log_say = 0 // log client say
@@ -211,12 +208,6 @@
if ("serversuffix")
config.server_suffix = 1
- if ("medalhub")
- config.medal_hub = value
-
- if ("medalpass")
- config.medal_password = value
-
if ("hostedby")
config.hostedby = value
@@ -381,8 +372,8 @@
sqllogging = 1
else
diary << "Unknown setting in configuration: '[name]'"
-
-/*/datum/configuration/proc/loadforumsql(filename) // -- TLE
+/*
+/datum/configuration/proc/loadforumsql(filename) // -- TLE
var/text = file2text(filename)
if (!text)
@@ -433,8 +424,8 @@
if ("authenticatedgroup")
forum_authenticated_group = value
else
- diary << "Unknown setting in configuration: '[name]'"*/
-
+ diary << "Unknown setting in configuration: '[name]'"
+*/
/datum/configuration/proc/pick_mode(mode_name)
// I wish I didn't have to instance the game modes in order to look up
// their information, but it is the only way (at least that I know of).
diff --git a/code/defines/client.dm b/code/defines/client.dm
index d803c6a9e4a..499e7b3dbf4 100644
--- a/code/defines/client.dm
+++ b/code/defines/client.dm
@@ -14,6 +14,11 @@
//END Admin Things
+ //Key auth things
+// authenticate = 0
+// var/authenticated = 0
+// var/authenticating = 0
+
var/listen_ooc = 1
var/move_delay = 1
var/moving = null
diff --git a/code/defines/global.dm b/code/defines/global.dm
index 1fa0b55e9fe..24e128d0f9d 100644
--- a/code/defines/global.dm
+++ b/code/defines/global.dm
@@ -151,9 +151,7 @@ var
shuttlecoming = 0
join_motd = null
- auth_motd = null
rules = null
- no_auth_motd = null
forceblob = 0
custom_event_msg = null
diff --git a/code/defines/obj.dm b/code/defines/obj.dm
index 292b3496ee1..e2b975d4d50 100644
--- a/code/defines/obj.dm
+++ b/code/defines/obj.dm
@@ -418,10 +418,6 @@
var/burning = null
var/hitsound = null
var/w_class = 3.0
- var/wielded = 0 // 1 if item is two handed and grabbed with two hands
- var/twohanded = 0 // Two handed and wielded off by default, nyoro~n -Agouri
- var/force_unwielded = 0
- var/force_wielded = 0
var/protective_temperature = 0 // Placing this here to avoid runtime errors, due to tiny items being allowed on ears and being queried for this variable
flags = FPRINT | TABLEPASS
pass_flags = PASSTABLE
diff --git a/code/defines/obj/hydro.dm b/code/defines/obj/hydro.dm
index 3fb16ec45b2..456ceddb6ec 100644
--- a/code/defines/obj/hydro.dm
+++ b/code/defines/obj/hydro.dm
@@ -1707,7 +1707,7 @@
seed = "/obj/item/seeds/towermycelium"
attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || (istype(W, /obj/item/weapon/fireaxe) && W:wielded) || istype(W, /obj/item/weapon/melee/energy))
+ if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || (istype(W, /obj/item/weapon/twohanded/fireaxe) && W:wielded) || istype(W, /obj/item/weapon/melee/energy))
user.show_message("You make planks out of the [src]!", 1)
for(var/i=0,i<2,i++)
new /obj/item/stack/sheet/wood (src.loc)
diff --git a/code/defines/obj/storage.dm b/code/defines/obj/storage.dm
index a6f20a1ba69..be2e9bc8bda 100644
--- a/code/defines/obj/storage.dm
+++ b/code/defines/obj/storage.dm
@@ -332,7 +332,7 @@
/obj/item/weapon/storage/flashbang_kit
name = "flashbangs (WARNING)"
- desc = "WARNING: Do not use without reading these preautions!\nThese devices are extremely dangerous and can cause blindness or deafness if used incorrectly.\nThe chemicals contained in these devices have been tuned for maximal effectiveness and due to\nextreme safety precuaiotn shave been incased in a tamper-proof pack. DO NOT ATTEMPT TO OPEN\nFLASH WARNING: Do not use continually. Excercise extreme care when detonating in closed spaces.\n\tMake attemtps not to detonate withing range of 2 meters of the intended target. It is imperative\n\tthat the targets visit a medical professional after usage. Damage to eyes increases extremely per\n\tuse and according to range. Glasses with flash resistant filters DO NOT always work on high powered\n\tflash devices such as this. EXERCISE CAUTION REGARDLESS OF CIRCUMSTANCES\nSOUND WARNING: Do not use continually. Visit a medical professional if hearing is lost.\n\tThere is a slight chance per use of complete deafness. Exercise caution and restraint.\nSTUN WARNING: If the intended or unintended target is too close to detonation the resulting sound\n\tand flash have been known to cause extreme sensory overload resulting in temporary\n\tincapacitation.\nDO NOT USE CONTINUALLY\nOperating Directions:\n\t1. Pull detonnation pin. ONCE THE PIN IS PULLED THE GRENADE CAN NOT BE DISARMED!\n\t2. Throw grenade. NEVER HOLD A LIVE FLASHBANG\n\t3. The grenade will detonste 10 seconds hafter being primed. EXCERCISE CAUTION\n\t-Never prime another grenade until after the first is detonated\nNote: Usage of this pyrotechnic device without authorization is an extreme offense and can\nresult in severe punishment upwards of 10 years in prison per use.\n\nDefault 3 second wait till from prime to detonation. This can be switched with a screwdriver\nto 10 seconds.\n\nCopyright of Nanotrasen Industries- Military Armnaments Division\nThis device was created by Nanotrasen Labs a member of the Expert Advisor Corporation"
+ desc = ""
icon_state = "flashbang"
item_state = "syringe_kit"
foldable = /obj/item/stack/sheet/cardboard //BubbleWrap
@@ -601,7 +601,7 @@
/obj/item/stack/sheet/plasma,
/obj/item/stack/sheet/uranium,
/obj/item/stack/sheet/diamond,
- /obj/item/stack/sheet/clown,
+// /obj/item/stack/sheet/clown,
/obj/item/stack/sheet/plasteel,
/obj/item/stack/rods
diff --git a/code/defines/obj/supplypacks.dm b/code/defines/obj/supplypacks.dm
index 2db7cbc9fcb..1fa6ff86658 100755
--- a/code/defines/obj/supplypacks.dm
+++ b/code/defines/obj/supplypacks.dm
@@ -1,6 +1,7 @@
//SUPPLY PACKS
//NOTE: only secure crate types use the access var (and are lockable)
//NOTE: hidden packs only show up when the computer has been hacked.
+//ANOTER NOTE: Contraband is obtainable through modified supplycomp circuitboards.
//BIG NOTE: Don't add living things to crates, that's bad, it will break the shuttle.
/datum/supply_packs/specialops
name = "Special Ops supplies"
@@ -793,5 +794,20 @@
..()
+/datum/supply_packs/contraband
+ contains = list("/obj/item/weapon/contraband/poster",) //We randomly pick 5 items from this list through the constructor, look below
+ name = "Contraband Crate"
+ cost = 30
+ containertype = "/obj/structure/closet/crate/contraband"
+ containername = "Contraband crate"
+ group = "ERROR"
+ contraband = 1
+
+/datum/supply_packs/contraband/New()
+ var/list/tempContains = list()
+ for(var/i = 0,i<5,i++)
+ tempContains += pick(contains)
+ src.contains = tempContains
+ ..()
//SUPPLY PACKS
\ No newline at end of file
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 67ae76a5e67..0803841d5ef 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -2,12 +2,6 @@
name = "weapon"
icon = 'weapons.dmi'
-/obj/item/weapon/offhand
- name = "offhand"
- var/linked_weapon_name = ""
- w_class = 5.0
- icon_state = "offhand"
-
/obj/item/weapon/shield
name = "shield"
@@ -711,17 +705,6 @@
icon = 'items.dmi'
icon_state = "red_crowbar"
-/obj/item/weapon/fireaxe // DEM AXES MAN, marker -Agouri
- icon_state = "fireaxe0"
- name = "fire axe"
- desc = "A tool for breaking down those obstructions that stop you from fighting that fire." //Less ROBUST. --SkyMarshal
- force = 5
- w_class = 4.0
- flags = ONBACK
- twohanded = 1
- force_unwielded = 5
- force_wielded = 18
-
/obj/item/weapon/cane
name = "cane"
desc = "A cane used by a true gentlemen."
diff --git a/code/game/cellautomata.dm b/code/game/cellautomata.dm
index 3f878ecdfae..b05d22e526d 100644
--- a/code/game/cellautomata.dm
+++ b/code/game/cellautomata.dm
@@ -19,8 +19,6 @@
/world/proc/load_motd()
join_motd = file2text("config/motd.txt")
- auth_motd = file2text("config/motd-auth.txt")
- no_auth_motd = file2text("config/motd-noauth.txt")
/world/proc/load_rules()
rules = file2text("config/rules.html")
@@ -125,7 +123,8 @@
src.update_status()
master_controller = new /datum/controller/game_controller()
- spawn(-1) master_controller.setup()
+ spawn(-1)
+ master_controller.setup()
return
//Crispy fullban
diff --git a/code/game/dna.dm b/code/game/dna.dm
index f5339294fa8..25e0cd8ffa3 100644
--- a/code/game/dna.dm
+++ b/code/game/dna.dm
@@ -221,9 +221,17 @@
if (!output) output = "5"
return output
-/proc/isblockon(hnumber, bnumber)
+/proc/isblockon(hnumber, bnumber , var/UI = 0)
+
var/temp2
temp2 = hex2num(hnumber)
+
+ if(UI)
+ if(temp2 >= 2050)
+ return 1
+ else
+ return 0
+
if (bnumber == HULKBLOCK || bnumber == TELEBLOCK)
if (temp2 >= 3500 + BLOCKADD)
return 1
@@ -313,7 +321,7 @@
H.g_eyes = hex2num(getblock(structure,9,3))
H.b_eyes = hex2num(getblock(structure,10,3))
- if (isblockon(getblock(structure, 11,3),11))
+ if (isblockon(getblock(structure, 11,3),11 , 1))
H.gender = FEMALE
else
H.gender = MALE
diff --git a/code/game/events/EventProcs/black_hole.dm b/code/game/events/EventProcs/black_hole.dm
index 12d0a20f7df..bc69352df5c 100644
--- a/code/game/events/EventProcs/black_hole.dm
+++ b/code/game/events/EventProcs/black_hole.dm
@@ -2,86 +2,87 @@
name = "black hole"
icon = 'objects.dmi'
desc = "FUCK FUCK FUCK AAAHHH"
- icon_state = "bhole2"
- opacity = 0
+ icon_state = "bhole3"
+ opacity = 1
unacidable = 1
density = 0
anchored = 1
- var/datum/effect/effect/system/harmless_smoke_spread/smoke
-
/obj/effect/bhole/New()
- src.smoke = new /datum/effect/effect/system/harmless_smoke_spread()
- src.smoke.set_up(5, 0, src)
- src.smoke.attach(src)
- src:life()
+ spawn(4)
+ controller()
+
+/obj/effect/bhole/proc/controller()
+ while(src)
+
+ if(!isturf(loc))
+ del(src)
+ return
+
+ //DESTROYING STUFF AT THE EPICENTER
+ for(var/mob/living/M in orange(1,src))
+ del(M)
+ for(var/obj/O in orange(1,src))
+ del(O)
+ for(var/turf/simulated/ST in orange(1,src))
+ ST.ReplaceWithSpace()
+
+ sleep(6)
+ grav(10, 4, 10, 0 )
+ sleep(6)
+ grav( 8, 4, 10, 0 )
+ sleep(6)
+ grav( 9, 4, 10, 0 )
+ sleep(6)
+ grav( 7, 3, 40, 1 )
+ sleep(6)
+ grav( 5, 3, 40, 1 )
+ sleep(6)
+ grav( 6, 3, 40, 1 )
+ sleep(6)
+ grav( 4, 2, 50, 6 )
+ sleep(6)
+ grav( 3, 2, 50, 6 )
+ sleep(6)
+ grav( 2, 2, 75,25 )
+ sleep(6)
-/obj/effect/bhole/Bumped(atom/A)
- if (istype(A,/mob/living))
- del(A)
- else
- A:ex_act(1.0)
-
-/obj/effect/bhole/proc/life() //Oh man , this will LAG
-
- if (prob(10))
- src.anchored = 0
- step(src,pick(alldirs))
- if (prob(30))
+ //MOVEMENT
+ if( prob(50) )
+ src.anchored = 0
step(src,pick(alldirs))
- src.anchored = 1
+ src.anchored = 1
- for (var/atom/X in orange(9,src))
- if ((istype(X,/obj) || istype(X,/mob/living)) && prob(7))
- if (!X:anchored)
- step_towards(X,src)
+/obj/effect/bhole/proc/grav(var/r, var/ex_act_force, var/pull_chance, var/turf_removal_chance)
+ if(!isturf(loc)) //blackhole cannot be contained inside anything. Weird stuff might happen
+ del(src)
+ return
+ for(var/t = -r, t < r, t++)
+ affect_coord(x+t, y-r, ex_act_force, pull_chance, turf_removal_chance)
+ affect_coord(x-t, y+r, ex_act_force, pull_chance, turf_removal_chance)
+ affect_coord(x+r, y+t, ex_act_force, pull_chance, turf_removal_chance)
+ affect_coord(x-r, y-t, ex_act_force, pull_chance, turf_removal_chance)
+ return
- for (var/atom/B in orange(7,src))
- if (istype(B,/obj))
- if (!B:anchored && prob(50))
- step_towards(B,src)
- if(prob(10)) B:ex_act(3.0)
+/obj/effect/bhole/proc/affect_coord(var/x, var/y, var/ex_act_force, var/pull_chance, var/turf_removal_chance)
+ //Get turf at coordinate
+ var/turf/T = locate(x, y, z)
+ if(isnull(T)) return
+
+ //Pulling and/or ex_act-ing movable atoms in that turf
+ if( prob(pull_chance) )
+ for(var/obj/O in T.contents)
+ if(O.anchored)
+ O.ex_act(ex_act_force)
else
- B:anchored = 0
- //step_towards(B,src)
- //B:anchored = 1
- if(prob(10)) B:ex_act(3.0)
- else if (istype(B,/turf))
- if (istype(B,/turf/simulated) && (prob(1) && prob(75)))
- src.smoke.start()
- B:ReplaceWithSpace()
- else if (istype(B,/mob/living))
- step_towards(B,src)
+ step_towards(O,src)
+ for(var/mob/living/M in T.contents)
+ step_towards(M,src)
-
- for (var/atom/A in orange(4,src))
- if (istype(A,/obj))
- if (!A:anchored && prob(90))
- step_towards(A,src)
- if(prob(30)) A:ex_act(2.0)
- else
- A:anchored = 0
- //step_towards(A,src)
- //A:anchored = 1
- if(prob(30)) A:ex_act(2.0)
- else if (istype(A,/turf))
- if (istype(A,/turf/simulated) && prob(1))
- src.smoke.start()
- A:ReplaceWithSpace()
- else if (istype(A,/mob/living))
- step_towards(A,src)
-
-
- for (var/atom/D in orange(1,src))
- //if (hascall(D,"blackholed"))
- // call(D,"blackholed")(null)
- // continue
- if (istype(D,/mob/living))
- del(D)
- else
- D:ex_act(1.0)
-
- spawn(17)
- life()
\ No newline at end of file
+ //Destroying the turf
+ if( T && istype(T,/turf/simulated) && prob(turf_removal_chance) )
+ var/turf/simulated/ST = T
+ ST.ReplaceWithSpace()
+ return
\ No newline at end of file
diff --git a/code/game/events/EventProcs/spacevines.dm b/code/game/events/EventProcs/spacevines.dm
index a53210ac88f..b372981383a 100644
--- a/code/game/events/EventProcs/spacevines.dm
+++ b/code/game/events/EventProcs/spacevines.dm
@@ -25,7 +25,7 @@
if(/obj/item/weapon/circular_saw) del src
if(/obj/item/weapon/kitchen/utensil/knife) del src
if(/obj/item/weapon/scalpel) del src
- if(/obj/item/weapon/fireaxe) del src
+ if(/obj/item/weapon/twohanded/fireaxe) del src
if(/obj/item/weapon/hatchet) del src
if(/obj/item/weapon/melee/energy) del src
diff --git a/code/game/events/EventProcs/wormholes.dm b/code/game/events/EventProcs/wormholes.dm
new file mode 100644
index 00000000000..31a9b282005
--- /dev/null
+++ b/code/game/events/EventProcs/wormholes.dm
@@ -0,0 +1,63 @@
+/proc/wormhole_event()
+ spawn()
+ var/list/pick_turfs = list()
+ for(var/turf/simulated/floor/T in world)
+ if(T.z == 1)
+ pick_turfs += T
+
+ if(pick_turfs.len)
+ //All ready. Announce that bad juju is afoot.
+ command_alert("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert")
+ world << sound('spanomalies.ogg')
+
+ //prob(20) can be approximated to 1 wormhole every 5 turfs!
+ //admittedly less random but totally worth it >_<
+ var/event_duration = 3000 //~5 minutes in ticks
+ var/number_of_selections = (pick_turfs.len/5)+1 //+1 to avoid division by zero!
+ var/sleep_duration = round( event_duration / number_of_selections )
+ var/end_time = world.time + event_duration //the time by which the event should have ended
+
+ var/increment = max(1,round(number_of_selections/50))
+// world << "DEBUG: number_of_selections: [number_of_selections] | sleep_duration: [sleep_duration]"
+
+ var/i = 1
+ while( 1 )
+
+ //we've run into overtime. End the event
+ if( end_time < world.time )
+// world << "DEBUG: we've run into overtime. End the event"
+ return
+ if( !pick_turfs.len )
+// world << "DEBUG: we've run out of turfs to pick. End the event"
+ return
+
+ //loop it round
+ i += increment
+ i %= pick_turfs.len
+ i++
+
+ //get our enter and exit locations
+ var/turf/simulated/floor/enter = pick_turfs[i]
+ pick_turfs -= enter //remove it from pickable turfs list
+ if( !enter || !istype(enter) ) continue //sanity
+
+ var/turf/simulated/floor/exit = pick(pick_turfs)
+ pick_turfs -= exit
+ if( !exit || !istype(exit) ) continue //sanity
+
+ create_wormhole(enter,exit)
+
+ sleep(sleep_duration) //have a well deserved nap!
+
+
+//maybe this proc can even be used as an admin tool for teleporting players without ruining immulsions?
+/proc/create_wormhole(var/turf/enter as turf, var/turf/exit as turf)
+ var/obj/effect/portal/P = new /obj/effect/portal( enter )
+ P.target = exit
+ P.creator = null
+ P.icon = 'objects.dmi'
+ P.failchance = 0
+ P.icon_state = "anom"
+ P.name = "wormhole"
+ spawn(rand(300,600))
+ del(P)
\ No newline at end of file
diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm
new file mode 100644
index 00000000000..c4e4080459d
--- /dev/null
+++ b/code/game/gamemodes/cult/cult_structures.dm
@@ -0,0 +1,52 @@
+/obj/structure/cult
+ density = 1
+ anchored = 1
+ icon = 'cult.dmi'
+
+/obj/structure/cult/talisman
+ name = "Altar"
+ desc = "A bloodstained altar dedicated to Nar-Sie"
+ icon_state = "talismanaltar"
+
+
+/obj/structure/cult/forge
+ name = "Daemon forge"
+ desc = "A forge used in crafting the unholy weapons used by the armies of Nar-Sie"
+ icon_state = "forge"
+
+/obj/structure/cult/pylon
+ name = "Pylon"
+ desc = "A floating crystal that hums with an unearthly energy"
+ icon_state = "pylon"
+
+
+/obj/structure/cult/tome
+ name = "Desk"
+ desc = "A desk covered in arcane manuscripts and tomes in unknown languages. Looking at the text makes your skin crawl"
+ icon_state = "tomealtar"
+
+/obj/structure/cult/pillar
+ name = "Pillar"
+ desc = "This should not exist"
+ icon_state = "pillar"
+ icon = 'magic_pillar.dmi'
+
+
+/obj/effect/gateway
+ name = "gateway"
+ desc = "You're pretty sure that abyss is staring back"
+ icon = 'cult.dmi'
+ icon_state = "hole"
+ density = 1
+ unacidable = 1
+ anchored = 1.0
+
+/obj/effect/gateway/Bumped(mob/M as mob|obj)
+ spawn(0)
+ return
+ return
+
+/obj/effect/gateway/HasEntered(AM as mob|obj)
+ spawn(0)
+ return
+ return
\ No newline at end of file
diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm
index e351f3d82a3..ca568f6bf9d 100644
--- a/code/game/gamemodes/nuclear/nuclearbomb.dm
+++ b/code/game/gamemodes/nuclear/nuclearbomb.dm
@@ -151,7 +151,6 @@
/obj/machinery/nuclearbomb/ex_act(severity)
return
-
/obj/machinery/nuclearbomb/blob_act()
if (src.timing == -1.0)
return
@@ -174,15 +173,8 @@
ticker.mode.explosion_in_progress = 1
sleep(100)
-/*
- var/turf/ground_zero = get_turf(loc)
- explosion(ground_zero, 50, 250, 500, 750)
-
-*/
enter_allowed = 0
-
-
var/off_station = 0
var/area/A = get_area(src.loc)
if(A && (istype(A,/area/syndicate_station) || A.type == "/area"))
diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm
index c5fb2e259cf..d7ed1fefeea 100644
--- a/code/game/jobs/job/captain.dm
+++ b/code/game/jobs/job/captain.dm
@@ -7,6 +7,7 @@
spawn_positions = 1
supervisors = "Nanotrasen officials and Space law"
selection_color = "#ccccff"
+ idtype = /obj/item/weapon/card/id/gold
equip(var/mob/living/carbon/human/H)
@@ -43,6 +44,7 @@
spawn_positions = 1
supervisors = "the captain"
selection_color = "#ddddff"
+ idtype = /obj/item/weapon/card/id/silver
equip(var/mob/living/carbon/human/H)
diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm
index df37a83acd8..f01f05c2c59 100644
--- a/code/game/jobs/job/engineering.dm
+++ b/code/game/jobs/job/engineering.dm
@@ -7,6 +7,7 @@
spawn_positions = 1
supervisors = "the captain"
selection_color = "#ffeeaa"
+ idtype = /obj/item/weapon/card/id/silver
equip(var/mob/living/carbon/human/H)
diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm
index 217e5e7e087..07b1a4ee1a3 100644
--- a/code/game/jobs/job/job.dm
+++ b/code/game/jobs/job/job.dm
@@ -25,6 +25,9 @@
//Sellection screen color
var/selection_color = "#ffffff"
+ //the type of the ID the player will have
+ var/idtype = /obj/item/weapon/card/id
+
//List of alternate titles, if any
var/list/alt_titles
diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm
index 5a4220828dc..f96126e3e24 100644
--- a/code/game/jobs/job/medical.dm
+++ b/code/game/jobs/job/medical.dm
@@ -7,6 +7,7 @@
spawn_positions = 1
supervisors = "the captain"
selection_color = "#ffddf0"
+ idtype = /obj/item/weapon/card/id/silver
equip(var/mob/living/carbon/human/H)
diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm
index d3eb18db922..243d9fee647 100644
--- a/code/game/jobs/job/science.dm
+++ b/code/game/jobs/job/science.dm
@@ -7,6 +7,7 @@
spawn_positions = 1
supervisors = "the captain"
selection_color = "#ffddff"
+ idtype = /obj/item/weapon/card/id/silver
equip(var/mob/living/carbon/human/H)
diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm
index 364508ee048..3bf370b7d56 100644
--- a/code/game/jobs/job/security.dm
+++ b/code/game/jobs/job/security.dm
@@ -7,6 +7,7 @@
spawn_positions = 1
supervisors = "the captain"
selection_color = "#ffdddd"
+ idtype = /obj/item/weapon/card/id/silver
equip(var/mob/living/carbon/human/H)
diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index 865baeee72d..7b9e21ab0ac 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -285,13 +285,20 @@ var/global/datum/controller/occupations/job_master
if(!H) return 0
if(!title) title = rank
var/obj/item/weapon/card/id/C = null
- switch(rank)
- if("Cyborg")
+
+ var/datum/job/job = null
+ for(var/datum/job/J in occupations)
+ if(J.title == rank)
+ job = J
+ break
+
+ if(job)
+ if(job.title == "Cyborg")
return
- if("Captain")
- C = new /obj/item/weapon/card/id/gold(H)
else
- C = new /obj/item/weapon/card/id(H)
+ C = new job.idtype(H)
+ else
+ C = new /obj/item/weapon/card/id(H)
if(C)
C.registered_name = H.real_name
C.assignment = title
diff --git a/code/game/machinery/atmoalter/area_atmos_computer.dm b/code/game/machinery/atmoalter/area_atmos_computer.dm
index 8a6853cf32b..fb0245f02af 100644
--- a/code/game/machinery/atmoalter/area_atmos_computer.dm
+++ b/code/game/machinery/atmoalter/area_atmos_computer.dm
@@ -39,31 +39,4 @@
var/area/A2 = T2.loc
if ( istype(A2) && A2.master && A2.master == A )
SCRUBBER.on = scrubber_state
- SCRUBBER.update_icon()
-
-
-
-
-/obj/machinery/computer/mining_shuttle/attack_hand(user as mob)
- src.add_fingerprint(usr)
- var/dat
- dat = text("
Mining shuttle:
Send")
- user << browse("[dat]", "window=miningshuttle;size=200x100")
-
-/obj/machinery/computer/mining_shuttle/Topic(href, href_list)
- if(..())
- return
- usr.machine = src
- src.add_fingerprint(usr)
- if(href_list["move"])
- if(ticker.mode.name == "blob")
- if(ticker.mode:declared)
- usr << "Under directive 7-10, [station_name()] is quarantined until further notice."
- return
-
- if (!mining_shuttle_moving)
- usr << "\blue Shuttle recieved message and will be sent shortly."
- move_mining_shuttle()
- else
- usr << "\blue Shuttle is already moving."
-
+ SCRUBBER.update_icon()
\ No newline at end of file
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index 9802c771fbd..83392c7b161 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -262,19 +262,17 @@ var/global/list/autolathe_recipes_hidden = list( \
restart:
if(outputAmount > 0)
if(src.m_amount >= template.m_amt*multiplier && src.g_amount >= template.g_amt*multiplier)
- busy = 1
+
use_power(power)
icon_state = "autolathe"
flick("autolathe_n",src)
spawn(16)
-
if(!busy)
busy = 1
use_power(power)
spawn(16)
use_power(power)
spawn(16)
- flick("autolathe_n",src)
src.m_amount -= template.m_amt*multiplier
src.g_amount -= template.g_amt*multiplier
if(src.m_amount < 0)
diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm
index eb4135f4104..8db9eabe4a1 100644
--- a/code/game/machinery/bots/mulebot.dm
+++ b/code/game/machinery/bots/mulebot.dm
@@ -792,15 +792,6 @@
src.visible_message("\red [src] drives over [H]!")
playsound(src.loc, 'splat.ogg', 50, 1)
- /*
- if(ismob(load))
- var/mob/M = load
- if(M.reagents.has_reagent("beer"))
- M.unlock_medal("DUI", 1)
- if(M.reagents.has_reagent("space_drugs") && istype(H) && H.wear_id.assignment == "Security Officer")
- M.unlock_medel("Ridin' Dirty",1)
- */
-
var/damage = rand(5,15)
H.apply_damage(2*damage, BRUTE, "head")
H.apply_damage(2*damage, BRUTE, "chest")
diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm
index 0fd688bed81..dfd1390958e 100644
--- a/code/game/machinery/computer/buildandrepair.dm
+++ b/code/game/machinery/computer/buildandrepair.dm
@@ -48,7 +48,7 @@
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/scan_consolenew
name = "Circuit board (DNA Machine)"
- build_path = "/obj/machinery/scan_consolenew"
+ build_path = "/obj/machinery/computer/scan_consolenew"
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/communications
name = "Circuit board (Communications)"
@@ -147,6 +147,7 @@
name = "Circuit board (Supply shuttle console)"
build_path = "/obj/machinery/computer/supplycomp"
origin_tech = "programming=3"
+ var/contraband_enabled = 0
/obj/item/weapon/circuitboard/operating
name = "Circuit board (Operating Computer)"
build_path = "/obj/machinery/computer/operating"
@@ -207,6 +208,28 @@
+/obj/item/weapon/circuitboard/supplycomp/attackby(obj/item/I as obj, mob/user as mob)
+ if(istype(I,/obj/item/device/multitool))
+ var/catastasis = src.contraband_enabled
+ var/opposite_catastasis
+ if(catastasis)
+ opposite_catastasis = "STANDARD"
+ catastasis = "BROAD"
+ else
+ opposite_catastasis = "BROAD"
+ catastasis = "STANDARD"
+
+ switch( alert("Current receiver spectrum is set to: [catastasis]","Multitool-Circuitboard interface","Switch to [opposite_catastasis]","Cancel") )
+ //switch( alert("Current receiver spectrum is set to: " {(src.contraband_enabled) ? ("BROAD") : ("STANDARD")} , "Multitool-Circuitboard interface" , "Switch to " {(src.contraband_enabled) ? ("STANDARD") : ("BROAD")}, "Cancel") )
+ if("Switch to STANDARD","Switch to BROAD")
+ src.contraband_enabled = !src.contraband_enabled
+
+ if("Cancel")
+ return
+ else
+ user << "DERP! BUG! Report this (And what you were doing to cause it) to Agouri"
+ return
+
/obj/structure/computerframe/attackby(obj/item/P as obj, mob/user as mob)
switch(state)
if(0)
@@ -306,4 +329,8 @@
if(circuit.id) B:id = circuit.id
if(circuit.records) B:records = circuit.records
if(circuit.frequency) B:frequency = circuit.frequency
+ if(istype(circuit,/obj/item/weapon/circuitboard/supplycomp))
+ var/obj/machinery/computer/supplycomp/SC = B
+ var/obj/item/weapon/circuitboard/supplycomp/C = circuit
+ SC.can_order_contraband = C.contraband_enabled
del(src)
diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm
index 46f8872c8c6..9e45fd44242 100644
--- a/code/game/machinery/deployable.dm
+++ b/code/game/machinery/deployable.dm
@@ -65,7 +65,7 @@ for reference:
var/health = 100.0
var/maxhealth = 100.0
- attackby(obj/item/weapon/W as obj, mob/user as mob)
+ attackby(obj/item/W as obj, mob/user as mob)
if (istype(W, /obj/item/stack/sheet/wood))
if (src.health < src.maxhealth)
for(var/mob/O in viewers(src, null))
@@ -88,7 +88,7 @@ for reference:
else
if (src.health <= 0)
for(var/mob/O in viewers(src, null))
- O << "\red The barricade is smashed appart!"
+ O << "\red The barricade is smashed apart!"
new /obj/item/stack/sheet/wood(get_turf(src))
new /obj/item/stack/sheet/wood(get_turf(src))
new /obj/item/stack/sheet/wood(get_turf(src))
@@ -99,14 +99,14 @@ for reference:
switch(severity)
if(1.0)
for(var/mob/O in viewers(src, null))
- O << "\red The barricade is blown appart!"
+ O << "\red The barricade is blown apart!"
del(src)
return
if(2.0)
src.health -= 25
if (src.health <= 0)
for(var/mob/O in viewers(src, null))
- O << "\red The barricade is blown appart!"
+ O << "\red The barricade is blown apart!"
new /obj/item/stack/sheet/wood(get_turf(src))
new /obj/item/stack/sheet/wood(get_turf(src))
new /obj/item/stack/sheet/wood(get_turf(src))
@@ -115,7 +115,7 @@ for reference:
meteorhit()
for(var/mob/O in viewers(src, null))
- O << "\red The barricade is smashed appart!"
+ O << "\red The barricade is smashed apart!"
new /obj/item/stack/sheet/wood(get_turf(src))
new /obj/item/stack/sheet/wood(get_turf(src))
new /obj/item/stack/sheet/wood(get_turf(src))
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 484976b0eb4..3538777e955 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -395,15 +395,15 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
else if (istype(C, /obj/item/weapon/pai_cable)) // -- TLE
var/obj/item/weapon/pai_cable/cable = C
cable.plugin(src, user)
- else if (istype(C, /obj/item/weapon/crowbar) || istype(C, /obj/item/weapon/fireaxe) )
+ else if (istype(C, /obj/item/weapon/crowbar) || istype(C, /obj/item/weapon/twohanded/fireaxe) )
var/beingcrowbarred = null
if(istype(C, /obj/item/weapon/crowbar) )
beingcrowbarred = 1 //derp, Agouri
else
beingcrowbarred = 0
- if ( ((src.density) && ( src.welded ) && !( src.operating ) && src.p_open && (!src.arePowerSystemsOn() || (stat & NOPOWER)) && !src.locked) && beingcrowbarred == 1 )
+ if( beingcrowbarred && (density && welded && !operating && src.p_open && (!src.arePowerSystemsOn() || stat & NOPOWER) && !src.locked) )
playsound(src.loc, 'Crowbar.ogg', 100, 1)
- user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics into the airlock assembly.")
+ user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.")
if(do_after(user,40))
user << "\blue You removed the airlock electronics!"
switch(src.doortype)
@@ -415,6 +415,10 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
if(5) new/obj/structure/door_assembly/door_assembly_mai( src.loc )
if(6) new/obj/structure/door_assembly/door_assembly_ext( src.loc )
if(7) new/obj/structure/door_assembly/door_assembly_g( src.loc )
+ if(14) new/obj/structure/door_assembly/door_assembly_com/glass( src.loc )
+ if(15) new/obj/structure/door_assembly/door_assembly_eng/glass( src.loc ) //issue 301 -mysthic
+ if(16) new/obj/structure/door_assembly/door_assembly_sec/glass( src.loc )
+ if(17) new/obj/structure/door_assembly/door_assembly_med/glass( src.loc )
var/obj/item/weapon/airlock_electronics/ae
if (!electronics)
ae = new/obj/item/weapon/airlock_electronics( src.loc )
@@ -433,8 +437,8 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
if ((src.density) && (!( src.welded ) && !( src.operating ) && ((!src.arePowerSystemsOn()) || (stat & NOPOWER)) && !( src.locked )))
if(beingcrowbarred == 0) //being fireaxe'd
- var/obj/item/weapon/fireaxe/F = C
- if(F.wielded == 1)
+ var/obj/item/weapon/twohanded/fireaxe/F = C
+ if(F:wielded)
spawn( 0 )
src.operating = 1
animate("opening")
@@ -470,8 +474,8 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
else
if ((!src.density) && (!( src.welded ) && !( src.operating ) && !( src.locked )))
if(beingcrowbarred == 0)
- var/obj/item/weapon/fireaxe/F = C
- if(F.wielded == 1)
+ var/obj/item/weapon/twohanded/fireaxe/F = C
+ if(F:wielded)
spawn( 0 )
src.operating = 1
animate("closing")
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 87c8051ec8d..7a23377dfe0 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -38,7 +38,7 @@
update_icon()
return
- if (istype(C, /obj/item/weapon/crowbar) || (istype(C,/obj/item/weapon/fireaxe) && C.wielded == 1))
+ if (istype(C, /obj/item/weapon/crowbar) || (istype(C,/obj/item/weapon/twohanded/fireaxe) && C:wielded == 1))
if(blocked || operating) return
if(src.density)
spawn(0)
@@ -52,7 +52,8 @@
process()
- if(operating || stat & NOPOWER || !nextstate) return
+ if(operating || stat & NOPOWER || !nextstate)
+ return
switch(nextstate)
if(OPEN)
spawn()
diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm
index 5aacc6f1f92..793eab765a1 100644
--- a/code/game/machinery/doors/poddoor.dm
+++ b/code/game/machinery/doors/poddoor.dm
@@ -14,7 +14,7 @@
/obj/machinery/door/poddoor/attackby(obj/item/weapon/C as obj, mob/user as mob)
src.add_fingerprint(user)
- if (!( istype(C, /obj/item/weapon/crowbar || istype(C, /obj/item/weapon/fireaxe) && C.wielded == 1) ))
+ if (!( istype(C, /obj/item/weapon/crowbar) || (istype(C, /obj/item/weapon/twohanded/fireaxe) && C:wielded == 1) ))
return
if ((src.density && (stat & NOPOWER) && !( src.operating )))
spawn( 0 )
diff --git a/code/game/machinery/doors/shutters.dm b/code/game/machinery/doors/shutters.dm
index 7ac0ec41fa2..8e1b9a8cae9 100644
--- a/code/game/machinery/doors/shutters.dm
+++ b/code/game/machinery/doors/shutters.dm
@@ -9,7 +9,7 @@
/obj/machinery/door/poddoor/shutters/attackby(obj/item/weapon/C as obj, mob/user as mob)
src.add_fingerprint(user)
- if (!( istype(C, /obj/item/weapon/crowbar || istype(C, /obj/item/weapon/fireaxe) && C.wielded == 1) ))
+ if (!( istype(C, /obj/item/weapon/crowbar) || (istype(C, /obj/item/weapon/twohanded/fireaxe) && C:wielded == 1) ))
return
if ((src.density && (stat & NOPOWER) && !( src.operating )))
spawn( 0 )
diff --git a/code/game/machinery/kitchen/blender.dm b/code/game/machinery/kitchen/blender.dm
index dc3c11d5c2d..db8aea9d7ab 100644
--- a/code/game/machinery/kitchen/blender.dm
+++ b/code/game/machinery/kitchen/blender.dm
@@ -65,10 +65,21 @@ the blender or the processor: Processor items are solid objects and Blender resu
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks)) //Will only blend food items. Add others in this else clause.
user.drop_item()
O.loc = src
+ user << "You drop the [O] into the blender."
+ else if (istype(O, /obj/item/weapon/plantbag)) //Allows plant bags to empty into the blender.
+ for (var/obj/item/weapon/reagent_containers/food/snacks/grown/G in O.contents)
+ O.contents -= G
+ G.loc = src
+ if(src.contents.len >= 10 || src.reagents.total_volume >= 80) //Sanity checking so the blender doesn't overfill
+ user << "You fill the blender to the brim."
+ break
+ if(src.contents.len < 10 && src.reagents.total_volume < 80)
+ user << "You empty the plant bag into the blender."
else
user << "That probably won't blend."
return 0
+
/obj/machinery/blender/verb/blend() //Blend shit. Note: In the actual blending loop, make sure it can't include the jug.
set category = "Object"
set name = "Turn Blender On"
diff --git a/code/game/machinery/sink.dm b/code/game/machinery/sink.dm
index 7927772702f..e89b11828dd 100644
--- a/code/game/machinery/sink.dm
+++ b/code/game/machinery/sink.dm
@@ -76,7 +76,7 @@
user << "\red Someone's already washing something here."
return
- if (istype(O, (/obj/item/weapon/reagent_containers/glass/bucket || /obj/item/weapon/reagent_containers/glass/watercan)))
+ if (istype(O, /obj/item/weapon/reagent_containers/glass/bucket))
O:reagents.add_reagent("water", 70)
user.visible_message( \
"\blue [user] fills the [O] using the [src].", \
diff --git a/code/game/master_controller.dm b/code/game/master_controller.dm
index 8128b4c7a98..175bbc62aa0 100644
--- a/code/game/master_controller.dm
+++ b/code/game/master_controller.dm
@@ -1,9 +1,26 @@
var/global/datum/controller/game_controller/master_controller //Set in world.New()
+var/global/datum/failsafe/Failsafe
var/global/controllernum = "no"
+var/global/controller_iteration = 0
+
+
+
+
datum/controller/game_controller
var/processing = 1
+ var/global/air_master_ready = 0
+ var/global/tension_master_ready = 0
+ var/global/sun_ready = 0
+ var/global/mobs_ready = 0
+ var/global/diseases_ready = 0
+ var/global/machines_ready = 0
+ var/global/objects_ready = 0
+ var/global/networks_ready = 0
+ var/global/powernets_ready = 0
+ var/global/ticker_ready = 0
+
proc
setup()
setup_objects()
@@ -80,57 +97,142 @@ datum/controller/game_controller
process()
+ if(!Failsafe)
+ Failsafe = new /datum/failsafe
+ spawn(0)
+ Failsafe.spin()
+
+
if(!processing)
return 0
controllernum = "yes"
- spawn (100) controllernum = "no"
+ spawn (100)
+ controllernum = "no"
+
+ controller_iteration++
var/start_time = world.timeofday
- air_master.process()
+ air_master_ready = 0
+ tension_master_ready = 0
+ sun_ready = 0
+ mobs_ready = 0
+ diseases_ready = 0
+ machines_ready = 0
+ objects_ready = 0
+ networks_ready = 0
+ powernets_ready = 0
+ ticker_ready = 0
- tension_master.process()
+
+
+
+
+ spawn(0)
+ air_master.process()
+ air_master_ready = 1
+ spawn(0)
+ tension_master.process()
+ tension_master_ready = 1
sleep(1)
- sun.calc_position()
+ spawn(0)
+ sun.calc_position()
+ sun_ready = 1
sleep(-1)
- for(var/mob/M in world)
- M.Life()
+ spawn(0)
+ for(var/mob/M in world)
+ M.Life()
+ mobs_ready = 1
+
+
sleep(-1)
- for(var/datum/disease/D in active_diseases)
- D.process()
+ spawn(0)
+ for(var/datum/disease/D in active_diseases)
+ D.process()
+ diseases_ready = 1
- for(var/obj/machinery/machine in machines)
- if(machine)
- machine.process()
- if(machine && machine.use_power)
- machine.auto_use_power()
+ spawn(0)
+ for(var/obj/machinery/machine in machines)
+ if(machine)
+ machine.process()
+ if(machine && machine.use_power)
+ machine.auto_use_power()
+ machines_ready = 1
sleep(-1)
sleep(1)
- for(var/obj/object in processing_objects)
- object.process()
+ spawn(0)
+ for(var/obj/object in processing_objects)
+ object.process()
+ objects_ready = 1
- for(var/datum/pipe_network/network in pipe_networks)
- network.process()
+ spawn(0)
+ for(var/datum/pipe_network/network in pipe_networks)
+ network.process()
+ networks_ready = 1
- for(var/datum/powernet/P in powernets)
- P.reset()
+ spawn(0)
+ for(var/datum/powernet/P in powernets)
+ P.reset()
+ powernets_ready = 1
sleep(-1)
- ticker.process()
+ spawn(0)
+ ticker.process()
+ ticker_ready = 1
- sleep(world.timeofday+10-start_time) // This is fine for our tick lag. DMTG
+ sleep(world.timeofday+10-start_time)// Don't touch this. DMTG
- spawn process()
+ while(!air_master_ready || !tension_master_ready || !sun_ready || !mobs_ready || !diseases_ready || !machines_ready || !objects_ready || !networks_ready || !powernets_ready || !ticker_ready)
+ sleep(1)
+
+ spawn
+ process()
- return 1
\ No newline at end of file
+ return 1
+
+
+
+/datum/failsafe // This thing pretty much just keeps poking the master controller
+ var/spinning = 1
+ var/current_iteration = 0
+
+/datum/failsafe/proc/spin()
+ if(!master_controller) // Well fuck. How did this happen?
+ sleep(50)
+ if(!master_controller)
+ master_controller = new /datum/controller/game_controller()
+ spawn(-1)
+ master_controller.setup()
+
+ else
+ while(spinning)
+ current_iteration = controller_iteration
+ sleep(600) // Wait 15 seconds
+ if(current_iteration == controller_iteration) // Mm. The master controller hasn't ticked yet.
+
+ for (var/mob/M in world)
+ if (M.client && M.client.holder)
+ M << " Warning. The Master Controller has not fired in the last 60 seconds. Restart recommended. Automatic restart in 60 seconds."
+
+ sleep(600)
+ if(current_iteration == controller_iteration)
+ for (var/mob/M in world)
+ if (M.client && M.client.holder)
+ M << " Warning. The Master Controller has not fired in the last 2 minutes. Automatic restart beginning."
+ master_controller.process()
+ sleep(150)
+ else
+ for (var/mob/M in world)
+ if (M.client && M.client.holder)
+ M << " The Master Controller has fired. Automatic restart aborted."
\ No newline at end of file
diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index c0bc4e827a1..532aea59a36 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -200,6 +200,10 @@
var/disabled = 0 //malf
action(atom/target)
+ if(istype(target,/area/shuttle)||istype(target, /turf/space/transit))//>implying these are ever made -Sieve
+ disabled = 1
+ else
+ disabled = 0
if(!istype(target, /turf) && !istype(target, /obj/machinery/door/airlock))
target = get_turf(target)
if(!action_checks(target) || disabled || get_dist(chassis, target)>3) return
diff --git a/code/game/objects/closets/fireaxe.dm b/code/game/objects/closets/fireaxe.dm
index 649f2e22406..6847bf14ef8 100644
--- a/code/game/objects/closets/fireaxe.dm
+++ b/code/game/objects/closets/fireaxe.dm
@@ -2,7 +2,7 @@
/obj/structure/closet/fireaxecabinet
name = "Fire Axe Cabinet"
desc = "There is small label that reads \"For Emergency use only\" along with details for safe use of the axe. As if."
- var/obj/item/weapon/fireaxe/fireaxe = new/obj/item/weapon/fireaxe
+ var/obj/item/weapon/twohanded/fireaxe/fireaxe = new/obj/item/weapon/twohanded/fireaxe
icon_state = "fireaxe1000"
icon_closed = "fireaxe1000"
icon_opened = "fireaxe1100"
@@ -51,9 +51,9 @@
src.localopened = 1
update_icon()
return
- if (istype(O, /obj/item/weapon/fireaxe) && src.localopened)
+ if (istype(O, /obj/item/weapon/twohanded/fireaxe) && src.localopened)
if(!fireaxe)
- if(O.wielded)
+ if(O:wielded)
user << "\red Unwield the axe first."
return
fireaxe = O
diff --git a/code/game/objects/items/item.dm b/code/game/objects/items/item.dm
index 267feb8b3ef..c9b74bd6d40 100755
--- a/code/game/objects/items/item.dm
+++ b/code/game/objects/items/item.dm
@@ -12,20 +12,6 @@
..()
user.update_clothing()
- // So you can't drop the Offhand
- if(istype(src, /obj/item/weapon/offhand))
- user.drop_item(src)
-
- var/obj/item/O_r = user.r_hand
- var/obj/item/O_l = user.l_hand
- if(O_r.twohanded)
- if(O_r.wielded)
- user.drop_item(O_r)
- if(O_l.twohanded)
- if(O_l.wielded)
- user.drop_item(O_l)
- del(src)
-
// called just as an item is picked up (loc is not yet changed)
/obj/item/proc/pickup(mob/user)
return
@@ -231,38 +217,6 @@
if(istype(W, /obj/item/device/detective_scanner))
return
-/obj/item/attack_self(mob/user as mob)
- ..()
- if(twohanded)
- if(wielded) //Trying to unwield it
- wielded = 0
- force = force_unwielded
- src.name = "[initial(name)] (Unwielded)"
- src.update_icon() //If needed by the particular item
- user << "\blue You are now carrying the [initial(name)] with one hand."
-
- if(istype(user.get_inactive_hand(),/obj/item/weapon/offhand))
- del user.get_inactive_hand()
- return
- else //Trying to wield it
- if(user.get_inactive_hand())
- user << "\red You need your other hand to be empty"
- return
- wielded = 1
- force = force_wielded
- src.name = "[initial(name)] (Wielded)"
- src.update_icon() //If needed by the particular item
- user << "\blue You grab the [initial(name)] with both hands."
-
- var/obj/item/weapon/offhand/O = new /obj/item/weapon/offhand(user) ////Let's reserve his other hand~
- O.name = text("[initial(src.name)] - Offhand")
- O.desc = "Your second grip on the [initial(src.name)]"
- if(user.hand)
- user.r_hand = O ///Place dat offhand in the opposite hand
- else
- user.l_hand = O
- O.layer = 20
- return
mob/proc/flash_weak_pain()
flick("weak_pain",pain)
diff --git a/code/game/objects/items/robot_items.dm b/code/game/objects/items/robot_items.dm
index 36001689c58..30e18dc1777 100644
--- a/code/game/objects/items/robot_items.dm
+++ b/code/game/objects/items/robot_items.dm
@@ -144,12 +144,47 @@
user << "\red You cannot directly fill this object."
return
+
+ var/trans = 0
+
if(ismob(target))
+ if(istype(target , /mob/living/carbon/human))
+ var/mob/living/carbon/human/victim = target
+
+ var/obj/item/safe_thing = null
+ if( victim.wear_mask )
+ if ( victim.wear_mask.flags & MASKCOVERSEYES )
+ safe_thing = victim.wear_mask
+ if( victim.head )
+ if ( victim.head.flags & MASKCOVERSEYES )
+ safe_thing = victim.head
+ if(victim.glasses)
+ if ( !safe_thing )
+ safe_thing = victim.glasses
+
+ if(safe_thing)
+ if(!safe_thing.reagents)
+ safe_thing.create_reagents(100)
+ trans = src.reagents.trans_to(safe_thing, amount_per_transfer_from_this)
+
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message(text("\red [] tries to squirt something into []'s eyes, but fails!", user, target), 1)
+ spawn(5)
+ src.reagents.reaction(safe_thing, TOUCH)
+
+
+ user << "\blue You transfer [trans] units of the solution."
+ if (src.reagents.total_volume<=0)
+ filled = 0
+ icon_state = "dropper[filled]"
+ return
+
+
for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] drips something onto []!", user, target), 1)
+ O.show_message(text("\red [] squirts something into []'s eyes!", user, target), 1)
src.reagents.reaction(target, TOUCH)
- var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
+ trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
user << "\blue You transfer [trans] units of the solution."
if (src.reagents.total_volume<=0)
filled = 0
@@ -227,7 +262,7 @@
afterattack(atom/A, mob/user as mob)
- if(istype(A,/area/shuttle))//||istype(A,/turf/space/transit))//No RCDs on the shuttles -Sieve
+ if(istype(A,/area/shuttle)||istype(A,/turf/space/transit))//No RCDs on the shuttles -Sieve
disabled = 1
else
disabled = 0
diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm
index 9df99a58173..25f32a39343 100644
--- a/code/game/objects/items/weapons/RCD.dm
+++ b/code/game/objects/items/weapons/RCD.dm
@@ -71,6 +71,10 @@ RCD
afterattack(atom/A, mob/user as mob)
+ if(istype(A,/area/shuttle)||istype(A,/turf/space/transit))//Nanotrasen Matter Jammer TM -Sieve
+ disabled = 1
+ else
+ disabled = 0
if(!(istype(A, /turf) || istype(A, /obj/machinery/door/airlock)))
return
diff --git a/code/game/objects/items/weapons/hydroponics.dm b/code/game/objects/items/weapons/hydroponics.dm
index b80abcc2e8f..cce4a6efc76 100644
--- a/code/game/objects/items/weapons/hydroponics.dm
+++ b/code/game/objects/items/weapons/hydroponics.dm
@@ -149,7 +149,7 @@ Craftables (Cob pipes, potato batteries, pumpkinheads)
/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
- if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/fireaxe) || istype(W, /obj/item/weapon/kitchen/utensil/knife) || istype(W, /obj/item/weapon/melee/energy))
+ if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/twohanded/fireaxe) || istype(W, /obj/item/weapon/kitchen/utensil/knife) || istype(W, /obj/item/weapon/melee/energy))
user.show_message("You carve a face into [src]!", 1)
new /obj/item/clothing/head/helmet/hardhat/pumpkinhead (user.loc)
del(src)
diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm
index 8350cbcf524..b39e32a55b9 100644
--- a/code/game/objects/items/weapons/twohanded.dm
+++ b/code/game/objects/items/weapons/twohanded.dm
@@ -2,27 +2,115 @@
##################### TWO HANDED WEAPONS BE HERE~ -Agouri :3 ########
####################################################################*/
-///General Offhand object properties///
+//Rewrote TwoHanded weapons stuff and put it all here. Just copypasta fireaxe to make new ones ~Carn
+//This rewrite means we don't have two variables for EVERY item which are used only by a few weapons.
+//It also tidies stuff up elsewhere.
-////////////FIREAXE!//////////////
+/obj/item/weapon/twohanded
+ var/wielded = 0
+ var/force_unwielded = 0
+ var/force_wielded = 0
+/obj/item/weapon/twohanded/proc/unwield()
+ wielded = 0
+ force = force_unwielded
+ name = "[initial(name)]"
+ update_icon()
-/obj/item/weapon/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons.
- icon_state = text("fireaxe[]",wielded)
+/obj/item/weapon/twohanded/proc/wield()
+ wielded = 1
+ force = force_wielded
+ name = "[initial(name)] (Wielded)"
+ update_icon()
+
+/obj/item/weapon/twohanded/dropped(mob/user as mob)
+ //handles unwielding a twohanded weapon when dropped as well as clearing up the offhand
+ //bit of a hack but it keeps other code pretty neat and with fewer conditionals
+ var/obj/item/weapon/twohanded/O
+ if(user)
+ if(user.l_hand)
+ O = user.l_hand
+ else
+ O = user.r_hand
+ if(O && istype(O))
+ O.unwield()
+ return unwield()
+
+/obj/item/weapon/twohanded/update_icon()
return
-/obj/item/weapon/fireaxe/pickup(mob/user)
- wielded = 0
- name = "Fire Axe (Unwielded)"
+/obj/item/weapon/twohanded/pickup(mob/user)
+ unwield()
-/obj/item/weapon/fireaxe/attack_self(mob/user as mob)
+/obj/item/weapon/twohanded/attack_self(mob/user as mob)
if( istype(user,/mob/living/carbon/monkey) )
- user << "\red It's too heavy for you to fully wield"
+ user << "It's too heavy for you to wield fully."
return
-//welp, all is good, now to see if he's trying do twohandedly wield it or unwield it
-
..()
+ if(wielded) //Trying to unwield it
+ unwield()
+ user << "You are now carrying the [name] with one hand."
-/obj/item/weapon/offhand/dropped(mob/user as mob)
- del(src)
\ No newline at end of file
+ var/obj/item/weapon/twohanded/offhand/O = user.get_inactive_hand()
+ if(O && istype(O))
+ O.unwield()
+ return
+
+ else //Trying to wield it
+ if(user.get_inactive_hand())
+ user << "You need your other hand to be empty"
+ return
+ wield()
+ user << "You grab the [initial(name)] with both hands."
+
+ var/obj/item/weapon/twohanded/offhand/O = new(user) ////Let's reserve his other hand~
+ O.name = "[initial(name)] - offhand"
+ O.desc = "Your second grip on the [initial(name)]"
+ if(user.hand)
+ user.r_hand = O ///Place dat offhand in the opposite hand
+ else
+ user.l_hand = O
+ O.layer = 20
+ return
+
+///////////OFFHAND///////////////
+/obj/item/weapon/twohanded/offhand
+ w_class = 5.0
+ icon_state = "offhand"
+ name = "offhand"
+
+ unwield()
+ del(src)
+
+ wield()
+ del(src)
+
+////////////FIREAXE!//////////////
+/obj/item/weapon/twohanded/fireaxe // DEM AXES MAN, marker -Agouri
+ icon_state = "fireaxe0"
+ name = "fire axe"
+ desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?"
+ force = 5
+ w_class = 4.0
+ flags = ONBACK
+ force_unwielded = 5
+ force_wielded = 18
+
+/obj/item/weapon/twohanded/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons.
+ icon_state = "fireaxe[wielded]"
+ return
+
+/obj/item/weapon/twohanded/fireaxe/afterattack(atom/A as mob|obj|turf|area, mob/user as mob)
+ ..()
+ if(A && wielded && (istype(A,/obj/structure/window) || istype(A,/obj/structure/grille))) //destroys windows and grilles in one hit
+ if(istype(A,/obj/structure/window)) //should just make a window.Break() proc but couldn't bother with it
+ var/obj/structure/window/W = A
+
+ new /obj/item/weapon/shard( W.loc )
+ if(W.reinf) new /obj/item/stack/rods( W.loc)
+
+ if (W.dir == SOUTHWEST)
+ new /obj/item/weapon/shard( W.loc )
+ if(W.reinf) new /obj/item/stack/rods( W.loc)
+ del(A)
\ No newline at end of file
diff --git a/code/game/objects/mineral_doors.dm b/code/game/objects/mineral_doors.dm
index 8e8f7cc6b88..4b562b50744 100644
--- a/code/game/objects/mineral_doors.dm
+++ b/code/game/objects/mineral_doors.dm
@@ -243,4 +243,36 @@
/obj/structure/mineral_door/transparent/diamond
mineralType = "diamond"
- hardness = 10
\ No newline at end of file
+ hardness = 10
+
+/obj/structure/mineral_door/wood
+ mineralType = "wood"
+ hardness = 1
+
+ Open()
+ isSwitchingStates = 1
+ playsound(loc, 'doorcreaky.ogg', 100, 1)
+ flick("[mineralType]opening",src)
+ sleep(10)
+ density = 0
+ opacity = 0
+ state = 1
+ update_icon()
+ isSwitchingStates = 0
+
+ Close()
+ isSwitchingStates = 1
+ playsound(loc, 'doorcreaky.ogg', 100, 1)
+ flick("[mineralType]closing",src)
+ sleep(10)
+ density = 1
+ opacity = 1
+ state = 0
+ update_icon()
+ isSwitchingStates = 0
+
+ Dismantle(devastated = 0)
+ if(!devastated)
+ for(var/i = 1, i <= oreAmount, i++)
+ new/obj/item/stack/sheet/wood(get_turf(src))
+ del(src)
\ No newline at end of file
diff --git a/code/game/objects/stacks/wood.dm b/code/game/objects/stacks/wood.dm
index e7a0bdf5a62..40f4494721c 100644
--- a/code/game/objects/stacks/wood.dm
+++ b/code/game/objects/stacks/wood.dm
@@ -4,8 +4,10 @@ WOOD PLANKS
*/
var/global/list/datum/stack_recipe/wood_recipes = list ( \
+ new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1), \
new/datum/stack_recipe("table parts", /obj/item/weapon/table_parts/wood, 2), \
- new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 30, one_per_turf = 1, on_floor = 1),\
+ new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 30, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 20, one_per_turf = 1, on_floor = 1), \
)
/obj/item/stack/sheet/wood
diff --git a/code/game/objects/storage/crates.dm b/code/game/objects/storage/crates.dm
index 39689a3eaae..cb33970a13b 100644
--- a/code/game/objects/storage/crates.dm
+++ b/code/game/objects/storage/crates.dm
@@ -38,6 +38,15 @@
icon_opened = "crateopen"
icon_closed = "crate"
+/obj/structure/closet/crate/contraband
+ name = "Contraband crate"
+ desc = "A random assortment of items manufactured by providers NOT listed under Nanotrasen's whitelist."
+ icon = 'storage.dmi'
+ icon_state = "crate"
+ density = 1
+ icon_opened = "crateopen"
+ icon_closed = "crate"
+
/obj/structure/closet/crate/medical
desc = "A medical crate."
name = "Medical crate"
diff --git a/code/game/objects/tank.dm b/code/game/objects/tank.dm
index 883234bdb9a..beaa3b21a08 100644
--- a/code/game/objects/tank.dm
+++ b/code/game/objects/tank.dm
@@ -33,9 +33,9 @@
examine()
set src in usr
..()
- if(air_contents.oxygen < 1)
+ if(air_contents.oxygen < 1 && loc==usr)
usr << text("\red The meter on the [src.name] indicates you are almost out of air!")
- playsound(usr, 'alert.ogg', 50, 1)
+ usr << sound('alert.ogg')
/obj/item/weapon/tank/plasma
diff --git a/code/game/objects/tanks/emergency.dm b/code/game/objects/tanks/emergency.dm
index fbadf6fca8e..0d767fd2700 100644
--- a/code/game/objects/tanks/emergency.dm
+++ b/code/game/objects/tanks/emergency.dm
@@ -18,10 +18,9 @@
examine()
set src in usr
..()
- if(air_contents.oxygen < 0.4)
+ if(air_contents.oxygen < 0.2 && loc==usr)
usr << text("\red The meter on the [src.name] indicates you are almost out of air!")
- playsound(usr, 'alert.ogg', 50, 1)
-
+ usr << sound('alert.ogg')
/obj/item/weapon/tank/emergency_oxygen/engi
icon_state = "emergency_engi"
diff --git a/code/game/objects/transfer_valve.dm b/code/game/objects/transfer_valve.dm
index 02619098249..39660bbbe6f 100644
--- a/code/game/objects/transfer_valve.dm
+++ b/code/game/objects/transfer_valve.dm
@@ -1,6 +1,6 @@
/obj/item/device/transfer_valve
icon = 'assemblies.dmi'
- name = "Tank transfer valve" // because that's what it is exadv1 and don't you dare change it
+ name = "tank transfer valve"
icon_state = "valve_1"
desc = "Regulates the transfer of air between two tanks"
var/obj/item/weapon/tank/tank_one
@@ -19,34 +19,34 @@
attackby(obj/item/item, mob/user)
if(istype(item, /obj/item/weapon/tank))
if(tank_one && tank_two)
- user << "\red There are already two tanks attached, remove one first!"
+ user << "There are already two tanks attached, remove one first."
return
if(!tank_one)
tank_one = item
user.drop_item()
item.loc = src
- user << "\blue You attach the tank to the transfer valve"
+ user << "You attach the tank to the transfer valve."
else if(!tank_two)
tank_two = item
user.drop_item()
item.loc = src
- user << "\blue You attach the tank to the transfer valve!"
+ user << "You attach the tank to the transfer valve."
update_icon()
//TODO: Have this take an assemblyholder
else if(isassembly(item))
var/obj/item/device/assembly/A = item
if(A.secured)
- user << "\red The device is secured!"
+ user << "The device is secured."
return
if(attached_device)
- user << "\red There is already an device attached to the valve, remove it first!"
+ user << "There is already an device attached to the valve, remove it first."
return
user.remove_from_mob(item)
attached_device = A
A.loc = src
- user << "\blue You attach the [item] to the valve controls and secure it!"
+ user << "You attach the [item] to the valve controls and secure it."
A.holder = src
A.toggle_secure()
@@ -75,39 +75,39 @@
onclose(user, "trans_valve")
return
-
+ //CARN: MARKER
Topic(href, href_list)
..()
- if (usr.stat|| usr.restrained())
+ if ( usr.stat || usr.restrained() )
return
if (src.loc == usr)
- if(href_list["tankone"])
+ if(tank_one && href_list["tankone"])
split_gases()
valve_open = 0
tank_one.loc = get_turf(src)
tank_one = null
update_icon()
- if(href_list["tanktwo"])
+ else if(tank_two && href_list["tanktwo"])
split_gases()
valve_open = 0
tank_two.loc = get_turf(src)
tank_two = null
update_icon()
- if(href_list["open"])
+ else if(href_list["open"])
toggle_valve()
- if(href_list["rem_device"])
- if(attached_device)
+ else if(attached_device)
+ if(href_list["rem_device"])
attached_device.loc = get_turf(src)
attached_device:holder = null
attached_device = null
- update_icon()
- if(href_list["device"])
- attached_device.attack_self(usr)
+ update_icon()
+ if(href_list["device"])
+ attached_device.attack_self(usr)
src.attack_self(usr)
-
src.add_fingerprint(usr)
return
+ return
process_activation(var/obj/item/device/D)
if(toggle)
diff --git a/code/game/objects/weapons.dm b/code/game/objects/weapons.dm
index c84aa9aa2fb..15c395310b6 100644
--- a/code/game/objects/weapons.dm
+++ b/code/game/objects/weapons.dm
@@ -203,17 +203,3 @@
for(var/mob/O in viewers(src, null))
O.show_message(text("\red The mousetrap is triggered by [A]."), 1)
src.triggered(null)
-
-/obj/item/weapon/fireaxe/afterattack(atom/A as mob|obj|turf|area, mob/user as mob)
- ..()
- if(A && wielded && (istype(A,/obj/structure/window) || istype(A,/obj/structure/grille))) //destroys windows and grilles in one hit
- if(istype(A,/obj/structure/window)) //should just make a window.Break() proc but couldn't bother with it
- var/obj/structure/window/W = A
-
- new /obj/item/weapon/shard( W.loc )
- if(W.reinf) new /obj/item/stack/rods( W.loc)
-
- if (W.dir == SOUTHWEST)
- new /obj/item/weapon/shard( W.loc )
- if(W.reinf) new /obj/item/stack/rods( W.loc)
- del(A)
\ No newline at end of file
diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm
index 440cc680403..f481fe8f58f 100644
--- a/code/game/supplyshuttle.dm
+++ b/code/game/supplyshuttle.dm
@@ -95,6 +95,7 @@ var/list/supply_groups = new()
circuit = "/obj/item/weapon/circuitboard/supplycomp"
var/temp = null
var/hacked = 0
+ var/can_order_contraband = 0
/obj/machinery/computer/supplycomp/New()
// add the supply pack groups, if they haven't already been added
@@ -141,6 +142,7 @@ var/list/supply_groups = new()
var/containername = null
var/access = null
var/hidden = 0
+ var/contraband = 0
var/group = "Miscellaneous"
/proc/supply_ticker()
@@ -348,7 +350,7 @@ This method wont take into account storage items developed in the future and doe
src.temp = "Supply points: [supply_shuttle_points]
Request what?
"
for(var/S in (typesof(/datum/supply_packs) - /datum/supply_packs - /datum/supply_packs/charge) )
var/datum/supply_packs/N = new S()
- if(N.hidden) continue //Have to send the type instead of a reference to
+ if(N.hidden || N.contraband) continue //Have to send the type instead of a reference to
if(N.group != G) continue //correct group?
src.temp += "[N.name] Cost: [N.cost] " //the obj because it would get caught by the garbage
src.temp += "Print Requisition
" //collector. oh well.
@@ -490,6 +492,8 @@ This method wont take into account storage items developed in the future and doe
user << "\blue You disconnect the monitor."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
var/obj/item/weapon/circuitboard/supplycomp/M = new /obj/item/weapon/circuitboard/supplycomp( A )
+ if(src.can_order_contraband)
+ M.contraband_enabled = 1
for (var/obj/C in src)
C.loc = src.loc
A.circuit = M
@@ -567,6 +571,7 @@ This method wont take into account storage items developed in the future and doe
for(var/S in (typesof(/datum/supply_packs) - /datum/supply_packs - /datum/supply_packs/charge) )
var/datum/supply_packs/N = new S()
if(N.hidden && !src.hacked) continue //Have to send the type instead of a reference to
+ if(N.contraband && !src.can_order_contraband){continue;} //Agouri -Kavalamarker
if(N.group != G) continue //correct group?
src.temp += "[N.name] Cost: [N.cost]
" //the obj because it would get caught by the garbage
src.temp += "
Back" //collector. oh well.
diff --git a/code/game/throwing.dm b/code/game/throwing.dm
index 9560bed0efd..a4bd5323e4f 100644
--- a/code/game/throwing.dm
+++ b/code/game/throwing.dm
@@ -25,7 +25,7 @@
/mob/living/carbon/proc/throw_item(atom/target)
src.throw_mode_off()
- if(usr.stat)
+ if(usr.stat || !target)
return
if(target.type == /obj/screen) return
@@ -33,19 +33,6 @@
if(!item) return
- if(istype(item,/obj/item))
- var/obj/item/IT = item
- if(IT.twohanded)
- if(IT.wielded)
- if(hand)
- var/obj/item/weapon/offhand/O = r_hand
- del O
- else
- var/obj/item/weapon/offhand/O = l_hand
- del O
-
- IT.wielded = 0
- IT.name = initial(IT.name)
u_equip(item)
diff --git a/code/game/turf.dm b/code/game/turf.dm
index 7e195556311..564f174fd22 100644
--- a/code/game/turf.dm
+++ b/code/game/turf.dm
@@ -215,6 +215,7 @@
playsound(src, "clownstep", 50, 1) // this will get annoying very fast.
else
playsound(src, "clownstep", 20, 1)
+
switch (src.wet)
if(1)
if(istype(M, /mob/living/carbon/human)) // Added check since monkeys don't have shoes
@@ -322,6 +323,12 @@
new /obj/item/stack/sheet/metal( src )
new /obj/item/stack/sheet/metal( src )
+ for(var/obj/O in src.contents) //Eject contents!
+ if(istype(O,/obj/effect/decal/poster))
+ var/obj/effect/decal/poster/P = O
+ P.roll_and_drop(src)
+ else
+ O.loc = src
ReplaceWithPlating(explode)
/turf/simulated/wall/examine()
@@ -509,6 +516,12 @@
var/obj/item/apc_frame/AH = W
AH.try_build(src)
return
+
+ //Poster stuff
+ else if(istype(W,/obj/item/weapon/contraband/poster))
+ place_poster(W,user)
+ return
+
else
return attack_hand(user)
return
@@ -744,6 +757,11 @@
var/obj/item/apc_frame/AH = W
AH.try_build(src)
+ //Poster stuff
+ else if(istype(W,/obj/item/weapon/contraband/poster))
+ place_poster(W,user)
+ return
+
//Finally, CHECKING FOR FALSE WALLS if it isn't damaged
else if(!d_state)
return attack_hand(user)
diff --git a/code/game/verbs/authorize.dm b/code/game/verbs/authorize.dm
index 5e2d59a6035..2129eb67d45 100644
--- a/code/game/verbs/authorize.dm
+++ b/code/game/verbs/authorize.dm
@@ -1,7 +1,4 @@
/*
-
-The old goon auth/beta code is here:
-
/client/proc/authorize()
set name = "Authorize"
@@ -45,8 +42,9 @@ The old goon auth/beta code is here:
src << "Try again using the Authorize command, sometimes the server will hiccup and not correctly authorize."
src << "\blue[no_auth_motd]"
src.authenticating = 0
+*/
-
+/* The old goon auth/beta code is here
/client/proc/beta_tester_auth()
set name = "Tester?"
/*if(istester(src))
@@ -167,4 +165,4 @@ var/list/beta_tester_keylist
goon_savefile()
return 1
return 0
-*/
+*/
\ No newline at end of file
diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm
index 4f8a60a2f93..9060defb328 100644
--- a/code/game/verbs/ooc.dm
+++ b/code/game/verbs/ooc.dm
@@ -12,7 +12,9 @@
/mob/verb/ooc(msg as text)
set name = "OOC" //Gave this shit a shorter name so you only have to time out "ooc" rather than "ooc message" to use it --NeoFite
set category = "OOC"
-
+ if (IsGuestKey(src.key))
+ src << "You are not authorized to communicate over these channels."
+ return
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
if(!msg)
return
@@ -36,17 +38,15 @@
for (var/client/C)
if (src.client.holder && (!src.client.stealth || C.holder))
-// C << "OOC: [src.key]: [msg]"
if (src.client.holder.rank == "Admin Observer")
- C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]"
+ C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]"
else if (src.client.holder.rank == "Retired Admin")
- C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]"
+ C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]"
else
- C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]"
+ C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]"
else if (C.listen_ooc)
- C << "OOC: [src.client.stealth ? src.client.fakekey : src.key]: [msg]"
-
+ C << "OOC: [src.client.stealth ? src.client.fakekey : src.key]: [msg]"
/*
/mob/verb/goonsay(msg as text)
set name = "Goonsay"
diff --git a/code/game/vote.dm b/code/game/vote.dm
index f475c37f7a7..0c87858e845 100644
--- a/code/game/vote.dm
+++ b/code/game/vote.dm
@@ -408,7 +408,7 @@
for(var/mob/CM in world)
if(CM.client)
- if(config.vote_no_default || (config.vote_no_dead && CM.stat == 2))
+ if( config.vote_no_default || (config.vote_no_dead && CM.stat == 2) )
CM.client.vote = "none"
else
CM.client.vote = "default"
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 71811b312da..5897f2cded8 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -1049,6 +1049,16 @@ var/global/BSACooldown = 0
log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Observer.)")
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Observer.)", 1)
+// if (href_list["adminauth"])
+// if ((src.rank in list( "Admin Candidate", "Temporary Admin", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
+// var/mob/M = locate(href_list["adminauth"])
+// if (ismob(M) && !M.client.authenticated && !M.client.authenticating)
+// M.client.verbs -= /client/proc/authorize
+// M.client.authenticated = text("admin/[]", usr.client.authenticated)
+// log_admin("[key_name(usr)] authorized [key_name(M)]")
+// message_admins("\blue [key_name_admin(usr)] authorized [key_name_admin(M)]", 1)
+// M.client << text("You have been authorized by []", usr.key)
+
if (href_list["revive"])
if ((src.rank in list( "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
var/mob/living/M = locate(href_list["revive"])
@@ -1904,30 +1914,16 @@ var/global/BSACooldown = 0
world << sound('granomalies.ogg')
var/turf/T = pick(blobstart)
var/obj/effect/bhole/bh = new /obj/effect/bhole( T.loc, 30 )
- spawn(rand(50, 300))
+ spawn(rand(100, 600))
del(bh)
- if("timeanomalies")
- command_alert("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert")
- world << sound('spanomalies.ogg')
- var/list/turfs = list( )
- var/turf/picked
- for(var/turf/T in world)
- if(T.z == 1 && istype(T,/turf/simulated/floor) && !istype(T,/turf/space))
- turfs += T
- for(var/turf/T in world)
- set background = 1
- if(prob(20) && T.z == 1 && istype(T,/turf/simulated/floor))
- spawn(50+rand(0,3000))
- picked = pick(turfs)
- var/obj/effect/portal/P = new /obj/effect/portal( T )
- P.target = picked
- P.creator = null
- P.icon = 'objects.dmi'
- P.failchance = 0
- P.icon_state = "anom"
- P.name = "wormhole"
- spawn(rand(300,600))
- del(P)
+
+ if("timeanomalies") //dear god this code was awful :P Still needs further optimisation
+ feedback_inc("admin_secrets_fun_used",1)
+ feedback_add_details("admin_secrets_fun_used","STA")
+ //moved to its own dm so I could split it up and prevent the spawns copying variables over and over
+ //can be found in code\game\game_modes\events\wormholes.dm
+ wormhole_event()
+
if("goblob")
//feedback_inc("admin_secrets_fun_used",1)
//feedback_add_details("admin_secrets_fun_used","BL")
@@ -2354,6 +2350,10 @@ var/global/BSACooldown = 0
var/dat = "Options for [M.key]"
var/foo = " "
if (ismob(M) && M.client)
+// if(!M.client.authenticated && !M.client.authenticating)
+// foo += text("Authorize | ")
+// else
+// foo += text("Authorized | ")
foo += text("Promote/Demote | ")
if(!istype(M, /mob/new_player))
if(!ismonkey(M))
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index ae551810a05..38e63dea1b0 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -227,7 +227,7 @@
//verbs += /proc/togglebuildmode --Merged with view variables
//verbs += /client/proc/cmd_modify_object_variables --Merged with view variables
verbs += /client/proc/togglebuildmodeself
-
+ verbs += /client/proc/debug_master_controller
else return
//Game Admin
@@ -445,6 +445,7 @@
//verbs -= /client/proc/cmd_switch_radio --removed because tcommsat is staying
verbs -= /client/proc/togglebuildmodeself
verbs -= /client/proc/kill_airgroup
+ verbs -= /client/proc/debug_master_controller
verbs -= /client/proc/admin_deny_shuttle
verbs -= /client/proc/cmd_admin_christmas
verbs -= /client/proc/editappear
diff --git a/code/modules/admin/verbs/MC.dm b/code/modules/admin/verbs/MC.dm
index ded7740c2c1..a9481f7f348 100644
--- a/code/modules/admin/verbs/MC.dm
+++ b/code/modules/admin/verbs/MC.dm
@@ -7,4 +7,16 @@
master_controller.process()
if("No")
return 0
+ //feedback_add_details("admin_verb","RMC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+ return
+
+/client/proc/debug_master_controller()
+ set category = "Debug"
+ set name = "Debug Master Controller"
+ switch(alert("Debug Master Controller or Failsafe?" ,, "Master Controller" , "Failsafe"))
+ if("Master Controller")
+ debug_variables(master_controller)
+ if("Failsafe")
+ debug_variables(Failsafe)
+ //feedback_add_details("admin_verb","DMC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
\ No newline at end of file
diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm
index cff3f989427..92165d06a2f 100644
--- a/code/modules/admin/verbs/adminsay.dm
+++ b/code/modules/admin/verbs/adminsay.dm
@@ -3,8 +3,6 @@
set name = "Asay" //Gave this shit a shorter name so you only have to time out "asay" rather than "admin say" to use it --NeoFite
set hidden = 1
- // All admins should be authenticated, but... what if?
-
if (!src.holder)
src << "Only administrators may use this command."
return
@@ -24,7 +22,7 @@
for (var/mob/M in world)
if (M.client && M.client.holder)
if (src.holder.rank == "Admin Observer")
- M << "ADMIN: [key_name(usr, M)]: [msg]"
+ M << "ADMIN: [key_name(usr, M)]: [msg]"
else
M << "ADMIN: [key_name(usr, M)] (JMP): [msg]"
diff --git a/code/modules/admin/verbs/atmosdebug.dm b/code/modules/admin/verbs/atmosdebug.dm
index 84910af33cb..7e4cb2efaaa 100644
--- a/code/modules/admin/verbs/atmosdebug.dm
+++ b/code/modules/admin/verbs/atmosdebug.dm
@@ -4,6 +4,7 @@
if(!src.holder)
src << "Only administrators may use this command."
return
+ //feedback_add_details("admin_verb","CP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
for (var/obj/machinery/atmospherics/plumbing in world)
if (plumbing.nodealert)
diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm
index 3d76105f862..6fc867c966e 100644
--- a/code/modules/admin/verbs/deadsay.dm
+++ b/code/modules/admin/verbs/deadsay.dm
@@ -23,4 +23,6 @@
if (istype(M, /mob/new_player))
continue
if (M.stat == 2 || (M.client && M.client.holder && M.client.deadchat)) //admins can toggle deadchat on and off. This is a proc in admin.dm and is only give to Administrators and above
- M.show_message(rendered, 2)
\ No newline at end of file
+ M.show_message(rendered, 2)
+
+ //feedback_add_details("admin_verb","D") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
\ No newline at end of file
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index b8f1f19aa71..05a6c03c3f3 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -505,6 +505,24 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
H.update_clothing()
else
alert("Invalid mob")
+ //feedback_add_details("admin_verb","GFA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/client/proc/cmd_assume_direct_control(var/mob/M in world)
+ set category = "Admin"
+ set name = "Assume direct control"
+ set desc = "Direct intervention"
+
+ if(M.ckey)
+ if(alert("This mob is being controlled by [M.ckey]. Are you sure you wish to assume control of it? [M.ckey] will be made a ghost.",,"Yes","No") != "Yes")
+ return
+ else
+ var/mob/dead/observer/ghost = new/mob/dead/observer()
+ ghost.ckey = M.ckey;
+ var/mob/adminmob = src.mob
+ M.ckey = src.ckey;
+ if( isobserver(adminmob) )
+ del(adminmob)
+ //feedback_add_details("admin_verb","ADC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_dress(var/mob/living/carbon/human/M in world)
@@ -663,8 +681,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
W.registered_name = M.real_name
M.equip_if_possible(W, M.slot_wear_id)
- var/obj/item/weapon/fireaxe/fire_axe = new(M)
- fire_axe.name = "Fire Axe (Unwielded)"
+ var/obj/item/weapon/twohanded/fireaxe/fire_axe = new(M)
M.equip_if_possible(fire_axe, M.slot_r_hand)
if("masked killer")
@@ -679,8 +696,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_if_possible(new /obj/item/weapon/kitchenknife(M), M.slot_l_store)
M.equip_if_possible(new /obj/item/weapon/scalpel(M), M.slot_r_store)
- var/obj/item/weapon/fireaxe/fire_axe = new(M)
- fire_axe.name = "Fire Axe (Unwielded)"
+ var/obj/item/weapon/twohanded/fireaxe/fire_axe = new(M)
M.equip_if_possible(fire_axe, M.slot_r_hand)
for(var/obj/item/carried_item in M.contents)
diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm
index 48210e226a7..4ca0125f63a 100644
--- a/code/modules/admin/verbs/playsound.dm
+++ b/code/modules/admin/verbs/playsound.dm
@@ -31,6 +31,7 @@
else
usr << "You already used up your jukebox monies this round!"
del(uploaded_sound)
+ //feedback_add_details("admin_verb","PGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/play_local_sound(S as sound)
@@ -46,6 +47,7 @@
message_admins("[key_name_admin(src)] played a local sound [S]", 1)
playsound(get_turf_loc(src.mob), S, 50, 0, 0)
return
+ //feedback_add_details("admin_verb","PLS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/*
@@ -62,7 +64,7 @@
for(var/mob/living/carbon/human/CP in world)
if(CP.real_name=="Cuban Pete" && CP.key!="Rosham")
CP << "Your body can't contain the rhumba beat"
- CP.gib(1)
+ CP.gib()
/client/proc/bananaphone()
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index d16e9aa2a84..25d225bb920 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -907,7 +907,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
config.allow_random_events = 0
usr << "Random events disabled"
message_admins("Admin [key_name_admin(usr)] has disabled random events.", 1)
- feedback_add_details("admin_verb","TRE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+ //feedback_add_details("admin_verb","TRE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/rnd_check_designs()
set category = "Debug"
diff --git a/code/modules/admin/verbs/striketeam_syndicate.dm b/code/modules/admin/verbs/striketeam_syndicate.dm
index a07c3860937..8f4a15d6f72 100644
--- a/code/modules/admin/verbs/striketeam_syndicate.dm
+++ b/code/modules/admin/verbs/striketeam_syndicate.dm
@@ -37,7 +37,6 @@ var/global/sent_syndicate_strike_team = 0
if (emergency_shuttle.direction == 1 && emergency_shuttle.online == 1)
emergency_shuttle.recall()
- world << "\blue Alert: The shuttle is going back!"
var/syndicate_commando_number = syndicate_commandos_possible //for selecting a leader
var/syndicate_leader_selected = 0 //when the leader is chosen. The last person spawned.
@@ -145,7 +144,7 @@ var/global/sent_syndicate_strike_team = 0
camera.c_tag = real_name
var/obj/item/device/radio/R = new /obj/item/device/radio/headset(src)
- R.set_frequency(NUKE_FREQ) //Same frequency as the syndicate team in Nuke mode.
+ R.set_frequency(NUKE_FREQ) //Same frequency as the syndicate team in Nuke mode. DMTG
equip_if_possible(R, slot_ears)
equip_if_possible(new /obj/item/clothing/under/syndicate(src), slot_w_uniform)
equip_if_possible(new /obj/item/clothing/shoes/swat(src), slot_shoes)
diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm
index dbe506380c2..6a9bb90d841 100644
--- a/code/modules/chemical/Chemistry-Reagents.dm
+++ b/code/modules/chemical/Chemistry-Reagents.dm
@@ -436,7 +436,7 @@ datum
if(15 to 25)
M:drowsyness = max(M:drowsyness, 20)
if(25 to INFINITY)
- M.sleeping = 1
+ M.sleeping += 1
M.adjustOxyLoss(-M.getOxyLoss())
M.SetWeakened(0)
M.SetStunned(0)
@@ -2446,7 +2446,7 @@ datum
M:drowsyness = max(0,M:drowsyness-3)
M:slurring = max(0, M:slurring-3)
if(!M:sleeping_willingly)
- M:sleeping = 0
+ M:sleeping = max(0,M.sleeping - 2)
if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
M.bodytemperature = min(310, M.bodytemperature+5)
M.make_jittery(1)
@@ -2488,7 +2488,7 @@ datum
M:drowsyness = max(0,M:drowsyness-3)
M:slurring = max(0, M:slurring-3)
if(!M:sleeping_willingly)
- M:sleeping = 0
+ M:sleeping = max(0,M.sleeping-2)
if (M.bodytemperature > 310)//310 is the normal bodytemp. 310.055
M.bodytemperature = min(310, M.bodytemperature-5)
M.make_jittery(1)
@@ -2507,7 +2507,7 @@ datum
M.dizziness = max(0,M.dizziness-2)
M:drowsyness = max(0,M:drowsyness-1)
if(!M:sleeping_willingly)
- M:sleeping = 0
+ M.sleeping = max(0,M.sleeping-2)
if(M:getToxLoss() && prob(20))
M:adjustToxLoss(-1)
if (M.bodytemperature > 310)//310 is the normal bodytemp. 310.055
@@ -2542,7 +2542,7 @@ datum
M.dizziness +=5
M:drowsyness = 0
if(!M:sleeping_willingly)
- M:sleeping = 0
+ M:sleeping = max(0,M.sleeping-2)
if (M.bodytemperature > 310)//310 is the normal bodytemp. 310.055
M.bodytemperature = max(310, M.bodytemperature-5)
M:nutrition += 1
@@ -2559,7 +2559,7 @@ datum
on_mob_life(var/mob/living/M as mob)
M:drowsyness = max(0,M:drowsyness-7)
if(!M:sleeping_willingly)
- M:sleeping = 0
+ M:sleeping = max(0,M.sleeping-1)
if (M.bodytemperature > 310)
M.bodytemperature = max(310, M.bodytemperature-5)
M.make_jittery(1)
@@ -2779,7 +2779,7 @@ datum
on_mob_life(var/mob/living/M as mob)
M:drowsyness = max(0,M:drowsyness-7)
if(!M:sleeping_willingly)
- M:sleeping = 0
+ M:sleeping = max(0,M.sleeping-2)
if (M.bodytemperature > 310)
M.bodytemperature = max(310, M.bodytemperature-5)
M.make_jittery(1)
@@ -3095,7 +3095,7 @@ datum
M.dizziness = max(0,M.dizziness-5)
M:drowsyness = max(0,M:drowsyness-3)
if(!M:sleeping_willingly)
- M:sleeping = 0
+ M:sleeping = max(0,M.sleeping-2)
if (M.bodytemperature > 310)
M.bodytemperature = max(310, M.bodytemperature-5)
..()
@@ -3112,7 +3112,7 @@ datum
M.dizziness = max(0,M.dizziness-5)
M:drowsyness = max(0,M:drowsyness-3)
if(!M:sleeping_willingly)
- M:sleeping = 0
+ M:sleeping = max(0,M.sleeping-2)
M.make_jittery(1)
..()
return
@@ -3128,7 +3128,7 @@ datum
M.dizziness = max(0,M.dizziness-5)
M:drowsyness = max(0,M:drowsyness-3)
if(!M:sleeping_willingly)
- M:sleeping = 0
+ M:sleeping = max(0,M.sleeping - 2)
if (M.bodytemperature > 310)
M.bodytemperature = max(310, M.bodytemperature-5)
..()
diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm
index c19380ddd5d..3562372a94a 100644
--- a/code/modules/chemical/Chemistry-Tools.dm
+++ b/code/modules/chemical/Chemistry-Tools.dm
@@ -1887,19 +1887,16 @@
del(D)
del(src)
-/obj/item/weapon/reagent_containers/glass/watercan
+/obj/item/weapon/reagent_containers/glass/bucket/wateringcan
name = "watering can"
desc = "A watering can, for all your watering needs."
icon = 'hydroponics.dmi'
icon_state = "watercan"
item_state = "bucket"
- m_amt = 200
- g_amt = 0
- w_class = 3.0
- amount_per_transfer_from_this = 20
- possible_transfer_amounts = list(10,20,30,50,70)
- volume = 70
- flags = FPRINT | OPENCONTAINER
+
+ attackby(var/obj/D, mob/user as mob)
+ if(isprox(D))
+ return
/obj/item/weapon/reagent_containers/glass/cantister
desc = "It's a canister. Mainly used for transporting fuel."
@@ -3350,14 +3347,6 @@
icon_state = "cubalibreglass"
name = "Cuba Libre"
desc = "A classic mix of rum and cola."
- if("irishcream")
- icon_state = "irishcreamglass"
- name = "Irish Cream"
- desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?"
- if("cubalibre")
- icon_state = "cubalibreglass"
- name = "Cuba Libre"
- desc = "A classic mix of rum and cola."
if("b52")
icon_state = "b52glass"
name = "B-52"
diff --git a/code/modules/food/food.dm b/code/modules/food/food.dm
index 33322a3121a..b295e72b435 100644
--- a/code/modules/food/food.dm
+++ b/code/modules/food/food.dm
@@ -1417,6 +1417,30 @@
reagents.add_reagent("nutriment", 28)
bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup
+ name = "chantrelle soup"
+ desc = "A delicious and hearty mushroom soup."
+ icon_state = "mushroomsoup"
+ trash = "snack_bowl"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 10)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit
+ name = "plump helmet biscuit"
+ desc = "This is a finely-prepared plump helmet biscuit. The ingredients are exceptionally minced plump helmet, and well-minced dwarven wheat flour."
+ icon_state = "phelmbiscuit"
+ New()
+ ..()
+ if(prob(10))
+ name = "exceptional plump helmet biscuit"
+ desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!"
+ reagents.add_reagent("nutriment", 15)
+ bitesize = 2
+ else
+ reagents.add_reagent("nutriment", 5)
+ bitesize = 2
/////////////////////////////////////////////////Sliceable////////////////////////////////////////
// All the food items that can be sliced into smaller bits like Meatbread and Cheesewheels
diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm
index b6af2806eb4..e97a5720a93 100644
--- a/code/modules/food/recipes_microwave.dm
+++ b/code/modules/food/recipes_microwave.dm
@@ -1005,6 +1005,19 @@
)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie
+/datum/recipe/plumphelmetbiscuit
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/flour,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit
+
+/datum/recipe/mushroomsoup
+ reagents = list("water" = 5, "milk" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/mushroomsoup
//////////////////////////////////////////
// bs12 food port stuff
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index 08755336fd5..c06fd1cd656 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -284,7 +284,7 @@
// seedName = pick(list("1","2","3","4"))
// seedAmt = rand(1,4)
if(prob(20))
- icon_state = "asteroid[rand(0,8)]"
+ icon_state = "asteroid[rand(0,12)]"
spawn(2)
updateMineralOverlays()
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index 52e422c6285..52fd1b1ac25 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -90,7 +90,7 @@
flick("flash", flash)
// if (stat == 2 && client)
-// gib(1)
+// gib()
// return
// else if (stat == 2 && !client)
@@ -105,7 +105,7 @@
switch (severity)
if (1.0)
b_loss += 500
- gib(1)
+ gib()
return
if (2.0)
@@ -741,7 +741,7 @@ In all, this is a lot like the monkey code. /N
if ("help")
if(!sleeping_willingly)
- sleeping = 0
+ sleeping = max(0,sleeping-5)
resting = 0
AdjustParalysis(-3)
AdjustStunned(-3)
@@ -783,7 +783,7 @@ In all, this is a lot like the monkey code. /N
Right Hand: [(r_hand ? text("[]", r_hand) : "Nothing")]
Head: [(head ? text("[]", head) : "Nothing")]
(Exo)Suit: [(wear_suit ? text("[]", wear_suit) : "Nothing")]
-
Empty Pockets
+
Empty Pouches
Close
"}
user << browse(dat, text("window=mob[name];size=340x480"))
diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm
index 1388a1314c1..6356a385efe 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/life.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm
@@ -380,7 +380,7 @@
src.drowsyness--
src.eye_blurry = max(2, src.eye_blurry)
if (prob(5))
- src.sleeping = 1
+ src.sleeping += 1
src.Paralyse(5)
confused = max(0, confused - 1)
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index 252dc6349e7..5e0a8156a7b 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -80,7 +80,7 @@
flick("flash", flash)
/*
if (stat == 2 && client)
- gib(1)
+ gib()
return
else if (stat == 2 && !client)
@@ -93,7 +93,7 @@
switch (severity)
if (1.0)
b_loss += 500
- gib(1)
+ gib()
return
if (2.0)
@@ -490,7 +490,7 @@
if ("help")
if(!sleeping_willingly)
- sleeping = 0
+ sleeping = max(0,sleeping-5)
resting = 0
AdjustParalysis(-3)
AdjustStunned(-3)
diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm
index b975d969cbe..334676870a8 100644
--- a/code/modules/mob/living/carbon/alien/larva/life.dm
+++ b/code/modules/mob/living/carbon/alien/larva/life.dm
@@ -303,7 +303,7 @@
drowsyness--
eye_blurry = max(2, eye_blurry)
if (prob(5))
- sleeping = 1
+ sleeping += 1
Paralyse(5)
confused = max(0, confused - 1)
diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm
index 4106a1b0144..ac1fe5e7276 100644
--- a/code/modules/mob/living/carbon/brain/life.dm
+++ b/code/modules/mob/living/carbon/brain/life.dm
@@ -141,7 +141,7 @@
drowsyness--
eye_blurry = max(2, eye_blurry)
if (prob(5))
- sleeping = 1
+ sleeping += 1
Paralyse(5)
confused = max(0, confused - 1)
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 4ca82ab7435..d61d24d29bf 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -35,7 +35,7 @@
if(prob(src.getBruteLoss() - 50))
src.gib()
-/mob/living/carbon/gib(give_medal,ex_act)
+/mob/living/carbon/gib()
for(var/mob/M in src)
if(M in src.stomach_contents)
src.stomach_contents.Remove(M)
@@ -43,7 +43,7 @@
for(var/mob/N in viewers(src, null))
if(N.client)
N.show_message(text("\red [M] bursts out of [src]!"), 2)
- . = ..(ex_act)
+ . = ..()
/mob/living/carbon/attack_hand(mob/M as mob)
if (M.hand)
@@ -168,9 +168,9 @@
/mob/living/carbon/proc/swap_hand()
var/obj/item/item_in_hand = src.get_active_hand()
if(item_in_hand) //this segment checks if the item in your hand is twohanded.
- if(item_in_hand.twohanded == 1)
- if(item_in_hand.wielded == 1)
- usr << text("Your other hand is too busy holding the []",item_in_hand.name)
+ if(istype(item_in_hand,/obj/item/weapon/twohanded))
+ if(item_in_hand:wielded == 1)
+ usr << "Your other hand is too busy holding the [item_in_hand.name]"
return
src.hand = !( src.hand )
if (!( src.hand ))
@@ -228,10 +228,10 @@
if (istype(src,/mob/living/carbon/human) && src:w_uniform)
var/mob/living/carbon/human/H = src
H.w_uniform.add_fingerprint(M)
- src.sleeping = max(0,src.sleeping-5)
if(!src.sleeping_willingly)
- src.sleeping = 0
- src.resting = 0
+ src.sleeping = max(0,src.sleeping-5)
+ if(src.sleeping == 0)
+ src.resting = 0
AdjustParalysis(-3)
AdjustStunned(-3)
AdjustWeakened(-3)
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index 0eae0dd45d8..fc6980a7891 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -164,7 +164,9 @@
if ("faint")
message = "[src] faints."
- src.sleeping = 1
+ if(src.sleeping)
+ return //Can't faint while asleep
+ src.sleeping += 10 //Short-short nap
m_type = 1
if ("cough")
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 88191e94021..f6a90249965 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -335,7 +335,7 @@
// /obj/item/clothing/head/bomb_hood(src)
/*
if (stat == 2 && client)
- gib(1)
+ gib()
return
else if (stat == 2 && !client)
@@ -350,7 +350,7 @@
if (1.0)
b_loss += 500
if (!prob(getarmor(null, "bomb")))
- gib(1,1)
+ gib()
return
else
var/atom/target = get_edge_target_turf(src, get_dir(src, get_step_away(src, src)))
@@ -555,8 +555,8 @@
return
if (!( W.flags & ONBACK ))
return
- if(W.twohanded && W.wielded)
- usr << "Unwield the [initial(W.name)] first!"
+ if(istype(W,/obj/item/weapon/twohanded) && W:wielded)
+ usr << "Unwield the [initial(W.name)] first!"
return
u_equip(W)
back = W
@@ -1552,7 +1552,6 @@
/obj/effect/equip_e/human/process()
if (item)
item.add_fingerprint(source)
- var/item_loc = 0
if (!item)
switch(place)
if("mask")
@@ -1615,218 +1614,119 @@
//SN src = null
del(src)
return
- else
- switch(place)
- if("mask")
- if(target.wear_mask)
- item_loc = 1
- if("l_hand")
- if(target.l_hand)
- item_loc = 1
- if("r_hand")
- if(target.r_hand)
- item_loc = 1
- if("gloves")
- if(target.gloves)
- item_loc = 1
- if("eyes")
- if(target.glasses)
- item_loc = 1
- if("l_ear")
- if(target.l_ear)
- item_loc = 1
- if("r_ear")
- if(target.r_ear)
- item_loc = 1
- if("head")
- if(target.head)
- item_loc = 1
- if("shoes")
- if(target.shoes)
- item_loc = 1
- if("belt")
- if(target.belt)
- item_loc = 1
- if("suit")
- if(target.wear_suit)
- item_loc = 1
- if("back")
- if(target.back)
- item_loc = 1
- if("uniform")
- if(target.w_uniform)
- item_loc = 1
- if("s_store")
- if(target.s_store)
- item_loc = 1
- if("h_store")
- if(target.h_store)
- item_loc = 1
- if("id")
- if(target.wear_id)
- item_loc = 1
- if("internal")
- if (target.internal)
- item_loc = 1
- if("handcuff")
- if (target.handcuffed)
- item_loc = 1
var/list/L = list( "syringe", "pill", "drink", "dnainjector", "fuel")
- if (item && !L.Find(place) && !item_loc)
+ if ((item && !( L.Find(place) )))
if(isrobot(source) && place != "handcuff")
del(src)
return
for(var/mob/O in viewers(target, null))
O.show_message(text("\red [] is trying to put \a [] on []", source, item, target), 1)
else
- if (place == "syringe")
- for(var/mob/O in viewers(target, null))
- O.show_message(text("\red [] is trying to inject []!", source, target), 1)
- else
- if (place == "pill")
- for(var/mob/O in viewers(target, null))
- O.show_message(text("\red [] is trying to force [] to swallow []!", source, target, item), 1)
- else
- if(place == "fuel")
- for(var/mob/O in viewers(target, null))
- O.show_message(text("\red [source] is trying to force [target] to eat the [item:content]!"), 1)
+ var/message=null
+ switch(place)
+ if("syringe")
+ message = text("\red [] is trying to inject []!", source, target)
+ if("pill")
+ message = text("\red [] is trying to force [] to swallow []!", source, target, item)
+ if("fuel")
+ message = text("\red [source] is trying to force [target] to eat the [item:content]!")
+ if("drink")
+ message = text("\red [] is trying to force [] to swallow a gulp of []!", source, target, item)
+ if("dnainjector")
+ message = text("\red [] is trying to inject [] with the []!", source, target, item)
+ if("mask")
+ if(istype(target.wear_mask, /obj/item/clothing)&&!target.wear_mask:canremove)
+ message = text("\red [] fails to take off \a [] from []'s body!", source, target.wear_mask, target)
else
- if (place == "drink")
+ message = text("\red [] is trying to take off \a [] from []'s head!", source, target.wear_mask, target)
+/* if("headset")
+ message = text("\red [] is trying to take off \a [] from []'s face!", source, target.w_radio, target) */
+ if("l_hand")
+ message = text("\red [] is trying to take off \a [] from []'s left hand!", source, target.l_hand, target)
+ if("r_hand")
+ message = text("\red [] is trying to take off \a [] from []'s right hand!", source, target.r_hand, target)
+ if("gloves")
+ if(istype(target.gloves, /obj/item/clothing)&&!target.gloves:canremove)
+ message = text("\red [] fails to take off \a [] from []'s body!", source, target.gloves, target)
+ else
+ message = text("\red [] is trying to take off the [] from []'s hands!", source, target.gloves, target)
+ if("eyes")
+ if(istype(target.glasses, /obj/item/clothing)&&!target.glasses:canremove)
+ message = text("\red [] fails to take off \a [] from []'s body!", source, target.glasses, target)
+ else
+ message = text("\red [] is trying to take off the [] from []'s eyes!", source, target.glasses, target)
+ if("l_ear")
+ if(istype(target.l_ear, /obj/item/clothing)&&!target.l_ear:canremove)
+ message = text("\red [] fails to take off \a [] from []'s body!", source, target.l_ear, target)
+ else
+ message = text("\red [] is trying to take off the [] from []'s left ear!", source, target.l_ear, target)
+ if("r_ear")
+ if(istype(target.r_ear, /obj/item/clothing)&&!target.r_ear:canremove)
+ message = text("\red [] fails to take off \a [] from []'s body!", source, target.r_ear, target)
+ else
+ message = text("\red [] is trying to take off the [] from []'s right ear!", source, target.r_ear, target)
+ if("head")
+ if(istype(target.head, /obj/item/clothing)&&!target.head:canremove)
+ message = text("\red [] fails to take off \a [] from []'s body!", source, target.head, target)
+ else
+ message = text("\red [] is trying to take off the [] from []'s head!", source, target.head, target)
+ if("shoes")
+ if(istype(target.shoes, /obj/item/clothing)&&!target.shoes:canremove)
+ message = text("\red [] fails to take off \a [] from []'s body!", source, target.shoes, target)
+ else
+ message = text("\red [] is trying to take off the [] from []'s feet!", source, target.shoes, target)
+ if("belt")
+ message = text("\red [] is trying to take off the [] from []'s belt!", source, target.belt, target)
+ if("suit")
+ if(istype(target.wear_suit, /obj/item/clothing)&&!target.wear_suit:canremove)
+ message = text("\red [] fails to take off \a [] from []'s body!", source, target.wear_suit, target)
+ else
+ message = text("\red [] is trying to take off \a [] from []'s body!", source, target.wear_suit, target)
+ if("back")
+ message = text("\red [] is trying to take off \a [] from []'s back!", source, target.back, target)
+ if("handcuff")
+ message = text("\red [] is trying to unhandcuff []!", source, target)
+ if("uniform")
+ if(istype(target.w_uniform, /obj/item/clothing)&&!target.w_uniform:canremove)
+ message = text("\red [] fails to take off \a [] from []'s body!", source, target.w_uniform, target)
+ else
+ message = text("\red [] is trying to take off \a [] from []'s body!", source, target.w_uniform, target)
+ if("s_store")
+ message = text("\red [] is trying to take off \a [] from []'s suit!", source, target.s_store, target)
+ if("h_store")
+ message = text("\red [] is trying to empty []'s hat!", source, target)
+ if("pockets")
+ for(var/obj/item/weapon/mousetrap/MT in list(target.l_store, target.r_store))
+ if(MT.armed)
for(var/mob/O in viewers(target, null))
- O.show_message(text("\red [] is trying to force [] to swallow a gulp of []!", source, target, item), 1)
- else
- if (place == "dnainjector")
- for(var/mob/O in viewers(target, null))
- O.show_message(text("\red [] is trying to inject [] with the []!", source, target, item), 1)
- else
- var/message = null
- switch(place)
- if("mask")
- target.attack_log += text("\[[time_stamp()]\] Has had their mask removed by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) mask")
- if(istype(target.wear_mask, /obj/item/clothing)&&!target.wear_mask:canremove)
- message = text("\red [] fails to take off \a [] from []'s body!", source, target.wear_mask, target)
- else
- message = text("\red [] is trying to take off \a [] from []'s head!", source, target.wear_mask, target)
-/* if("headset")
- message = text("\red [] is trying to take off \a [] from []'s face!", source, target.w_radio, target) */
- if("l_hand")
- target.attack_log += text("\[[time_stamp()]\] Has had their left hand item removed by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) left hand item")
- message = text("\red [] is trying to take off \a [] from []'s left hand!", source, target.l_hand, target)
- if("r_hand")
- target.attack_log += text("\[[time_stamp()]\] Has had their right hand item removed by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) right hand item")
- message = text("\red [] is trying to take off \a [] from []'s right hand!", source, target.r_hand, target)
- if("gloves")
- target.attack_log += text("\[[time_stamp()]\] Has had their gloves removed by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) gloves")
- if(istype(target.gloves, /obj/item/clothing)&&!target.gloves:canremove)
- message = text("\red [] fails to take off \a [] from []'s body!", source, target.gloves, target)
- else
- message = text("\red [] is trying to take off the [] from []'s hands!", source, target.gloves, target)
- if("eyes")
- target.attack_log += text("\[[time_stamp()]\] Has had their eyewear removed by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) eyewear")
- if(istype(target.glasses, /obj/item/clothing)&&!target.glasses:canremove)
- message = text("\red [] fails to take off \a [] from []'s body!", source, target.glasses, target)
- else
- message = text("\red [] is trying to take off the [] from []'s eyes!", source, target.glasses, target)
- if("l_ear")
- target.attack_log += text("\[[time_stamp()]\] Has had their left ear item removed by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) left ear item")
- if(istype(target.l_ear, /obj/item/clothing)&&!target.l_ear:canremove)
- message = text("\red [] fails to take off \a [] from []'s body!", source, target.l_ear, target)
- else
- message = text("\red [] is trying to take off the [] from []'s left ear!", source, target.l_ear, target)
- if("r_ear")
- target.attack_log += text("\[[time_stamp()]\] Has had their right ear item removed by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) right ear item")
- if(istype(target.r_ear, /obj/item/clothing)&&!target.r_ear:canremove)
- message = text("\red [] fails to take off \a [] from []'s body!", source, target.r_ear, target)
- else
- message = text("\red [] is trying to take off the [] from []'s right ear!", source, target.r_ear, target)
- if("head")
- target.attack_log += text("\[[time_stamp()]\] Has had their hat removed by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) hat")
- if(istype(target.head, /obj/item/clothing)&&!target.head:canremove)
- message = text("\red [] fails to take off \a [] from []'s body!", source, target.head, target)
- else
- message = text("\red [] is trying to take off the [] from []'s head!", source, target.head, target)
- if("shoes")
- target.attack_log += text("\[[time_stamp()]\] Has had their shoes removed by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) shoes")
- if(istype(target.shoes, /obj/item/clothing)&&!target.shoes:canremove)
- message = text("\red [] fails to take off \a [] from []'s body!", source, target.shoes, target)
- else
- message = text("\red [] is trying to take off the [] from []'s feet!", source, target.shoes, target)
- if("belt")
- target.attack_log += text("\[[time_stamp()]\] Has had their belt item removed by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) belt item")
- message = text("\red [] is trying to take off the [] from []'s belt!", source, target.belt, target)
- if("suit")
- target.attack_log += text("\[[time_stamp()]\] Has had their suit removed by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) suit")
- if(istype(target.wear_suit, /obj/item/clothing)&&!target.wear_suit:canremove)
- message = text("\red [] fails to take off \a [] from []'s body!", source, target.wear_suit, target)
- else
- message = text("\red [] is trying to take off \a [] from []'s body!", source, target.wear_suit, target)
- if("back")
- target.attack_log += text("\[[time_stamp()]\] Has had their back item removed by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) back item")
- message = text("\red [] is trying to take off \a [] from []'s back!", source, target.back, target)
- if("handcuff")
- message = text("\red [] is trying to unhandcuff []!", source, target)
- if("uniform")
- target.attack_log += text("\[[time_stamp()]\] Has had their uniform removed by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) uniform")
- if(istype(target.w_uniform, /obj/item/clothing)&&!target.w_uniform:canremove)
- message = text("\red [] fails to take off \a [] from []'s body!", source, target.w_uniform, target)
- else
- message = text("\red [] is trying to take off \a [] from []'s body!", source, target.w_uniform, target)
- if("s_store")
- message = text("\red [] is trying to take off \a [] from []'s suit!", source, target.s_store, target)
- if("h_store")
- message = text("\red [] is trying to empty []'s hat!", source, target)
- if("pockets")
- target.attack_log += text("\[[time_stamp()]\] Has had their pockets emptied by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to empty [target.name]'s ([target.ckey]) pockets")
- for(var/obj/item/weapon/mousetrap/MT in list(target.l_store, target.r_store))
- if(MT.armed)
- for(var/mob/O in viewers(target, null))
- if(O == source)
- O.show_message(text("\red You reach into the [target]'s pockets, but there was a live mousetrap in there!"), 1)
- else
- O.show_message(text("\red [source] reaches into [target]'s pockets and sets off a hidden mousetrap!"), 1)
- target.u_equip(MT)
- if (target.client)
- target.client.screen -= MT
- MT.loc = source.loc
- MT.triggered(source, source.hand ? "l_hand" : "r_hand")
- MT.layer = OBJ_LAYER
- return
- message = text("\red [] is trying to empty []'s pockets!!", source, target)
- if("CPR")
- if (target.cpr_time + 3 >= world.time)
- //SN src = null
- del(src)
- return
- message = text("\red [] is trying perform CPR on []!", source, target)
- if("id")
- target.attack_log += text("\[[time_stamp()]\] Has had their ID removed by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) ID")
- message = text("\red [] is trying to take off [] from []'s uniform!", source, target.wear_id, target)
- if("internal")
- target.attack_log += text("\[[time_stamp()]\] Has had their internals toggled by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to toggle [target.name]'s ([target.ckey]) internals")
- if (target.internal)
- message = text("\red [] is trying to remove []'s internals", source, target)
- else
- message = text("\red [] is trying to set on []'s internals.", source, target)
- else
- for(var/mob/M in viewers(target, null))
- M.show_message(message, 1)
+ if(O == source)
+ O.show_message(text("\red You reach into the [target]'s pockets, but there was a live mousetrap in there!"), 1)
+ else
+ O.show_message(text("\red [source] reaches into [target]'s pockets and sets off a hidden mousetrap!"), 1)
+ target.u_equip(MT)
+ if (target.client)
+ target.client.screen -= MT
+ MT.loc = source.loc
+ MT.triggered(source, source.hand ? "l_hand" : "r_hand")
+ MT.layer = OBJ_LAYER
+ return
+ message = text("\red [] is trying to empty []'s pockets!!", source, target)
+ if("CPR")
+ if (target.cpr_time >= world.time + 3)
+ //SN src = null
+ del(src)
+ return
+ message = text("\red [] is trying perform CPR on []!", source, target)
+ if("id")
+ message = text("\red [] is trying to take off [] from []'s uniform!", source, target.wear_id, target)
+ if("internal")
+ if (target.internal)
+ message = text("\red [] is trying to remove []'s internals", source, target)
+ else
+ message = text("\red [] is trying to set on []'s internals.", source, target)
+ for(var/mob/M in viewers(target, null))
+ M.show_message(message, 1)
spawn( 40 )
done()
return
@@ -1846,7 +1746,7 @@ It can still be worn/put on as normal.
if(source.loc != s_loc) return
if(target.loc != t_loc) return
if(LinkBlocked(s_loc,t_loc)) return
- if(item && source.equipped() != item) return
+ if(item && source.equipped() != item) return
if ((source.restrained() || source.stat)) return
switch(place)
if("mask")
@@ -2856,4 +2756,4 @@ It can still be worn/put on as normal.
else
reset_view(0)
remoteobserve = null
- src.tkdisable = 0
+ src.tkdisable = 0
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 317e9824c8e..4d4b9e923c0 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -545,7 +545,7 @@
if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit
Paralyse(3) // 3 gives them one second to wake up and run away a bit!
if(SA_pp > SA_sleep_min) // Enough to make us sleep as well
- sleeping = max(sleeping, 4)
+ sleeping = max(src.sleeping+2, 10)
else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
if(prob(20) && isbreathing)
spawn(0) emote(pick("giggle", "laugh"))
@@ -819,7 +819,7 @@
drowsyness--
eye_blurry = max(2, eye_blurry)
if (prob(5))
- sleeping = 1
+ sleeping += 1
Paralyse(5)
confused = max(0, confused - 1)
diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm
index ab616822cee..64bad12d893 100644
--- a/code/modules/mob/living/carbon/monkey/life.dm
+++ b/code/modules/mob/living/carbon/monkey/life.dm
@@ -333,7 +333,7 @@
if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit
Paralyse(3) // 3 gives them one second to wake up and run away a bit!
if(SA_pp > SA_sleep_min) // Enough to make us sleep as well
- src.sleeping = max(src.sleeping, 2)
+ src.sleeping = max(src.sleeping+2, 10)
else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
if(prob(20))
spawn(0) emote(pick("giggle", "laugh"))
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index c3356f4d644..a39ff6a39d0 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -677,6 +677,14 @@
/mob/living/carbon/monkey/ex_act(severity)
flick("flash", flash)
+/* if (stat == 2 && client)
+ gib()
+ return
+
+ if (stat == 2 && !client)
+ gibs(loc, viruses)
+ del(src)
+ return*/
switch(severity)
if(1.0)
if (stat != 2)
diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm
index 593a65f7686..32aa0cc312d 100644
--- a/code/modules/mob/living/silicon/pai/recruit.dm
+++ b/code/modules/mob/living/silicon/pai/recruit.dm
@@ -11,6 +11,8 @@ var/datum/paiController/paiController // Global handler for pAI candidates
comments
ready = 0
+
+
/datum/paiController
var/list/pai_candidates = list()
var/list/asked = list()
@@ -42,20 +44,39 @@ var/datum/paiController/paiController // Global handler for pAI candidates
if(href_list["new"])
var/datum/paiCandidate/candidate = locate(href_list["candidate"])
var/option = href_list["option"]
+ var/t = ""
+ var/maxNameLen = 26
+
switch(option)
if("name")
- candidate.name = input("Enter a name for your pAI", "pAI Name", candidate.name) as text
+ t = input("Enter a name for your pAI", "pAI Name", candidate.name) as text
+ if(t)
+ candidate.name = copytext(sanitize(t),1,maxNameLen)
if("desc")
- candidate.description = input("Enter a description for your pAI", "pAI Description", candidate.description) as message
+ t = input("Enter a description for your pAI", "pAI Description", candidate.description) as message
+ if(t)
+ candidate.description = copytext(sanitize(t),1,MAX_MESSAGE_LEN)
if("role")
- candidate.role = input("Enter a role for your pAI", "pAI Role", candidate.role) as text
+ t = input("Enter a role for your pAI", "pAI Role", candidate.role) as text
+ if(t)
+ candidate.role = copytext(sanitize(t),1,MAX_MESSAGE_LEN)
if("ooc")
- candidate.comments = input("Enter any OOC comments", "pAI OOC Comments", candidate.comments) as message
-
+ t = input("Enter any OOC comments", "pAI OOC Comments", candidate.comments) as message
+ if(t)
+ candidate.comments = copytext(sanitize(t),1,MAX_MESSAGE_LEN)
if("save")
candidate.savefile_save(usr)
if("load")
candidate.savefile_load(usr)
+ //In case people have saved unsanitized stuff.
+ if(candidate.name)
+ candidate.name = copytext(sanitize(candidate.name),1,maxNameLen)
+ if(candidate.description)
+ candidate.description = copytext(sanitize(candidate.description),1,MAX_MESSAGE_LEN)
+ if(candidate.role)
+ candidate.role = copytext(sanitize(candidate.role),1,MAX_MESSAGE_LEN)
+ if(candidate.comments)
+ candidate.comments = copytext(sanitize(candidate.comments),1,MAX_MESSAGE_LEN)
if("submit")
if(candidate)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index f3355dba7f7..346a318d3e2 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -191,28 +191,16 @@
var/obj/item/W = equipped()
if (W)
- if(W.twohanded)
- if(W.wielded)
- if(hand)
- var/obj/item/weapon/offhand/O = r_hand
- del O
- else
- var/obj/item/weapon/offhand/O = l_hand
- del O
- W.wielded = 0 //Kinda crude, but gets the job done with minimal pain -Agouri
- W.name = "[initial(W.name)]" //name reset so people don't see world fireaxes with (unwielded) or (wielded) tags
- W.update_icon()
u_equip(W)
if (client)
client.screen -= W
if (W)
+ W.layer = initial(W.layer)
if(target)
W.loc = target.loc
else
W.loc = loc
W.dropped(src)
- if (W)
- W.layer = initial(W.layer)
var/turf/T = get_turf(loc)
if (istype(T))
T.Entered(W)
@@ -235,7 +223,7 @@
return r_hand
/mob/proc/get_inactive_hand()
- if ( ! hand)
+ if (!hand)
return l_hand
else
return r_hand
@@ -754,7 +742,7 @@
set category = "IC"
set src in oview(1)
- if (!( usr ))
+ if ( !usr || usr==src || !istype(src.loc,/turf) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort!
return
if (!( anchored ))
usr.pulling = src
@@ -852,9 +840,9 @@
for(var/mob/M in viewers())
M.see(message)
-//This is the proc for gibbing a mob. Cannot gib ghosts. Removed the medal reference,
+//This is the proc for gibbing a mob. Cannot gib ghosts.
//added different sort of gibs and animations. N
-/mob/proc/gib(var/ex_act = 0)
+/mob/proc/gib()
if (istype(src, /mob/dead/observer))
gibs(loc, viruses)
@@ -913,10 +901,6 @@ Currently doesn't work, but should be useful later or at least as a template
else
gibs(loc, viruses, dna)
sleep(15)
- for(var/obj/item/I in contents)
- I.loc = get_turf(src)
- if(ex_act)
- I.ex_act(ex_act)
del(src)
/*
@@ -1038,8 +1022,8 @@ note dizziness decrements automatically in the mob's Life() proc.
stat(null, "([x], [y], [z])")
stat(null, "CPU: [world.cpu]")
stat(null, "Controller: [controllernum]")
- //if (master_controller)
- // stat(null, "Loop: [master_controller.loop_freq]")
+ if (master_controller)
+ stat(null, "Current Iteration: [controller_iteration]")
if (spell_list.len)
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index cbbb5505e8d..dc3f193c4de 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -3,6 +3,8 @@
datum/preferences/preferences = null
ready = 0
spawning = 0//Referenced when you want to delete the new_player later on in the code.
+ totalPlayers = 0 //Player counts for the Lobby tab
+ totalPlayersReady = 0
invisibility = 101
@@ -157,8 +159,8 @@
Stat()
..()
- statpanel("Game")
- if(client.statpanel=="Game" && ticker)
+ statpanel("Lobby")
+ if(client.statpanel=="Lobby" && ticker)
if(ticker.hide_mode)
stat("Game Mode:", "Secret")
else
@@ -168,14 +170,15 @@
stat("Time To Start:", ticker.pregame_timeleft)
if((ticker.current_state == GAME_STATE_PREGAME) && !going)
stat("Time To Start:", "DELAYED")
- if((ticker.current_state == GAME_STATE_PLAYING) && going)
- stat("Round Duration:", "[round(world.time / 36000)]:[(((world.time / 600 % 60)/10) > 1 ? world.time / 600 % 60 : add_zero(world.time / 600 % 60, 2))]:[world.time / 100 % 6][world.time / 100 % 10]")
- statpanel("Lobby")
- if(client.statpanel=="Lobby" && ticker)
if(ticker.current_state == GAME_STATE_PREGAME)
+ stat("Players: [totalPlayers]", "Players Ready: [totalPlayersReady]")
+ totalPlayers = 0
+ totalPlayersReady = 0
for(var/mob/new_player/player in world)
stat("[player.key]", (player.ready)?("(Playing)"):(null))
+ totalPlayers++
+ if(player.ready)totalPlayersReady++
Topic(href, href_list[])
if(!client) return 0
@@ -185,7 +188,6 @@
return 1
if(href_list["ready"])
-
if(!ready)
ready = 1
else
@@ -249,6 +251,9 @@
else if(!href_list["late_join"])
new_player_panel()
+ if(href_list["priv_msg"])
+ ..() //pass PM calls along to /mob/Topic
+ return
proc/IsJobAvailable(rank)
var/datum/job/job = job_master.GetJob(rank)
@@ -362,13 +367,27 @@
proc/LateChoices()
- var/dat = ""
+ var/mills = world.time // 1/10 of a second, not real milliseconds but whatever
+ //var/secs = ((mills % 36000) % 600) / 10 //Not really needed, but I'll leave it here for refrence.. or something
+ var/mins = (mills % 36000) / 600
+ var/hours = mills / 36000
+
+ var/dat = ""
+ dat += "Round Duration: [round(hours)]h [round(mins)]m
"
+
+ if(emergency_shuttle) //In case Nanotrasen decides reposess CentComm's shuttles.
+ if(emergency_shuttle.direction == 2) //Shuttle is going to centcomm, not recalled
+ dat += "The station has been evacuated.
"
+ if(emergency_shuttle.direction == 1 && emergency_shuttle.timeleft() < 300) //Shuttle is past the point of no recall
+ dat += "The station is currently undergoing evacuation procedures.
"
+
dat += "Choose from the following open positions:
"
for(var/datum/job/job in job_master.occupations)
if(job && IsJobAvailable(job.title))
dat += "[job.title]
"
- src << browse(dat, "window=latechoices;size=300x640;can_close=0")
+ dat += ""
+ src << browse(dat, "window=latechoices;size=300x640;can_close=1")
proc/create_character()
@@ -387,7 +406,6 @@
src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS cant last forever yo
-
new_character.dna.ready_dna(new_character)
preferences.copydisabilities(new_character)
if(mind)
diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm
index f036910eef8..f8e9fb94320 100644
--- a/code/modules/mob/say.dm
+++ b/code/modules/mob/say.dm
@@ -52,6 +52,8 @@
return 0
/mob/proc/say_quote(var/text)
+ if(!text)
+ return "says, \"...\""; //not the best solution, but it will stop a large number of runtimes. The cause is somewhere in the Tcomms code
var/ending = copytext(text, length(text))
if (src.disease_symptoms & DISEASE_HOARSE)
return "rasps, \"[text]\"";
@@ -63,7 +65,7 @@
return "gibbers, \"[text]\"";
if (ending == "?")
return "asks, \"[text]\"";
- else if (ending == "!")
+ if (ending == "!")
return "exclaims, \"[text]\"";
return "says, \"[text]\"";
diff --git a/code/modules/mob/screen.dm b/code/modules/mob/screen.dm
index 07343b0c6c8..4cc9c33b0a5 100644
--- a/code/modules/mob/screen.dm
+++ b/code/modules/mob/screen.dm
@@ -439,13 +439,13 @@
usr.pulling = null
if("sleep")
if(usr.sleeping && usr.sleeping_willingly)
- usr.sleeping = 0
- usr.sleeping_willingly = 0
+ return
else if(!usr.sleeping)
- usr.sleeping = 1
+ usr.sleeping = 20 //Short nap
usr.sleeping_willingly = 1
if("rest")
- usr.resting = !usr.resting
+ usr.resting = !( usr.resting )
+ //kavala2
if("throw")
if (!usr.stat && isturf(usr.loc) && !usr.restrained())
usr:toggle_throw_mode()
diff --git a/code/modules/power/antimatter/fuel.dm b/code/modules/power/antimatter/fuel.dm
index 2d6b279812b..71b22d32647 100644
--- a/code/modules/power/antimatter/fuel.dm
+++ b/code/modules/power/antimatter/fuel.dm
@@ -75,7 +75,7 @@
/obj/item/weapon/fuel/proc/injest(mob/M as mob)
switch(content)
if("Anti-Hydrogen")
- M.gib(1)
+ M.gib()
if("Hydrogen")
M << "\blue You feel very light, as if you might just float away..."
del(src)
diff --git a/html/changelog.html b/html/changelog.html
index bff322db998..35800485187 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -47,6 +47,35 @@ Stuff which is in development and not yet visible to players or just code relate
should be listed in the changelog upon commit though. Thanks. -->
+
+
03 May 2012
+
TG updated:
+
+ - CONTRABAND-CON UPDATE: Added posters.
+ - POSTERS! Posters come in rolled packages that can adhere to any wall or r_wall, if it's uncluttered enough.
+
?How they get on-board: The quartermaster can now set the receiver frequency of his supplycomp circuit board. A bit simplistic as of now, will work on it later. Building a supplycomp with a properly set up circuitboard will give access to the Contraband crate.
+
?How they're used: Unfold the rolled poster on any wall or r_wall to create the poster. There are currently 17 designs, with the possibility of me adding more.
+
?How to get rid of them: You can rip them using your hand... To cleanly extract them and not ruin them for future use, however, you can use a pair of wirecutters.
+
?How they're classified: They're contraband, so it's perfectly okay for security officers to confiscate them. Punishment for contraband-providers (or end-users, if you want to go full nazi) is up to the situational commanding officers.
+ - Merged 'Game' and 'Lobby' tabs during pre-game into one tab
+ - Added the little red x to the late-join job list
+ - Late-joiners are warned if the shuttle is past the point of recall, and if the shuttle has already left the station
+ - Late-joiners now see how long the round has been going on.
+ - Droppers are now used at the eyes, and thus, access to the eyes is required to have an effect.
+ - Mining shuttle computer no longer spits out both 'Shuttle has been sent' and 'The shuttle is already moving' every time.
+ - Adds a borg upgrade that increases their speed. Requires gold.
+ - Fixes autolathes not doing anything.
+ - Changed Chief Engineers Office door name. Stop breaking in!
+ - Added new airlocks to mining dock, research, and atmospherics.
+ - RCDs are disabled if they are used on the escape shuttle or hyperspace around it.
+ - EMPs will now cause flashes to flash their holder.
+ - Heads now get a silver ID!
+ - Blenders can now be filled directly from plant bags. Chefs rejoice.
+ - The biogenerator is now more robust. It can dispense fertilizer in batches, and make simple leather items at a high cost. Added more wood items for tower cap wood construction: Wooden doors and sandals. Added plump helmet biscuits and mushroom soup to kitchen recipes.
+ - Watermelon and pumpkin biomass lowered a bit so biomass isn't totally trivial to acquire.
+
+
+
2nd May 2012
TG updated:
diff --git a/icons/mob/items_lefthand.dmi b/icons/mob/items_lefthand.dmi
index c6dc652a5c6..6752e147da9 100644
Binary files a/icons/mob/items_lefthand.dmi and b/icons/mob/items_lefthand.dmi differ
diff --git a/icons/mob/items_righthand.dmi b/icons/mob/items_righthand.dmi
index b1a1f0b1b60..56e46393124 100644
Binary files a/icons/mob/items_righthand.dmi and b/icons/mob/items_righthand.dmi differ
diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi
index 7435036350c..8660aeb3414 100644
Binary files a/icons/obj/card.dmi and b/icons/obj/card.dmi differ
diff --git a/icons/obj/cult.dmi b/icons/obj/cult.dmi
new file mode 100644
index 00000000000..7d73fe97be3
Binary files /dev/null and b/icons/obj/cult.dmi differ
diff --git a/icons/obj/doors/mineral_doors.dmi b/icons/obj/doors/mineral_doors.dmi
index e1b4f9e7509..81c3b0e2e25 100644
Binary files a/icons/obj/doors/mineral_doors.dmi and b/icons/obj/doors/mineral_doors.dmi differ
diff --git a/maps/tgstation.2.0.8.dmm b/maps/tgstation.2.0.8.dmm
index cf212585b3a..0185e6c3bb2 100755
--- a/maps/tgstation.2.0.8.dmm
+++ b/maps/tgstation.2.0.8.dmm
@@ -2301,7 +2301,7 @@
"aSm" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor{icon_state = "wood"},/area/library)
"aSn" = (/obj/machinery/atmospherics/pipe/simple{color = "blue"; dir = 5; icon_state = "intact-b-f"; level = 1; name = "pipe"},/turf/simulated/wall,/area/hydroponics)
"aSo" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/atmospherics/pipe/simple{color = "blue"; dir = 4; icon_state = "intact-b-f"; level = 1; name = "pipe"},/obj/machinery/atmospherics/pipe/simple{color = "red"; icon_state = "intact-r-f"; level = 1; name = "pipe"},/turf/simulated/floor{icon_state = "dark"},/area/hydroponics)
-"aSp" = (/obj/machinery/atmospherics/pipe/simple{color = "blue"; dir = 4; icon_state = "intact-b-f"; level = 1; name = "pipe"},/obj/item/weapon/reagent_containers/glass/watercan,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics)
+"aSp" = (/obj/machinery/atmospherics/pipe/simple{color = "blue"; dir = 4; icon_state = "intact-b-f"; level = 1; name = "pipe"},/obj/item/weapon/reagent_containers/glass/bucket/wateringcan,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics)
"aSq" = (/obj/machinery/atmospherics/pipe/simple{color = "blue"; dir = 4; icon_state = "intact-b-f"; level = 1; name = "pipe"},/obj/machinery/atmospherics/pipe/simple{color = "red"; icon_state = "intact-r-f"; level = 1; name = "pipe"},/turf/simulated/floor{icon_state = "green"; dir = 8},/area/hydroponics)
"aSr" = (/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "green"; dir = 4},/area/hydroponics)
"aSs" = (/obj/structure/disposalpipe/segment,/obj/structure/reagent_dispensers/watertank,/obj/machinery/atmospherics/pipe/simple{color = "blue"; dir = 4; icon_state = "intact-b-f"; level = 1; name = "pipe"},/obj/machinery/camera{c_tag = "Hydroponics South"; dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/hydroponics)
@@ -2724,8 +2724,8 @@
"bat" = (/obj/structure/table/reinforced,/obj/structure/disposalpipe/segment{dir = 1},/obj/machinery/door/window/northleft{name = "Reception Window"; req_access = null; req_access_txt = "0"},/obj/machinery/door/window/southleft{name = "Research and Development"; req_access_txt = "7"},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
"bau" = (/obj/structure/table/reinforced,/obj/machinery/door/window/northright{name = "Reception Window"; req_access_txt = "0"},/obj/machinery/door/window/southright{name = "Research and Development"; req_access_txt = "7"},/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
"bav" = (/turf/simulated/wall/r_wall,/area/medical/research{name = "Research Division"})
-"baw" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/machinery/door/airlock/medical{name = "Research Division Access"; req_access_txt = "47"; req_one_access_txt = "1"},/turf/simulated/floor,/area/medical/research{name = "Research Division"})
-"bax" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/medical{name = "Research Division Access"; req_access_txt = "47"; req_one_access_txt = "1"},/turf/simulated/floor,/area/medical/research{name = "Research Division"})
+"baw" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/machinery/door/airlock/research{name = "Research Division Access"; req_access_txt = "47"; req_one_access_txt = "1"},/turf/simulated/floor,/area/medical/research{name = "Research Division"})
+"bax" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Research Division Access"; req_access_txt = "47"; req_one_access_txt = "1"},/turf/simulated/floor,/area/medical/research{name = "Research Division"})
"bay" = (/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"baz" = (/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/shuttle/escape/station)
"baA" = (/obj/machinery/camera{c_tag = "Auxiliary Docking"; dir = 8; network = "Arrivals"},/turf/simulated/floor,/area/hallway/secondary/entry)
@@ -2799,7 +2799,7 @@
"bbQ" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/turf/simulated/wall/r_wall,/area/medical/chemistry)
"bbR" = (/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
"bbS" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
-"bbT" = (/obj/machinery/camera{c_tag = "RnD Lab North"; dir = 2; network = "Research"},/obj/machinery/power/apc{dir = 1; name = "Lab APC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
+"bbT" = (/obj/machinery/camera{c_tag = "RnD Lab North"; dir = 2; network = "Research"},/obj/machinery/power/apc{dir = 1; name = "Research Lab APC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
"bbU" = (/obj/structure/disposalpipe/segment{dir = 1},/obj/structure/stool/bed/chair{dir = 1},/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
"bbV" = (/obj/machinery/requests_console{department = "Research and Development"; departmentType = 2; name = "rnd Requests Console"; pixel_x = 30; pixel_y = 0},/obj/structure/table,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
"bbW" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/medical/research{name = "Research Division"})
@@ -3042,8 +3042,8 @@
"bgz" = (/obj/structure/disposalpipe/segment{dir = 1},/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
"bgA" = (/obj/item/weapon/stock_parts/console_screen,/obj/structure/table,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/matter_bin,/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
"bgB" = (/obj/effect/sign/biohazard,/turf/simulated/wall/r_wall,/area/medical/research{name = "Research Division"})
-"bgC" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/medical{name = "Research Division Access"; req_access_txt = "47"; req_one_access_txt = "1"},/turf/simulated/floor,/area/medical/research{name = "Research Division"})
-"bgD" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/airlock/medical{name = "Research Division Access"; req_access_txt = "47"; req_one_access_txt = "1"},/turf/simulated/floor,/area/medical/research{name = "Research Division"})
+"bgC" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/research{name = "Research Division Access"; req_access_txt = "47"; req_one_access_txt = "1"},/turf/simulated/floor,/area/medical/research{name = "Research Division"})
+"bgD" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/airlock/research{name = "Research Division Access"; req_access_txt = "47"; req_one_access_txt = "1"},/turf/simulated/floor,/area/medical/research{name = "Research Division"})
"bgE" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"bgF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
"bgG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/effect/sign/securearea{name = "EXTERNAL AIRLOCK"; desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; pixel_x = -1},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
@@ -3520,7 +3520,7 @@
"bpJ" = (/obj/structure/disposalpipe/segment{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bpK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/machinery/atmospherics/pipe/manifold{color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bpL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/toxins/gasstorage)
-"bpM" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/power/apc{dir = 8; name = "Storage APC"; pixel_x = -25},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor,/area/toxins/gasstorage)
+"bpM" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/power/apc{dir = 8; name = "Gas Storage APC"; pixel_x = -25},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor,/area/toxins/gasstorage)
"bpN" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 1},/turf/simulated/floor,/area/toxins/gasstorage)
"bpO" = (/turf/simulated/floor,/area/toxins/gasstorage)
"bpP" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/gasstorage)
@@ -3592,7 +3592,7 @@
"brd" = (/obj/structure/window/reinforced,/mob/living/carbon/monkey,/turf/simulated/floor{icon_state = "white"},/area/medical/genetics)
"bre" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/disposalpipe/segment{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"brf" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
-"brg" = (/obj/structure/cable{tag = "Streight"; icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/medical{name = "Gas Storage"; req_access_txt = "8"},/turf/simulated/floor,/area/toxins/gasstorage)
+"brg" = (/obj/structure/cable{tag = "Streight"; icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Gas Storage"; req_access_txt = "8"},/turf/simulated/floor,/area/toxins/gasstorage)
"brh" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/toxins/gasstorage)
"bri" = (/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/toxins/gasstorage)
"brj" = (/obj/item/weapon/cigbutt,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/toxins/gasstorage)
@@ -3707,7 +3707,7 @@
"bto" = (/obj/structure/disposalpipe/segment{dir = 1},/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"btp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"btq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/wall/r_wall,/area/toxins/gasstorage)
-"btr" = (/obj/machinery/door/airlock/medical{name = "Toxins Research"; req_access_txt = "7; 8"},/turf/simulated/floor,/area/toxins/gasstorage)
+"btr" = (/obj/machinery/door/airlock/research{name = "Gas Storage"; req_access_txt = "8"},/turf/simulated/floor,/area/toxins/gasstorage)
"bts" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"btt" = (/turf/simulated/wall,/area/toxins/mixing)
"btu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/plating,/area/toxins/mixing)
@@ -3989,7 +3989,7 @@
"byK" = (/turf/simulated/floor{icon_state = "white"},/area/toxins/toxinslab)
"byL" = (/obj/structure/table,/obj/effect/sign/securearea{desc = "A warning sign which reads 'NO SMOKING'"; icon_state = "nosmoking2"; name = "NO SMOKING"; pixel_x = 29; pixel_y = 1},/obj/machinery/firealarm,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/toxinslab)
"byM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor,/area/maintenance/asmaint2)
-"byN" = (/obj/machinery/camera{c_tag = "Toxins Lab East"; dir = 4; network = "SS13"},/obj/machinery/power/apc{dir = 8; name = "Toxins Lab Mix Chambers APC"; pixel_x = -25; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor,/area/toxins/mixing)
+"byN" = (/obj/machinery/camera{c_tag = "Toxins Lab East"; dir = 4; network = "SS13"},/obj/machinery/power/apc{dir = 8; name = "Toxins Lab Mixing Room APC"; pixel_x = -25; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor,/area/toxins/mixing)
"byO" = (/obj/machinery/atmospherics/unary/vent_pump,/turf/simulated/floor,/area/toxins/mixing)
"byP" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor,/area/toxins/mixing)
"byQ" = (/obj/machinery/atmospherics/pipe/simple/general/visible{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/meter,/turf/simulated/floor,/area/toxins/mixing)
@@ -4007,7 +4007,7 @@
"bzc" = (/obj/effect/landmark/start{name = "Shaft Miner"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/turf/simulated/floor,/area/quartermaster/miningdock)
"bzd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/turf/simulated/floor,/area/quartermaster/miningdock)
"bze" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/turf/simulated/floor,/area/quartermaster/miningdock)
-"bzf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/obj/machinery/door/firedoor/border_only{dir = 4},/obj/machinery/door/airlock/maintenance{name = "Mining Department"; req_access_txt = "48"},/turf/simulated/floor,/area/quartermaster/miningdock)
+"bzf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/obj/machinery/door/firedoor/border_only{dir = 4},/obj/machinery/door/airlock/mining{name = "Mining Dock"; req_access_txt = "48"},/turf/simulated/floor,/area/quartermaster/miningdock)
"bzg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor{dir = 8; icon_state = "brown"},/area/quartermaster/miningdock)
"bzh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{dir = 8; icon_state = "brown"},/area/quartermaster/miningdock)
"bzi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/obj/machinery/camera{c_tag = "Mining Dock Entrance"; dir = 2; network = "Cargo"},/obj/machinery/light{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 8; icon_state = "brown"},/area/quartermaster/miningdock)
@@ -4061,7 +4061,7 @@
"bAe" = (/obj/machinery/atmospherics/pipe/manifold{color = "red"; icon_state = "manifold-r-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "white"},/area/toxins/toxinslab)
"bAf" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Toxins Lab"; req_access_txt = "7"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area/toxins/toxinslab)
"bAg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area/maintenance/asmaint2)
-"bAh" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Toxins Lab"; req_access_txt = "7"},/obj/structure/cable{d2 = 2; icon_state = "4-8"; pixel_y = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area/toxins/mixing)
+"bAh" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Toxins Lab Mixing Room"; req_access_txt = "7"},/obj/structure/cable{d2 = 2; icon_state = "4-8"; pixel_y = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area/toxins/mixing)
"bAi" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/obj/machinery/atmospherics/pipe/manifold{color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor,/area/toxins/mixing)
"bAj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor,/area/toxins/mixing)
"bAk" = (/turf/simulated/floor,/area/toxins/mixing)
@@ -4136,7 +4136,7 @@
"bBB" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/toxinslab)
"bBC" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Toxins Lab"; req_access_txt = "7"},/obj/structure/cable{d2 = 2; icon_state = "4-8"; pixel_y = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/toxins/toxinslab)
"bBD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "2-8"; pixel_y = 0; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/maintenance/asmaint2)
-"bBE" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Toxins Lab"; req_access_txt = "7"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/toxins/mixing)
+"bBE" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Toxins Lab Mixing Room"; req_access_txt = "7"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/toxins/mixing)
"bBF" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/toxins/mixing)
"bBG" = (/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 4; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor,/area/toxins/mixing)
"bBH" = (/obj/machinery/atmospherics/binary/pump{dir = 8; icon_state = "intact_off"; on = 1},/turf/simulated/floor,/area/toxins/mixing)
@@ -4249,7 +4249,7 @@
"bDK" = (/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 8; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/wall/r_wall,/area/atmos)
"bDL" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/atmos)
"bDM" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 1},/turf/simulated/wall/r_wall,/area/atmos)
-"bDN" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; name = "Airlock Window Shield"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance"; req_access_txt = "12;24"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/atmos)
+"bDN" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; name = "Airlock Window Shield"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/airlock/atmos{name = "Atmospherics Maintenance"; req_access_txt = "12;24"},/turf/simulated/floor,/area/atmos)
"bDO" = (/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 4; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/wall/r_wall,/area/atmos)
"bDP" = (/obj/machinery/atmospherics/pipe/simple{color = "red"; icon_state = "intact-r"; level = 2},/turf/simulated/wall/r_wall,/area/atmos)
"bDQ" = (/turf/simulated/wall/r_wall,/area/atmos)
@@ -4282,7 +4282,7 @@
"bEr" = (/obj/structure/disposalpipe/segment{dir = 1},/turf/simulated/wall/r_wall,/area/maintenance/asmaint2)
"bEs" = (/turf/simulated/wall/r_wall,/area/maintenance/asmaint2)
"bEt" = (/turf/simulated/wall/r_wall,/area/toxins/observatory)
-"bEu" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Toxins Observatory"; req_access_txt = "7"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/toxins/observatory)
+"bEu" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Toxins Lab Observatory"; req_access_txt = "7"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/toxins/observatory)
"bEv" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/toxins/observatory)
"bEw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/toxins/observatory)
"bEx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor/plating,/area/toxins/observatory)
@@ -4412,7 +4412,7 @@
"bGR" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/manifold{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bGS" = (/obj/machinery/atmospherics/pipe/simple{dir = 10},/obj/structure/window/reinforced{dir = 1},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bGT" = (/turf/simulated/wall/r_wall,/area/toxins/server)
-"bGU" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/disposalpipe/segment{dir = 1},/obj/machinery/power/apc{dir = 8; name = "Lab Hallway APC"; pixel_x = -25},/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 8; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
+"bGU" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/disposalpipe/segment{dir = 1},/obj/machinery/power/apc{dir = 8; name = "Research Division APC"; pixel_x = -25},/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 8; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bGV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bGW" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/toxins/xenobiology)
"bGX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/closet/secure_closet/scientist,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology)
@@ -4443,7 +4443,7 @@
"bHw" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor,/area/hallway/primary/aft)
"bHx" = (/obj/machinery/camera{c_tag = "Aft Primary Hallway 2"; dir = 8; network = "SS13"},/turf/simulated/floor,/area/hallway/primary/aft)
"bHy" = (/obj/machinery/dispenser{pltanks = 0},/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor,/area/atmos)
-"bHz" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; name = "Airlock Window Shield"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance"; req_access_txt = "12;24"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor,/area/atmos)
+"bHz" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; name = "Airlock Window Shield"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/atmos{name = "Atmospherics Maintenance"; req_access_txt = "12;24"},/turf/simulated/floor,/area/atmos)
"bHA" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/turf/simulated/floor,/area/atmos)
"bHB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor,/area/atmos)
"bHC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/obj/structure/disposalpipe/segment{dir = 1},/turf/simulated/floor,/area/atmos)
@@ -4537,7 +4537,7 @@
"bJm" = (/obj/machinery/atmospherics/pipe/simple,/turf/simulated/wall/r_wall,/area/toxins/server)
"bJn" = (/obj/machinery/door/window/northleft{name = "Server Room"; req_access_txt = "30"},/obj/machinery/door/window/southleft{name = "Server Room"; req_access_txt = "30"},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bJo" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/machinery/atmospherics/pipe/manifold{color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
-"bJp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/medical{name = "Xenobiology"; req_access_txt = "55"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology)
+"bJp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/airlock/research{name = "Xenobiology"; req_access_txt = "55"},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology)
"bJq" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology)
"bJr" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology)
"bJs" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology)
@@ -4655,7 +4655,7 @@
"bLA" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bLB" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bLC" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; icon_state = "in"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
-"bLD" = (/obj/structure/disposalpipe/segment{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/medical{name = "Research Division Storage"; req_access_txt = "47"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
+"bLD" = (/obj/structure/disposalpipe/segment{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Research Division Storage"; req_access_txt = "47"; req_one_access_txt = "1"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bLE" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/medical/research{name = "Research Division"})
"bLF" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/xenobiology)
"bLG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/item/weapon/monkeycube_box,/obj/item/weapon/monkeycube_box,/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped,/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/xenobiology)
@@ -4961,7 +4961,7 @@
"bRu" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=AIE"; location = "AftH"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor,/area/hallway/primary/aft)
"bRv" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor{icon_state = "cautioncorner"; dir = 4},/area/hallway/primary/aft)
"bRw" = (/turf/simulated/floor{icon_state = "caution"; dir = 4},/area/hallway/primary/aft)
-"bRx" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; name = "Airlock Window Shield"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Atmospherics"; req_access = null; req_access_txt = "24"},/turf/simulated/floor,/area/atmos)
+"bRx" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; name = "Airlock Window Shield"; opacity = 0},/obj/machinery/door/airlock/atmos{name = "Atmospherics"; req_access_txt = "24"},/turf/simulated/floor,/area/atmos)
"bRy" = (/obj/structure/closet/firecloset,/turf/simulated/floor,/area/atmos)
"bRz" = (/obj/machinery/atmospherics/pipe/manifold{color = "yellow"; dir = 4; icon_state = "manifold-y"; level = 2},/turf/simulated/floor,/area/atmos)
"bRA" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "tox_in"; name = "Toxin Supply Control"; output_tag = "tox_out"; sensors = list("tox_sensor" = "Tank")},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/atmos)
@@ -5046,7 +5046,7 @@
"bTb" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "yellowcorner"},/area/hallway/primary/aft)
"bTc" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/wall/r_wall,/area/hallway/primary/aft)
"bTd" = (/obj/item/weapon/crowbar,/obj/structure/table/reinforced,/turf/simulated/floor,/area/engine/chiefs_office)
-"bTe" = (/obj/machinery/light{dir = 1},/obj/machinery/power/apc{dir = 1; name = "CE office APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor,/area/engine/chiefs_office)
+"bTe" = (/obj/machinery/light{dir = 1},/obj/machinery/power/apc{dir = 1; name = "Chief Engineers office APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor,/area/engine/chiefs_office)
"bTf" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/closet/emcloset,/turf/simulated/floor,/area/engine/chiefs_office)
"bTg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{tag = "icon-intact-r (NORTH)"; icon_state = "intact-r"; dir = 1},/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/atmos)
"bTh" = (/obj/effect/landmark/start{name = "Atmospheric Technician"},/obj/machinery/atmospherics/pipe/simple{color = "yellow"; dir = 4; icon_state = "intact-y"; initialize_directions = 12; level = 2},/turf/simulated/floor,/area/atmos)
@@ -5214,7 +5214,7 @@
"bWn" = (/obj/structure/disposalpipe/sortjunction{backsort = 1; backType = list("Chief Engineer"); dir = 8; icon_state = "pipe-j2s"; sortType = list("Engineering")},/turf/simulated/wall,/area/engine/chiefs_office)
"bWo" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/engine/chiefs_office)
"bWp" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/wall,/area/engine/chiefs_office)
-"bWq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/door/airlock/glass/glass_engineering{req_access_txt = "56"},/turf/simulated/floor,/area/engine/chiefs_office)
+"bWq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/door/airlock/glass/glass_engineering{name = "Chief Engineers office"; req_access_txt = "56"},/turf/simulated/floor,/area/engine/chiefs_office)
"bWr" = (/turf/simulated/wall,/area/engine/chiefs_office)
"bWs" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/engine/chiefs_office)
"bWt" = (/obj/machinery/atmospherics/tvalve/digital{tag = "icon-tvalve0 (NORTH)"; icon_state = "tvalve0"; dir = 1},/turf/simulated/floor,/area/atmos)
diff --git a/sound/effects/doorcreaky.ogg b/sound/effects/doorcreaky.ogg
new file mode 100644
index 00000000000..3d60aca56bf
Binary files /dev/null and b/sound/effects/doorcreaky.ogg differ