Merge remote-tracking branch 'upstream/master' into pAI-Drone-Port

This commit is contained in:
DZD
2015-01-07 15:48:29 -05:00
452 changed files with 29149 additions and 40077 deletions
@@ -1,36 +0,0 @@
// Bluespace crystals, used in telescience and when crushed it will blink you to a random turf.
/obj/item/bluespace_crystal
name = "bluespace crystal"
desc = "A glowing bluespace crystal, not much is known about how they work. It looks very delicate."
icon = 'icons/obj/telescience.dmi'
icon_state = "bluespace_crystal"
w_class = 1
origin_tech = "bluespace=4;materials=3"
var/blink_range = 8 // The teleport range when crushed/thrown at someone.
/obj/item/bluespace_crystal/New()
..()
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
/obj/item/bluespace_crystal/attack_self(var/mob/user)
blink_mob(user)
user.drop_item()
user.visible_message("<span class='notice'>[user] crushes the [src]!</span>")
qdel(src)
/obj/item/bluespace_crystal/proc/blink_mob(var/mob/living/L)
do_teleport(L, get_turf(L), blink_range, asoundin = 'sound/effects/phasein.ogg')
/obj/item/bluespace_crystal/throw_impact(atom/hit_atom)
..()
if(isliving(hit_atom))
blink_mob(hit_atom)
qdel(src)
// Artifical bluespace crystal, doesn't give you much research.
/obj/item/bluespace_crystal/artificial
name = "artificial bluespace crystal"
desc = "An artificially made bluespace crystal, it looks delicate."
origin_tech = "bluespace=2"
blink_range = 4 // Not as good as the organic stuff!
@@ -129,6 +129,22 @@ var/global/list/obj/item/device/pda/PDAs = list()
icon_state = "pda-captain"
detonate = 0
//toff = 1
/obj/item/device/pda/heads/ntrep
default_cartridge = /obj/item/weapon/cartridge/supervisor
icon_state = "pda-h"
/obj/item/device/pda/heads/ntrec
default_cartridge = /obj/item/weapon/cartridge/supervisor
icon_state = "pda-h"
/obj/item/device/pda/heads/magistrate
default_cartridge = /obj/item/weapon/cartridge/supervisor
icon_state = "pda-h"
/obj/item/device/pda/heads/blueshield
default_cartridge = /obj/item/weapon/cartridge/hos
icon_state = "pda-h"
/obj/item/device/pda/cargo
default_cartridge = /obj/item/weapon/cartridge/quartermaster
@@ -192,6 +208,10 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/geneticist
default_cartridge = /obj/item/weapon/cartridge/medical
icon_state = "pda-genetics"
/obj/item/device/pda/centcom
default_cartridge = /obj/item/weapon/cartridge/centcom
icon_state = "pda-h"
// Special AI/pAI PDAs that cannot explode.
@@ -196,6 +196,35 @@
access_reagent_scanner = 1
access_status_display = 1
access_atmos = 1
/obj/item/weapon/cartridge/captain/New()
..()
spawn(5)
radio = new /obj/item/radio/integrated/beepsky(src)
/obj/item/weapon/cartridge/supervisor
name = "Easy-Record DELUXE"
icon_state = "cart-h"
access_status_display = 1
access_security = 1
/obj/item/weapon/cartridge/centcom
name = "Value-PAK Cartridge"
desc = "Now with 200% more value!"
icon_state = "cart-c"
access_quartermaster = 1
access_janitor = 1
access_engine = 1
access_security = 1
access_medical = 1
access_reagent_scanner = 1
access_status_display = 1
access_atmos = 1
/obj/item/weapon/cartridge/centcom/New()
..()
spawn(5)
radio = new /obj/item/radio/integrated/beepsky(src)
/obj/item/weapon/cartridge/syndicate
name = "Detomatix Cartridge"
+6 -3
View File
@@ -18,7 +18,6 @@
/obj/item/device/flash/proc/clown_check(mob/user)
if(user && (M_CLUMSY in user.mutations) && prob(50))
flash_carbon(user, user, 15, 0)
user.visible_message("<span class='disarm'>[user] blinds [user] with the flash!</span>")
return 0
return 1
@@ -42,7 +41,7 @@
times_used = max(0, times_used) //sanity
/obj/item/device/flash/proc/try_use_flash(var/mob/user)
/obj/item/device/flash/proc/try_use_flash(var/mob/user = null)
flash_recharge(user)
if(broken)
@@ -67,6 +66,11 @@
if(user && convert)
terrible_conversion_proc(M, user)
M.Stun(1)
user.visible_message("<span class='disarm'>[user] blinds [M] with the flash!</span>")
return 1
else
user.visible_message("<span class='disarm'>[user] fails to blind [M] with the flash!</span>")
return 0
/obj/item/device/flash/attack(mob/living/M, mob/user)
if(!try_use_flash(user))
@@ -74,7 +78,6 @@
if(iscarbon(M))
flash_carbon(M, user, 5, 1)
user.visible_message("<span class='disarm'>[user] blinds [M] with the flash!</span>")
return 1
else if(issilicon(M))
-84
View File
@@ -1,84 +0,0 @@
var/list/sps_list = list()
/obj/item/device/sps
name = "space positioning system"
desc = "Helping lost spacemen find their way through the planets since 2016."
icon = 'icons/obj/telescience.dmi'
icon_state = "gps-c"
w_class = 2.0
slot_flags = SLOT_BELT
origin_tech = "materials=2;magnets=3;bluespace=2"
var/spstag = "COM0"
var/emped = 0
var/turf/locked_location
/obj/item/device/sps/New()
..()
sps_list.Add(src)
name = "space positioning system ([spstag])"
overlays += "working"
/obj/item/device/sps/Destroy()
sps_list.Remove(src)
..()
/obj/item/device/sps/emp_act(severity)
emped = 1
overlays -= "working"
overlays += "emp"
spawn(300)
emped = 0
overlays -= "emp"
overlays += "working"
/obj/item/device/sps/attack_self(mob/user as mob)
var/obj/item/device/sps/t = ""
var/sps_window_height = 110 + sps_list.len * 20 // Variable window height, depending on how many sps units there are to show
if(emped)
t += "ERROR"
else
t += "<A href='?src=\ref[src];tag=1'>Set Tag</A><A href='?src=\ref[src];refresh=1'>Refresh</A>"
t += "<BR>Tag: [spstag]"
if(locked_location && locked_location.loc)
t += "<BR>Bluespace coordinates saved: [locked_location.loc]"
sps_window_height += 20
for(var/obj/item/device/sps/G in sps_list)
var/turf/pos = get_turf(G)
var/area/sps_area = get_area(G)
var/tracked_spstag = G.spstag
if(G.emped == 1)
t += "<BR>[tracked_spstag]: ERROR"
else
t += "<BR>[tracked_spstag]: [format_text(sps_area.name)] ([pos.x], [pos.y], [pos.z])"
var/datum/browser/popup = new(user, "sps", name, 360, min(sps_window_height, 800))
popup.set_content(t)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.open()
/obj/item/device/sps/Topic(href, href_list)
..()
if(href_list["tag"] )
var/a = input("Please enter desired tag.", name, spstag) as text
a = uppertext(copytext(sanitize(a), 1, 5))
if(src.loc == usr)
spstag = a
name = "space positioning system ([spstag])"
attack_self(usr)
if(href_list["refresh"] )
if(src.loc == usr)
attack_self(usr)
/obj/item/device/sps/science
icon_state = "gps-s"
spstag = "SCI0"
/obj/item/device/sps/engineering
icon_state = "gps-e"
spstag = "ENG0"
/obj/item/device/sps/mining
icon_state = "gps-m"
spstag = "MINE0"
desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life."
@@ -107,7 +107,7 @@
M.Weaken(10)
if(master && wires & 1)
if(master)
master.receive_signal()
return
@@ -19,123 +19,130 @@
icon_state = "cypherkey"
channels = list("Syndicate" = 1)
origin_tech = "syndicate=3"
syndie = 1//Signifies that it de-crypts Syndicate transmissions
syndie = 1 //Signifies that it de-crypts Syndicate transmissions
/obj/item/device/encryptionkey/syndicate/hacked
name = "Standard Encryption Key"
desc = "An encryption key for a radio headset. Has no special codes in it. Looks more sophisticated than usual."
channels = list("Command" = 0, "Security" = 0, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0)
desc = "An encryption key for a radio headset. Has no special codes in it. Looks more sophisticated than usual."
channels = list("Command" = 0, "Security" = 0, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0, "Service" = 0, "Syndicate" = 1)
origin_tech = "syndicate=3"
syndie = 1
/obj/item/device/encryptionkey/binary
name = "binary translator key"
desc = "An encryption key for a radio headset. To access the binary channel, use :b."
icon_state = "cypherkey"
translate_binary = 1
origin_tech = "syndicate=3"
/obj/item/device/encryptionkey/headset_sec
name = "Security Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "sec_cypherkey"
channels = list("Security" = 1)
/obj/item/device/encryptionkey/headset_eng
name = "Engineering Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "eng_cypherkey"
channels = list("Engineering" = 1)
/obj/item/device/encryptionkey/headset_rob
name = "Robotics Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "rob_cypherkey"
channels = list("Engineering" = 1, "Science" = 1)
/obj/item/device/encryptionkey/headset_med
name = "Medical Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "med_cypherkey"
channels = list("Medical" = 1)
/obj/item/device/encryptionkey/headset_sci
name = "Science Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "sci_cypherkey"
channels = list("Science" = 1)
/obj/item/device/encryptionkey/headset_medsci
name = "Medical Research Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "medsci_cypherkey"
channels = list("Medical" = 1, "Science" = 1)
/obj/item/device/encryptionkey/headset_com
name = "Command Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "com_cypherkey"
channels = list("Command" = 1)
/obj/item/device/encryptionkey/heads/captain
name = "Captain's Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "cap_cypherkey"
channels = list("Command" = 1, "Security" = 1, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0, "Service" = 0)
/obj/item/device/encryptionkey/heads/rd
name = "Research Director's Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "rd_cypherkey"
channels = list("Science" = 1, "Command" = 1)
/obj/item/device/encryptionkey/heads/hos
name = "Head of Security's Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "hos_cypherkey"
channels = list("Security" = 1, "Command" = 1)
/obj/item/device/encryptionkey/heads/ce
name = "Chief Engineer's Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "ce_cypherkey"
channels = list("Engineering" = 1, "Command" = 1)
/obj/item/device/encryptionkey/heads/cmo
name = "Chief Medical Officer's Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "cmo_cypherkey"
channels = list("Medical" = 1, "Command" = 1)
/obj/item/device/encryptionkey/heads/hop
name = "Head of Personnel's Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "hop_cypherkey"
channels = list("Supply" = 1, "Service" = 1, "Command" = 1, "Security" = 0)
channels = list("Supply" = 1, "Service" = 1, "Security" = 0, "Command" = 1)
/obj/item/device/encryptionkey/heads/ntrep
name = "Nanotrasen Representative's Encryption Key"
icon_state = "com_cypherkey"
channels = list("Command" = 1, "Security" = 0, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0, "Service" = 0)
/obj/item/device/encryptionkey/heads/ntrec
name = "Nanotrasen Recruiter's Encryption Key"
icon_state = "com_cypherkey"
channels = list("Command" = 1, "Security" = 0)
/obj/item/device/encryptionkey/heads/magistrate
name = "Magistrate's Encryption Key"
icon_state = "com_cypherkey"
channels = list("Command" = 1, "Security" = 1)
/obj/item/device/encryptionkey/heads/blueshield
name = "Blueshield's Encryption Key"
icon_state = "com_cypherkey"
channels = list("Command" = 1, "Security" = 1)
/*
/obj/item/device/encryptionkey/headset_mine
name = "Mining Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "mine_cypherkey"
channels = list("Mining" = 1)
/obj/item/device/encryptionkey/heads/qm
name = "Quartermaster's Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "qm_cypherkey"
channels = list("Cargo" = 1, "Mining" = 1)
*/
/obj/item/device/encryptionkey/headset_cargo
name = "Supply Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "cargo_cypherkey"
channels = list("Supply" = 1)
/obj/item/device/encryptionkey/headset_service
name = "Service Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "srv_cypherkey"
channels = list("Service" = 1)
/obj/item/device/encryptionkey/ert
name = "Nanotrasen ERT Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
channels = list("Response Team" = 1, "Science" = 1, "Command" = 1, "Medical" = 1, "Engineering" = 1, "Security" = 1, "Supply" = 1, "Service" = 1)
/obj/item/device/encryptionkey/heads/ai_integrated //ported from bay, this goes 'inside' the AI.
@@ -17,7 +17,6 @@
/obj/item/device/radio/headset/New()
..()
keyslot1 = new /obj/item/device/encryptionkey/
recalculateChannels()
@@ -52,119 +51,147 @@
desc = "This is used by your elite security force. To access the security channel, use :s."
icon_state = "sec_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_sec
keyslot1 = new /obj/item/device/encryptionkey/headset_sec
/obj/item/device/radio/headset/headset_eng
name = "engineering radio headset"
desc = "When the engineers wish to chat like girls. To access the engineering channel, use :e. "
icon_state = "eng_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_eng
keyslot1 = new /obj/item/device/encryptionkey/headset_eng
/obj/item/device/radio/headset/headset_rob
name = "robotics radio headset"
desc = "Made specifically for the roboticists who cannot decide between departments. To access the engineering channel, use :e. For research, use :n."
icon_state = "rob_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_rob
keyslot1 = new /obj/item/device/encryptionkey/headset_rob
/obj/item/device/radio/headset/headset_med
name = "medical radio headset"
desc = "A headset for the trained staff of the medbay. To access the medical channel, use :m."
icon_state = "med_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_med
keyslot1 = new /obj/item/device/encryptionkey/headset_med
/obj/item/device/radio/headset/headset_sci
name = "science radio headset"
desc = "A sciency headset. Like usual. To access the science channel, use :n."
icon_state = "sci_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_sci
keyslot1 = new /obj/item/device/encryptionkey/headset_sci
/obj/item/device/radio/headset/headset_medsci
name = "medical research radio headset"
desc = "A headset that is a result of the mating between medical and science. To access the medical channel, use :m. For science, use :n."
icon_state = "medsci_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_medsci
keyslot1 = new /obj/item/device/encryptionkey/headset_medsci
/obj/item/device/radio/headset/headset_com
name = "command radio headset"
desc = "A headset with a commanding channel. To access the command channel, use :c."
icon_state = "com_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_com
keyslot1 = new /obj/item/device/encryptionkey/headset_com
/obj/item/device/radio/headset/heads/captain
name = "captain's headset"
desc = "The headset of the boss. Channels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :z - service, :m - medical, :n - science."
icon_state = "com_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/heads/captain
keyslot1 = new /obj/item/device/encryptionkey/heads/captain
/obj/item/device/radio/headset/heads/rd
name = "Research Director's headset"
desc = "Headset of the researching God. To access the science channel, use :n. For command, use :c."
icon_state = "com_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/heads/rd
keyslot1 = new /obj/item/device/encryptionkey/heads/rd
/obj/item/device/radio/headset/heads/hos
name = "head of security's headset"
desc = "The headset of the man who protects your worthless lifes. To access the security channel, use :s. For command, use :c."
icon_state = "com_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/heads/hos
keyslot1 = new /obj/item/device/encryptionkey/heads/hos
/obj/item/device/radio/headset/heads/ce
name = "chief engineer's headset"
desc = "The headset of the guy who is in charge of morons. To access the engineering channel, use :e. For command, use :c."
icon_state = "com_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/heads/ce
keyslot1 = new /obj/item/device/encryptionkey/heads/ce
/obj/item/device/radio/headset/heads/cmo
name = "chief medical officer's headset"
desc = "The headset of the highly trained medical chief. To access the medical channel, use :m. For command, use :c."
icon_state = "com_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/heads/cmo
keyslot1 = new /obj/item/device/encryptionkey/heads/cmo
/obj/item/device/radio/headset/heads/hop
name = "head of personnel's headset"
desc = "The headset of the guy who will one day be captain. Channels are as follows: :u - supply, :z - service, :c - command, :s - security"
desc = "The headset of the guy who will one day be captain. Channels are as follows: :u - supply, :z - service, :s - security, :c - command."
icon_state = "com_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/heads/hop
keyslot1 = new /obj/item/device/encryptionkey/heads/hop
/*
/obj/item/device/radio/headset/headset_mine
name = "mining radio headset"
desc = "Headset used by miners. How useless. To access the mining channel, use :d."
icon_state = "mine_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_mine
keyslot1 = new /obj/item/device/encryptionkey/headset_mine
/obj/item/device/radio/headset/heads/qm
name = "quartermaster's headset"
desc = "The headset of the man who control your toiletpaper supply. To access the cargo channel, use :q. For mining, use :d."
icon_state = "cargo_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/heads/qm
keyslot1 = new /obj/item/device/encryptionkey/heads/qm
*/
/obj/item/device/radio/headset/headset_cargo
name = "supply radio headset"
desc = "A headset used by the QM and his slaves. To access the supply channel, use :u."
desc = "A headset used by the cargo department. To access the supply channel, use :u."
icon_state = "cargo_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_cargo
keyslot1 = new /obj/item/device/encryptionkey/headset_cargo
/obj/item/device/radio/headset/headset_service
name = "service radio headset"
desc = "Headset used by the service staff, tasked with keeping the station full, happy and clean. To access the service channel, use :z."
icon_state = "srv_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_service
keyslot1 = new /obj/item/device/encryptionkey/headset_service
/obj/item/device/radio/headset/heads/ntrep
name = "nanotrasen representative's headset"
desc = "The headset of the Nanotrasen Representative. Channels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :z - service, :m - medical, :n - science."
icon_state = "com_headset"
item_state = "headset"
keyslot1 = new /obj/item/device/encryptionkey/heads/ntrep
/obj/item/device/radio/headset/heads/ntrec
name = "nanotrasen recruiter's headset"
desc = "The headset of the Nanotrasen Recruiter. Channels are as follows: :c - command, :s - security."
icon_state = "com_headset"
item_state = "headset"
keyslot1 = new /obj/item/device/encryptionkey/heads/ntrec
/obj/item/device/radio/headset/heads/magistrate
name = "magistrate's headset"
desc = "The headset of the Magistrate. Channels are as follows: :c - command, :s - security."
icon_state = "com_headset"
item_state = "headset"
keyslot1 = new /obj/item/device/encryptionkey/heads/magistrate
/obj/item/device/radio/headset/heads/blueshield
name = "blueshield's headset"
desc = "The headset of the Blueshield. Channels are as follows: :c - command, :s - security."
icon_state = "com_headset"
item_state = "headset"
keyslot1 = new /obj/item/device/encryptionkey/heads/blueshield
/obj/item/device/radio/headset/ert
name = "CentCom Response Team headset"
@@ -172,7 +199,7 @@
icon_state = "com_headset"
item_state = "headset"
freerange = 1
keyslot2 = new /obj/item/device/encryptionkey/ert
keyslot1 = new /obj/item/device/encryptionkey/ert
//The below was ported from Baystation.
/obj/item/device/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway.
@@ -223,7 +250,7 @@
user << "You pop out the encryption keys in the headset!"
else
user << "This headset doesn't have any encryption keys! How useless..."
user << "This headset doesn't have any unique encryption keys! How useless..."
if(istype(W, /obj/item/device/encryptionkey/))
if(keyslot1 && keyslot2)
@@ -4,7 +4,7 @@
icon_state = "intercom"
anchored = 1
w_class = 4.0
canhear_range = 2
canhear_range = 5
flags = FPRINT | CONDUCT | TABLEPASS | NOBLOODY
var/number = 0
var/anyai = 1
@@ -196,7 +196,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
/obj/item/device/radio/proc/isWireCut(var/index)
return wires.IsIndexCut(index)
/obj/item/device/radio/proc/autosay(var/message, var/from, var/channel) //BS12 EDIT
/obj/item/device/radio/proc/autosay(var/message, var/from, var/channel, var/zlevel = list(1)) //BS12 EDIT
var/datum/radio_frequency/connection = null
if(channel && channels && channels.len > 0)
if (channel == "department")
@@ -215,7 +215,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
Broadcast_Message(connection, A,
0, "*garbled automated announcement*", src,
message, from, "Automated Announcement", from, "synthesized voice",
4, 0, list(1), 1459)
4, 0, zlevel, connection.frequency)
del(A)
return
+5 -2
View File
@@ -91,7 +91,8 @@ REAGENT SCANNER
/obj/item/device/healthanalyzer
name = "Health Analyzer"
icon_state = "health"
item_state = "analyzer"
item_state = "healthanalyzer"
icon_override = 'icons/mob/in-hand/tools.dmi'
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
flags = FPRINT | TABLEPASS | CONDUCT
slot_flags = SLOT_BELT
@@ -188,8 +189,10 @@ REAGENT SCANNER
var/datum/data/record/V = virusDB[ID]
user.show_message(text("\red Warning: Pathogen [V.fields["name"]] detected in subject's blood. Known antigen : [V.fields["antigen"]]"))
// user.show_message(text("\red Warning: Unknown pathogen detected in subject's blood."))
if(M.getStaminaLoss())
user.show_message("<span class='info'>Subject appears to be suffering from fatigue.</span>")
if (M.getCloneLoss())
user.show_message("\red Subject appears to have been imperfectly cloned.")
user.show_message("<span class='warning'>Subject appears to have [M.getCloneLoss() > 30 ? "severe" : "minor"] cellular damage.</span>")
// if (M.reagents && M.reagents.get_reagent_amount("inaprovaline"))
// user.show_message("\blue Bloodstream Analysis located [M.reagents:get_reagent_amount("inaprovaline")] units of rejuvenation chemicals.")
if (M.has_brain_worms())
@@ -75,7 +75,8 @@ effective or pretty fucking useless.
/obj/item/device/rad_laser
name = "Health Analyzer"
icon_state = "health"
item_state = "analyzer"
item_state = "healthanalyzer"
icon_override = 'icons/mob/in-hand/tools.dmi'
desc = "A hand-held body scanner able to distinguish vital signs of the subject. A strange microlaser is hooked on to the scanning end."
flags = FPRINT | TABLEPASS | CONDUCT
slot_flags = SLOT_BELT
+16 -22
View File
@@ -12,13 +12,11 @@
/obj/item/stack/medical/attack(mob/living/carbon/M as mob, mob/user as mob)
if (!istype(M))
user << "\red \The [src] cannot be applied to [M]!"
user << "<span class='danger'>\The [src] cannot be applied to [M]!</span>"
return 1
if ( ! (istype(user, /mob/living/carbon/human) || \
istype(user, /mob/living/silicon) || \
istype(user, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") )
user << "\red You don't have the dexterity to do this!"
if (!(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon) || istype(user, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey"))
user << "<span class='danger'>You don't have the dexterity to do this!</span>"
return 1
if (istype(M, /mob/living/carbon/human))
@@ -27,33 +25,30 @@
if(affecting.display_name == "head")
if(H.head && istype(H.head,/obj/item/clothing/head/helmet/space))
user << "\red You can't apply [src] through [H.head]!"
user << "<span class='danger'>You can't apply [src] through [H.head]!</span>"
return 1
else
if(H.wear_suit && istype(H.wear_suit,/obj/item/clothing/suit/space))
user << "\red You can't apply [src] through [H.wear_suit]!"
user << "<span class='danger'>You can't apply [src] through [H.wear_suit]!</span>"
return 1
if(affecting.status & ORGAN_ROBOT)
user << "\red This isn't useful at all on a robotic limb.."
user << "<span class='danger'>This can't be used on a robotic limb.</span>"
return 1
if(affecting.status & ORGAN_PEG)
user << "\red This isn't useful at all on a peg limb. It's fucking wood."
user << "<span class='danger'>This can't be used on a peg limb.</span>"
return 1
H.UpdateDamageIcon()
else
M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2))
user.visible_message( \
"\blue [M] has been applied with [src] by [user].", \
"\blue You apply \the [src] to [M]." \
)
user.visible_message("<span class='notice'>[M] has been applied with [src] by [user].</span>","<span class='notice'>You apply \the [src] to [M].</span>")
use(1)
M.updatehealth()
/obj/item/stack/medical/bruise_pack
name = "roll of gauze"
singular_name = "gauze length"
@@ -80,21 +75,19 @@
if (W.current_stage <= W.max_bleeding_stage)
user.visible_message( "\blue [user] bandages \the [W.desc] on [M]'s [affecting.display_name].", \
"\blue You bandage \the [W.desc] on [M]'s [affecting.display_name]." )
//H.add_side_effect("Itch")
else if (istype(W,/datum/wound/bruise))
user.visible_message( "\blue [user] places a bruise patch over \the [W.desc] on [M]'s [affecting.display_name].", \
"\blue You place a bruise patch over \the [W.desc] on [M]'s [affecting.display_name]." )
else
user.visible_message( "\blue [user] places a bandaid over \the [W.desc] on [M]'s [affecting.display_name].", \
"\blue You place a bandaid over \the [W.desc] on [M]'s [affecting.display_name]." )
use(1)
else
if (can_operate(H)) //Checks if mob is lying down on table for surgery
if (do_surgery(H,user,src))
return
else
user << "<span class='notice'>The [affecting.display_name] is cut open, you'll need more than a bandage!</span>"
affecting.heal_damage(src.heal_brute, src.heal_burn, 0)
use(1)
else
M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2))
use(1)
/obj/item/stack/medical/ointment
name = "ointment"
desc = "Used to treat those nasty burns."
@@ -119,6 +112,7 @@
else
user.visible_message( "\blue [user] salves the wounds on [M]'s [affecting.display_name].", \
"\blue You salve the wounds on [M]'s [affecting.display_name]." )
affecting.heal_damage(src.heal_brute, src.heal_burn, 0)
use(1)
else
if (can_operate(H)) //Checks if mob is lying down on table for surgery
@@ -18,7 +18,7 @@
desc = "HOLY SHEET! That is a lot of glass."
singular_name = "glass sheet"
icon_state = "sheet-glass"
g_amt = 3750
g_amt = MINERAL_MATERIAL_AMOUNT
origin_tech = "materials=1"
var/created_window = /obj/structure/window/basic
var/full_window = /obj/structure/window/full/basic
@@ -127,8 +127,8 @@
desc = "Glass which seems to have rods or something stuck in them."
singular_name = "reinforced glass sheet"
icon_state = "sheet-rglass"
g_amt = 3750
m_amt = 1875
g_amt = MINERAL_MATERIAL_AMOUNT
m_amt = MINERAL_MATERIAL_AMOUNT / 2
origin_tech = "materials=2"
var/created_window = /obj/structure/window/reinforced
var/full_window = /obj/structure/window/full/reinforced
@@ -246,7 +246,7 @@
desc = "A very strong and very resistant sheet of a plasma-glass alloy."
singular_name = "glass sheet"
icon_state = "sheet-plasmaglass"
g_amt = 7500
g_amt = MINERAL_MATERIAL_AMOUNT * 2
origin_tech = "materials=3;plasma=2"
var/created_window = /obj/structure/window/plasmabasic
var/full_window = /obj/structure/window/full/plasmabasic
@@ -335,8 +335,8 @@
desc = "Plasma glass which seems to have rods or something stuck in them."
singular_name = "reinforced plasma glass sheet"
icon_state = "sheet-plasmarglass"
g_amt = 7500
m_amt = 1875
g_amt = MINERAL_MATERIAL_AMOUNT * 2
m_amt = MINERAL_MATERIAL_AMOUNT / 2
origin_tech = "materials=4;plasma=2"
var/created_window = /obj/structure/window/plasmareinforced
var/full_window = /obj/structure/window/full/plasmareinforced
@@ -8,7 +8,7 @@
throw_speed = 3
throw_range = 3
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "smashed")
var/perunit = 3750
var/perunit = MINERAL_MATERIAL_AMOUNT
var/sheettype = null //this is used for girders in the creation of walls/false walls
+8 -8
View File
@@ -161,15 +161,15 @@
return
return
/obj/item/stack/proc/use(var/amount)
src.amount-=amount
if (src.amount<=0)
var/oldsrc = src
src = null //dont kill proc after del()
/obj/item/stack/proc/use(var/used)
if (amount < used)
return 0
amount -= used
if (amount <= 0)
if(usr)
usr.before_take_item(oldsrc)
qdel(oldsrc)
return
usr.before_take_item(src, 1)
qdel(src)
return 1
/obj/item/stack/proc/add_to_stacks(mob/usr as mob)
var/obj/item/stack/oldsrc = src
+14 -14
View File
@@ -6,7 +6,7 @@ RCD
*/
/obj/item/weapon/rcd
name = "rapid-construction-device (RCD)"
desc = "A device used to rapidly build walls/floor."
desc = "A device used to rapidly build and deconstruct walls and floors."
icon = 'icons/obj/items.dmi'
icon_state = "rcd"
opacity = 0
@@ -18,7 +18,7 @@ RCD
throw_speed = 3
throw_range = 5
w_class = 3.0
m_amt = 30000
m_amt = 100000
origin_tech = "engineering=4;materials=2"
var/datum/effect/effect/system/spark_spread/spark_system
var/matter = 0
@@ -29,7 +29,7 @@ RCD
New()
desc = "A RCD. It currently holds [matter]/30 matter-units."
desc = "A RCD. It currently holds [matter]/100 matter-units."
src.spark_system = new /datum/effect/effect/system/spark_spread
spark_system.set_up(5, 0, src)
spark_system.attach(src)
@@ -39,15 +39,15 @@ RCD
attackby(obj/item/weapon/W, mob/user)
..()
if(istype(W, /obj/item/weapon/rcd_ammo))
if((matter + 10) > 30)
if((matter + 20) > 100)
user << "<span class='notice'>The RCD cant hold any more matter-units.</span>"
return
user.drop_item()
del(W)
matter += 10
matter += 20
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
user << "<span class='notice'>The RCD now holds [matter]/30 matter-units.</span>"
desc = "A RCD. It currently holds [matter]/30 matter-units."
user << "<span class='notice'>The RCD now holds [matter]/100 matter-units.</span>"
desc = "A RCD. It currently holds [matter]/100 matter-units."
return
@@ -148,11 +148,11 @@ RCD
return 0
if(istype(A, /obj/machinery/door/airlock))
if(checkResource(10, user))
if(checkResource(20, user))
user << "Deconstructing Airlock..."
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 50))
if(!useResource(10, user)) return 0
if(!useResource(20, user)) return 0
activate()
del(A)
return 1
@@ -166,7 +166,7 @@ RCD
if(matter < amount)
return 0
matter -= amount
desc = "A RCD. It currently holds [matter]/30 matter-units."
desc = "A RCD. It currently holds [matter]/100 matter-units."
return 1
/obj/item/weapon/rcd/proc/checkResource(var/amount, var/mob/user)
@@ -174,17 +174,17 @@ RCD
/obj/item/weapon/rcd/borg/useResource(var/amount, var/mob/user)
if(!isrobot(user))
return 0
return user:cell:use(amount * 30)
return user:cell:use(amount * 160)
/obj/item/weapon/rcd/borg/checkResource(var/amount, var/mob/user)
if(!isrobot(user))
return 0
return user:cell:charge >= (amount * 30)
return user:cell:charge >= (amount * 160)
/obj/item/weapon/rcd/borg/New()
..()
desc = "A device used to rapidly build walls/floor."
canRwall = 0
desc = "A device used to rapidly build and deconstruct walls and floors."
canRwall = 1
/obj/item/weapon/rcd_ammo
name = "compressed matter cartridge"
-59
View File
@@ -1,59 +0,0 @@
/obj/item/weapon/rcs
name = "rapid-crate-sender (RCS)"
desc = "Use this to send crates and closets to cargo telepads."
icon = 'icons/obj/items.dmi'
icon_state = "rcs"
opacity = 0
density = 0
anchored = 0.0
flags = FPRINT | CONDUCT
force = 10.0
throwforce = 10.0
throw_speed = 1
throw_range = 5
var/rcharges = 10
var/obj/machinery/pad = null
var/last_charge = 30
var/mode = 0
var/rand_x = 0
var/rand_y = 0
var/emagged = 0
var/teleporting = 0
/obj/item/weapon/rcs/New()
processing_objects.Add(src)
desc = "Use this to send crates and closets to cargo telepads. There are [rcharges] charges left."
/obj/item/weapon/rcs/Destroy()
processing_objects.Remove(src)
..()
/obj/item/weapon/rcs/process()
if(rcharges > 10)
rcharges = 10
if(last_charge == 0)
rcharges++
desc = "Use this to send crates and closets to cargo telepads. There are [rcharges] charges left."
last_charge = 30
else
last_charge--
/obj/item/weapon/rcs/attack_self(mob/user)
if(emagged)
if(mode == 0)
mode = 1
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
user << "\red The telepad locator has become uncalibrated."
else
mode = 0
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
user << "\blue You calibrate the telepad locator."
/obj/item/weapon/rcs/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/weapon/card/emag) && emagged == 0)
emagged = 1
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
user << "\red You emag the RCS. Click on it to toggle between modes."
return
+356 -151
View File
@@ -1,159 +1,364 @@
/obj/item/weapon/melee/defibrilator
name = "emergency defibrilator"
desc = "A handheld emergency defibrilator, used to bring people back from the brink of death or put them there."
icon_state = "defib_full"
item_state = "defib"
flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
//backpack item
/obj/item/weapon/defibrillator
name = "defibrillator"
desc = "A device that delivers powerful shocks to detachable paddles that resuscitate incapacitated patients."
icon = 'icons/obj/weapons.dmi'
icon_state = "defibunit"
item_state = "defibunit"
icon_override = 'icons/mob/in-hand/tools.dmi'
slot_flags = SLOT_BACK
force = 5
throwforce = 5
w_class = 3
var/emagged = 0
var/charges = 10
var/status = 0
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread
origin_tech = "biotech=3"
throwforce = 6
w_class = 4
origin_tech = "biotech=4"
action_button_name = "Toggle Paddles"
icon_action_button = "action_defibunit"
suicide_act(mob/user)
viewers(user) << "\red <b>[user] is putting the live paddles on \his chest! It looks like \he's trying to commit suicide.</b>"
return (OXYLOSS)
var/on = 0 //if the paddles are equipped (1) or on the defib (0)
var/safety = 1 //if you can zap people with the defibs on harm mode
var/powered = 0 //if there's a cell in the defib with enough power for a revive, blocks paddles from reviving otherwise
var/obj/item/weapon/twohanded/shockpaddles/paddles
var/obj/item/weapon/cell/high/bcell = null
/obj/item/weapon/melee/defibrilator/update_icon()
if(!status)
if(charges >= 7)
icon_state = "defib_full"
if(charges <= 6 && charges >= 4)
icon_state = "defib_half"
if(charges <= 3 && charges >= 1)
icon_state = "defib_low"
if(charges <= 0)
icon_state = "defib_empty"
else
if(charges >= 7)
icon_state = "defibpaddleout_full"
if(charges <= 6 && charges >= 4)
icon_state = "defibpaddleout_half"
if(charges <= 3 && charges >= 1)
icon_state = "defibpaddleout_low"
/obj/item/weapon/melee/defibrilator/attack_self(mob/user as mob)
if(status && (M_CLUMSY in user.mutations) && prob(50))
spark_system.attach(user)
spark_system.set_up(5, 0, src)
spark_system.start()
user << "\red You touch the paddles together shorting the device."
user.Weaken(5)
charges--
if(charges < 1)
status = 0
update_icon()
return
if(charges > 0)
status = !status
user << "<span class='notice'>\The [src] is now [status ? "on" : "off"].</span>"
playsound(get_turf(src), "sparks", 75, 1, -1)
update_icon()
else
status = 0
user << "<span class='warning'>\The [src] is out of charge.</span>"
add_fingerprint(user)
/obj/item/weapon/melee/defibrilator/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/weapon/defibrillator/New() //starts without a cell for rnd
..()
if(istype(W, /obj/item/weapon/card/emag))
var/image/I = image("icon" = "icons/obj/weapons.dmi", "icon_state" = "defib_emag")
if(emagged == 0)
emagged = 1
usr << "\red [W] unlocks [src]'s safety protocols"
overlays += I
else
emagged = 0
usr << "\blue [W] sets [src]'s safety protocols"
overlays -= I
paddles = make_paddles()
update_icon()
return
/obj/item/weapon/melee/defibrilator/attack(mob/M as mob, mob/user as mob)
var/tobehealed
var/threshhold = -config.health_threshold_dead
var/mob/living/carbon/human/H = M
if(!ishuman(M))
..()
return
if(status)
if(user.a_intent == "hurt" && emagged)
H.visible_message("<span class='danger'>[M.name] has been touched by the defibrilator paddles by [user]!</span>")
if(charges >= 2)
H.Weaken(10)
H.adjustOxyLoss(10)
else
H.Weaken(5)
H.adjustOxyLoss(5)
H.updatehealth() //forces health update before next life tick
spark_system.attach(M)
spark_system.set_up(5, 0, M)
spark_system.start()
charges -= 2
if(charges < 0)
charges = 0
if(!charges)
status = 0
/obj/item/weapon/defibrillator/loaded/New() //starts with hicap
..()
paddles = make_paddles()
bcell = new(src)
update_icon()
return
/obj/item/weapon/defibrillator/update_icon()
update_power()
update_overlays()
update_charge()
/obj/item/weapon/defibrillator/proc/update_power()
if(bcell)
if(bcell.charge < paddles.revivecost)
powered = 0
else
powered = 1
else
powered = 0
/obj/item/weapon/defibrillator/proc/update_overlays()
overlays.Cut()
if(!on)
overlays += "defibunit-paddles"
if(powered)
overlays += "defibunit-powered"
if(!bcell)
overlays += "defibunit-nocell"
if(!safety)
overlays += "defibunit-emagged"
/obj/item/weapon/defibrillator/proc/update_charge()
if(powered) //so it doesn't show charge if it's unpowered
if(bcell)
var/ratio = bcell.charge / bcell.maxcharge
ratio = Ceiling(ratio*4) * 25
overlays += "defibunit-charge[ratio]"
/obj/item/weapon/defibrillator/CheckParts()
bcell = locate(/obj/item/weapon/cell) in contents
update_icon()
/obj/item/weapon/defibrillator/ui_action_click()
if(usr.get_item_by_slot(slot_back) == src)
toggle_paddles()
else
usr << "<span class='warning'>Put the defibrillator on your back first!</span>"
return
/obj/item/weapon/defibrillator/attackby(obj/item/weapon/W, mob/user)
if(istype(W, /obj/item/weapon/cell))
var/obj/item/weapon/cell/C = W
if(bcell)
user << "<span class='notice'>[src] already has a cell.</span>"
else
if(C.maxcharge < paddles.revivecost)
user << "<span class='notice'>[src] requires a higher capacity cell.</span>"
return
user.drop_item()
W.loc = src
bcell = W
user << "<span class='notice'>You install a cell in [src].</span>"
if(istype(W, /obj/item/weapon/card/emag))
if(safety)
safety = 0
user << "<span class='warning'>You silently disable [src]'s safety protocols with the [W]."
else
safety = 1
user << "<span class='notice'>You silently enable [src]'s safety protocols with the [W]."
if(istype(W, /obj/item/weapon/screwdriver))
if(bcell)
bcell.updateicon()
bcell.loc = get_turf(src.loc)
bcell = null
user << "<span class='notice'>You remove the cell from the [src].</span>"
update_icon()
return
/obj/item/weapon/defibrillator/emp_act(severity)
if(bcell)
deductcharge(1000 / severity)
if(bcell.reliability != 100 && prob(50/severity))
bcell.reliability -= 10 / severity
if(safety)
safety = 0
src.visible_message("<span class='notice'>[src] beeps: Safety protocols disabled!</span>")
playsound(get_turf(src), 'sound/machines/twobeep.ogg', 50, 0)
else
safety = 1
src.visible_message("<span class='notice'>[src] beeps: Safety protocols enabled!</span>")
playsound(get_turf(src), 'sound/machines/twobeep.ogg', 50, 0)
update_icon()
..()
/obj/item/weapon/defibrillator/verb/toggle_paddles()
set name = "Toggle Paddles"
set category = "Object"
on = !on
var/mob/living/carbon/human/user = usr
if(on)
//Detach the paddles into the user's hands
if(!usr.put_in_hands(paddles))
on = 0
user << "<span class='warning'>You need a free hand to hold the paddles!</span>"
update_icon()
playsound(get_turf(src), 'sound/weapons/Egloves.ogg', 50, 1, -1)
user.attack_log += "\[[time_stamp()]\]<font color='red'> Defibrilated [H.name] ([H.ckey]) with [src.name]</font>"
H.attack_log += "\[[time_stamp()]\]<font color='orange'> Defibrilated by [user.name] ([user.ckey]) with [src.name]</font>"
log_attack("<font color='red'>[user.name] ([user.ckey]) defibrilated [H.name] ([H.ckey]) with [src.name]</font>" )
if(!iscarbon(user))
M.LAssailant = null
else
M.LAssailant = user
return
H.visible_message("\blue [user] places the defibrilator paddles on [M.name]'s chest.", "\blue You place the defibrilator paddles on [M.name]'s chest.")
if(do_after(user, 10))
if(H.stat == 2 || H.stat == DEAD)
var/uni = 0
var/armor = 0
var/health = H.health
for(var/obj/item/carried_item in H.contents)
if(istype(carried_item, /obj/item/clothing/under))
uni = 1
if(istype(carried_item, /obj/item/clothing/suit/armor))
armor = 1
if(uni && armor)
if(prob(30))
spark_system.attach(M)
spark_system.start()
if(prob(30))
tobehealed = health + threshhold
tobehealed -= 5 //They get 5 health in crit to heal the person or inject stabalizers
H.adjustOxyLoss(tobehealed)
else if(uni || armor)
if(prob(30))
spark_system.attach(M)
spark_system.start()
if(prob(60))
tobehealed = health + threshhold
tobehealed -= 5 //They get 5 health in crit to heal the person or inject stabalizers
H.adjustOxyLoss(tobehealed)
else
if(prob(90))
tobehealed = health + threshhold
tobehealed -= 5 //They get 5 health in crit to heal the person or inject stabalizers
H.adjustOxyLoss(tobehealed)
H.updatehealth() //forces a health update, otherwise the oxyloss adjustment wouldnt do anything
M.visible_message("\red [M]'s body convulses a bit.")
var/datum/organ/external/temp = H.get_organ("head")
if(H.health > -100 && !(temp.status & ORGAN_DESTROYED) && !(M_NOCLONE in H.mutations) && !H.suiciding)
viewers(M) << "\blue [src] beeps: Resuscitation successful."
spawn(0)
H.stat = 1
dead_mob_list -= H
living_mob_list |= H
H.emote("gasp")
else
viewers(M) << "\blue [src] beeps: Resuscitation failed."
charges--
if(charges < 1)
charges = 0
status = 0
update_icon()
paddles.loc = user
else
//Remove from their hands and back onto the defib unit
remove_paddles(user)
update_icon()
return
/obj/item/weapon/defibrillator/proc/make_paddles()
return new /obj/item/weapon/twohanded/shockpaddles(src)
/obj/item/weapon/defibrillator/equipped(mob/user, slot)
if(slot != slot_back)
remove_paddles(user)
update_icon()
/obj/item/weapon/defibrillator/proc/remove_paddles(mob/user)
var/mob/living/carbon/human/M = user
if(paddles in get_both_hands(M))
M.u_equip(paddles)
update_icon()
return
/obj/item/weapon/defibrillator/Destroy()
if(on)
var/M = get(paddles, /mob)
remove_paddles(M)
..()
update_icon()
return
/obj/item/weapon/defibrillator/proc/deductcharge(var/chrgdeductamt)
if(bcell)
if(bcell.charge < (paddles.revivecost+chrgdeductamt))
powered = 0
update_icon()
if(bcell.use(chrgdeductamt))
update_icon()
return 1
else
update_icon()
return 0
/obj/item/weapon/defibrillator/proc/cooldowncheck(var/mob/user)
spawn(50)
if(bcell)
if(bcell.charge >= paddles.revivecost)
user.visible_message("<span class='notice'>[src] beeps: Unit ready.</span>")
playsound(get_turf(src), 'sound/machines/twobeep.ogg', 50, 0)
else
user.visible_message("\blue [src] beeps: Patient is not in a valid state.")
user.visible_message("<span class='notice'>[src] beeps: Charge depleted.</span>")
playsound(get_turf(src), 'sound/machines/twobeep.ogg', 50, 0)
paddles.cooldown = 0
paddles.update_icon()
update_icon()
//paddles
/obj/item/weapon/twohanded/shockpaddles
name = "defibrillator paddles"
desc = "A pair of plastic-gripped paddles with flat metal surfaces that are used to deliver powerful electric shocks."
icon = 'icons/obj/weapons.dmi'
icon_state = "defibpaddles"
item_state = "defibpaddles"
icon_override = 'icons/mob/in-hand/tools.dmi'
force = 0
throwforce = 6
w_class = 4
var/revivecost = 1000
var/cooldown = 0
var/busy = 0
var/obj/item/weapon/defibrillator/defib
/obj/item/weapon/twohanded/shockpaddles/New(mainunit)
..()
if(check_defib_exists(mainunit, src))
defib = mainunit
loc = defib
busy = 0
update_icon()
return
/obj/item/weapon/twohanded/shockpaddles/update_icon()
icon_state = "defibpaddles[wielded]"
item_state = "defibpaddles[wielded]"
if(cooldown)
icon_state = "defibpaddles[wielded]_cooldown"
/obj/item/weapon/twohanded/shockpaddles/suicide_act(mob/user)
user.visible_message("<span class='danger'>[user] is putting the live paddles on \his chest! It looks like \he's trying to commit suicide.</span>")
defib.deductcharge(revivecost)
playsound(get_turf(src), 'sound/weapons/Egloves.ogg', 50, 1, -1)
return (OXYLOSS)
/obj/item/weapon/twohanded/shockpaddles/dropped(mob/user as mob)
if(user)
var/obj/item/weapon/twohanded/O = user.get_inactive_hand()
if(istype(O))
O.unwield()
user << "<span class='notice'>The paddles snap back into the main unit.</span>"
defib.on = 0
loc = defib
defib.update_icon()
return unwield()
/obj/item/weapon/twohanded/shockpaddles/proc/check_defib_exists(mainunit, var/mob/living/carbon/human/M, var/obj/O)
if (!mainunit || !istype(mainunit, /obj/item/weapon/defibrillator)) //To avoid weird issues from admin spawns
M.u_equip(O)
qdel(O)
return 0
else
return 1
/obj/item/weapon/twohanded/shockpaddles/attack(mob/M as mob, mob/user as mob)
var/tobehealed
var/threshold = -config.health_threshold_dead
var/mob/living/carbon/human/H = M
if(busy)
return
if(!defib.powered)
user.visible_message("<span class='notice'>[defib] beeps: Unit is unpowered.</span>")
playsound(get_turf(src), 'sound/machines/twobeep.ogg', 50, 0)
return
if(!wielded)
user << "<span class='boldnotice'>You need to wield the paddles in both hands before you can use them on someone!</span>"
return
if(cooldown)
user << "<span class='notice'>[defib] is recharging.</span>"
return
if(!ishuman(M))
user << "<span class='notice'>The instructions on [defib] don't mention how to revive that...</span>"
return
else
if(user.a_intent == "harm" && !defib.safety)
busy = 1
H.visible_message("<span class='danger'>[user] has touched [H.name] with [src]!</span>", \
"<span class='userdanger'>[user] has touched [H.name] with [src]!</span>")
H.adjustStaminaLoss(50)
H.Weaken(5)
H.updatehealth() //forces health update before next life tick
playsound(get_turf(src), 'sound/weapons/Egloves.ogg', 50, 1, -1)
H.emote("gasp")
add_logs(user, M, "stunned", object="defibrillator")
defib.deductcharge(revivecost)
cooldown = 1
busy = 0
update_icon()
defib.cooldowncheck(user)
return
if(user.zone_sel && user.zone_sel.selecting == "chest")
user.visible_message("<span class='warning'>[user] begins to place [src] on [M.name]'s chest.</span>", "<span class='warning'>You begin to place [src] on [M.name]'s chest.</span>")
busy = 1
update_icon()
if(do_after(user, 30)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process
user.visible_message("<span class='notice'>[user] places [src] on [M.name]'s chest.</span>", "<span class='warning'>You place [src] on [M.name]'s chest.</span>")
playsound(get_turf(src), 'sound/weapons/flash.ogg', 50, 0)
var/mob/dead/observer/ghost = H.get_ghost()
var/tplus = world.time - H.timeofdeath
var/tlimit = 3000 //past this much time the patient is unrecoverable (in deciseconds)
var/tloss = 900 //brain damage starts setting in on the patient after some time left rotting
var/total_burn = 0
var/total_brute = 0
if(do_after(user, 20)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total
for(var/obj/item/carried_item in H.contents)
if((istype(carried_item, /obj/item/clothing/suit/armor)) || (istype(carried_item, /obj/item/clothing/suit/space)))
user.visible_message("<span class='notice'>[defib] buzzes: Patient's chest is obscured. Operation aborted.</span>")
playsound(get_turf(src), 'sound/machines/buzz-sigh.ogg', 50, 0)
busy = 0
update_icon()
return
if(H.stat == 2)
var/health = H.health
M.visible_message("<span class='warning'>[M]'s body convulses a bit.")
playsound(get_turf(src), "bodyfall", 50, 1)
playsound(get_turf(src), 'sound/weapons/Egloves.ogg', 50, 1, -1)
for(var/datum/organ/external/O in H.organs)
total_brute += O.brute_dam
total_burn += O.burn_dam
if(H.health <= config.health_threshold_dead && total_burn <= 180 && total_brute <= 180 && !H.suiciding && !ghost && tplus < tlimit && !(M_NOCLONE in H.mutations))
tobehealed = health + threshold
tobehealed -= 5 //They get 5 of each type of damage healed so excessive combined damage will not immediately kill them after they get revived
H.adjustOxyLoss(tobehealed)
H.adjustToxLoss(tobehealed)
H.adjustFireLoss(tobehealed)
H.adjustBruteLoss(tobehealed)
user.visible_message("<span class='boldnotice'>[defib] pings: Resuscitation successful.</span>")
playsound(get_turf(src), 'sound/machines/ping.ogg', 50, 0)
H.stat = 1
if(H in dead_mob_list)
dead_mob_list -= H
living_mob_list += H
H.emote("gasp")
if(tplus > tloss)
H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100))))
H.updatehealth()
defib.deductcharge(revivecost)
add_logs(user, M, "revived", object="defibrillator")
else
if(tplus > tlimit)
user.visible_message("<span class='boldnotice'>[defib] buzzes: Resuscitation failed - Heart tissue damage beyond point of no return for defibrillation.</span>")
else if(total_burn >= 180 || total_brute >= 180)
user.visible_message("<span class='boldnotice'>[defib] buzzes: Resuscitation failed - Severe tissue damage detected.</span>")
else
user.visible_message("<span class='notice'>[defib] buzzes: Resuscitation failed.</span>")
if(ghost)
ghost << "<span class='ghostalert'>Your heart is being defibrillated. Return to your body if you want to be revived!</span> (Verbs -> Ghost -> Re-enter corpse)"
ghost << sound('sound/effects/genetics.ogg')
playsound(get_turf(src), 'sound/machines/buzz-two.ogg', 50, 0)
defib.deductcharge(revivecost)
update_icon()
cooldown = 1
defib.cooldowncheck(user)
else
user.visible_message("<span class='notice'>[defib] buzzes: Patient is not in a valid state. Operation aborted.</span>")
playsound(get_turf(src), 'sound/machines/buzz-sigh.ogg', 50, 0)
busy = 0
update_icon()
else
user << "<span class='notice'>You need to target your patient's chest with [src].</span>"
return
@@ -63,9 +63,9 @@
else
return buf.dna.SetUIValue(real_block,val)
/obj/item/weapon/dnainjector/proc/inject(mob/M as mob, mob/user as mob)
/obj/item/weapon/dnainjector/proc/inject(mob/living/M as mob, mob/user as mob)
if(istype(M,/mob/living))
M.radiation += rand(5,20)
M.apply_effect(rand(5,20),IRRADIATE,0)
if (!(M_NOCLONE in M.mutations)) // prevents drained people from having their DNA changed
// UI in syringe.
@@ -417,7 +417,7 @@
B1.reagents.add_reagent("fuel",20)
B2.reagents.add_reagent("plasma", 15)
B2.reagents.add_reagent("sacid", 15)
B1.reagents.add_reagent("fuel",20)
B1.reagents.add_reagent("incendiaryfuel",20)
beakers += B1
beakers += B2
+9 -6
View File
@@ -141,9 +141,12 @@ var/last_chew = 0
..()
if(istype(I, /obj/item/stack/rods))
var/obj/item/stack/rods/R = I
var/obj/item/weapon/wirerod/W = new /obj/item/weapon/wirerod
R.use(1)
user.put_in_hands(W)
user << "<span class='notice'>You wrap the cable restraint around the top of the rod.</span>"
del(src)
if (R.use(1))
var/obj/item/weapon/wirerod/W = new /obj/item/weapon/wirerod
user.u_equip(src)
user.put_in_hands(W)
user << "<span class='notice'>You wrap the cable restraint around the top of the rod.</span>"
del(src)
else
user << "<span class='warning'>You need one rod to make a wired rod.</span>"
return
@@ -5,7 +5,7 @@
icon = 'icons/obj/device.dmi'
icon_state = "implant"
var/implanted = null
var/mob/imp_in = null
var/mob/living/imp_in = null
var/datum/organ/external/part = null
_color = "b"
var/allow_reagents = 0
@@ -429,6 +429,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
source.SetStunned(0)
source.SetWeakened(0)
source.SetParalysis(0)
imp_in.adjustStaminaLoss(-75)
source.lying = 0
source.update_canmove()
@@ -50,8 +50,8 @@
edge = 1
/obj/item/weapon/melee/energy/sword/cyborg
var/hitcost = 500
var/hitcost = 500
/obj/item/weapon/melee/energy/sword/cyborg/attack(mob/M, var/mob/living/silicon/robot/R)
if(R.cell)
var/obj/item/weapon/cell/C = R.cell
@@ -62,7 +62,7 @@
//C.use(hitcost)
..()
return
/obj/item/weapon/melee/energy/sword/pirate
name = "energy cutlass"
desc = "Arrrr matey."
@@ -72,7 +72,7 @@
name = "energy blade"
desc = "A concentrated beam of energy in the shape of a blade. Very stylish... and lethal."
icon_state = "blade"
force = 70.0//Normal attacks deal very high damage.
force = 30.0 //Normal attacks deal esword damage
sharp = 1
edge = 1
throwforce = 1//Throwing or dropping the item deletes it.
@@ -9,6 +9,7 @@
* Mining Satchel
* Plant Bag
* Sheet Snatcher
* Book Bag
*
* -Sayu
*/
@@ -307,3 +308,19 @@
w_class = 1
can_hold = list("/obj/item/weapon/coin","/obj/item/weapon/spacecash")
// -----------------------------
// Book bag
// -----------------------------
/obj/item/weapon/storage/bag/books
name = "book bag"
desc = "A bag for books."
icon = 'icons/obj/library.dmi'
icon_state = "bookbag"
display_contents_with_number = 0 //This would look really stupid otherwise
storage_slots = 7
max_combined_w_class = 21
max_w_class = 3
w_class = 4 //Bigger than a book because physics
can_hold = list(/obj/item/weapon/book, /obj/item/weapon/spellbook) //No bibles, consistent with bookcase
@@ -68,6 +68,7 @@
new /obj/item/weapon/crowbar(src)
new /obj/item/weapon/wirecutters(src)
new /obj/item/device/t_scanner(src)
new /obj/item/weapon/extinguisher/mini(src)
@@ -92,7 +93,7 @@
"/obj/item/stack/medical",
"/obj/item/device/flashlight/pen",
"/obj/item/clothing/mask/surgical",
"/obj/item/clothing/gloves/latex",
"/obj/item/clothing/gloves/color/latex",
"/obj/item/weapon/reagent_containers/hypospray/autoinjector"
)
@@ -85,13 +85,13 @@
New()
..()
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
/obj/item/weapon/storage/box/masks
name = "sterile masks"
@@ -152,23 +152,6 @@
new /obj/item/weapon/dnainjector/m2h(src)
new /obj/item/weapon/dnainjector/m2h(src)
/obj/item/weapon/storage/box/blanks
name = "box of birdshot shells"
desc = "It has a picture of a gun and several warning symbols on the front."
m_amt = 41000
New()
..()
new /obj/item/ammo_casing/shotgun/birdshot(src)
new /obj/item/ammo_casing/shotgun/birdshot(src)
new /obj/item/ammo_casing/shotgun/birdshot(src)
new /obj/item/ammo_casing/shotgun/birdshot(src)
new /obj/item/ammo_casing/shotgun/birdshot(src)
new /obj/item/ammo_casing/shotgun/birdshot(src)
new /obj/item/ammo_casing/shotgun/birdshot(src)
/obj/item/weapon/storage/box/gauge
name = "box of 12 gauge slugs"
desc = "It has a picture of a gun and several warning symbols on the front."
@@ -12,6 +12,7 @@
name = "first-aid kit"
desc = "It's an emergency medical kit for those serious boo-boos."
icon_state = "firstaid"
icon_override = 'icons/mob/in-hand/medkits.dmi'
throw_speed = 2
throw_range = 8
var/empty = 0
@@ -55,8 +56,8 @@
return
/obj/item/weapon/storage/firstaid/toxin
name = "toxin first aid"
desc = "Used to treat when you have a high amoutn of toxins in your body."
name = "toxin first aid kit"
desc = "Used to treat when you have a high amounts of toxins in your body."
icon_state = "antitoxin"
item_state = "firstaid-toxin"
@@ -76,7 +77,7 @@
return
/obj/item/weapon/storage/firstaid/o2
name = "oxygen deprivation first aid"
name = "oxygen deprivation first aid kit"
desc = "A box full of oxygen goodies."
icon_state = "o2"
item_state = "firstaid-o2"
@@ -18,7 +18,7 @@
if("bond")
new /obj/item/weapon/gun/projectile/automatic/pistol(src)
new /obj/item/weapon/silencer(src)
new /obj/item/weapon/suppressor(src)
new /obj/item/ammo_box/magazine/m10mm(src)
new /obj/item/ammo_box/magazine/m10mm(src)
new /obj/item/clothing/under/chameleon(src)
+9 -1
View File
@@ -196,4 +196,12 @@
throwforce = 5
stunforce = 5
hitcost = 3750
slot_flags = null
slot_flags = null
/obj/item/weapon/melee/baton/cattleprod/update_icon()
if(status)
icon_state = "stunprod_active"
else if(!bcell)
icon_state = "stunprod_nocell"
else
icon_state = "stunprod"
@@ -33,22 +33,24 @@
active = !active
if (active)
force = 30
throwforce = 20
if(istype(src,/obj/item/weapon/melee/energy/sword/pirate))
icon_state = "cutlass1"
else
icon_state = "sword[blade_color]"
w_class = 4
playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
playsound(user, 'sound/weapons/saberon.ogg', 35, 1)
hitsound = 'sound/weapons/blade1.ogg'
user << "\blue [src] is now active."
else
force = 3
throwforce = 5.0
if(istype(src,/obj/item/weapon/melee/energy/sword/pirate))
icon_state = "cutlass0"
else
icon_state = "sword0"
w_class = 2
playsound(user, 'sound/weapons/saberoff.ogg', 50, 1)
playsound(user, 'sound/weapons/saberoff.ogg', 35, 1)
hitsound = "swing_hit"
user << "\blue [src] can now be concealed."
if(istype(user,/mob/living/carbon/human))
@@ -149,9 +149,12 @@ Frequency:
else
L["[com.id] (Inactive)"] = com.target
var/list/turfs = list( )
var/area/A
for(var/turf/T in orange(10))
if(T.x>world.maxx-8 || T.x<8) continue //putting them at the edge is dumb
if(T.y>world.maxy-8 || T.y<8) continue
A = get_area(T)
if (A.tele_proof == 1) continue // Telescience-proofed areas require a beacon.
turfs += T
if(turfs.len)
L["None (Dangerous)"] = pick(turfs)
@@ -170,4 +173,3 @@ Frequency:
active_portals++
src.add_fingerprint(user)
return
+13 -9
View File
@@ -443,8 +443,8 @@
*/
/obj/item/weapon/crowbar
name = "crowbar"
desc = "Used to hit floors"
name = "pocket crowbar"
desc = "A small crowbar. This handy tool is useful for lots of things, such as prying floor tiles or opening unpowered doors."
icon = 'icons/obj/items.dmi'
icon_state = "crowbar"
flags = FPRINT | TABLEPASS| CONDUCT
@@ -462,6 +462,16 @@
icon_state = "red_crowbar"
item_state = "crowbar_red"
/obj/item/weapon/crowbar/large
name = "crowbar"
desc = "It's a big crowbar. It doesn't fit in your pockets, because it's big."
force = 12
w_class = 3
throw_speed = 3
throw_range = 3
m_amt = 66
icon_state = "crowbar_large"
/obj/item/weapon/weldingtool/attack(mob/M as mob, mob/user as mob)
if(hasorgans(M))
@@ -480,19 +490,13 @@
if(S.brute_dam)
var/obj/item/weapon/weldingtool/WT = src
if (WT.remove_fuel(0,user))
if (WT.remove_fuel(0,null))
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
S.heal_damage(15,0,0,1)
user.visible_message("\red \The [user] patches some dents on \the [M]'s [S.display_name] with \the [src].")
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
H.updatehealth()
if(istype(M,/mob/living/carbon/human/machine) && M.stat == 0) // If an IPC is brought back to life by welding it, which is possible, update the mob list
if(M in dead_mob_list)
dead_mob_list -= M
respawnable_list -= M
living_mob_list += M
mob_list += M
return
else
user << "\red You need more welding fuel to complete this task."
+7 -5
View File
@@ -158,12 +158,13 @@ obj/item/weapon/twohanded/
name = "fire axe"
desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?"
force = 5
throwforce = 15
sharp = 1
edge = 1
w_class = 4.0
slot_flags = SLOT_BACK
force_unwielded = 10
force_wielded = 40
force_unwielded = 5
force_wielded = 24
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
@@ -203,7 +204,7 @@ obj/item/weapon/twohanded/
throw_range = 5
w_class = 2.0
force_unwielded = 3
force_wielded = 30
force_wielded = 34
wieldsound = 'sound/weapons/saberon.ogg'
unwieldsound = 'sound/weapons/saberoff.ogg'
flags = FPRINT | TABLEPASS | NOSHIELD
@@ -287,8 +288,9 @@ obj/item/weapon/twohanded/
w_class = 4.0
slot_flags = SLOT_BACK
force_unwielded = 10
force_wielded = 13
throwforce = 15
force_wielded = 18 // Was 13, Buffed - RR
throwforce = 20
throw_speed = 3
flags = FPRINT | TABLEPASS | NOSHIELD
attack_verb = list("attacked", "poked", "jabbed", "torn", "gored")
@@ -57,7 +57,7 @@
machine_name = "AutoDrobe"
icon_state = "refill_costume"
charges = 19// of 58
/obj/item/weapon/vending_refill/hatdispenser
machine_name = "hat"
icon_state = "refill_costume"
@@ -67,8 +67,13 @@
machine_name = "suit"
icon_state = "refill_costume"
charges = 68// of 206
/obj/item/weapon/vending_refill/shoedispenser
machine_name = "shoe"
icon_state = "refill_costume"
charges = 30// of 91
charges = 30// of 91
/obj/item/weapon/vending_refill/clothing
machine_name = "ClothesMate"
icon_state = "refill_clothes"
charges = 20// of 62
@@ -167,6 +167,10 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
..()
if(istype(I, /obj/item/weapon/shard))
var/obj/item/weapon/twohanded/spear/S = new /obj/item/weapon/twohanded/spear
user.u_equip(I)
user.u_equip(src)
user.put_in_hands(S)
user << "<span class='notice'>You fasten the glass shard to the top of the rod with the cable.</span>"
del(I)
@@ -174,6 +178,10 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
else if(istype(I, /obj/item/weapon/wirecutters))
var/obj/item/weapon/melee/baton/cattleprod/P = new /obj/item/weapon/melee/baton/cattleprod
user.u_equip(I)
user.u_equip(src)
user.put_in_hands(P)
user << "<span class='notice'>You fasten the wirecutters to the top of the rod with the cable, prongs outward.</span>"
del(I)