Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Tastyfish
2012-01-24 15:47:07 -05:00
54 changed files with 1176 additions and 272 deletions
@@ -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,36 @@ 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)
a.autosay("[mobname] has died in [t.loc.name]!", "[mobname]'s Death Alarm")
del(a)
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- 'Death Alarm'"
desc = "A case containing a death alarm 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
+115
View File
@@ -183,6 +183,121 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
updateDialog()
add_fingerprint(usr)
/obj/item/device/radio/proc/autosay(var/message, var/from, var/channel)
var/datum/radio_frequency/connection = null
if(channel && channels && channels.len > 0)
if (channel == "department")
//world << "DEBUG: channel=\"[channel]\" switching to \"[channels[1]]\""
channel = channels[1]
connection = secure_radio_connections[channel]
else
connection = radio_connection
channel = null
if (!istype(connection))
return
if(subspace_transmission)
// First, we want to generate a new radio signal
var/datum/signal/signal = new
signal.transmission_method = 2 // 2 would be a subspace transmission.
// transmission_method could probably be enumerated through #define. Would be neater.
// --- Finally, tag the actual signal with the appropriate values ---
signal.data = list(
// Identity-associated tags:
"mob" = new /mob/living/silicon/ai(src), // store a reference to the mob
"mobtype" = /mob/living/silicon/ai, // the mob's type
"realname" = from, // the mob's real name
"name" = from, // the mob's display name
"job" = "Automated Announcement", // the mob's job
"key" = "none", // the mob's key
"vmessage" = "*garbled automated announcement*", // the message to display if the voice wasn't understood
"vname" = "synthesized voice", // the name to display if the voice wasn't understood
"vmask" = 0, // 1 if the mob is using a voice gas mask
// We store things that would otherwise be kept in the actual mob
// so that they can be logged even AFTER the mob is deleted or something
// Other tags:
"compression" = rand(45,50), // compressed radio signal
"message" = message, // the actual sent message
"connection" = connection, // the radio connection to use
"radio" = src, // stores the radio used for transmission
"slow" = 0, // how much to sleep() before broadcasting - simulates net lag
"traffic" = 0 // dictates the total traffic sum that the signal went through
)
signal.frequency = connection.frequency // Quick frequency set
//#### Sending the signal to all subspace receivers ####//
for(var/obj/machinery/telecomms/receiver/R in world)
R.receive_signal(signal)
// Allinone can act as receivers.
for(var/obj/machinery/telecomms/allinone/R in world)
R.receive_signal(signal)
// Receiving code can be located in Telecommunications.dm
return
/* ###### Intercoms and station-bounced radios ###### */
var/filter_type = 2
/* --- Intercoms can only broadcast to other intercoms, but bounced radios can broadcast to bounced radios and intercoms --- */
if(istype(src, /obj/item/device/radio/intercom))
filter_type = 1
var/datum/signal/signal = new
signal.transmission_method = 2
/* --- Try to send a normal subspace broadcast first */
signal.data = list(
"mob" = new /mob/living/silicon/ai(src), // store a reference to the mob
"mobtype" = /mob/living/silicon/ai, // the mob's type
"realname" = from, // the mob's real name
"name" = from, // the mob's display name
"job" = "Automated Announcement", // the mob's job
"key" = "none", // the mob's key
"vmessage" = "*garbled automated announcement*", // the message to display if the voice wasn't understood
"vname" = "synthesized voice", // the name to display if the voice wasn't understood
"vmask" = 0, // 1 if the mob is using a voice gas mask
// We store things that would otherwise be kept in the actual mob
// so that they can be logged even AFTER the mob is deleted or something
// Other tags:
"compression" = 0, // compressed radio signal
"message" = message, // the actual sent message
"connection" = connection, // the radio connection to use
"radio" = src, // stores the radio used for transmission
"slow" = 0, // how much to sleep() before broadcasting - simulates net lag
"traffic" = 0 // dictates the total traffic sum that the signal went through
)
signal.frequency = connection.frequency // Quick frequency set
for(var/obj/machinery/telecomms/receiver/R in world)
R.receive_signal(signal)
sleep(rand(10,25)) // wait a little...
if(signal.data["done"])
del(signal) // delete the signal - we're done here.
return
// Oh my god; the comms are down or something because the signal hasn't been broadcasted yet.
// Send a mundane broadcast with limited targets:
Broadcast_Message(connection, new /mob/living/silicon/ai(src), 0, "*garbled automated announcement*",
src, message, from, "Automated Announcement", from, "synthesized voice",
filter_type, signal.data["compression"])
return
/obj/item/device/radio/talk_into(mob/M as mob, message, channel)
if(GLOBAL_RADIO_TYPE == 1) // NEW RADIO SYSTEMS: By Doohl
+17
View File
@@ -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)
+14 -7
View File
@@ -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)
+16
View File
@@ -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