Split examine verb and function, and improve it (#17251)

* Split examine verb and function, and include adjacency and distance checking in examine function

* Fix various issues

* Update code/modules/mob/examinations.dm

Co-authored-by: SleepyGemmy <99297919+SleepyGemmy@users.noreply.github.com>

* Add required define vars

* Update code/game/objects/items/stacks/wrap.dm

Co-authored-by: SleepyGemmy <99297919+SleepyGemmy@users.noreply.github.com>

---------

Co-authored-by: SleepyGemmy <99297919+SleepyGemmy@users.noreply.github.com>
This commit is contained in:
Cody Brittain
2023-09-09 08:07:36 +00:00
committed by GitHub
co-authored by SleepyGemmy
parent 39228d3a2c
commit ce5ac79e3c
241 changed files with 617 additions and 518 deletions
+2 -2
View File
@@ -92,9 +92,9 @@
return
/obj/item/device/assembly/examine(mob/user)
/obj/item/device/assembly/examine(mob/user, distance, is_adjacent)
. = ..()
if(. && (in_range(src, user) || loc == user))
if(distance <= 1 || loc == user)
if(secured)
to_chat(user, "\The [src] is ready!")
else
+3 -3
View File
@@ -12,8 +12,8 @@
var/obj/item/tank/bombtank = null //the second part of the bomb is a phoron tank
/obj/item/device/onetankbomb/examine(mob/user)
..(user)
user.examinate(bombtank)
. = ..()
examinate(user, bombtank)
/obj/item/device/onetankbomb/update_icon()
if(bombtank)
@@ -155,4 +155,4 @@
var/turf/simulated/T = get_turf(src)
if(!T)
return
T.assume_air(removed)
T.assume_air(removed)
+3 -3
View File
@@ -62,9 +62,9 @@
if(master)
master.update_icon()
/obj/item/device/assembly_holder/examine(mob/user)
. = ..(user)
if(. && (in_range(src, user) || src.loc == user))
/obj/item/device/assembly_holder/examine(mob/user, distance, is_adjacent)
. = ..()
if(distance <= 1 || src.loc == user)
if (src.secured)
to_chat(user, SPAN_NOTICE("\The [src] is ready!"))
else
+1 -1
View File
@@ -14,7 +14,7 @@
/obj/item/device/assembly/mousetrap/examine(mob/user)
. = ..()
if(. && armed)
if(armed)
to_chat(user, "It looks like it's armed.")
/obj/item/device/assembly/mousetrap/update_icon()
@@ -182,6 +182,6 @@
return ..()
/obj/machinery/atmospherics/unary/freezer/examine(mob/user)
..(user)
. = ..()
if(panel_open)
to_chat(user, "The maintenance hatch is open.")
@@ -170,6 +170,6 @@
return ..()
/obj/machinery/atmospherics/unary/heater/examine(mob/user)
..(user)
. = ..()
if(panel_open)
to_chat(user, "The maintenance hatch is open.")
@@ -416,8 +416,9 @@
else
return ..()
/obj/machinery/atmospherics/unary/vent_pump/examine(mob/user)
if(..(user, 1))
/obj/machinery/atmospherics/unary/vent_pump/examine(mob/user, distance, is_adjacent)
. = ..()
if(distance <= 1)
to_chat(user, "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W")
else
to_chat(user, "You are too far away to read the gauge.")
@@ -369,8 +369,9 @@
return ..()
/obj/machinery/atmospherics/unary/vent_scrubber/examine(mob/user)
if(..(user, 1))
/obj/machinery/atmospherics/unary/vent_scrubber/examine(mob/user, distance, is_adjacent)
. = ..()
if(distance <= 1)
to_chat(user, "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W")
else
to_chat(user, "You are too far away to read the gauge.")
@@ -325,5 +325,5 @@
return TRUE
/obj/machinery/atmospherics/valve/examine(mob/user)
..()
. = ..()
to_chat(user, "It is [open ? "open" : "closed"].")
+3 -3
View File
@@ -164,9 +164,9 @@
transform = M
/obj/item/battle_monsters/card/examine(mob/user)
/obj/item/battle_monsters/card/examine(mob/user, distance, is_adjacent)
..()
. = ..()
if(facedown && src.loc != user)
to_chat(user, SPAN_NOTICE("You can't examine \the [src] while it's face down!"))
@@ -197,4 +197,4 @@
/obj/item/battle_monsters/card/MouseExited(location, control, params)
. = ..()
closeToolTip(usr)
closeToolTip(usr)
+2 -2
View File
@@ -1200,8 +1200,8 @@
M.update_inv_w_uniform()
playsound(M, /singleton/sound_category/rustle_sound, 15, 1, -5)
/obj/item/clothing/under/examine(mob/user)
..(user)
/obj/item/clothing/under/examine(mob/user, distance, is_adjacent)
. = ..()
switch(src.sensor_mode)
if(0)
to_chat(user, "Its sensors appear to be disabled.")
@@ -91,8 +91,8 @@
return main_ear
/obj/item/clothing/examine(var/mob/user)
..(user)
/obj/item/clothing/examine(mob/user, distance, is_adjacent)
. = ..()
if(LAZYLEN(accessories))
for(var/obj/item/clothing/accessory/A in accessories)
to_chat(user, "\A [A] [A.gender == PLURAL ? "are" : "is"] attached to it.")
+2 -2
View File
@@ -96,8 +96,8 @@
else
to_chat(usr, SPAN_NOTICE("Camera deactivated."))
/obj/item/clothing/head/helmet/space/examine(var/mob/user)
if(..(user, 1) && camera)
/obj/item/clothing/head/helmet/space/examine(mob/user, distance, is_adjacent)
if((distance <= 1) && camera)
to_chat(user, FONT_SMALL(SPAN_NOTICE("To toggle the helmet camera, right click the helmet and press <b>Toggle Helmet Camera</b>.")))
to_chat(user, "This helmet has a built-in camera. It's [!ispath(camera) && camera.status ? "" : "in"]active.")
+1 -1
View File
@@ -99,7 +99,7 @@
INVOKE_ASYNC(src, PROC_REF(update_wearer))
/obj/item/clothing/shoes/magboots/examine(mob/user)
..(user)
. = ..()
var/state = "disabled"
if(item_flags & NOSLIP)
state = "enabled"
+1 -1
View File
@@ -224,7 +224,7 @@ var/global/list/breach_burn_descriptors = list(
..()
/obj/item/clothing/suit/space/examine(mob/user)
..(user)
. = ..()
if(can_breach && breaches && breaches.len)
for(var/datum/breach/B in breaches)
to_chat(user, "<span class='danger'>It has \a [B.descriptor].</span>")
@@ -62,7 +62,7 @@
var/category // Use for restricting modules for specific suits, to specialize
/obj/item/rig_module/examine(mob/user)
..()
. = ..()
switch(damage)
if(0)
to_chat(user, SPAN_NOTICE("It is undamaged."))
+1 -1
View File
@@ -49,7 +49,7 @@
contained_sprite = TRUE
/obj/item/clothing/head/helmet/space/syndicate/covert/examine(mob/user, distance)
..()
. = ..()
if(distance <= 1)
to_chat(user, SPAN_NOTICE("This helmet has extra armor compared to a normal softsuit helmet."))
@@ -93,15 +93,15 @@
var/obj/item/tank/tank = null // Deployable tank, if any.
var/obj/item/device/suit_cooling_unit/cooler = null // Deployable suit cooler, if any
/obj/item/clothing/suit/space/void/examine(user)
..(user)
/obj/item/clothing/suit/space/void/examine(mob/user, distance, is_adjacent)
. = ..()
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.")
if(tank && in_range(src,user))
if(tank && distance <= 1)
to_chat(user, SPAN_NOTICE("The wrist-mounted pressure gauge reads [max(round(tank.air_contents.return_pressure()),0)] kPa remaining in \the [tank]."))
if (cooler && in_range(src,user))
if (cooler && distance <= 1)
to_chat(user, SPAN_NOTICE("The mounted cooler's battery charge reads [round(cooler.cell.percent())]%"))
/obj/item/clothing/suit/space/void/refit_for_species(var/target_species)
@@ -98,7 +98,7 @@
..()
/obj/item/clothing/accessory/holster/examine(mob/user)
..(user)
. = ..()
if (holstered)
to_chat(user, "A [holstered] is holstered here.")
else
+3 -3
View File
@@ -43,9 +43,9 @@
/obj/item/clothing/wrists/watch/spy/checktime()
to_chat(usr, "You check your watch. Unfortunately for you, it's not a real watch, dork.")
/obj/item/clothing/wrists/watch/examine(mob/user)
..()
if (get_dist(src, user) <= 1)
/obj/item/clothing/wrists/watch/examine(mob/user, distance, is_adjacent)
. = ..()
if (distance <= 1)
checktime()
/obj/item/clothing/wrists/watch/verb/checktime()
@@ -66,9 +66,9 @@
qdel(CI)
return ..()
/obj/machinery/appliance/examine(var/mob/user)
..()
if(Adjacent(usr))
/obj/machinery/appliance/examine(mob/user, distance, is_adjacent)
. = ..()
if(is_adjacent)
list_contents(user)
return TRUE
@@ -18,9 +18,9 @@
var/temperature = T20C
var/starts_with = list()
/obj/machinery/appliance/cooker/examine(var/mob/user)
/obj/machinery/appliance/cooker/examine(mob/user, distance, is_adjacent)
. = ..()
if (.) //no need to duplicate adjacency check
if (is_adjacent)
if (!stat)
if (temperature < min_temp)
to_chat(user, SPAN_WARNING("[src] is still heating up and is too cold to cook anything yet."))
@@ -17,7 +17,7 @@ fundamental differences
idle_power_usage = 50
appliancetype = 0
/obj/machinery/appliance/mixer/examine(var/mob/user)
/obj/machinery/appliance/mixer/examine(mob/user, distance, is_adjacent)
. = ..()
to_chat(user, SPAN_NOTICE("It is currently set to make a [selected_option]"))
@@ -25,9 +25,9 @@
var/datum/reagents/oil
var/optimal_oil = 9000//90 litres of cooking oil
/obj/machinery/appliance/cooker/fryer/examine(var/mob/user)
/obj/machinery/appliance/cooker/fryer/examine(mob/user, distance, is_adjacent)
. = ..()
if (.)//no need to duplicate adjacency check
if (is_adjacent)
to_chat(user, "Oil Level: [oil.total_volume]/[optimal_oil]")
/obj/machinery/appliance/cooker/fryer/Initialize()
+1 -1
View File
@@ -77,7 +77,7 @@
startgibbing(user)
/obj/machinery/gibber/examine()
..()
. = ..()
to_chat(usr, "The safety guard is [emagged ? SPAN_DANGER("disabled") : "enabled"].")
/obj/machinery/gibber/emag_act(var/remaining_charges, var/mob/user)
+9 -7
View File
@@ -162,8 +162,9 @@ All custom items with worn sprites must follow the contained sprite system: http
icon_state = "corvo_cigarette"
item_state = "corvo_cigarette"
/obj/item/clothing/mask/fluff/corvo_cigarette/examine(mob/user)
if(..(user, 1))
/obj/item/clothing/mask/fluff/corvo_cigarette/examine(mob/user, distance, is_adjacent)
. = ..()
if(distance <= 1)
to_chat(user, "It is [active ? "on" : "off"].")
@@ -473,8 +474,8 @@ All custom items with worn sprites must follow the contained sprite system: http
w_class = ITEMSIZE_NORMAL
var/has_spear = TRUE
/obj/item/fluff/tokash_spear/examine(mob/user)
if(..(user, 1) && has_spear)
/obj/item/fluff/tokash_spear/examine(mob/user, distance, is_adjacent)
if(distance <= 1 && has_spear)
to_chat(user, "It currently holds an old looking spearhead.")
/obj/item/fluff/tokash_spear/update_icon()
@@ -1640,7 +1641,7 @@ All custom items with worn sprites must follow the contained sprite system: http
return ..()
/obj/item/fluff/nasira_burner/examine(mob/user)
..(user)
. = ..()
if(lit)
to_chat(user, "\The [src] is currently lit.")
@@ -1853,8 +1854,9 @@ All custom items with worn sprites must follow the contained sprite system: http
add_overlay("card_spin_fx")
addtimer(CALLBACK(src, PROC_REF(finish_selection), usr), 3 SECONDS)
/obj/item/fluff/ielia_tarot/examine(mob/user)
if(..(user, 1))
/obj/item/fluff/ielia_tarot/examine(mob/user, distance, is_adjacent)
. = ..()
if(distance <= 1)
if(first_card && second_card && third_card)
to_chat(user, "The following constellations are displayed on the starfinder: [first_card], [second_card], and [third_card].")
@@ -96,8 +96,9 @@
return
/obj/item/evidencebag/examine(mob/user)
..(user)
if (stored_item) user.examinate(stored_item)
. = ..()
if (stored_item)
examinate(user, stored_item)
/obj/item/evidencebag/attackby(obj/item/W as obj, mob/user as mob)
if(W.ispen() || istype(W, /obj/item/device/flashlight/pen))
+3 -3
View File
@@ -175,9 +175,9 @@
drop_sound = 'sound/items/drop/card.ogg'
pickup_sound = 'sound/items/pickup/card.ogg'
/obj/item/spacecash/ewallet/examine(mob/user)
..(user)
if (!(user in view(2)) && user!=src.loc) return
/obj/item/spacecash/ewallet/examine(mob/user, distance, is_adjacent)
. = ..()
if (distance > 2 && user!=src.loc) return
to_chat(user, "<span class='notice'>Charge card's owner: [src.owner_name]. Credit chips remaining: [src.worth].</span>")
/obj/item/spacecash/ewallet/lotto
+1 -1
View File
@@ -275,7 +275,7 @@
user.visible_message("\The [user] [concealed ? "conceals" : "reveals"] their hand.")
/obj/item/hand/examine(mob/user)
..(user)
. = ..()
if((!concealed || src.loc == user) && cards.len)
if(cards.len > 1)
to_chat(user, "It contains: ")
@@ -22,13 +22,13 @@
mech_remote_network = REMOTE_PRISON_MECH
hardpoint_lock = TRUE
/obj/item/remote_mecha/penal/examine(mob/user)
/obj/item/remote_mecha/penal/examine(mob/user, distance, is_adjacent)
. = ..()
if(Adjacent(user))
if(is_adjacent)
to_chat(user, FONT_SMALL(SPAN_NOTICE("Applying \the [src] will additionally add the mech to the security penal network, where they can remotely monitor and shut it down.")))
/obj/item/remote_mecha/ai
name = "AI exosuit remote upgrade"
desc = "A device that, when inserted into an exosuit, allows it to be remotely piloted by the artificial intelligence."
mech_remote_network = REMOTE_AI_MECH
dummy_path = /mob/living/simple_animal/spiderbot/ai
dummy_path = /mob/living/simple_animal/spiderbot/ai
@@ -38,7 +38,7 @@
var/modifiers = params2list(params)
if(modifiers["shift"])
A.examine(user)
examinate(user, A)
return
if(modifiers["alt"])
+1 -1
View File
@@ -177,7 +177,7 @@
var/mob/M = locate(href_list["examine"])
if(!M)
return
usr.examinate(M, 1)
examinate(usr, M)
/mob/living/heavy_vehicle/Initialize(mapload, var/obj/structure/heavy_vehicle_frame/source_frame)
..()
@@ -46,10 +46,10 @@
if(81 to 100)
add_overlay("bees3")
/obj/machinery/beehive/examine(mob/user)
..()
/obj/machinery/beehive/examine(mob/user, distance, is_adjacent)
. = ..()
to_chat(user, SPAN_NOTICE("\The [src] is holding <b>[frames]/[maxFrames]</b> frames."))
if(user.Adjacent(src))
if(is_adjacent)
if(bee_count)
if(closed)
to_chat(user, FONT_SMALL(SPAN_NOTICE("You can hear buzzing from within \the [src].")))
@@ -210,4 +210,4 @@
B.icon_state = "bh_bees[B.strength]"
B.feral = angry
B.update_icon()
bees_to_release = 0
bees_to_release = 0
@@ -9,7 +9,7 @@
var/honey = 0
/obj/machinery/honey_extractor/examine(var/mob/user)
..()
. = ..()
if(contained_frame)
to_chat(user, SPAN_NOTICE("It's holding \the <b>[contained_frame]</b>."))
to_chat(user, SPAN_NOTICE("It contains <b>[honey]</b> units of honey for collection."))
+2 -2
View File
@@ -9,7 +9,7 @@
var/feralbees
/obj/item/bee_net/examine(mob/user)
..()
. = ..()
if(caught_bees)
to_chat(user, SPAN_NOTICE("It contains [caught_bees] bees."))
else
@@ -131,4 +131,4 @@
B.update_icon()
caught_bees = 0
feralbees = FALSE
feralbees = FALSE
@@ -9,9 +9,9 @@
w_class = ITEMSIZE_LARGE
var/max_fuel = 60
/obj/item/bee_smoker/examine(mob/user)
..()
if(user.Adjacent(src))
/obj/item/bee_smoker/examine(mob/user, distance, is_adjacent)
. = ..()
if(is_adjacent)
to_chat(user, SPAN_NOTICE("It has <b>[get_fuel()]/[max_fuel]</b> welding fuel left."))
/obj/item/bee_smoker/Initialize()
@@ -77,4 +77,4 @@
var/datum/effect/effect/system/smoke_spread/smoke = new
smoke.set_up(10, 0, T, direction)
playsound(T, 'sound/effects/smoke.ogg', 20, 1, -3)
smoke.start()
smoke.start()
+1 -1
View File
@@ -70,7 +70,7 @@ var/global/list/plant_seed_sprites = list()
return sm
/obj/item/seeds/examine(mob/user)
..(user)
. = ..()
if(seed && !seed.roundstart)
to_chat(user, "It's tagged as variety #[seed.uid].")
+3 -3
View File
@@ -622,9 +622,9 @@
else if(dead)
remove_dead(user)
/obj/machinery/portable_atmospherics/hydroponics/examine()
/obj/machinery/portable_atmospherics/hydroponics/examine(mob/user, distance, is_adjacent)
..()
. = ..()
if(!seed)
to_chat(usr, "[src] is empty.")
@@ -632,7 +632,7 @@
to_chat(usr, "<span class='notice'>[seed.display_name] are growing here.</span>")
if(!Adjacent(usr))
if(!is_adjacent)
return
to_chat(usr, "Water: [round(waterlevel,0.1)]/100")
@@ -182,9 +182,9 @@
for(var/obj/item/integrated_circuit/part in contents)
. |= part.GetAccess()
/obj/item/device/electronic_assembly/examine(mob/user)
. = ..(user, 1)
if(.)
/obj/item/device/electronic_assembly/examine(mob/user, distance, is_adjacent)
. = ..()
if(distance <= 1)
for(var/obj/item/integrated_circuit/IC in contents)
IC.external_examine(user)
if(opened)
@@ -46,7 +46,7 @@
I.do_work()
/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)
@@ -24,7 +24,7 @@
. = ..()
/obj/item/integrated_circuit/memory/storage/examine(mob/user)
..()
. = ..()
var/i
for (i in 1 to outputs.len)
var/datum/integrated_io/O = outputs[i]
+3 -3
View File
@@ -176,8 +176,8 @@
system_error("Resource field depleted.")
update_icon()
/obj/machinery/mining/drill/examine(mob/user)
..(user)
/obj/machinery/mining/drill/examine(mob/user, distance, is_adjacent)
. = ..()
if(need_player_check)
to_chat(user, SPAN_WARNING("The drill error light is flashing. The cell panel is [panel_open ? "open" : "closed"]."))
else
@@ -185,7 +185,7 @@
if(panel_open)
to_chat(user, "The power cell is [cell ? "installed" : "missing"].")
to_chat(user, "The cell charge meter reads [cell ? round(cell.percent(),1) : 0]%.")
if(user.Adjacent(src))
if(is_adjacent)
if(attached_satchel)
to_chat(user, FONT_SMALL(SPAN_NOTICE("It has a [attached_satchel] attached to it.")))
if(current_error)
+2 -2
View File
@@ -843,7 +843,7 @@
update_icon()
/obj/item/lazarus_injector/examine(mob/user)
..()
. = ..()
if(!loaded)
to_chat(user, SPAN_INFO("\The [src] is empty."))
if(malfunctioning || emagged)
@@ -869,7 +869,7 @@
..()
/obj/item/card/mining_point_card/examine(mob/user)
..()
. = ..()
to_chat(user, SPAN_NOTICE("There's [points] point\s on the card."))
/**********************"Fultons"**********************/
+1 -1
View File
@@ -93,7 +93,7 @@ var/list/mineral_can_smooth_with = list(
return INITIALIZE_HINT_NORMAL
/turf/simulated/mineral/examine(mob/user)
..()
. = ..()
if(mineral)
switch(mined_ore)
if(0)
+2 -1
View File
@@ -19,7 +19,8 @@
var/list/ore_names
/obj/item/ore_detector/examine(mob/user, distance)
if(..(user, 1))
. = ..()
if(distance <= 1)
to_chat(user, FONT_SMALL(SPAN_NOTICE("Alt-click to set the ore you wish to search for.")))
/obj/item/ore_detector/Destroy()
+3 -3
View File
@@ -11,9 +11,9 @@
var/linked_beacon = FALSE // can't hold an actual beacon beclause storage code a shit
var/linked_beacon_uses = 3 // to hold the amount of uses the beacon had, storage code a shit.
/obj/item/storage/bag/ore/examine(mob/user)
..()
if(user.Adjacent(src) && linked_beacon)
/obj/item/storage/bag/ore/examine(mob/user, distance, is_adjacent)
. = ..()
if(is_adjacent && linked_beacon)
to_chat(user, FONT_SMALL(SPAN_NOTICE("It has a <b>warp extraction pack</b> inside.")))
/obj/item/storage/bag/ore/drone
+3 -3
View File
@@ -71,12 +71,12 @@
else
stored_ore[O.name] = 1
/obj/structure/ore_box/examine(mob/user)
..()
/obj/structure/ore_box/examine(mob/user, distance, is_adjacent)
. = ..()
// Borgs can now check contents too.
if((!istype(user, /mob/living/carbon/human)) && (!istype(user, /mob/living/silicon/robot)))
return
if(!Adjacent(user)) //Can only check the contents of ore boxes if you can physically reach them.
if(!is_adjacent) //Can only check the contents of ore boxes if you can physically reach them.
return
add_fingerprint(user)
+3 -3
View File
@@ -55,7 +55,7 @@
airflow_speed = 0
airflow_dest = null
/mob/abstract/eye/examinate()
/mob/abstract/eye/ExaminateVerb()
set popup_menu = 0
set src = usr.contents
return 0
@@ -97,7 +97,7 @@
/mob/abstract/eye/proc/setLoc(var/T)
if(!owner)
return FALSE
T = get_turf(T)
if(!T || T == loc)
return FALSE
@@ -108,7 +108,7 @@
owner.client.eye = src
if(owner_follows_eye)
owner.forceMove(loc)
visualnet.update_eye_chunks(src)
return TRUE
+26
View File
@@ -0,0 +1,26 @@
/proc/examinate(mob/user, atom/target, show_extended = FALSE)
if((user.is_blind() || user.stat) && isobserver(user))
to_chat(user, SPAN_NOTICE("Something is there, but you cannot see it."))
user.face_atom(target)
var/distance = INFINITY
var/is_adjacent = FALSE
if(isobserver(user) || user.stat == DEAD)
distance = 0
is_adjacent = TRUE
else
var/turf/source_turf = get_turf(user)
var/turf/target_turf = get_turf(target)
if(source_turf && source_turf.z == target_turf?.z)
distance = get_dist(source_turf, target_turf)
is_adjacent = user.Adjacent(target)
SEND_SIGNAL(user, COMSIG_MOB_EXAMINATE, target)
if(!show_extended) //This won't last long. This will be passed into /examine later on
if(!target.examine(user, distance, is_adjacent))
crash_with("Improper /examine() override: [log_info_line(target)]")
else
if(!target.examine_fluff(user, distance, is_adjacent))
crash_with("Improper /examine_fluff() override: [log_info_line(target)]")
@@ -768,19 +768,19 @@
var/obj/item/I = locate(href_list["lookitem"])
if(!I)
return
src.examinate(I)
examinate(src, I)
if (href_list["lookitem_desc_only"])
var/obj/item/I = locate(href_list["lookitem_desc_only"])
if(!I)
return
usr.examinate(I, 1)
examinate(usr, I)
if (href_list["lookmob"])
var/mob/M = locate(href_list["lookmob"])
if(!M)
return
src.examinate(M)
examinate(src, M)
if (href_list["flavor_change"])
if(src != usr)
@@ -1,5 +1,5 @@
/mob/living/carbon/slime/examine(mob/user)
..(user)
. = ..()
var/msg = ""
if(src.stat == DEAD)
msg += span("deadsay", "It is limp and unresponsive.\n")
@@ -22,4 +22,4 @@
msg += "*---------*"
to_chat(user, msg)
return
return
@@ -1,5 +1,5 @@
/mob/living/silicon/pai/examine(mob/user)
..(user, infix = ", personal AI")
/mob/living/silicon/pai/examine(mob/user, distance, is_adjacent)
. = ..(user, distance, is_adjacent, infix = ", personal AI")
var/msg = ""
switch(src.stat)
@@ -16,4 +16,4 @@
pose = addtext(pose,".") //Makes sure all emotes end with a period.
msg += "\nIt [pose]"
to_chat(user, msg)
to_chat(user, msg)
@@ -577,7 +577,7 @@
gib()
/mob/living/silicon/robot/drone/examine(mob/user)
..()
. = ..()
/mob/living/silicon/robot/drone/self_diagnosis()
if(!is_component_functioning("diagnosis unit"))
@@ -64,7 +64,7 @@
visible_message(SPAN_NOTICE("\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/abstract) && config.allow_drone_spawn && count_drones() < config.max_maint_drones)
to_chat(user, SPAN_NOTICE("<B>A drone is prepared. use 'Ghost Spawner' from the Ghost tab to spawn as a maintenance drone.</B>"))
@@ -1,6 +1,6 @@
/mob/living/silicon/robot/examine(mob/user)
/mob/living/silicon/robot/examine(mob/user, distance, is_adjacent)
var/custom_infix = custom_name ? ", [mod_type] [braintype]" : ""
..(user, infix = custom_infix)
. = ..(user, distance, is_adjacent, infix = custom_infix)
var/msg = ""
@@ -47,4 +47,4 @@
msg += "\nIt [pose]"
to_chat(user, msg)
user.showLaws(src)
user.showLaws(src)
@@ -36,7 +36,7 @@
var/force_holder
/obj/item/gripper/examine(var/mob/user)
..()
. = ..()
if(wrapped)
to_chat(user, SPAN_NOTICE("It is holding \the [wrapped]"))
@@ -16,9 +16,9 @@
. = ..()
files = new /datum/research/techonly(src) //Setup the research data holder.
/obj/item/portable_destructive_analyzer/examine(mob/user, distance)
/obj/item/portable_destructive_analyzer/examine(mob/user, distance, is_adjacent)
. = ..()
if(loaded_item && Adjacent(user))
if(loaded_item && is_adjacent)
to_chat(user, SPAN_NOTICE("It is holding \a [loaded_item]."))
/obj/item/portable_destructive_analyzer/attack_self(mob/user)
@@ -20,8 +20,7 @@
stored_doors = max_doors
/obj/item/inflatable_dispenser/examine(mob/user)
if(!..(user))
return
. = ..()
to_chat(user, SPAN_NOTICE("It has [stored_walls] wall segment\s and [stored_doors] door segment\s stored."))
to_chat(user, SPAN_NOTICE("It is set to deploy [mode ? "doors" : "walls"]"))
@@ -28,9 +28,9 @@
else
name = "robot [initial(name)]"
/obj/item/robot_parts/examine(mob/user, distance)
/obj/item/robot_parts/examine(mob/user, distance, is_adjacent)
. = ..()
if(Adjacent(user))
if(is_adjacent)
report_missing_parts(user)
/obj/item/robot_parts/proc/report_missing_parts(var/mob/user)
@@ -105,7 +105,7 @@
return ..()
/mob/living/simple_animal/construct/examine(mob/user)
..(user)
. = ..()
if(health < maxHealth)
if(health >= maxHealth / 2)
to_chat(user, SPAN_WARNING("It looks slightly dented."))
@@ -33,7 +33,7 @@
..()
/mob/living/simple_animal/capybara/examine(mob/user)
..()
. = ..()
if(stat == DEAD)
to_chat(user, "How can someone kill such a friendly creature?")
@@ -290,7 +290,7 @@
holder_type = /obj/item/holder/cat/black
/mob/living/simple_animal/cat/fluff/examine(mob/user)
..()
. = ..()
if(stat == DEAD)
to_chat(user, "Oh no, [name] is dead! What kind of monster would do this?")
@@ -306,7 +306,7 @@
holder_type = /obj/item/holder/cat/kitten
/mob/living/simple_animal/cat/kitten/examine(mob/user)
..()
. = ..()
if(stat == DEAD)
to_chat(user, "It's a dead kitten! What kind of monster would do this?")
@@ -353,6 +353,6 @@
holder_type = /obj/item/holder/cat/crusher
/mob/living/simple_animal/cat/crusher/examine(mob/user)
..()
. = ..()
if(stat == DEAD)
to_chat(user, "Crusher's dead. How could this have happened? She counted on you!")
@@ -312,7 +312,7 @@
return 0
/mob/living/simple_animal/spiderbot/examine(mob/user)
..(user)
. = ..()
if(src.held_item)
to_chat(user, "It is carrying [icon2html(src.held_item, user)] \a [src.held_item].")
@@ -100,7 +100,7 @@
qdel(src)
/mob/living/simple_animal/hostile/icarus_drone/examine(mob/user)
..()
. = ..()
if(malfunctioning)
if(hostile_drone)
to_chat(user, SPAN_WARNING("It's completely lit up, and its targetting vanes are deployed."))
@@ -99,10 +99,10 @@
else
see_invisible = SEE_INVISIBLE_NOLIGHTING
/mob/living/simple_animal/hostile/morph/examine(mob/user)
/mob/living/simple_animal/hostile/morph/examine(mob/user, distance, is_adjacent)
if(morphed)
. = form.examine(user)
if(get_dist(src, user) > 2)
if(distance > 2)
return
to_chat(user, SPAN_WARNING("It doesn't look quite right..."))
else
@@ -29,9 +29,9 @@
// Because we can't perfectly duplicate some examine() output, we directly examine the AM it is copying. It's messy but
// this is to prevent easy checks from the opposing force.
/mob/living/simple_animal/illusion/examine(mob/user)
/mob/living/simple_animal/illusion/examine(mob/user, distance, is_adjacent)
if(copying)
return copying.examine(user)
return copying.examine(user, distance, is_adjacent)
else
return list("???")
@@ -210,7 +210,7 @@
..()
/mob/living/simple_animal/examine(mob/user)
..()
. = ..()
if (stat == DEAD)
to_chat(user, "<span class='danger'>It looks dead.</span>")
+2 -10
View File
@@ -360,19 +360,11 @@
mob_win.open()
//mob verbs are faster than object verbs. See http://www.byond.com/forum/?post=1326139&page=2#comment8198716 for why this isn't atom/verb/examine()
/mob/verb/examinate(atom/A as mob|obj|turf in view())
/mob/verb/ExaminateVerb(atom/A as mob|obj|turf in view())
set name = "Examine"
set category = "IC"
if(!A)
return
if((is_blind() || usr.stat) && !isobserver(src))
to_chat(src, "<span class='notice'>Something is there but you can't see it.</span>")
return 1
face_atom(A)
A.examine(src)
examinate(usr, A)
/mob/proc/can_examine()
if(client?.eye == src)
@@ -1,6 +1,6 @@
/obj/item/modular_computer/examine(mob/user)
..()
if(Adjacent(user))
/obj/item/modular_computer/examine(mob/user, distance, is_adjacent)
. = ..()
if(is_adjacent)
to_chat(user, FONT_SMALL(SPAN_NOTICE("It contains the following hardware:")))
for(var/obj/CH in get_all_components())
to_chat(user, FONT_SMALL(SPAN_NOTICE(" - [capitalize_first_letters(CH.name)]")))
@@ -337,8 +337,8 @@
P.focused_conv.cl_send(P, text, M)
registered_message = text
/obj/item/modular_computer/examine(mob/user)
/obj/item/modular_computer/examine(mob/user, distance, is_adjacent)
. = ..()
var/obj/item/card/id/id = GetID()
if(istype(id) && Adjacent(user))
if(istype(id) && is_adjacent)
id.show(user)
+3 -2
View File
@@ -207,8 +207,9 @@
for(var/obj/O in src)
O.hide(0)
/turf/simulated/open/examine(mob/user, distance, infix, suffix)
if(..(user, 2))
/turf/simulated/open/examine(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(distance <= 2)
var/depth = 1
for(var/T = GetBelow(src); isopenspace(T); T = GetBelow(T))
depth += 1
+2 -2
View File
@@ -208,7 +208,7 @@
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.")
else
@@ -228,4 +228,4 @@
return ..()
/obj/item/organ/internal/brain/zombie
relative_size = 100
relative_size = 100
+1 -1
View File
@@ -212,7 +212,7 @@
return
/obj/item/organ/examine(mob/user)
..(user)
. = ..()
if(status & ORGAN_DEAD)
to_chat(user, "<span class='notice'>The decay has set in.</span>")
+3 -3
View File
@@ -154,9 +154,9 @@
return //no eating the limb until everything's been removed
return ..()
/obj/item/organ/external/examine()
..()
if(in_range(usr, src) || istype(usr, /mob/abstract/observer))
/obj/item/organ/external/examine(mob/user, distance, is_adjacent)
. = ..()
if(distance <= 1)
for(var/obj/item/I in contents)
if(istype(I, /obj/item/organ))
continue
+2 -2
View File
@@ -230,7 +230,7 @@
. = ..()
/obj/item/organ/internal/ipc_tag/examine(mob/user)
..()
. = ..()
to_chat(user, SPAN_NOTICE("Serial Autogeneration: [auto_generate ? "Yes" : "No"]"))
to_chat(user, SPAN_NOTICE("Serial Number: [serial_number]"))
to_chat(user, SPAN_NOTICE("Ownership Info: [ownership_info]"))
@@ -246,7 +246,7 @@
to_chat(user, SPAN_WARNING("\The [src] reads, \"Scanning failure, please submit scanner for repairs.\""))
return
if(!S.hacked)
user.examinate(src)
examinate(user, src)
else
user.visible_message(SPAN_WARNING("\The [user] starts fiddling with \the [src]..."), SPAN_NOTICE("You start fiddling with \the [src]..."))
if(do_after(user, 30, TRUE, src))
+3 -3
View File
@@ -163,9 +163,9 @@
return ..()
/obj/item/organ/internal/vaurca/preserve/examine(mob/user)
. = ..(user, 0)
if(.)
/obj/item/organ/internal/vaurca/preserve/examine(mob/user, distance, is_adjacent)
. = ..()
if(distance <= 0)
var/celsius_temperature = air_contents.temperature - T0C
var/descriptive
switch(celsius_temperature)
@@ -53,10 +53,10 @@
return
return ..()
/obj/item/ship_ammunition/examine(mob/user, distance)
/obj/item/ship_ammunition/examine(mob/user, distance, is_adjacent)
. = ..()
if(written_message)
if(get_dist(user, src) > 3)
if(distance > 3)
to_chat(user, "It has something written on it, but you'd need to get closer to tell what the writing says.")
else
to_chat(user, "It has a message written on the casing: <span class='notice'><i>[written_message]</i></span>")
+4 -4
View File
@@ -95,14 +95,14 @@
if(new_text)
free_space -= length(strip_html_properly(new_text))
/obj/item/paper/examine(mob/user)
/obj/item/paper/examine(mob/user, distance, is_adjacent)
. = ..()
if (old_name && (icon_state == "paper_plane" || icon_state == "paper_swan"))
to_chat(user, SPAN_NOTICE("You're going to have to unfold it before you can read it."))
return
if(name != initial(name))
to_chat(user,"It's titled '[name]'.")
if(in_range(user, src) || isobserver(user) || in_slide_projector(user))
if(distance <= 1)
show_content(user)
else
to_chat(user, SPAN_NOTICE("You have to go closer if you want to read it."))
@@ -200,7 +200,7 @@
update_icon()
return
user.examinate(src)
examinate(user, src)
if(rigged && (Holiday == "April Fool's Day"))
if(last_honk <= world.time - 20) //Spam limiter.
last_honk = world.time
@@ -214,7 +214,7 @@
if(target_zone == BP_EYES)
user.visible_message(SPAN_NOTICE("You show \the [src] to [M]."), \
SPAN_NOTICE("[user] holds up \the [src] and shows it to [M]."))
M.examinate(src)
examinate(M, src)
else if(target_zone == BP_MOUTH && paper_like) // lipstick wiping
if(ishuman(M))
+3 -2
View File
@@ -91,8 +91,9 @@
else
to_chat(user, "<span class='warning'>You must hold \the [P] steady to burn \the [src].</span>")
/obj/item/paper_bundle/examine(mob/user)
if(..(user, 1))
/obj/item/paper_bundle/examine(mob/user, distance, is_adjacent)
. = ..()
if(is_adjacent)
src.show_content(user)
else
to_chat(user, "<span class='notice'>It is too far away.</span>")
+2 -2
View File
@@ -93,8 +93,8 @@
*/
/obj/item/paper_bin/examine(mob/user)
if(get_dist(src, user) <= 1)
/obj/item/paper_bin/examine(mob/user, distance, is_adjacent)
if(distance <= 1)
if(amount)
to_chat(user, "<span class='notice'>There " + (amount > 1 ? "are [amount] papers" : "is one paper") + " in the bin.</span>")
else
+6 -6
View File
@@ -44,7 +44,7 @@ var/global/photo_count = 0
id = photo_count++
/obj/item/photo/attack_self(mob/user as mob)
user.examinate(src)
examinate(user, src)
/obj/item/photo/attackby(obj/item/P as obj, mob/user as mob)
if(P.ispen())
@@ -53,9 +53,9 @@ var/global/photo_count = 0
scribble = txt
..()
/obj/item/photo/examine(mob/user)
/obj/item/photo/examine(mob/user, distance, is_adjacent)
. = ..()
if(in_range(user, src) || isobserver(user) || in_slide_projector(user))
if(distance <= 1)
show(user)
to_chat(user, "<span class='notice'>[picture_desc]</span>")
else
@@ -144,9 +144,9 @@ var/global/photo_count = 0
var/icon_off = "camera_off"
var/size = 3
/obj/item/device/camera/examine(mob/user, distance)
..()
if(Adjacent(user))
/obj/item/device/camera/examine(mob/user, distance, is_adjacent)
. = ..()
if(is_adjacent)
to_chat(user, SPAN_NOTICE("It has <b>[pictures_left]</b> photos left."))
/obj/item/device/camera/verb/change_size()
+3 -2
View File
@@ -535,8 +535,9 @@
if (!mapload)
addtimer(CALLBACK(src, PROC_REF(update)), 5, TIMER_UNIQUE)
/obj/machinery/power/apc/examine(mob/user)
if(..(user, 1))
/obj/machinery/power/apc/examine(mob/user, distance, is_adjacent)
. = ..()
if(distance <= 1)
if(stat & BROKEN)
to_chat(user, "Looks broken.")
return
+1 -1
View File
@@ -41,7 +41,7 @@
set_state(1)
/obj/machinery/power/breakerbox/examine(mob/user)
..()
. = ..()
if(on)
to_chat(user, SPAN_GOOD("It seems to be online."))
else
+1 -1
View File
@@ -656,7 +656,7 @@ By design, d1 is the smallest direction and d2 is the highest
slot_flags = SLOT_BELT
/obj/item/stack/cable_coil/examine(mob/user)
..()
. = ..()
if(!uses_charge)
to_chat(user, "There [src.amount == 1 ? "is" : "are"] <b>[src.amount]</b> [src.singular_name]\s of cable in the coil.")
else
+2 -2
View File
@@ -81,10 +81,10 @@
return amount_used
/obj/item/cell/examine(mob/user)
/obj/item/cell/examine(mob/user, distance, is_adjacent)
. = ..()
if(get_dist(src, user) > 1)
if(distance > 1)
return
if(maxcharge <= 2500)
+2 -2
View File
@@ -28,8 +28,8 @@
QDEL_NULL(cell)
return ..()
/obj/machinery/light_construct/examine(mob/user)
if(!..(user, 2))
/obj/machinery/light_construct/examine(mob/user, distance, is_adjacent)
if(distance > 2)
return
switch(stage)
+5 -5
View File
@@ -66,8 +66,8 @@
icon_state = "[base_icon]_[active]"
return ..()
/obj/machinery/power/portgen/examine(mob/user)
if(!..(user, 1))
/obj/machinery/power/portgen/examine(mob/user, distance, is_adjacent)
if(distance > 1)
return
if(active)
to_chat(user, SPAN_NOTICE("The generator is on."))
@@ -160,8 +160,8 @@
power_gen = round(initial(power_gen) * (max(2, temp_rating) / 2))
/obj/machinery/power/portgen/basic/examine(mob/user)
..(user)
/obj/machinery/power/portgen/basic/examine(mob/user, distance, is_adjacent)
. = ..()
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.")
if(IsBroken()) to_chat(user, SPAN_WARNING("\The [src] seems to have broken down."))
@@ -490,7 +490,7 @@
create_reagents(coolant_volume)
..()
/obj/machinery/power/portgen/basic/fusion/examine(mob/user)
/obj/machinery/power/portgen/basic/fusion/examine(mob/user, distance, is_adjacent)
. = ..()
to_chat(user, "The auxilary tank shows [reagents.total_volume]u of liquid in it.")
+3 -3
View File
@@ -35,8 +35,8 @@
var/datum/effect_system/sparks/spark_system
/obj/machinery/power/emitter/examine(mob/user)
..()
/obj/machinery/power/emitter/examine(mob/user, distance, is_adjacent)
. = ..()
switch(state)
if(EMITTER_LOOSE)
to_chat(user, SPAN_NOTICE("\The [src] isn't attached to anything and is not ready to fire."))
@@ -44,7 +44,7 @@
to_chat(user, SPAN_NOTICE("\The [src] is bolted to the floor, but not yet ready to fire."))
if(EMITTER_WELDED)
to_chat(user, SPAN_WARNING("\The [src] is bolted and welded to the floor, and ready to fire."))
if(Adjacent(user))
if(is_adjacent)
to_chat(user, SPAN_NOTICE("The shot counter display reads: [shot_counter]"))
/obj/machinery/power/emitter/Destroy()
@@ -95,7 +95,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
desc = "[initial(desc)] It seems completely assembled."
if(powered)
desc = initial(desc)
..()
. = ..()
return
/obj/structure/particle_accelerator/attackby(obj/item/W, mob/user)
@@ -249,7 +249,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
desc = "[initial(desc)] It seems completely assembled."
if(powered)
desc = initial(desc)
..()
. = ..()
return
+2 -2
View File
@@ -15,9 +15,9 @@
var/ChargeCapacity = 5000000
var/IOCapacity = 250000
/obj/item/smes_coil/examine(mob/user)
/obj/item/smes_coil/examine(mob/user, distance, is_adjacent)
. = ..()
if(Adjacent(user))
if(is_adjacent)
to_chat(user, "The label reads:\
<div class='notice' style='padding-left:2rem'>Only certified professionals are allowed to handle and install this component.<br>\
Charge capacity: [ChargeCapacity/1000000] MJ<br>\
+1 -1
View File
@@ -70,7 +70,7 @@
..()
/obj/singularity/energy_ball/examine(mob/user)
..()
. = ..()
if(orbiting_balls.len)
to_chat(user, "There are [orbiting_balls.len] energy balls orbiting \the [src].")
+2 -2
View File
@@ -79,7 +79,7 @@
icon_state = spent_icon
/obj/item/ammo_casing/examine(mob/user)
..()
. = ..()
if (!BB)
to_chat(user, "This one is spent.")
@@ -182,7 +182,7 @@
recyclable = FALSE
/obj/item/ammo_magazine/examine(mob/user)
..()
. = ..()
to_chat(user, "There [(stored_ammo.len == 1)? "is" : "are"] [stored_ammo.len] round\s left!")
//magazine icon state caching (caching lists are in SSicon_cache)
@@ -27,9 +27,9 @@
add_ammo(C)
addtimer(CALLBACK(src, PROC_REF(check_ammo)), 5) // if we don't have any ammo in 5 deciseconds, we're an empty pile, which is worthless, so self-delete
/obj/item/ammo_pile/examine(mob/user)
/obj/item/ammo_pile/examine(mob/user, distance, is_adjacent)
. = ..()
if(Adjacent(user))
if(is_adjacent)
to_chat(user, SPAN_NOTICE("It contains [length(ammo)] rounds."))
/obj/item/ammo_pile/attack()
+3 -3
View File
@@ -664,9 +664,9 @@
suppressor = null
update_icon()
/obj/item/gun/examine(mob/user)
..()
if(get_dist(src, user) > 1)
/obj/item/gun/examine(mob/user, distance, is_adjacent)
. = ..()
if(distance > 1)
return
if(markings)
to_chat(user, SPAN_NOTICE("It has [markings] [markings == 1 ? "notch" : "notches"] carved into the stock."))
+3 -3
View File
@@ -34,9 +34,9 @@
if (spikes < max_spikes)
addtimer(CALLBACK(src, PROC_REF(regen_spike)), spike_gen_time, TIMER_UNIQUE)
/obj/item/gun/launcher/spikethrower/examine(mob/user)
..(user)
if(get_dist(src, user) > 1)
/obj/item/gun/launcher/spikethrower/examine(mob/user, distance, is_adjacent)
. = ..()
if(distance > 1)
return
to_chat(user, "It has [spikes] spike\s remaining.")
+3 -3
View File
@@ -129,9 +129,9 @@
return null
/obj/item/gun/energy/examine(mob/user)
..(user)
if(get_dist(src, user) > 1)
/obj/item/gun/energy/examine(mob/user, distance, is_adjacent)
. = ..()
if(distance > 1)
return
var/shots_remaining = round(power_supply.charge / charge_cost)
to_chat(user, "Has [shots_remaining] shot\s remaining.")
@@ -21,9 +21,9 @@
charge_cost = 666.66 // 15 shots on a high cap cell
needspin = FALSE
/obj/item/gun/energy/plasmacutter/examine(mob/user)
/obj/item/gun/energy/plasmacutter/examine(mob/user, distance, is_adjacent)
..()
if(user.Adjacent(src))
if(is_adjacent)
if(power_supply)
to_chat(user, FONT_SMALL(SPAN_NOTICE("It has a <b>[capitalize_first_letters(power_supply.name)]</b> installed as its power supply.")))
else
@@ -30,9 +30,9 @@
var/named = 0
var/described = 0
/obj/item/gun/energy/laser/prototype/examine(mob/user)
..(user)
if(get_dist(src, user) > 1)
/obj/item/gun/energy/laser/prototype/examine(mob/user, distance, is_adjacent)
. = ..(user)
if(distance > 1)
return
if(gun_mods.len)
for(var/obj/item/laser_components/modifier/modifier in gun_mods)
@@ -220,7 +220,7 @@
icon_state = "crossbowframe[buildstate]"
/obj/item/crossbowframe/examine(mob/user)
..(user)
. = ..()
switch(buildstate)
if(1) to_chat(user, "It has a loose rod frame in place.")
if(2) to_chat(user, "It has a steel backbone welded in place.")
@@ -370,5 +370,4 @@
/obj/item/gun/launcher/crossbow/RFD/examine(var/user)
. = ..()
if(.)
to_chat(user, "It currently holds <b>[stored_matter]/[max_stored_matter]</b> matter-units.")
to_chat(user, "It currently holds <b>[stored_matter]/[max_stored_matter]</b> matter-units.")
@@ -43,9 +43,9 @@
to_chat(M, SPAN_WARNING("You pump [src], but the magazine is empty."))
update_icon()
/obj/item/gun/launcher/grenade/examine(mob/user)
/obj/item/gun/launcher/grenade/examine(mob/user, distance, is_adjacent)
. = ..()
if(Adjacent(user))
if(is_adjacent)
to_chat(user, SPAN_NOTICE("It has [get_ammo()] grenade\s remaining."))
if(chambered)
to_chat(user, SPAN_NOTICE("\A [chambered] is chambered."))

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