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:

+ +
+

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