Pimped out the response team. No jobs have stupid stuff spawn in their hands, it now spawns on their person, be it on their ear (pens if they cannot find a target) of in their pockets. MAde several pre-set-up things for the response team, including portable surgery equipment and a movable optable. Made autolathe items spawn on top of it. Added Death alarms, and made explosive implants work properly. Girders are now removed when a floor is made/RCD'd into existence. Internals can now be set even if it is in suit storage or on the belt.
@@ -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."
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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])"
|
||||
|
||||
@@ -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
|
||||
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"
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
<b>Integrity:</b> 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]'', <B>say [src.phrase]</B> to attempt to activate.", 0, 0)
|
||||
usr << "The implanted explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', <B>say [src.phrase]</B> to attempt to activate."
|
||||
usr << "The implanted explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', <B>say [src.phrase]</B> 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 = {"
|
||||
<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> NanoTrasen \"Profit Margin\" Class Employee Lifesign Sensor<BR>
|
||||
<b>Life:</b> Activates upon death.<BR>
|
||||
<b>Important Notes:</b> Alerts crew to crewmember death.<BR>
|
||||
<HR>
|
||||
<b>Implant Details:</b><BR>
|
||||
<b>Function:</b> Contains a compact radio signaler that triggers when the host's lifesigns cease.<BR>
|
||||
<b>Special Features:</b> Alerts crew to crewmember death.<BR>
|
||||
<b>Integrity:</b> 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)
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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.
|
||||
<BR><B>Belt:</B> <A href='?src=\ref[src];item=belt'>[(belt ? belt : "Nothing")]</A>
|
||||
<BR><B>Uniform:</B> <A href='?src=\ref[src];item=uniform'>[(w_uniform ? w_uniform : "Nothing")]</A>
|
||||
<BR><B>(Exo)Suit:</B> <A href='?src=\ref[src];item=suit'>[(wear_suit ? wear_suit : "Nothing")]</A>
|
||||
<BR><B>Back:</B> <A href='?src=\ref[src];item=back'>[(back ? back : "Nothing")]</A> [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank) && !( internal )) ? text(" <A href='?src=\ref[];item=internal'>Set Internal</A>", src) : "")]
|
||||
<BR><B>Back:</B> <A href='?src=\ref[src];item=back'>[(back ? back : "Nothing")]</A>
|
||||
<BR><B>ID:</B> <A href='?src=\ref[src];item=id'>[(wear_id ? wear_id : "Nothing")]</A>
|
||||
<BR><B>Suit Storage:</B> <A href='?src=\ref[src];item=s_store'>[(s_store ? s_store : "Nothing")]</A>
|
||||
<BR>[(handcuffed ? text("<A href='?src=\ref[src];item=handcuff'>Handcuffed</A>") : text("<A href='?src=\ref[src];item=handcuff'>Not Handcuffed</A>"))]
|
||||
<BR>[(internal ? text("<A href='?src=\ref[src];item=internal'>Remove Internal</A>") : "")]
|
||||
<BR>[(internal ? text("<A href='?src=\ref[src];item=internal'>Remove Internal</A>") : ((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(" <A href='?src=\ref[];item=internal'>Set Internal</A>", src) : ""))]
|
||||
<BR><A href='?src=\ref[src];item=pockets'>Empty Pockets</A>
|
||||
<BR><A href='?src=\ref[src];item=h_store'>Empty Hat</A>
|
||||
<BR><A href='?src=\ref[user];refresh=1'>Refresh</A>
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 2.3 KiB |