Merge branch 'master' into new-tg-plants
This commit is contained in:
@@ -20,7 +20,7 @@
|
||||
|
||||
/obj/effect/countdown/examine(mob/user)
|
||||
. = ..()
|
||||
to_chat(user, "This countdown is displaying: [displayed_text].")
|
||||
. += "This countdown is displaying: [displayed_text]."
|
||||
|
||||
/obj/effect/countdown/proc/attach(atom/A)
|
||||
attached_to = A
|
||||
|
||||
@@ -130,12 +130,10 @@
|
||||
/obj/effect/decal/cleanable/blood/footprints/examine(mob/user)
|
||||
. = ..()
|
||||
if(shoe_types.len)
|
||||
. += "You recognise the footprints as belonging to:\n"
|
||||
. += "You recognise the footprints as belonging to:"
|
||||
for(var/shoe in shoe_types)
|
||||
var/obj/item/clothing/shoes/S = shoe
|
||||
. += "some <B>[initial(S.name)]</B> [icon2html(initial(S.icon), user)]\n"
|
||||
|
||||
to_chat(user, .)
|
||||
. += "some <B>[initial(S.name)]</B> [icon2html(initial(S.icon), user)]"
|
||||
|
||||
/obj/effect/decal/cleanable/blood/footprints/replace_decal(obj/effect/decal/cleanable/C)
|
||||
if(blood_state != C.blood_state) //We only replace footprints of the same type as us
|
||||
|
||||
@@ -234,5 +234,5 @@
|
||||
/obj/effect/turf_decal/trimline/neutral/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/filled/end
|
||||
/obj/effect/turf_decal/trimline/neutral/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
/obj/structure/glowshroom/examine(mob/user)
|
||||
. = ..()
|
||||
to_chat(user, "This is a [generation]\th generation [name]!")
|
||||
. += "This is a [generation]\th generation [name]!"
|
||||
|
||||
/obj/structure/glowshroom/Destroy()
|
||||
if(myseed)
|
||||
|
||||
@@ -315,6 +315,11 @@
|
||||
randomdir = 0
|
||||
duration = 6
|
||||
|
||||
/obj/effect/temp_visual/desynchronizer
|
||||
name = "desynchronizer field"
|
||||
icon_state = "chronofield"
|
||||
duration = 3
|
||||
|
||||
/obj/effect/temp_visual/impact_effect
|
||||
icon_state = "impact_bullet"
|
||||
duration = 5
|
||||
|
||||
+25
-10
@@ -81,6 +81,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
|
||||
var/flags_cover = 0 //for flags such as GLASSESCOVERSEYES
|
||||
var/heat = 0
|
||||
///All items with sharpness of IS_SHARP or higher will automatically get the butchering component.
|
||||
var/sharpness = IS_BLUNT
|
||||
|
||||
var/tool_behaviour = NONE
|
||||
@@ -139,6 +140,9 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
else if (!istype(embedding, /datum/embedding_behavior))
|
||||
stack_trace("Invalid type [embedding.type] found in .embedding during /obj/item Initialize()")
|
||||
|
||||
if(sharpness) //give sharp objects butchering functionality, for consistency
|
||||
AddComponent(/datum/component/butchering, 80 * toolspeed)
|
||||
|
||||
/obj/item/Destroy()
|
||||
item_flags &= ~DROPDEL //prevent reqdels
|
||||
if(ismob(loc))
|
||||
@@ -183,14 +187,24 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
src.loc = T
|
||||
|
||||
/obj/item/examine(mob/user) //This might be spammy. Remove?
|
||||
..()
|
||||
var/pronoun
|
||||
if(src.gender == PLURAL)
|
||||
pronoun = "They are"
|
||||
. = ..()
|
||||
|
||||
. += "[gender == PLURAL ? "They are" : "It is"] a [weightclass2text(w_class)] item."
|
||||
|
||||
if(resistance_flags & INDESTRUCTIBLE)
|
||||
. += "[src] seems extremely robust! It'll probably withstand anything that could happen to it!"
|
||||
else
|
||||
pronoun = "It is"
|
||||
var/size = weightclass2text(src.w_class)
|
||||
to_chat(user, "[pronoun] a [size] item." )
|
||||
if(resistance_flags & LAVA_PROOF)
|
||||
. += "[src] is made of an extremely heat-resistant material, it'd probably be able to withstand lava!"
|
||||
if(resistance_flags & (ACID_PROOF | UNACIDABLE))
|
||||
. += "[src] looks pretty robust! It'd probably be able to withstand acid!"
|
||||
if(resistance_flags & FREEZE_PROOF)
|
||||
. += "[src] is made of cold-resistant materials."
|
||||
if(resistance_flags & FIRE_PROOF)
|
||||
. += "[src] is made of fire-retardant materials."
|
||||
|
||||
|
||||
|
||||
|
||||
if(!user.research_scanner)
|
||||
return
|
||||
@@ -227,7 +241,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
else
|
||||
research_msg += "None"
|
||||
research_msg += "."
|
||||
to_chat(user, research_msg.Join())
|
||||
. += research_msg.Join()
|
||||
|
||||
/obj/item/interact(mob/user)
|
||||
add_fingerprint(user)
|
||||
@@ -383,13 +397,14 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
return
|
||||
if(over == src)
|
||||
return usr.client.Click(src, src_location, src_control, params)
|
||||
var/list/directaccess = usr.DirectAccess()
|
||||
var/list/directaccess = usr.DirectAccess() //This, specifically, is what requires the copypaste. If this were after the adjacency check, then it'd be impossible to use items in your inventory, among other things.
|
||||
//If this were before the above checks, then trying to click on items would act a little funky and signal overrides wouldn't work.
|
||||
if((usr.CanReach(src) || (src in directaccess)) && (usr.CanReach(over) || (over in directaccess)))
|
||||
if(!usr.get_active_held_item())
|
||||
usr.UnarmedAttack(src, TRUE)
|
||||
if(usr.get_active_held_item() == src)
|
||||
melee_attack_chain(usr, over)
|
||||
return
|
||||
return TRUE //returning TRUE as a "is this overridden?" flag
|
||||
if(!Adjacent(usr) || !over.Adjacent(usr))
|
||||
return // should stop you from dragging through windows
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ AI MODULES
|
||||
materials = list(MAT_GOLD=50)
|
||||
|
||||
/obj/item/aiModule/examine(var/mob/user as mob)
|
||||
..()
|
||||
. = ..()
|
||||
if(Adjacent(user))
|
||||
show_laws(user)
|
||||
|
||||
|
||||
@@ -46,8 +46,8 @@ RLD
|
||||
spark_system.attach(src)
|
||||
|
||||
/obj/item/construction/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "\A [src]. It currently holds [matter]/[max_matter] matter-units." )
|
||||
. = ..()
|
||||
. += "\A [src]. It currently holds [matter]/[max_matter] matter-units."
|
||||
|
||||
/obj/item/construction/Destroy()
|
||||
QDEL_NULL(spark_system)
|
||||
@@ -163,8 +163,6 @@ RLD
|
||||
var/use_one_access = 0 //If the airlock should require ALL or only ONE of the listed accesses.
|
||||
var/delay_mod = 1
|
||||
var/canRturf = FALSE //Variable for R walls to deconstruct them
|
||||
var/adjacency_check = TRUE //Wheter it checks if the tool has to be in our hands or not. Wsed for the aux base construction drone's internal RCD
|
||||
|
||||
|
||||
/obj/item/construction/rcd/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] sets the RCD to 'Wall' and points it down [user.p_their()] throat! It looks like [user.p_theyre()] trying to commit suicide..</span>")
|
||||
@@ -227,11 +225,10 @@ RLD
|
||||
|
||||
t1 += "<p><a href='?src=[REF(src)];close=1'>Close</a></p>\n"
|
||||
|
||||
var/datum/browser/popup = new(user, "rcd_access", "Access Control", 900, 500)
|
||||
var/datum/browser/popup = new(user, "rcd_access", "Access Control", 900, 500, src)
|
||||
popup.set_content(t1)
|
||||
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
|
||||
popup.open()
|
||||
onclose(user, "rcd_access")
|
||||
|
||||
/obj/item/construction/rcd/Topic(href, href_list)
|
||||
..()
|
||||
@@ -275,7 +272,7 @@ RLD
|
||||
/obj/item/construction/rcd/proc/check_menu(mob/living/user)
|
||||
if(!istype(user))
|
||||
return FALSE
|
||||
if(user.incapacitated() || (adjacency_check && !user.Adjacent(src)))
|
||||
if(user.incapacitated() || !user.Adjacent(src))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -288,7 +285,7 @@ RLD
|
||||
"SOUTH" = image(icon = 'icons/mob/radial.dmi', icon_state = "csouth"),
|
||||
"WEST" = image(icon = 'icons/mob/radial.dmi', icon_state = "cwest")
|
||||
)
|
||||
var/computerdirs = show_radial_menu(user, src, computer_dirs, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = adjacency_check, tooltips = TRUE)
|
||||
var/computerdirs = show_radial_menu(user, src, computer_dirs, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
|
||||
if(!check_menu(user))
|
||||
return
|
||||
switch(computerdirs)
|
||||
@@ -347,13 +344,13 @@ RLD
|
||||
"External Maintenance" = get_airlock_image(/obj/machinery/door/airlock/maintenance/external/glass)
|
||||
)
|
||||
|
||||
var/airlockcat = show_radial_menu(user, src, solid_or_glass_choices, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = adjacency_check)
|
||||
var/airlockcat = show_radial_menu(user, src, solid_or_glass_choices, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE)
|
||||
if(!check_menu(user))
|
||||
return
|
||||
switch(airlockcat)
|
||||
if("Solid")
|
||||
if(advanced_airlock_setting == 1)
|
||||
var/airlockpaint = show_radial_menu(user, src, solid_choices, radius = 42, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = adjacency_check)
|
||||
var/airlockpaint = show_radial_menu(user, src, solid_choices, radius = 42, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE)
|
||||
if(!check_menu(user))
|
||||
return
|
||||
switch(airlockpaint)
|
||||
@@ -398,7 +395,7 @@ RLD
|
||||
|
||||
if("Glass")
|
||||
if(advanced_airlock_setting == 1)
|
||||
var/airlockpaint = show_radial_menu(user, src , glass_choices, radius = 42, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = adjacency_check)
|
||||
var/airlockpaint = show_radial_menu(user, src , glass_choices, radius = 42, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE)
|
||||
if(!check_menu(user))
|
||||
return
|
||||
switch(airlockpaint)
|
||||
@@ -557,6 +554,7 @@ RLD
|
||||
desc = "A device used to rapidly build walls and floors."
|
||||
canRturf = TRUE
|
||||
upgrade = TRUE
|
||||
var/energyfactor = 72
|
||||
|
||||
|
||||
/obj/item/construction/rcd/borg/useResource(amount, mob/user)
|
||||
@@ -567,7 +565,7 @@ RLD
|
||||
if(user)
|
||||
to_chat(user, no_ammo_message)
|
||||
return 0
|
||||
. = borgy.cell.use(amount * 72) //borgs get 1.3x the use of their RCDs
|
||||
. = borgy.cell.use(amount * energyfactor) //borgs get 1.3x the use of their RCDs
|
||||
if(!. && user)
|
||||
to_chat(user, no_ammo_message)
|
||||
return .
|
||||
@@ -580,11 +578,16 @@ RLD
|
||||
if(user)
|
||||
to_chat(user, no_ammo_message)
|
||||
return 0
|
||||
. = borgy.cell.charge >= (amount * 72)
|
||||
. = borgy.cell.charge >= (amount * energyfactor)
|
||||
if(!. && user)
|
||||
to_chat(user, no_ammo_message)
|
||||
return .
|
||||
|
||||
/obj/item/construction/rcd/borg/syndicate
|
||||
icon_state = "ircd"
|
||||
item_state = "ircd"
|
||||
energyfactor = 66
|
||||
|
||||
/obj/item/construction/rcd/loaded
|
||||
matter = 160
|
||||
|
||||
|
||||
@@ -79,9 +79,9 @@
|
||||
..()
|
||||
|
||||
/obj/item/twohanded/rcl/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(loaded)
|
||||
to_chat(user, "<span class='info'>It contains [loaded.amount]/[max_amount] cables.</span>")
|
||||
. += "<span class='info'>It contains [loaded.amount]/[max_amount] cables.</span>"
|
||||
|
||||
/obj/item/twohanded/rcl/Destroy()
|
||||
QDEL_NULL(loaded)
|
||||
|
||||
@@ -20,8 +20,8 @@ RSF
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/rsf/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>It currently holds [matter]/30 fabrication-units.</span>")
|
||||
. = ..()
|
||||
. += "<span class='notice'>It currently holds [matter]/30 fabrication-units.</span>"
|
||||
|
||||
/obj/item/rsf/cyborg
|
||||
matter = 30
|
||||
@@ -127,8 +127,8 @@ RSF
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/cookiesynth/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>It currently holds [matter]/10 cookie-units.</span>")
|
||||
. = ..()
|
||||
. += "<span class='notice'>It currently holds [matter]/10 cookie-units.</span>"
|
||||
|
||||
/obj/item/cookiesynth/attackby()
|
||||
return
|
||||
|
||||
@@ -91,9 +91,9 @@
|
||||
|
||||
|
||||
/obj/item/airlock_painter/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(!ink)
|
||||
to_chat(user, "<span class='notice'>It doesn't have a toner cartridge installed.</span>")
|
||||
. += "<span class='notice'>It doesn't have a toner cartridge installed.</span>"
|
||||
return
|
||||
var/ink_level = "high"
|
||||
if(ink.charges < 1)
|
||||
@@ -102,7 +102,7 @@
|
||||
ink_level = "low"
|
||||
else if((ink.charges/ink.max_charges) > 1) //Over 100% (admin var edit)
|
||||
ink_level = "dangerously high"
|
||||
to_chat(user, "<span class='notice'>Its ink levels look [ink_level].</span>")
|
||||
. += "<span class='notice'>Its ink levels look [ink_level].</span>"
|
||||
|
||||
|
||||
/obj/item/airlock_painter/attackby(obj/item/W, mob/user, params)
|
||||
|
||||
@@ -46,10 +46,10 @@
|
||||
|
||||
|
||||
/obj/item/bodybag/bluespace/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(contents.len)
|
||||
var/s = contents.len == 1 ? "" : "s"
|
||||
to_chat(user, "<span class='notice'>You can make out the shape[s] of [contents.len] object[s] through the fabric.</span>")
|
||||
. += "<span class='notice'>You can make out the shape[s] of [contents.len] object[s] through the fabric.</span>"
|
||||
|
||||
/obj/item/bodybag/bluespace/Destroy()
|
||||
for(var/atom/movable/A in contents)
|
||||
|
||||
@@ -9,10 +9,10 @@
|
||||
// Possible restyles for the cutout;
|
||||
// add an entry in change_appearance() if you add to here
|
||||
var/list/possible_appearances = list("Assistant", "Clown", "Mime",
|
||||
"Traitor", "Nuke Op", "Cultist", "Clockwork Cultist",
|
||||
"Traitor", "Nuke Op", "Cultist", "Brass Cultist", "Clockwork Cultist",
|
||||
"Revolutionary", "Wizard", "Shadowling", "Xenomorph", "Xenomorph Maid", "Swarmer",
|
||||
"Ash Walker", "Deathsquad Officer", "Ian", "Slaughter Demon",
|
||||
"Laughter Demon", "Private Security Officer")
|
||||
"Laughter Demon", "Private Security Officer", "Securitron", "Gondola", "Monkey")
|
||||
var/pushed_over = FALSE //If the cutout is pushed over and has to be righted
|
||||
var/deceptive = FALSE //If the cutout actually appears as what it portray and not a discolored version
|
||||
|
||||
@@ -123,10 +123,14 @@
|
||||
name = "Unknown"
|
||||
desc = "A cardboard cutout of a cultist."
|
||||
icon_state = "cutout_cultist"
|
||||
if("Brass Cultist")
|
||||
name = "[pick(GLOB.first_names_male)] [pick(GLOB.last_names)]"
|
||||
desc = "A cardboard cutout of a \"servant\" of Ratvar."
|
||||
icon_state = "cutout_servant"
|
||||
if("Clockwork Cultist")
|
||||
name = "[pick(GLOB.first_names_male)] [pick(GLOB.last_names)]"
|
||||
desc = "A cardboard cutout of a servant of Ratvar."
|
||||
icon_state = "cutout_servant"
|
||||
icon_state = "cutout_new_servant"
|
||||
if("Revolutionary")
|
||||
name = "Unknown"
|
||||
desc = "A cardboard cutout of a revolutionary."
|
||||
@@ -179,6 +183,18 @@
|
||||
name = "Private Security Officer"
|
||||
desc = "A cardboard cutout of a private security officer."
|
||||
icon_state = "cutout_ntsec"
|
||||
if("Securitron")
|
||||
name = "[pick("Officer", "Oftiser", "Sergeant", "General")][pick(" Genesky", " Pingsky", " Beepsky", " Pipsqueak", "-at-Armsky")]"
|
||||
desc = "A cardboard cutout of a securitron."
|
||||
icon_state = "cutout_law"
|
||||
if("Gondola")
|
||||
name = "gondola"
|
||||
desc = "A cardboard cutout of a gondola."
|
||||
icon_state = "cutout_gondola"
|
||||
if("Monkey")
|
||||
name = "monkey ([rand(1, 999)])"
|
||||
desc = "A cardboard cutout of a monkey."
|
||||
icon_state = "cutout_monky"
|
||||
return 1
|
||||
|
||||
/obj/item/cardboard_cutout/setDir(newdir)
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
|
||||
/obj/item/card/emag/examine(mob/user)
|
||||
. = ..()
|
||||
to_chat(user, "<span class='notice'>It has <b>[uses ? uses : "no"]</b> charges left.</span>")
|
||||
. += "<span class='notice'>It has <b>[uses ? uses : "no"]</b> charges left.</span>"
|
||||
|
||||
/obj/item/card/emag/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/emagrecharge))
|
||||
@@ -139,9 +139,9 @@
|
||||
/obj/item/emagrecharge/examine(mob/user)
|
||||
. = ..()
|
||||
if(uses)
|
||||
to_chat(user, "<span class='notice'>It can add up to [uses] charges to compatible devices</span>")
|
||||
. += "<span class='notice'>It can add up to [uses] charges to compatible devices</span>"
|
||||
else
|
||||
to_chat(user, "<span class='warning'>It has a small, red, blinking light coming from inside of it. It's spent.</span>")
|
||||
. += "<span class='warning'>It has a small, red, blinking light coming from inside of it. It's spent.</span>"
|
||||
|
||||
/obj/item/card/emagfake
|
||||
desc = "It's a card with a magnetic strip attached to some circuitry. Closer inspection shows that this card is a poorly made replica, with a \"DonkCo\" logo stamped on the back."
|
||||
@@ -193,9 +193,9 @@
|
||||
return
|
||||
|
||||
/obj/item/card/id/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(mining_points)
|
||||
to_chat(user, "There's [mining_points] mining equipment redemption point\s loaded onto this card.")
|
||||
. += "There's [mining_points] mining equipment redemption point\s loaded onto this card."
|
||||
|
||||
/obj/item/card/id/GetAccess()
|
||||
return access
|
||||
@@ -405,13 +405,13 @@ update_label("John Doe", "Clowny")
|
||||
/obj/item/card/id/prisoner/examine(mob/user)
|
||||
. = ..()
|
||||
if(sentence && world.time < sentence)
|
||||
to_chat(user, "<span class='notice'>You're currently serving a sentence for [crime]. <b>[DisplayTimeText(sentence - world.time)]</b> left.</span>")
|
||||
. += "<span class='notice'>You're currently serving a sentence for [crime]. <b>[DisplayTimeText(sentence - world.time)]</b> left.</span>"
|
||||
else if(goal)
|
||||
to_chat(user, "<span class='notice'>You have accumulated [points] out of the [goal] points you need for freedom.</span>")
|
||||
. += "<span class='notice'>You have accumulated [points] out of the [goal] points you need for freedom.</span>"
|
||||
else if(!sentence)
|
||||
to_chat(user, "<span class='warning'>You are currently serving a permanent sentence for [crime].</span>")
|
||||
. += "<span class='warning'>You are currently serving a permanent sentence for [crime].</span>"
|
||||
else
|
||||
to_chat(user, "<span class='notice'>Your sentence is up! You're free!</span>")
|
||||
. += "<span class='notice'>Your sentence is up! You're free!</span>"
|
||||
|
||||
/obj/item/card/id/prisoner/one
|
||||
name = "Prisoner #13-001"
|
||||
@@ -533,8 +533,8 @@ update_label("John Doe", "Clowny")
|
||||
update_icon()
|
||||
|
||||
/obj/item/card/id/knight/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
|
||||
. = ..()
|
||||
. += "<span class='notice'>Alt-click to recolor it.</span>"
|
||||
|
||||
/obj/item/card/id/knight/blue
|
||||
id_color = "#0000FF"
|
||||
|
||||
@@ -56,7 +56,7 @@ micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells.
|
||||
M.RefreshParts()
|
||||
|
||||
/obj/item/circuitboard/machine/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(LAZYLEN(req_components))
|
||||
var/list/nice_list = list()
|
||||
for(var/B in req_components)
|
||||
@@ -64,4 +64,4 @@ micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells.
|
||||
if(!ispath(A))
|
||||
continue
|
||||
nice_list += list("[req_components[A]] [initial(A.name)]")
|
||||
to_chat(user,"<span class='notice'>Required components: [english_list(nice_list)].</span>")
|
||||
. += "<span class='notice'>Required components: [english_list(nice_list)].</span>"
|
||||
|
||||
@@ -69,8 +69,8 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/circuitboard/computer/card/minor/examine(user)
|
||||
..()
|
||||
to_chat(user, "Currently set to \"[dept_list[target_dept]]\".")
|
||||
. = ..()
|
||||
. += "Currently set to \"[dept_list[target_dept]]\"."
|
||||
|
||||
//obj/item/circuitboard/computer/shield
|
||||
// name = "Shield Control (Computer Board)"
|
||||
|
||||
@@ -429,8 +429,8 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/circuitboard/machine/smartfridge/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='info'>[src] is set to [fridges_name_paths[build_path]]. You can use a screwdriver to reconfigure it.</span>")
|
||||
. = ..()
|
||||
. += "<span class='info'>[src] is set to [fridges_name_paths[build_path]]. You can use a screwdriver to reconfigure it.</span>"
|
||||
|
||||
/obj/item/circuitboard/machine/biogenerator
|
||||
name = "Biogenerator (Machine Board)"
|
||||
@@ -775,7 +775,7 @@
|
||||
|
||||
/obj/item/circuitboard/machine/public_nanite_chamber/examine(mob/user)
|
||||
. = ..()
|
||||
to_chat(user, "Cloud ID is currently set to [cloud_id].")
|
||||
. += "Cloud ID is currently set to [cloud_id]."
|
||||
|
||||
/obj/item/circuitboard/machine/nanite_program_hub
|
||||
name = "Nanite Program Hub (Machine Board)"
|
||||
@@ -936,9 +936,9 @@
|
||||
needs_anchored = FALSE
|
||||
|
||||
/obj/item/circuitboard/machine/dish_drive/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>Its suction function is [suction ? "enabled" : "disabled"]. Use it in-hand to switch.</span>")
|
||||
to_chat(user, "<span class='notice'>Its disposal auto-transmit function is [transmit ? "enabled" : "disabled"]. Alt-click it to switch.</span>")
|
||||
. = ..()
|
||||
. += "<span class='notice'>Its suction function is [suction ? "enabled" : "disabled"]. Use it in-hand to switch.</span>"
|
||||
. += "<span class='notice'>Its disposal auto-transmit function is [transmit ? "enabled" : "disabled"]. Alt-click it to switch.</span>"
|
||||
|
||||
/obj/item/circuitboard/machine/dish_drive/attack_self(mob/living/user)
|
||||
suction = !suction
|
||||
@@ -991,4 +991,4 @@
|
||||
/obj/item/stack/sheet/glass = 2,
|
||||
/obj/item/stock_parts/capacitor = 1,
|
||||
/obj/item/stack/cable_coil = 5,
|
||||
/obj/item/reagent_containers/glass/beaker = 6) //So it can hold lots of chems
|
||||
/obj/item/reagent_containers/glass/beaker = 6) //So it can hold lots of chems
|
||||
|
||||
@@ -112,11 +112,11 @@
|
||||
throw_range = 7
|
||||
attack_verb = list("HONKED")
|
||||
var/moodlet = "honk" //used to define which kind of moodlet is added to the honked target
|
||||
var/honksound = 'sound/items/bikehorn.ogg'
|
||||
var/list/honksounds = list('sound/items/bikehorn.ogg' = 1)
|
||||
|
||||
/obj/item/bikehorn/Initialize()
|
||||
/obj/item/bikehorn/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/squeak, list(honksound=1), 50)
|
||||
AddComponent(/datum/component/squeak, honksounds, 50)
|
||||
|
||||
/obj/item/bikehorn/attack(mob/living/carbon/M, mob/living/carbon/user)
|
||||
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, moodlet, /datum/mood_event/honk)
|
||||
@@ -124,7 +124,7 @@
|
||||
|
||||
/obj/item/bikehorn/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] solemnly points the horn at [user.p_their()] temple! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
playsound(src, 'sound/items/bikehorn.ogg', 50, 1)
|
||||
playsound(src, pickweight(honksounds), 50, 1)
|
||||
return (BRUTELOSS)
|
||||
|
||||
//air horn
|
||||
@@ -132,7 +132,7 @@
|
||||
name = "air horn"
|
||||
desc = "Damn son, where'd you find this?"
|
||||
icon_state = "air_horn"
|
||||
honksound = 'sound/items/airhorn2.ogg'
|
||||
honksounds = list('sound/items/airhorn2.ogg' = 1)
|
||||
|
||||
//golden bikehorn
|
||||
/obj/item/bikehorn/golden
|
||||
|
||||
@@ -665,10 +665,10 @@
|
||||
/obj/item/toy/crayon/spraycan/examine(mob/user)
|
||||
. = ..()
|
||||
if(charges_left)
|
||||
to_chat(user, "It has [charges_left] use\s left.")
|
||||
. += "It has [charges_left] use\s left."
|
||||
else
|
||||
to_chat(user, "It is empty.")
|
||||
to_chat(user, "<span class='notice'>Alt-click [src] to [ is_capped ? "take the cap off" : "put the cap on"].</span>")
|
||||
. += "It is empty."
|
||||
. += "<span class='notice'>Alt-click [src] to [ is_capped ? "take the cap off" : "put the cap on"].</span>"
|
||||
|
||||
/obj/item/toy/crayon/spraycan/afterattack(atom/target, mob/user, proximity, params)
|
||||
if(!proximity)
|
||||
@@ -829,7 +829,7 @@
|
||||
/obj/item/toy/crayon/spraycan/gang/examine(mob/user)
|
||||
. = ..()
|
||||
if(user.mind && user.mind.has_antag_datum(/datum/antagonist/gang) || isobserver(user))
|
||||
to_chat(user, "This spraycan has been specially modified with a stage 2 nozzle kit, making it faster.")
|
||||
. += "This spraycan has been specially modified with a stage 2 nozzle kit, making it faster."
|
||||
|
||||
/obj/item/toy/crayon/spraycan/infinite
|
||||
name = "infinite spraycan"
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
|
||||
/obj/item/defibrillator/MouseDrop(obj/over_object)
|
||||
. = ..()
|
||||
if(ismob(loc))
|
||||
if(!. && ismob(loc) && loc == usr)
|
||||
var/mob/M = loc
|
||||
if(!M.incapacitated() && istype(over_object, /obj/screen/inventory/hand))
|
||||
var/obj/screen/inventory/hand/H = over_object
|
||||
@@ -762,5 +762,3 @@
|
||||
desc = "An upgrade to the defibrillator capacitors, which let it charge faster"
|
||||
icon_state = "fast_disk"
|
||||
materials = list(MAT_METAL=16000, MAT_GLASS = 8000, MAT_GOLD = 26000, MAT_SILVER = 26000)
|
||||
|
||||
#undef HALFWAYCRITDEATH
|
||||
|
||||
@@ -103,12 +103,11 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
|
||||
/obj/item/pda/examine(mob/user)
|
||||
. = ..()
|
||||
var/dat = id ? "<span class='notice'>Alt-click to remove the id.</span>" : ""
|
||||
. += id ? "<span class='notice'>Alt-click to remove the id.</span>" : ""
|
||||
if(inserted_item && (!isturf(loc)))
|
||||
dat += "\n<span class='notice'>Ctrl-click to remove [inserted_item].</span>"
|
||||
. += "<span class='notice'>Ctrl-click to remove [inserted_item].</span>"
|
||||
if(LAZYLEN(GLOB.pda_reskins))
|
||||
dat += "\n<span class='notice'>Ctrl-shift-click it to reskin it.</span>"
|
||||
to_chat(user, dat)
|
||||
. += "<span class='notice'>Ctrl-shift-click it to reskin it.</span>"
|
||||
|
||||
/obj/item/pda/Initialize()
|
||||
. = ..()
|
||||
@@ -162,31 +161,33 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
|
||||
/obj/item/pda/equipped(mob/user, slot)
|
||||
. = ..()
|
||||
if(equipped)
|
||||
if(equipped || !user.client)
|
||||
return
|
||||
if(user.client)
|
||||
background_color = user.client.prefs.pda_color
|
||||
switch(user.client.prefs.pda_style)
|
||||
if(MONO)
|
||||
font_index = MODE_MONO
|
||||
font_mode = FONT_MONO
|
||||
if(SHARE)
|
||||
font_index = MODE_SHARE
|
||||
font_mode = FONT_SHARE
|
||||
if(ORBITRON)
|
||||
font_index = MODE_ORBITRON
|
||||
font_mode = FONT_ORBITRON
|
||||
if(VT)
|
||||
font_index = MODE_VT
|
||||
font_mode = FONT_VT
|
||||
else
|
||||
font_index = MODE_MONO
|
||||
font_mode = FONT_MONO
|
||||
var/pref_skin = GLOB.pda_reskins[user.client.prefs.pda_skin]
|
||||
if(icon != pref_skin)
|
||||
icon = pref_skin
|
||||
update_icon(FALSE, TRUE)
|
||||
equipped = TRUE
|
||||
update_style(user.client)
|
||||
|
||||
/obj/item/pda/proc/update_style(client/C)
|
||||
background_color = C.prefs.pda_color
|
||||
switch(C.prefs.pda_style)
|
||||
if(MONO)
|
||||
font_index = MODE_MONO
|
||||
font_mode = FONT_MONO
|
||||
if(SHARE)
|
||||
font_index = MODE_SHARE
|
||||
font_mode = FONT_SHARE
|
||||
if(ORBITRON)
|
||||
font_index = MODE_ORBITRON
|
||||
font_mode = FONT_ORBITRON
|
||||
if(VT)
|
||||
font_index = MODE_VT
|
||||
font_mode = FONT_VT
|
||||
else
|
||||
font_index = MODE_MONO
|
||||
font_mode = FONT_MONO
|
||||
var/pref_skin = GLOB.pda_reskins[C.prefs.pda_skin]
|
||||
if(icon != pref_skin)
|
||||
icon = pref_skin
|
||||
update_icon(FALSE, TRUE)
|
||||
equipped = TRUE
|
||||
|
||||
/obj/item/pda/proc/update_label()
|
||||
name = "PDA-[owner] ([ownjob])" //Name generalisation
|
||||
@@ -1043,7 +1044,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
|
||||
if (ismob(loc))
|
||||
var/mob/M = loc
|
||||
M.show_message("<span class='userdanger'>Your [src] explodes!</span>", 1)
|
||||
M.show_message("<span class='userdanger'>Your [src] explodes!</span>", MSG_VISUAL, "<span class='warning'>You hear a loud *pop*!</span>", MSG_AUDIBLE)
|
||||
else
|
||||
visible_message("<span class='danger'>[src] explodes!</span>", "<span class='warning'>You hear a loud *pop*!</span>")
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
rad_flags = RAD_PROTECT_CONTENTS //So the cartridges dont annoyingly get irradiated, and the signallers inside being radded as well
|
||||
|
||||
var/obj/item/integrated_signaler/radio = null
|
||||
|
||||
@@ -689,15 +690,16 @@ Code:
|
||||
active_bot = null
|
||||
|
||||
if("summon") //Args are in the correct order, they are stated here just as an easy reminder.
|
||||
active_bot.bot_control(command= "summon", user_turf= get_turf(usr), user_access= host_pda.GetAccess())
|
||||
active_bot.bot_control("summon", usr, host_pda.GetAccess())
|
||||
|
||||
else //Forward all other bot commands to the bot itself!
|
||||
active_bot.bot_control(command= href_list["op"], user= usr)
|
||||
active_bot.bot_control(href_list["op"], usr)
|
||||
playsound(src, 'sound/machines/terminal_select.ogg', 50, 1)
|
||||
|
||||
if(href_list["mule"]) //MULEbots are special snowflakes, and need different args due to how they work.
|
||||
|
||||
active_bot.bot_control(href_list["mule"], usr, TRUE)
|
||||
var/mob/living/simple_animal/bot/mulebot/mule = active_bot
|
||||
if (istype(mule))
|
||||
active_bot.bot_control(href_list["mule"], usr, TRUE)
|
||||
|
||||
if(!host_pda)
|
||||
return
|
||||
|
||||
@@ -72,12 +72,12 @@
|
||||
difficulty += 2
|
||||
var/datum/component/uplink/hidden_uplink = target.GetComponent(/datum/component/uplink)
|
||||
if(!target.detonatable || prob(difficulty * 15) || (hidden_uplink))
|
||||
U.show_message("<span class='danger'>An error flashes on your [src].</span>", 1)
|
||||
U.show_message("<span class='danger'>An error flashes on your [src].</span>", MSG_VISUAL)
|
||||
else
|
||||
message_admins("[!is_special_character(U) ? "Non-antag " : ""][ADMIN_LOOKUPFLW(U)] triggered a PDA explosion on [target.name] at [ADMIN_VERBOSEJMP(target)].")
|
||||
var/message_log = "triggered a PDA explosion on [target.name] at [AREACOORD(target)]."
|
||||
U.log_message(message_log, LOG_ATTACK)
|
||||
U.show_message("<span class='notice'>Success!</span>", 1)
|
||||
U.show_message("<span class='notice'>Success!</span>", MSG_VISUAL)
|
||||
target.explode()
|
||||
else
|
||||
to_chat(U, "PDA not found.")
|
||||
|
||||
@@ -12,9 +12,9 @@
|
||||
var/mode = 0
|
||||
|
||||
/obj/item/compressionkit/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>It has [charges] charges left. Recharge with bluespace crystals.</span>")
|
||||
to_chat(user, "<span class='notice'>Use in-hand to swap toggle compress/expand mode (expand mode not yet implemented).</span>")
|
||||
. = ..()
|
||||
. += "<span class='notice'>It has [charges] charges left. Recharge with bluespace crystals.</span>"
|
||||
. += "<span class='notice'>Use in-hand to swap toggle compress/expand mode (expand mode not yet implemented).</span>"
|
||||
|
||||
/obj/item/compressionkit/attack_self(mob/user)
|
||||
if(mode == 0)
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
/obj/item/desynchronizer
|
||||
name = "desynchronizer"
|
||||
desc = "An experimental device that can temporarily desynchronize the user from spacetime, effectively making them disappear while it's active."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "desynchronizer"
|
||||
item_state = "electronic"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
item_flags = NOBLUDGEON
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
materials = list(MAT_METAL = 250, MAT_GLASS = 500)
|
||||
var/max_duration = 3000
|
||||
var/duration = 300
|
||||
var/last_use = 0
|
||||
var/next_use = 0
|
||||
var/obj/effect/abstract/sync_holder/sync_holder
|
||||
|
||||
/obj/item/desynchronizer/attack_self(mob/living/user)
|
||||
if(world.time < next_use)
|
||||
to_chat(user, "<span class='warning'>[src] is still recharging.</span>")
|
||||
return
|
||||
if(!sync_holder)
|
||||
desync(user)
|
||||
else
|
||||
resync()
|
||||
|
||||
/obj/item/desynchronizer/examine(mob/user)
|
||||
. = ..()
|
||||
if(world.time < next_use)
|
||||
. += "<span class='warning'>Time left to recharge: [DisplayTimeText(next_use - world.time)]</span>"
|
||||
. += "<span class='notice'>Alt-click to customize the duration. Current duration: [DisplayTimeText(duration)].</span>"
|
||||
. += "<span class='notice'>Can be used again to interrupt the effect early. The recharge time is the same as the time spent in desync.</span>"
|
||||
|
||||
/obj/item/desynchronizer/AltClick(mob/living/user)
|
||||
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
|
||||
return
|
||||
var/new_duration = input(user, "Set the duration (5-300):", "Desynchronizer", duration / 10) as null|num
|
||||
if(new_duration)
|
||||
new_duration = new_duration SECONDS
|
||||
new_duration = CLAMP(new_duration, 50, max_duration)
|
||||
duration = new_duration
|
||||
to_chat(user, "<span class='notice'>You set the duration to [DisplayTimeText(duration)].</span>")
|
||||
|
||||
/obj/item/desynchronizer/proc/desync(mob/living/user)
|
||||
if(sync_holder)
|
||||
return
|
||||
sync_holder = new(drop_location())
|
||||
new /obj/effect/temp_visual/desynchronizer(drop_location())
|
||||
to_chat(user, "<span class='notice'>You activate [src], desynchronizing yourself from the present. You can still see your surroundings, but you feel eerily dissociated from reality.</span>")
|
||||
user.forceMove(sync_holder)
|
||||
SEND_SIGNAL(user, COMSIG_MOVABLE_SECLUDED_LOCATION)
|
||||
for(var/thing in user)
|
||||
var/atom/movable/AM = thing
|
||||
SEND_SIGNAL(AM, COMSIG_MOVABLE_SECLUDED_LOCATION)
|
||||
last_use = world.time
|
||||
icon_state = "desynchronizer-on"
|
||||
addtimer(CALLBACK(src, .proc/resync), duration)
|
||||
|
||||
/obj/item/desynchronizer/proc/resync()
|
||||
new /obj/effect/temp_visual/desynchronizer(sync_holder.drop_location())
|
||||
QDEL_NULL(sync_holder)
|
||||
icon_state = initial(icon_state)
|
||||
next_use = world.time + (world.time - last_use) // Could be 2*world.time-last_use but that would just be confusing
|
||||
|
||||
/obj/item/desynchronizer/Destroy()
|
||||
resync()
|
||||
return ..()
|
||||
|
||||
/obj/effect/abstract/sync_holder
|
||||
name = "desyncronized pocket"
|
||||
desc = "A pocket in spacetime, keeping the user a fraction of a second in the future."
|
||||
icon = null
|
||||
icon_state = null
|
||||
alpha = 0
|
||||
invisibility = INVISIBILITY_ABSTRACT
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
anchored = TRUE
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
|
||||
/obj/effect/abstract/sync_holder/Destroy()
|
||||
for(var/I in contents)
|
||||
var/atom/movable/AM = I
|
||||
AM.forceMove(drop_location())
|
||||
return ..()
|
||||
|
||||
/obj/effect/abstract/sync_holder/AllowDrop()
|
||||
return TRUE //no dropping spaghetti out of your spacetime pocket
|
||||
@@ -134,7 +134,6 @@
|
||||
var/voracious = hound ? TRUE : FALSE
|
||||
var/list/targets = target && hound ? list(target) : contents
|
||||
if(hound)
|
||||
hound.setClickCooldown(50)
|
||||
if(!hound.client || !(hound.client.prefs.cit_toggles & MEDIHOUND_SLEEPER))
|
||||
voracious = FALSE
|
||||
else
|
||||
@@ -447,7 +446,7 @@
|
||||
if (!target.devourable)
|
||||
to_chat(user, "The target registers an error code. Unable to insert into [src].")
|
||||
return
|
||||
if(target)
|
||||
if(patient)
|
||||
to_chat(user,"<span class='warning'>Your [src] is already occupied.</span>")
|
||||
return
|
||||
if(target.buckled)
|
||||
@@ -524,3 +523,7 @@
|
||||
update_gut()
|
||||
user.visible_message("<span class='warning'>[hound.name]'s garbage processor groans lightly as [trashman] slips inside.</span>", "<span class='notice'>Your garbage compactor groans lightly as [trashman] slips inside.</span>")
|
||||
playsound(hound, 'sound/effects/bin_close.ogg', 80, 1)
|
||||
|
||||
/obj/item/dogborg/sleeper/K9/flavour
|
||||
name = "Mobile Sleeper"
|
||||
desc = "A mounted, underslung sleeper, intended for holding willing occupants for leisurely purposes."
|
||||
@@ -35,8 +35,8 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/doorCharge/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(user.mind && user.mind.has_antag_datum(/datum/antagonist/traitor)) //No nuke ops because the device is excluded from nuclear
|
||||
to_chat(user, "A small explosive device that can be used to sabotage airlocks to cause an explosion upon opening. To apply, remove the airlock's maintenance panel and place it within.")
|
||||
. += "A small explosive device that can be used to sabotage airlocks to cause an explosion upon opening. To apply, remove the airlock's maintenance panel and place it within."
|
||||
else
|
||||
to_chat(user, "A small, suspicious object that feels lukewarm when held.")
|
||||
. += "A small, suspicious object that feels lukewarm when held."
|
||||
|
||||
@@ -16,11 +16,11 @@
|
||||
maptext = "[circuits]"
|
||||
|
||||
/obj/item/electroadaptive_pseudocircuit/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(iscyborg(user))
|
||||
to_chat(user, "<span class='notice'>It has material for <b>[circuits]</b> circuit[circuits == 1 ? "" : "s"]. Use the pseudocircuit on existing circuits to gain material.</span>")
|
||||
to_chat(user, "<span class='notice'>Serves as a substitute for <b>fire/air alarm</b>, <b>firelock</b>, and <b>APC</b> electronics.</span>")
|
||||
to_chat(user, "<span class='notice'>It can also be used on an APC with no power cell to <b>fabricate a low-capacity cell</b> at a high power cost.</span>")
|
||||
. += "<span class='notice'>It has material for <b>[circuits]</b> circuit[circuits == 1 ? "" : "s"]. Use the pseudocircuit on existing circuits to gain material.</span>"
|
||||
. += "<span class='notice'>Serves as a substitute for <b>fire/air alarm</b>, <b>firelock</b>, and <b>APC</b> electronics.</span>"
|
||||
. += "<span class='notice'>It can also be used on an APC with no power cell to <b>fabricate a low-capacity cell</b> at a high power cost.</span>"
|
||||
|
||||
/obj/item/electroadaptive_pseudocircuit/proc/adapt_circuit(mob/living/silicon/robot/R, circuit_cost = 0)
|
||||
if(QDELETED(R) || !istype(R))
|
||||
|
||||
@@ -431,6 +431,7 @@
|
||||
icon_state = "glowstick"
|
||||
item_state = "glowstick"
|
||||
grind_results = list("phenol" = 15, "hydrogen" = 10, "oxygen" = 5) //Meth-in-a-stick
|
||||
rad_flags = RAD_NO_CONTAMINATE
|
||||
var/fuel = 0
|
||||
|
||||
/obj/item/flashlight/glowstick/Initialize()
|
||||
|
||||
@@ -52,9 +52,9 @@
|
||||
qdel(F)
|
||||
|
||||
/obj/item/forcefield_projector/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
var/percent_charge = round((shield_integrity/max_shield_integrity)*100)
|
||||
to_chat(user, "<span class='notice'>It is currently sustaining [LAZYLEN(current_fields)]/[max_fields] fields, and it's [percent_charge]% charged.</span>")
|
||||
. += "<span class='notice'>It is currently sustaining [LAZYLEN(current_fields)]/[max_fields] fields, and it's [percent_charge]% charged.</span>"
|
||||
|
||||
/obj/item/forcefield_projector/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
@@ -63,28 +63,28 @@
|
||||
current_tick_amount = 0
|
||||
|
||||
/obj/item/geiger_counter/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(!scanning)
|
||||
return 1
|
||||
to_chat(user, "<span class='info'>Alt-click it to clear stored radiation levels.</span>")
|
||||
return
|
||||
. += "<span class='info'>Alt-click it to clear stored radiation levels.</span>"
|
||||
if(obj_flags & EMAGGED)
|
||||
to_chat(user, "<span class='warning'>The display seems to be incomprehensible.</span>")
|
||||
return 1
|
||||
. += "<span class='warning'>The display seems to be incomprehensible.</span>"
|
||||
return
|
||||
switch(radiation_count)
|
||||
if(-INFINITY to RAD_LEVEL_NORMAL)
|
||||
to_chat(user, "<span class='notice'>Ambient radiation level count reports that all is well.</span>")
|
||||
. += "<span class='notice'>Ambient radiation level count reports that all is well.</span>"
|
||||
if(RAD_LEVEL_NORMAL + 1 to RAD_LEVEL_MODERATE)
|
||||
to_chat(user, "<span class='disarm'>Ambient radiation levels slightly above average.</span>")
|
||||
. += "<span class='disarm'>Ambient radiation levels slightly above average.</span>"
|
||||
if(RAD_LEVEL_MODERATE + 1 to RAD_LEVEL_HIGH)
|
||||
to_chat(user, "<span class='warning'>Ambient radiation levels above average.</span>")
|
||||
. += "<span class='warning'>Ambient radiation levels above average.</span>"
|
||||
if(RAD_LEVEL_HIGH + 1 to RAD_LEVEL_VERY_HIGH)
|
||||
to_chat(user, "<span class='danger'>Ambient radiation levels highly above average.</span>")
|
||||
. += "<span class='danger'>Ambient radiation levels highly above average.</span>"
|
||||
if(RAD_LEVEL_VERY_HIGH + 1 to RAD_LEVEL_CRITICAL)
|
||||
to_chat(user, "<span class='suicide'>Ambient radiation levels nearing critical level.</span>")
|
||||
. += "<span class='suicide'>Ambient radiation levels nearing critical level.</span>"
|
||||
if(RAD_LEVEL_CRITICAL + 1 to INFINITY)
|
||||
to_chat(user, "<span class='boldannounce'>Ambient radiation levels above critical level!</span>")
|
||||
. += "<span class='boldannounce'>Ambient radiation levels above critical level!</span>"
|
||||
|
||||
to_chat(user, "<span class='notice'>The last radiation amount detected was [last_tick_amount]</span>")
|
||||
. += "<span class='notice'>The last radiation amount detected was [last_tick_amount]</span>"
|
||||
|
||||
/obj/item/geiger_counter/update_icon()
|
||||
if(!scanning)
|
||||
|
||||
@@ -14,10 +14,10 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
var/global_mode = TRUE //If disabled, only GPS signals of the same Z level are shown
|
||||
|
||||
/obj/item/gps/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
var/turf/curr = get_turf(src)
|
||||
to_chat(user, "The screen says: [get_area_name(curr, TRUE)] ([curr.x], [curr.y], [curr.z])")
|
||||
to_chat(user, "<span class='notice'>Alt-click to switch it [tracking ? "off":"on"].</span>")
|
||||
. += "The screen says: [get_area_name(curr, TRUE)] ([curr.x], [curr.y], [curr.z])"
|
||||
. += "<span class='notice'>Alt-click to switch it [tracking ? "off":"on"].</span>"
|
||||
|
||||
/obj/item/gps/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -73,8 +73,8 @@
|
||||
..()
|
||||
|
||||
/obj/item/lightreplacer/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, status_string())
|
||||
. = ..()
|
||||
. += status_string()
|
||||
|
||||
/obj/item/lightreplacer/attackby(obj/item/W, mob/user, params)
|
||||
|
||||
|
||||
@@ -51,11 +51,11 @@
|
||||
AddComponent(/datum/component/anti_magic, TRUE, TRUE, FALSE, null, null, FALSE)
|
||||
|
||||
/obj/item/multitool/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(selected_io)
|
||||
to_chat(user, "<span class='notice'>Activate [src] to detach the data wire.</span>")
|
||||
. += "<span class='notice'>Activate [src] to detach the data wire.</span>"
|
||||
if(buffer)
|
||||
to_chat(user, "<span class='notice'>Its buffer contains [buffer].</span>")
|
||||
. += "<span class='notice'>Its buffer contains [buffer].</span>"
|
||||
|
||||
/obj/item/multitool/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] puts the [src] to [user.p_their()] chest. It looks like [user.p_theyre()] trying to pulse [user.p_their()] heart off!</span>")
|
||||
@@ -247,6 +247,8 @@
|
||||
/obj/item/multitool/cyborg
|
||||
name = "multitool"
|
||||
desc = "Optimised and stripped-down version of a regular multitool."
|
||||
icon = 'icons/obj/items_cyborg.dmi'
|
||||
icon_state = "multitool_cyborg"
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/multitool/abductor
|
||||
|
||||
@@ -26,5 +26,5 @@
|
||||
paint_color = input("Which colour do you want to use?","Pipe painter") in GLOB.pipe_paint_colors
|
||||
|
||||
/obj/item/pipe_painter/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>It is set to [paint_color].</span>")
|
||||
. = ..()
|
||||
. += "<span class='notice'>It is set to [paint_color].</span>"
|
||||
|
||||
@@ -10,12 +10,12 @@
|
||||
var/obj/machinery/quantumpad/qpad
|
||||
|
||||
/obj/item/quantum_keycard/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(qpad)
|
||||
to_chat(user, "It's currently linked to a quantum pad.")
|
||||
to_chat(user, "<span class='notice'>Alt-click to unlink the keycard.</span>")
|
||||
. += "It's currently linked to a quantum pad."
|
||||
. += "<span class='notice'>Alt-click to unlink the keycard.</span>"
|
||||
else
|
||||
to_chat(user, "<span class='notice'>Insert [src] into an active quantum pad to link it.</span>")
|
||||
. += "<span class='notice'>Insert [src] into an active quantum pad to link it.</span>"
|
||||
|
||||
/obj/item/quantum_keycard/AltClick(mob/living/user)
|
||||
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
for(var/i in channels)
|
||||
examine_text_list += "[GLOB.channel_tokens[i]] - [lowertext(i)]"
|
||||
|
||||
to_chat(user, "<span class='notice'>It can access the following channels; [jointext(examine_text_list, ", ")].</span>")
|
||||
. += "<span class='notice'>It can access the following channels; [jointext(examine_text_list, ", ")].</span>"
|
||||
|
||||
/obj/item/encryptionkey/syndicate
|
||||
name = "syndicate encryption key"
|
||||
|
||||
@@ -32,7 +32,7 @@ GLOBAL_LIST_INIT(channel_tokens, list(
|
||||
return TOXLOSS
|
||||
|
||||
/obj/item/radio/headset/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
if(item_flags & IN_INVENTORY && loc == user)
|
||||
// construction of frequency description
|
||||
@@ -45,12 +45,12 @@ GLOBAL_LIST_INIT(channel_tokens, list(
|
||||
avail_chans += "use [MODE_TOKEN_DEPARTMENT] or [GLOB.channel_tokens[channels[i]]] for [lowertext(channels[i])]"
|
||||
else
|
||||
avail_chans += "use [GLOB.channel_tokens[channels[i]]] for [lowertext(channels[i])]"
|
||||
to_chat(user, "<span class='notice'>A small screen on the headset displays the following available frequencies:\n[english_list(avail_chans)].")
|
||||
. += "<span class='notice'>A small screen on the headset displays the following available frequencies:\n[english_list(avail_chans)]."
|
||||
|
||||
if(command)
|
||||
to_chat(user, "<span class='info'>Alt-click to toggle the high-volume mode.</span>")
|
||||
. += "<span class='info'>Alt-click to toggle the high-volume mode.</span>"
|
||||
else
|
||||
to_chat(user, "<span class='notice'>A small screen on the headset flashes, it's too small to read without holding or wearing the headset.</span>")
|
||||
. += "<span class='notice'>A small screen on the headset flashes, it's too small to read without holding or wearing the headset.</span>"
|
||||
|
||||
/obj/item/radio/headset/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -49,11 +49,11 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/radio/intercom/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(!unfastened)
|
||||
to_chat(user, "<span class='notice'>It's <b>screwed</b> and secured to the wall.</span>")
|
||||
. += "<span class='notice'>It's <b>screwed</b> and secured to the wall.</span>"
|
||||
else
|
||||
to_chat(user, "<span class='notice'>It's <i>unscrewed</i> from the wall, and can be <b>detached</b>.</span>")
|
||||
. += "<span class='notice'>It's <i>unscrewed</i> from the wall, and can be <b>detached</b>.</span>"
|
||||
|
||||
/obj/item/radio/intercom/attackby(obj/item/I, mob/living/user, params)
|
||||
if(istype(I, /obj/item/screwdriver))
|
||||
|
||||
@@ -319,11 +319,11 @@
|
||||
|
||||
|
||||
/obj/item/radio/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if (unscrewed)
|
||||
to_chat(user, "<span class='notice'>It can be attached and modified.</span>")
|
||||
. += "<span class='notice'>It can be attached and modified.</span>"
|
||||
else
|
||||
to_chat(user, "<span class='notice'>It cannot be modified or attached.</span>")
|
||||
. += "<span class='notice'>It cannot be modified or attached.</span>"
|
||||
|
||||
/obj/item/radio/attackby(obj/item/W, mob/user, params)
|
||||
add_fingerprint(user)
|
||||
|
||||
@@ -131,232 +131,228 @@ SLIME SCANNER
|
||||
mob_status = "<span class='alert'><b>Deceased</b></span>"
|
||||
oxy_loss = max(rand(1, 40), oxy_loss, (300 - (tox_loss + fire_loss + brute_loss))) // Random oxygen loss
|
||||
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.undergoing_cardiac_arrest() && H.stat != DEAD)
|
||||
to_chat(user, "<span class='danger'>Subject suffering from heart attack: Apply defibrillation or other electric shock immediately!</span>")
|
||||
if(H.undergoing_liver_failure() && H.stat != DEAD) //might be depreciated BUG_PROBABLE_CAUSE
|
||||
to_chat(user, "<span class='danger'>Subject is suffering from liver failure: Apply Corazone and begin a liver transplant immediately!</span>")
|
||||
|
||||
var/msg = "<span class='info'>*---------*\nAnalyzing results for [M]:\n\tOverall status: [mob_status]\n"
|
||||
var/msg = "<span class='info'>*---------*\nAnalyzing results for [M]:\n\tOverall status: [mob_status]"
|
||||
|
||||
// Damage descriptions
|
||||
if(brute_loss > 10)
|
||||
msg += "\t<span class='alert'>[brute_loss > 50 ? "Severe" : "Minor"] tissue damage detected.</span>\n"
|
||||
msg += "\n\t<span class='alert'>[brute_loss > 50 ? "Severe" : "Minor"] tissue damage detected.</span>"
|
||||
if(fire_loss > 10)
|
||||
msg += "\t<span class='alert'>[fire_loss > 50 ? "Severe" : "Minor"] burn damage detected.</span>\n"
|
||||
msg += "\n\t<span class='alert'>[fire_loss > 50 ? "Severe" : "Minor"] burn damage detected.</span>"
|
||||
if(oxy_loss > 10)
|
||||
msg += "\t<span class='info'><span class='alert'>[oxy_loss > 50 ? "Severe" : "Minor"] oxygen deprivation detected.</span>\n"
|
||||
msg += "\n\t<span class='info'><span class='alert'>[oxy_loss > 50 ? "Severe" : "Minor"] oxygen deprivation detected.</span>"
|
||||
if(tox_loss > 10)
|
||||
msg += "\t<span class='alert'>[tox_loss > 50 ? "Severe" : "Minor"] amount of toxin damage detected.</span>\n"
|
||||
msg += "\n\t<span class='alert'>[tox_loss > 50 ? "Severe" : "Minor"] amount of toxin damage detected.</span>"
|
||||
if(M.getStaminaLoss())
|
||||
msg += "\t<span class='alert'>Subject appears to be suffering from fatigue.</span>\n"
|
||||
msg += "\n\t<span class='alert'>Subject appears to be suffering from fatigue.</span>"
|
||||
if(advanced)
|
||||
msg += "\t<span class='info'>Fatigue Level: [M.getStaminaLoss()]%.</span>\n"
|
||||
msg += "\n\t<span class='info'>Fatigue Level: [M.getStaminaLoss()]%.</span>"
|
||||
if (M.getCloneLoss())
|
||||
msg += "\t<span class='alert'>Subject appears to have [M.getCloneLoss() > 30 ? "Severe" : "Minor"] cellular damage.</span>\n"
|
||||
msg += "\n\t<span class='alert'>Subject appears to have [M.getCloneLoss() > 30 ? "Severe" : "Minor"] cellular damage.</span>"
|
||||
if(advanced)
|
||||
msg += "\t<span class='info'>Cellular Damage Level: [M.getCloneLoss()].</span>\n"
|
||||
if (!M.getorgan(/obj/item/organ/brain))
|
||||
to_chat(user, "\t<span class='alert'>Subject lacks a brain.</span>") //Unsure how this won't proc for 50% of the cit playerbase (This is a joke everyone on cit a cute.)
|
||||
if(ishuman(M) && advanced) // Should I make this not advanced?
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/liver/L = H.getorganslot("liver")
|
||||
if(L)
|
||||
if(L.swelling > 20)
|
||||
msg += "\t<span class='danger'>Subject is suffering from an enlarged liver.</span>\n" //i.e. shrink their liver or give them a transplant.
|
||||
else
|
||||
msg += "\t<span class='danger'>Subject's liver is missing.</span>\n"
|
||||
var/obj/item/organ/tongue/T = H.getorganslot("tongue")
|
||||
if(T)
|
||||
if(T.damage > 40)
|
||||
msg += "\t<span class='danger'>Subject is suffering from severe burn tissue on their tongue.</span>\n" //i.e. their tongue is shot
|
||||
if(T.name == "fluffy tongue")
|
||||
msg += "\t<span class='danger'>Subject is suffering from a fluffified tongue. Suggested cure: Yamerol or a tongue transplant.</span>\n"
|
||||
else
|
||||
msg += "\t<span class='danger'>Subject's tongue is missing.</span>\n"
|
||||
var/obj/item/organ/lungs/Lung = H.getorganslot("lungs")
|
||||
if(Lung)
|
||||
if(Lung.damage > 150)
|
||||
msg += "\t<span class='danger'>Subject is suffering from acute emphysema leading to trouble breathing.</span>\n" //i.e. Their lungs are shot
|
||||
else
|
||||
msg += "\t<span class='danger'>Subject's lungs have collapsed from trauma!</span>\n"
|
||||
var/obj/item/organ/genital/penis/P = H.getorganslot("penis")
|
||||
if(P)
|
||||
if(P.length>20)
|
||||
msg += "\t<span class='info'>Subject has a sizeable gentleman's organ at [P.length] inches.</span>\n"
|
||||
var/obj/item/organ/genital/breasts/Br = H.getorganslot("breasts")
|
||||
if(Br)
|
||||
if(Br.cached_size>5)
|
||||
msg += "\t<span class='info'>Subject has a sizeable bosom with a [Br.size] cup.</span>\n"
|
||||
|
||||
if (M.getOrganLoss(ORGAN_SLOT_BRAIN) >= 200 || !M.getorgan(/obj/item/organ/brain))
|
||||
msg += "\t<span class='alert'>Subject's brain function is non-existent.</span>\n"
|
||||
else if (M.getOrganLoss(ORGAN_SLOT_BRAIN) >= 120)
|
||||
msg += "\t<span class='alert'>Severe brain damage detected. Subject likely to have mental traumas.</span>\n"
|
||||
else if (M.getOrganLoss(ORGAN_SLOT_BRAIN) >= 45)
|
||||
msg += "\t<span class='alert'>Brain damage detected.</span>\n"
|
||||
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
if(LAZYLEN(C.get_traumas()))
|
||||
var/list/trauma_text = list()
|
||||
for(var/datum/brain_trauma/B in C.get_traumas())
|
||||
var/trauma_desc = ""
|
||||
switch(B.resilience)
|
||||
if(TRAUMA_RESILIENCE_SURGERY)
|
||||
trauma_desc += "severe "
|
||||
if(TRAUMA_RESILIENCE_LOBOTOMY)
|
||||
trauma_desc += "deep-rooted "
|
||||
if(TRAUMA_RESILIENCE_MAGIC, TRAUMA_RESILIENCE_ABSOLUTE)
|
||||
trauma_desc += "permanent "
|
||||
trauma_desc += B.scan_desc
|
||||
trauma_text += trauma_desc
|
||||
msg += "\t<span class='alert'>Cerebral traumas detected: subject appears to be suffering from [english_list(trauma_text)].</span>\n"
|
||||
if(C.roundstart_quirks.len)
|
||||
msg += "\t<span class='info'>Subject has the following physiological traits: [C.get_trait_string()].</span>\n"
|
||||
if(advanced)
|
||||
msg += "\t<span class='info'>Brain Activity Level: [(200 - M.getOrganLoss(ORGAN_SLOT_BRAIN))/2]%.</span>\n"
|
||||
if(M.radiation)
|
||||
msg += "\t<span class='alert'>Subject is irradiated.</span>\n"
|
||||
msg += "\t<span class='info'>Radiation Level: [M.radiation] rad</span>\n"
|
||||
|
||||
if(advanced && M.hallucinating())
|
||||
msg += "\t<span class='info'>Subject is hallucinating.</span>\n"
|
||||
|
||||
//MKUltra
|
||||
if(advanced && M.has_status_effect(/datum/status_effect/chem/enthrall))
|
||||
msg += "\t<span class='info'>Subject has abnormal brain fuctions.</span>\n"
|
||||
|
||||
//Astrogen shenanigans
|
||||
if(advanced && M.reagents.has_reagent("astral"))
|
||||
if(M.mind)
|
||||
msg += "\t<span class='danger'>Warning: subject may be possesed.</span>\n"
|
||||
else
|
||||
msg += "\t<span class='notice'>Subject appears to be astrally projecting.</span>\n"
|
||||
|
||||
//Eyes and ears
|
||||
if(advanced)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
var/obj/item/organ/ears/ears = C.getorganslot(ORGAN_SLOT_EARS)
|
||||
msg += "\t<span class='info'><b>==EAR STATUS==</b></span>\n"
|
||||
if(istype(ears))
|
||||
var/healthy = TRUE
|
||||
if(HAS_TRAIT_FROM(C, TRAIT_DEAF, GENETIC_MUTATION))
|
||||
healthy = FALSE
|
||||
msg += "\t<span class='alert'>Subject is genetically deaf.</span>\n"
|
||||
else if(HAS_TRAIT(C, TRAIT_DEAF))
|
||||
healthy = FALSE
|
||||
msg += "\t<span class='alert'>Subject is deaf.</span>\n"
|
||||
else
|
||||
if(ears.damage)
|
||||
to_chat(user, "\t<span class='alert'>Subject has [ears.damage > ears.maxHealth ? "permanent ": "temporary "]hearing damage.</span>")
|
||||
healthy = FALSE
|
||||
if(ears.deaf)
|
||||
to_chat(user, "\t<span class='alert'>Subject is [ears.damage > ears.maxHealth ? "permanently ": "temporarily "] deaf.</span>")
|
||||
healthy = FALSE
|
||||
if(healthy)
|
||||
msg += "\t<span class='info'>Healthy.</span>\n"
|
||||
else
|
||||
msg += "\t<span class='alert'>Subject does not have ears.</span>\n"
|
||||
var/obj/item/organ/eyes/eyes = C.getorganslot(ORGAN_SLOT_EYES)
|
||||
msg += "\t<span class='info'><b>==EYE STATUS==</b></span>\n"
|
||||
if(istype(eyes))
|
||||
var/healthy = TRUE
|
||||
if(HAS_TRAIT(C, TRAIT_BLIND))
|
||||
msg += "\t<span class='alert'>Subject is blind.</span>\n"
|
||||
healthy = FALSE
|
||||
if(HAS_TRAIT(C, TRAIT_NEARSIGHT))
|
||||
msg += "\t<span class='alert'>Subject is nearsighted.</span>\n"
|
||||
healthy = FALSE
|
||||
if(eyes.damage > 30)
|
||||
msg += "\t<span class='alert'>Subject has severe eye damage.</span>\n"
|
||||
healthy = FALSE
|
||||
else if(eyes.damage > 20)
|
||||
msg += "\t<span class='alert'>Subject has significant eye damage.</span>\n"
|
||||
healthy = FALSE
|
||||
else if(eyes.damage)
|
||||
msg += "\t<span class='alert'>Subject has minor eye damage.</span>\n"
|
||||
healthy = FALSE
|
||||
if(healthy)
|
||||
msg += "\t<span class='info'>Healthy.</span>\n"
|
||||
else
|
||||
msg += "\t<span class='alert'>Subject does not have eyes.</span>\n"
|
||||
msg += "\n\t<span class='info'>Cellular Damage Level: [M.getCloneLoss()].</span>"
|
||||
|
||||
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/ldamage = H.return_liver_damage()
|
||||
if(ldamage > 10)
|
||||
msg += "\t<span class='alert'>[ldamage > 45 ? "Severe" : "Minor"] liver damage detected.</span>\n"
|
||||
to_chat(user, msg)
|
||||
msg = ""
|
||||
|
||||
// Body part damage report
|
||||
var/list/dmgreport = list()
|
||||
if(iscarbon(M) && mode == 1)
|
||||
var/mob/living/carbon/C = M
|
||||
var/list/damaged = C.get_damaged_bodyparts(1,1)
|
||||
if(length(damaged)>0 || oxy_loss>0 || tox_loss>0 || fire_loss>0)
|
||||
msg += "<span class='info'>\tDamage: <span class='info'><font color='red'>Brute</font></span>-<font color='#FF8000'>Burn</font>-<font color='green'>Toxin</font>-<font color='blue'>Suffocation</font>\n\t\tSpecifics: <font color='red'>[brute_loss]</font>-<font color='#FF8000'>[fire_loss]</font>-<font color='green'>[tox_loss]</font>-<font color='blue'>[oxy_loss]</font></span>\n"
|
||||
for(var/obj/item/bodypart/org in damaged)
|
||||
msg += "\t\t<span class='info'>[capitalize(org.name)]: [(org.brute_dam > 0) ? "<font color='red'>[org.brute_dam]</font></span>" : "<font color='red'>0</font>"]-[(org.burn_dam > 0) ? "<font color='#FF8000'>[org.burn_dam]</font>" : "<font color='#FF8000'>0</font>"]\n"
|
||||
dmgreport += "<table style='margin-left:33px'><tr><font face='Verdana'>\
|
||||
<td style='width: 90px;'><font color='#0000CC'>Damage:</font></td>\
|
||||
<td style='width: 55px;'><font color='red'><b>Brute</b></font></td>\
|
||||
<td style='width: 45px;'><font color='orange'><b>Burn</b></font></td>\
|
||||
<td style='width: 45px;'><font color='green'><b>Toxin</b></font></td>\
|
||||
<td style='width: 90px;'><font color='purple'><b>Suffocation</b></font></td></tr>\
|
||||
<tr><td><font color='#0000CC'>Overall:</font></td>\
|
||||
<td><font color='red'>[brute_loss]</font></td>\
|
||||
<td><font color='orange'>[fire_loss]</font></td>\
|
||||
<td><font color='green'>[tox_loss]</font></td>\
|
||||
<td><font color='purple'>[oxy_loss]</font></td></tr>"
|
||||
|
||||
for(var/o in damaged)
|
||||
var/obj/item/bodypart/org = o //head, left arm, right arm, etc.
|
||||
dmgreport += "<tr><td><font color='#0000CC'>[capitalize(org.name)]:</font></td>\
|
||||
<td><font color='red'>[(org.brute_dam > 0) ? "[org.brute_dam]" : "0"]</font></td>\
|
||||
<td><font color='orange'>[(org.burn_dam > 0) ? "[org.burn_dam]" : "0"]</font></td></tr>"
|
||||
dmgreport += "</table>"
|
||||
to_chat(user, dmgreport.Join())
|
||||
|
||||
|
||||
//Organ damages report
|
||||
if(ishuman(M))
|
||||
var/heart_ded = FALSE
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/minor_damage
|
||||
var/major_damage
|
||||
var/max_damage
|
||||
var/report_organs = FALSE
|
||||
for(var/organ in C.internal_organs)
|
||||
var/temp_message
|
||||
var/damage_message
|
||||
var/obj/item/organ/O = organ
|
||||
|
||||
//Piece together the lists to be reported
|
||||
for(var/O in H.internal_organs)
|
||||
var/obj/item/organ/organ = O
|
||||
if(organ.organ_flags & ORGAN_FAILING)
|
||||
report_organs = TRUE //if we report one organ, we report all organs, even if the lists are empty, just for consistency
|
||||
if(max_damage)
|
||||
max_damage += ", " //prelude the organ if we've already reported an organ
|
||||
max_damage += organ.name //this just slaps the organ name into the string of text
|
||||
else
|
||||
max_damage = "\t<span class='alert'>Non-Functional Organs: " //our initial statement
|
||||
max_damage += organ.name
|
||||
else if(organ.damage > organ.high_threshold)
|
||||
report_organs = TRUE
|
||||
if(major_damage)
|
||||
major_damage += ", "
|
||||
major_damage += organ.name
|
||||
else
|
||||
major_damage = "\t<span class='info'>Severely Damaged Organs: "
|
||||
major_damage += organ.name
|
||||
else if(organ.damage > organ.low_threshold)
|
||||
report_organs = TRUE
|
||||
if(minor_damage)
|
||||
minor_damage += ", "
|
||||
minor_damage += organ.name
|
||||
else
|
||||
minor_damage = "\t<span class='info'>Mildly Damaged Organs: "
|
||||
minor_damage += organ.name
|
||||
//EYES
|
||||
if(istype(O, /obj/item/organ/eyes))
|
||||
var/obj/item/organ/eyes/eyes = O
|
||||
if(advanced)
|
||||
if(HAS_TRAIT(C, TRAIT_BLIND))
|
||||
temp_message += " <span class='alert'>Subject is blind.</span>"
|
||||
if(HAS_TRAIT(C, TRAIT_NEARSIGHT))
|
||||
temp_message += " <span class='alert'>Subject is nearsighted.</span>"
|
||||
if(eyes.damage > 30)
|
||||
damage_message += " <span class='alert'>Subject has severe eye damage.</span>"
|
||||
else if(eyes.damage > 20)
|
||||
damage_message += " <span class='alert'>Subject has significant eye damage.</span>"
|
||||
else if(eyes.damage)
|
||||
damage_message += " <span class='alert'>Subject has minor eye damage.</span>"
|
||||
|
||||
|
||||
//EARS
|
||||
else if(istype(O, /obj/item/organ/ears))
|
||||
var/obj/item/organ/ears/ears = O
|
||||
if(advanced)
|
||||
if(HAS_TRAIT_FROM(C, TRAIT_DEAF, GENETIC_MUTATION))
|
||||
temp_message += " <span class='alert'>Subject is genetically deaf.</span>"
|
||||
else if(HAS_TRAIT(C, TRAIT_DEAF))
|
||||
temp_message += " <span class='alert'>Subject is deaf.</span>"
|
||||
else
|
||||
if(ears.damage)
|
||||
damage_message += " <span class='alert'>Subject has [ears.damage > ears.maxHealth ? "permanent ": "temporary "]hearing damage.</span>"
|
||||
if(ears.deaf)
|
||||
damage_message += " <span class='alert'>Subject is [ears.damage > ears.maxHealth ? "permanently ": "temporarily "] deaf.</span>"
|
||||
|
||||
|
||||
//BRAIN
|
||||
else if(istype(O, /obj/item/organ/brain))
|
||||
if (C.getOrganLoss(ORGAN_SLOT_BRAIN) >= 200)
|
||||
damage_message += " <span class='alert'>Subject's brain non-functional. Neurine injection recomended.</span>"
|
||||
else if (C.getOrganLoss(ORGAN_SLOT_BRAIN) >= 120)
|
||||
damage_message += " <span class='alert'>Severe brain damage detected. Subject likely to have mental traumas.</span>"
|
||||
else if (C.getOrganLoss(ORGAN_SLOT_BRAIN) >= 45)
|
||||
damage_message += " <span class='alert'>Brain damage detected.</span>"
|
||||
if(advanced)
|
||||
temp_message += " <span class='info'>Brain Activity Level: [(200 - M.getOrganLoss(ORGAN_SLOT_BRAIN))/2]%.</span>"
|
||||
|
||||
//TRAUMAS
|
||||
if(LAZYLEN(C.get_traumas()))
|
||||
var/list/trauma_text = list()
|
||||
for(var/datum/brain_trauma/B in C.get_traumas())
|
||||
var/trauma_desc = ""
|
||||
switch(B.resilience)
|
||||
if(TRAUMA_RESILIENCE_SURGERY)
|
||||
trauma_desc += "severe "
|
||||
if(TRAUMA_RESILIENCE_LOBOTOMY)
|
||||
trauma_desc += "deep-rooted "
|
||||
if(TRAUMA_RESILIENCE_MAGIC, TRAUMA_RESILIENCE_ABSOLUTE)
|
||||
trauma_desc += "permanent "
|
||||
trauma_desc += B.scan_desc
|
||||
trauma_text += trauma_desc
|
||||
temp_message += " <span class='alert'>Cerebral traumas detected: subject appears to be suffering from [english_list(trauma_text)].</span>"
|
||||
if(C.roundstart_quirks.len)
|
||||
temp_message += " <span class='info'>Subject has the following physiological traits: [C.get_trait_string()].</span>"
|
||||
|
||||
if(ishuman(C) && advanced)
|
||||
//MON PETIT CHAUFFEUR
|
||||
if(H.hallucinating())
|
||||
temp_message += " <span class='info'>Subject is hallucinating.</span>"
|
||||
|
||||
//MKUltra
|
||||
if(H.has_status_effect(/datum/status_effect/chem/enthrall))
|
||||
temp_message += " <span class='info'>Subject has abnormal brain fuctions.</span>"
|
||||
|
||||
//Astrogen shenanigans
|
||||
if(H.reagents.has_reagent("astral"))
|
||||
if(H.mind)
|
||||
temp_message += " <span class='danger'>Warning: subject may be possesed.</span>"
|
||||
else
|
||||
temp_message += " <span class='notice'>Subject appears to be astrally projecting.</span>"
|
||||
|
||||
|
||||
//LIVER
|
||||
else if(istype(O, /obj/item/organ/liver))
|
||||
var/obj/item/organ/liver/L = O
|
||||
if(H.undergoing_liver_failure() && H.stat != DEAD) //might be depreciated
|
||||
temp_message += "<span class='danger'>Subject is suffering from liver failure: Apply Corazone and begin a liver transplant immediately!</span>"
|
||||
if(L.swelling > 20)
|
||||
temp_message += " <span class='danger'>Subject is suffering from an enlarged liver.</span>" //i.e. shrink their liver or give them a transplant.
|
||||
|
||||
//HEART
|
||||
else if(ishuman(M) && (istype(O, /obj/item/organ/heart)))
|
||||
var/obj/item/organ/heart/He = O
|
||||
if(H.undergoing_cardiac_arrest() && H.stat != DEAD)
|
||||
temp_message += " <span class='danger'>Subject suffering from heart attack: Apply defibrillation or other electric shock <b>immediately!</b></span>"
|
||||
if(He.organ_flags & ORGAN_FAILING)
|
||||
heart_ded = TRUE
|
||||
|
||||
//TONGUE
|
||||
else if(istype(O, /obj/item/organ/tongue))
|
||||
var/obj/item/organ/tongue/T = O
|
||||
if(T.name == "fluffy tongue")
|
||||
temp_message += " <span class='danger'>Subject is suffering from a fluffified tongue. Suggested cure: Yamerol or a tongue transplant.</span>"
|
||||
|
||||
//HECK
|
||||
else if(istype(O, /obj/item/organ/genital/penis))
|
||||
var/obj/item/organ/genital/penis/P = O
|
||||
if(P.length>20)
|
||||
temp_message += " <span class='info'>Subject has a sizeable gentleman's organ at [P.length] inches.</span>"
|
||||
|
||||
else if(istype(O, /obj/item/organ/genital/breasts))
|
||||
var/obj/item/organ/genital/breasts/Br = O
|
||||
if(Br.cached_size>5)
|
||||
temp_message += " <span class='info'>Subject has a sizeable bosom with a [Br.size] cup.</span>"
|
||||
|
||||
|
||||
|
||||
//GENERAL HANDLER
|
||||
if(!damage_message)
|
||||
if(O.organ_flags & ORGAN_FAILING)
|
||||
damage_message += " <span class='alert'><b>End Stage [O.name] failure detected.</b></span>"
|
||||
else if(O.damage > O.high_threshold)
|
||||
damage_message += " <span class='alert'>Chronic [O.name] failure detected.</span>"
|
||||
else if(O.damage > O.low_threshold && advanced)
|
||||
damage_message += " <font color='red'>Acute [O.name] failure detected.</span>"
|
||||
|
||||
if(temp_message || damage_message)
|
||||
msg += "\t<b><span class='info'>[uppertext(O.name)]:</b></span> [damage_message] [temp_message]\n"
|
||||
|
||||
|
||||
|
||||
//END; LOOK FOR MISSING ORGANS?
|
||||
var/breathes = TRUE
|
||||
var/blooded = TRUE
|
||||
if(C.dna && C.dna.species)
|
||||
if(HAS_TRAIT_FROM(C, TRAIT_NOBREATH, SPECIES_TRAIT))
|
||||
breathes = FALSE
|
||||
if(NOBLOOD in C.dna.species.species_traits)
|
||||
blooded = FALSE
|
||||
var/has_liver = (!(NOLIVER in C.dna.species.species_traits))
|
||||
var/has_stomach = (!(NOSTOMACH in C.dna.species.species_traits))
|
||||
if(!M.getorganslot(ORGAN_SLOT_EYES))
|
||||
msg += "\t<span class='alert'><b>Subject does not have eyes.</b></span>\n"
|
||||
if(!M.getorganslot(ORGAN_SLOT_EARS))
|
||||
msg += "\t<span class='alert'><b>Subject does not have ears.</b></span>\n"
|
||||
if(!M.getorganslot(ORGAN_SLOT_BRAIN))
|
||||
msg += "\t<span class='alert'><b>Subject's brain function is non-existent!</b></span>\n"
|
||||
if(has_liver && !M.getorganslot(ORGAN_SLOT_LIVER))
|
||||
msg += "\t<span class='alert'><b>Subject's liver is missing!</b></span>\n"
|
||||
if(blooded && !M.getorganslot(ORGAN_SLOT_HEART))
|
||||
msg += "\t<span class='alert'><b>Subject's heart is missing!</b></span>\n"
|
||||
if(breathes && !M.getorganslot(ORGAN_SLOT_LUNGS))
|
||||
msg += "\t<span class='alert'><b>Subject's lungs have collapsed from trauma!</b></span>\n"
|
||||
if(has_stomach && !M.getorganslot(ORGAN_SLOT_STOMACH))
|
||||
msg += "\t<span class='alert'><b>Subject's stomach is missing!</span>\n"
|
||||
|
||||
|
||||
if(M.radiation)
|
||||
msg += "\t<span class='alert'>Subject is irradiated.</span>\n"
|
||||
msg += "\t<span class='info'>Radiation Level: [M.radiation] rad</span>\n"
|
||||
|
||||
if(report_organs) //we either finish the list, or set it to be empty if no organs were reported in that category
|
||||
if(!max_damage)
|
||||
max_damage = "\t<span class='alert'>Non-Functional Organs: </span>\n"
|
||||
else
|
||||
max_damage += "</span>\n"
|
||||
if(!major_damage)
|
||||
major_damage = "\t<span class='info'>Severely Damaged Organs: </span>\n"
|
||||
else
|
||||
major_damage += "</span>\n"
|
||||
if(!minor_damage)
|
||||
minor_damage = "\t<span class='info'>Mildly Damaged Organs: </span>\n"
|
||||
else
|
||||
minor_damage += "</span>\n"
|
||||
msg += "[minor_damage]"
|
||||
msg += "[major_damage]"
|
||||
msg += "[max_damage]"
|
||||
|
||||
|
||||
// Species and body temperature
|
||||
var/mob/living/carbon/human/H = M //Start to use human only stuff here
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/species/S = H.dna.species
|
||||
var/mutant = FALSE
|
||||
if (H.dna.check_mutation(HULK))
|
||||
@@ -382,7 +378,7 @@ SLIME SCANNER
|
||||
else if (S.mutantstomach != initial(S.mutantstomach))
|
||||
mutant = TRUE
|
||||
|
||||
msg += "\t<span class='info'>Reported Species: [H.dna.custom_species ? H.dna.custom_species : S.name]</span>\n"
|
||||
msg += "\t<span class='info'>Reported Species: [H.dna.custom_species ? H.dna.custom_species : S.name]</span>\n"
|
||||
msg += "\t<span class='info'>Base Species: [S.name]</span>\n"
|
||||
if(mutant)
|
||||
msg += "\t<span class='info'>Subject has mutations present.</span>\n"
|
||||
@@ -393,7 +389,15 @@ SLIME SCANNER
|
||||
msg += "<span class='info'>Time of Death:</span> [M.tod]\n"
|
||||
var/tdelta = round(world.time - M.timeofdeath)
|
||||
if(tdelta < (DEFIB_TIME_LIMIT * 10))
|
||||
msg += "<span class='danger'>Subject died [DisplayTimeText(tdelta)] ago, defibrillation may be possible!</span>\n"
|
||||
if(heart_ded)
|
||||
msg += "<span class='danger'>Subject died [DisplayTimeText(tdelta)] ago, heart requires surgical intervention for defibrillation.</span>"
|
||||
else
|
||||
msg += "<span class='danger'>Subject died [DisplayTimeText(tdelta)] ago, defibrillation may be possible!</span>"
|
||||
if(advanced)
|
||||
if(H.get_ghost() || H.key || H.client)//Since it can last a while.
|
||||
msg += "<span class='danger'> Intervention recommended.</span>\n"
|
||||
else
|
||||
msg += "\n"
|
||||
|
||||
for(var/thing in M.diseases)
|
||||
var/datum/disease/D = thing
|
||||
@@ -406,7 +410,6 @@ SLIME SCANNER
|
||||
var/blood_id = C.get_blood_id()
|
||||
if(blood_id)
|
||||
if(ishuman(C))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(H.bleed_rate)
|
||||
msg += "<span class='danger'>Subject is bleeding!</span>\n"
|
||||
var/blood_percent = round((C.blood_volume / (BLOOD_VOLUME_NORMAL * C.blood_ratio))*100)
|
||||
@@ -431,7 +434,7 @@ SLIME SCANNER
|
||||
if(cyberimp_detect)
|
||||
msg += "<span class='notice'>Detected cybernetic modifications:</span>\n"
|
||||
msg += "<span class='notice'>[cyberimp_detect]</span>\n"
|
||||
msg += "*---------*</span>"
|
||||
msg += "<span class='notice'>*---------*</span>"
|
||||
to_chat(user, msg)
|
||||
SEND_SIGNAL(M, COMSIG_NANITE_SCAN, user, FALSE)
|
||||
|
||||
@@ -523,7 +526,7 @@ SLIME SCANNER
|
||||
|
||||
/obj/item/analyzer/examine(mob/user)
|
||||
. = ..()
|
||||
to_chat(user, "<span class='notice'>Alt-click [src] to activate the barometer function.</span>")
|
||||
. += "<span class='notice'>Alt-click [src] to activate the barometer function.</span>"
|
||||
|
||||
/obj/item/analyzer/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins to analyze [user.p_them()]self with [src]! The display shows that [user.p_theyre()] dead!</span>")
|
||||
|
||||
@@ -29,8 +29,8 @@
|
||||
|
||||
|
||||
/obj/item/taperecorder/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "The wire panel is [open_panel ? "opened" : "closed"].")
|
||||
. = ..()
|
||||
. += "The wire panel is [open_panel ? "opened" : "closed"]."
|
||||
|
||||
|
||||
/obj/item/taperecorder/attackby(obj/item/I, mob/user, params)
|
||||
|
||||
@@ -106,11 +106,11 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/extinguisher/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "The safety is [safety ? "on" : "off"].")
|
||||
. = ..()
|
||||
. += "The safety is [safety ? "on" : "off"]."
|
||||
|
||||
if(reagents.total_volume)
|
||||
to_chat(user, "<span class='notice'>You can loose its <b>screws</b> to empty it.</span>")
|
||||
. += "<span class='notice'>You can loose its <b>screws</b> to empty it.</span>"
|
||||
|
||||
/obj/item/extinguisher/proc/AttemptRefill(atom/target, mob/user)
|
||||
if(istype(target, tanktype) && target.Adjacent(user))
|
||||
|
||||
@@ -145,9 +145,9 @@
|
||||
update_icon()
|
||||
|
||||
/obj/item/flamethrower/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(ptank)
|
||||
to_chat(user, "<span class='notice'>\The [src] has \a [ptank] attached. Alt-click to remove it.</span>")
|
||||
. += "<span class='notice'>\The [src] has \a [ptank] attached. Alt-click to remove it.</span>"
|
||||
|
||||
/obj/item/flamethrower/proc/toggle_igniter(mob/user)
|
||||
if(!ptank)
|
||||
|
||||
@@ -27,19 +27,19 @@
|
||||
|
||||
/obj/item/grenade/chem_grenade/examine(mob/user)
|
||||
display_timer = (stage == READY && !nadeassembly) //show/hide the timer based on assembly state
|
||||
..()
|
||||
. = ..()
|
||||
if(user.can_see_reagents())
|
||||
var/count = 0
|
||||
if(beakers.len)
|
||||
to_chat(user, "<span class='notice'>You scan the grenade and detect the following reagents:</span>")
|
||||
. += "<span class='notice'>You scan the grenade and detect the following reagents:</span>"
|
||||
for(var/obj/item/reagent_containers/glass/G in beakers)
|
||||
var/textcount = thtotext(++count)
|
||||
for(var/datum/reagent/R in G.reagents.reagent_list)
|
||||
to_chat(user, "<span class='notice'>[R.volume] units of [R.name] in the [textcount] beaker.</span>")
|
||||
. += "<span class='notice'>[R.volume] units of [R.name] in the [textcount] beaker.</span>"
|
||||
if(beakers.len == 1)
|
||||
to_chat(user, "<span class='notice'>You detect no second beaker in the grenade.</span>")
|
||||
. += "<span class='notice'>You detect no second beaker in the grenade.</span>"
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You scan the grenade, but detect nothing.</span>")
|
||||
. += "<span class='notice'>You scan the grenade, but detect nothing.</span>"
|
||||
|
||||
|
||||
/obj/item/grenade/chem_grenade/attack_self(mob/user)
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
/obj/item/grenade/flashbang/proc/bang(turf/T , mob/living/M)
|
||||
if(M.stat == DEAD) //They're dead!
|
||||
return
|
||||
M.show_message("<span class='warning'>BANG</span>", 2)
|
||||
M.show_message("<span class='warning'>BANG</span>", MSG_AUDIBLE)
|
||||
var/distance = max(0,get_dist(get_turf(src),T))
|
||||
|
||||
//Flash
|
||||
|
||||
@@ -56,5 +56,5 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/grenade/iedcasing/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "You can't tell when it will explode!")
|
||||
. = ..()
|
||||
. += "You can't tell when it will explode!"
|
||||
|
||||
@@ -47,12 +47,12 @@
|
||||
|
||||
|
||||
/obj/item/grenade/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(display_timer)
|
||||
if(det_time > 1)
|
||||
to_chat(user, "The timer is set to [DisplayTimeText(det_time)].")
|
||||
. += "The timer is set to [DisplayTimeText(det_time)]."
|
||||
else
|
||||
to_chat(user, "\The [src] is set for instant detonation.")
|
||||
. += "\The [src] is set for instant detonation."
|
||||
|
||||
|
||||
/obj/item/grenade/attack_self(mob/user)
|
||||
|
||||
@@ -52,23 +52,23 @@
|
||||
return
|
||||
|
||||
/obj/item/his_grace/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(awakened)
|
||||
switch(bloodthirst)
|
||||
if(HIS_GRACE_SATIATED to HIS_GRACE_PECKISH)
|
||||
to_chat(user, "<span class='his_grace'>[src] isn't very hungry. Not yet.</span>")
|
||||
. += "<span class='his_grace'>[src] isn't very hungry. Not yet.</span>"
|
||||
if(HIS_GRACE_PECKISH to HIS_GRACE_HUNGRY)
|
||||
to_chat(user, "<span class='his_grace'>[src] would like a snack.</span>")
|
||||
. += "<span class='his_grace'>[src] would like a snack.</span>"
|
||||
if(HIS_GRACE_HUNGRY to HIS_GRACE_FAMISHED)
|
||||
to_chat(user, "<span class='his_grace'>[src] is quite hungry now.</span>")
|
||||
. += "<span class='his_grace'>[src] is quite hungry now.</span>"
|
||||
if(HIS_GRACE_FAMISHED to HIS_GRACE_STARVING)
|
||||
to_chat(user, "<span class='his_grace'>[src] is openly salivating at the sight of you. Be careful.</span>")
|
||||
. += "<span class='his_grace'>[src] is openly salivating at the sight of you. Be careful.</span>"
|
||||
if(HIS_GRACE_STARVING to HIS_GRACE_CONSUME_OWNER)
|
||||
to_chat(user, "<span class='his_grace bold'>You walk a fine line. [src] is very close to devouring you.</span>")
|
||||
. += "<span class='his_grace bold'>You walk a fine line. [src] is very close to devouring you.</span>"
|
||||
if(HIS_GRACE_CONSUME_OWNER to HIS_GRACE_FALL_ASLEEP)
|
||||
to_chat(user, "<span class='his_grace bold'>[src] is shaking violently and staring directly at you.</span>")
|
||||
. += "<span class='his_grace bold'>[src] is shaking violently and staring directly at you.</span>"
|
||||
else
|
||||
to_chat(user, "<span class='his_grace'>[src] is latched closed.</span>")
|
||||
. += "<span class='his_grace'>[src] is latched closed.</span>"
|
||||
|
||||
/obj/item/his_grace/relaymove(mob/living/user) //Allows changelings, etc. to climb out of Him after they revive, provided He isn't active
|
||||
if(!awakened)
|
||||
|
||||
@@ -81,9 +81,9 @@
|
||||
/obj/item/hot_potato/examine(mob/user)
|
||||
. = ..()
|
||||
if(active)
|
||||
to_chat(user, "<span class='warning'>[src] is flashing red-hot! You should probably get rid of it!</span>")
|
||||
. += "<span class='warning'>[src] is flashing red-hot! You should probably get rid of it!</span>"
|
||||
if(show_timer)
|
||||
to_chat(user, "<span class='warning'>[src]'s timer looks to be at [DisplayTimeText(activation_time - world.time)]!</span>")
|
||||
. += "<span class='warning'>[src]'s timer looks to be at [DisplayTimeText(activation_time - world.time)]!</span>"
|
||||
|
||||
/obj/item/hot_potato/equipped(mob/user)
|
||||
. = ..()
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/implant/proc/get_data()
|
||||
return "No information available"
|
||||
return "No information available about this implant."
|
||||
|
||||
/obj/item/implant/dropped(mob/user)
|
||||
. = 1
|
||||
|
||||
@@ -13,34 +13,31 @@
|
||||
var/broadcasting = null
|
||||
var/listening = 1
|
||||
|
||||
/obj/item/implantpad/examine(mob/user)
|
||||
. = ..()
|
||||
if(case)
|
||||
. += "<span class='notice'>Alt-click [src] to remove the inserted implant case.</span>"
|
||||
|
||||
/obj/item/implantpad/update_icon()
|
||||
if(case)
|
||||
icon_state = "implantpad-1"
|
||||
else
|
||||
icon_state = "implantpad-0"
|
||||
icon_state = "implantpad-[case ? TRUE : FALSE]"
|
||||
|
||||
|
||||
/obj/item/implantpad/attack_hand(mob/user)
|
||||
/obj/item/implantpad/AltClick(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(case && user.is_holding(src))
|
||||
user.put_in_active_hand(case)
|
||||
if(case && user.can_hold_items() && user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
||||
user.put_in_hands(case)
|
||||
|
||||
case.add_fingerprint(user)
|
||||
case = null
|
||||
|
||||
add_fingerprint(user)
|
||||
update_icon()
|
||||
return TRUE
|
||||
|
||||
/obj/item/implantpad/attackby(obj/item/implantcase/C, mob/user, params)
|
||||
if(istype(C, /obj/item/implantcase))
|
||||
if(!case)
|
||||
if(!user.transferItemToLoc(C, src))
|
||||
return
|
||||
if(istype(C))
|
||||
if(!case && user.transferItemToLoc(C, src))
|
||||
case = C
|
||||
update_icon()
|
||||
update_icon()
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -155,13 +155,13 @@
|
||||
|
||||
|
||||
/obj/item/inducer/examine(mob/living/M)
|
||||
..()
|
||||
. = ..()
|
||||
if(cell)
|
||||
to_chat(M, "<span class='notice'>Its display shows: [DisplayEnergy(cell.charge)].</span>")
|
||||
. += "<span class='notice'>Its display shows: [DisplayEnergy(cell.charge)].</span>"
|
||||
else
|
||||
to_chat(M,"<span class='notice'>Its display is dark.</span>")
|
||||
. += "<span class='notice'>Its display is dark.</span>"
|
||||
if(opened)
|
||||
to_chat(M,"<span class='notice'>Its battery compartment is open.</span>")
|
||||
. += "<span class='notice'>Its battery compartment is open.</span>"
|
||||
|
||||
/obj/item/inducer/update_icon()
|
||||
cut_overlays()
|
||||
@@ -205,3 +205,7 @@
|
||||
/obj/item/inducer/sci/combat/Initialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/inducer/sci/supply
|
||||
opened = FALSE
|
||||
cell_type = /obj/item/stock_parts/cell/inducer_supply
|
||||
|
||||
@@ -334,8 +334,8 @@
|
||||
update_light()
|
||||
|
||||
/obj/item/melee/transforming/energy/sword/cx/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
|
||||
. = ..()
|
||||
. += "<span class='notice'>Alt-click to recolor it.</span>"
|
||||
|
||||
/obj/item/melee/transforming/energy/sword/cx/worn_overlays(isinhands, icon_file)
|
||||
. = ..()
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
else
|
||||
if(attack_verb_off.len)
|
||||
attack_verb = attack_verb_off
|
||||
if(get_sharpness())
|
||||
AddComponent(/datum/component/butchering, 50, 100, 0, hitsound, !active)
|
||||
if(sharpness)
|
||||
AddComponent(/datum/component/butchering, 50, 100, 0, hitsound)
|
||||
|
||||
/obj/item/melee/transforming/attack_self(mob/living/carbon/user)
|
||||
if(transform_weapon(user))
|
||||
@@ -65,13 +65,6 @@
|
||||
icon_state = initial(icon_state)
|
||||
w_class = initial(w_class)
|
||||
total_mass = initial(total_mass)
|
||||
if(get_sharpness())
|
||||
var/datum/component/butchering/BT = LoadComponent(/datum/component/butchering)
|
||||
BT.butchering_enabled = TRUE
|
||||
else
|
||||
var/datum/component/butchering/BT = GetComponent(/datum/component/butchering)
|
||||
if(BT)
|
||||
BT.butchering_enabled = FALSE
|
||||
transform_messages(user, supress_message_text)
|
||||
add_fingerprint(user)
|
||||
return TRUE
|
||||
|
||||
@@ -119,8 +119,8 @@
|
||||
reagents.add_reagent(refill_reagent, refill_rate)
|
||||
|
||||
/obj/item/mop/advanced/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>The condenser switch is set to <b>[refill_enabled ? "ON" : "OFF"]</b>.</span>")
|
||||
. = ..()
|
||||
. += "<span class='notice'>The condenser switch is set to <b>[refill_enabled ? "ON" : "OFF"]</b>.</span>"
|
||||
|
||||
/obj/item/mop/advanced/Destroy()
|
||||
if(refill_enabled)
|
||||
|
||||
@@ -43,17 +43,17 @@
|
||||
..()
|
||||
|
||||
/obj/item/pet_carrier/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(occupants.len)
|
||||
for(var/V in occupants)
|
||||
var/mob/living/L = V
|
||||
to_chat(user, "<span class='notice'>It has [L] inside.</span>")
|
||||
. += "<span class='notice'>It has [L] inside.</span>"
|
||||
else
|
||||
to_chat(user, "<span class='notice'>It has nothing inside.</span>")
|
||||
. += "<span class='notice'>It has nothing inside.</span>"
|
||||
if(user.canUseTopic(src))
|
||||
to_chat(user, "<span class='notice'>Activate it in your hand to [open ? "close" : "open"] its door.</span>")
|
||||
. += "<span class='notice'>Activate it in your hand to [open ? "close" : "open"] its door.</span>"
|
||||
if(!open)
|
||||
to_chat(user, "<span class='notice'>Alt-click to [locked ? "unlock" : "lock"] its door.</span>")
|
||||
. += "<span class='notice'>Alt-click to [locked ? "unlock" : "lock"] its door.</span>"
|
||||
|
||||
/obj/item/pet_carrier/attack_self(mob/living/user)
|
||||
if(open)
|
||||
@@ -151,12 +151,13 @@
|
||||
add_overlay("[locked ? "" : "un"]locked")
|
||||
|
||||
/obj/item/pet_carrier/MouseDrop(atom/over_atom)
|
||||
. = ..()
|
||||
if(isopenturf(over_atom) && usr.canUseTopic(src, BE_CLOSE, ismonkey(usr)) && usr.Adjacent(over_atom) && open && occupants.len)
|
||||
usr.visible_message("<span class='notice'>[usr] unloads [src].</span>", \
|
||||
"<span class='notice'>You unload [src] onto [over_atom].</span>")
|
||||
for(var/V in occupants)
|
||||
remove_occupant(V, over_atom)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/pet_carrier/proc/load_occupant(mob/living/user, mob/living/target)
|
||||
if(pet_carrier_full(src))
|
||||
|
||||
@@ -113,8 +113,10 @@
|
||||
return
|
||||
log_game("[key_name(user)] activated a hidden grenade in [src].")
|
||||
grenade.preprime(user, msg = FALSE, volume = 10)
|
||||
SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plushpet", /datum/mood_event/plushpet)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You try to pet [src], but it has no stuffing. Aww...</span>")
|
||||
SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plush_nostuffing", /datum/mood_event/plush_nostuffing)
|
||||
|
||||
/obj/item/toy/plush/attackby(obj/item/I, mob/living/user, params)
|
||||
if(I.get_sharpness())
|
||||
@@ -125,6 +127,7 @@
|
||||
user.visible_message("<span class='notice'>[user] tears out the stuffing from [src]!</span>", "<span class='notice'>You rip a bunch of the stuffing from [src]. Murderer.</span>")
|
||||
I.play_tool_sound(src)
|
||||
stuffed = FALSE
|
||||
SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plushjack", /datum/mood_event/plushjack)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You remove the grenade from [src].</span>")
|
||||
user.put_in_hands(grenade)
|
||||
@@ -147,6 +150,7 @@
|
||||
return
|
||||
if(istype(I, /obj/item/toy/plush))
|
||||
love(I, user)
|
||||
SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plushplay", /datum/mood_event/plushplay)
|
||||
return
|
||||
return ..()
|
||||
|
||||
@@ -158,7 +162,7 @@
|
||||
|
||||
//we are not catholic
|
||||
if(young == TRUE || Kisser.young == TRUE)
|
||||
user.show_message("<span class='notice'>[src] plays tag with [Kisser].</span>", 1,
|
||||
user.show_message("<span class='notice'>[src] plays tag with [Kisser].</span>", MSG_VISUAL,
|
||||
"<span class='notice'>They're happy.</span>", 0)
|
||||
Kisser.cheer_up()
|
||||
cheer_up()
|
||||
@@ -166,10 +170,10 @@
|
||||
//never again
|
||||
else if(Kisser in scorned)
|
||||
//message, visible, alternate message, neither visible nor audible
|
||||
user.show_message("<span class='notice'>[src] rejects the advances of [Kisser]!</span>", 1,
|
||||
user.show_message("<span class='notice'>[src] rejects the advances of [Kisser]!</span>", MSG_VISUAL,
|
||||
"<span class='notice'>That didn't feel like it worked.</span>", 0)
|
||||
else if(src in Kisser.scorned)
|
||||
user.show_message("<span class='notice'>[Kisser] realises who [src] is and turns away.</span>", 1,
|
||||
user.show_message("<span class='notice'>[Kisser] realises who [src] is and turns away.</span>", MSG_VISUAL,
|
||||
"<span class='notice'>That didn't feel like it worked.</span>", 0)
|
||||
|
||||
//first comes love
|
||||
@@ -190,7 +194,7 @@
|
||||
new_lover(Kisser)
|
||||
Kisser.new_lover(src)
|
||||
else
|
||||
user.show_message("<span class='notice'>[src] rejects the advances of [Kisser], maybe next time?</span>", 1,
|
||||
user.show_message("<span class='notice'>[src] rejects the advances of [Kisser], maybe next time?</span>", MSG_VISUAL,
|
||||
"<span class='notice'>That didn't feel like it worked, this time.</span>", 0)
|
||||
|
||||
//then comes marriage
|
||||
@@ -1014,3 +1018,9 @@
|
||||
icon_state = "maya"
|
||||
item_state = "maya"
|
||||
attack_verb = list("nuked", "arrested", "harmbatonned")
|
||||
|
||||
/obj/item/toy/plush/catgirl/marisa
|
||||
desc = "An adorable stuffed toy that resembles a crew member, or maybe a witch. Having it makes you feel you can win."
|
||||
icon_state = "marisa"
|
||||
item_state = "marisa"
|
||||
attack_verb = list("blasted", "sparked", "dazzled")
|
||||
|
||||
@@ -55,17 +55,15 @@
|
||||
return automatic
|
||||
|
||||
/obj/item/pneumatic_cannon/examine(mob/user)
|
||||
..()
|
||||
var/list/out = list()
|
||||
. = ..()
|
||||
if(!in_range(user, src))
|
||||
out += "<span class='notice'>You'll need to get closer to see any more.</span>"
|
||||
. += "<span class='notice'>You'll need to get closer to see any more.</span>"
|
||||
return
|
||||
for(var/obj/item/I in loadedItems)
|
||||
out += "<span class='info'>[icon2html(I, user)] It has \a [I] loaded.</span>"
|
||||
. += "<span class='info'>[icon2html(I, user)] It has \a [I] loaded.</span>"
|
||||
CHECK_TICK
|
||||
if(tank)
|
||||
out += "<span class='notice'>[icon2html(tank, user)] It has \a [tank] mounted onto it.</span>"
|
||||
to_chat(user, out.Join("<br>"))
|
||||
. += "<span class='notice'>[icon2html(tank, user)] It has \a [tank] mounted onto it.</span>"
|
||||
|
||||
/obj/item/pneumatic_cannon/attackby(obj/item/W, mob/user, params)
|
||||
if(user.a_intent == INTENT_HARM)
|
||||
|
||||
@@ -20,12 +20,12 @@
|
||||
|
||||
|
||||
/obj/item/melee/powerfist/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(!in_range(user, src))
|
||||
to_chat(user, "<span class='notice'>You'll need to get closer to see any more.</span>")
|
||||
. += "<span class='notice'>You'll need to get closer to see any more.</span>"
|
||||
return
|
||||
if(tank)
|
||||
to_chat(user, "<span class='notice'>[icon2html(tank, user)] It has \a [tank] mounted onto it.</span>")
|
||||
. += "<span class='notice'>[icon2html(tank, user)] It has \a [tank] mounted onto it.</span>"
|
||||
|
||||
|
||||
/obj/item/melee/powerfist/attackby(obj/item/W, mob/user, params)
|
||||
|
||||
@@ -16,9 +16,9 @@
|
||||
var/warcry
|
||||
|
||||
/obj/item/banner/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(inspiration_available)
|
||||
to_chat(user, "<span class='notice'>Activate it in your hand to inspire nearby allies of this banner's allegiance!</span>")
|
||||
. += "<span class='notice'>Activate it in your hand to inspire nearby allies of this banner's allegiance!</span>"
|
||||
|
||||
/obj/item/banner/attack_self(mob/living/carbon/human/user)
|
||||
if(!inspiration_available)
|
||||
|
||||
@@ -203,7 +203,7 @@
|
||||
desc = "A trash bag of holding replacement for the janiborg's standard trash bag."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
module_type = list(/obj/item/robot_module/janitor, /obj/item/robot_module/scrubpup)
|
||||
module_type = list(/obj/item/robot_module/butler)
|
||||
|
||||
/obj/item/borg/upgrade/tboh/action(mob/living/silicon/robot/R)
|
||||
. = ..()
|
||||
@@ -230,7 +230,7 @@
|
||||
desc = "An advanced mop replacement for the janiborg's standard mop."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
module_type = list(/obj/item/robot_module/janitor, /obj/item/robot_module/scrubpup)
|
||||
module_type = list(/obj/item/robot_module/butler)
|
||||
|
||||
/obj/item/borg/upgrade/amop/action(mob/living/silicon/robot/R)
|
||||
. = ..()
|
||||
@@ -522,8 +522,7 @@
|
||||
module_type = list(
|
||||
/obj/item/robot_module/medical,
|
||||
/obj/item/robot_module/syndicate_medical,
|
||||
/obj/item/robot_module/medihound,
|
||||
/obj/item/robot_module/borgi)
|
||||
/obj/item/robot_module/medihound)
|
||||
|
||||
/obj/item/borg/upgrade/advhealth/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
@@ -607,7 +606,7 @@
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "borg_BS_RPED"
|
||||
require_module = TRUE
|
||||
module_type = list(/obj/item/robot_module/engineering)
|
||||
module_type = list(/obj/item/robot_module/engineering, /obj/item/robot_module/saboteur)
|
||||
|
||||
/obj/item/borg/upgrade/rped/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
|
||||
@@ -39,6 +39,9 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
|
||||
/obj/item/stack/sheet/glass/fifty
|
||||
amount = 50
|
||||
|
||||
/obj/item/stack/sheet/glass/five
|
||||
amount = 5
|
||||
|
||||
/obj/item/stack/sheet/glass/Initialize(mapload, new_amount, merge = TRUE)
|
||||
recipes = GLOB.glass_recipes
|
||||
return ..()
|
||||
|
||||
@@ -55,6 +55,9 @@ GLOBAL_LIST_INIT(sandstone_recipes, list ( \
|
||||
/obj/item/stack/sheet/mineral/sandstone/thirty
|
||||
amount = 30
|
||||
|
||||
/obj/item/stack/sheet/mineral/sandstone/twelve
|
||||
amount = 12
|
||||
|
||||
/*
|
||||
* Sandbags
|
||||
*/
|
||||
|
||||
@@ -191,6 +191,12 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
|
||||
new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20), \
|
||||
new/datum/stack_recipe("wood table frame", /obj/structure/table_frame/wood, 2, time = 10), \
|
||||
null, \
|
||||
new/datum/stack_recipe_list("pews", list(
|
||||
new /datum/stack_recipe("pew (middle)", /obj/structure/chair/pew, 3, one_per_turf = TRUE, on_floor = TRUE),\
|
||||
new /datum/stack_recipe("pew (left)", /obj/structure/chair/pew/left, 3, one_per_turf = TRUE, on_floor = TRUE),\
|
||||
new /datum/stack_recipe("pew (right)", /obj/structure/chair/pew/right, 3, one_per_turf = TRUE, on_floor = TRUE),\
|
||||
)),
|
||||
null, \
|
||||
new/datum/stack_recipe("rifle stock", /obj/item/weaponcrafting/stock, 10, time = 40), \
|
||||
new/datum/stack_recipe("rolling pin", /obj/item/kitchen/rollingpin, 2, time = 30), \
|
||||
new/datum/stack_recipe("wooden buckler", /obj/item/shield/riot/buckler, 20, time = 40), \
|
||||
@@ -641,6 +647,7 @@ GLOBAL_LIST_INIT(plastic_recipes, list(
|
||||
new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 5, one_per_turf = TRUE, on_floor = TRUE, time = 40), \
|
||||
new /datum/stack_recipe("water bottle", /obj/item/reagent_containers/glass/beaker/waterbottle/empty), \
|
||||
new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/glass/beaker/waterbottle/large/empty,3), \
|
||||
new /datum/stack_recipe("large trash cart", /obj/structure/closet/crate/bin,50),\
|
||||
new /datum/stack_recipe("wet floor sign", /obj/item/caution, 2)))
|
||||
|
||||
/obj/item/stack/sheet/plastic
|
||||
|
||||
@@ -76,23 +76,23 @@
|
||||
. = ..()
|
||||
|
||||
/obj/item/stack/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if (is_cyborg)
|
||||
if(singular_name)
|
||||
to_chat(user, "There is enough energy for [get_amount()] [singular_name]\s.")
|
||||
. += "There is enough energy for [get_amount()] [singular_name]\s."
|
||||
else
|
||||
to_chat(user, "There is enough energy for [get_amount()].")
|
||||
. += "There is enough energy for [get_amount()]."
|
||||
return
|
||||
if(singular_name)
|
||||
if(get_amount()>1)
|
||||
to_chat(user, "There are [get_amount()] [singular_name]\s in the stack.")
|
||||
. += "There are [get_amount()] [singular_name]\s in the stack."
|
||||
else
|
||||
to_chat(user, "There is [get_amount()] [singular_name] in the stack.")
|
||||
. += "There is [get_amount()] [singular_name] in the stack."
|
||||
else if(get_amount()>1)
|
||||
to_chat(user, "There are [get_amount()] in the stack.")
|
||||
. += "There are [get_amount()] in the stack."
|
||||
else
|
||||
to_chat(user, "There is [get_amount()] in the stack.")
|
||||
to_chat(user, "<span class='notice'>Alt-click to take a custom amount.</span>")
|
||||
. += "There is [get_amount()] in the stack."
|
||||
. += "<span class='notice'>Alt-click to take a custom amount.</span>"
|
||||
|
||||
/obj/item/stack/proc/get_amount()
|
||||
if(is_cyborg)
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.allow_big_nesting = TRUE
|
||||
STR.max_w_class = WEIGHT_CLASS_GIGANTIC
|
||||
STR.max_w_class = WEIGHT_CLASS_BULKY
|
||||
STR.max_combined_w_class = 35
|
||||
|
||||
/obj/item/storage/backpack/holding/suicide_act(mob/living/user)
|
||||
@@ -253,7 +253,7 @@
|
||||
|
||||
/obj/item/storage/backpack/satchel/bone
|
||||
name = "bone satchel"
|
||||
desc = "A bone satchel fashend with watcher wings and large bones from goliath. Can be worn on the belt."
|
||||
desc = "A grotesque satchel made of sinews and bones."
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
icon_state = "goliath_saddle"
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
|
||||
@@ -575,7 +575,9 @@
|
||||
/obj/item/clothing/gloves,
|
||||
/obj/item/melee/flyswatter,
|
||||
/obj/item/paint/paint_remover,
|
||||
/obj/item/assembly/mousetrap
|
||||
/obj/item/assembly/mousetrap,
|
||||
/obj/item/screwdriver,
|
||||
/obj/item/stack/cable_coil
|
||||
))
|
||||
|
||||
/obj/item/storage/belt/bandolier
|
||||
@@ -757,9 +759,9 @@
|
||||
STR.can_hold = typecacheof(fitting_swords)
|
||||
|
||||
/obj/item/storage/belt/sabre/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(length(contents))
|
||||
to_chat(user, "<span class='notice'>Alt-click it to quickly draw the blade.</span>")
|
||||
. += "<span class='notice'>Alt-click it to quickly draw the blade.</span>"
|
||||
|
||||
/obj/item/storage/belt/sabre/AltClick(mob/user)
|
||||
if(!iscarbon(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
|
||||
|
||||
@@ -105,25 +105,37 @@
|
||||
// Ordinary survival box
|
||||
/obj/item/storage/box/survival/PopulateContents()
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
|
||||
if(!isplasmaman(loc))
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
else
|
||||
new /obj/item/tank/internals/plasmaman/belt(src)
|
||||
|
||||
/obj/item/storage/box/survival/radio/PopulateContents()
|
||||
..() // we want the survival stuff too.
|
||||
new /obj/item/radio/off(src)
|
||||
|
||||
/obj/item/storage/box/survival_mining/PopulateContents()
|
||||
new /obj/item/clothing/mask/gas/explorer(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen/engi(src)
|
||||
new /obj/item/crowbar/red(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
|
||||
if(!isplasmaman(loc))
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
else
|
||||
new /obj/item/tank/internals/plasmaman/belt(src)
|
||||
|
||||
// Engineer survival box
|
||||
/obj/item/storage/box/engineer/PopulateContents()
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen/engi(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
|
||||
if(!isplasmaman(loc))
|
||||
new /obj/item/tank/internals/emergency_oxygen/engi(src)
|
||||
else
|
||||
new /obj/item/tank/internals/plasmaman/belt(src)
|
||||
|
||||
/obj/item/storage/box/engineer/radio/PopulateContents()
|
||||
..() // we want the regular items too.
|
||||
new /obj/item/radio/off(src)
|
||||
@@ -131,14 +143,22 @@
|
||||
// Syndie survival box
|
||||
/obj/item/storage/box/syndie/PopulateContents()
|
||||
new /obj/item/clothing/mask/gas/syndicate(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen/engi(src)
|
||||
|
||||
if(!isplasmaman(loc))
|
||||
new /obj/item/tank/internals/emergency_oxygen/engi(src)
|
||||
else
|
||||
new /obj/item/tank/internals/plasmaman/belt(src)
|
||||
|
||||
// Security survival box
|
||||
/obj/item/storage/box/security/PopulateContents()
|
||||
new /obj/item/clothing/mask/gas/sechailer(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
|
||||
if(!isplasmaman(loc))
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
else
|
||||
new /obj/item/tank/internals/plasmaman/belt(src)
|
||||
|
||||
/obj/item/storage/box/security/radio/PopulateContents()
|
||||
..() // we want the regular stuff too
|
||||
new /obj/item/radio/off(src)
|
||||
@@ -679,6 +699,7 @@
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
playsound(loc, "rustle", 50, 1, -5)
|
||||
user.visible_message("<span class='notice'>[user] hugs \the [src].</span>","<span class='notice'>You hug \the [src].</span>")
|
||||
SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"hugbox", /datum/mood_event/hugbox)
|
||||
|
||||
/////clown box & honkbot assembly
|
||||
/obj/item/storage/box/clown
|
||||
@@ -707,11 +728,16 @@
|
||||
new /obj/item/stack/medical/ointment(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
|
||||
// Clown survival box
|
||||
/obj/item/storage/box/hug/survival/PopulateContents()
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
|
||||
if(!isplasmaman(loc))
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
else
|
||||
new /obj/item/tank/internals/plasmaman/belt(src)
|
||||
|
||||
/obj/item/storage/box/rubbershot
|
||||
name = "box of rubber shots"
|
||||
desc = "A box full of rubber shots, designed for riot shotguns."
|
||||
@@ -858,12 +884,12 @@
|
||||
else if(W.get_sharpness())
|
||||
if(!contents.len)
|
||||
if(item_state == "paperbag_None")
|
||||
user.show_message("<span class='notice'>You cut eyeholes into [src].</span>", 1)
|
||||
user.show_message("<span class='notice'>You cut eyeholes into [src].</span>", MSG_VISUAL)
|
||||
new /obj/item/clothing/head/papersack(user.loc)
|
||||
qdel(src)
|
||||
return 0
|
||||
else if(item_state == "paperbag_SmileyFace")
|
||||
user.show_message("<span class='notice'>You cut eyeholes into [src] and modify the design.</span>", 1)
|
||||
user.show_message("<span class='notice'>You cut eyeholes into [src] and modify the design.</span>", MSG_VISUAL)
|
||||
new /obj/item/clothing/head/papersack/smiley(user.loc)
|
||||
qdel(src)
|
||||
return 0
|
||||
@@ -875,7 +901,7 @@
|
||||
#undef HEART
|
||||
#undef SMILEY
|
||||
|
||||
/obj/item/storage/box/ingredients //This box is for the randomely chosen version the chef spawns with, it shouldn't actually exist.
|
||||
/obj/item/storage/box/ingredients //This box is for the randomly chosen version the chef spawns with, it shouldn't actually exist.
|
||||
name = "ingredients box"
|
||||
illustration = "fruit"
|
||||
var/theme_name
|
||||
|
||||
@@ -36,12 +36,12 @@
|
||||
icon_state = "[icon_type]box"
|
||||
|
||||
/obj/item/storage/fancy/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(fancy_open)
|
||||
if(length(contents) == 1)
|
||||
to_chat(user, "There is one [icon_type] left.")
|
||||
. += "There is one [icon_type] left."
|
||||
else
|
||||
to_chat(user, "There are [contents.len <= 0 ? "no" : "[contents.len]"] [icon_type]s left.")
|
||||
. += "There are [contents.len <= 0 ? "no" : "[contents.len]"] [icon_type]s left."
|
||||
|
||||
/obj/item/storage/fancy/attack_self(mob/user)
|
||||
fancy_open = !fancy_open
|
||||
@@ -143,8 +143,8 @@
|
||||
STR.can_hold = typecacheof(list(/obj/item/clothing/mask/cigarette, /obj/item/lighter))
|
||||
|
||||
/obj/item/storage/fancy/cigarettes/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>Alt-click to extract contents.</span>")
|
||||
. = ..()
|
||||
. += "<span class='notice'>Alt-click to extract contents.</span>"
|
||||
|
||||
/obj/item/storage/fancy/cigarettes/AltClick(mob/living/carbon/user)
|
||||
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
|
||||
|
||||
@@ -18,6 +18,12 @@
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
var/empty = FALSE
|
||||
var/list/possible_icons = list("firstaid","firstaid2","firstaid3","firstaid4")
|
||||
|
||||
/obj/item/storage/firstaid/Initialize(mapload)
|
||||
. = ..()
|
||||
if(LAZYLEN(possible_icons))
|
||||
icon_state = pick(possible_icons)
|
||||
|
||||
/obj/item/storage/firstaid/regular
|
||||
icon_state = "firstaid"
|
||||
@@ -56,17 +62,14 @@
|
||||
/obj/item/storage/firstaid/fire
|
||||
name = "burn treatment kit"
|
||||
desc = "A specialized medical kit for when the toxins lab <i>-spontaneously-</i> burns down."
|
||||
icon_state = "ointment"
|
||||
icon_state = "burn"
|
||||
item_state = "firstaid-ointment"
|
||||
possible_icons = list("burn","burn2","burn3","burn4")
|
||||
|
||||
/obj/item/storage/firstaid/fire/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins rubbing \the [src] against [user.p_them()]self! It looks like [user.p_theyre()] trying to start a fire!</span>")
|
||||
return FIRELOSS
|
||||
|
||||
/obj/item/storage/firstaid/fire/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = pick("ointment","firefirstaid")
|
||||
|
||||
/obj/item/storage/firstaid/fire/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
@@ -80,17 +83,14 @@
|
||||
/obj/item/storage/firstaid/toxin
|
||||
name = "toxin treatment kit"
|
||||
desc = "Used to treat toxic blood content and radiation poisoning."
|
||||
icon_state = "antitoxin"
|
||||
icon_state = "toxin"
|
||||
item_state = "firstaid-toxin"
|
||||
possible_icons = list("toxin","toxin2","toxin3","toxin4")
|
||||
|
||||
/obj/item/storage/firstaid/toxin/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins licking the lead paint off \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return TOXLOSS
|
||||
|
||||
/obj/item/storage/firstaid/toxin/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = pick("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3")
|
||||
|
||||
/obj/item/storage/firstaid/toxin/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
@@ -103,8 +103,9 @@
|
||||
/obj/item/storage/firstaid/radbgone
|
||||
name = "radiation treatment kit"
|
||||
desc = "Used to treat minor toxic blood content and major radiation poisoning."
|
||||
icon_state = "antitoxin"
|
||||
icon_state = "rad"
|
||||
item_state = "firstaid-toxin"
|
||||
possible_icons = list("rad","rad2","rad3")
|
||||
|
||||
/obj/item/storage/firstaid/radbgone/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins licking the lead paint off \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
@@ -128,8 +129,9 @@
|
||||
/obj/item/storage/firstaid/o2
|
||||
name = "oxygen deprivation treatment kit"
|
||||
desc = "A box full of oxygen goodies."
|
||||
icon_state = "o2"
|
||||
icon_state = "oxy"
|
||||
item_state = "firstaid-o2"
|
||||
possible_icons = list("oxy", "oxy2", "oxy3", "oxy4")
|
||||
|
||||
/obj/item/storage/firstaid/o2/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins hitting [user.p_their()] neck with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
@@ -149,6 +151,7 @@
|
||||
desc = "A first aid kit for when you get toolboxed."
|
||||
icon_state = "brute"
|
||||
item_state = "firstaid-brute"
|
||||
possible_icons = list("brute", "brute2", "brute3", "brute4")
|
||||
|
||||
/obj/item/storage/firstaid/brute/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins beating [user.p_them()]self over the head with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
@@ -166,7 +169,8 @@
|
||||
/obj/item/storage/firstaid/tactical
|
||||
name = "combat medical kit"
|
||||
desc = "I hope you've got insurance."
|
||||
icon_state = "bezerk"
|
||||
icon_state = "tactical"
|
||||
possible_icons = null
|
||||
|
||||
/obj/item/storage/firstaid/tactical/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -389,3 +393,141 @@
|
||||
/obj/item/organ_storage
|
||||
))
|
||||
|
||||
//hijacking the minature first aids for hypospray boxes. <3
|
||||
/obj/item/storage/hypospraykit
|
||||
name = "hypospray kit"
|
||||
desc = "It's a kit containing a hypospray and specific treatment chemical-filled vials."
|
||||
icon_state = "firstaid-mini"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
var/empty = FALSE
|
||||
item_state = "firstaid"
|
||||
|
||||
/obj/item/storage/hypospraykit/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_items = 12
|
||||
STR.can_hold = typecacheof(list(
|
||||
/obj/item/hypospray/mkii,
|
||||
/obj/item/reagent_containers/glass/bottle/vial))
|
||||
|
||||
/obj/item/storage/hypospraykit/regular
|
||||
icon_state = "firstaid-mini"
|
||||
desc = "A hypospray kit with general use vials."
|
||||
|
||||
/obj/item/storage/hypospraykit/regular/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
new /obj/item/hypospray/mkii/tricord(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/tricord(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/tricord(src)
|
||||
|
||||
/obj/item/storage/hypospraykit/fire
|
||||
name = "burn treatment hypospray kit"
|
||||
desc = "A specialized hypospray kit for burn treatments. Apply with sass."
|
||||
icon_state = "burn-mini"
|
||||
item_state = "firstaid-ointment"
|
||||
|
||||
/obj/item/storage/hypospraykit/fire/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
new /obj/item/hypospray/mkii/burn(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/kelotane(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/kelotane(src)
|
||||
|
||||
/obj/item/storage/hypospraykit/toxin
|
||||
name = "toxin treatment hypospray kit"
|
||||
icon_state = "toxin-mini"
|
||||
item_state = "firstaid-toxin"
|
||||
|
||||
/obj/item/storage/hypospraykit/toxin/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
new /obj/item/hypospray/mkii/toxin(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/antitoxin(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/antitoxin(src)
|
||||
|
||||
/obj/item/storage/hypospraykit/o2
|
||||
name = "oxygen deprivation hypospray kit"
|
||||
icon_state = "oxy-mini"
|
||||
item_state = "firstaid-o2"
|
||||
|
||||
/obj/item/storage/hypospraykit/o2/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
new /obj/item/hypospray/mkii/oxygen(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/dexalin(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/dexalin(src)
|
||||
|
||||
/obj/item/storage/hypospraykit/enlarge
|
||||
name = "organomegaly trauma hypospray kit"
|
||||
icon_state = "enlarge-mini"
|
||||
item_state = "firstaid-brute"
|
||||
|
||||
/obj/item/storage/hypospraykit/enlarge/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
new /obj/item/hypospray/mkii/enlarge(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/breastreduction(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/breastreduction(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/breastreduction(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/penisreduction(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/penisreduction(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/penisreduction(src)
|
||||
|
||||
/obj/item/storage/hypospraykit/brute
|
||||
name = "brute trauma hypospray kit"
|
||||
icon_state = "brute-mini"
|
||||
item_state = "firstaid-brute"
|
||||
|
||||
/obj/item/storage/hypospraykit/brute/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
new /obj/item/hypospray/mkii/brute(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/bicaridine(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/bicaridine(src)
|
||||
|
||||
/obj/item/storage/hypospraykit/tactical
|
||||
name = "combat hypospray kit"
|
||||
desc = "A hypospray kit best suited for combat situations."
|
||||
icon_state = "tactical-mini"
|
||||
|
||||
/obj/item/storage/hypospraykit/tactical/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
new /obj/item/defibrillator/compact/combat/loaded(src)
|
||||
new /obj/item/hypospray/mkii/CMO/combat(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/combat(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/combat(src)
|
||||
|
||||
/obj/item/storage/hypospraykit/cmo
|
||||
name = "deluxe hypospray kit"
|
||||
desc = "A kit containing a Deluxe hypospray and Vials."
|
||||
icon_state = "tactical-mini"
|
||||
|
||||
/obj/item/storage/hypospraykit/cmo/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_items = 6
|
||||
STR.can_hold = typecacheof(list(
|
||||
/obj/item/hypospray/mkii,
|
||||
/obj/item/reagent_containers/glass/bottle/vial))
|
||||
|
||||
/obj/item/storage/hypospraykit/cmo/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
new /obj/item/hypospray/mkii/CMO(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/tricord(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/charcoal(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/salglu(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/dexalin(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/synthflesh(src)
|
||||
|
||||
/obj/item/storage/box/vials
|
||||
name = "box of hypovials"
|
||||
|
||||
/obj/item/storage/box/vials/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/reagent_containers/glass/bottle/vial/small( src )
|
||||
|
||||
@@ -108,10 +108,10 @@
|
||||
STR.can_hold = typecacheof(list(/obj/item/clothing/accessory/medal))
|
||||
|
||||
/obj/item/storage/lockbox/medal/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
var/locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED)
|
||||
if(!locked)
|
||||
to_chat(user, "<span class='notice'>Alt-click to [open ? "close":"open"] it.</span>")
|
||||
. += "<span class='notice'>Alt-click to [open ? "close":"open"] it.</span>"
|
||||
|
||||
/obj/item/storage/lockbox/medal/AltClick(mob/user)
|
||||
if(user.canUseTopic(src, BE_CLOSE))
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
STR.max_combined_w_class = 14
|
||||
|
||||
/obj/item/storage/secure/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, text("The service panel is currently <b>[open ? "unscrewed" : "screwed shut"]</b>."))
|
||||
. = ..()
|
||||
. += "The service panel is currently <b>[open ? "unscrewed" : "screwed shut"]</b>."
|
||||
|
||||
/obj/item/storage/secure/attackby(obj/item/W, mob/user, params)
|
||||
if(SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED))
|
||||
|
||||
@@ -239,8 +239,8 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
|
||||
/obj/item/storage/toolbox/gold_real
|
||||
name = "golden toolbox"
|
||||
desc = "A larger then normal toolbox made of gold plated plastitanium."
|
||||
item_state = "gold"
|
||||
icon_state = "gold"
|
||||
item_state = "toolbox_gold"
|
||||
has_latches = FALSE
|
||||
force = 16 // Less then a spear
|
||||
throwforce = 14
|
||||
@@ -266,7 +266,7 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
|
||||
name = "golden toolbox"
|
||||
desc = "A gold plated toolbox, fancy and harmless due to the gold plating being on cardboard!"
|
||||
icon_state = "gold"
|
||||
item_state = "gold"
|
||||
item_state = "toolbox_gold"
|
||||
has_latches = FALSE
|
||||
force = 0
|
||||
throwforce = 0
|
||||
|
||||
@@ -381,3 +381,13 @@
|
||||
new /obj/item/gun/ballistic/automatic/pistol/m1911/kitchengun(src)
|
||||
new /obj/item/ammo_box/magazine/m45/kitchengun(src)
|
||||
new /obj/item/ammo_box/magazine/m45/kitchengun(src)
|
||||
|
||||
|
||||
/obj/item/storage/box/strange_seeds_10pack
|
||||
|
||||
/obj/item/storage/box/strange_seeds_10pack/PopulateContents()
|
||||
for(var/i in 1 to 10)
|
||||
new /obj/item/seeds/random(src)
|
||||
|
||||
if(prob(50))
|
||||
new /obj/item/seeds/random(src) //oops, an additional packet might have slipped its way into the box
|
||||
@@ -37,7 +37,15 @@
|
||||
/obj/item/screwdriver,
|
||||
/obj/item/valentine,
|
||||
/obj/item/stamp,
|
||||
/obj/item/key))
|
||||
/obj/item/key,
|
||||
/obj/item/cartridge,
|
||||
/obj/item/camera_film,
|
||||
/obj/item/stack/ore/bluespace_crystal,
|
||||
/obj/item/reagent_containers/food/snacks/grown/poppy,
|
||||
/obj/item/instrument/harmonica,
|
||||
/obj/item/mining_voucher,
|
||||
/obj/item/suit_voucher,
|
||||
/obj/item/reagent_containers/pill))
|
||||
|
||||
/obj/item/storage/wallet/Exited(atom/movable/AM)
|
||||
. = ..()
|
||||
|
||||
@@ -91,9 +91,9 @@
|
||||
. = ..()
|
||||
var/obj/item/stock_parts/cell/copper_top = get_cell()
|
||||
if(copper_top)
|
||||
to_chat(user, "<span class='notice'>\The [src] is [round(copper_top.percent())]% charged.</span>")
|
||||
. += "<span class='notice'>\The [src] is [round(copper_top.percent())]% charged.</span>"
|
||||
else
|
||||
to_chat(user, "<span class='warning'>\The [src] does not have a power source installed.</span>")
|
||||
. += "<span class='warning'>\The [src] does not have a power source installed.</span>"
|
||||
|
||||
/obj/item/melee/baton/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/stock_parts/cell))
|
||||
|
||||
@@ -74,15 +74,15 @@
|
||||
|
||||
/obj/item/tank/examine(mob/user)
|
||||
var/obj/icon = src
|
||||
..()
|
||||
. = ..()
|
||||
if (istype(src.loc, /obj/item/assembly))
|
||||
icon = src.loc
|
||||
if(!in_range(src, user))
|
||||
if (icon == src)
|
||||
to_chat(user, "<span class='notice'>If you want any more information you'll need to get closer.</span>")
|
||||
. += "<span class='notice'>If you want any more information you'll need to get closer.</span>"
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'>The pressure gauge reads [round(src.air_contents.return_pressure(),0.01)] kPa.</span>")
|
||||
. += "<span class='notice'>The pressure gauge reads [round(src.air_contents.return_pressure(),0.01)] kPa.</span>"
|
||||
|
||||
var/celsius_temperature = src.air_contents.temperature-T0C
|
||||
var/descriptive
|
||||
@@ -100,7 +100,7 @@
|
||||
else
|
||||
descriptive = "furiously hot"
|
||||
|
||||
to_chat(user, "<span class='notice'>It feels [descriptive].</span>")
|
||||
. += "<span class='notice'>It feels [descriptive].</span>"
|
||||
|
||||
/obj/item/tank/blob_act(obj/structure/blob/B)
|
||||
if(B && B.loc == loc)
|
||||
|
||||
@@ -201,7 +201,7 @@
|
||||
if(!current_location || current_area.noteleport || is_away_level(current_location.z) || !isturf(user.loc))//If turf was not found or they're on z level 2 or >7 which does not currently exist. or if user is not located on a turf
|
||||
to_chat(user, "<span class='notice'>\The [src] is malfunctioning.</span>")
|
||||
return
|
||||
user.show_message("<span class='notice'>Locked In.</span>", 2)
|
||||
user.show_message("<span class='notice'>Locked In.</span>", MSG_AUDIBLE)
|
||||
var/list/obj/effect/portal/created = create_portal_pair(current_location, get_teleport_turf(get_turf(T)), src, 300, 1, null, atmos_link_override)
|
||||
if(!(LAZYLEN(created) == 2))
|
||||
return
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
/obj/item/crowbar/cyborg
|
||||
name = "hydraulic crowbar"
|
||||
desc = "A hydraulic prying tool, compact but powerful. Designed to replace crowbar in construction cyborgs."
|
||||
icon = 'icons/obj/items_cyborg.dmi'
|
||||
icon_state = "crowbar_cyborg"
|
||||
usesound = 'sound/items/jaws_pry.ogg'
|
||||
force = 10
|
||||
toolspeed = 0.5
|
||||
|
||||
@@ -138,10 +138,14 @@
|
||||
user.put_in_active_hand(b_drill)
|
||||
|
||||
/obj/item/screwdriver/cyborg
|
||||
name = "powered screwdriver"
|
||||
name = "automated screwdriver"
|
||||
desc = "An electrical screwdriver, designed to be both precise and quick."
|
||||
icon = 'icons/obj/items_cyborg.dmi'
|
||||
icon_state = "screwdriver_cyborg"
|
||||
hitsound = 'sound/items/drill_hit.ogg'
|
||||
usesound = 'sound/items/drill_use.ogg'
|
||||
toolspeed = 0.5
|
||||
random_color = FALSE
|
||||
|
||||
/obj/item/screwdriver/advanced
|
||||
name = "advanced screwdriver"
|
||||
|
||||
@@ -220,8 +220,8 @@
|
||||
|
||||
|
||||
/obj/item/weldingtool/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "It contains [get_fuel()] unit\s of fuel out of [max_fuel].")
|
||||
. = ..()
|
||||
. += "It contains [get_fuel()] unit\s of fuel out of [max_fuel]."
|
||||
|
||||
/obj/item/weldingtool/get_temperature()
|
||||
return welding * heat
|
||||
@@ -302,6 +302,8 @@
|
||||
/obj/item/weldingtool/largetank/cyborg
|
||||
name = "integrated welding tool"
|
||||
desc = "An advanced welder designed to be used in robotic systems."
|
||||
icon = 'icons/obj/items_cyborg.dmi'
|
||||
icon_state = "indwelder_cyborg"
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weldingtool/largetank/flamethrower_screwdriver()
|
||||
|
||||
@@ -87,7 +87,10 @@
|
||||
/obj/item/wirecutters/cyborg
|
||||
name = "wirecutters"
|
||||
desc = "This cuts wires."
|
||||
icon = 'icons/obj/items_cyborg.dmi'
|
||||
icon_state = "wirecutters_cyborg"
|
||||
toolspeed = 0.5
|
||||
random_color = FALSE
|
||||
|
||||
/obj/item/wirecutters/power
|
||||
name = "jaws of life"
|
||||
@@ -119,12 +122,21 @@
|
||||
user.put_in_active_hand(pryjaws)
|
||||
|
||||
/obj/item/wirecutters/power/attack(mob/living/carbon/C, mob/user)
|
||||
if(istype(C) && C.handcuffed)
|
||||
user.visible_message("<span class='notice'>[user] cuts [C]'s restraints with [src]!</span>")
|
||||
qdel(C.handcuffed)
|
||||
return
|
||||
else
|
||||
..()
|
||||
if(istype(C))
|
||||
if(C.handcuffed)
|
||||
user.visible_message("<span class='notice'>[user] cuts [C]'s restraints with [src]!</span>")
|
||||
qdel(C.handcuffed)
|
||||
return
|
||||
else if(C.has_status_effect(STATUS_EFFECT_CHOKINGSTRAND))
|
||||
var/man = C == user ? "your" : "[C]'\s"
|
||||
user.visible_message("<span class='notice'>[user] attempts to remove the durathread strand from around [man] neck.</span>", \
|
||||
"<span class='notice'>You attempt to remove the durathread strand from around [man] neck.</span>")
|
||||
if(do_after(user, 15, null, C))
|
||||
user.visible_message("<span class='notice'>[user] succesfuly removes the durathread strand.</span>",
|
||||
"<span class='notice'>You succesfuly remove the durathread strand.</span>")
|
||||
C.remove_status_effect(STATUS_EFFECT_CHOKINGSTRAND)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/wirecutters/advanced
|
||||
name = "advanced wirecutters"
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
/obj/item/wrench/cyborg
|
||||
name = "automatic wrench"
|
||||
desc = "An advanced robotic wrench. Can be found in construction cyborgs."
|
||||
icon = 'icons/obj/items_cyborg.dmi'
|
||||
icon_state = "wrench_cyborg"
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/wrench/brass
|
||||
|
||||
@@ -148,8 +148,8 @@
|
||||
var/bullets = 7
|
||||
|
||||
/obj/item/toy/gun/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "There [bullets == 1 ? "is" : "are"] [bullets] cap\s left.")
|
||||
. = ..()
|
||||
. += "There [bullets == 1 ? "is" : "are"] [bullets] cap\s left."
|
||||
|
||||
/obj/item/toy/gun/attackby(obj/item/toy/ammo/gun/A, mob/user, params)
|
||||
|
||||
@@ -182,7 +182,7 @@
|
||||
return
|
||||
src.add_fingerprint(user)
|
||||
if (src.bullets < 1)
|
||||
user.show_message("<span class='warning'>*click*</span>", 2)
|
||||
user.show_message("<span class='warning'>*click*</span>", MSG_AUDIBLE)
|
||||
playsound(src, "gun_dry_fire", 30, 1)
|
||||
return
|
||||
playsound(user, 'sound/weapons/gunshot.ogg', 100, 1)
|
||||
@@ -204,8 +204,8 @@
|
||||
src.icon_state = text("357OLD-[]", src.amount_left)
|
||||
|
||||
/obj/item/toy/ammo/gun/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "There [amount_left == 1 ? "is" : "are"] [amount_left] cap\s left.")
|
||||
. = ..()
|
||||
. += "There [amount_left == 1 ? "is" : "are"] [amount_left] cap\s left."
|
||||
|
||||
/*
|
||||
* Toy swords
|
||||
@@ -373,8 +373,8 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/sword/cx/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
|
||||
. = ..()
|
||||
. += "<span class='notice'>Alt-click to recolor it.</span>"
|
||||
|
||||
/*
|
||||
* Foam armblade
|
||||
@@ -864,10 +864,9 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/cards/deck/MouseDrop(atom/over_object)
|
||||
. = ..()
|
||||
var/mob/living/M = usr
|
||||
if(!istype(M) || usr.incapacitated() || usr.lying)
|
||||
return
|
||||
return ..()
|
||||
if(Adjacent(usr))
|
||||
if(over_object == M && loc != M)
|
||||
M.put_in_hands(src)
|
||||
@@ -879,7 +878,9 @@
|
||||
to_chat(usr, "<span class='notice'>You pick up the deck.</span>")
|
||||
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>You can't reach it from here!</span>")
|
||||
. = ..()
|
||||
if(!.)
|
||||
to_chat(usr, "<span class='warning'>You can't reach it from here!</span>")
|
||||
|
||||
|
||||
|
||||
@@ -994,8 +995,7 @@
|
||||
if(cardUser.is_holding(src))
|
||||
cardUser.visible_message("[cardUser] checks [cardUser.p_their()] card.", "<span class='notice'>The card reads: [cardname].</span>")
|
||||
else
|
||||
to_chat(cardUser, "<span class='warning'>You need to have the card in your hand to check it!</span>")
|
||||
|
||||
. += "<span class='warning'>You need to have the card in your hand to check it!</span>"
|
||||
|
||||
/obj/item/toy/cards/singlecard/verb/Flip()
|
||||
set name = "Flip Card"
|
||||
@@ -1221,8 +1221,8 @@
|
||||
to_chat(user, "<span class='alert'>The cogwheels are already turning!</span>")
|
||||
|
||||
/obj/item/toy/clockwork_watch/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='info'>Station Time: [STATION_TIME_TIMESTAMP("hh:mm:ss")]")
|
||||
. = ..()
|
||||
. += "<span class='info'>Station Time: [STATION_TIME_TIMESTAMP("hh:mm:ss")]"
|
||||
|
||||
/*
|
||||
* Toy Dagger
|
||||
|
||||
@@ -566,9 +566,9 @@
|
||||
. += blade_inhand
|
||||
|
||||
/obj/item/twohanded/dualsaber/hypereutactic/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(!hacked)
|
||||
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
|
||||
. += "<span class='notice'>Alt-click to recolor it.</span>"
|
||||
|
||||
/obj/item/twohanded/dualsaber/hypereutactic/rainbow_process()
|
||||
. = ..()
|
||||
@@ -634,9 +634,9 @@
|
||||
AddComponent(/datum/component/jousting)
|
||||
|
||||
/obj/item/twohanded/spear/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(explosive)
|
||||
to_chat(user, "<span class='notice'>Use in your hands to activate the attached explosive.</span><br><span class='notice'>Alt-click to set your war cry.</span><br><span class='notice'>Right-click in combat mode to wield</span>")
|
||||
. += "<span class='notice'>Use in your hands to activate the attached explosive.</span><br><span class='notice'>Alt-click to set your war cry.</span><br><span class='notice'>Right-click in combat mode to wield</span>"
|
||||
|
||||
/obj/item/twohanded/spear/update_icon()
|
||||
if(explosive)
|
||||
|
||||
@@ -30,14 +30,14 @@
|
||||
name = "\improper [machine_name] restocking unit"
|
||||
|
||||
/obj/item/vending_refill/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
var/num = get_part_rating()
|
||||
if (num == INFINITY)
|
||||
to_chat(user, "It's sealed tight, completely full of supplies.")
|
||||
. += "It's sealed tight, completely full of supplies."
|
||||
else if (num == 0)
|
||||
to_chat(user, "It's empty!")
|
||||
. += "It's empty!"
|
||||
else
|
||||
to_chat(user, "It can restock [num] item\s.")
|
||||
. += "It can restock [num] item\s."
|
||||
|
||||
/obj/item/vending_refill/get_part_rating()
|
||||
if (!products || !contraband || !premium)
|
||||
|
||||
@@ -125,10 +125,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
qdel(src) //If this ever happens, it's because you lost an arm
|
||||
|
||||
/obj/item/claymore/highlander/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "It has [!notches ? "nothing" : "[notches] notches"] scratched into the blade.")
|
||||
. = ..()
|
||||
. += "It has [!notches ? "nothing" : "[notches] notches"] scratched into the blade."
|
||||
if(nuke_disk)
|
||||
to_chat(user, "<span class='boldwarning'>It's holding the nuke disk!</span>")
|
||||
. += "<span class='boldwarning'>It's holding the nuke disk!</span>"
|
||||
|
||||
/obj/item/claymore/highlander/attack(mob/living/target, mob/living/user)
|
||||
. = ..()
|
||||
@@ -216,7 +216,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK
|
||||
force = 40
|
||||
throwforce = 10
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
block_chance = 50
|
||||
@@ -427,7 +427,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi'
|
||||
item_flags = ABSTRACT | DROPDEL
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
force = 24
|
||||
throwforce = 0
|
||||
throw_range = 0
|
||||
@@ -512,7 +512,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
force = 10
|
||||
throwforce = 12
|
||||
attack_verb = list("beat", "smacked")
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
var/homerun_ready = 0
|
||||
var/homerun_able = 0
|
||||
total_mass = 2.7 //a regular wooden major league baseball bat weighs somewhere between 2 to 3.4 pounds, according to google
|
||||
|
||||
@@ -224,11 +224,11 @@
|
||||
.["Modify armor values"] = "?_src_=vars;[HrefToken()];modarmor=[REF(src)]"
|
||||
|
||||
/obj/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(obj_flags & UNIQUE_RENAME)
|
||||
to_chat(user, "<span class='notice'>Use a pen on it to rename it or change its description.</span>")
|
||||
. += "<span class='notice'>Use a pen on it to rename it or change its description.</span>"
|
||||
if(unique_reskin && (!current_skin || always_reskinnable))
|
||||
to_chat(user, "<span class='notice'>Alt-click it to reskin it.</span>")
|
||||
. += "<span class='notice'>Alt-click it to reskin it.</span>"
|
||||
|
||||
/obj/AltClick(mob/user)
|
||||
. = ..()
|
||||
|
||||
@@ -89,15 +89,15 @@
|
||||
structureclimber = null
|
||||
|
||||
/obj/structure/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(!(resistance_flags & INDESTRUCTIBLE))
|
||||
if(resistance_flags & ON_FIRE)
|
||||
to_chat(user, "<span class='warning'>It's on fire!</span>")
|
||||
. += "<span class='warning'>It's on fire!</span>"
|
||||
if(broken)
|
||||
to_chat(user, "<span class='notice'>It appears to be broken.</span>")
|
||||
. += "<span class='notice'>It appears to be broken.</span>"
|
||||
var/examine_status = examine_status(user)
|
||||
if(examine_status)
|
||||
to_chat(user, examine_status)
|
||||
. += examine_status
|
||||
|
||||
/obj/structure/proc/examine_status(mob/user) //An overridable proc, mostly for falsewalls.
|
||||
var/healthpercent = (obj_integrity/max_integrity) * 100
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
|
||||
/obj/structure/AIcore/latejoin_inactive/examine(mob/user)
|
||||
. = ..()
|
||||
to_chat(user, "Its transmitter seems to be [active? "on" : "off"].")
|
||||
. += "Its transmitter seems to be [active? "on" : "off"]."
|
||||
|
||||
/obj/structure/AIcore/latejoin_inactive/proc/is_available() //If people still manage to use this feature to spawn-kill AI latejoins ahelp them.
|
||||
if(!available)
|
||||
|
||||
@@ -23,9 +23,9 @@
|
||||
var/bolts = TRUE
|
||||
|
||||
/obj/structure/bed/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(bolts)
|
||||
to_chat(user, "<span class='notice'>It's held together by a couple of <b>bolts</b>.</span>")
|
||||
. += "<span class='notice'>It's held together by a couple of <b>bolts</b>.</span>"
|
||||
|
||||
/obj/structure/bed/deconstruct(disassembled = TRUE)
|
||||
if(!(flags_1 & NODECONSTRUCT_1))
|
||||
@@ -148,8 +148,8 @@
|
||||
..()
|
||||
|
||||
/obj/item/roller/robo/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "The dock is [loaded ? "loaded" : "empty"].")
|
||||
. = ..()
|
||||
. += "The dock is [loaded ? "loaded" : "empty"]."
|
||||
|
||||
/obj/item/roller/robo/deploy_roller(mob/user, atom/location)
|
||||
if(loaded)
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
layer = OBJ_LAYER
|
||||
|
||||
/obj/structure/chair/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>It's held together by a couple of <b>bolts</b>.</span>")
|
||||
. = ..()
|
||||
. += "<span class='notice'>It's held together by a couple of <b>bolts</b>.</span>"
|
||||
if(!has_buckled_mobs())
|
||||
to_chat(user, "<span class='notice'>Drag your sprite to sit in it.</span>")
|
||||
. += "<span class='notice'>Drag your sprite to sit in it.</span>"
|
||||
|
||||
/obj/structure/chair/Initialize()
|
||||
. = ..()
|
||||
@@ -498,7 +498,7 @@
|
||||
var/mutable_appearance/armrest
|
||||
|
||||
/obj/structure/chair/sofa/Initialize()
|
||||
armrest = mutable_appearance(icon, "[icon_state]_armrest")
|
||||
armrest = mutable_appearance(icon, "[icon_state]_armrest", ABOVE_MOB_LAYER)
|
||||
return ..()
|
||||
|
||||
/obj/structure/chair/sofa/post_buckle_mob(mob/living/M)
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
/obj/structure/chair/pew
|
||||
name = "wooden pew"
|
||||
desc = "Kneel here and pray."
|
||||
icon = 'icons/obj/sofa.dmi'
|
||||
icon_state = "pewmiddle"
|
||||
resistance_flags = FLAMMABLE
|
||||
max_integrity = 70
|
||||
buildstacktype = /obj/item/stack/sheet/mineral/wood
|
||||
buildstackamount = 3
|
||||
item_chair = null
|
||||
|
||||
/obj/structure/chair/pew/left
|
||||
name = "left wooden pew end"
|
||||
icon_state = "pewend_left"
|
||||
var/mutable_appearance/leftpewarmrest
|
||||
|
||||
/obj/structure/chair/pew/left/Initialize()
|
||||
leftpewarmrest = GetLeftPewArmrest()
|
||||
leftpewarmrest.layer = ABOVE_MOB_LAYER
|
||||
return ..()
|
||||
|
||||
/obj/structure/chair/pew/left/proc/GetLeftPewArmrest()
|
||||
return mutable_appearance('icons/obj/sofa.dmi', "pewend_left_armrest")
|
||||
|
||||
/obj/structure/chair/pew/left/Destroy()
|
||||
QDEL_NULL(leftpewarmrest)
|
||||
return ..()
|
||||
|
||||
/obj/structure/chair/pew/left/post_buckle_mob(mob/living/M)
|
||||
. = ..()
|
||||
update_leftpewarmrest()
|
||||
|
||||
/obj/structure/chair/pew/left/proc/update_leftpewarmrest()
|
||||
if(has_buckled_mobs())
|
||||
add_overlay(leftpewarmrest)
|
||||
else
|
||||
cut_overlay(leftpewarmrest)
|
||||
|
||||
/obj/structure/chair/pew/left/post_unbuckle_mob()
|
||||
. = ..()
|
||||
update_leftpewarmrest()
|
||||
|
||||
/obj/structure/chair/pew/right
|
||||
name = "left wooden pew end"
|
||||
icon_state = "pewend_right"
|
||||
var/mutable_appearance/rightpewarmrest
|
||||
|
||||
/obj/structure/chair/pew/right/Initialize()
|
||||
rightpewarmrest = GetRightPewArmrest()
|
||||
rightpewarmrest.layer = ABOVE_MOB_LAYER
|
||||
return ..()
|
||||
|
||||
/obj/structure/chair/pew/right/proc/GetRightPewArmrest()
|
||||
return mutable_appearance('icons/obj/sofa.dmi', "pewend_right_armrest")
|
||||
|
||||
/obj/structure/chair/pew/right/Destroy()
|
||||
QDEL_NULL(rightpewarmrest)
|
||||
return ..()
|
||||
|
||||
/obj/structure/chair/pew/right/post_buckle_mob(mob/living/M)
|
||||
. = ..()
|
||||
update_rightpewarmrest()
|
||||
|
||||
/obj/structure/chair/pew/right/proc/update_rightpewarmrest()
|
||||
if(has_buckled_mobs())
|
||||
add_overlay(rightpewarmrest)
|
||||
else
|
||||
cut_overlay(rightpewarmrest)
|
||||
|
||||
/obj/structure/chair/pew/right/post_unbuckle_mob()
|
||||
. = ..()
|
||||
update_rightpewarmrest()
|
||||
@@ -294,13 +294,13 @@ LINEN BINS
|
||||
var/obj/item/hidden = null
|
||||
|
||||
/obj/structure/bedsheetbin/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(amount < 1)
|
||||
to_chat(user, "There are no sheets in the bin.")
|
||||
. += "There are no sheets in the bin."
|
||||
else if(amount == 1)
|
||||
to_chat(user, "There is one sheet in the bin.")
|
||||
. += "There is one sheet in the bin."
|
||||
else
|
||||
to_chat(user, "There are [amount] sheets in the bin.")
|
||||
. += "There are [amount] sheets in the bin."
|
||||
|
||||
|
||||
/obj/structure/bedsheetbin/update_icon()
|
||||
|
||||
@@ -84,22 +84,22 @@
|
||||
add_overlay("unlocked")
|
||||
|
||||
/obj/structure/closet/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(welded)
|
||||
to_chat(user, "<span class='notice'>It's <b>welded</b> shut.</span>")
|
||||
. += "<span class='notice'>It's <b>welded</b> shut.</span>"
|
||||
if(anchored)
|
||||
to_chat(user, "<span class='notice'>It is <b>bolted</b> to the ground.</span>")
|
||||
. += "<span class='notice'>It is <b>bolted</b> to the ground.</span>"
|
||||
if(opened)
|
||||
to_chat(user, "<span class='notice'>The parts are <b>welded</b> together.</span>")
|
||||
. += "<span class='notice'>The parts are <b>welded</b> together.</span>"
|
||||
else if(secure && !opened)
|
||||
else if(broken)
|
||||
to_chat(user, "<span class='notice'>The lock is <b>screwed</b> in.</span>")
|
||||
. += "<span class='notice'>The lock is <b>screwed</b> in.</span>"
|
||||
else if(secure)
|
||||
to_chat(user, "<span class='notice'>Alt-click to [locked ? "unlock" : "lock"].</span>")
|
||||
. += "<span class='notice'>Alt-click to [locked ? "unlock" : "lock"].</span>"
|
||||
if(isliving(user))
|
||||
var/mob/living/L = user
|
||||
if(HAS_TRAIT(L, TRAIT_SKITTISH))
|
||||
to_chat(user, "<span class='notice'>Ctrl-Shift-click [src] to jump inside.</span>")
|
||||
. += "<span class='notice'>Ctrl-Shift-click [src] to jump inside.</span>"
|
||||
|
||||
/obj/structure/closet/CanPass(atom/movable/mover, turf/target)
|
||||
if(wall_mounted)
|
||||
|
||||
@@ -12,6 +12,9 @@
|
||||
new /obj/item/clothing/under/shorts/blue(src)
|
||||
new /obj/item/clothing/under/shorts/green(src)
|
||||
new /obj/item/clothing/under/jabroni(src)
|
||||
new /obj/item/clothing/under/polychromic/shortpants(src)
|
||||
new /obj/item/clothing/under/polychromic/shortpants(src)
|
||||
new /obj/item/clothing/under/polychromic/shortpants(src)
|
||||
|
||||
|
||||
/obj/structure/closet/boxinggloves
|
||||
|
||||
@@ -352,6 +352,7 @@
|
||||
icon_door = "black"
|
||||
|
||||
/obj/structure/closet/wardrobe/curator/PopulateContents()
|
||||
new /obj/item/clothing/accessory/pocketprotector/full(src)
|
||||
new /obj/item/clothing/head/fedora/curator(src)
|
||||
new /obj/item/clothing/suit/curator(src)
|
||||
new /obj/item/clothing/under/rank/curator/treasure_hunter(src)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
new /obj/item/clothing/under/rank/cargo(src)
|
||||
new /obj/item/clothing/under/rank/cargo/skirt(src)
|
||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||
new /obj/item/radio/headset/headset_cargo(src)
|
||||
new /obj/item/radio/headset/heads/qm(src)
|
||||
new /obj/item/clothing/suit/fire/firefighter(src)
|
||||
new /obj/item/clothing/gloves/fingerless(src)
|
||||
new /obj/item/megaphone/cargo(src)
|
||||
@@ -23,3 +23,4 @@
|
||||
new /obj/item/circuitboard/machine/techfab/department/cargo(src)
|
||||
new /obj/item/storage/photo_album/QM(src)
|
||||
new /obj/item/circuitboard/machine/ore_silo(src)
|
||||
new /obj/item/clothing/suit/hooded/wintercoat/qm(src)
|
||||
|
||||
@@ -34,6 +34,8 @@
|
||||
new /obj/item/storage/photo_album/CE(src)
|
||||
new /obj/item/storage/lockbox/medal/engineering(src)
|
||||
new /obj/item/construction/rcd/loaded/upgraded(src)
|
||||
new /obj/item/clothing/suit/hooded/wintercoat/ce(src)
|
||||
new /obj/item/clothing/head/beret/ce/white(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/engineering_electrical
|
||||
name = "electrical supplies locker"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user