mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-22 04:28:33 +01:00
Rewrite examine() to pass a list around
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>"
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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]"
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user