diff --git a/code/defines/obj/storage.dm b/code/defines/obj/storage.dm index afb9e856a6..ab2efd68c4 100644 --- a/code/defines/obj/storage.dm +++ b/code/defines/obj/storage.dm @@ -54,6 +54,10 @@ /obj/item/weapon/storage/box/engineer +/obj/item/weapon/storage/box/medic + name = "anesthetic box" + desc = "Full of masks and emergency anesthetic tanks." + /obj/item/weapon/storage/box/syndicate /obj/item/weapon/storage/pillbottlebox @@ -98,6 +102,53 @@ desc = "A tough backpack for the daily grind" icon_state = "engiepack" +/obj/item/weapon/storage/backpack/industrial/full + name = "loaded industrial backpack" + desc = "A tough backpack for the daily grind, full of gear" + icon_state = "engiepack" + +//Spawns with 2 glass, 2 metal, 1 steel, and 2 special boxes. + New() + ..() + for(var/i = 1, i <=2, i++) + var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src) + G.amount = 50 + G.loc = src + for(var/i = 1, i <=2, i++) + var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal(src) + G.amount = 50 + G.loc = src + var/obj/item/stack/sheet/r_metal/R = new /obj/item/stack/sheet/r_metal(src) + R.amount = 50 + R.loc = src + var/obj/item/weapon/storage/box/B1 = new /obj/item/weapon/storage/box(src) + B1.name = "power and airlock circuit box" + B1.desc = "Bursting with repair gear" + B1.w_class = 2 + for(var/i = 1, i <= 7, i++) + if(i < 4) + var/obj/item/weapon/module/power_control/P = new /obj/item/weapon/module/power_control(B1) + P.loc = B1 + if(i >= 4) + var/obj/item/weapon/airlock_electronics/P = new /obj/item/weapon/airlock_electronics(B1) + P.loc = B1 + var/obj/item/weapon/storage/box/B2 = new /obj/item/weapon/storage/box(src) + B2.name = "power cells and wire box" + B2.desc = "Bursting with repair gear" + B2.w_class = 2 + var/color = pick("red","yellow","green","blue") + for(var/i = 1, i <= 7, i++) + if(i < 4) + var/obj/item/weapon/cable_coil/P = new /obj/item/weapon/cable_coil(B2,30,color) + P.loc = B2 + if(i >= 4) + var/obj/item/weapon/cell/P = new /obj/item/weapon/cell(B2) + P.maxcharge = 15000 + P.charge = 15000 + P.updateicon() + P.loc = B2 + return + /obj/item/weapon/storage/briefcase name = "briefcase" desc = "Used by the lawyer in the court room." @@ -223,6 +274,22 @@ icon_state = "implant" item_state = "syringe_kit" +/obj/item/weapon/storage/deathalarm_kit + name = "Death Alarm Kit" + desc = "Box of stuff used to implant death alarms." + icon_state = "implant" + item_state = "syringe_kit" + + New() + ..() + new /obj/item/weapon/implanter(src) + new /obj/item/weapon/implantcase/death_alarm(src) + new /obj/item/weapon/implantcase/death_alarm(src) + new /obj/item/weapon/implantcase/death_alarm(src) + new /obj/item/weapon/implantcase/death_alarm(src) + new /obj/item/weapon/implantcase/death_alarm(src) + new /obj/item/weapon/implantcase/death_alarm(src) + /obj/item/weapon/storage/toolbox name = "toolbox" desc = "Danger. Very heavy." diff --git a/code/game/communications.dm b/code/game/communications.dm index bba3fa7a92..6a7faf5812 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -104,13 +104,13 @@ var/list/radiochannels = list( "Medical" = 1355, "Engineering" = 1357, "Security" = 1359, - "Deathsquad" = 1441, + "ResponseTeam" = 1439, "Syndicate" = 1213, "Mining" = 1349, "Cargo" = 1347, ) //depenging helpers -var/list/DEPT_FREQS = list(1351,1355,1357,1359,1213,1441,1349,1347) +var/list/DEPT_FREQS = list(1351,1355,1357,1359,1213,1439,1349,1347) var/const/COMM_FREQ = 1353 //command, colored gold in chat window var/const/SYND_FREQ = 1213 var/NUKE_FREQ = 1200 //Randomised on nuke rounds. diff --git a/code/game/events/EventsMain.dm b/code/game/events/EventsMain.dm index bf32893d95..64ec941423 100644 --- a/code/game/events/EventsMain.dm +++ b/code/game/events/EventsMain.dm @@ -6,18 +6,22 @@ */ -var/list/DisallowedEvents = list(/datum/event/spaceninja, /datum/event/prisonbreak, /datum/event/immovablerod, /datum/event/gravitationalanomaly) +var/list/DisallowedEvents = list(/datum/event/spaceninja, /datum/event/prisonbreak, /datum/event/immovablerod, /datum/event/gravitationalanomaly, /datum/event/alieninfestation) var/list/EventTypes = typesof(/datum/event) - /datum/event - DisallowedEvents +var/list/OneTimeEvents = list(/datum/event/spacecarp, /datum/event/miniblob) var/datum/event/ActiveEvent = null var/datum/event/LongTermEvent = null +var/is_ninjad_yet = 0 /proc/SpawnEvent() if(!EventsOn || ActiveEvent) return - if((world.time/10)>=3600 && toggle_space_ninja && !sent_ninja_to_station) + if((world.time/10)>=3600 && toggle_space_ninja && !sent_ninja_to_station && !is_ninjad_yet) EventTypes |= /datum/event/spaceninja + is_ninjad_yet = 1 var/Type = pick(EventTypes) - EventTypes -= Type + if(Type in OneTimeEvents) + EventTypes -= Type ActiveEvent = new Type() ActiveEvent.Announce() if (!ActiveEvent) diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index 6452fc3f49..4a0ccefa6d 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -84,7 +84,7 @@ H.equip_if_possible(new /obj/item/device/pda/quartermaster(H), H.slot_belt) H.equip_if_possible(new /obj/item/clothing/gloves/black(H), H.slot_gloves) H.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(H), H.slot_glasses) - H.equip_if_possible(new /obj/item/weapon/clipboard(H), H.slot_l_hand) + H.equip_if_possible(new /obj/item/weapon/clipboard(H), H.slot_r_store) return 1 @@ -224,7 +224,7 @@ if(!H) return 0 H.equip_if_possible(new /obj/item/clothing/under/suit_jacket/red(H), H.slot_w_uniform) H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes) - H.equip_if_possible(new /obj/item/weapon/barcodescanner(H), H.slot_l_hand) + H.equip_if_possible(new /obj/item/weapon/barcodescanner(H), H.slot_l_store) return 1 diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index 1168627544..f1e442ffbf 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -12,10 +12,10 @@ H.equip_if_possible(new /obj/item/device/radio/headset/heads/ce(H), H.slot_ears) H.equip_if_possible(new /obj/item/weapon/storage/backpack/industrial (H), H.slot_back) H.equip_if_possible(new /obj/item/clothing/under/rank/chief_engineer(H), H.slot_w_uniform) - H.equip_if_possible(new /obj/item/device/pda/heads/ce(H), H.slot_belt) + H.equip_if_possible(new /obj/item/device/pda/heads/ce(H), H.slot_l_store) H.equip_if_possible(new /obj/item/clothing/shoes/brown(H), H.slot_shoes) H.equip_if_possible(new /obj/item/clothing/head/helmet/hardhat/white(H), H.slot_head) - H.equip_if_possible(new /obj/item/weapon/storage/belt/utility/full(H), H.slot_l_hand) + H.equip_if_possible(new /obj/item/weapon/storage/belt/utility/full(H), H.slot_belt) H.equip_if_possible(new /obj/item/clothing/gloves/black(H), H.slot_gloves) return 1 @@ -36,9 +36,9 @@ H.equip_if_possible(new /obj/item/weapon/storage/backpack/industrial(H), H.slot_back) H.equip_if_possible(new /obj/item/clothing/under/rank/engineer(H), H.slot_w_uniform) H.equip_if_possible(new /obj/item/clothing/shoes/orange(H), H.slot_shoes) - H.equip_if_possible(new /obj/item/device/pda/engineering(H), H.slot_belt) + H.equip_if_possible(new /obj/item/device/pda/engineering(H), H.slot_l_store) H.equip_if_possible(new /obj/item/clothing/head/helmet/hardhat(H), H.slot_head) - H.equip_if_possible(new /obj/item/weapon/storage/belt/utility/full(H), H.slot_l_hand) + H.equip_if_possible(new /obj/item/weapon/storage/belt/utility/full(H), H.slot_belt) H.equip_if_possible(new /obj/item/device/t_scanner(H), H.slot_r_store) return 1 diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index 9549c1536b..62d1373310 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -14,7 +14,7 @@ H.equip_if_possible(new /obj/item/clothing/under/rank/research_director(H), H.slot_w_uniform) H.equip_if_possible(new /obj/item/device/pda/heads/rd(H), H.slot_belt) H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat(H), H.slot_wear_suit) - H.equip_if_possible(new /obj/item/weapon/clipboard(H), H.slot_r_hand) + H.equip_if_possible(new /obj/item/weapon/clipboard(H), H.slot_l_store) return 1 diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 8c0e405f0c..dcd631c9ee 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -254,10 +254,11 @@ var/global/datum/controller/occupations/job_master C.name = "[C.registered]'s ID Card ([C.assignment])" C.access = get_access(C.assignment) H.equip_if_possible(C, H.slot_wear_id) - H.equip_if_possible(new /obj/item/weapon/pen(H), H.slot_r_store) + if(!H.equip_if_possible(new /obj/item/weapon/pen(H), H.slot_r_store)) + H.equip_if_possible(new /obj/item/weapon/pen(H), H.slot_ears) H.equip_if_possible(new /obj/item/device/pda(H), H.slot_belt) - if(istype(H.belt, /obj/item/device/pda))//I bet this could just use locate - var/obj/item/device/pda/pda = H.belt + if(locate(/obj/item/device/pda,H))//I bet this could just use locate + var/obj/item/device/pda/pda = locate(/obj/item/device/pda,H) pda.owner = H.real_name pda.ownjob = H.wear_id.assignment pda.name = "PDA-[H.real_name] ([pda.ownjob])" diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm index b1e837c519..d95784d41d 100644 --- a/code/game/machinery/OpTable.dm +++ b/code/game/machinery/OpTable.dm @@ -8,7 +8,7 @@ use_power = 1 idle_power_usage = 1 active_power_usage = 5 - var/mob/living/carbon/human/victim = null + var/mob/living/carbon/victim = null var/strapped = 0.0 var/obj/machinery/computer/operating/computer = null @@ -95,8 +95,8 @@ return /obj/machinery/optable/proc/check_victim() - if(locate(/mob/living/carbon/human, src.loc)) - var/mob/M = locate(/mob/living/carbon/human, src.loc) + if(locate(/mob/living/carbon, src.loc)) + var/mob/M = locate(/mob/living/carbon, src.loc) if(M.resting) src.victim = M icon_state = "table2-active" @@ -130,4 +130,78 @@ user.drop_item() if(W && W.loc) W.loc = src.loc - return \ No newline at end of file + return + +/obj/machinery/optable/portable + name = "mobile operating Table" + desc = "Used for advanced medical procedures. Seems to be movable, neat." + icon = 'rollerbed.dmi' + icon_state = "up" + density = 1 + anchored = 0 + + New() + ..() + processing_objects.Remove(src) + + MouseDrop_T(obj/O as obj, mob/user as mob) + if ((!( istype(O, /obj/item/weapon) ) || user.equipped() != O)) + return + user.drop_item() + if (O.loc != src.loc) + step(O, get_dir(O, src)) + return + + attackby(obj/item/weapon/W as obj, mob/user as mob) + if(!anchored) + return + if (istype(W, /obj/item/weapon/grab)) + if(ismob(W:affecting)) + var/mob/M = W:affecting + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.resting = 1 + M.loc = src.loc + for (var/mob/C in viewers(src)) + C.show_message("\red [M] has been laid on the operating table by [user].", 3) + for(var/obj/O in src) + O.loc = src.loc + src.add_fingerprint(user) + src.victim = M + processing_objects.Add(src) + del(W) + return + user.drop_item() + if(W && W.loc) + W.loc = src.loc + return + + check_victim() + if(locate(/mob/living/carbon/human, src.loc)) + var/mob/M = locate(/mob/living/carbon/human, src.loc) + if(M.resting) + src.victim = M + return 1 + src.victim = null + processing_objects.Remove(src) + return 0 + + verb/make_deployable() + set category = "Object" + set name = "Deploy Table" + set src in oview(1) + + if(anchored) + if(victim) + usr << "You can't do that with someone on the table!" + else + anchored = 0 + for(var/mob/M in orange(5,src)) + M.show_message("\blue [usr] releases the locks on the table's casters!") + icon_state = "up" + else + anchored = 1 + for(var/mob/M in orange(5,src)) + M.show_message("\blue [usr] locks the table's casters in place!") + icon_state = "down" \ No newline at end of file diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 8e9066b5a1..306e8d5587 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -182,9 +182,8 @@ outputAmount = 1 if (!busy) if(href_list["make"]) - makeDir = get_dir(src,usr) makeNew: - var/turf/T = get_step(src.loc, makeDir) + var/turf/T = src.loc var/obj/template = locate(href_list["make"]) var/multiplier = text2num(href_list["multiplier"]) if (!multiplier) multiplier = 1 diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index a0cb853177..fcfa830ebe 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -62,6 +62,7 @@ machinetype = 6 heatgen = 0 var/intercept = 0 // if nonzero, broadcasts all messages to syndicate channel + var/syndi = 1 //If 1, it goes to syndicate frequency. Else, goes to deathsquad receive_signal(datum/signal/signal) @@ -87,19 +88,31 @@ var/datum/radio_frequency/connection = signal.data["connection"] - if(connection.frequency == NUKE_FREQ) // if syndicate broadcast, just + if(connection.frequency == NUKE_FREQ && syndi) // if syndicate broadcast, just Broadcast_Message(signal.data["connection"], signal.data["mob"], signal.data["vmask"], signal.data["vmessage"], signal.data["radio"], signal.data["message"], signal.data["name"], signal.data["job"], signal.data["realname"], signal.data["vname"],, signal.data["compression"]) - else - if(intercept) + else if(connection.frequency == 1439 && !syndi) + Broadcast_Message(signal.data["connection"], signal.data["mob"], + signal.data["vmask"], signal.data["vmessage"], + signal.data["radio"], signal.data["message"], + signal.data["name"], signal.data["job"], + signal.data["realname"], signal.data["vname"],, signal.data["compression"]) + else if (intercept) + if(syndi) Broadcast_Message(signal.data["connection"], signal.data["mob"], signal.data["vmask"], signal.data["vmessage"], signal.data["radio"], signal.data["message"], signal.data["name"], signal.data["job"], signal.data["realname"], signal.data["vname"], 3, signal.data["compression"]) + else + Broadcast_Message(signal.data["connection"], signal.data["mob"], + signal.data["vmask"], signal.data["vmessage"], + signal.data["radio"], signal.data["message"], + signal.data["name"], signal.data["job"], + signal.data["realname"], signal.data["vname"], 4, signal.data["compression"]) @@ -195,6 +208,15 @@ receive |= R.send_hear(NUKE_FREQ) + // --- Broadcast to response team radio! --- + + else if(data == 3) + var/datum/radio_frequency/syndicateconnection = radio_controller.return_frequency(1439) + + for (var/obj/item/device/radio/R in syndicateconnection.devices["[RADIO_CHAT]"]) + + receive |= R.send_hear(1439) + // --- Broadcast to ALL radio devices --- else @@ -250,6 +272,9 @@ else heard_garbled += R + for(var/obj/item/weapon/implant/imp in R) + imp.hear(message,M) + /* ###### Begin formatting and sending the message ###### */ if (length(heard_masked) || length(heard_normal) || length(heard_voice) || length(heard_garbled) || length(heard_gibberish)) @@ -277,6 +302,8 @@ freq_text = "Mining" if(1347) freq_text = "Cargo" + if(1439) + freq_text = "Response Team" if(connection.frequency == NUKE_FREQ) freq_text = "Agent" @@ -308,7 +335,9 @@ // --- Filter the message; place it in quotes apply a verb --- - var/quotedmsg = M.say_quote(message) + var/quotedmsg = "\"" + message + "\"" + if(M) + quotedmsg = M.say_quote(message) // --- This following recording is intended for research and feedback in the use of department radio channels --- @@ -385,7 +414,10 @@ // Displays garbled message (ie "f*c* **u, **i*er!") if (length(heard_garbled)) - quotedmsg = M.say_quote(stars(message)) + if(M) + quotedmsg = M.say_quote(stars(message)) + else + quotedmsg = "\"" + stars(message) + "\"" var/rendered = "[part_a][vname][part_b][quotedmsg][part_c]" for (var/mob/R in heard_garbled) @@ -398,7 +430,10 @@ /* --- Complete gibberish. Usually happens when there's a compressed message --- */ if (length(heard_gibberish)) - quotedmsg = M.say_quote(Gibberish(message, compression + 50)) + if(M) + quotedmsg = M.say_quote(Gibberish(message, compression + 50)) + else + quotedmsg = "\"" + Gibberish(message, compression + 50) + "\"" var/rendered = "[part_a][Gibberish(M.real_name, compression + 50)][part_b][quotedmsg][part_c]" for (var/mob/R in heard_gibberish) diff --git a/code/game/machinery/telecomms/telecommunications.dm b/code/game/machinery/telecomms/telecommunications.dm index b7c7fcd0ca..e1a8bab184 100644 --- a/code/game/machinery/telecomms/telecommunications.dm +++ b/code/game/machinery/telecomms/telecommunications.dm @@ -382,7 +382,10 @@ log.parameters["message"] = signal.data["message"] log.parameters["name"] = signal.data["name"] log.parameters["realname"] = signal.data["realname"] - log.parameters["uspeech"] = M.universal_speak + if(M) + log.parameters["uspeech"] = M.universal_speak + else + log.parameters["uspeech"] = 0 // If the signal is still compressed, make the log entry gibberish if(signal.data["compression"] > 0) diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index b52cde554a..8029addbfe 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -10,6 +10,7 @@ activate() implanted(source as mob) get_data() + hear(message, source as mob) trigger(emote, source as mob) @@ -27,6 +28,9 @@ get_data() return "No information available" + hear(message, source as mob) + return + /obj/item/weapon/implant/uplink @@ -236,7 +240,11 @@ the implant may become unstable and either pre-maturely inject the subject or si Integrity: Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."} return dat - hear_talk(M as mob, var/msg) + hear_talk(mob/M as mob, msg) + hear(msg) + return + + hear(var/msg) if(findtext(msg,phrase)) if(istype(loc, /mob/)) var/mob/T = loc @@ -250,4 +258,41 @@ the implant may become unstable and either pre-maturely inject the subject or si implanted(mob/source as mob) phrase = input("Choose activation phrase:") as text usr.mind.store_memory("Explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', say [src.phrase] to attempt to activate.", 0, 0) - usr << "The implanted explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', say [src.phrase] to attempt to activate." \ No newline at end of file + usr << "The implanted explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', say [src.phrase] to attempt to activate." + +/obj/item/weapon/implant/death_alarm + name = "death alarm" + desc = "Danger Will Robinson!" + var/mobname = "Will Robinson" + + get_data() + var/dat = {" +Implant Specifications:
+Name: NanoTrasen \"Profit Margin\" Class Employee Lifesign Sensor
+Life: Activates upon death.
+Important Notes: Alerts crew to crewmember death.
+
+Implant Details:
+Function: Contains a compact radio signaler that triggers when the host's lifesigns cease.
+Special Features: Alerts crew to crewmember death.
+Integrity: Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."} + return dat + + process() + var/mob/M = src.loc + if(M.stat == 2) + var/turf/t = get_turf(M) + var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null) + var/mob/living/carbon/human/G = new /mob/living/carbon/human(null) + G.real_name = "[mobname]'s death alarm" + G.name = "[mobname]'s death alarm" + G.universal_speak = 1 + a.talk_into(G,"[mobname] has died in [t.loc.name]!") + del(a) + del(G) + processing_objects.Remove(src) + + + implanted(mob/source as mob) + mobname = source.real_name + processing_objects.Add(src) \ No newline at end of file diff --git a/code/game/objects/items/weapons/implants/implantcase.dm b/code/game/objects/items/weapons/implants/implantcase.dm index 313e6ae352..7655060847 100644 --- a/code/game/objects/items/weapons/implants/implantcase.dm +++ b/code/game/objects/items/weapons/implants/implantcase.dm @@ -114,4 +114,15 @@ New() src.imp = new /obj/item/weapon/implant/loyalty( src ) ..() + return + +/obj/item/weapon/implantcase/death_alarm + name = "Glass Case- 'Tracking'" + desc = "A case containing a tracking implant." + icon = 'items.dmi' + icon_state = "implantcase-b" + + New() + src.imp = new /obj/item/weapon/implant/death_alarm( src ) + ..() return \ No newline at end of file diff --git a/code/game/objects/items/weapons/papers_bins.dm b/code/game/objects/items/weapons/papers_bins.dm index c7061a720e..b13d61ad34 100644 --- a/code/game/objects/items/weapons/papers_bins.dm +++ b/code/game/objects/items/weapons/papers_bins.dm @@ -663,9 +663,6 @@ CLIPBOARDS else return src.update() - spawn(0) - attack_self(user) - return return /obj/item/weapon/clipboard/proc/update() @@ -692,6 +689,15 @@ CLIPBOARDS src.add_fingerprint(usr) return // +/obj/item/weapon/clipboard/New() + + ..() + for(var/i = 1, i <= 3, i++) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src) + P.loc = src + src.pen = new /obj/item/weapon/pen(src) + src.update() + return // PHOTOGRAPH diff --git a/code/game/objects/storage/briefcase.dm b/code/game/objects/storage/briefcase.dm index a2dd6970cd..14cc898e66 100644 --- a/code/game/objects/storage/briefcase.dm +++ b/code/game/objects/storage/briefcase.dm @@ -40,3 +40,20 @@ M.eye_blurry += 3 return + +/obj/item/weapon/storage/briefcase/surgery + icon_state = "medbriefcase" + name = "surgery equipment bag" + desc = "Heavy and full of sharp things." + + New() + ..() + contents = list() + sleep(1) + new /obj/item/weapon/circular_saw(src) + new /obj/item/weapon/hemostat(src) + new /obj/item/weapon/scalpel(src) + new /obj/item/weapon/retractor(src) + new /obj/item/weapon/cautery(src) + new /obj/item/weapon/surgical_tool/bonegel(src) + new /obj/item/weapon/surgical_tool/bonesetter(src) \ No newline at end of file diff --git a/code/game/objects/storage/storage.dm b/code/game/objects/storage/storage.dm index 22d72458a4..6784909ae0 100644 --- a/code/game/objects/storage/storage.dm +++ b/code/game/objects/storage/storage.dm @@ -259,9 +259,22 @@ new /obj/item/weapon/tank/emergency_oxygen/engi( src ) return +/obj/item/weapon/storage/box/medic/New() + ..() + contents = list() + sleep(1) + new /obj/item/clothing/mask/medical( src ) + new /obj/item/weapon/tank/emergency_oxygen/anesthetic( src ) + new /obj/item/weapon/tank/emergency_oxygen/anesthetic( src ) + new /obj/item/weapon/tank/emergency_oxygen/anesthetic( src ) + new /obj/item/weapon/tank/emergency_oxygen/anesthetic( src ) + new /obj/item/weapon/tank/emergency_oxygen/anesthetic( src ) + new /obj/item/weapon/tank/emergency_oxygen/anesthetic( src ) + return + /obj/item/weapon/storage/box/syndicate/New() ..() - switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "screwed" = 1, "guns" = 1, "murder" = 1, "freedom" = 1))) + switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "screwed" = 1, "guns" = 1, "freedom" = 1))) if ("bloodyspai") new /obj/item/clothing/under/chameleon(src) new /obj/item/clothing/mask/gas/voice(src) @@ -290,12 +303,6 @@ new /obj/item/weapon/plastique(src) return - if ("murder") - new /obj/item/weapon/melee/energy/sword(src) - new /obj/item/weapon/cloaking_device(src) - new /obj/item/weapon/card/emag(src) - return - if("freedom") var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(src) O.imp = new /obj/item/weapon/implant/freedom(O) diff --git a/code/game/objects/tanks/emergency.dm b/code/game/objects/tanks/emergency.dm index 10af832592..fbadf6fca8 100644 --- a/code/game/objects/tanks/emergency.dm +++ b/code/game/objects/tanks/emergency.dm @@ -33,3 +33,19 @@ icon_state = "emergency_double" name = "Double Emergency Oxygen Tank" volume = 10 + +/obj/item/weapon/tank/emergency_oxygen/anesthetic + icon_state = "emergency_sleep" + name = "emergency sleeping gas tank" + desc = "Contains an Oxygen/N2O mix." + distribute_pressure = ONE_ATMOSPHERE + + New() + ..() + src.air_contents.oxygen = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD + + var/datum/gas/sleeping_agent/trace_gas = new() + trace_gas.moles = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD + + src.air_contents.trace_gases += trace_gas + return \ No newline at end of file diff --git a/code/game/response_team.dm b/code/game/response_team.dm index daadaac5cf..be5786cf6b 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -58,7 +58,7 @@ proc/trigger_armed_response_team() new_commando.mind.current = new_commando new_commando.mind.original = new_commando new_commando.mind.assigned_role = "MODE" - new_commando.mind.special_role = "Death Commando" + new_commando.mind.special_role = "Response Team" if(!(new_commando.mind in ticker.minds)) ticker.minds += new_commando.mind//Adds them to regular mind list. new_commando.equip_strike_team(leader_selected) @@ -67,23 +67,44 @@ proc/trigger_armed_response_team() /mob/living/carbon/human/proc/equip_strike_team(leader_selected = 0) + //Special radio setup var/obj/item/device/radio/R = new /obj/item/device/radio/headset(src) - R.set_frequency(1441) + R.name = "CentCom Response Team headset" + R.desc = "The headset of the boss's boss. Channels are as follows: :h - Response Team :c - command, :s - security, :e - engineering, :d - mining, :q - cargo, :m - medical, :n - science." + R.freerange = 1 + R.listening = 0 + R.config(list("ResponseTeam" = 1, "Science" = 0, "Command" = 0, "Medical" = 0, "Engineering" = 0, "Security" = 0, "Mining" = 0, "Cargo" = 0,)) equip_if_possible(R, slot_ears) + + //Adding Camera Network + var/obj/machinery/camera/camera = new /obj/machinery/camera(src) //Gives all the commandos internals cameras. + camera.network = "CREED" + camera.c_tag = real_name + + //Basic Uniform equip_if_possible(new /obj/item/clothing/under/color/black(src), slot_w_uniform) - equip_if_possible(new /obj/item/clothing/shoes/swat(src), slot_shoes) - equip_if_possible(new /obj/item/clothing/suit/armor/swat(src), slot_wear_suit) + equip_if_possible(new /obj/item/device/flashlight(src), slot_l_store) + equip_if_possible(new /obj/item/weapon/clipboard(src), slot_r_store) + equip_if_possible(new /obj/item/weapon/gun/energy/taser(src), slot_belt) + + //Glasses + equip_if_possible(new /obj/item/clothing/glasses/sunglasses/sechud(src), slot_glasses) + + //Shoes & gloves + var/obj/item/clothing/shoes/swat/S = new /obj/item/clothing/shoes/swat(src) + S.flags = NOSLIP + equip_if_possible(S, slot_shoes) equip_if_possible(new /obj/item/clothing/gloves/swat(src), slot_gloves) - equip_if_possible(new /obj/item/clothing/head/helmet/space/deathsquad(src), slot_head) - equip_if_possible(new /obj/item/clothing/mask/gas/swat(src), slot_wear_mask) + //Removed +// equip_if_possible(new /obj/item/clothing/suit/armor/swat(src), slot_wear_suit) +// equip_if_possible(new /obj/item/clothing/head/helmet/space/deathsquad(src), slot_head) +// equip_if_possible(new /obj/item/clothing/mask/gas/swat(src), slot_wear_mask) + + //Backpack equip_if_possible(new /obj/item/weapon/storage/backpack/security(src), slot_back) - equip_if_possible(new /obj/item/weapon/storage/box(src), slot_in_backpack) - + equip_if_possible(new /obj/item/weapon/storage/box/engineer(src), slot_in_backpack) equip_if_possible(new /obj/item/weapon/storage/firstaid/regular(src), slot_in_backpack) - equip_if_possible(new /obj/item/device/flashlight(src), slot_in_backpack) - - equip_if_possible(new /obj/item/weapon/tank/emergency_oxygen(src), slot_s_store) var/obj/item/weapon/card/id/W = new(src) W.name = "[real_name]'s ID Card" diff --git a/code/game/turf.dm b/code/game/turf.dm index 074d808477..208a30dfe4 100644 --- a/code/game/turf.dm +++ b/code/game/turf.dm @@ -129,6 +129,8 @@ var/prior_icon = icon_old var/old_dir = dir + for(var/obj/structure/lattice/L in locate(src.x, src.y, src.z)) + del(L) var/turf/simulated/floor/W = new /turf/simulated/floor( locate(src.x, src.y, src.z) ) W.dir = old_dir @@ -146,6 +148,8 @@ var/prior_icon = icon_old var/old_dir = dir + for(var/obj/structure/lattice/L in locate(src.x, src.y, src.z)) + del(L) var/turf/simulated/floor/plating/W = new /turf/simulated/floor/plating( locate(src.x, src.y, src.z) ) W.dir = old_dir @@ -159,6 +163,8 @@ /turf/proc/ReplaceWithEngineFloor() var/old_dir = dir + for(var/obj/structure/lattice/L in locate(src.x, src.y, src.z)) + del(L) var/turf/simulated/floor/engine/E = new /turf/simulated/floor/engine( locate(src.x, src.y, src.z) ) E.dir = old_dir diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 2c41de8247..7f2942be4b 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -694,10 +694,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that pda.name = "PDA-[M.real_name] ([pda.ownjob])" M.equip_if_possible(pda, M.slot_r_store) - - var/obj/item/weapon/clipboard/G = new(M) - G.pen = new /obj/item/weapon/pen(G) - M.equip_if_possible(G, M.slot_l_store) + M.equip_if_possible(new /obj/item/weapon/clipboard(M), M.slot_l_store) var/obj/item/weapon/card/id/W = new(M) W.name = "[M.real_name]'s ID Card" diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index f901319266..63ef86aee3 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -121,11 +121,12 @@ if (src.stat == 1 || stat == 2) usr << "\red [name] doesn't seem to be responding to anything around [t_him], [t_his] eyes closed as though asleep." - if((health < 0 || stat == 1) && distance <= 3) + if(health < 0 && distance <= 3) usr << "\red [name] does not appear to be breathing." if(istype(usr, /mob/living/carbon/human) && usr.stat == 0 && src.stat == 1 && distance <= 1) for(var/mob/O in viewers(usr.loc, null)) O.show_message("[usr] checks [src]'s pulse.", 1) + sleep(15) usr << "\blue [name] has a pulse!" if (src.stat == 2 || (changeling && changeling.changeling_fakedeath == 1)) @@ -133,6 +134,7 @@ if(istype(usr, /mob/living/carbon/human) && usr.stat == 0) for(var/mob/O in viewers(usr.loc, null)) O.show_message("[usr] checks [src]'s pulse.", 1) + sleep(15) usr << "\red [name] has no pulse!" else if (src.getBruteLoss()) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 7ee57fc687..86f761bfc0 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1469,7 +1469,7 @@ del(src) return if("internal") - if ((!( (istype(target.wear_mask, /obj/item/clothing/mask) && istype(target.back, /obj/item/weapon/tank) && !( target.internal )) ) && !( target.internal ))) + if ((!( (istype(target.wear_mask, /obj/item/clothing/mask) && (istype(target.back, /obj/item/weapon/tank) || istype(target.belt, /obj/item/weapon/tank) || istype(target.s_store, /obj/item/weapon/tank)) && !( target.internal )) ) && !( target.internal ))) //SN src = null del(src) return @@ -2157,11 +2157,11 @@ It can still be worn/put on as normal.
Belt: [(belt ? belt : "Nothing")]
Uniform: [(w_uniform ? w_uniform : "Nothing")]
(Exo)Suit: [(wear_suit ? wear_suit : "Nothing")] -
Back: [(back ? back : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")] +
Back: [(back ? back : "Nothing")]
ID: [(wear_id ? wear_id : "Nothing")]
Suit Storage: [(s_store ? s_store : "Nothing")]
[(handcuffed ? text("Handcuffed") : text("Not Handcuffed"))] -
[(internal ? text("Remove Internal") : "")] +
[(internal ? text("Remove Internal") : ((istype(wear_mask, /obj/item/clothing/mask) && (istype(back, /obj/item/weapon/tank) || istype(belt, /obj/item/weapon/tank) || istype(s_store, /obj/item/weapon/tank)) && !( internal )) ? text(" Set Internal", src) : ""))]
Empty Pockets
Empty Hat
Refresh @@ -2338,6 +2338,9 @@ It can still be worn/put on as normal. requests += O spawn( 0 ) O.process() + for(var/mob/living/carbon/M in oview(1,src)) + if((M.machine == src)&&(in_range(src, M))) + show_inv(M) return ..() return diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 6d4c5f3b1e..fd2cd466be 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -44,6 +44,8 @@ M.show_message(rendered, 2) /mob/proc/say_understands(var/mob/other) + if(!other) + return 1 if (src.stat == 2) return 1 else if (istype(other, src.type)) diff --git a/icons/mob/items_lefthand.dmi b/icons/mob/items_lefthand.dmi index 9f531da8f6..d0ca90f995 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 386ce97659..66c6559e8c 100644 Binary files a/icons/mob/items_righthand.dmi and b/icons/mob/items_righthand.dmi differ diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index 92e5d91196..cf7cc1e282 100644 Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 8f25d7e0a0..fdcfb9c205 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/icons/obj/tank.dmi b/icons/obj/tank.dmi index cc0e0bbcdb..bc523dd9d2 100644 Binary files a/icons/obj/tank.dmi and b/icons/obj/tank.dmi differ