mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-02-08 15:19:48 +00:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into polaris-sync-2018-02-23
# Conflicts: # code/game/jobs/job_controller.dm # code/game/machinery/oxygen_pump.dm # code/game/objects/items/weapons/storage/firstaid.dm # code/game/objects/structures/crates_lockers/closets/secure/security.dm # code/modules/mob/new_player/new_player.dm # code/modules/organs/internal/eyes.dm # html/changelogs/.all_changelog.yml # maps/southern_cross/southern_cross-1.dmm # vorestation.dme
This commit is contained in:
@@ -145,7 +145,7 @@
|
||||
var/obj/item/weapon/reagent_containers/syringe/syringe
|
||||
|
||||
/obj/structure/closet/body_bag/cryobag/New()
|
||||
tank = new /obj/item/weapon/tank/emergency/oxygen(null) //It's in nullspace to prevent ejection when the bag is opened.
|
||||
tank = new /obj/item/weapon/tank/emergency/oxygen/double(null) //It's in nullspace to prevent ejection when the bag is opened.
|
||||
..()
|
||||
|
||||
/obj/structure/closet/body_bag/cryobag/Destroy()
|
||||
|
||||
@@ -1379,14 +1379,12 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
to_chat(user, "<span class='notice'>Blood type: [C:blood_DNA[blood]]\nDNA: [blood]</span>")
|
||||
|
||||
if(4)
|
||||
for (var/mob/O in viewers(C, null))
|
||||
O.show_message("<span class='warning'>\The [user] has analyzed [C]'s radiation levels!</span>", 1)
|
||||
|
||||
user.show_message("<span class='notice'>Analyzing Results for [C]:</span>")
|
||||
user.visible_message("<span class='warning'>\The [user] has analyzed [C]'s radiation levels!</span>", 1)
|
||||
to_chat(user, "<span class='notice'>Analyzing Results for [C]:</span>")
|
||||
if(C.radiation)
|
||||
user.show_message("<span class='notice'>Radiation Level: [C.radiation]</span>")
|
||||
to_chat(user, "<span class='notice'>Radiation Level: [C.radiation]</span>")
|
||||
else
|
||||
user.show_message("<span class='notice'>No radiation detected.</span>")
|
||||
to_chat(user, "<span class='notice'>No radiation detected.</span>")
|
||||
|
||||
/obj/item/device/pda/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity)
|
||||
if(!proximity) return
|
||||
|
||||
@@ -104,16 +104,16 @@ var/list/GPS_list = list()
|
||||
if(istype(their_area, /area/submap))
|
||||
area_name = "Unknown Area" // Avoid spoilers.
|
||||
var/Z_name = using_map.get_zlevel_name(T.z)
|
||||
var/direction = uppertext(dir2text(get_dir(curr, T)))
|
||||
var/direction = get_adir(curr, T)
|
||||
var/distX = T.x - curr.x
|
||||
var/distY = T.y - curr.y
|
||||
var/distance = get_dist(curr, T)
|
||||
var/local = curr.z == T.z ? TRUE : FALSE
|
||||
if(!direction)
|
||||
direction = "CENTER"
|
||||
|
||||
if(istype(T, /obj/item/device/gps/internal/poi))
|
||||
signals += " [G.gps_tag]: [area_name] [local ? "Dist: [round(distance, 10)]m [direction])" : "in \the [Z_name]"]"
|
||||
if(istype(gps, /obj/item/device/gps/internal/poi))
|
||||
signals += " [G.gps_tag]: [area_name] - [local ? "[direction] Dist: [round(distance, 10)]m" : "in \the [Z_name]"]"
|
||||
else
|
||||
signals += " [G.gps_tag]: [area_name] [local ? "Dist: [round(distance, 10)]m [direction])" : "in \the [Z_name]"]"
|
||||
signals += " [G.gps_tag]: [area_name], ([T.x], [T.y]) - [local ? "[direction] Dist: [distX ? "[abs(round(distX, 1))]m [(distX > 0) ? "E" : "W"], " : ""][distY ? "[abs(round(distY, 1))]m [(distY > 0) ? "N" : "S"]" : ""]" : "in \the [Z_name]"]"
|
||||
|
||||
if(signals.len)
|
||||
dat += "Detected signals;"
|
||||
@@ -250,12 +250,9 @@ var/list/GPS_list = list()
|
||||
var/Z_name = using_map.get_zlevel_name(T.z)
|
||||
var/coord = "[T.x], [T.y], [Z_name]"
|
||||
var/degrees = round(Get_Angle(curr, T))
|
||||
var/direction = uppertext(dir2text(get_dir(curr, T)))
|
||||
var/direction = get_adir(curr, T)
|
||||
var/distance = get_dist(curr, T)
|
||||
var/local = curr.z == T.z ? TRUE : FALSE
|
||||
if(!direction)
|
||||
direction = "CENTER"
|
||||
degrees = "N/A"
|
||||
|
||||
signals += " [G.gps_tag]: [area_name] ([coord]) [local ? "Dist: [distance]m Dir: [degrees]° ([direction])":""]"
|
||||
|
||||
|
||||
@@ -92,77 +92,66 @@
|
||||
name = "security radio headset"
|
||||
desc = "This is used by your elite security force."
|
||||
icon_state = "sec_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/headset_sec
|
||||
|
||||
/obj/item/device/radio/headset/headset_sec/alt
|
||||
name = "security bowman headset"
|
||||
desc = "This is used by your elite security force."
|
||||
icon_state = "sec_headset_alt"
|
||||
item_state = "headset"
|
||||
ks2type = /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."
|
||||
icon_state = "eng_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/headset_eng
|
||||
|
||||
/obj/item/device/radio/headset/headset_eng/alt
|
||||
name = "engineering bowman headset"
|
||||
desc = "When the engineers wish to chat like girls."
|
||||
icon_state = "eng_headset_alt"
|
||||
item_state = "headset"
|
||||
ks2type = /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."
|
||||
icon_state = "rob_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /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."
|
||||
icon_state = "med_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/headset_med
|
||||
|
||||
/obj/item/device/radio/headset/headset_med/alt
|
||||
name = "medical bowman headset"
|
||||
desc = "A headset for the trained staff of the medbay."
|
||||
icon_state = "med_headset_alt"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/headset_med
|
||||
|
||||
/obj/item/device/radio/headset/headset_sci
|
||||
name = "science radio headset"
|
||||
desc = "A sciency headset. Like usual."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /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."
|
||||
icon_state = "med_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/headset_medsci
|
||||
|
||||
/obj/item/device/radio/headset/headset_com
|
||||
name = "command radio headset"
|
||||
desc = "A headset with a commanding channel."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/headset_com
|
||||
|
||||
/obj/item/device/radio/headset/headset_com/alt
|
||||
name = "command bowman headset"
|
||||
desc = "A headset with a commanding channel."
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/headset_com
|
||||
|
||||
|
||||
@@ -170,21 +159,18 @@
|
||||
name = "colony director's headset"
|
||||
desc = "The headset of the boss."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/captain
|
||||
|
||||
/obj/item/device/radio/headset/heads/captain/alt
|
||||
name = "colony director's bowman headset"
|
||||
desc = "The headset of the boss."
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/captain
|
||||
|
||||
/obj/item/device/radio/headset/heads/captain/sfr
|
||||
name = "SFR headset"
|
||||
desc = "A headset belonging to a Sif Free Radio DJ. SFR, best tunes in the wilderness."
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/captain
|
||||
|
||||
/obj/item/device/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway.
|
||||
@@ -206,105 +192,91 @@
|
||||
name = "research director's headset"
|
||||
desc = "Headset of the researching God."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/rd
|
||||
|
||||
/obj/item/device/radio/headset/heads/rd/alt
|
||||
name = "research director's bowman headset"
|
||||
desc = "Headset of the researching God."
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "headset"
|
||||
ks2type = /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."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/device/radio/headset/heads/hos/alt
|
||||
name = "head of security's bowman headset"
|
||||
desc = "The headset of the man who protects your worthless lifes."
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "headset"
|
||||
ks2type = /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"
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/ce
|
||||
|
||||
/obj/item/device/radio/headset/heads/ce/alt
|
||||
name = "chief engineer's bowman headset"
|
||||
desc = "The headset of the guy who is in charge of morons"
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "headset"
|
||||
ks2type = /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."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/cmo
|
||||
|
||||
/obj/item/device/radio/headset/heads/cmo/alt
|
||||
name = "chief medical officer's bowman headset"
|
||||
desc = "The headset of the highly trained medical chief."
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "headset"
|
||||
ks2type = /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 Colony Director."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/hop
|
||||
|
||||
/obj/item/device/radio/headset/heads/hop/alt
|
||||
name = "head of personnel's bowman headset"
|
||||
desc = "The headset of the guy who will one day be Colony Director."
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "headset"
|
||||
ks2type = /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."
|
||||
desc = "Headset used by miners. Has inbuilt short-band radio for when comms are down."
|
||||
icon_state = "mine_headset"
|
||||
item_state = "headset"
|
||||
keyslot2 = new /obj/item/device/encryptionkey/headset_mine
|
||||
*/
|
||||
adhoc_fallback = TRUE
|
||||
ks2type = /obj/item/device/encryptionkey/headset_cargo
|
||||
|
||||
/obj/item/device/radio/headset/headset_cargo
|
||||
name = "supply radio headset"
|
||||
desc = "A headset used by the QM and his slaves."
|
||||
icon_state = "cargo_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/headset_cargo
|
||||
|
||||
/obj/item/device/radio/headset/headset_cargo/alt
|
||||
name = "supply bowman headset"
|
||||
desc = "A bowman headset used by the QM and his slaves."
|
||||
icon_state = "cargo_headset_alt"
|
||||
item_state = "headset"
|
||||
ks2type = /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."
|
||||
icon_state = "srv_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/headset_service
|
||||
|
||||
/obj/item/device/radio/headset/ert
|
||||
name = "emergency response team radio headset"
|
||||
desc = "The headset of the boss's boss."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
centComm = 1
|
||||
// freerange = 1
|
||||
ks2type = /obj/item/device/encryptionkey/ert
|
||||
@@ -313,7 +285,6 @@
|
||||
name = "emergency response team bowman headset"
|
||||
desc = "The headset of the boss's boss."
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "headset"
|
||||
// freerange = 1
|
||||
ks2type = /obj/item/device/encryptionkey/ert
|
||||
|
||||
@@ -324,7 +295,6 @@
|
||||
name = "internal affair's headset"
|
||||
desc = "The headset of your worst enemy."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/device/radio/headset/mmi_radio
|
||||
|
||||
@@ -3,9 +3,10 @@ CONTAINS:
|
||||
T-RAY
|
||||
DETECTIVE SCANNER
|
||||
HEALTH ANALYZER
|
||||
GAS ANALYZER
|
||||
GAS ANALYZER - Analyzes atmosphere, container
|
||||
MASS SPECTROMETER
|
||||
REAGENT SCANNER
|
||||
HALOGEN COUNTER - Radcount on mobs
|
||||
*/
|
||||
|
||||
|
||||
@@ -41,29 +42,30 @@ REAGENT SCANNER
|
||||
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 << text("<span class='warning'>You try to analyze the floor's vitals!</span>")
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message("<span class='warning'>\The [user] has analyzed the floor's vitals!</span>", 1)
|
||||
user.show_message("<span class='notice'>Analyzing Results for The floor:</span>", 1)
|
||||
user.show_message("<span class='notice'>Overall Status: Healthy</span>", 1)
|
||||
user.show_message("<span class='notice'> Damage Specifics: 0-0-0-0</span>", 1)
|
||||
user.show_message("<span class='notice'>Key: Suffocation/Toxin/Burns/Brute</span>", 1)
|
||||
user.show_message("<span class='notice'>Body Temperature: ???</span>", 1)
|
||||
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 (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
|
||||
usr << "<span class='warning'>You don't have the dexterity to do this!</span>"
|
||||
if (!(ishuman(user) || ticker) && ticker.mode.name != "monkey")
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] has analyzed [M]'s vitals.</span>","<span class='notice'>You have analyzed [M]'s vitals.</span>")
|
||||
|
||||
if (!istype(M,/mob/living/carbon/human) || M.isSynthetic())
|
||||
if (!ishuman(M) || M.isSynthetic())
|
||||
//these sensors are designed for organic life
|
||||
user.show_message("<span class='notice'>Analyzing Results for ERROR:\n\t Overall Status: ERROR</span>")
|
||||
user.show_message("<span class='notice'> Key: <font color='cyan'>Suffocation</font>/<font color='green'>Toxin</font>/<font color='#FFA500'>Burns</font>/<font color='red'>Brute</font></span>", 1)
|
||||
user.show_message("<span class='notice'> Damage Specifics: <font color='cyan'>?</font> - <font color='green'>?</font> - <font color='#FFA500'>?</font> - <font color='red'>?</font></span>")
|
||||
user.show_message("<span class='notice'>Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)</span>", 1)
|
||||
user.show_message("<span class='warning'>Warning: Blood Level ERROR: --% --cl.</span> <span class='notice'>Type: ERROR</span>")
|
||||
user.show_message("<span class='notice'>Subject's pulse: <font color='red'>-- bpm.</font></span>")
|
||||
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]°C ([M.bodytemperature*1.8-459.67]°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())))
|
||||
@@ -73,52 +75,52 @@ REAGENT SCANNER
|
||||
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
|
||||
user.show_message("<span class='notice'>Analyzing Results for [M]:</span>")
|
||||
user.show_message("<span class='notice'>Overall Status: dead</span>")
|
||||
dat += "<span class='notice'>Analyzing Results for [M]:</span><br>"
|
||||
dat += "<span class='notice'>Overall Status: dead</span><br>"
|
||||
else
|
||||
user.show_message("<span class='notice'>Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "dead" : "[round((M.health/M.getMaxHealth())*100) ]% healthy"]</span>")
|
||||
user.show_message("<span class='notice'> Key: <font color='cyan'>Suffocation</font>/<font color='green'>Toxin</font>/<font color='#FFA500'>Burns</font>/<font color='red'>Brute</font></span>", 1)
|
||||
user.show_message("<span class='notice'> Damage Specifics: <font color='cyan'>[OX]</font> - <font color='green'>[TX]</font> - <font color='#FFA500'>[BU]</font> - <font color='red'>[BR]</font></span>")
|
||||
user.show_message("<span class='notice'>Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)</span>", 1)
|
||||
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]°C ([M.bodytemperature*1.8-459.67]°F)</span><br>"
|
||||
if(M.tod && (M.stat == DEAD || (M.status_flags & FAKEDEATH)))
|
||||
user.show_message("<span class='notice'>Time of Death: [M.tod]</span>")
|
||||
dat += "<span class='notice'>Time of Death: [M.tod]</span><br>"
|
||||
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)
|
||||
user.show_message("<span class='notice'>Localized Damage, Brute/Burn:</span>",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
|
||||
user.show_message(text("<span class='notice'> []: [][] - []</span>",
|
||||
capitalize(org.name),
|
||||
(org.brute_dam > 0) ? "<span class='warning'>[org.brute_dam]</span>" : 0,
|
||||
(org.status & ORGAN_BLEEDING)?"<span class='danger'>\[Bleeding\]</span>":"",
|
||||
(org.burn_dam > 0) ? "<font color='#FFA500'>[org.burn_dam]</font>" : 0),1)
|
||||
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><brr>"
|
||||
else
|
||||
user.show_message("<span class='notice'> Limbs are OK.</span>",1)
|
||||
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"
|
||||
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"
|
||||
user.show_message("[OX] | [TX] | [BU] | [BR]")
|
||||
dat += "[OX] | [TX] | [BU] | [BR]"
|
||||
if(M.radiation)
|
||||
if(advscan >= 2 && showadvscan == 1)
|
||||
var/severity = ""
|
||||
if(M.radiation >= 75)
|
||||
user.show_message("<span class='warning'>Critical levels of radiation detected. Immediate treatment advised.</span>")
|
||||
severity = "Critical"
|
||||
else if(M.radiation >= 50)
|
||||
user.show_message("<span class='warning'>Severe levels of radiation detected.</span>")
|
||||
severity = "Severe"
|
||||
else if(M.radiation >= 25)
|
||||
user.show_message("<span class='warning'>Moderate levels of radiation detected.</span>")
|
||||
severity = "Moderate"
|
||||
else if(M.radiation >= 1)
|
||||
user.show_message("<span_class='warning'>Low levels of radiation detected.</span>")
|
||||
severity = "Low"
|
||||
dat += "<span class='warning'>[severity] levels of radiation detected. [(severity == "Critical") ? " Immediate treatment advised." : ""]</span><br>"
|
||||
else
|
||||
user.show_message("<span class='warning'>Radiation detected.</span>")
|
||||
if(istype(M, /mob/living/carbon))
|
||||
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
|
||||
@@ -127,21 +129,21 @@ REAGENT SCANNER
|
||||
for(var/A in C.reagents.reagent_list)
|
||||
var/datum/reagent/R = A
|
||||
if(R.scannable)
|
||||
reagentdata["[R.id]"] = "<span class='notice'> [round(C.reagents.get_reagent_amount(R.id), 1)]u [R.name]</span>"
|
||||
reagentdata["[R.id]"] = "<span class='notice'>\t[round(C.reagents.get_reagent_amount(R.id), 1)]u [R.name]</span><br>"
|
||||
else
|
||||
unknown++
|
||||
unknownreagents["[R.id]"] = "<span class='notice'> [round(C.reagents.get_reagent_amount(R.id), 1)]u [R.name]</span>"
|
||||
unknownreagents["[R.id]"] = "<span class='notice'>\t[round(C.reagents.get_reagent_amount(R.id), 1)]u [R.name]</span><br>"
|
||||
if(reagentdata.len)
|
||||
user.show_message("<span class='notice'>Beneficial reagents detected in subject's blood:</span>")
|
||||
dat += "<span class='notice'>Beneficial reagents detected in subject's blood:</span><br>"
|
||||
for(var/d in reagentdata)
|
||||
user.show_message(reagentdata[d])
|
||||
dat += reagentdata[d]
|
||||
if(unknown)
|
||||
if(advscan >= 3 && showadvscan == 1)
|
||||
user.show_message("<span class='warning'>Warning: Non-medical reagent[(unknown>1)?"s":""] detected in subject's blood:</span>")
|
||||
dat += "<span class='warning'>Warning: Non-medical reagent[(unknown>1)?"s":""] detected in subject's blood:</span><br>"
|
||||
for(var/d in unknownreagents)
|
||||
user.show_message(unknownreagents[d])
|
||||
dat += unknownreagents[d]
|
||||
else
|
||||
user.show_message("<span class='warning'>Warning: Unknown substance[(unknown>1)?"s":""] detected in subject's blood.</span>")
|
||||
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]
|
||||
@@ -149,100 +151,104 @@ REAGENT SCANNER
|
||||
for(var/B in C.ingested.reagent_list)
|
||||
var/datum/reagent/T = B
|
||||
if(T.scannable)
|
||||
stomachreagentdata["[T.id]"] = "<span class='notice'> [round(C.ingested.get_reagent_amount(T.id), 1)]u [T.name]</span>"
|
||||
stomachreagentdata["[T.id]"] = "<span class='notice'>\t[round(C.ingested.get_reagent_amount(T.id), 1)]u [T.name]</span><br>"
|
||||
if (advscan == 0 || showadvscan == 0)
|
||||
user.show_message("<span class='notice'>[T.name] found in subject's stomach.</span>")
|
||||
dat += "<span class='notice'>[T.name] found in subject's stomach.</span><br>"
|
||||
else
|
||||
++unknown
|
||||
stomachunknownreagents["[T.id]"] = "<span class='notice'> [round(C.ingested.get_reagent_amount(T.id), 1)]u [T.name]</span>"
|
||||
stomachunknownreagents["[T.id]"] = "<span class='notice'>\t[round(C.ingested.get_reagent_amount(T.id), 1)]u [T.name]</span><br>"
|
||||
if(advscan >= 1 && showadvscan == 1)
|
||||
user.show_message("<span class='notice'>Beneficial reagents detected in subject's stomach:</span>")
|
||||
dat += "<span class='notice'>Beneficial reagents detected in subject's stomach:</span><br>"
|
||||
for(var/d in stomachreagentdata)
|
||||
user.show_message(stomachreagentdata[d])
|
||||
dat += stomachreagentdata[d]
|
||||
if(unknown)
|
||||
if(advscan >= 3 && showadvscan == 1)
|
||||
user.show_message("<span class='warning'>Warning: Non-medical reagent[(unknown > 1)?"s":""] found in subject's stomach:</span>")
|
||||
dat += "<span class='warning'>Warning: Non-medical reagent[(unknown > 1)?"s":""] found in subject's stomach:</span><br>"
|
||||
for(var/d in stomachunknownreagents)
|
||||
user.show_message(stomachunknownreagents[d])
|
||||
dat += stomachunknownreagents[d]
|
||||
else
|
||||
user.show_message("<span class='warning'>Unknown substance[(unknown > 1)?"s":""] found in subject's stomach.</span>")
|
||||
dat += "<span class='warning'>Unknown substance[(unknown > 1)?"s":""] found in subject's stomach.</span><br>"
|
||||
if(C.virus2.len)
|
||||
for (var/ID in C.virus2)
|
||||
if (ID in virusDB)
|
||||
var/datum/data/record/V = virusDB[ID]
|
||||
user.show_message("<span class='warning'>Warning: Pathogen [V.fields["name"]] detected in subject's blood. Known antigen : [V.fields["antigen"]]</span>")
|
||||
dat += "<span class='warning'>Warning: Pathogen [V.fields["name"]] detected in subject's blood. Known antigen : [V.fields["antigen"]]</span><br>"
|
||||
else
|
||||
user.show_message("<span class='warning'>Warning: Unknown pathogen detected in subject's blood.</span>")
|
||||
dat += "<span class='warning'>Warning: Unknown pathogen detected in subject's blood.</span><br>"
|
||||
if (M.getCloneLoss())
|
||||
user.show_message("<span class='warning'>Subject appears to have been imperfectly cloned.</span>")
|
||||
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())
|
||||
user.show_message("<span class='warning'>Subject suffering from aberrant brain activity. Recommend further scanning.</span>")
|
||||
dat += "<span class='warning'>Subject suffering from aberrant brain activity. Recommend further scanning.</span><br>"
|
||||
else if (M.getBrainLoss() >= 60 || !M.has_brain())
|
||||
user.show_message("<span class='warning'>Subject is brain dead.</span>")
|
||||
dat += "<span class='warning'>Subject is brain dead.</span><br>"
|
||||
else if (M.getBrainLoss() >= 25)
|
||||
user.show_message("<span class='warning'>Severe brain damage detected. Subject likely to have a traumatic brain injury.</span>")
|
||||
dat += "<span class='warning'>Severe brain damage detected. Subject likely to have a traumatic brain injury.</span><br>"
|
||||
else if (M.getBrainLoss() >= 10)
|
||||
user.show_message("<span class='warning'>Significant brain damage detected. Subject may have had a concussion.</span>")
|
||||
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)
|
||||
user.show_message("<span class='warning'>Minor brain damage detected.</span>")
|
||||
dat += "<span class='warning'>Minor brain damage detected.</span><br>"
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
for(var/name_i in H.internal_organs_by_name)
|
||||
var/obj/item/organ/internal/i = H.internal_organs_by_name[name_i]
|
||||
if(istype(i, /obj/item/organ/internal/appendix))
|
||||
var/obj/item/organ/internal/appendix/a = H.internal_organs_by_name[name_i]
|
||||
if(a.inflamed > 3)
|
||||
user.show_message(text("<span class='warning'>Severe inflammation detected in subject [a.name].</span>"), 1)
|
||||
else if(a.inflamed > 2)
|
||||
user.show_message(text("<span class='warning'>Moderate inflammation detected in subject [a.name].</span>"), 1)
|
||||
else if(a.inflamed >= 1)
|
||||
user.show_message(text("<span class='warning'>Mild inflammation detected in subject [a.name].</span>"), 1)
|
||||
|
||||
|
||||
for(var/name in H.organs_by_name)
|
||||
var/obj/item/organ/external/e = H.organs_by_name[name]
|
||||
if(!e)
|
||||
continue
|
||||
var/limb = e.name
|
||||
if(e.status & ORGAN_BROKEN)
|
||||
if(((e.name == "l_arm") || (e.name == "r_arm") || (e.name == "l_leg") || (e.name == "r_leg")) && (!e.splinted))
|
||||
to_chat(user, "<span class='warning'>Unsecured fracture in subject [limb]. Splinting recommended for transport.</span>")
|
||||
if(e.has_infected_wound())
|
||||
to_chat(user, "<span class='warning'>Infected wound detected in subject [limb]. Disinfection recommended.</span>")
|
||||
|
||||
for(var/name in H.organs_by_name)
|
||||
var/obj/item/organ/external/e = H.organs_by_name[name]
|
||||
if(e && e.status & ORGAN_BROKEN)
|
||||
if(advscan >= 1 && showadvscan == 1)
|
||||
user.show_message(text("<span class='warning'>Bone fractures detected in subject [e.name].</span>"), 1)
|
||||
else
|
||||
user.show_message(text("<span class='warning'>Bone fractures detected. Advanced scanner required for location.</span>"), 1)
|
||||
break
|
||||
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
|
||||
for(var/datum/wound/W in e.wounds) if(W.internal)
|
||||
if(advscan >= 1 && showadvscan == 1)
|
||||
user.show_message(text("<span class='warning'>Internal bleeding detected in subject [e.name].</span>"), 1)
|
||||
// Broken limbs
|
||||
if(e.status & ORGAN_BROKEN)
|
||||
if((e.name in list("l_arm", "r_arm", "l_leg", "r_leg")) && (!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
|
||||
user.show_message(text("<span class='warning'>Internal bleeding detected. Advanced scanner required for location.</span>"), 1)
|
||||
break
|
||||
break
|
||||
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_percent <= BLOOD_VOLUME_SAFE) && (blood_percent > BLOOD_VOLUME_BAD))
|
||||
user.show_message("<span class='danger'>Warning: Blood Level LOW: [blood_percent]% [blood_volume]cl.</span> <span class='notice'>Type: [blood_type]</span>")
|
||||
else if(blood_percent <= BLOOD_VOLUME_BAD)
|
||||
user.show_message("<span class='danger'><i>Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl.</i></span> <span class='notice'>Type: [blood_type]</span>")
|
||||
if(blood_percent <= BLOOD_VOLUME_BAD)
|
||||
dat += "<span class='danger'><i>Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl. Type: [blood_type]</i></span><br>"
|
||||
else if(blood_percent <= BLOOD_VOLUME_SAFE)
|
||||
dat += "<span class='danger'>Warning: Blood Level LOW: [blood_percent]% [blood_volume]cl. Type: [blood_type]</span><br>"
|
||||
else
|
||||
user.show_message("<span class='notice'>Blood Level Normal: [blood_percent]% [blood_volume]cl. Type: [blood_type]</span>")
|
||||
user.show_message("<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>")
|
||||
|
||||
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>"
|
||||
user.show_message(dat, 1)
|
||||
|
||||
/obj/item/device/healthanalyzer/verb/toggle_mode()
|
||||
set name = "Switch Verbosity"
|
||||
@@ -266,15 +272,15 @@ REAGENT SCANNER
|
||||
if(0)
|
||||
to_chat(usr, "The scanner will now perform a basic analysis.")
|
||||
|
||||
/obj/item/device/healthanalyzer/advanced //reports bone fractures, IB, quantity of beneficial reagents in stomach; also regular health analyzer stuff
|
||||
name = "advanced health analyzer"
|
||||
/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/enhanced //reports all of the above, as well as radiation severity and minor brain damage
|
||||
name = "enhanced health analyzer"
|
||||
/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)
|
||||
@@ -311,16 +317,21 @@ REAGENT SCANNER
|
||||
return atmosanalyzer_scan(src, air, user)
|
||||
|
||||
/obj/item/device/analyzer/attack_self(mob/user as mob)
|
||||
|
||||
if (user.stat)
|
||||
return
|
||||
if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
|
||||
if (!(ishuman(user) || ticker) && ticker.mode.name != "monkey")
|
||||
to_chat(usr, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return
|
||||
|
||||
analyze_gases(src, user)
|
||||
return
|
||||
|
||||
/obj/item/device/analyzer/afterattack(var/obj/O, var/mob/user, var/proximity)
|
||||
if(proximity)
|
||||
analyze_gases(O, user)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/device/mass_spectrometer
|
||||
name = "mass spectrometer"
|
||||
desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample."
|
||||
@@ -353,7 +364,7 @@ REAGENT SCANNER
|
||||
/obj/item/device/mass_spectrometer/attack_self(mob/user as mob)
|
||||
if (user.stat)
|
||||
return
|
||||
if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
|
||||
if (!(ishuman(user) || ticker) && ticker.mode.name != "monkey")
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return
|
||||
if(reagents.total_volume)
|
||||
@@ -400,15 +411,11 @@ REAGENT SCANNER
|
||||
var/recent_fail = 0
|
||||
|
||||
/obj/item/device/reagent_scanner/afterattack(obj/O, mob/user as mob, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if (user.stat)
|
||||
if(!proximity || user.stat || !istype(O))
|
||||
return
|
||||
if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return
|
||||
if(!istype(O))
|
||||
return
|
||||
|
||||
if(!isnull(O.reagents))
|
||||
var/dat = ""
|
||||
@@ -419,9 +426,9 @@ REAGENT SCANNER
|
||||
if(dat)
|
||||
to_chat(user, "<span class='notice'>Chemicals found: [dat]</span>")
|
||||
else
|
||||
user << "<span class='notice'>No active chemical agents found in [O].</span>"
|
||||
to_chat(user, "<span class='notice'>No active chemical agents found in [O].</span>")
|
||||
else
|
||||
user << "<span class='notice'>No significant chemical agents found in [O].</span>"
|
||||
to_chat(user, "<span class='notice'>No significant chemical agents found in [O].</span>")
|
||||
|
||||
return
|
||||
|
||||
@@ -445,24 +452,17 @@ REAGENT SCANNER
|
||||
|
||||
/obj/item/device/slime_scanner/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
if(!isslime(M))
|
||||
user << "<B>This device can only scan slimes!</B>"
|
||||
to_chat(user, "<B>This device can only scan slimes!</B>")
|
||||
return
|
||||
var/mob/living/simple_animal/slime/S = M
|
||||
user.show_message("Slime scan results:")
|
||||
user.show_message(text("[S.slime_color] [] slime", S.is_adult ? "adult" : "baby"))
|
||||
|
||||
user.show_message("Health: [S.health]")
|
||||
user.show_message("Mutation Probability: [S.mutation_chance]")
|
||||
user.show_message("Slime scan results:<br>[S.slime_color] [S.is_adult ? "adult" : "baby"] slime<br>Health: [S.health]<br>Mutation Probability: [S.mutation_chance]")
|
||||
|
||||
var/list/mutations = list()
|
||||
for(var/potential_color in S.slime_mutation)
|
||||
var/mob/living/simple_animal/slime/slime = potential_color
|
||||
mutations.Add(initial(slime.slime_color))
|
||||
user.show_message("Potental to mutate into [english_list(mutations)] colors.<br>Extract potential: [S.cores]<br>Nutrition: [S.nutrition]/[S.get_max_nutrition()]")
|
||||
|
||||
user.show_message("Potental to mutate into [english_list(mutations)] colors.")
|
||||
user.show_message("Extract potential: [S.cores]")
|
||||
|
||||
user.show_message(text("Nutrition: [S.nutrition]/[]", S.get_max_nutrition()))
|
||||
if (S.nutrition < S.get_starve_nutrition())
|
||||
user.show_message("<span class='alert'>Warning: Subject is starving!</span>")
|
||||
else if (S.nutrition < S.get_hunger_nutrition())
|
||||
@@ -479,3 +479,25 @@ REAGENT SCANNER
|
||||
user.show_message("Subject is friendly to other slime colors.")
|
||||
|
||||
user.show_message("Growth progress: [S.amount_grown]/10")
|
||||
|
||||
/obj/item/device/halogen_counter
|
||||
name = "halogen counter"
|
||||
icon_state = "eftpos"
|
||||
desc = "A hand-held halogen counter, used to detect the level of irradiation of living beings."
|
||||
w_class = ITEMSIZE_SMALL
|
||||
flags = CONDUCT
|
||||
origin_tech = list(TECH_MAGNET = 1, TECH_BIO = 2)
|
||||
throwforce = 0
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
|
||||
/obj/item/device/halogen_counter/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
if(!iscarbon(M))
|
||||
to_chat(user, "<span class='warning'>This device can only scan organic beings!</span>")
|
||||
return
|
||||
user.visible_message("<span class='warning'>\The [user] has analyzed [M]'s radiation levels!</span>", "<span class='notice'>Analyzing Results for [M]:</span>")
|
||||
if(M.radiation)
|
||||
to_chat(user, "<span class='notice'>Radiation Level: [M.radiation]</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>No radiation detected.</span>")
|
||||
return
|
||||
|
||||
@@ -16,11 +16,12 @@
|
||||
|
||||
// var/obj/item/device/radio/bug/radio
|
||||
var/obj/machinery/camera/bug/camera
|
||||
var/camtype = /obj/machinery/camera/bug
|
||||
|
||||
/obj/item/device/camerabug/New()
|
||||
..()
|
||||
// radio = new(src)
|
||||
camera = new(src)
|
||||
camera = new camtype(src)
|
||||
|
||||
/obj/item/device/camerabug/attack_self(mob/user)
|
||||
if(user.a_intent == I_HURT)
|
||||
@@ -40,7 +41,7 @@
|
||||
linkedmonitor.unpair(src)
|
||||
linkedmonitor = null
|
||||
qdel(camera)
|
||||
camera = new(src)
|
||||
camera = new camtype(src)
|
||||
to_chat(usr, "<span class='notice'>You turn the [src] off and on again, delinking it from any monitors.")
|
||||
|
||||
/obj/item/brokenbug
|
||||
@@ -83,6 +84,7 @@
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_EARS
|
||||
origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1, TECH_ILLEGAL = 3)
|
||||
camtype = /obj/machinery/camera/bug/spy
|
||||
|
||||
/obj/item/device/camerabug/examine(mob/user)
|
||||
. = ..(user, 0)
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
return 1
|
||||
|
||||
/obj/item/borg/upgrade/jetpack
|
||||
name = "mining robot jetpack"
|
||||
name = "robot jetpack"
|
||||
desc = "A carbon dioxide jetpack suitable for low-gravity operations."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
item_state = "cyborg_upgrade"
|
||||
@@ -151,7 +151,7 @@
|
||||
if(!T)
|
||||
T = locate() in R.module.modules
|
||||
if(!T)
|
||||
R.module.modules += new/obj/item/weapon/tank/jetpack/carbondioxide
|
||||
R.module.modules += new/obj/item/weapon/tank/jetpack/carbondioxide(R.module)
|
||||
for(var/obj/item/weapon/tank/jetpack/carbondioxide in R.module.modules)
|
||||
R.internals = src
|
||||
return 1
|
||||
@@ -176,7 +176,7 @@
|
||||
if(!T)
|
||||
T = locate() in R.module.modules
|
||||
if(!T)
|
||||
R.module.modules += new/obj/item/device/healthanalyzer/advanced
|
||||
R.module.modules += new/obj/item/device/healthanalyzer/advanced(R.module)
|
||||
return 1
|
||||
if(T)
|
||||
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
|
||||
@@ -217,4 +217,4 @@
|
||||
R.add_language(LANGUAGE_SCHECHI, 1)
|
||||
R.add_language(LANGUAGE_ROOTLOCAL, 1)
|
||||
|
||||
return 1
|
||||
return 1
|
||||
|
||||
@@ -61,8 +61,7 @@ var/global/list/datum/stack_recipe/rods_recipes = list( \
|
||||
return
|
||||
|
||||
if (istype(W, /obj/item/weapon/tape_roll))
|
||||
var/obj/item/stack/medical/splint/ghetto/new_splint = new(user.loc)
|
||||
new_splint.loc = src.loc
|
||||
var/obj/item/stack/medical/splint/ghetto/new_splint = new(get_turf(user))
|
||||
new_splint.add_fingerprint(user)
|
||||
|
||||
user.visible_message("<span class='notice'>\The [user] constructs \a [new_splint] out of a [singular_name].</span>", \
|
||||
|
||||
@@ -8,13 +8,17 @@
|
||||
name = "stack of wood"
|
||||
type_to_spawn = /obj/item/stack/tile/wood
|
||||
|
||||
/obj/fiftyspawner/wood/sif
|
||||
name = "stack of alien wood"
|
||||
type_to_spawn = /obj/item/stack/tile/sifwood
|
||||
|
||||
/obj/fiftyspawner/carpet
|
||||
name = "stack of carpet"
|
||||
type_to_spawn = /obj/item/stack/tile/carpet
|
||||
|
||||
/obj/fiftyspawner/bluecarpet
|
||||
name = "stack of blue carpet"
|
||||
type_to_spawn = /obj/item/stack/tile/carpet/blue
|
||||
/obj/fiftyspawner/tealcarpet
|
||||
name = "stack of teal carpet"
|
||||
type_to_spawn = /obj/item/stack/tile/carpet/teal
|
||||
|
||||
/obj/fiftyspawner/floor
|
||||
name = "stack of floor tiles"
|
||||
|
||||
@@ -55,9 +55,24 @@
|
||||
flags = 0
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/tile/sifwood
|
||||
name = "alien wood tile"
|
||||
singular_name = "alien wood tile"
|
||||
desc = "An easy to fit wooden floor tile. It's blue!"
|
||||
icon_state = "tile-sifwood"
|
||||
force = 1.0
|
||||
throwforce = 1.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = 0
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/tile/wood/fifty
|
||||
amount = 50
|
||||
|
||||
/obj/item/stack/tile/sifwood/fifty
|
||||
amount = 50
|
||||
|
||||
/obj/item/stack/tile/wood/cyborg
|
||||
name = "wood floor tile synthesizer"
|
||||
desc = "A device that makes wood floor tiles."
|
||||
@@ -81,11 +96,11 @@
|
||||
flags = 0
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/tile/carpet/blue
|
||||
name = "blue carpet"
|
||||
singular_name = "blue carpet"
|
||||
desc = "A piece of blue carpet. It is the same size as a normal floor tile!"
|
||||
icon_state = "tile-bluecarpet"
|
||||
/obj/item/stack/tile/carpet/teal
|
||||
name = "teal carpet"
|
||||
singular_name = "teal carpet"
|
||||
desc = "A piece of teal carpet. It is the same size as a normal floor tile!"
|
||||
icon_state = "tile-tealcarpet"
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/tile/carpet/bcarpet
|
||||
@@ -106,7 +121,7 @@
|
||||
/obj/item/stack/tile/floor
|
||||
name = "floor tile"
|
||||
singular_name = "floor tile"
|
||||
desc = "Those could work as a pretty decent throwing weapon" //why?
|
||||
desc = "A metal tile fit for covering a section of floor."
|
||||
icon_state = "tile"
|
||||
force = 6.0
|
||||
matter = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 4)
|
||||
|
||||
@@ -5,92 +5,89 @@
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 1)
|
||||
var/banglet = 0
|
||||
|
||||
prime()
|
||||
..()
|
||||
for(var/obj/structure/closet/L in hear(7, get_turf(src)))
|
||||
if(locate(/mob/living/carbon/, L))
|
||||
for(var/mob/living/carbon/M in L)
|
||||
bang(get_turf(src), M)
|
||||
/obj/item/weapon/grenade/flashbang/prime()
|
||||
..()
|
||||
for(var/obj/structure/closet/L in hear(7, get_turf(src)))
|
||||
if(locate(/mob/living/carbon/, L))
|
||||
for(var/mob/living/carbon/M in L)
|
||||
bang(get_turf(src), M)
|
||||
|
||||
for(var/mob/living/carbon/M in hear(7, get_turf(src)))
|
||||
bang(get_turf(src), M)
|
||||
|
||||
for(var/mob/living/carbon/M in hear(7, get_turf(src)))
|
||||
bang(get_turf(src), M)
|
||||
for(var/obj/structure/blob/B in hear(8,get_turf(src))) //Blob damage here
|
||||
var/damage = round(30/(get_dist(B,get_turf(src))+1))
|
||||
if(B.overmind)
|
||||
damage *= B.overmind.blob_type.burn_multiplier
|
||||
B.adjust_integrity(-damage)
|
||||
|
||||
for(var/obj/structure/blob/B in hear(8,get_turf(src))) //Blob damage here
|
||||
var/damage = round(30/(get_dist(B,get_turf(src))+1))
|
||||
if(B.overmind)
|
||||
damage *= B.overmind.blob_type.burn_multiplier
|
||||
B.adjust_integrity(-damage)
|
||||
new/obj/effect/effect/sparks(src.loc)
|
||||
new/obj/effect/effect/smoke/illumination(src.loc, 5, range=30, power=30, color="#FFFFFF")
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
new/obj/effect/effect/sparks(src.loc)
|
||||
new/obj/effect/effect/smoke/illumination(src.loc, 5, range=30, power=30, color="#FFFFFF")
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
proc/bang(var/turf/T , var/mob/living/carbon/M) // Added a new proc called 'bang' that takes a location and a person to be banged.
|
||||
M << "<span class='danger'>BANG</span>" // Called during the loop that bangs people in lockers/containers and when banging
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 50, 1, 30) // people in normal view. Could theroetically be called during other explosions.
|
||||
/obj/item/weapon/grenade/flashbang/proc/bang(var/turf/T , var/mob/living/carbon/M) // Added a new proc called 'bang' that takes a location and a person to be banged.
|
||||
to_chat(M, "<span class='danger'>BANG</span>") // Called during the loop that bangs people in lockers/containers and when banging
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 50, 1, 30) // people in normal view. Could theroetically be called during other explosions.
|
||||
// -- Polymorph
|
||||
|
||||
//Checking for protections
|
||||
var/eye_safety = 0
|
||||
var/ear_safety = 0
|
||||
if(iscarbon(M))
|
||||
eye_safety = M.eyecheck()
|
||||
ear_safety = M.get_ear_protection()
|
||||
//Checking for protections
|
||||
var/eye_safety = 0
|
||||
var/ear_safety = 0
|
||||
if(iscarbon(M))
|
||||
eye_safety = M.eyecheck()
|
||||
ear_safety = M.get_ear_protection()
|
||||
|
||||
//Flashing everyone
|
||||
if(eye_safety < 1)
|
||||
M.flash_eyes()
|
||||
M.Stun(2)
|
||||
M.Weaken(10)
|
||||
//Flashing everyone
|
||||
if(eye_safety < 1)
|
||||
M.flash_eyes()
|
||||
M.Confuse(2)
|
||||
M.Weaken(5)
|
||||
|
||||
|
||||
|
||||
//Now applying sound
|
||||
if((get_dist(M, T) <= 2 || src.loc == M.loc || src.loc == M))
|
||||
if(ear_safety > 0)
|
||||
M.Stun(2)
|
||||
M.Weaken(1)
|
||||
else
|
||||
M.Stun(10)
|
||||
M.Weaken(3)
|
||||
if ((prob(14) || (M == src.loc && prob(70))))
|
||||
M.ear_damage += rand(1, 10)
|
||||
else
|
||||
M.ear_damage += rand(0, 5)
|
||||
M.ear_deaf = max(M.ear_deaf,15)
|
||||
|
||||
else if(get_dist(M, T) <= 5)
|
||||
if(!ear_safety)
|
||||
M.Stun(8)
|
||||
M.ear_damage += rand(0, 3)
|
||||
M.ear_deaf = max(M.ear_deaf,10)
|
||||
|
||||
else if(!ear_safety)
|
||||
M.Stun(4)
|
||||
M.ear_damage += rand(0, 1)
|
||||
M.ear_deaf = max(M.ear_deaf,5)
|
||||
|
||||
//This really should be in mob not every check
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES]
|
||||
if (E && E.damage >= E.min_bruised_damage)
|
||||
M << "<span class='danger'>Your eyes start to burn badly!</span>"
|
||||
if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
|
||||
if (E.damage >= E.min_broken_damage)
|
||||
M << "<span class='danger'>You can't see anything!</span>"
|
||||
if (M.ear_damage >= 15)
|
||||
M << "<span class='danger'>Your ears start to ring badly!</span>"
|
||||
if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
|
||||
if (prob(M.ear_damage - 10 + 5))
|
||||
M << "<span class='danger'>You can't hear anything!</span>"
|
||||
M.sdisabilities |= DEAF
|
||||
//Now applying sound
|
||||
if((get_dist(M, T) <= 2 || src.loc == M.loc || src.loc == M))
|
||||
if(ear_safety > 0)
|
||||
M.Confuse(2)
|
||||
M.Weaken(1)
|
||||
else
|
||||
if (M.ear_damage >= 5)
|
||||
M << "<span class='danger'>Your ears start to ring!</span>"
|
||||
M.update_icons() //Forces matrix transform to proc if they are now laying, I guess?
|
||||
M.Confuse(10)
|
||||
M.Weaken(3)
|
||||
if ((prob(14) || (M == src.loc && prob(70))))
|
||||
M.ear_damage += rand(1, 10)
|
||||
else
|
||||
M.ear_damage += rand(0, 5)
|
||||
M.ear_deaf = max(M.ear_deaf,15)
|
||||
|
||||
else if(get_dist(M, T) <= 5)
|
||||
if(!ear_safety)
|
||||
M.Confuse(8)
|
||||
M.ear_damage += rand(0, 3)
|
||||
M.ear_deaf = max(M.ear_deaf,10)
|
||||
|
||||
else if(!ear_safety)
|
||||
M.Confuse(4)
|
||||
M.ear_damage += rand(0, 1)
|
||||
M.ear_deaf = max(M.ear_deaf,5)
|
||||
|
||||
//This really should be in mob not every check
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES]
|
||||
if (E && E.damage >= E.min_bruised_damage)
|
||||
M << "<span class='danger'>Your eyes start to burn badly!</span>"
|
||||
if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
|
||||
if (E.damage >= E.min_broken_damage)
|
||||
M << "<span class='danger'>You can't see anything!</span>"
|
||||
if (M.ear_damage >= 15)
|
||||
to_chat(M, "<span class='danger'>Your ears start to ring badly!</span>")
|
||||
if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
|
||||
if (prob(M.ear_damage - 10 + 5))
|
||||
to_chat(M, "<span class='danger'>You can't hear anything!</span>")
|
||||
M.sdisabilities |= DEAF
|
||||
else if(M.ear_damage >= 5)
|
||||
to_chat(M, "<span class='danger'>Your ears start to ring!</span>")
|
||||
|
||||
M.update_icons() //Forces matrix transform to proc if they are now laying, I guess?
|
||||
|
||||
/obj/item/weapon/grenade/flashbang/Destroy()
|
||||
walk(src, 0) // Because we might have called walk_away, we must stop the walk loop or BYOND keeps an internal reference to us forever.
|
||||
|
||||
@@ -14,3 +14,34 @@
|
||||
var/datum/gender/T = gender_datums[user.get_visible_gender()]
|
||||
user.visible_message(span("danger", "\The [user] [T.is] strangling [T.himself] with \the [src]! It looks like [T.he] [T.is] trying to commit suicide."), span("danger", "You start to strangle yourself with \the [src]!"), span("danger", "You hear the sound of someone choking!"))
|
||||
return (OXYLOSS)
|
||||
|
||||
/obj/item/weapon/melee/umbrella
|
||||
name = "umbrella"
|
||||
desc = "To keep the rain off you. Use with caution on windy days."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "umbrella_closed"
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 5
|
||||
throwforce = 5
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
var/open = FALSE
|
||||
|
||||
/obj/item/weapon/melee/umbrella/New()
|
||||
..()
|
||||
color = "#"+get_random_colour()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/melee/umbrella/attack_self()
|
||||
src.toggle_umbrella()
|
||||
|
||||
/obj/item/weapon/melee/umbrella/proc/toggle_umbrella()
|
||||
open = !open
|
||||
icon_state = "umbrella_[open ? "open" : "closed"]"
|
||||
item_state = icon_state
|
||||
update_icon()
|
||||
if(ishuman(src.loc))
|
||||
var/mob/living/carbon/human/H = src.loc
|
||||
H.update_inv_l_hand(0)
|
||||
H.update_inv_r_hand()
|
||||
..()
|
||||
@@ -68,6 +68,9 @@
|
||||
// -----------------------------
|
||||
// Mining Satchel
|
||||
// -----------------------------
|
||||
/*
|
||||
* Mechoid - Orebags are the most common quick-gathering thing, and also have tons of lag associated with it. Their checks are going to be hyper-simplified due to this, and their INCREDIBLY singular target contents.
|
||||
*/
|
||||
|
||||
/obj/item/weapon/storage/bag/ore
|
||||
name = "mining satchel"
|
||||
@@ -79,7 +82,80 @@
|
||||
max_storage_space = ITEMSIZE_COST_NORMAL * 25
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
can_hold = list(/obj/item/weapon/ore)
|
||||
var/stored_ore = list()
|
||||
var/last_update = 0
|
||||
|
||||
/obj/item/weapon/storage/bag/ore/remove_from_storage(obj/item/W as obj, atom/new_location)
|
||||
if(!istype(W)) return 0
|
||||
|
||||
if(new_location)
|
||||
if(ismob(loc))
|
||||
W.dropped(usr)
|
||||
if(ismob(new_location))
|
||||
W.hud_layerise()
|
||||
else
|
||||
W.reset_plane_and_layer()
|
||||
W.forceMove(new_location)
|
||||
else
|
||||
W.forceMove(get_turf(src))
|
||||
|
||||
W.on_exit_storage(src)
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/storage/bag/ore/gather_all(turf/T as turf, mob/user as mob, var/silent = 0)
|
||||
var/success = 0
|
||||
var/failure = 0
|
||||
for(var/obj/item/weapon/ore/I in T) //Only ever grabs ores. Doesn't do any extraneous checks, as all ore is the same size. Tons of checks means it causes hanging for up to three seconds.
|
||||
if(contents.len >= max_storage_space)
|
||||
failure = 1
|
||||
break
|
||||
I.forceMove(src)
|
||||
success = 1
|
||||
if(success && !failure && !silent)
|
||||
to_chat(user, "<span class='notice'>You put everything in [src].</span>")
|
||||
else if(success && (!silent || (silent && contents.len >= max_storage_space)))
|
||||
to_chat(user, "<span class='notice'>You fill the [src].</span>")
|
||||
else if(!silent)
|
||||
to_chat(user, "<span class='notice'>You fail to pick anything up with \the [src].</span>")
|
||||
|
||||
/obj/item/weapon/storage/bag/ore/examine(mob/user)
|
||||
..()
|
||||
|
||||
if(!Adjacent(user)) //Can only check the contents of ore bags if you can physically reach them.
|
||||
return
|
||||
|
||||
if(istype(user, /mob/living))
|
||||
add_fingerprint(user)
|
||||
|
||||
if(!contents.len)
|
||||
to_chat(user, "It is empty.")
|
||||
return
|
||||
|
||||
if(world.time > last_update + 10)
|
||||
update_ore_count()
|
||||
last_update = world.time
|
||||
|
||||
to_chat(user, "<span class='notice'>It holds:</span>")
|
||||
for(var/ore in stored_ore)
|
||||
to_chat(user, "<span class='notice'>- [stored_ore[ore]] [ore]</span>")
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/bag/ore/open(mob/user as mob) //No opening it for the weird UI of having shit-tons of ore inside it.
|
||||
if(world.time > last_update + 10)
|
||||
update_ore_count()
|
||||
last_update = world.time
|
||||
examine(user)
|
||||
|
||||
/obj/item/weapon/storage/bag/ore/proc/update_ore_count() //Stolen from ore boxes.
|
||||
|
||||
stored_ore = list()
|
||||
|
||||
for(var/obj/item/weapon/ore/O in contents)
|
||||
if(stored_ore[O.name])
|
||||
stored_ore[O.name]++
|
||||
else
|
||||
stored_ore[O.name] = 1
|
||||
|
||||
// -----------------------------
|
||||
// Plant bag
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
/obj/item/weapon/surgical/FixOVein,
|
||||
/obj/item/stack/medical/advanced/bruise_pack,
|
||||
/obj/item/stack/nanopaste
|
||||
///obj/item/device/healthanalyzer/enhanced //VOREStation Removal
|
||||
// /obj/item/device/healthanalyzer/advanced //VOREStation Removal
|
||||
)
|
||||
|
||||
starts_with = list(
|
||||
@@ -145,8 +145,8 @@
|
||||
/obj/item/weapon/surgical/surgicaldrill,
|
||||
/obj/item/weapon/surgical/bonegel,
|
||||
/obj/item/weapon/surgical/FixOVein,
|
||||
/obj/item/stack/medical/advanced/bruise_pack
|
||||
///obj/item/device/healthanalyzer/enhanced //VOREStation Removal
|
||||
/obj/item/stack/medical/advanced/bruise_pack,
|
||||
///obj/item/device/healthanalyzer/advanced //VOREStation Removal
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/firstaid/clotting
|
||||
|
||||
@@ -13,20 +13,29 @@
|
||||
desc = "A small wrapped package."
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
|
||||
var/power = 1 /*Size of the explosion.*/
|
||||
var/devastate = 0
|
||||
var/heavy_impact = 1
|
||||
var/light_impact = 2
|
||||
var/flash_range = 5
|
||||
var/size = "small" /*Used for the icon, this one will make c-4small_0 for the off state.*/
|
||||
|
||||
/obj/item/weapon/syndie/c4explosive/heavy
|
||||
icon_state = "c-4large_0"
|
||||
item_state = "radio"
|
||||
desc = "A mysterious package, it's quite heavy."
|
||||
power = 2
|
||||
devastate = 1
|
||||
heavy_impact = 2
|
||||
light_impact = 5
|
||||
flash_range = 7
|
||||
size = "large"
|
||||
|
||||
/obj/item/weapon/syndie/c4explosive/heavy/super_heavy
|
||||
name = "large-sized package"
|
||||
desc = "A mysterious package, it's quite exceptionally heavy."
|
||||
power = 3
|
||||
devastate = 2
|
||||
heavy_impact = 5
|
||||
light_impact = 7
|
||||
flash_range = 7
|
||||
|
||||
/obj/item/weapon/syndie/c4explosive/New()
|
||||
var/K = rand(1,2000)
|
||||
@@ -43,7 +52,7 @@
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("\icon[src] <span class = 'warning'> The [src.name] beeps! </span>")
|
||||
sleep(50)
|
||||
explosion(get_turf(src), power, power*2, power*3, power*4, power*5)
|
||||
explosion(get_turf(src), devastate, heavy_impact, light_impact, flash_range)
|
||||
for(var/dirn in cardinal) //This is to guarantee that C4 at least breaks down all immediately adjacent walls and doors.
|
||||
var/turf/simulated/wall/T = get_step(src,dirn)
|
||||
if(locate(/obj/machinery/door/airlock) in T)
|
||||
|
||||
Reference in New Issue
Block a user