Revert "[MIRROR] /atom New() => Initialize() [MDB IGNORE]"

This commit is contained in:
Novacat
2022-08-27 08:49:56 -04:00
committed by GitHub
parent 0be7af4774
commit 1aa4c73e8d
599 changed files with 3329 additions and 4983 deletions
@@ -13,12 +13,12 @@
var/detect_state = PROXIMITY_NONE
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2, TECH_ILLEGAL = 2)
/obj/item/device/multitool/ai_detector/Initialize()
/obj/item/device/multitool/ai_detector/New()
// It's really really unlikely for the view range to change. But why not be futureproof anyways?
range_alert = world.view
range_warning = world.view * 2
START_PROCESSING(SSobj, src)
return ..()
..()
/obj/item/device/multitool/ai_detector/Destroy()
STOP_PROCESSING(SSobj, src)
@@ -262,8 +262,12 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
var/datum/exonet_protocol/exonet = null
var/list/exonet_messages = list()
/mob/observer/dead/proc/init_exonet()
set waitfor = FALSE
// Proc: New()
// Parameters: None
// Description: Gives ghosts an exonet address based on their key and ghost name.
/mob/observer/dead/Initialize()
. = ..()
exonet = new(src)
if(client)
exonet.make_address("communicator-[src.client]-[src.client.prefs.real_name]")
else
@@ -344,8 +348,8 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
/obj/machinery/camera/communicator
network = list(NETWORK_COMMUNICATORS)
/obj/machinery/camera/communicator/Initialize()
. = ..()
/obj/machinery/camera/communicator/New()
..()
client_huds |= global_hud.whitense
client_huds |= global_hud.darkMask
+4 -4
View File
@@ -23,8 +23,8 @@
/obj/item/device/defib_kit/get_cell()
return bcell
/obj/item/device/defib_kit/Initialize() //starts without a cell for rnd
. = ..()
/obj/item/device/defib_kit/New() //starts without a cell for rnd
..()
if(ispath(paddles))
paddles = new paddles(src, src)
else
@@ -590,9 +590,9 @@
/obj/item/weapon/shockpaddles/linked
var/obj/item/device/defib_kit/base_unit
/obj/item/weapon/shockpaddles/linked/Initialize(var/ml, obj/item/device/defib_kit/defib)
/obj/item/weapon/shockpaddles/linked/New(newloc, obj/item/device/defib_kit/defib)
base_unit = defib
. = ..()
..(newloc)
/obj/item/weapon/shockpaddles/linked/Destroy()
if(base_unit)
+4 -31
View File
@@ -362,9 +362,9 @@
pickup_sound = 'sound/items/pickup/gloves.ogg'
light_system = MOVABLE_LIGHT
/obj/item/device/flashlight/flare/Initialize()
/obj/item/device/flashlight/flare/New()
fuel = rand(800, 1000) // Sorry for changing this so much but I keep under-estimating how long X number of ticks last in seconds.
. = ..()
..()
/obj/item/device/flashlight/flare/process()
var/turf/pos = get_turf(src)
@@ -425,9 +425,9 @@
var/fuel = 0
power_use = 0
/obj/item/device/flashlight/glowstick/Initialize()
/obj/item/device/flashlight/glowstick/New()
fuel = rand(1600, 2000)
. = ..()
..()
/obj/item/device/flashlight/glowstick/process()
fuel = max(fuel - 1, 0)
@@ -491,30 +491,3 @@
light_range = 8
light_power = 0.1
light_color = "#49F37C"
/*
* Slime Extract
*/
/obj/item/device/flashlight/slime
gender = PLURAL
name = "glowing slime extract"
desc = "A slimy ball that appears to be glowing from bioluminesence."
icon = 'icons/obj/lighting.dmi'
icon_state = "floor1" //not a slime extract sprite but... something close enough!
item_state = "slime"
light_color = "#FFF423"
w_class = ITEMSIZE_TINY
light_range = 6
on = 1 //Bio-luminesence has one setting, on.
power_use = 0
/obj/item/device/flashlight/slime/Initialize()
. = ..()
set_light(light_range, light_power, light_color)
/obj/item/device/flashlight/slime/update_brightness()
return
/obj/item/device/flashlight/slime/attack_self(mob/user)
return //Bio-luminescence does not toggle.
+2 -2
View File
@@ -7,8 +7,8 @@
var/list/supported_types
var/datum/tgui_state/default/must_hack/hack_state
/obj/item/device/multitool/hacktool/Initialize()
. = ..()
/obj/item/device/multitool/hacktool/New()
..()
known_targets = list()
max_known_targets = 5 + rand(1,3)
supported_types = list(/obj/machinery/door/airlock)
@@ -29,14 +29,14 @@
/obj/item/device/laser_pointer/purple
pointer_icon_state = "purple_laser"
/obj/item/device/laser_pointer/Initialize()
. = ..()
/obj/item/device/laser_pointer/New()
..()
diode = new(src)
if(!pointer_icon_state)
pointer_icon_state = pick("red_laser","green_laser","blue_laser","purple_laser")
/obj/item/device/laser_pointer/upgraded/Initialize()
. = ..()
/obj/item/device/laser_pointer/upgraded/New()
..()
diode = new /obj/item/weapon/stock_parts/micro_laser/ultra
@@ -59,9 +59,9 @@
// when we get this many shards, we get a free bulb.
var/shards_required = 4
/obj/item/device/lightreplacer/Initialize()
/obj/item/device/lightreplacer/New()
failmsg = "The [name]'s refill light blinks red."
. = ..()
..()
/obj/item/device/lightreplacer/examine(mob/user)
. = ..()
+2 -2
View File
@@ -43,8 +43,8 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard)
if(istype(rig))
rig.forced_move(direction, user)
/obj/item/device/paicard/Initialize()
. = ..()
/obj/item/device/paicard/New()
..()
add_overlay("pai-off")
/obj/item/device/paicard/Destroy()
@@ -6,8 +6,8 @@
var/list/modes
var/mode
/obj/item/device/pipe_painter/Initialize()
. = ..()
/obj/item/device/pipe_painter/New()
..()
modes = new()
for(var/C in pipe_colors)
modes += "[C]"
@@ -20,8 +20,8 @@
drop_sound = 'sound/items/drop/component.ogg'
pickup_sound = 'sound/items/pickup/component.ogg'
/obj/item/device/radio/headset/Initialize()
. = ..()
/obj/item/device/radio/headset/New()
..()
internal_channels.Cut()
if(ks1type)
keyslot1 = new ks1type(src)
@@ -428,11 +428,14 @@
if(keyslot2.syndie)
src.syndie = 1
if(!radio_controller)
src.name = "broken radio headset"
return
for (var/ch_name in channels)
if(!radio_controller)
sleep(30) // Waiting for the radio_controller to be created.
if(!radio_controller)
src.name = "broken radio headset"
return
secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT)
if(setDescription)
@@ -75,23 +75,23 @@
channels = radiochannels.Copy()
return ..()
/obj/item/device/radio/intercom/Initialize()
. = ..()
/obj/item/device/radio/intercom/New()
..()
circuit = new circuit(src)
/obj/item/device/radio/intercom/department/medbay/Initialize()
. = ..()
/obj/item/device/radio/intercom/department/medbay/New()
..()
internal_channels = default_medbay_channels.Copy()
/obj/item/device/radio/intercom/department/security/Initialize()
. = ..()
/obj/item/device/radio/intercom/department/security/New()
..()
internal_channels = list(
num2text(PUB_FREQ) = list(),
num2text(SEC_I_FREQ) = list(access_security)
)
/obj/item/device/radio/intercom/entertainment/Initialize()
. = ..()
/obj/item/device/radio/intercom/entertainment/New()
..()
internal_channels = list(
num2text(PUB_FREQ) = list(),
num2text(ENT_FREQ) = list()
@@ -104,8 +104,8 @@
subspace_transmission = 1
syndie = 1
/obj/item/device/radio/intercom/syndicate/Initialize()
. = ..()
/obj/item/device/radio/intercom/syndicate/New()
..()
internal_channels[num2text(SYND_FREQ)] = list(access_syndicate)
/obj/item/device/radio/intercom/raider
@@ -115,8 +115,8 @@
subspace_transmission = 1
syndie = 1
/obj/item/device/radio/intercom/raider/Initialize()
. = ..()
/obj/item/device/radio/intercom/raider/New()
..()
internal_channels[num2text(RAID_FREQ)] = list(access_syndicate)
/obj/item/device/radio/intercom/attack_ai(mob/user as mob)
@@ -27,8 +27,7 @@ var/global/list/active_radio_jammers = list()
origin_tech = list(TECH_ILLEGAL = 7, TECH_BLUESPACE = 5) //Such technology! Subspace jamming!
/obj/item/device/radio_jammer/Initialize()
. = ..()
/obj/item/device/radio_jammer/New()
power_source = new(src)
update_icon() // So it starts with the full overlay.
@@ -73,6 +73,12 @@ var/global/list/default_medbay_channels = list(
frequency = new_frequency
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
/obj/item/device/radio/New()
..()
wires = new(src)
internal_channels = default_internal_channels.Copy()
listening_objects += src
/obj/item/device/radio/Destroy()
qdel(wires)
wires = null
@@ -83,13 +89,9 @@ var/global/list/default_medbay_channels = list(
radio_controller.remove_object(src, radiochannels[ch_name])
return ..()
/obj/item/device/radio/Initialize()
. = ..()
wires = new(src)
internal_channels = default_internal_channels.Copy()
listening_objects += src
if(frequency < RADIO_LOW_FREQ || frequency > RADIO_HIGH_FREQ)
frequency = sanitize_frequency(frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ)
set_frequency(frequency)
@@ -755,6 +757,6 @@ GLOBAL_DATUM(autospeaker, /mob/living/silicon/ai/announcer)
/obj/item/device/radio/phone/medbay
frequency = MED_I_FREQ
/obj/item/device/radio/phone/medbay/Initialize()
. = ..()
/obj/item/device/radio/phone/medbay/New()
..()
internal_channels = default_medbay_channels.Copy()
+326 -326
View File
@@ -1,327 +1,327 @@
#define DEFIB_TIME_LIMIT (10 MINUTES) //VOREStation addition- past this many seconds, defib is useless.
/obj/item/device/healthanalyzer
name = "health analyzer"
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
icon_state = "health"
item_state = "healthanalyzer"
slot_flags = SLOT_BELT
throwforce = 3
w_class = ITEMSIZE_SMALL
throw_speed = 5
throw_range = 10
matter = list(MAT_STEEL = 200)
origin_tech = list(TECH_MAGNET = 1, TECH_BIO = 1)
var/mode = 1;
var/advscan = 0
var/showadvscan = 1
/obj/item/device/healthanalyzer/Initialize()
if(advscan >= 1)
verbs += /obj/item/device/healthanalyzer/proc/toggle_adv
. = ..()
/obj/item/device/healthanalyzer/do_surgery(mob/living/M, mob/living/user)
if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool
return ..()
scan_mob(M, user) //default surgery behaviour is just to scan as usual
return 1
/obj/item/device/healthanalyzer/attack(mob/living/M, mob/living/user)
scan_mob(M, user)
/obj/item/device/healthanalyzer/proc/scan_mob(mob/living/M, mob/living/user)
var/dat = ""
if ((CLUMSY in user.mutations) && prob(50))
user.visible_message("<span class='warning'>\The [user] has analyzed the floor's vitals!</span>", "<span class='warning'>You try to analyze the floor's vitals!</span>")
dat += "Analyzing Results for the floor:<br>"
dat += "Overall Status: Healthy<br>"
dat += "\tDamage Specifics: 0-0-0-0<br>"
dat += "Key: Suffocation/Toxin/Burns/Brute<br>"
dat += "Body Temperature: ???"
user.show_message("<span class='notice'>[dat]</span>", 1)
return
if (!user.IsAdvancedToolUser())
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
return
flick("[icon_state]-scan", src) //makes it so that it plays the scan animation on a succesful scan
user.visible_message("<span class='notice'>[user] has analyzed [M]'s vitals.</span>","<span class='notice'>You have analyzed [M]'s vitals.</span>")
if (!ishuman(M) || M.isSynthetic())
//these sensors are designed for organic life
dat += "<span class='notice'>Analyzing Results for ERROR:\n\tOverall Status: ERROR<br>"
dat += "\tKey: <font color='cyan'>Suffocation</font>/<font color='green'>Toxin</font>/<font color='#FFA500'>Burns</font>/<font color='red'>Brute</font><br>"
dat += "\tDamage Specifics: <font color='cyan'>?</font> - <font color='green'>?</font> - <font color='#FFA500'>?</font> - <font color='red'>?</font><br>"
dat += "Body Temperature: [M.bodytemperature-T0C]&deg;C ([M.bodytemperature*1.8-459.67]&deg;F)</span><br>"
dat += "<span class='warning'>Warning: Blood Level ERROR: --% --cl.</span> <span class='notice'>Type: ERROR</span><br>"
dat += "<span class='notice'>Subject's pulse: <font color='red'>-- bpm.</font></span>"
user.show_message(dat, 1)
return
var/fake_oxy = max(rand(1,40), M.getOxyLoss(), (300 - (M.getToxLoss() + M.getFireLoss() + M.getBruteLoss())))
var/OX = M.getOxyLoss() > 50 ? "<b>[M.getOxyLoss()]</b>" : M.getOxyLoss()
var/TX = M.getToxLoss() > 50 ? "<b>[M.getToxLoss()]</b>" : M.getToxLoss()
var/BU = M.getFireLoss() > 50 ? "<b>[M.getFireLoss()]</b>" : M.getFireLoss()
var/BR = M.getBruteLoss() > 50 ? "<b>[M.getBruteLoss()]</b>" : M.getBruteLoss()
if(M.status_flags & FAKEDEATH)
OX = fake_oxy > 50 ? "<b>[fake_oxy]</b>" : fake_oxy
dat += "<span class='notice'>Analyzing Results for [M]:</span><br>"
dat += "<span class='notice'>Overall Status: dead</span><br>"
else
dat += "<span class='notice'>Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "dead" : "[round((M.health/M.getMaxHealth())*100) ]% healthy"]<br>"
dat += "\tKey: <font color='cyan'>Suffocation</font>/<font color='green'>Toxin</font>/<font color='#FFA500'>Burns</font>/<font color='red'>Brute</font><br>"
dat += "\tDamage Specifics: <font color='cyan'>[OX]</font> - <font color='green'>[TX]</font> - <font color='#FFA500'>[BU]</font> - <font color='red'>[BR]</font><br>"
dat += "Body Temperature: [M.bodytemperature-T0C]&deg;C ([M.bodytemperature*1.8-459.67]&deg;F)</span><br>"
//VOREStation edit/addition starts
if(M.timeofdeath && (M.stat == DEAD || (M.status_flags & FAKEDEATH)))
dat += "<span class='notice'>Time of Death: [worldtime2stationtime(M.timeofdeath)]</span><br>"
var/tdelta = round(world.time - M.timeofdeath)
if(tdelta < (DEFIB_TIME_LIMIT * 10))
dat += "<span class='notice'><b>Subject died [DisplayTimeText(tdelta)] ago - resuscitation may be possible!</b></span><br>"
//VOREStation edit/addition ends
if(istype(M, /mob/living/carbon/human) && mode == 1)
var/mob/living/carbon/human/H = M
var/list/damaged = H.get_damaged_organs(1,1)
dat += "<span class='notice'>Localized Damage, Brute/Burn:</span><br>"
if(length(damaged)>0)
for(var/obj/item/organ/external/org in damaged)
if(org.robotic >= ORGAN_ROBOT)
continue
else
dat += "<span class='notice'> [capitalize(org.name)]: [(org.brute_dam > 0) ? "<span class='warning'>[org.brute_dam]</span>" : 0]"
dat += "[(org.status & ORGAN_BLEEDING)?"<span class='danger'>\[Bleeding\]</span>":""] - "
dat += "[(org.burn_dam > 0) ? "<font color='#FFA500'>[org.burn_dam]</font>" : 0]</span><br>"
else
dat += "<span class='notice'> Limbs are OK.</span><br>"
OX = M.getOxyLoss() > 50 ? "<font color='cyan'><b>Severe oxygen deprivation detected</b></font>" : "Subject bloodstream oxygen level normal"
TX = M.getToxLoss() > 50 ? "<font color='green'><b>Dangerous amount of toxins detected</b></font>" : "Subject bloodstream toxin level minimal"
BU = M.getFireLoss() > 50 ? "<font color='#FFA500'><b>Severe burn damage detected</b></font>" : "Subject burn injury status O.K"
BR = M.getBruteLoss() > 50 ? "<font color='red'><b>Severe anatomical damage detected</b></font>" : "Subject brute-force injury status O.K"
if(M.status_flags & FAKEDEATH)
OX = fake_oxy > 50 ? "<span class='warning'>Severe oxygen deprivation detected</span>" : "Subject bloodstream oxygen level normal"
dat += "[OX] | [TX] | [BU] | [BR]<br>"
if(M.radiation)
if(advscan >= 2 && showadvscan == 1)
var/severity = ""
if(M.radiation >= 75)
severity = "Critical"
else if(M.radiation >= 50)
severity = "Severe"
else if(M.radiation >= 25)
severity = "Moderate"
else if(M.radiation >= 1)
severity = "Low"
dat += "<span class='warning'>[severity] levels of radiation detected. [(severity == "Critical") ? " Immediate treatment advised." : ""]</span><br>"
else
dat += "<span class='warning'>Radiation detected.</span><br>"
if(iscarbon(M))
var/mob/living/carbon/C = M
if(C.reagents.total_volume)
var/unknown = 0
var/reagentdata[0]
var/unknownreagents[0]
for(var/datum/reagent/R as anything in C.reagents.reagent_list)
if(R.scannable)
reagentdata["[R.id]"] = "<span class='notice'>\t[round(C.reagents.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
else
unknown++
unknownreagents["[R.id]"] = "<span class='notice'>\t[round(C.reagents.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
if(reagentdata.len)
dat += "<span class='notice'>Beneficial reagents detected in subject's blood:</span><br>"
for(var/d in reagentdata)
dat += reagentdata[d]
if(unknown)
if(advscan >= 3 && showadvscan == 1)
dat += "<span class='warning'>Warning: Non-medical reagent[(unknown>1)?"s":""] detected in subject's blood:</span><br>"
for(var/d in unknownreagents)
dat += unknownreagents[d]
else
dat += "<span class='warning'>Warning: Unknown substance[(unknown>1)?"s":""] detected in subject's blood.</span><br>"
if(C.ingested && C.ingested.total_volume)
var/unknown = 0
var/stomachreagentdata[0]
var/stomachunknownreagents[0]
for(var/datum/reagent/R as anything in C.ingested.reagent_list)
if(R.scannable)
stomachreagentdata["[R.id]"] = "<span class='notice'>\t[round(C.ingested.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
if (advscan == 0 || showadvscan == 0)
dat += "<span class='notice'>[R.name] found in subject's stomach.</span><br>"
else
++unknown
stomachunknownreagents["[R.id]"] = "<span class='notice'>\t[round(C.ingested.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
if(advscan >= 1 && showadvscan == 1)
dat += "<span class='notice'>Beneficial reagents detected in subject's stomach:</span><br>"
for(var/d in stomachreagentdata)
dat += stomachreagentdata[d]
if(unknown)
if(advscan >= 3 && showadvscan == 1)
dat += "<span class='warning'>Warning: Non-medical reagent[(unknown > 1)?"s":""] found in subject's stomach:</span><br>"
for(var/d in stomachunknownreagents)
dat += stomachunknownreagents[d]
else
dat += "<span class='warning'>Unknown substance[(unknown > 1)?"s":""] found in subject's stomach.</span><br>"
if(C.touching && C.touching.total_volume)
var/unknown = 0
var/touchreagentdata[0]
var/touchunknownreagents[0]
for(var/datum/reagent/R as anything in C.touching.reagent_list)
if(R.scannable)
touchreagentdata["[R.id]"] = "<span class='notice'>\t[round(C.touching.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.can_overdose_touch && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
if (advscan == 0 || showadvscan == 0)
dat += "<span class='notice'>[R.name] found in subject's dermis.</span><br>"
else
++unknown
touchunknownreagents["[R.id]"] = "<span class='notice'>\t[round(C.ingested.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.can_overdose_touch && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
if(advscan >= 1 && showadvscan == 1)
dat += "<span class='notice'>Beneficial reagents detected in subject's dermis:</span><br>"
for(var/d in touchreagentdata)
dat += touchreagentdata[d]
if(unknown)
if(advscan >= 3 && showadvscan == 1)
dat += "<span class='warning'>Warning: Non-medical reagent[(unknown > 1)?"s":""] found in subject's dermis:</span><br>"
for(var/d in touchunknownreagents)
dat += touchunknownreagents[d]
else
dat += "<span class='warning'>Unknown substance[(unknown > 1)?"s":""] found in subject's dermis.</span><br>"
if(C.virus2.len)
for (var/ID in C.virus2)
if (ID in virusDB)
var/datum/data/record/V = virusDB[ID]
dat += "<span class='warning'>Warning: Pathogen [V.fields["name"]] detected in subject's blood. Known antigen : [V.fields["antigen"]]</span><br>"
else
dat += "<span class='warning'>Warning: Unknown pathogen detected in subject's blood.</span><br>"
if (M.getCloneLoss())
dat += "<span class='warning'>Subject appears to have been imperfectly cloned.</span><br>"
// if (M.reagents && M.reagents.get_reagent_amount("inaprovaline"))
// user.show_message("<span class='notice'>Bloodstream Analysis located [M.reagents:get_reagent_amount("inaprovaline")] units of rejuvenation chemicals.</span>")
if (M.has_brain_worms())
dat += "<span class='warning'>Subject suffering from aberrant brain activity. Recommend further scanning.</span><br>"
else if (M.getBrainLoss() >= 60 || !M.has_brain())
dat += "<span class='warning'>Subject is brain dead.</span><br>"
else if (M.getBrainLoss() >= 25)
dat += "<span class='warning'>Severe brain damage detected. Subject likely to have a traumatic brain injury.</span><br>"
else if (M.getBrainLoss() >= 10)
dat += "<span class='warning'>Significant brain damage detected. Subject may have had a concussion.</span><br>"
else if (M.getBrainLoss() >= 1 && advscan >= 2 && showadvscan == 1)
dat += "<span class='warning'>Minor brain damage detected.</span><br>"
if(ishuman(M))
var/mob/living/carbon/human/H = M
for(var/obj/item/organ/internal/appendix/a in H.internal_organs)
var/severity = ""
if(a.inflamed > 3)
severity = "Severe"
else if(a.inflamed > 2)
severity = "Moderate"
else if(a.inflamed >= 1)
severity = "Mild"
if(severity)
dat += "<span class='warning'>[severity] inflammation detected in subject [a.name].</span><br>"
// Infections, fractures, and IB
var/basic_fracture = 0 // If it's a basic scanner
var/basic_ib = 0 // If it's a basic scanner
var/fracture_dat = "" // All the fractures
var/infection_dat = "" // All the infections
var/ib_dat = "" // All the IB
for(var/obj/item/organ/external/e in H.organs)
if(!e)
continue
// Broken limbs
if(e.status & ORGAN_BROKEN)
if((e.name in list(BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG, BP_HEAD, BP_TORSO, BP_GROIN)) && (!e.splinted))
fracture_dat += "<span class='warning'>Unsecured fracture in subject [e.name]. Splinting recommended for transport.</span><br>"
else if(advscan >= 1 && showadvscan == 1)
fracture_dat += "<span class='warning'>Bone fractures detected in subject [e.name].</span><br>"
else
basic_fracture = 1
// Infections
if(e.has_infected_wound())
dat += "<span class='warning'>Infected wound detected in subject [e.name]. Disinfection recommended.</span><br>"
// IB
for(var/datum/wound/W in e.wounds)
if(W.internal)
if(advscan >= 1 && showadvscan == 1)
ib_dat += "<span class='warning'>Internal bleeding detected in subject [e.name].</span><br>"
else
basic_ib = 1
if(basic_fracture)
fracture_dat += "<span class='warning'>Bone fractures detected. Advanced scanner required for location.</span><br>"
if(basic_ib)
ib_dat += "<span class='warning'>Internal bleeding detected. Advanced scanner required for location.</span><br>"
dat += fracture_dat
dat += infection_dat
dat += ib_dat
// Blood level
if(M:vessel)
var/blood_volume = H.vessel.get_reagent_amount("blood")
var/blood_percent = round((blood_volume / H.species.blood_volume)*100)
var/blood_type = H.dna.b_type
if(blood_volume <= H.species.blood_volume*H.species.blood_level_danger)
dat += "<span class='danger'><i>Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl. Type: [blood_type]</i></span><br>"
else if(blood_volume <= H.species.blood_volume*H.species.blood_level_warning)
dat += "<span class='danger'><i>Warning: Blood Level VERY LOW: [blood_percent]% [blood_volume]cl. Type: [blood_type]</i></span><br>"
else if(blood_volume <= H.species.blood_volume*H.species.blood_level_safe)
dat += "<span class='danger'>Warning: Blood Level LOW: [blood_percent]% [blood_volume]cl. Type: [blood_type]</span><br>"
else
dat += "<span class='notice'>Blood Level Normal: [blood_percent]% [blood_volume]cl. Type: [blood_type]</span><br>"
dat += "<span class='notice'>Subject's pulse: <font color='[H.pulse == PULSE_THREADY || H.pulse == PULSE_NONE ? "red" : "blue"]'>[H.get_pulse(GETPULSE_TOOL)] bpm.</font></span><br>" // VORE Edit: Missed a linebreak here.
if(istype(H.species, /datum/species/xenochimera)) // VOREStation Edit Start: Visible feedback for medmains on Xenochimera.
if(H.stat == DEAD && H.revive_ready == REVIVING_READY && !H.hasnutriment())
dat += "<span class='danger'>WARNING: Protein levels low. Subject incapable of reconstitution.</span>"
else if(H.revive_ready == REVIVING_NOW)
dat += "<span class='warning'>Subject is undergoing form reconstruction. Estimated time to finish is in: [round((H.revive_finished - world.time) / 10)] seconds.</span>"
else if(H.revive_ready == REVIVING_DONE)
dat += "<span class='notice'>Subject is ready to hatch. Transfer to dark room for holding with food available.</span>"
else if(H.stat == DEAD)
dat+= "<span class='danger'>WARNING: Defib will cause extreme pain and set subject feral. Sedation recommended prior to defibrillation.</span>"
else // If they bop them and they're not dead or reviving, give 'em a little notice.
dat += "<span class='notice'>Subject is a Xenochimera. Treat accordingly.</span>"
// VOREStation Edit End
user.show_message(dat, 1)
/obj/item/device/healthanalyzer/verb/toggle_mode()
set name = "Switch Verbosity"
set category = "Object"
mode = !mode
switch (mode)
if(1)
to_chat(usr, "The scanner now shows specific limb damage.")
if(0)
to_chat(usr, "The scanner no longer shows limb damage.")
/obj/item/device/healthanalyzer/proc/toggle_adv()
set name = "Toggle Advanced Scan"
set category = "Object"
showadvscan = !showadvscan
switch (showadvscan)
if(1)
to_chat(usr, "The scanner will now perform an advanced analysis.")
if(0)
to_chat(usr, "The scanner will now perform a basic analysis.")
/obj/item/device/healthanalyzer/improved //reports bone fractures, IB, quantity of beneficial reagents in stomach; also regular health analyzer stuff
name = "improved health analyzer"
desc = "A miracle of medical technology, this handheld scanner can produce an accurate and specific report of a patient's biosigns."
advscan = 1
origin_tech = list(TECH_MAGNET = 5, TECH_BIO = 6)
icon_state = "health1"
/obj/item/device/healthanalyzer/advanced //reports all of the above, as well as radiation severity and minor brain damage
name = "advanced health analyzer"
desc = "An even more advanced handheld health scanner, complete with a full biosign monitor and on-board radiation and neurological analysis suites."
advscan = 2
origin_tech = list(TECH_MAGNET = 6, TECH_BIO = 7)
icon_state = "health2"
/obj/item/device/healthanalyzer/phasic //reports all of the above, as well as name and quantity of nonmed reagents in stomach
name = "phasic health analyzer"
desc = "Possibly the most advanced health analyzer to ever have existed, utilising bluespace technology to determine almost everything worth knowing about a patient."
advscan = 3
origin_tech = list(TECH_MAGNET = 7, TECH_BIO = 8)
icon_state = "health3"
#define DEFIB_TIME_LIMIT (10 MINUTES) //VOREStation addition- past this many seconds, defib is useless.
/obj/item/device/healthanalyzer
name = "health analyzer"
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
icon_state = "health"
item_state = "healthanalyzer"
slot_flags = SLOT_BELT
throwforce = 3
w_class = ITEMSIZE_SMALL
throw_speed = 5
throw_range = 10
matter = list(MAT_STEEL = 200)
origin_tech = list(TECH_MAGNET = 1, TECH_BIO = 1)
var/mode = 1;
var/advscan = 0
var/showadvscan = 1
/obj/item/device/healthanalyzer/New()
if(advscan >= 1)
verbs += /obj/item/device/healthanalyzer/proc/toggle_adv
..()
/obj/item/device/healthanalyzer/do_surgery(mob/living/M, mob/living/user)
if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool
return ..()
scan_mob(M, user) //default surgery behaviour is just to scan as usual
return 1
/obj/item/device/healthanalyzer/attack(mob/living/M, mob/living/user)
scan_mob(M, user)
/obj/item/device/healthanalyzer/proc/scan_mob(mob/living/M, mob/living/user)
var/dat = ""
if ((CLUMSY in user.mutations) && prob(50))
user.visible_message("<span class='warning'>\The [user] has analyzed the floor's vitals!</span>", "<span class='warning'>You try to analyze the floor's vitals!</span>")
dat += "Analyzing Results for the floor:<br>"
dat += "Overall Status: Healthy<br>"
dat += "\tDamage Specifics: 0-0-0-0<br>"
dat += "Key: Suffocation/Toxin/Burns/Brute<br>"
dat += "Body Temperature: ???"
user.show_message("<span class='notice'>[dat]</span>", 1)
return
if (!user.IsAdvancedToolUser())
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
return
flick("[icon_state]-scan", src) //makes it so that it plays the scan animation on a succesful scan
user.visible_message("<span class='notice'>[user] has analyzed [M]'s vitals.</span>","<span class='notice'>You have analyzed [M]'s vitals.</span>")
if (!ishuman(M) || M.isSynthetic())
//these sensors are designed for organic life
dat += "<span class='notice'>Analyzing Results for ERROR:\n\tOverall Status: ERROR<br>"
dat += "\tKey: <font color='cyan'>Suffocation</font>/<font color='green'>Toxin</font>/<font color='#FFA500'>Burns</font>/<font color='red'>Brute</font><br>"
dat += "\tDamage Specifics: <font color='cyan'>?</font> - <font color='green'>?</font> - <font color='#FFA500'>?</font> - <font color='red'>?</font><br>"
dat += "Body Temperature: [M.bodytemperature-T0C]&deg;C ([M.bodytemperature*1.8-459.67]&deg;F)</span><br>"
dat += "<span class='warning'>Warning: Blood Level ERROR: --% --cl.</span> <span class='notice'>Type: ERROR</span><br>"
dat += "<span class='notice'>Subject's pulse: <font color='red'>-- bpm.</font></span>"
user.show_message(dat, 1)
return
var/fake_oxy = max(rand(1,40), M.getOxyLoss(), (300 - (M.getToxLoss() + M.getFireLoss() + M.getBruteLoss())))
var/OX = M.getOxyLoss() > 50 ? "<b>[M.getOxyLoss()]</b>" : M.getOxyLoss()
var/TX = M.getToxLoss() > 50 ? "<b>[M.getToxLoss()]</b>" : M.getToxLoss()
var/BU = M.getFireLoss() > 50 ? "<b>[M.getFireLoss()]</b>" : M.getFireLoss()
var/BR = M.getBruteLoss() > 50 ? "<b>[M.getBruteLoss()]</b>" : M.getBruteLoss()
if(M.status_flags & FAKEDEATH)
OX = fake_oxy > 50 ? "<b>[fake_oxy]</b>" : fake_oxy
dat += "<span class='notice'>Analyzing Results for [M]:</span><br>"
dat += "<span class='notice'>Overall Status: dead</span><br>"
else
dat += "<span class='notice'>Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "dead" : "[round((M.health/M.getMaxHealth())*100) ]% healthy"]<br>"
dat += "\tKey: <font color='cyan'>Suffocation</font>/<font color='green'>Toxin</font>/<font color='#FFA500'>Burns</font>/<font color='red'>Brute</font><br>"
dat += "\tDamage Specifics: <font color='cyan'>[OX]</font> - <font color='green'>[TX]</font> - <font color='#FFA500'>[BU]</font> - <font color='red'>[BR]</font><br>"
dat += "Body Temperature: [M.bodytemperature-T0C]&deg;C ([M.bodytemperature*1.8-459.67]&deg;F)</span><br>"
//VOREStation edit/addition starts
if(M.timeofdeath && (M.stat == DEAD || (M.status_flags & FAKEDEATH)))
dat += "<span class='notice'>Time of Death: [worldtime2stationtime(M.timeofdeath)]</span><br>"
var/tdelta = round(world.time - M.timeofdeath)
if(tdelta < (DEFIB_TIME_LIMIT * 10))
dat += "<span class='notice'><b>Subject died [DisplayTimeText(tdelta)] ago - resuscitation may be possible!</b></span><br>"
//VOREStation edit/addition ends
if(istype(M, /mob/living/carbon/human) && mode == 1)
var/mob/living/carbon/human/H = M
var/list/damaged = H.get_damaged_organs(1,1)
dat += "<span class='notice'>Localized Damage, Brute/Burn:</span><br>"
if(length(damaged)>0)
for(var/obj/item/organ/external/org in damaged)
if(org.robotic >= ORGAN_ROBOT)
continue
else
dat += "<span class='notice'> [capitalize(org.name)]: [(org.brute_dam > 0) ? "<span class='warning'>[org.brute_dam]</span>" : 0]"
dat += "[(org.status & ORGAN_BLEEDING)?"<span class='danger'>\[Bleeding\]</span>":""] - "
dat += "[(org.burn_dam > 0) ? "<font color='#FFA500'>[org.burn_dam]</font>" : 0]</span><br>"
else
dat += "<span class='notice'> Limbs are OK.</span><br>"
OX = M.getOxyLoss() > 50 ? "<font color='cyan'><b>Severe oxygen deprivation detected</b></font>" : "Subject bloodstream oxygen level normal"
TX = M.getToxLoss() > 50 ? "<font color='green'><b>Dangerous amount of toxins detected</b></font>" : "Subject bloodstream toxin level minimal"
BU = M.getFireLoss() > 50 ? "<font color='#FFA500'><b>Severe burn damage detected</b></font>" : "Subject burn injury status O.K"
BR = M.getBruteLoss() > 50 ? "<font color='red'><b>Severe anatomical damage detected</b></font>" : "Subject brute-force injury status O.K"
if(M.status_flags & FAKEDEATH)
OX = fake_oxy > 50 ? "<span class='warning'>Severe oxygen deprivation detected</span>" : "Subject bloodstream oxygen level normal"
dat += "[OX] | [TX] | [BU] | [BR]<br>"
if(M.radiation)
if(advscan >= 2 && showadvscan == 1)
var/severity = ""
if(M.radiation >= 75)
severity = "Critical"
else if(M.radiation >= 50)
severity = "Severe"
else if(M.radiation >= 25)
severity = "Moderate"
else if(M.radiation >= 1)
severity = "Low"
dat += "<span class='warning'>[severity] levels of radiation detected. [(severity == "Critical") ? " Immediate treatment advised." : ""]</span><br>"
else
dat += "<span class='warning'>Radiation detected.</span><br>"
if(iscarbon(M))
var/mob/living/carbon/C = M
if(C.reagents.total_volume)
var/unknown = 0
var/reagentdata[0]
var/unknownreagents[0]
for(var/datum/reagent/R as anything in C.reagents.reagent_list)
if(R.scannable)
reagentdata["[R.id]"] = "<span class='notice'>\t[round(C.reagents.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
else
unknown++
unknownreagents["[R.id]"] = "<span class='notice'>\t[round(C.reagents.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
if(reagentdata.len)
dat += "<span class='notice'>Beneficial reagents detected in subject's blood:</span><br>"
for(var/d in reagentdata)
dat += reagentdata[d]
if(unknown)
if(advscan >= 3 && showadvscan == 1)
dat += "<span class='warning'>Warning: Non-medical reagent[(unknown>1)?"s":""] detected in subject's blood:</span><br>"
for(var/d in unknownreagents)
dat += unknownreagents[d]
else
dat += "<span class='warning'>Warning: Unknown substance[(unknown>1)?"s":""] detected in subject's blood.</span><br>"
if(C.ingested && C.ingested.total_volume)
var/unknown = 0
var/stomachreagentdata[0]
var/stomachunknownreagents[0]
for(var/datum/reagent/R as anything in C.ingested.reagent_list)
if(R.scannable)
stomachreagentdata["[R.id]"] = "<span class='notice'>\t[round(C.ingested.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
if (advscan == 0 || showadvscan == 0)
dat += "<span class='notice'>[R.name] found in subject's stomach.</span><br>"
else
++unknown
stomachunknownreagents["[R.id]"] = "<span class='notice'>\t[round(C.ingested.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
if(advscan >= 1 && showadvscan == 1)
dat += "<span class='notice'>Beneficial reagents detected in subject's stomach:</span><br>"
for(var/d in stomachreagentdata)
dat += stomachreagentdata[d]
if(unknown)
if(advscan >= 3 && showadvscan == 1)
dat += "<span class='warning'>Warning: Non-medical reagent[(unknown > 1)?"s":""] found in subject's stomach:</span><br>"
for(var/d in stomachunknownreagents)
dat += stomachunknownreagents[d]
else
dat += "<span class='warning'>Unknown substance[(unknown > 1)?"s":""] found in subject's stomach.</span><br>"
if(C.touching && C.touching.total_volume)
var/unknown = 0
var/touchreagentdata[0]
var/touchunknownreagents[0]
for(var/datum/reagent/R as anything in C.touching.reagent_list)
if(R.scannable)
touchreagentdata["[R.id]"] = "<span class='notice'>\t[round(C.touching.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.can_overdose_touch && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
if (advscan == 0 || showadvscan == 0)
dat += "<span class='notice'>[R.name] found in subject's dermis.</span><br>"
else
++unknown
touchunknownreagents["[R.id]"] = "<span class='notice'>\t[round(C.ingested.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.can_overdose_touch && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
if(advscan >= 1 && showadvscan == 1)
dat += "<span class='notice'>Beneficial reagents detected in subject's dermis:</span><br>"
for(var/d in touchreagentdata)
dat += touchreagentdata[d]
if(unknown)
if(advscan >= 3 && showadvscan == 1)
dat += "<span class='warning'>Warning: Non-medical reagent[(unknown > 1)?"s":""] found in subject's dermis:</span><br>"
for(var/d in touchunknownreagents)
dat += touchunknownreagents[d]
else
dat += "<span class='warning'>Unknown substance[(unknown > 1)?"s":""] found in subject's dermis.</span><br>"
if(C.virus2.len)
for (var/ID in C.virus2)
if (ID in virusDB)
var/datum/data/record/V = virusDB[ID]
dat += "<span class='warning'>Warning: Pathogen [V.fields["name"]] detected in subject's blood. Known antigen : [V.fields["antigen"]]</span><br>"
else
dat += "<span class='warning'>Warning: Unknown pathogen detected in subject's blood.</span><br>"
if (M.getCloneLoss())
dat += "<span class='warning'>Subject appears to have been imperfectly cloned.</span><br>"
// if (M.reagents && M.reagents.get_reagent_amount("inaprovaline"))
// user.show_message("<span class='notice'>Bloodstream Analysis located [M.reagents:get_reagent_amount("inaprovaline")] units of rejuvenation chemicals.</span>")
if (M.has_brain_worms())
dat += "<span class='warning'>Subject suffering from aberrant brain activity. Recommend further scanning.</span><br>"
else if (M.getBrainLoss() >= 60 || !M.has_brain())
dat += "<span class='warning'>Subject is brain dead.</span><br>"
else if (M.getBrainLoss() >= 25)
dat += "<span class='warning'>Severe brain damage detected. Subject likely to have a traumatic brain injury.</span><br>"
else if (M.getBrainLoss() >= 10)
dat += "<span class='warning'>Significant brain damage detected. Subject may have had a concussion.</span><br>"
else if (M.getBrainLoss() >= 1 && advscan >= 2 && showadvscan == 1)
dat += "<span class='warning'>Minor brain damage detected.</span><br>"
if(ishuman(M))
var/mob/living/carbon/human/H = M
for(var/obj/item/organ/internal/appendix/a in H.internal_organs)
var/severity = ""
if(a.inflamed > 3)
severity = "Severe"
else if(a.inflamed > 2)
severity = "Moderate"
else if(a.inflamed >= 1)
severity = "Mild"
if(severity)
dat += "<span class='warning'>[severity] inflammation detected in subject [a.name].</span><br>"
// Infections, fractures, and IB
var/basic_fracture = 0 // If it's a basic scanner
var/basic_ib = 0 // If it's a basic scanner
var/fracture_dat = "" // All the fractures
var/infection_dat = "" // All the infections
var/ib_dat = "" // All the IB
for(var/obj/item/organ/external/e in H.organs)
if(!e)
continue
// Broken limbs
if(e.status & ORGAN_BROKEN)
if((e.name in list(BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG, BP_HEAD, BP_TORSO, BP_GROIN)) && (!e.splinted))
fracture_dat += "<span class='warning'>Unsecured fracture in subject [e.name]. Splinting recommended for transport.</span><br>"
else if(advscan >= 1 && showadvscan == 1)
fracture_dat += "<span class='warning'>Bone fractures detected in subject [e.name].</span><br>"
else
basic_fracture = 1
// Infections
if(e.has_infected_wound())
dat += "<span class='warning'>Infected wound detected in subject [e.name]. Disinfection recommended.</span><br>"
// IB
for(var/datum/wound/W in e.wounds)
if(W.internal)
if(advscan >= 1 && showadvscan == 1)
ib_dat += "<span class='warning'>Internal bleeding detected in subject [e.name].</span><br>"
else
basic_ib = 1
if(basic_fracture)
fracture_dat += "<span class='warning'>Bone fractures detected. Advanced scanner required for location.</span><br>"
if(basic_ib)
ib_dat += "<span class='warning'>Internal bleeding detected. Advanced scanner required for location.</span><br>"
dat += fracture_dat
dat += infection_dat
dat += ib_dat
// Blood level
if(M:vessel)
var/blood_volume = H.vessel.get_reagent_amount("blood")
var/blood_percent = round((blood_volume / H.species.blood_volume)*100)
var/blood_type = H.dna.b_type
if(blood_volume <= H.species.blood_volume*H.species.blood_level_danger)
dat += "<span class='danger'><i>Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl. Type: [blood_type]</i></span><br>"
else if(blood_volume <= H.species.blood_volume*H.species.blood_level_warning)
dat += "<span class='danger'><i>Warning: Blood Level VERY LOW: [blood_percent]% [blood_volume]cl. Type: [blood_type]</i></span><br>"
else if(blood_volume <= H.species.blood_volume*H.species.blood_level_safe)
dat += "<span class='danger'>Warning: Blood Level LOW: [blood_percent]% [blood_volume]cl. Type: [blood_type]</span><br>"
else
dat += "<span class='notice'>Blood Level Normal: [blood_percent]% [blood_volume]cl. Type: [blood_type]</span><br>"
dat += "<span class='notice'>Subject's pulse: <font color='[H.pulse == PULSE_THREADY || H.pulse == PULSE_NONE ? "red" : "blue"]'>[H.get_pulse(GETPULSE_TOOL)] bpm.</font></span><br>" // VORE Edit: Missed a linebreak here.
if(istype(H.species, /datum/species/xenochimera)) // VOREStation Edit Start: Visible feedback for medmains on Xenochimera.
if(H.stat == DEAD && H.revive_ready == REVIVING_READY && !H.hasnutriment())
dat += "<span class='danger'>WARNING: Protein levels low. Subject incapable of reconstitution.</span>"
else if(H.revive_ready == REVIVING_NOW)
dat += "<span class='warning'>Subject is undergoing form reconstruction. Estimated time to finish is in: [round((H.revive_finished - world.time) / 10)] seconds.</span>"
else if(H.revive_ready == REVIVING_DONE)
dat += "<span class='notice'>Subject is ready to hatch. Transfer to dark room for holding with food available.</span>"
else if(H.stat == DEAD)
dat+= "<span class='danger'>WARNING: Defib will cause extreme pain and set subject feral. Sedation recommended prior to defibrillation.</span>"
else // If they bop them and they're not dead or reviving, give 'em a little notice.
dat += "<span class='notice'>Subject is a Xenochimera. Treat accordingly.</span>"
// VOREStation Edit End
user.show_message(dat, 1)
/obj/item/device/healthanalyzer/verb/toggle_mode()
set name = "Switch Verbosity"
set category = "Object"
mode = !mode
switch (mode)
if(1)
to_chat(usr, "The scanner now shows specific limb damage.")
if(0)
to_chat(usr, "The scanner no longer shows limb damage.")
/obj/item/device/healthanalyzer/proc/toggle_adv()
set name = "Toggle Advanced Scan"
set category = "Object"
showadvscan = !showadvscan
switch (showadvscan)
if(1)
to_chat(usr, "The scanner will now perform an advanced analysis.")
if(0)
to_chat(usr, "The scanner will now perform a basic analysis.")
/obj/item/device/healthanalyzer/improved //reports bone fractures, IB, quantity of beneficial reagents in stomach; also regular health analyzer stuff
name = "improved health analyzer"
desc = "A miracle of medical technology, this handheld scanner can produce an accurate and specific report of a patient's biosigns."
advscan = 1
origin_tech = list(TECH_MAGNET = 5, TECH_BIO = 6)
icon_state = "health1"
/obj/item/device/healthanalyzer/advanced //reports all of the above, as well as radiation severity and minor brain damage
name = "advanced health analyzer"
desc = "An even more advanced handheld health scanner, complete with a full biosign monitor and on-board radiation and neurological analysis suites."
advscan = 2
origin_tech = list(TECH_MAGNET = 6, TECH_BIO = 7)
icon_state = "health2"
/obj/item/device/healthanalyzer/phasic //reports all of the above, as well as name and quantity of nonmed reagents in stomach
name = "phasic health analyzer"
desc = "Possibly the most advanced health analyzer to ever have existed, utilising bluespace technology to determine almost everything worth knowing about a patient."
advscan = 3
origin_tech = list(TECH_MAGNET = 7, TECH_BIO = 8)
icon_state = "health3"
#undef DEFIB_TIME_LIMIT //VOREStation addition
+7 -8
View File
@@ -17,8 +17,8 @@
var/obj/machinery/camera/bug/camera
var/camtype = /obj/machinery/camera/bug
/obj/item/device/camerabug/Initialize()
. = ..()
/obj/item/device/camerabug/New()
..()
// radio = new(src)
camera = new camtype(src)
@@ -158,9 +158,8 @@
var/obj/machinery/camera/bug/selected_camera
var/list/obj/machinery/camera/bug/cameras = new()
/*
/obj/item/device/bug_monitor/Initialize()
/obj/item/device/bug_monitor/New()
radio = new(src)
. = ..()
*/
/obj/item/device/bug_monitor/attack_self(mob/user)
if(operating)
@@ -243,8 +242,8 @@
/obj/machinery/camera/bug
network = list(NETWORK_SECURITY)
/obj/machinery/camera/bug/Initialize()
. = ..()
/obj/machinery/camera/bug/New()
..()
name = "Camera #[rand(1000,9999)]"
c_tag = name
@@ -252,8 +251,8 @@
// These cheap toys are accessible from the mercenary camera console as well - only the antag ones though!
network = list(NETWORK_MERCENARY)
/obj/machinery/camera/bug/spy/Initialize()
. = ..()
/obj/machinery/camera/bug/spy/New()
..()
name = "DV-136ZB #[rand(1000,9999)]"
c_tag = name
@@ -18,8 +18,8 @@
throw_speed = 4
throw_range = 20
/obj/item/device/taperecorder/Initialize()
. = ..()
/obj/item/device/taperecorder/New()
..()
if(ispath(mytape))
mytape = new mytape(src)
update_icon()
@@ -431,6 +431,5 @@
//Random colour tapes
/obj/item/device/tape/random/Initialize()
. = ..()
/obj/item/device/tape/random/New()
icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple")]"
+4 -1
View File
@@ -11,6 +11,10 @@
var/weakref/showing
var/showing_name
/obj/item/device/tvcamera/New()
..()
listening_objects += src
/obj/item/device/tvcamera/Destroy()
listening_objects -= src
qdel(camera)
@@ -26,7 +30,6 @@
/obj/item/device/tvcamera/Initialize()
. = ..()
listening_objects += src
camera = new(src)
camera.c_tag = channel
camera.status = FALSE
+6 -6
View File
@@ -212,8 +212,8 @@
//
// Includes normal radio uplink, multitool uplink,
// implant uplink (not the implant tool) and a preset headset uplink.
/obj/item/device/radio/uplink/Initialize()
. = ..()
/obj/item/device/radio/uplink/New()
..()
hidden_uplink = new(src)
icon_state = "radio"
@@ -221,8 +221,8 @@
if(hidden_uplink)
hidden_uplink.trigger(user)
/obj/item/device/multitool/uplink/Initialize()
. = ..()
/obj/item/device/multitool/uplink/New()
..()
hidden_uplink = new(src)
/obj/item/device/multitool/uplink/attack_self(mob/user as mob)
@@ -232,6 +232,6 @@
/obj/item/device/radio/headset/uplink
traitor_frequency = 1445
/obj/item/device/radio/headset/uplink/Initialize()
. = ..()
/obj/item/device/radio/headset/uplink/New()
..()
hidden_uplink = new(src)
-41
View File
@@ -1,41 +0,0 @@
//copy pasta of the space piano, don't hurt me -Pete
/obj/item/device/instrument
name = "generic instrument"
var/datum/song/handheld/song
var/instrumentId = "generic"
var/instrumentExt = "mid"
icon = 'icons/obj/musician.dmi'
force = 10
/obj/item/device/instrument/Initialize()
. = ..()
song = new(instrumentId, src)
song.instrumentExt = instrumentExt
/obj/item/device/instrument/Destroy()
qdel(song)
song = null
..()
/obj/item/device/instrument/attack_self(mob/user as mob)
if(!user.IsAdvancedToolUser())
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
return 1
interact(user)
/obj/item/device/instrument/interact(mob/user as mob)
if(!user)
return
if(user.incapacitated() || user.lying)
return
user.set_machine(src)
song.interact(user)
/obj/item/device/instrument/violin
name = "space violin"
desc = "A wooden musical instrument with four strings and a bow. \"The devil went down to space, he was looking for an assistant to grief.\""
icon_state = "violin"
attack_verb = list("smashed")
instrumentId = "violin"