Rewrite examine() to pass a list around

This commit is contained in:
Aronai Sieyes
2020-04-29 16:42:16 -04:00
committed by VirgoBot
parent 8c5c0a7cfb
commit 6ebd249748
214 changed files with 2021 additions and 1120 deletions
+3 -5
View File
@@ -80,14 +80,12 @@
return PROCESS_KILL
/obj/item/device/assembly/examine(mob/user)
..(user)
. = ..()
if((in_range(src, user) || loc == user))
if(secured)
to_chat(user, "\The [src] is ready!")
. += "\The [src] is ready!"
else
to_chat(user, "\The [src] can be attached!")
return
. += "\The [src] can be attached!"
/obj/item/device/assembly/attack_self(mob/user as mob)
if(!user) return 0
+3 -3
View File
@@ -57,12 +57,12 @@
master.update_icon()
/obj/item/device/assembly_holder/examine(mob/user)
..(user)
. = ..()
if ((in_range(src, user) || src.loc == user))
if (src.secured)
to_chat(user, "\The [src] is ready!")
. += "\The [src] is ready!"
else
to_chat(user, "\The [src] can be attached!")
. += "\The [src] can be attached!"
/obj/item/device/assembly_holder/HasProximity(atom/movable/AM as mob|obj)
if(a_left)
+2 -2
View File
@@ -8,9 +8,9 @@
/obj/item/device/assembly/mousetrap/examine(var/mob/user)
..(user)
. = ..(user)
if(armed)
to_chat(user, "It looks like it's armed.")
. += "It looks like it's armed."
/obj/item/device/assembly/mousetrap/update_icon()
if(armed)
+3 -3
View File
@@ -64,11 +64,11 @@ GLOBAL_LIST_EMPTY(all_blobs)
return FALSE
/obj/structure/blob/examine(mob/user)
..()
. = ..()
if(!overmind)
to_chat(user, "It seems inert.") // Dead blob.
. += "It seems inert." // Dead blob.
else
to_chat(user, overmind.blob_type.desc)
. += overmind.blob_type.desc
/obj/structure/blob/get_description_info()
if(overmind)
+5 -5
View File
@@ -851,16 +851,16 @@
/obj/item/clothing/under/examine(mob/user)
..(user)
. = ..()
switch(src.sensor_mode)
if(0)
to_chat(user, "Its sensors appear to be disabled.")
. += "Its sensors appear to be disabled."
if(1)
to_chat(user, "Its binary life sensors appear to be enabled.")
. += "Its binary life sensors appear to be enabled."
if(2)
to_chat(user, "Its vital tracker appears to be enabled.")
. += "Its vital tracker appears to be enabled."
if(3)
to_chat(user, "Its vital tracker and tracking beacon appear to be enabled.")
. += "Its vital tracker and tracking beacon appear to be enabled."
/obj/item/clothing/under/proc/set_sensors(mob/usr as mob)
var/mob/M = usr
@@ -67,10 +67,9 @@
src.add_fingerprint(usr)
/obj/item/clothing/examine(var/mob/user)
..(user)
. = ..(user)
if(LAZYLEN(accessories))
for(var/obj/item/clothing/accessory/A in accessories)
to_chat(user, "\A [A] is attached to it.")
. += "It has the following attached: [counting_english_list(accessories)]"
/**
* Attach accessory A to src
+5 -8
View File
@@ -78,11 +78,8 @@
wearer = null
/obj/item/clothing/shoes/magboots/examine(mob/user)
..(user)
var/state = "disabled"
if(item_flags & NOSLIP)
state = "enabled"
to_chat(user, "Its mag-pulse traction system appears to be [state].")
. = ..()
. += "Its mag-pulse traction system appears to be [item_flags & NOSLIP ? "enabled" : "disabled"]."
/obj/item/clothing/shoes/magboots/vox
@@ -126,6 +123,6 @@
canremove = 1
/obj/item/clothing/shoes/magboots/vox/examine(mob/user)
..(user)
if (magpulse)
to_chat(user, "It would be hard to take these off without relaxing your grip first.")//theoretically this message should only be seen by the wearer when the claws are equipped.
. = ..()
if(magpulse)
. += "It would be hard to take these off without relaxing your grip first." // Theoretically this message should only be seen by the wearer when the claws are equipped.
+3 -3
View File
@@ -224,7 +224,7 @@ var/global/list/breach_burn_descriptors = list(
..()
/obj/item/clothing/suit/space/examine(mob/user)
..(user)
if(can_breach && breaches && breaches.len)
. = ..()
if(can_breach && breaches?.len)
for(var/datum/breach/B in breaches)
to_chat(user, "<font color='red'><B>It has \a [B.descriptor].</B></font>")
. += "<font color='red'><B>It has \a [B.descriptor].</B></font>"
@@ -55,14 +55,14 @@
var/list/stat_rig_module/stat_modules = new()
/obj/item/rig_module/examine()
..()
. = ..()
switch(damage)
if(0)
to_chat(usr, "It is undamaged.")
. += "It is undamaged."
if(1)
to_chat(usr, "It is badly damaged.")
. += "It is badly damaged."
if(2)
to_chat(usr, "It is almost completely destroyed.")
. += "It is almost completely destroyed."
/obj/item/rig_module/attackby(obj/item/W as obj, mob/user as mob)
+7 -8
View File
@@ -95,22 +95,21 @@
var/datum/effect/effect/system/spark_spread/spark_system
/obj/item/weapon/rig/examine()
to_chat(usr, "This is [bicon(src)][src.name].")
to_chat(usr, "[src.desc]")
. = ..()
if(wearer)
for(var/obj/item/piece in list(helmet,gloves,chest,boots))
if(!piece || piece.loc != wearer)
continue
to_chat(usr, "[bicon(piece)] \The [piece] [piece.gender == PLURAL ? "are" : "is"] deployed.")
. += "[bicon(piece)] \The [piece] [piece.gender == PLURAL ? "are" : "is"] deployed."
if(src.loc == usr)
to_chat(usr, "The access panel is [locked? "locked" : "unlocked"].")
to_chat(usr, "The maintenance panel is [open ? "open" : "closed"].")
to_chat(usr, "Hardsuit systems are [offline ? "<span class='warning'>offline</span>" : "<span class='notice'>online</span>"].")
to_chat(usr, "The cooling stystem is [cooling_on ? "active" : "inactive"].")
. += "The access panel is [locked? "locked" : "unlocked"]."
. += "The maintenance panel is [open ? "open" : "closed"]."
. += "Hardsuit systems are [offline ? "<span class='warning'>offline</span>" : "<span class='notice'>online</span>"]."
. += "The cooling stystem is [cooling_on ? "active" : "inactive"]."
if(open)
to_chat(usr, "It's equipped with [english_list(installed_modules)].")
. += "It's equipped with [english_list(installed_modules)]."
/obj/item/weapon/rig/New()
..()
@@ -58,10 +58,10 @@
camera.c_tag = usr.name
to_chat(usr, "<font color='blue'>User scanned as [camera.c_tag]. Camera activated.</font>")
/obj/item/clothing/head/helmet/space/examine()
..()
if(camera_networks && get_dist(usr,src) <= 1)
to_chat(usr, "This helmet has a built-in camera. It's [camera ? "" : "in"]active.")
/obj/item/clothing/head/helmet/space/examine(mob/user)
. = ..()
if(camera_networks && Adjacent(user))
. += "This helmet has a built-in camera. It's [camera ? "" : "in"]active."
/obj/item/clothing/suit/space
name = "Space suit"
@@ -68,13 +68,11 @@
var/obj/item/device/suit_cooling_unit/cooler = null// Cooling unit, for FBPs. Cannot be installed alongside a tank.
/obj/item/clothing/suit/space/void/examine(user)
..(user)
var/list/part_list = new
. = ..()
for(var/obj/item/I in list(helmet,boots,tank,cooler))
part_list += "\a [I]"
to_chat(user, "\The [src] has [english_list(part_list)] installed.")
. += "It has \a [I] installed."
if(tank && in_range(src,user))
to_chat(user, "<span class='notice'>The wrist-mounted pressure gauge reads [max(round(tank.air_contents.return_pressure()),0)] kPa remaining in \the [tank].</span>")
. += "<span class='notice'>The wrist-mounted pressure gauge reads [max(round(tank.air_contents.return_pressure()),0)] kPa remaining in \the [tank].</span>"
/obj/item/clothing/suit/space/void/refit_for_species(var/target_species)
..()
@@ -86,11 +86,11 @@
..()
/obj/item/clothing/accessory/holster/examine(mob/user)
..(user)
if (holstered)
to_chat(user, "A [holstered] is holstered here.")
. = ..(user)
if(holstered)
. += "A [holstered] is holstered here."
else
to_chat(user, "It is empty.")
. += "It is empty."
/obj/item/clothing/accessory/holster/on_attached(obj/item/clothing/under/S, mob/user as mob)
..()
@@ -91,5 +91,6 @@
return
/obj/item/weapon/evidencebag/examine(mob/user)
..(user)
if (stored_item) user.examinate(stored_item)
. = ..()
if(stored_item)
user.examinate(stored_item)
+3 -3
View File
@@ -158,6 +158,6 @@ proc/spawn_money(var/sum, spawnloc, mob/living/carbon/human/human_user as mob)
update_icon() return //space cash
/obj/item/weapon/spacecash/ewallet/examine(mob/user)
..(user)
if (!(user in view(2)) && user!=src.loc) return
to_chat(user, "<font color='blue'>Charge card's owner: [src.owner_name]. Thalers remaining: [src.worth].</font>")
. = ..()
if(Adjacent(user))
. += "<span class='notice'>Charge card's owner: [src.owner_name]. Thalers remaining: [src.worth].</span>"
+4 -4
View File
@@ -32,14 +32,14 @@
/obj/machinery/cash_register/examine(mob/user as mob)
..(user)
. = ..(user)
if(transaction_amount)
to_chat(user, "It has a purchase of [transaction_amount] pending[transaction_purpose ? " for [transaction_purpose]" : ""].")
. += "It has a purchase of [transaction_amount] pending[transaction_purpose ? " for [transaction_purpose]" : ""]."
if(cash_open)
if(cash_stored)
to_chat(user, "It holds [cash_stored] Thaler\s of money.")
. += "It holds [cash_stored] Thaler\s."
else
to_chat(user, "It's completely empty.")
. += "It's completely empty."
/obj/machinery/cash_register/attack_hand(mob/user as mob)
+2 -3
View File
@@ -57,10 +57,9 @@
interact(user)
/obj/item/device/retail_scanner/examine(mob/user as mob)
..(user)
. = ..()
if(transaction_amount)
to_chat(user, "It has a purchase of [transaction_amount] pending[transaction_purpose ? " for [transaction_purpose]" : ""].")
. += "It has a purchase of [transaction_amount] pending[transaction_purpose ? " for [transaction_purpose]" : ""]."
/obj/item/device/retail_scanner/interact(mob/user as mob)
var/dat = "<h2>Retail Scanner<hr></h2>"
+4 -4
View File
@@ -32,11 +32,11 @@
/obj/item/weapon/material/fishing_rod/built
strung = FALSE
/obj/item/weapon/material/fishing_rod/examine(mob/M as mob)
..()
/obj/item/weapon/material/fishing_rod/examine(mob/user)
. = ..()
if(Bait)
to_chat(M, "<span class='notice'>\The [src] has \the [Bait] hanging on its hook.</span>")
Bait.examine(M)
. += "<span class='notice'>It has [Bait] hanging on its hook: </span>"
. += Bait.examine(user)
/obj/item/weapon/material/fishing_rod/CtrlClick(mob/user)
if((src.loc == user || Adjacent(user)) && Bait)
@@ -28,21 +28,21 @@
matter = list("glass" = 60)
/obj/item/weapon/reagent_containers/food/drinks/glass2/examine(mob/M as mob)
..()
. = ..()
for(var/I in extras)
if(istype(I, /obj/item/weapon/glass_extra))
to_chat(M, "There is \a [I] in \the [src].")
. += "There is \a [I] in \the [src]."
else if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/fruit_slice))
to_chat(M, "There is \a [I] on the rim.")
. += "There is \a [I] on the rim."
else
to_chat(M, "There is \a [I] somewhere on the glass. Somehow.")
. += "There is \a [I] somewhere on the glass. Somehow."
if(has_ice())
to_chat(M, "There is some ice floating in the drink.")
. += "There is some ice floating in the drink."
if(has_fizz())
to_chat(M, "It is fizzing slightly.")
. += "It is fizzing slightly."
/obj/item/weapon/reagent_containers/food/drinks/glass2/proc/has_ice()
if(reagents.reagent_list.len > 0)
+12 -12
View File
@@ -72,18 +72,18 @@
playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
/obj/item/weapon/reagent_containers/food/drinks/examine(mob/user)
if(!..(user, 1))
return
if(!reagents || reagents.total_volume == 0)
to_chat(user, "<span class='notice'>\The [src] is empty!</span>")
else if (reagents.total_volume <= volume * 0.25)
to_chat(user, "<span class='notice'>\The [src] is almost empty!</span>")
else if (reagents.total_volume <= volume * 0.66)
to_chat(user, "<span class='notice'>\The [src] is half full!</span>")
else if (reagents.total_volume <= volume * 0.90)
to_chat(user, "<span class='notice'>\The [src] is almost full!</span>")
else
to_chat(user, "<span class='notice'>\The [src] is full!</span>")
. = ..()
if(Adjacent(user))
if(!reagents?.total_volume)
. += "<span class='notice'>It is empty!</span>"
else if (reagents.total_volume <= volume * 0.25)
. += "<span class='notice'>It is almost empty!</span>"
else if (reagents.total_volume <= volume * 0.66)
. += "<span class='notice'>It is half full!</span>"
else if (reagents.total_volume <= volume * 0.90)
. += "<span class='notice'>It is almost full!</span>"
else
. += "<span class='notice'>It is full!</span>"
////////////////////////////////////////////////////////////////////////////////
+4 -3
View File
@@ -79,9 +79,10 @@
..()
/obj/item/weapon/reagent_containers/food/snacks/csandwich/examine(mob/user)
..(user)
var/obj/item/O = pick(contents)
to_chat(user, "<font color='blue'>You think you can see [O.name] in there.</font>")
. = ..()
if(contents.len)
var/obj/item/O = pick(contents)
. += "<font color='blue'>You think you can see [O.name] in there.</font>"
/obj/item/weapon/reagent_containers/food/snacks/csandwich/attack(mob/M as mob, mob/user as mob, def_zone)
+10 -10
View File
@@ -156,16 +156,16 @@
return 0
/obj/item/weapon/reagent_containers/food/snacks/examine(mob/user)
if(!..(user, 1))
return
if (bitecount==0)
return
else if (bitecount==1)
to_chat(user, "<font color='blue'>\The [src] was bitten by someone!</font>")
else if (bitecount<=3)
to_chat(user, "<font color='blue'>\The [src] was bitten [bitecount] times!</font>")
else
to_chat(user, "<font color='blue'>\The [src] was bitten multiple times!</font>")
. = ..()
if(Adjacent(user))
if(bitecount==0)
return .
else if (bitecount==1)
. += "<span class='notice'>It was bitten by someone!</span>"
else if (bitecount<=3)
. += "<span class='notice'>It was bitten [bitecount] times!</span>"
else
. += "<span class='notice'>It was bitten multiple times!</span>"
/obj/item/weapon/reagent_containers/food/snacks/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/storage))
@@ -39,10 +39,10 @@
cooking = new_setting
icon_state = new_setting ? on_icon : off_icon
/obj/machinery/cooker/examine()
..()
if(cooking_obj && Adjacent(usr))
to_chat(usr, "You can see \a [cooking_obj] inside.")
/obj/machinery/cooker/examine(mob/user)
. = ..()
if(cooking_obj && Adjacent(user))
. += "You can see \a [cooking_obj] inside."
/obj/machinery/cooker/attackby(var/obj/item/I, var/mob/user)
+2 -2
View File
@@ -87,8 +87,8 @@
src.startgibbing(user)
/obj/machinery/gibber/examine()
..()
to_chat(usr, "The safety guard is [emagged ? "<span class='danger'>disabled</span>" : "enabled"].")
. = ..()
. += "The safety guard is [emagged ? "<span class='danger'>disabled</span>" : "enabled"]."
/obj/machinery/gibber/emag_act(var/remaining_charges, var/mob/user)
emagged = !emagged
+3 -3
View File
@@ -348,11 +348,11 @@
user.visible_message("<span class = 'notice'>\The [user] [concealed ? "conceals" : "reveals"] their hand.</span>")
/obj/item/weapon/hand/examine(mob/user)
..(user)
. = ..()
if((!concealed) && cards.len)
to_chat(user,"It contains: ")
. += "It contains: "
for(var/datum/playingcard/P in cards)
to_chat(user,"\The [P.name].")
. += "\The [P.name]."
/obj/item/weapon/hand/verb/Removecard()
@@ -31,9 +31,9 @@
overlays += "bees3"
/obj/machinery/beehive/examine(var/mob/user)
..()
. = ..()
if(!closed)
to_chat(user, "The lid is open.")
. += "The lid is open."
/obj/machinery/beehive/attackby(var/obj/item/I, var/mob/user)
if(I.is_crowbar())
+2 -2
View File
@@ -60,9 +60,9 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds)
src.desc = "It's labelled as coming from [seed.display_name]."
/obj/item/seeds/examine(mob/user)
..(user)
. = ..()
if(seed && !seed.roundstart)
to_chat(user, "It's tagged as variety #[seed.uid].")
. += "It's tagged as variety #[seed.uid]."
/obj/item/seeds/cutting
name = "cuttings"
+19 -15
View File
@@ -1,6 +1,11 @@
/obj/machinery/portable_atmospherics/hydroponics
name = "hydroponics tray"
<<<<<<< HEAD
icon = 'icons/obj/hydroponics_machines_vr.dmi' //VOREStation Edit
=======
desc = "A tray usually full of fluid for growing plants."
icon = 'icons/obj/hydroponics_machines.dmi'
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)
icon_state = "hydrotray3"
density = 1
anchored = 1
@@ -607,32 +612,31 @@
else if(dead)
remove_dead(user)
/obj/machinery/portable_atmospherics/hydroponics/examine()
..()
/obj/machinery/portable_atmospherics/hydroponics/examine(mob/user)
. = ..()
if(seed)
to_chat(usr, "<span class='notice'>[seed.display_name] are growing here.</span>")
. += "<span class='notice'>[seed.display_name] are growing here.</span>"
else
to_chat(usr, "[src] is empty.")
. += "It is empty."
if(!Adjacent(usr))
return
if(!Adjacent(user))
return .
to_chat(usr, "Water: [round(waterlevel,0.1)]/100")
to_chat(usr, "Nutrient: [round(nutrilevel,0.1)]/10")
. += "Water: [round(waterlevel,0.1)]/100"
. += "Nutrient: [round(nutrilevel,0.1)]/10"
if(seed)
if(weedlevel >= 5)
to_chat(usr, "\The [src] is <span class='danger'>infested with weeds</span>!")
. += "It is <span class='danger'>infested with weeds</span>!"
if(pestlevel >= 5)
to_chat(usr, "\The [src] is <span class='danger'>infested with tiny worms</span>!")
. += "It is <span class='danger'>infested with tiny worms</span>!"
if(dead)
to_chat(usr, "<span class='danger'>The plant is dead.</span>")
. += "It has <span class='danger'>a dead plant</span>!"
else if(health <= (seed.get_trait(TRAIT_ENDURANCE)/ 2))
to_chat(usr, "The plant looks <span class='danger'>unhealthy</span>.")
. += "It has <span class='danger'>an unhealthy plant</span>!"
if(frozen == 1)
to_chat(usr, "<span class='notice'>It is cryogenically frozen.</span>")
. += "<span class='notice'>It is cryogenically frozen.</span>"
if(mechanical)
var/turf/T = loc
var/datum/gas_mixture/environment
@@ -655,7 +659,7 @@
var/light_available = T.get_lumcount() * 5
light_string = "a light level of [light_available] lumens"
to_chat(usr, "The tray's sensor suite is reporting [light_string] and a temperature of [environment.temperature]K at [environment.return_pressure()] kPa in the [environment_type] environment")
. += "The tray's sensor suite is reporting [light_string] and a temperature of [environment.temperature]K at [environment.return_pressure()] kPa in the [environment_type] environment."
/obj/machinery/portable_atmospherics/hydroponics/verb/close_lid_verb()
set name = "Toggle Tray Lid"
@@ -172,13 +172,10 @@
return id_card
/obj/item/device/electronic_assembly/examine(mob/user)
. = ..(user, 1)
if(.)
. = ..()
if(Adjacent(user))
for(var/obj/item/integrated_circuit/IC in contents)
IC.external_examine(user)
// for(var/obj/item/integrated_circuit/output/screen/S in contents)
// if(S.stuff_to_display)
// to_chat(user, "There's a little screen labeled '[S.name]', which displays '[S.stuff_to_display]'.")
. += IC.external_examine(user)
if(opened)
interact(user)
@@ -47,9 +47,9 @@
..()
/obj/item/clothing/examine(mob/user)
. = ..()
if(IC)
IC.examine(user)
..()
. += IC.examine(user)
/obj/item/clothing/CtrlShiftClick(mob/user)
var/turf/T = get_turf(src)
@@ -46,10 +46,10 @@
return
/obj/item/device/assembly/electronic_assembly/examine(mob/user)
.=..(user, 1)
. = ..()
if(EA)
for(var/obj/item/integrated_circuit/IC in EA.contents)
IC.external_examine(user)
. += IC.external_examine(user)
/obj/item/device/assembly/electronic_assembly/verb/toggle()
set src in usr
@@ -4,28 +4,29 @@ a creative player the means to solve many problems. Circuits are held inside an
*/
/obj/item/integrated_circuit/examine(mob/user)
interact(user)
external_examine(user)
. = ..()
. += external_examine(user)
interact(user)
// This should be used when someone is examining while the case is opened.
/obj/item/integrated_circuit/proc/internal_examine(mob/user)
to_chat(user, "This board has [inputs.len] input pin\s, [outputs.len] output pin\s and [activators.len] activation pin\s.")
. = list()
. += "This board has [inputs.len] input pin\s, [outputs.len] output pin\s and [activators.len] activation pin\s."
for(var/datum/integrated_io/I in inputs)
if(I.linked.len)
to_chat(user, "The '[I]' is connected to [I.get_linked_to_desc()].")
. += "The '[I]' is connected to [I.get_linked_to_desc()]."
for(var/datum/integrated_io/O in outputs)
if(O.linked.len)
to_chat(user, "The '[O]' is connected to [O.get_linked_to_desc()].")
. += "The '[O]' is connected to [O.get_linked_to_desc()]."
for(var/datum/integrated_io/activate/A in activators)
if(A.linked.len)
to_chat(user, "The '[A]' is connected to [A.get_linked_to_desc()].")
any_examine(user)
. += "The '[A]' is connected to [A.get_linked_to_desc()]."
. += any_examine(user)
interact(user)
// This should be used when someone is examining from an 'outside' perspective, e.g. reading a screen or LED.
/obj/item/integrated_circuit/proc/external_examine(mob/user)
any_examine(user)
return any_examine(user)
/obj/item/integrated_circuit/proc/any_examine(mob/user)
return
@@ -19,7 +19,7 @@
..()
/obj/item/integrated_circuit/memory/examine(mob/user)
..()
. = ..()
var/i
for(i = 1, i <= outputs.len, i++)
var/datum/integrated_io/O = outputs[i]
@@ -30,7 +30,7 @@
data = "[d]"
else if(!isnull(O.data))
data = O.data
to_chat(user, "\The [src] has [data] saved to address [i].")
. += "\The [src] has [data] saved to address [i]."
/obj/item/integrated_circuit/memory/do_work()
for(var/i = 1 to inputs.len)
@@ -20,7 +20,7 @@
stuff_to_display = null
/obj/item/integrated_circuit/output/screen/any_examine(mob/user)
to_chat(user, "There is a little screen labeled '[name]', which displays [!isnull(stuff_to_display) ? "'[stuff_to_display]'" : "nothing"].")
return "There is a little screen labeled '[name]', which displays [!isnull(stuff_to_display) ? "'[stuff_to_display]'" : "nothing"]."
/obj/item/integrated_circuit/output/screen/do_work()
var/datum/integrated_io/I = inputs[1]
@@ -333,7 +333,7 @@
else
text_output += "\an ["\improper[initial_name]"] labeled '[name]'"
text_output += " which is currently [get_pin_data(IC_INPUT, 1) ? "lit <font color=[led_color]>¤</font>" : "unlit."]"
to_chat(user,jointext(text_output,null))
return jointext(text_output,null)
/obj/item/integrated_circuit/output/led/red
name = "red LED"
+1
View File
@@ -471,6 +471,7 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
*/
/obj/machinery/libraryscanner
name = "scanner"
desc = "A scanner for scanning in books and papers."
icon = 'icons/obj/library.dmi'
icon_state = "bigscanner"
anchored = 1
+1 -1
View File
@@ -14,7 +14,7 @@ var/global/list/total_extraction_beacons = list()
/obj/item/extraction_pack/examine()
. = ..()
usr.show_message("It has [uses_left] use\s remaining.", 1)
. += "It has [uses_left] use\s remaining."
/obj/item/extraction_pack/attack_self(mob/user)
var/list/possible_beacons = list()
+6 -8
View File
@@ -39,26 +39,24 @@
stored_ore[O.name] = 1
/obj/structure/ore_box/examine(mob/user)
to_chat(user, "That's an [src].")
to_chat(user, desc)
. = ..()
if(!Adjacent(user)) //Can only check the contents of ore boxes if you can physically reach them.
return
return .
add_fingerprint(user)
if(!contents.len)
to_chat(user, "It is empty.")
return
. += "It is empty."
return .
if(world.time > last_update + 10)
update_ore_count()
last_update = world.time
to_chat(user, "It holds:")
. += "It holds:"
for(var/ore in stored_ore)
to_chat(user, "- [stored_ore[ore]] [ore]")
return
. += "- [stored_ore[ore]] [ore]"
/obj/structure/ore_box/verb/empty_box()
set name = "Empty Ore Box"
@@ -38,9 +38,9 @@
..()
/obj/item/weapon/card/mining_point_card/examine(mob/user)
..(user)
to_chat(user, "There's [mine_points] excavation points on the card.")
to_chat(user, "There's [survey_points] survey points on the card.")
. = ..()
. += "There's [mine_points] excavation points on the card."
. += "There's [survey_points] survey points on the card."
/obj/item/weapon/card/mining_point_card/survey
mine_points = 0
+9 -13
View File
@@ -196,24 +196,20 @@
return //Doesn't do anything right now because none of the things that can be done to a regular MMI make any sense for these
/obj/item/device/mmi/digital/examine(mob/user)
if(!..(user))
return
var/msg = "<span class='info'>*---------*</span>\nThis is [bicon(src)] \a <EM>[src]</EM>!\n[desc]\n"
msg += "<span class='warning'>"
. = ..()
if(src.brainmob && src.brainmob.key)
switch(src.brainmob.stat)
if(CONSCIOUS)
if(!src.brainmob.client) msg += "It appears to be in stand-by mode.\n" //afk
if(UNCONSCIOUS) msg += "<span class='warning'>It doesn't seem to be responsive.</span>\n"
if(DEAD) msg += "<span class='deadsay'>It appears to be completely inactive.</span>\n"
if(!src.brainmob.client)
. += "<span class='warning'>It appears to be in stand-by mode.</span>" //afk
if(UNCONSCIOUS)
. += "<span class='warning'>It doesn't seem to be responsive.</span>"
if(DEAD)
. += "<span class='deadsay'>It appears to be completely inactive.</span>"
else
msg += "<span class='deadsay'>It appears to be completely inactive.</span>\n"
msg += "</span><span class='info'>*---------*</span>"
to_chat(user,msg)
return
. += "<span class='deadsay'>It appears to be completely inactive.</span>"
/obj/item/device/mmi/digital/emp_act(severity)
if(!src.brainmob)
return
@@ -85,25 +85,6 @@
M.show_message("<font color='blue'>The positronic brain buzzes and beeps, and the golden lights fade away. Perhaps you could try again?</font>")
playsound(src, 'sound/misc/buzzbeep.ogg', 50, 1)
/obj/item/device/mmi/digital/posibrain/examine(mob/user)
if(!..(user))
return
var/msg = "<span class='info'>*---------*</span>\nThis is [bicon(src)] \a <EM>[src]</EM>!\n[desc]\n"
msg += "<span class='warning'>"
if(src.brainmob && src.brainmob.key)
switch(src.brainmob.stat)
if(CONSCIOUS)
if(!src.brainmob.client) msg += "It appears to be in stand-by mode.\n" //afk
if(UNCONSCIOUS) msg += "<span class='warning'>It doesn't seem to be responsive.</span>\n"
if(DEAD) msg += "<span class='deadsay'>It appears to be completely inactive.</span>\n"
else
msg += "<span class='deadsay'>It appears to be completely inactive.</span>\n"
msg += "</span><span class='info'>*---------*</span>"
to_chat(user,msg)
return
/obj/item/device/mmi/digital/posibrain/emp_act(severity)
if(!src.brainmob)
return
+91 -84
View File
@@ -1,10 +1,11 @@
/mob/living/carbon/human/examine(mob/user)
// . = ..() //Note that we don't call parent. We build the list by ourselves.
var/skip_gear = 0
var/skip_body = 0
if(alpha <= EFFECTIVE_INVIS)
src.loc.examine(user)
return
return src.loc.examine(user) // Returns messages as if they examined wherever the human was
var/looks_synth = looksSynthetic()
@@ -75,12 +76,6 @@
BP_L_LEG = skip_body & EXAMINE_SKIPLEGS,
BP_R_LEG = skip_body & EXAMINE_SKIPLEGS)
var/list/msg = list("<span class='info'>*---------*<br>This is ")
msg += "[bicon(src)] " //fucking BYOND: this should stop dreamseeker crashing if we -somehow- examine somebody before their icon is generated
msg += "<EM>[src.name]</EM>"
var/datum/gender/T = gender_datums[get_visible_gender()]
if((skip_gear & EXAMINE_SKIPJUMPSUIT) && (skip_body & EXAMINE_SKIPFACE)) //big suits/masks/helmets make it hard to tell their gender
@@ -98,6 +93,7 @@
// Just in case someone VVs the gender to something strange. It'll runtime anyway when it hits usages, better to CRASH() now with a helpful message.
CRASH("Gender datum was null; key was '[((skip_gear & EXAMINE_SKIPJUMPSUIT) && (skip_body & EXAMINE_SKIPFACE)) ? PLURAL : gender]'")
var/name_ender = ""
if(!((skip_gear & EXAMINE_SKIPJUMPSUIT) && (skip_body & EXAMINE_SKIPFACE)))
//VOREStation Add Start
if(custom_species)
@@ -110,16 +106,12 @@
else if(gender == FEMALE)
use_gender = "a gynoid"
msg += ", <b><font color='#555555'>[use_gender]!</font></b>"
name_ender = ", <b><font color='#555555'>[use_gender]!</font></b>[species.get_additional_examine_text(src)]"
else if(species.name != "Human")
msg += ", <b><font color='[species.get_flesh_colour(src)]'>\a [species.get_examine_name()]!</font></b>"
name_ender = ", <b><font color='[species.get_flesh_colour(src)]'>\a [species.get_examine_name()]!</font></b>[species.get_additional_examine_text(src)]"
var/extra_species_text = species.get_additional_examine_text(src)
if(extra_species_text)
msg += "[extra_species_text]"
msg += "<br>"
var/list/msg = list("<span class='info'>*---------*","This is [bicon(src)] <EM>[src.name]</EM>[name_ender]")
//uniform
if(w_uniform && !(skip_gear & EXAMINE_SKIPJUMPSUIT) && w_uniform.show_examine)
@@ -142,16 +134,16 @@
tie_msg += " Attached to it is [english_list(accessories_visible)]."
if(w_uniform.blood_DNA)
msg += "<span class='warning'>[T.He] [T.is] wearing [bicon(w_uniform)] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [w_uniform.name]![tie_msg]</span><br>"
msg += "<span class='warning'>[T.He] [T.is] wearing [bicon(w_uniform)] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [w_uniform.name]![tie_msg]</span>"
else
msg += "[T.He] [T.is] wearing [bicon(w_uniform)] \a [w_uniform].[tie_msg]<br>"
msg += "[T.He] [T.is] wearing [bicon(w_uniform)] \a [w_uniform].[tie_msg]"
//head
if(head && !(skip_gear & EXAMINE_SKIPHELMET) && head.show_examine)
if(head.blood_DNA)
msg += "<span class='warning'>[T.He] [T.is] wearing [bicon(head)] [head.gender==PLURAL?"some":"a"] [(head.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [head.name] on [T.his] head!</span><br>"
msg += "<span class='warning'>[T.He] [T.is] wearing [bicon(head)] [head.gender==PLURAL?"some":"a"] [(head.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [head.name] on [T.his] head!</span>"
else
msg += "[T.He] [T.is] wearing [bicon(head)] \a [head] on [T.his] head.<br>"
msg += "[T.He] [T.is] wearing [bicon(head)] \a [head] on [T.his] head."
//suit/armour
if(wear_suit)
@@ -162,73 +154,73 @@
tie_msg += " Attached to it is [english_list(U.accessories)]."
if(wear_suit.blood_DNA)
msg += "<span class='warning'>[T.He] [T.is] wearing [bicon(wear_suit)] [wear_suit.gender==PLURAL?"some":"a"] [(wear_suit.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [wear_suit.name][tie_msg]!</span><br>"
msg += "<span class='warning'>[T.He] [T.is] wearing [bicon(wear_suit)] [wear_suit.gender==PLURAL?"some":"a"] [(wear_suit.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [wear_suit.name][tie_msg]!</span>"
else
msg += "[T.He] [T.is] wearing [bicon(wear_suit)] \a [wear_suit].[tie_msg]<br>"
msg += "[T.He] [T.is] wearing [bicon(wear_suit)] \a [wear_suit].[tie_msg]"
//suit/armour storage
if(s_store && !(skip_gear & EXAMINE_SKIPSUITSTORAGE) && s_store.show_examine)
if(s_store.blood_DNA)
msg += "<span class='warning'>[T.He] [T.is] carrying [bicon(s_store)] [s_store.gender==PLURAL?"some":"a"] [(s_store.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [s_store.name] on [T.his] [wear_suit.name]!</span><br>"
msg += "<span class='warning'>[T.He] [T.is] carrying [bicon(s_store)] [s_store.gender==PLURAL?"some":"a"] [(s_store.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [s_store.name] on [T.his] [wear_suit.name]!</span>"
else
msg += "[T.He] [T.is] carrying [bicon(s_store)] \a [s_store] on [T.his] [wear_suit.name].<br>"
msg += "[T.He] [T.is] carrying [bicon(s_store)] \a [s_store] on [T.his] [wear_suit.name]."
//back
if(back && !(skip_gear & EXAMINE_SKIPBACKPACK) && back.show_examine)
if(back.blood_DNA)
msg += "<span class='warning'>[T.He] [T.has] [bicon(back)] [back.gender==PLURAL?"some":"a"] [(back.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [back] on [T.his] back.</span><br>"
msg += "<span class='warning'>[T.He] [T.has] [bicon(back)] [back.gender==PLURAL?"some":"a"] [(back.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [back] on [T.his] back.</span>"
else
msg += "[T.He] [T.has] [bicon(back)] \a [back] on [T.his] back.<br>"
msg += "[T.He] [T.has] [bicon(back)] \a [back] on [T.his] back."
//left hand
if(l_hand && l_hand.show_examine)
if(l_hand.blood_DNA)
msg += "<span class='warning'>[T.He] [T.is] holding [bicon(l_hand)] [l_hand.gender==PLURAL?"some":"a"] [(l_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [l_hand.name] in [T.his] left hand!</span><br>"
msg += "<span class='warning'>[T.He] [T.is] holding [bicon(l_hand)] [l_hand.gender==PLURAL?"some":"a"] [(l_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [l_hand.name] in [T.his] left hand!</span>"
else
msg += "[T.He] [T.is] holding [bicon(l_hand)] \a [l_hand] in [T.his] left hand.<br>"
msg += "[T.He] [T.is] holding [bicon(l_hand)] \a [l_hand] in [T.his] left hand."
//right hand
if(r_hand && r_hand.show_examine)
if(r_hand.blood_DNA)
msg += "<span class='warning'>[T.He] [T.is] holding [bicon(r_hand)] [r_hand.gender==PLURAL?"some":"a"] [(r_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [r_hand.name] in [T.his] right hand!</span><br>"
msg += "<span class='warning'>[T.He] [T.is] holding [bicon(r_hand)] [r_hand.gender==PLURAL?"some":"a"] [(r_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [r_hand.name] in [T.his] right hand!</span>"
else
msg += "[T.He] [T.is] holding [bicon(r_hand)] \a [r_hand] in [T.his] right hand.<br>"
msg += "[T.He] [T.is] holding [bicon(r_hand)] \a [r_hand] in [T.his] right hand."
//gloves
if(gloves && !(skip_gear & EXAMINE_SKIPGLOVES) && gloves.show_examine)
if(gloves.blood_DNA)
msg += "<span class='warning'>[T.He] [T.has] [bicon(gloves)] [gloves.gender==PLURAL?"some":"a"] [(gloves.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [gloves.name] on [T.his] hands!</span><br>"
msg += "<span class='warning'>[T.He] [T.has] [bicon(gloves)] [gloves.gender==PLURAL?"some":"a"] [(gloves.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [gloves.name] on [T.his] hands!</span>"
else
msg += "[T.He] [T.has] [bicon(gloves)] \a [gloves] on [T.his] hands.<br>"
msg += "[T.He] [T.has] [bicon(gloves)] \a [gloves] on [T.his] hands."
else if(blood_DNA && !(skip_body & EXAMINE_SKIPHANDS))
msg += "<span class='warning'>[T.He] [T.has] [(hand_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained hands!</span><br>"
msg += "<span class='warning'>[T.He] [T.has] [(hand_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained hands!</span>"
//handcuffed?
if(handcuffed && handcuffed.show_examine)
if(istype(handcuffed, /obj/item/weapon/handcuffs/cable))
msg += "<span class='warning'>[T.He] [T.is] [bicon(handcuffed)] restrained with cable!</span><br>"
msg += "<span class='warning'>[T.He] [T.is] [bicon(handcuffed)] restrained with cable!</span>"
else
msg += "<span class='warning'>[T.He] [T.is] [bicon(handcuffed)] handcuffed!</span><br>"
msg += "<span class='warning'>[T.He] [T.is] [bicon(handcuffed)] handcuffed!</span>"
//buckled
if(buckled)
msg += "<span class='warning'>[T.He] [T.is] [bicon(buckled)] buckled to [buckled]!</span><br>"
msg += "<span class='warning'>[T.He] [T.is] [bicon(buckled)] buckled to [buckled]!</span>"
//belt
if(belt && !(skip_gear & EXAMINE_SKIPBELT) && belt.show_examine)
if(belt.blood_DNA)
msg += "<span class='warning'>[T.He] [T.has] [bicon(belt)] [belt.gender==PLURAL?"some":"a"] [(belt.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [belt.name] about [T.his] waist!</span><br>"
msg += "<span class='warning'>[T.He] [T.has] [bicon(belt)] [belt.gender==PLURAL?"some":"a"] [(belt.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [belt.name] about [T.his] waist!</span>"
else
msg += "[T.He] [T.has] [bicon(belt)] \a [belt] about [T.his] waist.<br>"
msg += "[T.He] [T.has] [bicon(belt)] \a [belt] about [T.his] waist."
//shoes
if(shoes && !(skip_gear & EXAMINE_SKIPSHOES) && shoes.show_examine)
if(shoes.blood_DNA)
msg += "<span class='warning'>[T.He] [T.is] wearing [bicon(shoes)] [shoes.gender==PLURAL?"some":"a"] [(shoes.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [shoes.name] on [T.his] feet!</span><br>"
msg += "<span class='warning'>[T.He] [T.is] wearing [bicon(shoes)] [shoes.gender==PLURAL?"some":"a"] [(shoes.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [shoes.name] on [T.his] feet!</span>"
else
msg += "[T.He] [T.is] wearing [bicon(shoes)] \a [shoes] on [T.his] feet.<br>"
msg += "[T.He] [T.is] wearing [bicon(shoes)] \a [shoes] on [T.his] feet."
else if(feet_blood_DNA && !(skip_body & EXAMINE_SKIPHANDS))
msg += "<span class='warning'>[T.He] [T.has] [(feet_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained feet!</span><br>"
msg += "<span class='warning'>[T.He] [T.has] [(feet_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained feet!</span>"
//mask
if(wear_mask && !(skip_gear & EXAMINE_SKIPMASK) && wear_mask.show_examine)
@@ -237,24 +229,24 @@
descriptor = "in [T.his] mouth"
if(wear_mask.blood_DNA)
msg += "<span class='warning'>[T.He] [T.has] [bicon(wear_mask)] [wear_mask.gender==PLURAL?"some":"a"] [(wear_mask.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [wear_mask.name] [descriptor]!</span><br>"
msg += "<span class='warning'>[T.He] [T.has] [bicon(wear_mask)] [wear_mask.gender==PLURAL?"some":"a"] [(wear_mask.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [wear_mask.name] [descriptor]!</span>"
else
msg += "[T.He] [T.has] [bicon(wear_mask)] \a [wear_mask] [descriptor].<br>"
msg += "[T.He] [T.has] [bicon(wear_mask)] \a [wear_mask] [descriptor]."
//eyes
if(glasses && !(skip_gear & EXAMINE_SKIPEYEWEAR) && glasses.show_examine)
if(glasses.blood_DNA)
msg += "<span class='warning'>[T.He] [T.has] [bicon(glasses)] [glasses.gender==PLURAL?"some":"a"] [(glasses.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [glasses] covering [T.his] eyes!</span><br>"
msg += "<span class='warning'>[T.He] [T.has] [bicon(glasses)] [glasses.gender==PLURAL?"some":"a"] [(glasses.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [glasses] covering [T.his] eyes!</span>"
else
msg += "[T.He] [T.has] [bicon(glasses)] \a [glasses] covering [T.his] eyes.<br>"
msg += "[T.He] [T.has] [bicon(glasses)] \a [glasses] covering [T.his] eyes."
//left ear
if(l_ear && !(skip_gear & EXAMINE_SKIPEARS) && l_ear.show_examine)
msg += "[T.He] [T.has] [bicon(l_ear)] \a [l_ear] on [T.his] left ear.<br>"
msg += "[T.He] [T.has] [bicon(l_ear)] \a [l_ear] on [T.his] left ear."
//right ear
if(r_ear && !(skip_gear & EXAMINE_SKIPEARS) && r_ear.show_examine)
msg += "[T.He] [T.has] [bicon(r_ear)] \a [r_ear] on [T.his] right ear.<br>"
msg += "[T.He] [T.has] [bicon(r_ear)] \a [r_ear] on [T.his] right ear."
//ID
if(wear_id && wear_id.show_examine)
@@ -266,27 +258,27 @@
var/obj/item/weapon/card/id/idcard = wear_id
id = idcard.registered_name
if(id && (id != real_name) && (get_dist(src, usr) <= 1) && prob(10))
msg += "<span class='warning'>[T.He] [T.is] wearing [bicon(wear_id)] \a [wear_id] yet something doesn't seem right...</span><br>"
msg += "<span class='warning'>[T.He] [T.is] wearing [bicon(wear_id)] \a [wear_id] yet something doesn't seem right...</span>"
else*/
msg += "[T.He] [T.is] wearing [bicon(wear_id)] \a [wear_id].<br>"
msg += "[T.He] [T.is] wearing [bicon(wear_id)] \a [wear_id]."
//Jitters
if(is_jittery)
if(jitteriness >= 300)
msg += "<span class='warning'><B>[T.He] [T.is] convulsing violently!</B></span><br>"
msg += "<span class='warning'><B>[T.He] [T.is] convulsing violently!</B></span>"
else if(jitteriness >= 200)
msg += "<span class='warning'>[T.He] [T.is] extremely jittery.</span><br>"
msg += "<span class='warning'>[T.He] [T.is] extremely jittery.</span>"
else if(jitteriness >= 100)
msg += "<span class='warning'>[T.He] [T.is] twitching ever so slightly.</span><br>"
msg += "<span class='warning'>[T.He] [T.is] twitching ever so slightly.</span>"
//splints
for(var/organ in BP_ALL)
var/obj/item/organ/external/o = get_organ(organ)
if(o && o.splinted && o.splinted.loc == o)
msg += "<span class='warning'>[T.He] [T.has] \a [o.splinted] on [T.his] [o.name]!</span><br>"
msg += "<span class='warning'>[T.He] [T.has] \a [o.splinted] on [T.his] [o.name]!</span>"
if(suiciding)
msg += "<span class='warning'>[T.He] appears to have commited suicide... there is no hope of recovery.</span><br>"
msg += "<span class='warning'>[T.He] appears to have commited suicide... there is no hope of recovery.</span>"
msg += attempt_vr(src,"examine_weight",args) //VOREStation Code
msg += attempt_vr(src,"examine_nutrition",args) //VOREStation Code
@@ -297,12 +289,12 @@
msg += attempt_vr(src,"examine_chimera",args) //VOREStation Code
if(mSmallsize in mutations)
msg += "[T.He] [T.is] very short!<br>"
msg += "[T.He] [T.is] very short!"
if (src.stat)
msg += "<span class='warning'>[T.He] [T.is]n't responding to anything around [T.him] and seems to be asleep.</span><br>"
msg += "<span class='warning'>[T.He] [T.is]n't responding to anything around [T.him] and seems to be asleep.</span>"
if((stat == 2 || src.losebreath) && get_dist(user, src) <= 3)
msg += "<span class='warning'>[T.He] [T.does] not appear to be breathing.</span><br>"
msg += "<span class='warning'>[T.He] [T.does] not appear to be breathing.</span>"
if(istype(user, /mob/living/carbon/human) && !user.stat && Adjacent(user))
user.visible_message("<b>[usr]</b> checks [src]'s pulse.", "You check [src]'s pulse.")
spawn(15)
@@ -313,15 +305,16 @@
to_chat(user, "<span class='deadsay'>[T.He] [T.has] a pulse!</span>")
if(fire_stacks)
msg += "[T.He] [T.is] covered in some liquid.<br>"
msg += "[T.He] [T.is] covered in some liquid."
if(on_fire)
msg += "<span class='warning'>[T.He] [T.is] on fire!.</span><br>"
msg += "<span class='warning'>[T.He] [T.is] on fire!.</span>"
var/ssd_msg = species.get_ssd(src)
if(ssd_msg && (!should_have_organ("brain") || has_brain()) && stat != DEAD)
if(!key)
msg += "<span class='deadsay'>[T.He] [T.is] [ssd_msg]. It doesn't look like [T.he] [T.is] waking up anytime soon.</span><br>"
msg += "<span class='deadsay'>[T.He] [T.is] [ssd_msg]. It doesn't look like [T.he] [T.is] waking up anytime soon.</span>"
else if(!client)
<<<<<<< HEAD
msg += "<span class='deadsay'>[T.He] [T.is] [ssd_msg].</span><br>"
//VOREStation Add Start
if(client && ((client.inactivity / 10) / 60 > 10)) //10 Minutes
@@ -329,6 +322,9 @@
else if(disconnect_time)
msg += "\[Disconnected/ghosted [round(((world.realtime - disconnect_time)/10)/60)] minutes ago\]\n"
//VOREStation Add End
=======
msg += "<span class='deadsay'>[T.He] [T.is] [ssd_msg].</span>"
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)
var/list/wound_flavor_text = list()
var/list/is_bleeding = list()
@@ -341,9 +337,9 @@
var/obj/item/organ/external/E = organs_by_name[organ_tag]
if(!E)
wound_flavor_text["[organ_descriptor]"] = "<span class='warning'><b>[T.He] [T.is] missing [T.his] [organ_descriptor].</b></span><br>"
wound_flavor_text["[organ_descriptor]"] = "<span class='warning'><b>[T.He] [T.is] missing [T.his] [organ_descriptor].</b></span>"
else if(E.is_stump())
wound_flavor_text["[organ_descriptor]"] = "<span class='warning'><b>[T.He] [T.has] a stump where [T.his] [organ_descriptor] should be.</b></span><br>"
wound_flavor_text["[organ_descriptor]"] = "<span class='warning'><b>[T.He] [T.has] a stump where [T.his] [organ_descriptor] should be.</b></span>"
else
continue
@@ -352,47 +348,51 @@
if((temp.organ_tag in hidden) && hidden[temp.organ_tag])
continue //Organ is hidden, don't talk about it
if(temp.status & ORGAN_DESTROYED)
wound_flavor_text["[temp.name]"] = "<span class='warning'><b>[T.He] [T.is] missing [T.his] [temp.name].</b></span><br>"
wound_flavor_text["[temp.name]"] = "<span class='warning'><b>[T.He] [T.is] missing [T.his] [temp.name].</b></span>"
continue
if(!looks_synth && temp.robotic == ORGAN_ROBOT)
if(!(temp.brute_dam + temp.burn_dam))
wound_flavor_text["[temp.name]"] = "[T.He] [T.has] a [temp.name].<br>"
wound_flavor_text["[temp.name]"] = "[T.He] [T.has] a [temp.name]."
else
wound_flavor_text["[temp.name]"] = "<span class='warning'>[T.He] [T.has] a [temp.name] with [temp.get_wounds_desc()]!</span><br>"
wound_flavor_text["[temp.name]"] = "<span class='warning'>[T.He] [T.has] a [temp.name] with [temp.get_wounds_desc()]!</span>"
continue
else if(temp.wounds.len > 0 || temp.open)
if(temp.is_stump() && temp.parent_organ && organs_by_name[temp.parent_organ])
var/obj/item/organ/external/parent = organs_by_name[temp.parent_organ]
wound_flavor_text["[temp.name]"] = "<span class='warning'>[T.He] has [temp.get_wounds_desc()] on [T.his] [parent.name].</span><br>"
wound_flavor_text["[temp.name]"] = "<span class='warning'>[T.He] has [temp.get_wounds_desc()] on [T.his] [parent.name].</span>"
else
wound_flavor_text["[temp.name]"] = "<span class='warning'>[T.He] has [temp.get_wounds_desc()] on [T.his] [temp.name].</span><br>"
wound_flavor_text["[temp.name]"] = "<span class='warning'>[T.He] has [temp.get_wounds_desc()] on [T.his] [temp.name].</span>"
else
wound_flavor_text["[temp.name]"] = ""
if(temp.dislocated == 2)
wound_flavor_text["[temp.name]"] += "<span class='warning'>[T.His] [temp.joint] is dislocated!</span><br>"
wound_flavor_text["[temp.name]"] += "<span class='warning'>[T.His] [temp.joint] is dislocated!</span>"
if(temp.brute_dam > temp.min_broken_damage || (temp.status & (ORGAN_BROKEN | ORGAN_MUTATED)))
wound_flavor_text["[temp.name]"] += "<span class='warning'>[T.His] [temp.name] is dented and swollen!</span><br>"
wound_flavor_text["[temp.name]"] += "<span class='warning'>[T.His] [temp.name] is dented and swollen!</span>"
if(temp.germ_level > INFECTION_LEVEL_TWO && !(temp.status & ORGAN_DEAD))
wound_flavor_text["[temp.name]"] += "<span class='warning'>[T.His] [temp.name] looks very infected!</span><br>"
wound_flavor_text["[temp.name]"] += "<span class='warning'>[T.His] [temp.name] looks very infected!</span>"
else if(temp.status & ORGAN_DEAD)
wound_flavor_text["[temp.name]"] += "<span class='warning'>[T.His] [temp.name] looks rotten!</span><br>"
wound_flavor_text["[temp.name]"] += "<span class='warning'>[T.His] [temp.name] looks rotten!</span>"
if(temp.status & ORGAN_BLEEDING)
is_bleeding["[temp.name]"] += "<span class='danger'>[T.His] [temp.name] is bleeding!</span><br>"
is_bleeding["[temp.name]"] += "<span class='danger'>[T.His] [temp.name] is bleeding!</span>"
if(temp.applied_pressure == src)
applying_pressure = "<span class='info'>[T.He] is applying pressure to [T.his] [temp.name].</span><br>"
applying_pressure = "<span class='info'>[T.He] is applying pressure to [T.his] [temp.name].</span>"
for(var/limb in wound_flavor_text)
msg += wound_flavor_text[limb]
var/flavor = wound_flavor_text[limb]
if(flavor)
msg += flavor
for(var/limb in is_bleeding)
msg += is_bleeding[limb]
var/blood = is_bleeding[limb]
if(blood)
msg += blood
for(var/implant in get_visible_implants(0))
msg += "<span class='danger'>[src] [T.has] \a [implant] sticking out of [T.his] flesh!</span><br>"
msg += "<span class='danger'>[src] [T.has] \a [implant] sticking out of [T.his] flesh!</span>"
if(digitalcamo)
msg += "[T.He] [T.is] repulsively uncanny!<br>"
msg += "[T.He] [T.is] repulsively uncanny!"
if(hasHUD(user,"security"))
var/perpname = name
@@ -410,8 +410,8 @@
if(R.fields["name"] == perpname)
criminal = R.fields["criminal"]
msg += "<span class = 'deptradio'>Criminal status:</span> <a href='?src=\ref[src];criminal=1'>\[[criminal]\]</a><br>"
msg += "<span class = 'deptradio'>Security records:</span> <a href='?src=\ref[src];secrecord=`'>\[View\]</a> <a href='?src=\ref[src];secrecordadd=`'>\[Add comment\]</a><br>"
msg += "<span class='deptradio'>Criminal status:</span> <a href='?src=\ref[src];criminal=1'>\[[criminal]\]</a>"
msg += "<span class='deptradio'>Security records:</span> <a href='?src=\ref[src];secrecord=`'>\[View\]</a> <a href='?src=\ref[src];secrecordadd=`'>\[Add comment\]</a>"
if(hasHUD(user,"medical"))
var/perpname = name
@@ -429,13 +429,15 @@
if (R.fields["name"] == perpname)
medical = R.fields["p_stat"]
msg += "<span class = 'deptradio'>Physical status:</span> <a href='?src=\ref[src];medical=1'>\[[medical]\]</a><br>"
msg += "<span class = 'deptradio'>Medical records:</span> <a href='?src=\ref[src];medrecord=`'>\[View\]</a> <a href='?src=\ref[src];medrecordadd=`'>\[Add comment\]</a><br>"
msg += "<span class='deptradio'>Physical status:</span> <a href='?src=\ref[src];medical=1'>\[[medical]\]</a>"
msg += "<span class='deptradio'>Medical records:</span> <a href='?src=\ref[src];medrecord=`'>\[View\]</a> <a href='?src=\ref[src];medrecordadd=`'>\[Add comment\]</a>"
if(print_flavor_text())
msg += "[print_flavor_text()]<br>"
var/flavor_text = print_flavor_text()
if(flavor_text)
msg += "[flavor_text]"
<<<<<<< HEAD
// VOREStation Start
if(ooc_notes)
msg += "<span class = 'deptradio'>OOC Notes:</span> <a href='?src=\ref[src];ooc_notes=1'>\[View\]</a>\n"
@@ -445,6 +447,11 @@
// VOREStation End
msg += "*---------*</span><br>"
msg += applying_pressure
=======
msg += "*---------*</span>"
if(applying_pressure)
msg += applying_pressure
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)
var/show_descs = show_descriptors_to(user)
if(show_descs)
@@ -453,9 +460,9 @@
if(pose)
if(!findtext(pose, regex("\[.?!]$"))) // Will be zero if the last character is not a member of [.?!]
pose = addtext(pose,".") //Makes sure all emotes end with a period.
msg += "<br>[T.He] [pose]"
msg += "<br>[T.He] [pose]" //<br> intentional, extra gap.
to_chat(user, jointext(msg, null))
return msg
//Helper procedure. Called by /mob/living/carbon/human/examine() and /mob/living/carbon/human/Topic() to determine HUD access to security and medical records.
/proc/hasHUD(mob/M as mob, hudtype)
+17 -20
View File
@@ -1,42 +1,39 @@
/mob/living/silicon/ai/examine(mob/user)
if(!..(user))
return
. = ..()
var/msg = ""
if (src.stat == DEAD)
msg += "<span class='deadsay'>It appears to be powered-down.</span>\n"
. += "<span class='deadsay'>It appears to be powered-down.</span>"
else
msg += "<span class='warning'>"
if (src.getBruteLoss())
if (src.getBruteLoss() < 30)
msg += "It looks slightly dented.\n"
. += "<span class='warning'>It looks slightly dented.</span>"
else
msg += "<B>It looks severely dented!</B>\n"
. += "<span class='warning'><B>It looks severely dented!</B></span>"
if (src.getFireLoss())
if (src.getFireLoss() < 30)
msg += "It looks slightly charred.\n"
. += "<span class='warning'>It looks slightly charred.</span>"
else
msg += "<B>Its casing is melted and heat-warped!</B>\n"
. += "<span class='warning'><B>Its casing is melted and heat-warped!</B></span>"
if (src.getOxyLoss() && (aiRestorePowerRoutine != 0 && !APU_power))
if (src.getOxyLoss() > 175)
msg += "<B>It seems to be running on backup power. Its display is blinking a \"BACKUP POWER CRITICAL\" warning.</B>\n"
. += "<span class='warning'><B>It seems to be running on backup power. Its display is blinking a \"BACKUP POWER CRITICAL\" warning.</B></span>"
else if(src.getOxyLoss() > 100)
msg += "<B>It seems to be running on backup power. Its display is blinking a \"BACKUP POWER LOW\" warning.</B>\n"
. += "<span class='warning'><B>It seems to be running on backup power. Its display is blinking a \"BACKUP POWER LOW\" warning.</B></span>"
else
msg += "It seems to be running on backup power.\n"
. += "<span class='warning'>It seems to be running on backup power.</span>"
if (src.stat == UNCONSCIOUS)
msg += "It is non-responsive and displaying the text: \"RUNTIME: Sensory Overload, stack 26/3\".\n"
msg += "</span>"
. += "<span class='warning'>It is non-responsive and displaying the text: \"RUNTIME: Sensory Overload, stack 26/3\".</span>"
if(deployed_shell)
msg += "The wireless networking light is blinking.\n"
msg += "*---------*"
. += "The wireless networking light is blinking."
. += "*---------*"
if(hardware && (hardware.owner == src))
msg += "<br>"
msg += hardware.get_examine_desc()
to_chat(user,msg)
. += hardware.get_examine_desc()
user.showLaws(src)
return
/mob/proc/showLaws(var/mob/living/silicon/S)
return
+12 -7
View File
@@ -1,9 +1,9 @@
/mob/living/silicon/pai/examine(mob/user)
..(user, infix = ", personal AI")
. = ..(user, infix = ", personal AI")
var/msg = ""
switch(src.stat)
if(CONSCIOUS)
<<<<<<< HEAD
if(!src.client) msg += "\nIt appears to be in stand-by mode.\n" //afk
if(UNCONSCIOUS) msg += "\n<span class='warning'>It doesn't seem to be responding.</span>\n"
if(DEAD) msg += "\n<span class='deadsay'>It looks completely unsalvageable.</span>\n"
@@ -15,12 +15,17 @@
// VOREStation Edit: End
msg += "\n*---------*"
=======
if(!src.client) . += "It appears to be in stand-by mode." //afk
if(UNCONSCIOUS) . += "<span class='warning'>It doesn't seem to be responding.</span>"
if(DEAD) . += "<span class='deadsay'>It looks completely unsalvageable.</span>"
. += "*---------*"
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)
if(print_flavor_text()) msg += "\n[print_flavor_text()]\n"
if(print_flavor_text()) . += "\n[print_flavor_text()]\n"
if (pose)
if( findtext(pose,".",length(pose)) == 0 && findtext(pose,"!",length(pose)) == 0 && findtext(pose,"?",length(pose)) == 0 )
if(!findtext(pose, regex("\[.?!]$"))) // Will be zero if the last character is not a member of [.?!]
pose = addtext(pose,".") //Makes sure all emotes end with a period.
msg += "\nIt is [pose]"
to_chat(user,msg)
. += "<br>It is [pose]" //Extra <br> intentional
@@ -29,10 +29,10 @@
var/force_holder = null //
/obj/item/weapon/gripper/examine(mob/user)
..()
. = ..()
if(wrapped)
to_chat(user, "<span class='notice'>\The [src] is holding \the [wrapped].</span>")
wrapped.examine(user)
. += "<span class='notice'>\The [src] is holding \the [wrapped].</span>"
. += wrapped.examine(user)
/obj/item/weapon/gripper/CtrlClick(mob/user)
drop_item()
@@ -63,9 +63,9 @@
visible_message("\The [src] voices a strident beep, indicating a drone chassis is prepared.")
/obj/machinery/drone_fabricator/examine(mob/user)
..(user)
. = ..()
if(produce_drones && drone_progress >= 100 && istype(user,/mob/observer/dead) && config.allow_drone_spawn && count_drones() < config.max_maint_drones)
to_chat(user, "<BR><B>A drone is prepared. Select 'Join As Drone' from the Ghost tab to spawn as a maintenance drone.</B>")
. += "<br><B>A drone is prepared. Select 'Join As Drone' from the Ghost tab to spawn as a maintenance drone.</B>"
/obj/machinery/drone_fabricator/proc/create_drone(var/client/player)
@@ -1,34 +1,32 @@
/mob/living/silicon/robot/examine(mob/user)
var/custom_infix = custom_name ? ", [modtype] [braintype]" : ""
..(user, infix = custom_infix)
. = ..(user, infix = custom_infix)
var/msg = ""
msg += "<span class='warning'>"
if (src.getBruteLoss())
if (src.getBruteLoss() < 75)
msg += "It looks slightly dented.\n"
. += "<span class='warning'>It looks slightly dented.</span>"
else
msg += "<B>It looks severely dented!</B>\n"
. += "<span class='warning'><B>It looks severely dented!</B></span>"
if (src.getFireLoss())
if (src.getFireLoss() < 75)
msg += "It looks slightly charred.\n"
. += "<span class='warning'>It looks slightly charred.</span>"
else
msg += "<B>It looks severely burnt and heat-warped!</B>\n"
msg += "</span>"
. += "<span class='warning'><B>It looks severely burnt and heat-warped!</B></span>"
if(opened)
msg += "<span class='warning'>Its cover is open and the power cell is [cell ? "installed" : "missing"].</span>\n"
. += "<span class='warning'>Its cover is open and the power cell is [cell ? "installed" : "missing"].</span>"
else
msg += "Its cover is closed.\n"
. += "Its cover is closed."
if(!has_power)
msg += "<span class='warning'>It appears to be running on backup power.</span>\n"
. += "<span class='warning'>It appears to be running on backup power.</span>"
switch(src.stat)
if(CONSCIOUS)
if(shell)
msg += "It appears to be an [deployed ? "active" : "empty"] AI shell.\n"
. += "It appears to be an [deployed ? "active" : "empty"] AI shell."
else if(!src.client)
<<<<<<< HEAD
msg += "It appears to be in stand-by mode.\n" //afk
if(UNCONSCIOUS) msg += "<span class='warning'>It doesn't seem to be responding.</span>\n"
if(DEAD) msg += "<span class='deadsay'>It looks completely unsalvageable.</span>\n"
@@ -40,14 +38,18 @@
// VOREStation Edit: End
msg += "*---------*"
=======
. += "It appears to be in stand-by mode." //afk
if(UNCONSCIOUS) . += "<span class='warning'>It doesn't seem to be responding.</span>"
if(DEAD) . += "<span class='deadsay'>It looks completely unsalvageable.</span>"
. += "*---------*"
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)
if(print_flavor_text()) msg += "\n[print_flavor_text()]\n"
if(print_flavor_text()) . += "<br>[print_flavor_text()]"
if (pose)
if( findtext(pose,".",length(pose)) == 0 && findtext(pose,"!",length(pose)) == 0 && findtext(pose,"?",length(pose)) == 0 )
if(!findtext(pose, regex("\[.?!]$"))) // Will be zero if the last character is not a member of [.?!]
pose = addtext(pose,".") //Makes sure all emotes end with a period.
msg += "\nIt is [pose]"
. += "<br>It is [pose]" //Extra <br> intentional
to_chat(user,msg)
user.showLaws(src)
return
@@ -430,10 +430,9 @@
max_doors = 5
/obj/item/weapon/inflatable_dispenser/examine(var/mob/user)
if(!..(user))
return
to_chat(user, "It has [stored_walls] wall segment\s and [stored_doors] door segment\s stored.")
to_chat(user, "It is set to deploy [mode ? "doors" : "walls"]")
. = ..()
. += "It has [stored_walls] wall segment\s and [stored_doors] door segment\s stored."
. += "It is set to deploy [mode ? "doors" : "walls"]"
/obj/item/weapon/inflatable_dispenser/attack_self()
mode = !mode
@@ -1,3 +1,4 @@
<<<<<<< HEAD
// Parrots can talk, and may repeat things it hears.
/mob/living/simple_mob/animal/passive/bird/parrot
name = "parrot"
@@ -249,4 +250,257 @@
if(holder.stat || !holder.say_list || !message || speaker == holder)
return
var/datum/say_list/S = holder.say_list
=======
// Parrots can talk, and may repeat things it hears.
/mob/living/simple_mob/animal/passive/bird/parrot
name = "parrot"
description_info = "You can give it a headset by clicking on it with a headset. \
To remove it, click the bird while on grab intent."
has_langs = list("Galactic Common", "Bird")
ai_holder_type = /datum/ai_holder/simple_mob/passive/parrot
// A headset, so that talking parrots can yell at the crew over comms.
// If set to a type, on initialize it will be instantiated into that type.
var/obj/item/device/radio/headset/my_headset = null
// Say list
/datum/say_list/bird/poly
speak = list(
"Poly wanna cracker!",
"Check the singulo, you chucklefucks!",
"Wire the solars, you lazy bums!",
"WHO TOOK THE DAMN HARDSUITS?",
"OH GOD ITS FREE CALL THE SHUTTLE",
"Danger! Crystal hyperstructure instability!",
"CRYSTAL DELAMINATION IMMINENT.",
"Tweet tweet, I'm a Teshari.",
"Chitters.",
"Meteors have been detected on a collision course with the station!"
)
// Lets the AI use headsets.
// Player-controlled parrots will need to do it manually.
/mob/living/simple_mob/animal/passive/bird/parrot/ISay(message)
if(my_headset && prob(50))
var/list/keys = list()
for(var/channel in my_headset.channels)
var/key = get_radio_key_from_channel(channel)
if(key)
keys += key
if(keys.len)
var/key_used = pick(keys)
return say("[key_used] [message]")
return say(message)
// Ugly saycode so parrots can use their headsets.
/mob/living/simple_mob/animal/passive/bird/parrot/handle_message_mode(message_mode, message, verb, speaking, used_radios)
..()
if(message_mode)
if(my_headset && istype(my_headset, /obj/item/device/radio))
my_headset.talk_into(src, message, message_mode, verb, speaking)
used_radios += my_headset
// Clicked on while holding an object.
/mob/living/simple_mob/animal/passive/bird/parrot/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/device/radio/headset))
give_headset(I, user)
return
return ..()
// Clicked on by empty hand.
/mob/living/simple_mob/animal/passive/bird/parrot/attack_hand(mob/living/L)
if(L.a_intent == I_GRAB && my_headset)
remove_headset(L)
else
..()
/mob/living/simple_mob/animal/passive/bird/parrot/proc/give_headset(obj/item/device/radio/headset/new_headset, mob/living/user)
if(!istype(new_headset))
to_chat(user, span("warning", "\The [new_headset] isn't a headset."))
return
if(my_headset)
to_chat(user, span("warning", "\The [src] is already wearing \a [my_headset]."))
return
else
user.drop_item(new_headset)
my_headset = new_headset
new_headset.forceMove(src)
to_chat(user, span("warning", "You place \a [new_headset] on \the [src]. You monster."))
to_chat(src, span("notice", "\The [user] gives you \a [new_headset]. You should put it to good use immediately."))
return
/mob/living/simple_mob/animal/passive/bird/parrot/proc/remove_headset(mob/living/user)
if(!my_headset)
to_chat(user, "<span class='warning'>\The [src] doesn't have a headset to remove, thankfully.</span>")
else
ISay("BAWWWWWK LEAVE THE HEADSET BAWKKKKK!")
my_headset.forceMove(get_turf(src))
user.put_in_hands(my_headset)
to_chat(user, span("notice", "You take away \the [src]'s [my_headset.name]. Finally."))
to_chat(src, span("warning", "\The [user] takes your [my_headset.name] away! How cruel!"))
my_headset = null
/mob/living/simple_mob/animal/passive/bird/parrot/examine(mob/user)
. = ..()
if(my_headset)
. += "It is wearing \a [my_headset]."
/mob/living/simple_mob/animal/passive/bird/parrot/Initialize()
if(my_headset)
my_headset = new my_headset(src)
return ..()
// Subtypes.
// Best Bird
/mob/living/simple_mob/animal/passive/bird/parrot/poly
name = "Poly"
desc = "It's a parrot. An expert on quantum cracker theory."
icon_state = "poly"
icon_rest = "poly-held"
icon_dead = "poly-dead"
tt_desc = "E Ara macao"
my_headset = /obj/item/device/radio/headset/headset_eng
say_list_type = /datum/say_list/bird/poly
// Best Bird with best headset.
/mob/living/simple_mob/animal/passive/bird/parrot/poly/ultimate
my_headset = /obj/item/device/radio/headset/omni
/mob/living/simple_mob/animal/passive/bird/parrot/kea
name = "kea"
desc = "A species of parrot. On Earth, they are unique among other parrots for residing in alpine climates. \
They are known to be intelligent and curious, which has made some consider them a pest."
icon_state = "kea"
icon_rest = "kea-held"
icon_dead = "kea-dead"
tt_desc = "E Nestor notabilis"
/mob/living/simple_mob/animal/passive/bird/parrot/eclectus
name = "eclectus"
desc = "A species of parrot, this species features extreme sexual dimorphism in their plumage's colors. \
A male eclectus has emerald green plumage, where as a female eclectus has red and purple plumage."
icon_state = "eclectus"
icon_rest = "eclectus-held"
icon_dead = "eclectus-dead"
tt_desc = "E Eclectus roratus"
/mob/living/simple_mob/animal/passive/bird/parrot/eclectus/Initialize()
gender = pick(MALE, FEMALE)
if(gender == FEMALE)
icon_state = "eclectusf"
icon_rest = "eclectusf-held"
icon_dead = "eclectusf-dead"
return ..()
/mob/living/simple_mob/animal/passive/bird/parrot/grey_parrot
name = "grey parrot"
desc = "A species of parrot. This one is predominantly grey, but has red tail feathers."
icon_state = "agrey"
icon_rest = "agrey-held"
icon_dead = "agrey-dead"
tt_desc = "E Psittacus erithacus"
/mob/living/simple_mob/animal/passive/bird/parrot/black_headed_caique
name = "black-headed caique"
desc = "A species of parrot, these birds have a distinct black color on their heads, distinguishing them from their relative Caiques."
icon_state = "bcaique"
icon_rest = "bcaique-held"
icon_dead = "bcaique-dead"
tt_desc = "E Pionites melanocephalus"
/mob/living/simple_mob/animal/passive/bird/parrot/white_caique
name = "white-bellied caique"
desc = "A species of parrot, they are also known as the Green-Thighed Parrot."
icon_state = "wcaique"
icon_rest = "wcaique-held"
icon_dead = "wcaique-dead"
tt_desc = "E Pionites leucogaster"
/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar
name = "budgerigar"
desc = "A species of parrot, they are also known as the common parakeet, or in some circles, the budgie. \
This one is has its natural colors of green and yellow."
icon_state = "gbudge"
icon_rest = "gbudge-held"
icon_dead = "gbudge-dead"
tt_desc = "E Melopsittacus undulatus"
/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/blue
icon_state = "bbudge"
icon_rest = "bbudge-held"
icon_dead = "bbudge-dead"
desc = "A species of parrot, they are also known as the common parakeet, or in some circles, the budgie. \
This one has a mutation which altered its color to be blue instead of green and yellow."
/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/bluegreen
icon_state = "bgbudge"
icon_rest = "bgbudge-held"
icon_dead = "bgbudge-dead"
desc = "A species of parrot, they are also known as the common parakeet, or in some circles, the budgie. \
This one has a mutation which altered its color to be a mix of blue and green."
/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel
name = "cockatiel"
desc = "A species of parrot. This one has a highly visible crest."
icon_state = "tiel"
icon_rest = "tiel-held"
icon_dead = "tiel-dead"
tt_desc = "E Nymphicus hollandicus"
/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/white
icon_state = "wtiel"
icon_rest = "wtiel-held"
icon_dead = "wtiel-dead"
/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/yellowish
icon_state = "luttiel"
icon_rest = "luttiel-held"
icon_dead = "luttiel-dead"
/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/grey
icon_state = "blutiel" // idk why this is blu.
icon_rest = "blutiel-held"
icon_dead = "blutiel-dead"
// This actually might be the yellow-crested cockatoo but idk.
/mob/living/simple_mob/animal/passive/bird/parrot/sulphur_cockatoo
name = "sulphur-crested cockatoo"
desc = "A species of parrot. This one has an expressive yellow crest. Their underwing and tail feathers are also yellow."
icon_state = "too"
icon_rest = "too-held"
icon_dead = "too-dead"
tt_desc = "E Cacatua galerita"
// This was originally called 'hooded_too', which might not mean the unbrella cockatoo but idk.
/mob/living/simple_mob/animal/passive/bird/parrot/white_cockatoo
name = "white cockatoo"
desc = "A species of parrot. This one is also known as the Umbrella Cockatoo, due to the semicircular shape of its crest."
icon_state = "utoo"
icon_rest = "utoo-held"
icon_dead = "utoo-dead"
tt_desc = "E Cacatua alba"
/mob/living/simple_mob/animal/passive/bird/parrot/pink_cockatoo
name = "pink cockatoo"
desc = "A species of parrot. This one is also known as Major Mitchell's cockatoo, \
in honor of a human surveyor and explorer who existed before humans fully explored their home planet."
icon_state = "mtoo"
icon_rest = "mtoo-held"
icon_dead = "mtoo-dead"
tt_desc = "E Lophochroa leadbeateri"
// AI
/datum/ai_holder/simple_mob/passive/parrot
speak_chance = 2
base_wander_delay = 8
/datum/ai_holder/simple_mob/passive/parrot/on_hear_say(mob/living/speaker, message)
if(holder.stat || !holder.say_list || !message || speaker == holder)
return
var/datum/say_list/S = holder.say_list
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)
S.speak |= message
@@ -41,9 +41,9 @@
// this is to prevent easy checks from the opposing force.
/mob/living/simple_mob/illusion/examine(mob/user)
if(copying)
copying.examine(user)
return
..()
return copying.examine(user)
else
return list("???")
/mob/living/simple_mob/illusion/bullet_act(obj/item/projectile/P)
if(!P)
@@ -133,18 +133,13 @@
return ..()
/mob/living/simple_mob/construct/examine(mob/user)
..(user)
var/msg = "<span cass='info'>*---------*\nThis is [bicon(src)] \a <EM>[src]</EM>!\n"
if (src.health < src.getMaxHealth())
msg += "<span class='warning'>"
if (src.health >= src.getMaxHealth()/2)
msg += "It looks slightly dented.\n"
. = ..(user)
var/max = getMaxHealth()
if (health < max)
if (health >= max/2)
. += "<span class='warning'>It looks slightly dented.</span>"
else
msg += "<B>It looks severely dented!</B>\n"
msg += "</span>"
msg += "*---------*</span>"
to_chat(user,msg)
. += "<span class='warning'><B>It looks severely dented!</B></span>"
//Constructs levitate, can fall from a shuttle with no harm, and are piloted by either damned spirits or some otherworldly entity. Let 'em float in space.
/mob/living/simple_mob/construct/Process_Spacemove()
@@ -1,3 +1,4 @@
<<<<<<< HEAD
// These slimes have the mechanics xenobiologists care about, such as reproduction, mutating into new colors, and being able to submit through fear.
/mob/living/simple_mob/slime/xenobio
@@ -276,3 +277,283 @@
lines.Add(description_info)
return lines.Join("\n")
=======
// These slimes have the mechanics xenobiologists care about, such as reproduction, mutating into new colors, and being able to submit through fear.
/mob/living/simple_mob/slime/xenobio
desc = "The most basic of slimes. The grey slime has no remarkable qualities, however it remains one of the most useful colors for scientists."
layer = MOB_LAYER + 1 // Need them on top of other mobs or it looks weird when consuming something.
ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime // This should never be changed for xenobio slimes.
var/is_adult = FALSE // Slimes turn into adults when fed enough. Adult slimes are somewhat stronger, and can reproduce if fed enough.
var/maxHealth_adult = 200
var/power_charge = 0 // Disarm attacks can shock someone if high/lucky enough.
var/mob/living/victim = null // the person the slime is currently feeding on
var/rainbow_core_candidate = TRUE // If false, rainbow cores cannot make this type randomly.
var/mutation_chance = 25 // Odds of spawning as a new color when reproducing. Can be modified by certain xenobio products. Carried across generations of slimes.
var/list/slime_mutation = list(
/mob/living/simple_mob/slime/xenobio/orange,
/mob/living/simple_mob/slime/xenobio/metal,
/mob/living/simple_mob/slime/xenobio/blue,
/mob/living/simple_mob/slime/xenobio/purple
)
var/amount_grown = 0 // controls how long the slime has been overfed, if 10, grows or reproduces
var/number = 0 // This is used to make the slime semi-unique for indentification.
var/harmless = FALSE // Set to true when pacified. Makes the slime harmless, not get hungry, and not be able to grow/reproduce.
/mob/living/simple_mob/slime/xenobio/Initialize(mapload, var/mob/living/simple_mob/slime/xenobio/my_predecessor)
ASSERT(ispath(ai_holder_type, /datum/ai_holder/simple_mob/xenobio_slime))
number = rand(1, 1000)
update_name()
. = ..() // This will make the AI and do the other mob constructor things. It will also return the default hint at the end.
if(my_predecessor)
inherit_information(my_predecessor)
/mob/living/simple_mob/slime/xenobio/Destroy()
if(victim)
stop_consumption() // Unbuckle us from our victim.
return ..()
// Called when a slime makes another slime by splitting. The predecessor slime will be deleted shortly afterwards.
/mob/living/simple_mob/slime/xenobio/proc/inherit_information(var/mob/living/simple_mob/slime/xenobio/predecessor)
if(!predecessor)
return
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
var/datum/ai_holder/simple_mob/xenobio_slime/previous_AI = predecessor.ai_holder
ASSERT(istype(AI))
ASSERT(istype(previous_AI))
// Now to transfer the information.
// Newly made slimes are bit more rebellious than their predecessors, but they also somewhat forget the atrocities the xenobiologist may have done.
AI.discipline = max(previous_AI.discipline - 1, 0)
AI.obedience = max(previous_AI.obedience - 1, 0)
AI.resentment = max(previous_AI.resentment - 1, 0)
AI.rabid = previous_AI.rabid
/mob/living/simple_mob/slime/xenobio/update_icon()
icon_living = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"][victim ? " eating" : ""]"
icon_dead = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"] dead"
icon_rest = icon_dead
..() // This will apply the correct icon_state and do the other overlay-related things.
/mob/living/simple_mob/slime/xenobio/handle_special()
if(stat != DEAD)
handle_nutrition()
if(victim)
handle_consumption()
handle_stuttering() // ??
..()
/mob/living/simple_mob/slime/xenobio/examine(mob/user)
. = ..()
if(hat)
. += "It is wearing \a [hat]."
if(stat == DEAD)
. += "It appears to be dead."
else if(incapacitated(INCAPACITATION_DISABLED))
. += "It appears to be incapacitated."
else if(harmless)
. += "It appears to have been pacified."
else
if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
if(AI.rabid)
. += "It seems very, very angry and upset."
else if(AI.obedience >= 5)
. += "It looks rather obedient."
else if(AI.discipline)
. += "It has been subjugated by force, at least for now."
/mob/living/simple_mob/slime/xenobio/proc/make_adult()
if(is_adult)
return
is_adult = TRUE
melee_damage_lower = round(melee_damage_lower * 2) // 20
melee_damage_upper = round(melee_damage_upper * 2) // 30
maxHealth = maxHealth_adult
amount_grown = 0
update_icon()
update_name()
/mob/living/simple_mob/slime/xenobio/proc/update_name()
if(harmless) // Docile slimes are generally named, so we shouldn't mess with it.
return
name = "[slime_color] [is_adult ? "adult" : "baby"] [initial(name)] ([number])"
real_name = name
/mob/living/simple_mob/slime/xenobio/update_mood()
var/old_mood = mood
if(incapacitated(INCAPACITATION_DISABLED))
mood = "sad"
else if(harmless)
mood = ":33"
else if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
if(AI.rabid)
mood = "angry"
else if(AI.target)
mood = "mischevous"
else if(AI.discipline)
mood = "pout"
else
mood = ":3"
else
mood = ":3"
if(old_mood != mood)
update_icon()
/mob/living/simple_mob/slime/xenobio/proc/enrage()
if(harmless)
return
if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
AI.enrage()
/mob/living/simple_mob/slime/xenobio/proc/pacify()
harmless = TRUE
if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
AI.pacify()
faction = "neutral"
// If for whatever reason the mob AI (or player) decides to try to attack something anyways.
melee_damage_upper = 0
melee_damage_lower = 0
update_mood()
// These are verbs so that player slimes can evolve/split.
/mob/living/simple_mob/slime/xenobio/verb/evolve()
set category = "Slime"
set desc = "This will let you evolve from baby to adult slime."
if(stat)
to_chat(src, span("warning", "I must be conscious to do this..."))
return
if(harmless)
to_chat(src, span("warning", "I have been pacified. I cannot evolve..."))
return
if(!is_adult)
if(amount_grown >= 10)
make_adult()
else
to_chat(src, span("warning", "I am not ready to evolve yet..."))
else
to_chat(src, span("warning", "I have already evolved..."))
/mob/living/simple_mob/slime/xenobio/verb/reproduce()
set category = "Slime"
set desc = "This will make you split into four new slimes."
if(stat)
to_chat(src, span("warning", "I must be conscious to do this..."))
return
if(harmless)
to_chat(src, span("warning", "I have been pacified. I cannot reproduce..."))
return
if(is_adult)
if(amount_grown >= 10)
// Check if there's enough 'room' to split.
var/list/nearby_things = orange(1, src)
var/free_tiles = 0
for(var/turf/T in nearby_things)
var/free = TRUE
if(T.density) // No walls.
continue
for(var/atom/movable/AM in T)
if(AM.density)
free = FALSE
break
if(free)
free_tiles++
if(free_tiles < 3) // Three free tiles are needed, as four slimes are made and the 4th tile is from the center tile that the current slime occupies.
to_chat(src, span("warning", "It is too cramped here to reproduce..."))
return
var/list/babies = list()
for(var/i = 1 to 4)
babies.Add(make_new_slime())
var/mob/living/simple_mob/slime/new_slime = pick(babies)
new_slime.universal_speak = universal_speak
if(src.mind)
src.mind.transfer_to(new_slime)
else
new_slime.key = src.key
qdel(src)
else
to_chat(src, span("warning", "I am not ready to reproduce yet..."))
else
to_chat(src, span("warning", "I have not evolved enough to reproduce yet..."))
// Used when reproducing or dying.
/mob/living/simple_mob/slime/xenobio/proc/make_new_slime(var/desired_type)
var/t = src.type
if(desired_type)
t = desired_type
if(prob(mutation_chance / 10))
t = /mob/living/simple_mob/slime/xenobio/rainbow
else if(prob(mutation_chance) && slime_mutation.len)
t = slime_mutation[rand(1, slime_mutation.len)]
var/mob/living/simple_mob/slime/xenobio/baby = new t(loc, src)
// Handle 'inheriting' from parent slime.
baby.mutation_chance = mutation_chance
baby.power_charge = round(power_charge / 4)
if(!istype(baby, /mob/living/simple_mob/slime/xenobio/rainbow))
baby.unity = unity
baby.faction = faction
baby.friends = friends.Copy()
step_away(baby, src)
return baby
/mob/living/simple_mob/slime/xenobio/get_description_interaction()
var/list/results = list()
if(!stat)
results += "[desc_panel_image("slimebaton")]to stun the slime, if it's being bad."
results += ..()
return results
/mob/living/simple_mob/slime/xenobio/get_description_info()
var/list/lines = list()
var/intro_line = "Slimes are generally the test subjects of Xenobiology, with different colors having different properties. \
They can be extremely dangerous if not handled properly."
lines.Add(intro_line)
lines.Add(null) // To pad the line breaks.
var/list/rewards = list()
for(var/potential_color in slime_mutation)
var/mob/living/simple_mob/slime/S = potential_color
rewards.Add(initial(S.slime_color))
var/reward_line = "This color of slime can mutate into [english_list(rewards)] colors, when it reproduces. It will do so when it has eatten enough."
lines.Add(reward_line)
lines.Add(null)
lines.Add(description_info)
return lines.Join("\n")
>>>>>>> 6c6644f... Rewrite examine() to pass a list around (#7038)
+4 -1
View File
@@ -237,7 +237,10 @@
return 1
face_atom(A)
A.examine(src)
var/list/results = A.examine(src)
if(!results || !results.len)
results = list("You were unable to examine that. Tell a developer!")
to_chat(src, jointext(results, "<br>"))
/mob/verb/pointed(atom/A as mob|obj|turf in view())
set name = "Point To"
@@ -1,9 +1,9 @@
/obj/item/modular_computer/examine(var/mob/user)
. = ..()
if(damage > broken_damage)
to_chat(user, "<span class='danger'>It is heavily damaged!</span>")
. += "<span class='danger'>It is heavily damaged!</span>"
else if(damage)
to_chat(user, "It is damaged.")
. += "It is damaged."
/obj/item/modular_computer/proc/break_apart()
visible_message("\The [src] breaks apart!")
@@ -75,11 +75,11 @@
/obj/item/weapon/computer_hardware/examine(var/mob/user)
. = ..()
if(damage > damage_failure)
to_chat(user, "<span class='danger'>It seems to be severely damaged!</span>")
. += "<span class='danger'>It seems to be severely damaged!</span>"
else if(damage > damage_malfunction)
to_chat(user, "<span class='notice'>It seems to be damaged!</span>")
. += "<span class='notice'>It seems to be damaged!</span>"
else if(damage)
to_chat(user, "It seems to be slightly damaged.")
. += "It seems to be slightly damaged."
// Damages the component. Contains necessary checks. Negative damage "heals" the component.
/obj/item/weapon/computer_hardware/take_damage(var/amount)
+3 -2
View File
@@ -70,11 +70,12 @@
O.hide(0)
/turf/simulated/open/examine(mob/user, distance, infix, suffix)
if(..(user, 2))
. = ..()
if(Adjacent(user))
var/depth = 1
for(var/T = GetBelow(src); isopenspace(T); T = GetBelow(T))
depth += 1
to_chat(user, "It is about [depth] levels deep.")
. += "It is about [depth] levels deep."
/**
* Update icon and overlays of open space to be that of the turf below, plus any visible objects on that turf.
+1 -1
View File
@@ -37,7 +37,7 @@
if(!owner)
// The only time we should have a null owner is if we are in nullspace. Help figure out why we were examined.
crash_with("[src] ([type]) @ [log_info_line()] was examined by [user] @ [global.log_info_line(user)]")
return
return list()
return owner.examine(user, distance, infix, suffix)
// Relay some stuff they hear
+3 -3
View File
@@ -113,11 +113,11 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain)
callHook("debrain", list(brainmob))
/obj/item/organ/internal/brain/examine(mob/user) // -- TLE
..(user)
. = ..()
if(brainmob && brainmob.client)//if thar be a brain inside... the brain.
to_chat(user, "You can feel the small spark of life still left in this one.")
. += "You can feel the small spark of life still left in this one."
else
to_chat(user, "This one seems particularly lifeless. Perhaps it will regain some of its luster later..")
. += "This one seems particularly lifeless. Perhaps it will regain some of its luster later..."
/obj/item/organ/internal/brain/removed(var/mob/living/user)
+2 -2
View File
@@ -158,9 +158,9 @@ var/list/organ_cache = list()
handle_germ_effects()
/obj/item/organ/examine(mob/user)
..(user)
. = ..()
if(status & ORGAN_DEAD)
to_chat(user, "<span class='notice'>The decay has set in.</span>")
. += "<span class='notice'>Decay appears to have set in.</span>"
//A little wonky: internal organs stop calling this (they return early in process) when dead, but external ones cause further damage when dead
/obj/item/organ/proc/handle_germ_effects()
+2 -3
View File
@@ -146,13 +146,12 @@
return ..()
/obj/item/organ/external/examine()
..()
. = ..()
if(in_range(usr, src) || istype(usr, /mob/observer/dead))
for(var/obj/item/I in contents)
if(istype(I, /obj/item/organ))
continue
to_chat(usr, "<span class='danger'>There is \a [I] sticking out of it.</span>")
return
. += "<span class='danger'>There is \a [I] sticking out of it.</span>"
/obj/item/organ/external/attackby(obj/item/weapon/W as obj, mob/living/user as mob)
switch(stage)
@@ -165,13 +165,13 @@
/obj/machinery/shipsensors/examine(mob/user)
. = ..()
if(health <= 0)
to_chat(user, "\The [src] is wrecked.")
. += "<span class='danger'>It is wrecked.</span>"
else if(health < max_health * 0.25)
to_chat(user, "<span class='danger'>\The [src] looks like it's about to break!</span>")
. += "<span class='danger'>It looks like it's about to break!</span>"
else if(health < max_health * 0.5)
to_chat(user, "<span class='danger'>\The [src] looks seriously damaged!</span>")
. += "<span class='danger'>It looks seriously damaged!</span>"
else if(health < max_health * 0.75)
to_chat(user, "\The [src] shows signs of damage!")
. += "It shows signs of damage!"
/obj/machinery/shipsensors/bullet_act(var/obj/item/projectile/Proj)
take_damage(Proj.get_structure_damage())
+2 -3
View File
@@ -142,12 +142,11 @@
free_space -= length(strip_html_properly(new_text))
/obj/item/weapon/paper/examine(mob/user)
..()
. = ..()
if(in_range(user, src) || istype(user, /mob/observer/dead))
show_content(usr)
else
to_chat(user, "<span class='notice'>You have to go closer if you want to read it.</span>")
return
. += "<span class='notice'>You have to go closer if you want to read it.</span>"
/obj/item/weapon/paper/proc/show_content(var/mob/user, var/forceshow=0)
if(!(istype(user, /mob/living/carbon/human) || istype(user, /mob/observer/dead) || istype(user, /mob/living/silicon)) && !forceshow)
+4 -4
View File
@@ -96,11 +96,11 @@
to_chat(user, "<font color='red'>You must hold \the [P] steady to burn \the [src].</font>")
/obj/item/weapon/paper_bundle/examine(mob/user)
if(..(user, 1))
src.show_content(user)
. = ..()
if(Adjacent(user))
show_content(user)
else
to_chat(user, "<span class='notice'>It is too far away.</span>")
return
. += "<span class='notice'>It is too far away.</span>"
/obj/item/weapon/paper_bundle/proc/show_content(mob/user as mob)
var/dat
+4 -5
View File
@@ -94,13 +94,12 @@
/obj/item/weapon/paper_bin/examine(mob/user)
if(get_dist(src, user) <= 1)
. = ..()
if(Adjacent(user))
if(amount)
to_chat(user, "<span class='notice'>There " + (amount > 1 ? "are [amount] papers" : "is one paper") + " in the bin.</span>")
. += "<span class='notice'>There " + (amount > 1 ? "are [amount] papers" : "is one paper") + " in the bin.</span>"
else
to_chat(user, "<span class='notice'>There are no papers in the bin.</span>")
return
. += "<span class='notice'>There are no papers in the bin.</span>"
/obj/item/weapon/paper_bin/update_icon()
if(amount < 1)
+3 -2
View File
@@ -26,8 +26,9 @@
RefreshParts()
/obj/machinery/photocopier/examine(mob/user as mob)
if(..(user, 1))
to_chat(user, "The screen shows there's [toner ? "[toner]" : "no"] toner left in the printer.")
. = ..()
if(Adjacent(user))
. += "The screen shows there's [toner ? "[toner]" : "no"] toner left in the printer."
/obj/machinery/photocopier/attack_ai(mob/user as mob)
return attack_hand(user)
+3 -2
View File
@@ -51,11 +51,12 @@ var/global/photo_count = 0
..()
/obj/item/weapon/photo/examine(mob/user)
//This is one time we're not going to call parent, because photos are 'secret' unless you're close enough.
if(in_range(user, src))
show(user)
to_chat(user,desc)
return list(desc)
else
to_chat(user, "<span class='notice'>It is too far away.</span>")
return list("<span class='notice'>It is too far away to examine.</span>")
/obj/item/weapon/photo/proc/show(mob/user as mob)
user << browse_rsc(img, "tmp_photo_[id].png")
+3 -2
View File
@@ -68,8 +68,9 @@
/obj/item/weapon/fuel/examine(mob/user)
if(get_dist(src, user) <= 1)
to_chat(user, "A magnetic storage ring, it contains [fuel]kg of [content ? content : "nothing"].")
. = ..()
if(Adjacent(user))
. += "It contains [fuel]kg of [content ? content : "nothing"]."
/obj/item/weapon/fuel/proc/injest(mob/M as mob)
switch(content)
+13 -12
View File
@@ -251,29 +251,30 @@
src.update()
/obj/machinery/power/apc/examine(mob/user)
if(..(user, 1))
. = ..()
if(Adjacent(user))
if(stat & BROKEN)
to_chat(user, "This APC is broken.")
return
if(opened)
. += "This APC is broken."
else if(opened)
if(has_electronics && terminal)
to_chat(user, "The cover is [opened==2?"removed":"open"] and [ cell ? "a power cell is installed" : "the power cell is missing"].")
. += "The cover is [opened == 2 ? "removed" : "open"] and [ cell ? "a power cell is installed" : "the power cell is missing"]."
else if (!has_electronics && terminal)
to_chat(user, "The frame is wired, but the electronics are missing.")
. += "The frame is wired, but the electronics are missing."
else if (has_electronics && !terminal)
to_chat(user, "The electronics are installed, but not wired.")
. += "The electronics are installed, but not wired."
else /* if (!has_electronics && !terminal) */
to_chat(user, "It's just an empty metal frame.")
. += "It's just an empty metal frame."
else
if (wiresexposed)
to_chat(user, "The cover is closed and the wires are exposed.")
. += "The cover is closed and the wires are exposed."
else if ((locked && emagged) || hacker) //Some things can cause locked && emagged. Malf AI causes hacker.
to_chat(user, "The cover is closed, but the panel is unresponsive.")
. += "The cover is closed, but the panel is unresponsive."
else if(!locked && emagged) //Normal emag does this.
to_chat(user, "The cover is closed, but the panel is flashing an error.")
. += "The cover is closed, but the panel is flashing an error."
else
to_chat(user, "The cover is closed.")
. += "The cover is closed."
// update the APC icon to show the three base states
+4 -3
View File
@@ -6,6 +6,7 @@
/obj/machinery/power/breakerbox
name = "Breaker Box"
desc = "Large machine with heavy duty switching circuits used for advanced grid control."
icon = 'icons/obj/power.dmi'
icon_state = "bbox_off"
//directwired = 0
@@ -40,11 +41,11 @@
set_state(1)
/obj/machinery/power/breakerbox/examine(mob/user)
to_chat(user, "Large machine with heavy duty switching circuits used for advanced grid control")
. = ..()
if(on)
to_chat(user, "<font color='green'>It seems to be online.</font>")
. += "<span class='notice'>It seems to be online.</span>"
else
to_chat(user, "<font color='red'>It seems to be offline.</font>")
. += "<span class='warning'>It seems to be offline.</span>"
/obj/machinery/power/breakerbox/attack_ai(mob/user)
if(update_locked)
+8 -17
View File
@@ -609,20 +609,13 @@ obj/structure/cable/proc/cableColor(var/colorC)
w_class = ITEMSIZE_SMALL
/obj/item/stack/cable_coil/examine(mob/user)
var/msg = ""
. = ..()
if(get_amount() == 1)
msg += "A short piece of power cable."
. += "Just a short piece remains."
else if(get_amount() == 2)
msg += "A piece of power cable."
else
msg += "A coil of power cable."
if(get_dist(src, user) <= 1)
msg += " There are [get_amount()] lengths of cable in the coil."
to_chat(user, msg)
. += "Just a couple of short pieces remain."
else if(Adjacent(user))
. += "There are [get_amount()] lengths of cable in the coil."
/obj/item/stack/cable_coil/verb/make_restraint()
set name = "Make Cable Restraints"
@@ -992,12 +985,10 @@ obj/structure/cable/proc/cableColor(var/colorC)
return 0
/obj/item/stack/cable_coil/alien/examine(mob/user)
var/msg = "A spool of cable."
. = ..()
if(get_dist(src, user) <= 1)
msg += " It doesn't seem to have a beginning, or an end."
to_chat(user, msg)
if(Adjacent(user))
. += "It doesn't seem to have a beginning, or an end."
/obj/item/stack/cable_coil/alien/attack_hand(mob/user as mob)
if (user.get_inactive_hand() == src)
+4 -4
View File
@@ -145,10 +145,10 @@
/obj/item/weapon/cell/examine(mob/user)
..()
if(get_dist(src, user) <= 1)
to_chat(user, " It has a power rating of [maxcharge].\nThe charge meter reads [round(src.percent() )]%.")
return
. = ..()
if(Adjacent(user))
. += "It has a power rating of [maxcharge]."
. += "The charge meter reads [round(src.percent() )]%."
/obj/item/weapon/cell/attackby(obj/item/W, mob/user)
..()
+21 -21
View File
@@ -56,23 +56,22 @@ var/global/list/light_type_cache = list()
icon_state = "tube-empty"
/obj/machinery/light_construct/examine(mob/user)
if(!..(user, 2))
return
switch(src.stage)
if(1)
to_chat(user, "It's an empty frame.")
if(2)
to_chat(user, "It's wired.")
if(3)
to_chat(user, "The casing is closed.")
if(cell_connectors)
if(cell)
to_chat(user, "You see [cell] inside the casing.")
. = ..()
if(get_dist(user, src) <= 2)
switch(stage)
if(1)
. += "It's an empty frame."
if(2)
. += "It's wired."
if(3)
. += "The casing is closed."
if(cell_connectors)
if(cell)
. += "You see [cell] inside the casing."
else
. += "The casing has no power cell for backup power."
else
to_chat(user, "The casing has no power cell for backup power.")
else
to_chat(user, "<span class='danger'>This casing doesn't support power cells for backup power.</span>")
. += "<span class='danger'>This casing doesn't support power cells for backup power.</span>"
/obj/machinery/light_construct/attack_hand(mob/user)
. = ..()
@@ -485,18 +484,19 @@ var/global/list/light_type_cache = list()
// examine verb
/obj/machinery/light/examine(mob/user)
. = ..()
var/fitting = get_fitting_name()
switch(status)
if(LIGHT_OK)
to_chat(user, "[desc] It is turned [on? "on" : "off"].")
. += "It is turned [on? "on" : "off"]."
if(LIGHT_EMPTY)
to_chat(user, "[desc] The [fitting] has been removed.")
. += "The [fitting] has been removed."
if(LIGHT_BURNED)
to_chat(user, "[desc] The [fitting] is burnt out.")
. += "The [fitting] is burnt out."
if(LIGHT_BROKEN)
to_chat(user, "[desc] The [fitting] has been smashed.")
. += "The [fitting] has been smashed."
if(cell)
to_chat(user, "Its backup power charge meter reads [round((cell.charge / cell.maxcharge) * 100, 0.1)]%.")
. += "Its backup power charge meter reads [round((cell.charge / cell.maxcharge) * 100, 0.1)]%."
/obj/machinery/light/proc/get_fitting_name()
var/obj/item/weapon/light/L = light_type
+2 -2
View File
@@ -51,8 +51,8 @@
power_gen = round(initial(power_gen) * (max(2, temp_rating) / 2))
examine(mob/user)
..(user)
to_chat(user, "<font color='blue'>The generator has [P.air_contents.phoron] units of fuel left, producing [power_gen] per cycle.</font>")
. = ..()
. += "<span class='notice'>The generator has [P.air_contents.phoron] units of fuel left, producing [power_gen] per cycle.</span>"
handleInactive()
heat -= 2
+11 -11
View File
@@ -48,12 +48,12 @@
return
/obj/machinery/power/port_gen/examine(mob/user)
if(!..(user,1 ))
return
if(active)
to_chat(user, "<span class='notice'>The generator is on.</span>")
else
to_chat(user, "<span class='notice'>The generator is off.</span>")
. = ..()
if(Adjacent(user)) //It literally has a light on the sprite, are you sure this is necessary?
if(active)
. += "<span class='notice'>The generator is on.</span>"
else
. += "<span class='notice'>The generator is off.</span>"
/obj/machinery/power/port_gen/emp_act(severity)
var/duration = 6000 //ten minutes
@@ -144,13 +144,13 @@
power_gen = round(initial(power_gen) * (max(2, temp_rating) / 2))
/obj/machinery/power/port_gen/pacman/examine(mob/user)
..(user)
to_chat(user, "\The [src] appears to be producing [power_gen*power_output] W.")
to_chat(user, "There [sheets == 1 ? "is" : "are"] [sheets] sheet\s left in the hopper.")
. = ..()
. += "It appears to be producing [power_gen*power_output] W."
. += "There [sheets == 1 ? "is" : "are"] [sheets] sheet\s left in the hopper."
if(IsBroken())
to_chat(user, "<span class='warning'>\The [src] seems to have broken down.</span>")
. += "<span class='warning'>It seems to have broken down.</span>"
if(overheating)
to_chat(user, "<span class='danger'>\The [src] is overheating!</span>")
. += "<span class='danger'>It is overheating!</span>"
/obj/machinery/power/port_gen/pacman/HasFuel()
var/needed_sheets = power_output / time_per_sheet
+3 -3
View File
@@ -103,9 +103,9 @@ var/global/list/rad_collectors = list()
return ..()
/obj/machinery/power/rad_collector/examine(mob/user)
if (..(user, 3))
to_chat(user, "The meter indicates that \the [src] is collecting [last_power] W.")
return 1
. = ..()
if(get_dist(user, src) <= 3)
. += "The meter indicates that it is collecting [last_power] W."
/obj/machinery/power/rad_collector/ex_act(severity)
switch(severity)
+4 -4
View File
@@ -267,15 +267,15 @@
qdel(src)
/obj/machinery/power/emitter/examine(mob/user)
..()
. = ..()
var/integrity_percentage = round((integrity / initial(integrity)) * 100)
switch(integrity_percentage)
if(0 to 30)
to_chat(user, "<span class='danger'>\The [src] is close to falling apart!</span>")
. += "<span class='danger'>It is close to falling apart!</span>"
if(31 to 70)
to_chat(user, "<span class='danger'>\The [src] is damaged.</span>")
. += "<span class='danger'>It is damaged.</span>"
if(77 to 99)
to_chat(user, "<span class='warning'>\The [src] is slightly damaged.</span>")
. += "<span class='warning'It is slightly damaged.</span>"
//R-UST port
/obj/machinery/power/emitter/proc/get_initial_fire_delay()
@@ -112,20 +112,17 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
return 1
/obj/structure/particle_accelerator/examine(mob/user)
switch(src.construction_state)
. = ..()
switch(construction_state)
if(0)
src.desc = text("A [name], looks like it's not attached to the flooring")
. += "Looks like it's not attached to the flooring."
if(1)
src.desc = text("A [name], it is missing some cables")
. += "It is missing some cables."
if(2)
src.desc = text("A [name], the panel is open")
. += "The panel is open."
if(3)
src.desc = text("The [name] is assembled")
if(powered)
src.desc = src.desc_holder
..()
return
. += "It is assembled."
/obj/structure/particle_accelerator/attackby(obj/item/W, mob/user)
if(istool(W))
@@ -295,19 +292,17 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
return
/obj/machinery/particle_accelerator/examine(mob/user)
switch(src.construction_state)
. = ..()
switch(construction_state)
if(0)
src.desc = text("A [name], looks like it's not attached to the flooring")
. += "Looks like it's not attached to the flooring."
if(1)
src.desc = text("A [name], it is missing some cables")
. += "It is missing some cables."
if(2)
src.desc = text("A [name], the panel is open")
. += "The panel is open."
if(3)
src.desc = text("The [name] is assembled")
if(powered)
src.desc = src.desc_holder
..()
return
. += "It is assembled."
/obj/machinery/particle_accelerator/attackby(obj/item/W, mob/user)
@@ -37,11 +37,11 @@
..()
/obj/machinery/particle_smasher/examine(mob/user)
..()
if(user in view(1))
to_chat(user, "<span class='notice'>\The [src] contains:</span>")
. = ..()
if(Adjacent(user))
. += "<span class='notice'>\The [src] contains:</span>"
for(var/obj/item/I in contents)
to_chat(user, "<span class='notice'>\the [I]</span>")
. += "<span class='notice'>\the [I]</span>"
/obj/machinery/particle_smasher/attackby(obj/item/W as obj, mob/user as mob)
if(W.type == /obj/item/device/analyzer)
+2 -3
View File
@@ -71,10 +71,9 @@
energy = 0 // ensure we dont have miniballs of miniballs
/obj/singularity/energy_ball/examine(mob/user)
..()
. = ..()
if(orbiting_balls.len)
to_chat(user, "The amount of orbiting mini-balls is [orbiting_balls.len].")
. += "The amount of orbiting mini-balls is [orbiting_balls.len]."
/obj/singularity/energy_ball/proc/move_the_basket_ball(var/move_amount)
//we face the last thing we zapped, so this lets us favor that direction a bit
+4 -4
View File
@@ -51,9 +51,9 @@
icon_state = "[initial(icon_state)]-spent"
/obj/item/ammo_casing/examine(mob/user)
..()
. = ..()
if (!BB)
to_chat(user, "This one is spent.")
. += "This one is spent."
//Gun loading types
#define SINGLE_CASING 1 //The gun only accepts ammo_casings. ammo_magazines should never have this as their mag_type.
@@ -183,8 +183,8 @@
icon_state = (new_state)? new_state : initial(icon_state)
/obj/item/ammo_magazine/examine(mob/user)
..()
to_chat(user, "There [(stored_ammo.len == 1)? "is" : "are"] [stored_ammo.len] round\s left!")
. = ..()
. += "There [(stored_ammo.len == 1)? "is" : "are"] [stored_ammo.len] round\s left!"
//magazine icon state caching
/var/global/list/magazine_icondata_keys = list()
@@ -11,4 +11,4 @@
/obj/item/weapon/magnetic_ammo/examine(mob/user)
. = ..()
to_chat(user, "There [(remaining == 1)? "is" : "are"] [remaining] flechette\s left!")
. += "There [(remaining == 1)? "is" : "are"] [remaining] flechette\s left!"
@@ -50,12 +50,12 @@
produce()
/obj/item/ammo_magazine/smart/examine(mob/user)
..()
. = ..()
if(attached_cell)
to_chat(user, "<span class='notice'>\The [src] is loaded with a [attached_cell.name]. It is [round(attached_cell.percent())]% charged.</span>")
. += "<span class='notice'>\The [src] is loaded with a [attached_cell.name]. It is [round(attached_cell.percent())]% charged.</span>"
else
to_chat(user, "<span class='warning'>\The [src] does not appear to have a power source installed.</span>")
. += "<span class='warning'>\The [src] does not appear to have a power source installed.</span>"
/obj/item/ammo_magazine/smart/update_icon()
if(attached_cell)
+1 -1
View File
@@ -745,7 +745,7 @@
. = ..()
if(firemodes.len > 1)
var/datum/firemode/current_mode = firemodes[sel_mode]
to_chat(user, "The fire selector is set to [current_mode.name].")
. += "The fire selector is set to [current_mode.name]."
/obj/item/weapon/gun/proc/switch_firemodes(mob/user)
if(firemodes.len <= 1)
+3 -4
View File
@@ -178,12 +178,11 @@
if(power_supply)
if(charge_cost)
var/shots_remaining = round(power_supply.charge / max(1, charge_cost)) // Paranoia
to_chat(user, "Has [shots_remaining] shot\s remaining.")
. += "Has [shots_remaining] shot\s remaining."
else
to_chat(user, "Has infinite shots remaining.")
. += "Has infinite shots remaining."
else
to_chat(user, "Does not have a power cell.")
return
. += "Does not have a power cell."
/obj/item/weapon/gun/energy/update_icon(var/ignore_inhands)
if(power_supply == null)
@@ -208,18 +208,18 @@
icon_state = "crossbowframe[buildstate]"
/obj/item/weapon/crossbowframe/examine(mob/user)
..(user)
. = ..()
switch(buildstate)
if(1)
to_chat(user, "It has a loose rod frame in place.")
. += "It has a loose rod frame in place."
if(2)
to_chat(user, "It has a steel backbone welded in place.")
. += "It has a steel backbone welded in place."
if(3)
to_chat(user, "It has a steel backbone and a cell mount installed.")
. += "It has a steel backbone and a cell mount installed."
if(4)
to_chat(user, "It has a steel backbone, plastic lath and a cell mount installed.")
. += "It has a steel backbone, plastic lath and a cell mount installed."
if(5)
to_chat(user, "It has a steel cable loosely strung across the lath.")
. += "It has a steel cable loosely strung across the lath."
/obj/item/weapon/crossbowframe/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W,/obj/item/stack/rods))
@@ -36,11 +36,12 @@
update_icon()
/obj/item/weapon/gun/launcher/grenade/examine(mob/user)
if(..(user, 2))
. = ..()
if(get_dist(user, src) <= 2)
var/grenade_count = grenades.len + (chambered? 1 : 0)
to_chat(user, "Has [grenade_count] grenade\s remaining.")
. += "Has [grenade_count] grenade\s remaining."
if(chambered)
to_chat(user, "\A [chambered] is chambered.")
. += "\A [chambered] is chambered."
/obj/item/weapon/gun/launcher/grenade/proc/load(obj/item/weapon/grenade/G, mob/user)
if(G.loadable)
@@ -99,13 +99,13 @@
return launched
/obj/item/weapon/gun/launcher/pneumatic/examine(mob/user)
if(!..(user, 2))
return
to_chat(user, "The valve is dialed to [pressure_setting]%.")
if(tank)
to_chat(user, "The tank dial reads [tank.air_contents.return_pressure()] kPa.")
else
to_chat(user, "Nothing is attached to the tank valve!")
. = ..()
if(get_dist(user, src) <= 2)
. += "The valve is dialed to [pressure_setting]%."
if(tank)
. += "The tank dial reads [tank.air_contents.return_pressure()] kPa."
else
. += "Nothing is attached to the tank valve!"
/obj/item/weapon/gun/launcher/pneumatic/update_release_force(obj/item/projectile)
if(tank)
@@ -150,18 +150,18 @@
icon_state = "pneumatic[buildstate]"
/obj/item/weapon/cannonframe/examine(mob/user)
..(user)
. = ..()
switch(buildstate)
if(1)
to_chat(user, "It has a pipe segment installed.")
. += "It has a pipe segment installed."
if(2)
to_chat(user, "It has a pipe segment welded in place.")
. += "It has a pipe segment welded in place."
if(3)
to_chat(user, "It has an outer chassis installed.")
. += "It has an outer chassis installed."
if(4)
to_chat(user, "It has an outer chassis welded in place.")
. += "It has an outer chassis welded in place."
if(5)
to_chat(user, "It has a transfer valve installed.")
. += "It has a transfer valve installed."
/obj/item/weapon/cannonframe/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W,/obj/item/pipe))
@@ -17,9 +17,9 @@
var/list/rockets = new/list()
/obj/item/weapon/gun/launcher/rocket/examine(mob/user)
if(!..(user, 2))
return
to_chat(user, "<font color='blue'>[rockets.len] / [max_rockets] rockets.</font>")
. = ..()
if(get_dist(user, src) <= 2)
. += "<font color='blue'>[rockets.len] / [max_rockets] rockets.</font>"
/obj/item/weapon/gun/launcher/rocket/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/ammo_casing/rocket))
@@ -24,7 +24,9 @@
/obj/item/weapon/gun/magnetic/matfed/examine(mob/user)
. = ..()
show_ammo(user)
var/ammotext = show_ammo()
if(ammotext)
. += ammotext
/obj/item/weapon/gun/magnetic/matfed/update_icon()
var/list/overlays_to_add = list()
@@ -69,9 +71,9 @@
/obj/item/weapon/gun/magnetic/matfed/use_ammo()
mat_storage -= mat_cost
/obj/item/weapon/gun/magnetic/matfed/show_ammo(var/mob/user)
/obj/item/weapon/gun/magnetic/matfed/show_ammo()
if(mat_storage)
to_chat(user, "<span class='notice'>It has [mat_storage] out of [max_mat_storage] units of [ammo_material] loaded.</span>")
return list("<span class='notice'>It has [mat_storage] out of [max_mat_storage] units of [ammo_material] loaded.</span>")
/obj/item/weapon/gun/magnetic/matfed/attackby(var/obj/item/thing, var/mob/user)
if(removable_components)
@@ -65,14 +65,14 @@
Tank.air_contents.remove(moles_to_pull)
/obj/item/weapon/gun/magnetic/gasthrower/show_ammo(var/mob/user)
..()
. = ..()
if(loaded)
var/obj/item/weapon/tank/T = loaded
to_chat(user, "<span class='notice'>\The [T]'s pressure meter shows: [T.air_contents.return_pressure()] kpa.</span>")
. += "<span class='notice'>\The [T]'s pressure meter shows: [T.air_contents.return_pressure()] kpa.</span>"
switch(check_ammo())
if(TRUE)
to_chat(user, "<span class='notice'>\The [src]'s display registers a proper fuel mixture.</span>")
. += "<span class='notice'>\The [src]'s display registers a proper fuel mixture.</span>"
if(FALSE)
to_chat(user, "<span class='warning'>\The [src]'s display registers an improper fuel mixture.</span>")
. += "<span class='warning'>\The [src]'s display registers an improper fuel mixture.</span>"
@@ -66,28 +66,30 @@
overlays = overlays_to_add
..()
/obj/item/weapon/gun/magnetic/proc/show_ammo(var/mob/user)
/obj/item/weapon/gun/magnetic/proc/show_ammo()
var/list/ammotext = list()
if(loaded)
to_chat(user, "<span class='notice'>It has \a [loaded] loaded.</span>")
ammotext += "<span class='notice'>It has \a [loaded] loaded.</span>"
return ammotext
/obj/item/weapon/gun/magnetic/examine(var/mob/user)
. = ..(user, 2)
if(.)
show_ammo(user)
. = ..()
if(get_dist(user, src) <= 2)
. += show_ammo()
if(cell)
to_chat(user, "<span class='notice'>The installed [cell.name] has a charge level of [round((cell.charge/cell.maxcharge)*100)]%.</span>")
. += "<span class='notice'>The installed [cell.name] has a charge level of [round((cell.charge/cell.maxcharge)*100)]%.</span>"
if(capacitor)
to_chat(user, "<span class='notice'>The installed [capacitor.name] has a charge level of [round((capacitor.charge/capacitor.max_charge)*100)]%.</span>")
. += "<span class='notice'>The installed [capacitor.name] has a charge level of [round((capacitor.charge/capacitor.max_charge)*100)]%.</span>"
if(!cell || !capacitor)
to_chat(user, "<span class='notice'>The capacitor charge indicator is blinking <font color ='[COLOR_RED]'>red</font>. Maybe you should check the cell or capacitor.</span>")
. += "<span class='notice'>The capacitor charge indicator is blinking <font color ='[COLOR_RED]'>red</font>. Maybe you should check the cell or capacitor.</span>"
else
if(capacitor.charge < power_cost)
to_chat(user, "<span class='notice'>The capacitor charge indicator is <font color ='[COLOR_ORANGE]'>amber</font>.</span>")
. += "<span class='notice'>The capacitor charge indicator is <font color ='[COLOR_ORANGE]'>amber</font>.</span>"
else
to_chat(user, "<span class='notice'>The capacitor charge indicator is <font color ='[COLOR_GREEN]'>green</font>.</span>")
return TRUE
. += "<span class='notice'>The capacitor charge indicator is <font color ='[COLOR_GREEN]'>green</font>.</span>"
/obj/item/weapon/gun/magnetic/attackby(var/obj/item/thing, var/mob/user)
@@ -88,22 +88,22 @@
icon_state = "coilgun_construction_[construction_stage]"
/obj/item/weapon/coilgun_assembly/examine(var/mob/user)
. = ..(user,2)
if(.)
. = ..()
if(get_dist(user, src) <= 2)
switch(construction_stage)
if(2)
to_chat(user, "<span class='notice'>It has a metal frame loosely shaped around the stock.</span>")
. += "<span class='notice'>It has a metal frame loosely shaped around the stock.</span>"
if(3)
to_chat(user, "<span class='notice'>It has a metal frame duct-taped to the stock.</span>")
. += "<span class='notice'>It has a metal frame duct-taped to the stock.</span>"
if(4)
to_chat(user, "<span class='notice'>It has a length of pipe attached to the body.</span>")
. += "<span class='notice'>It has a length of pipe attached to the body.</span>"
if(4)
to_chat(user, "<span class='notice'>It has a length of pipe welded to the body.</span>")
. += "<span class='notice'>It has a length of pipe welded to the body.</span>"
if(6)
to_chat(user, "<span class='notice'>It has a cable mount and capacitor jack wired to the frame.</span>")
. += "<span class='notice'>It has a cable mount and capacitor jack wired to the frame.</span>"
if(7)
to_chat(user, "<span class='notice'>It has a single superconducting coil threaded onto the barrel.</span>")
. += "<span class='notice'>It has a single superconducting coil threaded onto the barrel.</span>"
if(8)
to_chat(user, "<span class='notice'>It has a pair of superconducting coils threaded onto the barrel.</span>")
. += "<span class='notice'>It has a pair of superconducting coils threaded onto the barrel.</span>"
if(9)
to_chat(user, "<span class='notice'>It has three superconducting coils attached to the body, waiting to be secured.</span>")
. += "<span class='notice'>It has three superconducting coils attached to the body, waiting to be secured.</span>"
@@ -31,12 +31,12 @@
// Not going to check type repeatedly, if you code or varedit
// load_type and get runtime errors, don't come crying to me.
/obj/item/weapon/gun/magnetic/railgun/show_ammo(var/mob/user)
/obj/item/weapon/gun/magnetic/railgun/show_ammo()
var/obj/item/weapon/rcd_ammo/ammo = loaded
if (ammo)
to_chat(user, "<span class='notice'>There are [ammo.remaining] shot\s remaining in \the [loaded].</span>")
return list("<span class='notice'>There are [ammo.remaining] shot\s remaining in \the [loaded].</span>")
else
to_chat(user, "<span class='notice'>There is nothing loaded.</span>")
return list("<span class='notice'>There is nothing loaded.</span>")
/obj/item/weapon/gun/magnetic/railgun/check_ammo()
var/obj/item/weapon/rcd_ammo/ammo = loaded
@@ -77,9 +77,9 @@
)
/obj/item/weapon/gun/magnetic/railgun/automatic/examine(var/mob/user)
. = ..(user,1)
if(.)
to_chat(user, "<span class='notice'>Someone has scratched <i>Ultima Ratio Regum</i> onto the side of the barrel.</span>")
. = ..()
if(Adjacent(user))
. += "<span class='notice'>Someone has scratched <i>Ultima Ratio Regum</i> onto the side of the barrel.</span>"
/obj/item/weapon/gun/magnetic/railgun/flechette
name = "flechette gun"
+3 -4
View File
@@ -230,11 +230,10 @@
update_icon() //make sure to do this after unsetting ammo_magazine
/obj/item/weapon/gun/projectile/examine(mob/user)
..(user)
. = ..()
if(ammo_magazine)
to_chat(user, "It has \a [ammo_magazine] loaded.")
to_chat(user, "Has [getAmmo()] round\s remaining.")
return
. += "It has \a [ammo_magazine] loaded."
. += "It has [getAmmo()] round\s remaining."
/obj/item/weapon/gun/projectile/proc/getAmmo()
var/bullets = 0
@@ -186,11 +186,11 @@
return
/obj/item/weapon/gun/projectile/automatic/z8/examine(mob/user)
..()
. = ..()
if(launcher.chambered)
to_chat(user, "\The [launcher] has \a [launcher.chambered] loaded.")
. += "\The [launcher] has \a [launcher.chambered] loaded."
else
to_chat(user, "\The [launcher] is empty.")
. += "\The [launcher] is empty."
/obj/item/weapon/gun/projectile/automatic/l6_saw
name = "light machine gun"
@@ -100,16 +100,13 @@
fill_dart(dart)
/obj/item/weapon/gun/projectile/dartgun/examine(mob/user)
//update_icon()
//if (!..(user, 2))
// return
..()
if (beakers.len)
to_chat(user, "<font color='blue'>[src] contains:</font>")
. = ..()
if(beakers.len)
. += "<span class='notice'>[src] contains:</span>"
for(var/obj/item/weapon/reagent_containers/glass/beaker/B in beakers)
if(B.reagents && B.reagents.reagent_list.len)
for(var/datum/reagent/R in B.reagents.reagent_list)
to_chat(user, "<font color='blue'>[R.volume] units of [R.name]</font>")
. += "<span class='notice'>[R.volume] units of [R.name]</span>"
/obj/item/weapon/gun/projectile/dartgun/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/weapon/reagent_containers/glass))
@@ -249,14 +249,14 @@ obj/item/weapon/gun/projectile/revolver/detective45/verb/rename_gun()
chamber_offset = rand(0,max_shells - loaded.len)
/obj/item/weapon/gun/projectile/revolver/lemat/examine(mob/user)
..()
. = ..()
if(secondary_loaded)
var/to_print
for(var/round in secondary_loaded)
to_print += round
to_chat(user, "\The [src] has a secondary barrel loaded with \a [to_print]")
. += "It has a secondary barrel loaded with \a [to_print]"
else
to_chat(user, "\The [src] has a secondary barrel that is empty.")
. += "It has a secondary barrel that is empty."
//Ported from Bay
+2 -2
View File
@@ -34,8 +34,8 @@
update_icon()
/obj/item/weapon/gun/launcher/spikethrower/examine(mob/user)
..(user)
to_chat(user, "It has [spikes] spike\s remaining.")
. = ..()
. += "It has [spikes] spike\s remaining."
/obj/item/weapon/gun/launcher/spikethrower/update_icon()
icon_state = "spikethrower[spikes]"
+5 -5
View File
@@ -22,14 +22,14 @@
setLabel(R.name)
/obj/item/weapon/reagent_containers/chem_disp_cartridge/examine(mob/user)
..()
to_chat(user, "It has a capacity of [volume] units.")
. = ..()
. += "It has a capacity of [volume] units."
if(reagents.total_volume <= 0)
to_chat(user, "It is empty.")
. += "It is empty."
else
to_chat(user, "It contains [reagents.total_volume] units of liquid.")
. += "It contains [reagents.total_volume] units of liquid."
if(!is_open_container())
to_chat(user, "The cap is sealed.")
. += "The cap is sealed."
/obj/item/weapon/reagent_containers/chem_disp_cartridge/verb/verb_set_label(L as text)
set name = "Set Cartridge Label"
@@ -26,8 +26,8 @@
add_cartridge(new type(src))
/obj/machinery/chemical_dispenser/examine(mob/user)
..()
to_chat(user, "It has [cartridges.len] cartridges installed, and has space for [DISPENSER_MAX_CARTRIDGES - cartridges.len] more.")
. = ..()
. += "It has [cartridges.len] cartridges installed, and has space for [DISPENSER_MAX_CARTRIDGES - cartridges.len] more."
/obj/machinery/chemical_dispenser/proc/add_cartridge(obj/item/weapon/reagent_containers/chem_disp_cartridge/C, mob/user)
if(!istype(C))
+13 -13
View File
@@ -109,31 +109,31 @@
..()
/obj/machinery/portable_atmospherics/powered/reagent_distillery/examine(mob/user)
..()
if(get_dist(user, src) < 3)
to_chat(user, "<span class='notice'>\The [src] is powered [on ? "on" : "off"].</span>")
. = ..()
if(get_dist(user, src) <= 2)
. += "<span class='notice'>\The [src] is powered [on ? "on" : "off"].</span>"
to_chat(user, "<span class='notice'>\The [src]'s gauges read:</span>")
. += "<span class='notice'>\The [src]'s gauges read:</span>"
if(!use_atmos)
to_chat(user, "<span class='notice'>- Target Temperature:</span> <span class='warning'>[target_temp]</span>")
to_chat(user, "<span class='notice'>- Temperature:</span> <span class='warning'>[current_temp]</span>")
. += "<span class='notice'>- Target Temperature:</span> <span class='warning'>[target_temp]</span>"
. += "<span class='notice'>- Temperature:</span> <span class='warning'>[current_temp]</span>"
if(InputBeaker)
if(InputBeaker.reagents.reagent_list.len)
to_chat(user, "<span class='notice'>\The [src]'s input beaker holds [InputBeaker.reagents.total_volume] units of liquid.</span>")
. += "<span class='notice'>\The [src]'s input beaker holds [InputBeaker.reagents.total_volume] units of liquid.</span>"
else
to_chat(user, "<span class='notice'>\The [src]'s input beaker is empty!</span>")
. += "<span class='notice'>\The [src]'s input beaker is empty!</span>"
if(Reservoir.reagents.reagent_list.len)
to_chat(user, "<span class='notice'>\The [src]'s internal buffer holds [Reservoir.reagents.total_volume] units of liquid.</span>")
. += "<span class='notice'>\The [src]'s internal buffer holds [Reservoir.reagents.total_volume] units of liquid.</span>"
else
to_chat(user, "<span class='notice'>\The [src]'s internal buffer is empty!</span>")
. += "<span class='notice'>\The [src]'s internal buffer is empty!</span>"
if(OutputBeaker)
if(OutputBeaker.reagents.reagent_list.len)
to_chat(user, "<span class='notice'>\The [src]'s output beaker holds [OutputBeaker.reagents.total_volume] units of liquid.</span>")
. += "<span class='notice'>\The [src]'s output beaker holds [OutputBeaker.reagents.total_volume] units of liquid.</span>"
else
to_chat(user, "<span class='notice'>\The [src]'s output beaker is empty!</span>")
. += "<span class='notice'>\The [src]'s output beaker is empty!</span>"
/obj/machinery/portable_atmospherics/powered/reagent_distillery/verb/toggle_power(mob/user = usr)
set name = "Toggle Distillery Heating"
@@ -186,7 +186,7 @@
switch(choice)
if("examine")
examine(user)
user.examinate(src)
if("use")
toggle_power(user)

Some files were not shown because too many files have changed in this diff Show More