Merge pull request #560 from ArchieBeepBoop/examinerefactor

Examine Code Refactor
This commit is contained in:
Dahlular
2020-10-06 21:02:05 -06:00
committed by GitHub
334 changed files with 1337 additions and 1365 deletions
+6 -6
View File
@@ -34,15 +34,15 @@
return
/obj/effect/sound_emitter/examine(mob/user)
..()
. = ..()
if(!isobserver(user))
return
to_chat(user, "<span class='boldnotice'>Sound File:</span> [sound_file ? sound_file : "None chosen"]")
to_chat(user, "<span class='boldnotice'>Mode:</span> [motus_operandi]</span>")
to_chat(user, "<span class='boldnotice'>Range:</span> [emitter_range]</span>")
to_chat(user, "<b>Sound is playing at [sound_volume]% volume.</b>")
. += "<span class='boldnotice'>Sound File:</span> [sound_file ? sound_file : "None chosen"]"
. += "<span class='boldnotice'>Mode:</span> [motus_operandi]</span>"
. += "<span class='boldnotice'>Range:</span> [emitter_range]</span>"
. += "<b>Sound is playing at [sound_volume]% volume.</b>"
if(user.client.holder)
to_chat(user, "<b>Alt-click it to quickly activate it!</b>")
. += "<b>Alt-click it to quickly activate it!</b>"
//ATTACK GHOST IGNORING PARENT RETURN VALUE
/obj/effect/sound_emitter/attack_ghost(mob/user)
@@ -606,16 +606,16 @@ Congratulations! You are now trained for invasive xenobiology research!"}
. = ..()
/obj/item/abductor_baton/examine(mob/user)
..()
. = ..()
switch(mode)
if(BATON_STUN)
to_chat(user, "<span class='warning'>The baton is in stun mode.</span>")
. += "<span class='warning'>The baton is in stun mode.</span>"
if(BATON_SLEEP)
to_chat(user, "<span class='warning'>The baton is in sleep inducement mode.</span>")
. += "<span class='warning'>The baton is in sleep inducement mode.</span>"
if(BATON_CUFF)
to_chat(user, "<span class='warning'>The baton is in restraining mode.</span>")
. += "<span class='warning'>The baton is in restraining mode.</span>"
if(BATON_PROBE)
to_chat(user, "<span class='warning'>The baton is in probing mode.</span>")
. += "<span class='warning'>The baton is in probing mode.</span>"
/obj/item/radio/headset/abductor
name = "alien headset"
@@ -170,9 +170,9 @@ GLOBAL_LIST_EMPTY(blob_nodes)
add_points(0)
/mob/camera/blob/examine(mob/user)
..()
. = ..()
if(blob_reagent_datum)
to_chat(user, "Its chemical is <font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</font>.")
. += "Its chemical is <font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</font>."
/mob/camera/blob/update_health_hud()
if(blob_core)
+18 -17
View File
@@ -243,18 +243,19 @@
else
return ..()
/obj/structure/blob/proc/chemeffectreport(mob/user)
/obj/structure/blob/proc/chemeffectreport()
. = list()
if(overmind)
to_chat(user, "<b>Material: <font color=\"[overmind.blob_reagent_datum.color]\">[overmind.blob_reagent_datum.name]</font><span class='notice'>.</span></b>")
to_chat(user, "<b>Material Effects:</b> <span class='notice'>[overmind.blob_reagent_datum.analyzerdescdamage]</span>")
to_chat(user, "<b>Material Properties:</b> <span class='notice'>[overmind.blob_reagent_datum.analyzerdesceffect]</span><br>")
. += "<b>Material: <font color=\"[overmind.blob_reagent_datum.color]\">[overmind.blob_reagent_datum.name]</font><span class='notice'>.</span></b>"
. += "<b>Material Effects:</b> <span class='notice'>[overmind.blob_reagent_datum.analyzerdescdamage]</span>"
. += "<b>Material Properties:</b> <span class='notice'>[overmind.blob_reagent_datum.analyzerdesceffect]</span><br>"
else
to_chat(user, "<b>No Material Detected!</b><br>")
. += "<b>No Material Detected!</b><br>"
/obj/structure/blob/proc/typereport(mob/user)
to_chat(user, "<b>Blob Type:</b> <span class='notice'>[uppertext(initial(name))]</span>")
to_chat(user, "<b>Health:</b> <span class='notice'>[obj_integrity]/[max_integrity]</span>")
to_chat(user, "<b>Effects:</b> <span class='notice'>[scannerreport()]</span>")
/obj/structure/blob/proc/typereport()
. = list("<b>Blob Type:</b> <span class='notice'>[uppertext(initial(name))]</span>")
. += "<b>Health:</b> <span class='notice'>[obj_integrity]/[max_integrity]</span>"
. += "<b>Effects:</b> <span class='notice'>[scannerreport()]</span>"
/obj/structure/blob/attack_animal(mob/living/simple_animal/M)
if(ROLE_BLOB in M.faction) //sorry, but you can't kill the blob as a blobbernaut
@@ -310,20 +311,20 @@
return B
/obj/structure/blob/examine(mob/user)
..()
. = ..()
var/datum/atom_hud/hud_to_check = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
if(user.research_scanner || hud_to_check.hudusers[user])
to_chat(user, "<b>Your HUD displays an extensive report...</b><br>")
. += "<b>Your HUD displays an extensive report...</b><br>"
if(overmind)
to_chat(user, "<b>Progress to Critical Mass:</b> <span class='notice'>[overmind.blobs_legit.len]/[overmind.blobwincount].</span>")
. += "<b>Progress to Critical Mass:</b> <span class='notice'>[overmind.blobs_legit.len]/[overmind.blobwincount].</span>"
else
to_chat(user, "<b>Core neutralized. Critical mass no longer attainable.</b>")
chemeffectreport(user)
typereport(user)
. += "<b>Core neutralized. Critical mass no longer attainable.</b>"
. += chemeffectreport()
. += typereport()
else
if(isobserver(user) && overmind)
to_chat(user, "<b>Progress to Critical Mass:</b> <span class='notice'>[overmind.blobs_legit.len]/[overmind.blobwincount].</span>")
to_chat(user, "It seems to be made of [get_chem_name()].")
. += "<b>Progress to Critical Mass:</b> <span class='notice'>[overmind.blobs_legit.len]/[overmind.blobwincount].</span>"
. += "It seems to be made of [get_chem_name()]."
/obj/structure/blob/proc/scannerreport()
return "A generic blob. Looks like someone forgot to override this proc, adminhelp this."
@@ -21,5 +21,5 @@
/obj/effect/clockwork/examine(mob/user)
if((is_servant_of_ratvar(user) || isobserver(user)) && clockwork_desc)
desc = clockwork_desc
..()
. = ..()
desc = initial(desc)
@@ -6,6 +6,7 @@
/obj/effect/clockwork/overlay/examine(mob/user)
if(linked)
linked.examine(user)
return ..()
/obj/effect/clockwork/overlay/ex_act()
return FALSE
@@ -191,15 +191,15 @@
..()
/obj/effect/clockwork/sigil/transmission/examine(mob/user)
..()
. = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
var/structure_number = 0
for(var/obj/structure/destructible/clockwork/powered/P in range(SIGIL_ACCESS_RANGE, src))
structure_number++
to_chat(user, "<span class='[get_clockwork_power() ? "brass":"alloy"]'>It is storing <b>[DisplayPower(get_clockwork_power())]</b> of shared power, \
and <b>[structure_number]</b> clockwork structure[structure_number == 1 ? " is":"s are"] in range.</span>")
. += "<span class='[get_clockwork_power() ? "brass":"alloy"]'>It is storing <b>[DisplayPower(get_clockwork_power())]</b> of shared power, \
and <b>[structure_number]</b> clockwork structure[structure_number == 1 ? " is":"s are"] in range.</span>"
if(iscyborg(user))
to_chat(user, "<span class='brass'>You can recharge from the [sigil_name] by crossing it.</span>")
. += "<span class='brass'>You can recharge from the [sigil_name] by crossing it.</span>"
/obj/effect/clockwork/sigil/transmission/sigil_effects(mob/living/L)
if(is_servant_of_ratvar(L))
@@ -280,13 +280,13 @@
can_dust = FALSE
/obj/effect/clockwork/sigil/vitality/examine(mob/user)
..()
. = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
to_chat(user, "<span class='[GLOB.clockwork_vitality ? "inathneq_small":"alloy"]'>It has access to <b>[GLOB.ratvar_awakens ? "INFINITE":GLOB.clockwork_vitality]</b> units of vitality.</span>")
. += "<span class='[GLOB.clockwork_vitality ? "inathneq_small":"alloy"]'>It has access to <b>[GLOB.ratvar_awakens ? "INFINITE":GLOB.clockwork_vitality]</b> units of vitality.</span>"
if(GLOB.ratvar_awakens)
to_chat(user, "<span class='inathneq_small'>It can revive Servants at no cost!</span>")
. += "<span class='inathneq_small'>It can revive Servants at no cost!</span>"
else
to_chat(user, "<span class='inathneq_small'>It can revive Servants at a cost of <b>[revive_cost]</b> vitality.</span>")
. += "<span class='inathneq_small'>It can revive Servants at a cost of <b>[revive_cost]</b> vitality.</span>"
/obj/effect/clockwork/sigil/vitality/sigil_effects(mob/living/L)
if((is_servant_of_ratvar(L) && L.suiciding) || sigil_active)
@@ -53,9 +53,9 @@
return TRUE
/obj/effect/clockwork/spatial_gateway/examine(mob/user)
..()
. = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
to_chat(user, "<span class='brass'>It has [uses] use\s remaining.</span>")
. += "<span class='brass'>It has [uses] use\s remaining.</span>"
//ATTACK GHOST IGNORING PARENT RETURN VALUE
/obj/effect/clockwork/spatial_gateway/attack_ghost(mob/user)
@@ -20,5 +20,5 @@
/obj/item/clockwork/examine(mob/user)
if((is_servant_of_ratvar(user) || isobserver(user)) && clockwork_desc)
desc = clockwork_desc
..()
. = ..()
desc = initial(desc)
@@ -12,7 +12,7 @@
/obj/item/clockwork/component/examine(mob/user)
. = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
to_chat(user, "<span class='[get_component_span(component_id)]'>You can activate this in your hand to break it down for power.</span>")
. += "<span class='[get_component_span(component_id)]'>You can activate this in your hand to break it down for power.</span>"
/obj/item/clockwork/component/attack_self(mob/living/user)
if(is_servant_of_ratvar(user))
@@ -181,9 +181,9 @@
pixel_y = rand(-sprite_shift, sprite_shift)
/obj/item/clockwork/alloy_shards/examine(mob/user)
..()
. = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
to_chat(user, "<span class='brass'>Can be consumed by a replica fabricator as a source of power.</span>")
. += "<span class='brass'>Can be consumed by a replica fabricator as a source of power.</span>"
/obj/item/clockwork/alloy_shards/proc/replace_name_desc()
name = "replicant alloy shard"
@@ -27,11 +27,11 @@
armour_penetration = initial(armour_penetration)
/obj/item/clockwork/weapon/ratvarian_spear/examine(mob/user)
..()
. = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
to_chat(user, "<span class='inathneq_small'>Attacks on living non-Servants will generate <b>[bonus_burn]</b> units of vitality.</span>")
. += "<span class='inathneq_small'>Attacks on living non-Servants will generate <b>[bonus_burn]</b> units of vitality.</span>"
if(!iscyborg(user))
to_chat(user, "<span class='brass'>Throwing the spear will do massive damage, break the spear, and knock down the target.</span>")
. += "<span class='brass'>Throwing the spear will do massive damage, break the spear, and knock down the target.</span>"
/obj/item/clockwork/weapon/ratvarian_spear/attack(mob/living/target, mob/living/carbon/human/user)
. = ..()
@@ -139,15 +139,15 @@
adjust_clockwork_power(0.1) //Slabs serve as very weak power generators on their own (no, not enough to justify spamming them)
/obj/item/clockwork/slab/examine(mob/user)
..()
. = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
if(LAZYLEN(quickbound))
for(var/i in 1 to quickbound.len)
if(!quickbound[i])
continue
var/datum/clockwork_scripture/quickbind_slot = quickbound[i]
to_chat(user, "<b>Quickbind</b> button: <span class='[get_component_span(initial(quickbind_slot.primary_component))]'>[initial(quickbind_slot.name)]</span>.")
to_chat(user, "<b>Available power:</b> <span class='bold brass'>[DisplayPower(get_clockwork_power())].</span>")
. += "<b>Quickbind</b> button: <span class='[get_component_span(initial(quickbind_slot.primary_component))]'>[initial(quickbind_slot.name)]</span>."
. += "<b>Available power:</b> <span class='bold brass'>[DisplayPower(get_clockwork_power())].</span>"
//Slab actions; Hierophant, Quickbind
/obj/item/clockwork/slab/ui_action_click(mob/user, action)
@@ -28,7 +28,7 @@
/obj/item/clockwork/construct_chassis/examine(mob/user)
clockwork_desc = "[clockwork_desc]<br>[construct_desc]"
..()
. = ..()
clockwork_desc = initial(clockwork_desc)
//ATTACK HAND IGNORING PARENT RETURN VALUE
@@ -44,16 +44,16 @@
speed_multiplier = initial(speed_multiplier)
/obj/item/clockwork/replica_fabricator/examine(mob/living/user)
..()
. = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
to_chat(user, "<span class='brass'>Can be used to replace walls, floors, tables, windows, windoors, and airlocks with Clockwork variants.</span>")
to_chat(user, "<span class='brass'>Can construct Clockwork Walls on Clockwork Floors and deconstruct Clockwork Walls to Clockwork Floors.</span>")
. += "<span class='brass'>Can be used to replace walls, floors, tables, windows, windoors, and airlocks with Clockwork variants.</span>"
. += "<span class='brass'>Can construct Clockwork Walls on Clockwork Floors and deconstruct Clockwork Walls to Clockwork Floors.</span>"
if(uses_power)
to_chat(user, "<span class='alloy'>It can consume floor tiles, rods, metal, and plasteel for power at rates of <b>2:[DisplayPower(POWER_ROD)]</b>, <b>1:[DisplayPower(POWER_ROD)]</b>, <b>1:[DisplayPower(POWER_METAL)]</b>, \
and <b>1:[DisplayPower(POWER_PLASTEEL)]</b>, respectively.</span>")
to_chat(user, "<span class='alloy'>It can also consume brass sheets for power at a rate of <b>1:[DisplayPower(POWER_FLOOR)]</b>.</span>")
to_chat(user, "<span class='alloy'>Use it in-hand to produce <b>5</b> brass sheets at a cost of <b>[DisplayPower(POWER_WALL_TOTAL)]</b> power.</span>")
to_chat(user, "<span class='alloy'>It has access to <b>[DisplayPower(get_clockwork_power())]</b> of power.</span>")
. += "<span class='alloy'>It can consume floor tiles, rods, metal, and plasteel for power at rates of <b>2:[DisplayPower(POWER_ROD)]</b>, <b>1:[DisplayPower(POWER_ROD)]</b>, <b>1:[DisplayPower(POWER_METAL)]</b>, \
and <b>1:[DisplayPower(POWER_PLASTEEL)]</b>, respectively.</span>"
. += "<span class='alloy'>It can also consume brass sheets for power at a rate of <b>1:[DisplayPower(POWER_FLOOR)]</b>.</span>"
. += "<span class='alloy'>Use it in-hand to produce <b>5</b> brass sheets at a cost of <b>[DisplayPower(POWER_WALL_TOTAL)]</b> power.</span>"
. += "<span class='alloy'>It has access to <b>[DisplayPower(get_clockwork_power())]</b> of power.</span>"
/obj/item/clockwork/replica_fabricator/attack_self(mob/living/user)
if(is_servant_of_ratvar(user))
@@ -39,7 +39,7 @@
/obj/item/mmi/posibrain/soul_vessel/examine(mob/user)
if((is_servant_of_ratvar(user) || isobserver(user)) && clockwork_desc)
desc = clockwork_desc
..()
. = ..()
desc = initial(desc)
/obj/item/mmi/posibrain/soul_vessel/transfer_personality(mob/candidate)
@@ -57,7 +57,7 @@
msg += "[addendum]\n"
msg += "*---------*</span>"
to_chat(user, msg)
return list(msg)
/mob/living/simple_animal/hostile/clockwork/proc/examine_info() //Override this on a by-mob basis to have unique examine info
return
@@ -43,10 +43,10 @@
var/can_see_clockwork = is_servant_of_ratvar(user) || isobserver(user)
if(can_see_clockwork && clockwork_desc)
desc = clockwork_desc
..()
. = ..()
desc = initial(desc)
if(unanchored_icon)
to_chat(user, "<span class='notice'>[src] is [anchored ? "":"not "]secured to the floor.</span>")
. += "<span class='notice'>[src] is [anchored ? "":"not "]secured to the floor.</span>"
/obj/structure/destructible/clockwork/examine_status(mob/user)
if(is_servant_of_ratvar(user) || isobserver(user))
@@ -155,12 +155,12 @@
var/inactive_icon = null //icon_state while process() isn't being called
/obj/structure/destructible/clockwork/powered/examine(mob/user)
..()
. = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
if(!can_access_clockwork_power(src))
to_chat(user, "<span class='alloy'>It has no access to the power network! Create a sigil of transmission nearby.</span>")
. += "<span class='alloy'>It has no access to the power network! Create a sigil of transmission nearby.</span>"
else
to_chat(user, "<span class='brass'>It has access to <b>[DisplayPower(get_clockwork_power())]</b> of power.</span>")
. += "<span class='brass'>It has access to <b>[DisplayPower(get_clockwork_power())]</b> of power.</span>"
/obj/structure/destructible/clockwork/powered/Destroy()
SSfastprocess.processing -= src
@@ -16,16 +16,16 @@
return ..()
/obj/structure/destructible/clockwork/trap/examine(mob/user)
..()
. = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
to_chat(user, "It's wired to:")
. += "It's wired to:"
if(!wired_to.len)
to_chat(user, "Nothing.")
. += "Nothing."
else
for(var/V in wired_to)
var/obj/O = V
var/distance = get_dist(src, O)
to_chat(user, "[O] ([distance == 0 ? "same tile" : "[distance] tiles [dir2text(get_dir(src, O))]"])")
. += "[O] ([distance == 0 ? "same tile" : "[distance] tiles [dir2text(get_dir(src, O))]"])"
/obj/structure/destructible/clockwork/trap/wrench_act(mob/living/user, obj/item/I)
if(!is_servant_of_ratvar(user))
@@ -223,34 +223,34 @@
/obj/structure/destructible/clockwork/massive/celestial_gateway/examine(mob/user)
icon_state = "spatial_gateway" //cheat wildly by pretending to have an icon
..()
. = ..()
icon_state = initial(icon_state)
if(is_servant_of_ratvar(user) || isobserver(user))
if(!active)
to_chat(user, "<span class='big'><b>Time until the Ark's activation:</b> [DisplayTimeText(get_arrival_time())]</span>")
. += "<span class='big'><b>Time until the Ark's activation:</b> [DisplayTimeText(get_arrival_time())]</span>"
else
if(grace_period)
to_chat(user, "<span class='big'><b>Crew grace period time remaining:</b> [DisplayTimeText(get_arrival_time())]</span>")
. += "<span class='big'><b>Crew grace period time remaining:</b> [DisplayTimeText(get_arrival_time())]</span>"
else
to_chat(user, "<span class='big'><b>Time until Ratvar's arrival:</b> [DisplayTimeText(get_arrival_time())]</span>")
. += "<span class='big'><b>Time until Ratvar's arrival:</b> [DisplayTimeText(get_arrival_time())]</span>"
switch(progress_in_seconds)
if(-INFINITY to GATEWAY_REEBE_FOUND)
to_chat(user, "<span class='heavy_brass'>The Ark is feeding power into the bluespace field.</span>")
. += "<span class='heavy_brass'>The Ark is feeding power into the bluespace field.</span>"
if(GATEWAY_REEBE_FOUND to GATEWAY_RATVAR_COMING)
to_chat(user, "<span class='heavy_brass'>The field is ripping open a copy of itself in Ratvar's prison.</span>")
. += "<span class='heavy_brass'>The field is ripping open a copy of itself in Ratvar's prison.</span>"
if(GATEWAY_RATVAR_COMING to INFINITY)
to_chat(user, "<span class='heavy_brass'>With the bluespace field established, Ratvar is preparing to come through!</span>")
. += "<span class='heavy_brass'>With the bluespace field established, Ratvar is preparing to come through!</span>"
else
if(!active)
to_chat(user, "<span class='warning'>Whatever it is, it doesn't seem to be active.</span>")
. += "<span class='warning'>Whatever it is, it doesn't seem to be active.</span>"
else
switch(progress_in_seconds)
if(-INFINITY to GATEWAY_REEBE_FOUND)
to_chat(user, "<span class='warning'>You see a swirling bluespace anomaly steadily growing in intensity.</span>")
. += "<span class='warning'>You see a swirling bluespace anomaly steadily growing in intensity.</span>"
if(GATEWAY_REEBE_FOUND to GATEWAY_RATVAR_COMING)
to_chat(user, "<span class='warning'>The anomaly is stable, and you can see flashes of something from it.</span>")
. += "<span class='warning'>The anomaly is stable, and you can see flashes of something from it.</span>"
if(GATEWAY_RATVAR_COMING to INFINITY)
to_chat(user, "<span class='boldwarning'>The anomaly is stable! Something is coming through!</span>")
. += "<span class='boldwarning'>The anomaly is stable! Something is coming through!</span>"
/obj/structure/destructible/clockwork/massive/celestial_gateway/process()
if(seconds_until_activation == -1) //we never do anything
@@ -21,9 +21,9 @@
toggle(1)
/obj/structure/destructible/clockwork/powered/clockwork_obelisk/examine(mob/user)
..()
. = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
to_chat(user, "<span class='nzcrentr_small'>It requires <b>[DisplayPower(hierophant_cost)]</b> to broadcast over the Hierophant Network, and <b>[DisplayPower(gateway_cost)]</b> to open a Spatial Gateway.</span>")
. += "<span class='nzcrentr_small'>It requires <b>[DisplayPower(hierophant_cost)]</b> to broadcast over the Hierophant Network, and <b>[DisplayPower(gateway_cost)]</b> to open a Spatial Gateway.</span>"
/obj/structure/destructible/clockwork/powered/clockwork_obelisk/can_be_unfasten_wrench(mob/user, silent)
if(active)
@@ -47,16 +47,16 @@
STOP_PROCESSING(SSprocessing, src)
/obj/structure/destructible/clockwork/heralds_beacon/examine(mob/user)
..()
. = ..()
if(isobserver(user) || is_servant_of_ratvar(user))
if(!available)
if(!GLOB.ratvar_approaches)
to_chat(user, "<span class='bold alloy'>It can no longer be activated.</span>")
. += "<span class='bold alloy'>It can no longer be activated.</span>"
else
to_chat(user, "<span class='bold neovgre_small'>It has been activated!</span>")
. += "<span class='bold neovgre_small'>It has been activated!</span>"
else
to_chat(user, "<span class='brass'>There are <b>[time_remaining]</b> second[time_remaining != 1 ? "s" : ""] remaining to vote.</span>")
to_chat(user, "<span class='big brass'>There are <b>[voters.len]/[votes_needed]</b> votes to activate the beacon!</span>")
. += "<span class='brass'>There are <b>[time_remaining]</b> second[time_remaining != 1 ? "s" : ""] remaining to vote.</span>"
. += "<span class='big brass'>There are <b>[voters.len]/[votes_needed]</b> votes to activate the beacon!</span>"
/obj/structure/destructible/clockwork/heralds_beacon/attack_hand(mob/living/user)
. = ..()
@@ -17,9 +17,9 @@
var/mania_cost = 150
/obj/structure/destructible/clockwork/powered/mania_motor/examine(mob/user)
..()
. = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
to_chat(user, "<span class='sevtug_small'>It requires <b>[DisplayPower(mania_cost)]</b> to run.</span>")
. += "<span class='sevtug_small'>It requires <b>[DisplayPower(mania_cost)]</b> to run.</span>"
/obj/structure/destructible/clockwork/powered/mania_motor/forced_disable(bad_effects)
if(active)
@@ -25,8 +25,8 @@
return ..()
/obj/structure/destructible/clockwork/ocular_warden/examine(mob/user)
..()
to_chat(user, "<span class='brass'>[target ? "<b>It's fixated on [target]!</b>" : "Its gaze is wandering aimlessly."]</span>")
. = ..()
. += "<span class='brass'>[target ? "<b>It's fixated on [target]!</b>" : "Its gaze is wandering aimlessly."]</span>"
/obj/structure/destructible/clockwork/ocular_warden/hulk_damage()
return 25
@@ -25,11 +25,11 @@
. = ..()
/obj/structure/destructible/clockwork/stargazer/examine(mob/user)
..()
. = ..()
if(is_servant_of_ratvar(user))
to_chat(user, "<span class='nzcrentr_small'>Generates <b>[DisplayPower(STARGAZER_POWER)]</b> per second while viewing starlight within [STARGAZER_RANGE] tiles.</span>")
. += "<span class='nzcrentr_small'>Generates <b>[DisplayPower(STARGAZER_POWER)]</b> per second while viewing starlight within [STARGAZER_RANGE] tiles.</span>"
if(star_light_star_bright)
to_chat(user, "[is_servant_of_ratvar(user) ? "<span class='nzcrentr_small'>It can see starlight!</span>" : "It's shining brilliantly!"]")
. += "[is_servant_of_ratvar(user) ? "<span class='nzcrentr_small'>It can see starlight!</span>" : "It's shining brilliantly!"]"
/obj/structure/destructible/clockwork/stargazer/process()
star_light_star_bright = check_starlight()
+1 -1
View File
@@ -651,7 +651,7 @@
/obj/item/melee/blood_magic/manipulator/examine(mob/user)
. = ..()
if(iscultist(user))
to_chat(user, "<span class='cultitalic'>The [name] currently has <b>[uses]</b> blood charges left.</span>")
. += "<span class='cultitalic'>The [name] currently has <b>[uses]</b> blood charges left.</span>"
/obj/item/melee/blood_magic/manipulator/afterattack(atom/target, mob/living/carbon/human/user, proximity)
if(proximity)
+6 -5
View File
@@ -134,10 +134,11 @@
AddComponent(/datum/component/butchering, 50, 80)
/obj/item/twohanded/required/cult_bastard/examine(mob/user)
. = ..()
if(contents.len)
desc+="<br><b>There are [contents.len] souls trapped within the sword's core.</b>"
. += "<br><b>There are [contents.len] souls trapped within the sword's core.</b>"
else
desc+="<br>The sword appears to be quite lifeless."
. += "<br>The sword appears to be quite lifeless."
/obj/item/twohanded/required/cult_bastard/can_be_pulled(user)
return FALSE
@@ -572,11 +573,11 @@
var/uses = 4
/obj/item/cult_shift/examine(mob/user)
..()
. = ..()
if(uses)
to_chat(user, "<span class='cult'>It has [uses] use\s remaining.</span>")
. += "<span class='cult'>It has [uses] use\s remaining.</span>"
else
to_chat(user, "<span class='cult'>It seems drained.</span>")
. += "<span class='cult'>It seems drained.</span>"
/obj/item/cult_shift/proc/handle_teleport_grab(turf/T, mob/user)
var/mob/living/carbon/C = user
@@ -29,10 +29,10 @@
/obj/structure/destructible/cult/examine(mob/user)
..()
to_chat(user, "<span class='notice'>\The [src] is [anchored ? "":"not "]secured to the floor.</span>")
. = ..()
. += "<span class='notice'>\The [src] is [anchored ? "":"not "]secured to the floor.</span>"
if((iscultist(user) || isobserver(user)) && cooldowntime > world.time)
to_chat(user, "<span class='cult italic'>The magic in [src] is too weak, [p_they()] will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].</span>")
. += "<span class='cult italic'>The magic in [src] is too weak, [p_they()] will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].</span>"
/obj/structure/destructible/cult/examine_status(mob/user)
if(iscultist(user) || isobserver(user))
+5 -5
View File
@@ -15,12 +15,12 @@ This file contains the cult dagger and rune list code
GLOB.rune_types[initial(R.cultist_name)] = R //Uses the cultist name for displaying purposes
/obj/item/melee/cultblade/dagger/examine(mob/user)
..()
. = ..()
if(iscultist(user) || isobserver(user))
to_chat(user, "<span class='cult'>The scriptures of the Geometer. Allows the scribing of runes and access to the knowledge archives of the cult of Nar'Sie.</span>")
to_chat(user, "<span class='cult'>Striking a cult structure will unanchor or reanchor it.</span>")
to_chat(user, "<span class='cult'>Striking another cultist with it will purge holy water from them.</span>")
to_chat(user, "<span class='cult'>Striking a noncultist, however, will tear their flesh.</span>")
. += "<span class='cult'>The scriptures of the Geometer. Allows the scribing of runes and access to the knowledge archives of the cult of Nar'Sie.</span>"
. += "<span class='cult'>Striking a cult structure will unanchor or reanchor it.</span>"
. += "<span class='cult'>Striking another cultist with it will purge holy water from them.</span>"
. += "<span class='cult'>Striking a noncultist, however, will tear their flesh.</span>"
/obj/item/melee/cultblade/dagger/attack(mob/living/M, mob/living/user)
if(iscultist(M))
+9 -9
View File
@@ -48,13 +48,13 @@ Runes can either be invoked by one's self or with many different cultists. Each
add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "cult_runes", I)
/obj/effect/rune/examine(mob/user)
..()
. = ..()
if(iscultist(user) || user.stat == DEAD) //If they're a cultist or a ghost, tell them the effects
to_chat(user, "<b>Name:</b> [cultist_name]")
to_chat(user, "<b>Effects:</b> [capitalize(cultist_desc)]")
to_chat(user, "<b>Required Acolytes:</b> [req_cultists_text ? "[req_cultists_text]":"[req_cultists]"]")
. += "<b>Name:</b> [cultist_name]"
. += "<b>Effects:</b> [capitalize(cultist_desc)]"
. += "<b>Required Acolytes:</b> [req_cultists_text ? "[req_cultists_text]":"[req_cultists]"]"
if(req_keyword && keyword)
to_chat(user, "<b>Keyword:</b> [keyword]")
. += "<b>Keyword:</b> [keyword]"
/obj/effect/rune/attackby(obj/I, mob/user, params)
if(istype(I, /obj/item/melee/cultblade/dagger) && iscultist(user))
@@ -530,10 +530,10 @@ structure_check() searches for nearby cultist structures required for the invoca
var/static/revives_used = -SOULS_TO_REVIVE // Cultists get one "free" revive
/obj/effect/rune/raise_dead/examine(mob/user)
..()
. = ..()
if(iscultist(user) || user.stat == DEAD)
var/revive_number = LAZYLEN(GLOB.sacrificed) - revives_used
to_chat(user, "<b>Revives Remaining:</b> [revive_number]")
. += "<b>Revives Remaining:</b> [revive_number]"
/obj/effect/rune/raise_dead/invoke(var/list/invokers)
var/turf/T = get_turf(src)
@@ -627,11 +627,11 @@ structure_check() searches for nearby cultist structures required for the invoca
GLOB.wall_runes += src
/obj/effect/rune/wall/examine(mob/user)
..()
. = ..()
if(density && iscultist(user))
var/datum/timedevent/TMR = active_timers[1]
if(TMR)
to_chat(user, "<span class='cultitalic'>The air above this rune has hardened into a barrier that will last [DisplayTimeText(TMR.timeToRun - world.time)].</span>")
. += "<span class='cultitalic'>The air above this rune has hardened into a barrier that will last [DisplayTimeText(TMR.timeToRun - world.time)].</span>"
/obj/effect/rune/wall/Destroy()
GLOB.wall_runes -= src
@@ -64,26 +64,25 @@
/mob/living/carbon/true_devil/examine(mob/user)
var/msg = "<span class='info'>*---------*\nThis is [icon2html(src, user)] <b>[src]</b>!\n"
. = list("<span class='info'>*---------*\nThis is [icon2html(src, user)] <b>[src]</b>!")
//Left hand items
for(var/obj/item/I in held_items)
if(!(I.item_flags & ABSTRACT))
msg += "It is holding [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n"
. += "It is holding [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))]."
//Braindead
if(!client && stat != DEAD)
msg += "The devil seems to be in deep contemplation.\n"
. += "The devil seems to be in deep contemplation."
//Damaged
if(stat == DEAD)
msg += "<span class='deadsay'>The hellfire seems to have been extinguished, for now at least.</span>\n"
. += "<span class='deadsay'>The hellfire seems to have been extinguished, for now at least.</span>"
else if(health < (maxHealth/10))
msg += "<span class='warning'>You can see hellfire inside its gaping wounds.</span>\n"
. += "<span class='warning'>You can see hellfire inside its gaping wounds.</span>"
else if(health < (maxHealth/2))
msg += "<span class='warning'>You can see hellfire inside its wounds.</span>\n"
msg += "*---------*</span>"
to_chat(user, msg)
. += "<span class='warning'>You can see hellfire inside its wounds.</span>"
. += "*---------*</span>"
/mob/living/carbon/true_devil/IsAdvancedToolUser()
return 1
@@ -98,14 +98,14 @@ the new instance inside the host to be updated to the template's stats.
/mob/camera/disease/examine(mob/user)
..()
. = ..()
if(isobserver(user))
to_chat(user, "<span class='notice'>[src] has [points]/[total_points] adaptation points.</span>")
to_chat(user, "<span class='notice'>[src] has the following unlocked:</span>")
. += "<span class='notice'>[src] has [points]/[total_points] adaptation points.</span>"
. += "<span class='notice'>[src] has the following unlocked:</span>"
for(var/A in purchased_abilities)
var/datum/disease_ability/B = A
if(istype(B))
to_chat(user, "<span class='notice'>[B.name]</span>")
. += "<span class='notice'>[B.name]</span>"
/mob/camera/disease/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null)
return
+3 -4
View File
@@ -52,12 +52,11 @@
/mob/living/simple_animal/hostile/morph/examine(mob/user)
if(morphed)
form.examine(user) // Refactor examine to return desc so it's static? Not sure if worth it
. = form.examine(user)
if(get_dist(user,src)<=3)
to_chat(user, "<span class='warning'>It doesn't look quite right...</span>")
. += "<span class='warning'>It doesn't look quite right...</span>"
else
..()
return
. = ..()
/mob/living/simple_animal/hostile/morph/med_hud_set_health()
if(morphed && !isliving(form))
@@ -55,9 +55,9 @@
/obj/machinery/nuclearbomb/examine(mob/user)
. = ..()
if(exploding)
to_chat(user, "It is in the process of exploding. Perhaps reviewing your affairs is in order.")
. += "It is in the process of exploding. Perhaps reviewing your affairs is in order."
if(timing)
to_chat(user, "There are [get_time_left()] seconds until detonation.")
. += "There are [get_time_left()] seconds until detonation."
/obj/machinery/nuclearbomb/selfdestruct
name = "station self-destruct terminal"
@@ -472,9 +472,9 @@
/obj/machinery/nuclearbomb/beer/examine(mob/user)
. = ..()
if(keg.reagents.total_volume)
to_chat(user, "<span class='notice'>It has [keg.reagents.total_volume] unit\s left.</span>")
. += "<span class='notice'>It has [keg.reagents.total_volume] unit\s left.</span>"
else
to_chat(user, "<span class='danger'>It's empty.</span>")
. += "<span class='danger'>It's empty.</span>"
/obj/machinery/nuclearbomb/beer/attackby(obj/item/W, mob/user, params)
if(W.is_refillable())
@@ -615,7 +615,7 @@ This is here to make the tiles around the station mininuke change when it's arme
var/captain = user.mind && user.mind.assigned_role == "Captain"
var/nukie = user.mind && user.mind.has_antag_datum(/datum/antagonist/nukeop)
if(ghost || captain || nukie)
to_chat(user, "<span class='warning'>The serial numbers on [src] are incorrect.</span>")
. += "<span class='warning'>The serial numbers on [src] are incorrect.</span>"
/obj/item/disk/nuclear/attackby(obj/item/I, mob/living/user, params)
if(istype(I, /obj/item/claymore/highlander) && !fake)
@@ -2,7 +2,7 @@
var/mode = TRACK_NUKE_DISK
/obj/item/pinpointer/nuke/examine(mob/user)
..()
. = ..()
var/msg = "Its tracking indicator reads "
switch(mode)
if(TRACK_NUKE_DISK)
@@ -13,10 +13,10 @@
msg += "\"vasvygengbefuvc\"."
else
msg = "Its tracking indicator is blank."
to_chat(user, msg)
. += msg
for(var/obj/machinery/nuclearbomb/bomb in GLOB.machines)
if(bomb.timing)
to_chat(user, "Extreme danger. Arming signal detected. Time remaining: [bomb.get_time_left()].")
. += "Extreme danger. Arming signal detected. Time remaining: [bomb.get_time_left()]."
/obj/item/pinpointer/nuke/process()
..()
@@ -368,11 +368,11 @@
scatter()
/obj/item/ectoplasm/revenant/examine(mob/user)
..()
. = ..()
if(inert)
to_chat(user, "<span class='revennotice'>It seems inert.</span>")
. += "<span class='revennotice'>It seems inert.</span>"
else if(reforming)
to_chat(user, "<span class='revenwarning'>It is shifting and distorted. It would be wise to destroy this.</span>")
. += "<span class='revenwarning'>It is shifting and distorted. It would be wise to destroy this.</span>"
/obj/item/ectoplasm/revenant/proc/reform()
if(QDELETED(src) || QDELETED(revenant) || inert)
@@ -38,12 +38,12 @@
. = ..()
if(usability || iscultist(user, TRUE) || iswizard(user) || isobserver(user))
if (old_shard)
to_chat(user, "<span class='cult'>A soulstone, used to capture a soul, either from dead humans or from freed shades.</span>")
. += "<span class='cult'>A soulstone, used to capture a soul, either from dead humans or from freed shades.</span>"
else
to_chat(user, "<span class='cult'>A soulstone, used to capture souls, either from unconscious or sleeping humans or from freed shades.</span>")
to_chat(user, "<span class='cult'>The captured soul can be placed into a construct shell to produce a construct, or released from the stone as a shade.</span>")
. += "<span class='cult'>A soulstone, used to capture souls, either from unconscious or sleeping humans or from freed shades.</span>"
. += "<span class='cult'>The captured soul can be placed into a construct shell to produce a construct, or released from the stone as a shade.</span>"
if(spent)
to_chat(user, "<span class='cult'>This shard is spent; it is now just a creepy rock.</span>")
. += "<span class='cult'>This shard is spent; it is now just a creepy rock.</span>"
/obj/item/soulstone/Destroy() //Stops the shade from being qdel'd immediately and their ghost being sent back to the arrival shuttle.
for(var/mob/living/simple_animal/shade/A in src)
@@ -549,11 +549,11 @@
var/list/categories = list()
/obj/item/spellbook/examine(mob/user)
..()
. = ..()
if(owner)
to_chat(user, "There is a small signature on the front cover: \"[owner]\".")
. += "There is a small signature on the front cover: \"[owner]\"."
else
to_chat(user, "It appears to have no author.")
. += "It appears to have no author."
/obj/item/spellbook/Initialize()
. = ..()
+2 -3
View File
@@ -112,9 +112,8 @@
return TRUE
/obj/item/assembly/examine(mob/user)
..()
to_chat(user, "<span class='notice'>\The [src] [secured? "is secured and ready to be used!" : "can be attached to other things."]</span>")
. = ..()
. += "<span class='notice'>\The [src] [secured? "is secured and ready to be used!" : "can be attached to other things."]</span>"
/obj/item/assembly/attack_self(mob/user)
if(!user)
+2 -2
View File
@@ -8,9 +8,9 @@
var/cooldown = FALSE //Door cooldowns
/obj/item/assembly/control/examine(mob/user)
..()
. = ..()
if(id)
to_chat(user, "<span class='notice'>Its channel ID is '[id]'.</span>")
. += "<span class='notice'>Its channel ID is '[id]'.</span>"
/obj/item/assembly/control/activate()
cooldown = TRUE
+2 -2
View File
@@ -11,8 +11,8 @@
var/alarm_health = HEALTH_THRESHOLD_CRIT
/obj/item/assembly/health/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Use a multitool to swap between \"detect death\" mode and \"detect critical state\" mode.</span>")
. = ..()
. += "<span class='notice'>Use a multitool to swap between \"detect death\" mode and \"detect critical state\" mode.</span>"
/obj/item/assembly/health/activate()
if(!..())
+2 -2
View File
@@ -38,8 +38,8 @@
. = ..()
/obj/item/assembly/infra/examine(mob/user)
..()
to_chat(user, "<span class='notice'>The infrared trigger is [on?"on":"off"].</span>")
. = ..()
. += "<span class='notice'>The infrared trigger is [on?"on":"off"].</span>"
/obj/item/assembly/infra/activate()
if(!..())
+2 -2
View File
@@ -9,8 +9,8 @@
/obj/item/assembly/mousetrap/examine(mob/user)
..()
to_chat(user, "<span class='notice'>The pressure plate is [armed?"primed":"safe"].</span>")
. = ..()
. += "<span class='notice'>The pressure plate is [armed?"primed":"safe"].</span>"
/obj/item/assembly/mousetrap/activate()
if(..())
+2 -2
View File
@@ -21,8 +21,8 @@
. = ..()
/obj/item/assembly/prox_sensor/examine(mob/user)
..()
to_chat(user, "<span class='notice'>The proximity sensor is [timing ? "arming" : (scanning ? "armed" : "disarmed")].</span>")
. = ..()
. += "<span class='notice'>The proximity sensor is [timing ? "arming" : (scanning ? "armed" : "disarmed")].</span>"
/obj/item/assembly/prox_sensor/activate()
if(!..())
+3 -3
View File
@@ -169,8 +169,8 @@ Code:
return TRUE
/obj/item/assembly/signaler/receiver/examine(mob/user)
..()
to_chat(user, "<span class='notice'>The radio receiver is [on?"on":"off"].</span>")
. = ..()
. += "<span class='notice'>The radio receiver is [on?"on":"off"].</span>"
/obj/item/assembly/signaler/receiver/receive_signal(datum/signal/signal)
if(!on)
@@ -206,4 +206,4 @@ Code:
/obj/item/assembly/signaler/cyborg/attackby(obj/item/W, mob/user, params)
return
/obj/item/assembly/signaler/cyborg/screwdriver_act(mob/living/user, obj/item/I)
return
return
+2 -2
View File
@@ -31,8 +31,8 @@
. = ..()
/obj/item/assembly/timer/examine(mob/user)
..()
to_chat(user, "<span class='notice'>The timer is [timing ? "counting down from [time]":"set for [time] seconds"].</span>")
. = ..()
. += "<span class='notice'>The timer is [timing ? "counting down from [time]":"set for [time] seconds"].</span>"
/obj/item/assembly/timer/activate()
if(!..())
+2 -2
View File
@@ -22,8 +22,8 @@
"voice sensor")
/obj/item/assembly/voice/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Use a multitool to swap between \"inclusive\", \"exclusive\", \"recognizer\", and \"voice sensor\" mode.</span>")
. = ..()
. += "<span class='notice'>Use a multitool to swap between \"inclusive\", \"exclusive\", \"recognizer\", and \"voice sensor\" mode.</span>"
/obj/item/assembly/voice/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode)
. = ..()
@@ -222,11 +222,11 @@
. = ..()
switch(buildstage)
if(0)
to_chat(user, "<span class='notice'>It is missing air alarm electronics.</span>")
. += "<span class='notice'>It is missing air alarm electronics.</span>"
if(1)
to_chat(user, "<span class='notice'>It is missing wiring.</span>")
. += "<span class='notice'>It is missing wiring.</span>"
if(2)
to_chat(user, "<span class='notice'>Alt-click to [locked ? "unlock" : "lock"] the interface.</span>")
. += "<span class='notice'>Alt-click to [locked ? "unlock" : "lock"] the interface.</span>"
/obj/machinery/airalarm/ui_status(mob/user)
if(user.has_unlimited_silicon_privilege && aidisabled)
@@ -42,11 +42,11 @@ Pipelines + Other Objects -> Pipe network
var/on = FALSE
/obj/machinery/atmospherics/examine(mob/user)
..()
. = ..()
if(is_type_in_list(src, GLOB.ventcrawl_machinery) && isliving(user))
var/mob/living/L = user
if(L.ventcrawler)
to_chat(L, "<span class='notice'>Alt-click to crawl through it.</span>")
. += "<span class='notice'>Alt-click to crawl through it.</span>"
/obj/machinery/atmospherics/New(loc, process = TRUE, setdir)
if(!isnull(setdir))
@@ -30,8 +30,8 @@ Thus, the two variables affect pump operation are set in New():
/obj/machinery/atmospherics/components/binary/pump/examine(mob/user)
. = ..()
to_chat(user,"<span class='notice'>You can hold <b>Ctrl</b> and click on it to toggle it on and off.</span>")
to_chat(user,"<span class='notice'>You can hold <b>Alt</b> and click on it to maximize its pressure.</span>")
. += "<span class='notice'>You can hold <b>Ctrl</b> and click on it to toggle it on and off.</span>"
. += "<span class='notice'>You can hold <b>Alt</b> and click on it to maximize its pressure.</span>"
/obj/machinery/atmospherics/components/binary/pump/CtrlClick(mob/user)
var/area/A = get_area(src)
@@ -31,8 +31,8 @@ Thus, the two variables affect pump operation are set in New():
/obj/machinery/atmospherics/components/binary/volume_pump/examine(mob/user)
. = ..()
to_chat(user,"<span class='notice'>You can hold <b>Ctrl</b> and click on it to toggle it on and off.</span>")
to_chat(user,"<span class='notice'>You can hold <b>Alt</b> and click on it to maximize its pressure.</span>")
. += "<span class='notice'>You can hold <b>Ctrl</b> and click on it to toggle it on and off.</span>"
. += "<span class='notice'>You can hold <b>Alt</b> and click on it to maximize its pressure.</span>"
if(overclocked)
to_chat(user,"Its warning light is on" + (on ? " and it's spewing gas!" : "."))
@@ -234,4 +234,4 @@ Thus, the two variables affect pump operation are set in New():
else
overclocked = FALSE
to_chat(user, "The pump quiets down as you turn its limiters back on.")
return TRUE
return TRUE
@@ -14,8 +14,8 @@
/obj/machinery/atmospherics/components/trinary/filter/examine(mob/user)
. = ..()
to_chat(user,"<span class='notice'>You can hold <b>Ctrl</b> and click on it to toggle it on and off.</span>")
to_chat(user,"<span class='notice'>You can hold <b>Alt</b> and click on it to maximize its pressure.</span>")
. += "<span class='notice'>You can hold <b>Ctrl</b> and click on it to toggle it on and off.</span>"
. += "<span class='notice'>You can hold <b>Alt</b> and click on it to maximize its pressure.</span>"
/obj/machinery/atmospherics/components/trinary/filter/CtrlClick(mob/user)
var/area/A = get_area(src)
@@ -16,8 +16,8 @@
//node 3 is the outlet, nodes 1 & 2 are intakes
/obj/machinery/atmospherics/components/trinary/mixer/examine(mob/user)
. = ..()
to_chat(user,"<span class='notice'>You can hold <b>Ctrl</b> and click on it to toggle it on and off.</span>")
to_chat(user,"<span class='notice'>You can hold <b>Alt</b> and click on it to maximize its pressure.</span>")
. += "<span class='notice'>You can hold <b>Ctrl</b> and click on it to toggle it on and off.</span>"
. += "<span class='notice'>You can hold <b>Alt</b> and click on it to maximize its pressure.</span>"
/obj/machinery/atmospherics/components/trinary/mixer/CtrlClick(mob/user)
var/area/A = get_area(src)
@@ -262,14 +262,14 @@
open_machine()
/obj/machinery/atmospherics/components/unary/cryo_cell/examine(mob/user)
..()
. = ..()
if(occupant)
if(on)
to_chat(user, "Someone's inside [src]!")
. += "Someone's inside [src]!"
else
to_chat(user, "You can barely make out a form floating in [src].")
. += "You can barely make out a form floating in [src]."
else
to_chat(user, "[src] seems empty.")
. += "[src] seems empty."
/obj/machinery/atmospherics/components/unary/cryo_cell/MouseDrop_T(mob/target, mob/user)
if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser())
@@ -424,9 +424,9 @@
return FALSE
/obj/machinery/atmospherics/components/unary/vent_pump/examine(mob/user)
..()
. = ..()
if(welded)
to_chat(user, "It seems welded shut.")
. += "It seems welded shut."
/obj/machinery/atmospherics/components/unary/vent_pump/power_change()
..()
@@ -305,9 +305,9 @@
return FALSE
/obj/machinery/atmospherics/components/unary/vent_scrubber/examine(mob/user)
..()
. = ..()
if(welded)
to_chat(user, "It seems welded shut.")
. += "It seems welded shut."
/obj/machinery/atmospherics/components/unary/vent_scrubber/can_crawl_through()
return !welded
@@ -111,8 +111,8 @@
. = "The connect error light is blinking."
/obj/machinery/meter/examine(mob/user)
..()
to_chat(user, status())
. = ..()
. += status()
/obj/machinery/meter/wrench_act(mob/user, obj/item/I)
to_chat(user, "<span class='notice'>You begin to unfasten \the [src]...</span>")
@@ -33,9 +33,9 @@
set_active(active) //Force overlay update.
/obj/machinery/atmospherics/miner/examine(mob/user)
..()
. = ..()
if(broken)
to_chat(user, "Its debug output is printing \"[broken_message]\".")
. += "Its debug output is printing \"[broken_message]\"."
/obj/machinery/atmospherics/miner/proc/check_operation()
if(!active)
@@ -88,10 +88,10 @@
replace_tank(user, TRUE)
/obj/machinery/portable_atmospherics/examine(mob/user)
..()
. = ..()
if(holding)
to_chat(user, "<span class='notice'>\The [src] contains [holding]. Alt-click [src] to remove it.</span>")
to_chat(user, "<span class='notice'>Click [src] with another gas tank to hot swap [holding].</span>")
. += "<span class='notice'>\The [src] contains [holding]. Alt-click [src] to remove it.</span>"
. += "<span class='notice'>Click [src] with another gas tank to hot swap [holding].</span>"
/obj/machinery/portable_atmospherics/proc/replace_tank(mob/living/user, close_valve, obj/item/tank/new_tank)
if(holding)
+2 -2
View File
@@ -12,9 +12,9 @@
var/obj/machinery/computer/cargo/cargo_console = null
/obj/item/export_scanner/examine(user)
..()
. = ..()
if(!cargo_console)
to_chat(user, "<span class='notice'>[src] is not currently linked to a cargo console.</span>")
. += "<span class='notice'>[src] is not currently linked to a cargo console.</span>"
/obj/item/export_scanner/afterattack(obj/O, mob/user, proximity)
. = ..()
+5 -5
View File
@@ -45,11 +45,11 @@
update_status()
/obj/item/supplypod_beacon/examine(user)
..()
. = ..()
if(!express_console)
to_chat(user, "<span class='notice'>[src] is not currently linked to a Express Supply console.</span>")
. += "<span class='notice'>[src] is not currently linked to a Express Supply console.</span>"
else
to_chat(user, "<span class='notice'>Alt-click to unlink it from the Express Supply console.</span>")
. += "<span class='notice'>Alt-click to unlink it from the Express Supply console.</span>"
/obj/item/supplypod_beacon/Destroy()
if(express_console)
@@ -61,7 +61,7 @@
express_console.beacon = null
express_console = null
update_status(SP_UNLINK)
update_status(SP_UNREADY)
update_status(SP_UNREADY)
/obj/item/supplypod_beacon/proc/link_console(obj/machinery/computer/cargo/express/C, mob/living/user)
if (C.beacon)//if new console has a beacon, then...
@@ -91,5 +91,5 @@
if(new_beacon_name)
name += " ([tag])"
return
else
else
return ..()
+4 -4
View File
@@ -136,9 +136,9 @@
user.vv_edit_var(variable, user_vars_to_edit[variable])
/obj/item/clothing/examine(mob/user)
..()
. = ..()
if(damaged_clothes)
to_chat(user, "<span class='warning'>It looks damaged!</span>")
. += "<span class='warning'>It looks damaged!</span>"
GET_COMPONENT(pockets, /datum/component/storage)
if(pockets)
var/list/how_cool_are_your_threads = list("<span class='notice'>")
@@ -153,7 +153,7 @@
if(pockets.silent)
how_cool_are_your_threads += "Adding or removing items from [src] makes no noise.\n"
how_cool_are_your_threads += "</span>"
to_chat(user, how_cool_are_your_threads.Join())
. += how_cool_are_your_threads.Join()
/obj/item/clothing/obj_break(damage_flag)
if(!damaged_clothes)
@@ -405,4 +405,4 @@ BLIND // can't see anything
to_chat(M, "<span class='warning'>Your species cannot wear [src].</span>")
return FALSE
return TRUE
return TRUE
+3 -3
View File
@@ -23,9 +23,9 @@
return BRUTELOSS
/obj/item/clothing/glasses/examine(mob/user)
..()
. = ..()
if(glass_colour_type && ishuman(user))
to_chat(user, "<span class='notice'>Alt-click to toggle its colors.</span>")
. += "<span class='notice'>Alt-click to toggle its colors.</span>"
/obj/item/clothing/glasses/visor_toggling()
..()
@@ -335,7 +335,7 @@
desc = replacetext(desc, "person", "man")
else if(user.gender == FEMALE)
desc = replacetext(desc, "person", "woman")
..()
. = ..()
desc = desk
/obj/item/clothing/glasses/thermal/eyepatch
+2 -2
View File
@@ -90,8 +90,8 @@
new /obj/item/reagent_containers/food/drinks/flask/det(src)
/obj/item/clothing/head/fedora/det_hat/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Alt-click to take a candy corn.</span>")
. = ..()
. += "<span class='notice'>Alt-click to take a candy corn.</span>"
/obj/item/clothing/head/fedora/det_hat/AltClick(mob/user)
if(user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
+2 -2
View File
@@ -41,8 +41,8 @@
usr.update_inv_head() //so our mob-overlays update
/obj/item/clothing/head/soft/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Alt-click the cap to flip it [flipped ? "forwards" : "backwards"].</span>")
. = ..()
. += "<span class='notice'>Alt-click the cap to flip it [flipped ? "forwards" : "backwards"].</span>"
/obj/item/clothing/head/soft/red
name = "red cap"
+2 -2
View File
@@ -30,8 +30,8 @@
adjustmask(user)
/obj/item/clothing/mask/breath/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Alt-click [src] to adjust it.</span>")
. = ..()
. += "<span class='notice'>Alt-click [src] to adjust it.</span>"
/obj/item/clothing/mask/breath/medical
desc = "A close-fitting sterile mask that can be connected to an air supply."
+2 -2
View File
@@ -38,8 +38,8 @@
to_chat(user, "<span class='notice'>You cannot retrieve any bananium from the prototype shoes.</span>")
/obj/item/clothing/shoes/clown_shoes/banana_shoes/examine(mob/user)
..()
to_chat(user, "<span class='notice'>The shoes are [on ? "enabled" : "disabled"].</span>")
. = ..()
. += "<span class='notice'>The shoes are [on ? "enabled" : "disabled"].</span>"
/obj/item/clothing/shoes/clown_shoes/banana_shoes/ui_action_click(mob/user)
GET_COMPONENT(bananium, /datum/component/material_container)
+2 -3
View File
@@ -40,9 +40,8 @@
return clothing_flags & NOSLIP
/obj/item/clothing/shoes/magboots/examine(mob/user)
..()
to_chat(user, "Its mag-pulse traction system appears to be [magpulse ? "enabled" : "disabled"].")
. = ..()
. += "Its mag-pulse traction system appears to be [magpulse ? "enabled" : "disabled"]."
/obj/item/clothing/shoes/magboots/advance
desc = "Advanced magnetic boots that have a lighter magnetic pull, placing less burden on the wearer."
@@ -799,10 +799,10 @@
to_chat(targ, "[icon2html(src, targ)]<span class='[span]'>|[message]</span>")
/obj/item/clothing/suit/space/hardsuit/flightsuit/examine(mob/user)
..()
to_chat(user, "<span class='boldnotice'>SUIT: [locked ? "LOCKED" : "UNLOCKED"]</span>")
to_chat(user, "<span class='boldnotice'>FLIGHTPACK: [deployedpack ? "ENGAGED" : "DISENGAGED"] FLIGHTSHOES : [deployedshoes ? "ENGAGED" : "DISENGAGED"] HELMET : [suittoggled ? "ENGAGED" : "DISENGAGED"]</span>")
to_chat(user, "<span class='boldnotice'>Its maintainence panel is [maint_panel ? "OPEN" : "CLOSED"]</span>")
. = ..()
. += "<span class='boldnotice'>SUIT: [locked ? "LOCKED" : "UNLOCKED"]</span>"
. += "<span class='boldnotice'>FLIGHTPACK: [deployedpack ? "ENGAGED" : "DISENGAGED"] FLIGHTSHOES : [deployedshoes ? "ENGAGED" : "DISENGAGED"] HELMET : [suittoggled ? "ENGAGED" : "DISENGAGED"]</span>"
. += "<span class='boldnotice'>Its maintainence panel is [maint_panel ? "OPEN" : "CLOSED"]</span>"
/obj/item/clothing/suit/space/hardsuit/flightsuit/Destroy()
dropped()
+2 -2
View File
@@ -120,8 +120,8 @@
A.UpdateButtonIcon()
/obj/item/clothing/suit/toggle/examine(mob/user)
..()
to_chat(user, "Alt-click on [src] to toggle the [togglename].")
. = ..()
. += "Alt-click on [src] to toggle the [togglename]."
//Hardsuit toggle code
/obj/item/clothing/suit/space/hardsuit/Initialize()
+9 -9
View File
@@ -137,23 +137,23 @@
/obj/item/clothing/under/examine(mob/user)
..()
. = ..()
if(can_adjust)
if(adjusted == ALT_STYLE)
to_chat(user, "Alt-click on [src] to wear it normally.")
. += "Alt-click on [src] to wear it normally."
else
to_chat(user, "Alt-click on [src] to wear it casually.")
. += "Alt-click on [src] to wear it casually."
if (has_sensor == BROKEN_SENSORS)
to_chat(user, "Its sensors appear to be shorted out.")
. += "Its sensors appear to be shorted out."
else if(has_sensor > NO_SENSORS)
switch(sensor_mode)
if(SENSOR_OFF)
to_chat(user, "Its sensors appear to be disabled.")
. += "Its sensors appear to be disabled."
if(SENSOR_LIVING)
to_chat(user, "Its binary life sensors appear to be enabled.")
. += "Its binary life sensors appear to be enabled."
if(SENSOR_VITALS)
to_chat(user, "Its vital tracker appears to be enabled.")
. += "Its vital tracker appears to be enabled."
if(SENSOR_COORDS)
to_chat(user, "Its vital tracker and tracking beacon appear to be enabled.")
. += "Its vital tracker and tracking beacon appear to be enabled."
if(attached_accessory)
to_chat(user, "\A [attached_accessory] is attached to it.")
. += "\A [attached_accessory] is attached to it."
+3 -3
View File
@@ -73,10 +73,10 @@
to_chat(user, "[src] will be worn [above_suit ? "above" : "below"] your suit.")
/obj/item/clothing/accessory/examine(mob/user)
..()
to_chat(user, "<span class='notice'>\The [src] can be attached to a uniform. Alt-click to remove it once attached.</span>")
. = ..()
. += "<span class='notice'>\The [src] can be attached to a uniform. Alt-click to remove it once attached.</span>"
if(initial(above_suit))
to_chat(user, "<span class='notice'>\The [src] can be worn above or below your suit. Alt-click to toggle.</span>")
. += "<span class='notice'>\The [src] can be worn above or below your suit. Alt-click to toggle.</span>"
/obj/item/clothing/accessory/waistcoat
name = "waistcoat"
+3 -2
View File
@@ -612,8 +612,9 @@
var/extinguish_cooldown = 100
var/extinguishes_left = 5
/obj/item/clothing/under/plasmaman/examine(mob/user)
..()
to_chat(user, "<span class='notice'>There are [extinguishes_left] extinguisher charges left in this suit.</span>")
. = ..()
. += "<span class='notice'>There are [extinguishes_left] extinguisher charges left in this suit.</span>"
/obj/item/clothing/under/plasmaman/proc/Extinguish(mob/living/carbon/human/H)
if(!istype(H))
return
+2 -2
View File
@@ -193,9 +193,9 @@
log = list()
/obj/item/detective_scanner/examine(mob/user)
..()
. = ..()
if(LAZYLEN(log) && !scanning)
to_chat(user, "<span class='notice'>Alt-click to clear scanner logs.</span>")
. += "<span class='notice'>Alt-click to clear scanner logs.</span>"
/obj/item/detective_scanner/proc/displayDetectiveScanResults(mob/living/user)
// No need for can-use checks since the action button should do proper checks
+2 -1
View File
@@ -138,6 +138,7 @@
name = "valentine - To: [recipient] From: [sender]"
/obj/item/valentine/examine(mob/user)
. = ..()
if(in_range(user, src) || isobserver(user))
if( !(ishuman(user) || isobserver(user) || issilicon(user)) )
user << browse("<HTML><HEAD><TITLE>[name]</TITLE></HEAD><BODY>[stars(message)]</BODY></HTML>", "window=[name]")
@@ -146,7 +147,7 @@
user << browse("<HTML><HEAD><TITLE>[name]</TITLE></HEAD><BODY>[message]</BODY></HTML>", "window=[name]")
onclose(user, "[name]")
else
to_chat(user, "<span class='notice'>It is too far away.</span>")
. += "<span class='notice'>It is too far away.</span>"
/obj/item/valentine/attack_self(mob/user)
user.examinate(src)
+2 -2
View File
@@ -292,7 +292,7 @@
add_atom_colour("#ffffff", FIXED_COLOUR_PRIORITY)
/obj/structure/spacevine/examine(mob/user)
..()
. = ..()
var/text = "This one is a"
if(mutations.len)
for(var/A in mutations)
@@ -301,7 +301,7 @@
else
text += " normal"
text += " vine."
to_chat(user, text)
. += text
/obj/structure/spacevine/Destroy()
for(var/datum/spacevine_mutation/SM in mutations)
@@ -22,7 +22,7 @@
var/customname = "custom"
/obj/item/reagent_containers/food/snacks/customizable/examine(mob/user)
..()
. = ..()
var/ingredients_listed = ""
for(var/obj/item/reagent_containers/food/snacks/ING in ingredients)
ingredients_listed += "[ING.name], "
@@ -33,7 +33,7 @@
size = "big"
if(ingredients.len>8)
size = "monster"
to_chat(user, "It contains [ingredients.len?"[ingredients_listed]":"no ingredient, "]making a [size]-sized [initial(name)].")
. += "It contains [ingredients.len?"[ingredients_listed]":"no ingredient, "]making a [size]-sized [initial(name)]."
/obj/item/reagent_containers/food/snacks/customizable/attackby(obj/item/I, mob/user, params)
if(!istype(I, /obj/item/reagent_containers/food/snacks/customizable) && istype(I, /obj/item/reagent_containers/food/snacks))
+4 -4
View File
@@ -151,15 +151,15 @@ All foods are distributed among various categories. Use common sense.
return 0
/obj/item/reagent_containers/food/snacks/examine(mob/user)
..()
. = ..()
if(bitecount == 0)
return
else if(bitecount == 1)
to_chat(user, "[src] was bitten by someone!")
. += "[src] was bitten by someone!"
else if(bitecount <= 3)
to_chat(user, "[src] was bitten [bitecount] times!")
. += "[src] was bitten [bitecount] times!"
else
to_chat(user, "[src] was bitten multiple times!")
. += "[src] was bitten multiple times!"
/obj/item/reagent_containers/food/snacks/attackby(obj/item/W, mob/user, params)
@@ -449,11 +449,11 @@
if (pancakeCount)
var/obj/item/reagent_containers/food/snacks/S = contents[pancakeCount]
bitecount = S.bitecount
..()
. = ..()
if (pancakeCount)
for(var/obj/item/reagent_containers/food/snacks/pancakes/ING in contents)
ingredients_listed += "[ING.name], "
to_chat(user, "It contains [contents.len?"[ingredients_listed]":"no ingredient, "]on top of a [initial(name)].")
. += "It contains [contents.len?"[ingredients_listed]":"no ingredient, "]on top of a [initial(name)]."
bitecount = originalBites
/obj/item/reagent_containers/food/snacks/pancakes/attackby(obj/item/I, mob/living/user, params)
@@ -67,9 +67,9 @@ God bless America.
fry_speed = oil_efficiency
/obj/machinery/deepfryer/examine()
..()
. = ..()
if(frying)
to_chat(usr, "You can make out \a [frying] in the oil.")
. += "You can make out \a [frying] in the oil."
/obj/machinery/deepfryer/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/reagent_containers/pill))
@@ -53,20 +53,20 @@
/obj/machinery/microwave/examine(mob/user)
. = ..()
if(!operating)
to_chat(user, "<span class='notice'>Alt-click [src] to turn it on.</span>")
. += "<span class='notice'>Alt-click [src] to turn it on.</span>"
if(!in_range(user, src) && !issilicon(user) && !isobserver(user))
to_chat(user, "<span class='warning'>You're too far away to examine [src]'s contents and display!</span>")
. += "<span class='warning'>You're too far away to examine [src]'s contents and display!</span>"
return
if(operating)
to_chat(user, "<span class='notice'>\The [src] is operating.</span>")
. += "<span class='notice'>\The [src] is operating.</span>"
return
if(length(ingredients))
if(issilicon(user))
to_chat(user, "<span class='notice'>\The [src] camera shows:</span>")
. += "<span class='notice'>\The [src] camera shows:</span>"
else
to_chat(user, "<span class='notice'>\The [src] contains:</span>")
. += "<span class='notice'>\The [src] contains:</span>"
var/list/items_counts = new
for(var/i in ingredients)
if(istype(i, /obj/item/stack))
@@ -76,14 +76,14 @@
var/atom/movable/AM = i
items_counts[AM.name]++
for(var/O in items_counts)
to_chat(user, "<span class='notice'>- [items_counts[O]]x [O].</span>")
. += "<span class='notice'>- [items_counts[O]]x [O].</span>"
else
to_chat(user, "<span class='notice'>\The [src] is empty.</span>")
. += "<span class='notice'>\The [src] is empty.</span>"
if(!(stat & (NOPOWER|BROKEN)))
to_chat(user, "<span class='notice'>The status display reads:</span>")
to_chat(user, "<span class='notice'>- Capacity: <b>[max_n_of_items]</b> items.<span>")
to_chat(user, "<span class='notice'>- Cook time reduced by <b>[(efficiency - 1) * 25]%</b>.<span>")
. += "<span class='notice'>The status display reads:</span>"
. += "<span class='notice'>- Capacity: <b>[max_n_of_items]</b> items.<span>"
. += "<span class='notice'>- Cook time reduced by <b>[(efficiency - 1) * 25]%</b>.<span>"
/obj/machinery/microwave/update_icon()
if(broken)
+2 -2
View File
@@ -319,9 +319,9 @@
pizza_preferences = list()
/obj/item/pizzabox/infinite/examine(mob/user)
..()
. = ..()
if(isobserver(user))
to_chat(user, "<span class='deadsay'>This pizza box is anomalous, and will produce infinite pizza.</span>")
. += "<span class='deadsay'>This pizza box is anomalous, and will produce infinite pizza.</span>"
/obj/item/pizzabox/infinite/attack_self(mob/living/user)
QDEL_NULL(pizza)
+5 -5
View File
@@ -107,14 +107,14 @@
var/buffertext = "A funny bit of text."
/obj/item/toy/cards/singlecard/cas/examine(mob/user)
..()
. = ..()
if (flipped)
to_chat(user, "<span class='notice'>The card is face down.</span>")
. += "<span class='notice'>The card is face down.</span>"
else if (blank)
to_chat(user, "<span class='notice'>The card is blank. Write on it with a pen.</span>")
. += "<span class='notice'>The card is blank. Write on it with a pen.</span>"
else
to_chat(user, "<span class='notice'>The card reads: [name]</span>")
to_chat(user, "<span class='notice'>Alt-click to flip it.</span>")
. += "<span class='notice'>The card reads: [name]</span>"
. += "<span class='notice'>Alt-click to flip it.</span>"
/obj/item/toy/cards/singlecard/cas/Flip()
set name = "Flip Card"
+32 -2
View File
@@ -1,3 +1,4 @@
/*********************************
For the main html chat area
*********************************/
@@ -8,6 +9,8 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("tmp/iconCache.sav")) //Cache of ico
//On client, created on login
/datum/chatOutput
var/client/owner //client ref
var/total_checks = 0
var/last_check = 0
var/loaded = FALSE // Has the client loaded the browser output area?
var/list/messageQueue //If they haven't loaded chat, this is where messages will go until they do
var/cookieSent = FALSE // Has the client sent a cookie for analysis
@@ -150,6 +153,18 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("tmp/iconCache.sav")) //Cache of ico
//Called by client, sent data to investigate (cookie history so far)
/datum/chatOutput/proc/analyzeClientData(cookie = "")
//Spam check
if(world.time > last_check + (3 SECONDS))
last_check = world.time
total_checks = 0
total_checks += 1
if(total_checks > SPAM_TRIGGER_AUTOMUTE)
message_admins("[key_name(owner)] kicked for goonchat topic spam")
qdel(owner)
return
if(!cookie)
return
@@ -158,13 +173,22 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("tmp/iconCache.sav")) //Cache of ico
if (connData && islist(connData) && connData.len > 0 && connData["connData"])
connectionHistory = connData["connData"] //lol fuck
var/list/found = new()
for(var/i in connectionHistory.len to 1 step -1)
if(connectionHistory.len > 5)
message_admins("[key_name(src.owner)] was kicked for an invalid ban cookie)")
qdel(owner)
return
for(var/i in min(connectionHistory.len, 5) to 1 step -1)
if(QDELETED(owner))
//he got cleaned up before we were done
return
var/list/row = src.connectionHistory[i]
if (!row || row.len < 3 || (!row["ckey"] || !row["compid"] || !row["ip"])) //Passed malformed history object
return
if (world.IsBanned(row["ckey"], row["ip"], row["compid"], real_bans_only=TRUE))
found = row
break
CHECK_TICK
//Uh oh this fucker has a history of playing on a banned account!!
if (found.len > 0)
@@ -253,4 +277,10 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("tmp/iconCache.sav")) //Cache of ico
if(Master.current_runlevel == RUNLEVEL_INIT || !SSchat?.initialized)
to_chat_immediate(target, message, handle_whitespace)
return
SSchat.queue(target, message, handle_whitespace)
SSchat.queue(target, message, handle_whitespace)
/datum/chatOutput/proc/swaptolightmode() //Dark mode light mode stuff. Yell at KMC if this breaks! (See darkmode.dm for documentation)
owner.force_white_theme()
/datum/chatOutput/proc/swaptodarkmode()
owner.force_dark_theme()
@@ -30,7 +30,7 @@ var opts = {
'scrollSnapTolerance': 10, //If within x pixels of bottom
'clickTolerance': 10, //Keep focus if outside x pixels of mousedown position on mouseup
'imageRetryDelay': 50, //how long between attempts to reload images (in ms)
'imageRetryLimit': 50, //how many attempts should we make?
'imageRetryLimit': 50, //how many attempts should we make?
'popups': 0, //Amount of popups opened ever
'wasd': false, //Is the user in wasd mode?
'priorChatHeight': 0, //Thing for height-resizing detection
@@ -173,7 +173,7 @@ function byondDecode(message) {
// The replace for + is because FOR SOME REASON, BYOND replaces spaces with a + instead of %20, and a plus with %2b.
// Marvelous.
message = message.replace(/\+/g, "%20");
try {
try {
// This is a workaround for the above not always working when BYOND's shitty url encoding breaks. (byond bug id:2399401)
if (decodeURIComponent) {
message = decodeURIComponent(message);
@@ -993,7 +993,7 @@ $(function() {
$messages.empty();
opts.messageCount = 0;
});
$('#changeColorPreset').click(function() {
opts.colorPreset = (opts.colorPreset+1) % colorPresets.length;
updateColorPreset();
@@ -123,26 +123,25 @@
/obj/structure/beebox/examine(mob/user)
..()
. = ..()
if(!queen_bee)
to_chat(user, "<span class='warning'>There is no queen bee! There won't bee any honeycomb without a queen!</span>")
. += "<span class='warning'>There is no queen bee! There won't bee any honeycomb without a queen!</span>"
var/half_bee = get_max_bees()*0.5
if(half_bee && (bees.len >= half_bee))
to_chat(user, "<span class='notice'>This place is aBUZZ with activity... there are lots of bees!</span>")
. += "<span class='notice'>This place is aBUZZ with activity... there are lots of bees!</span>"
to_chat(user, "<span class='notice'>[bee_resources]/100 resource supply.</span>")
to_chat(user, "<span class='notice'>[bee_resources]% towards a new honeycomb.</span>")
to_chat(user, "<span class='notice'>[bee_resources*2]% towards a new bee.</span>")
. += "<span class='notice'>[bee_resources]/100 resource supply.</span>"
. += "<span class='notice'>[bee_resources]% towards a new honeycomb.</span>"
. += "<span class='notice'>[bee_resources*2]% towards a new bee.</span>"
if(honeycombs.len)
var/plural = honeycombs.len > 1
to_chat(user, "<span class='notice'>There [plural? "are" : "is"] [honeycombs.len] uncollected honeycomb[plural ? "s":""] in the apiary.</span>")
. += "<span class='notice'>There [plural? "are" : "is"] [honeycombs.len] uncollected honeycomb[plural ? "s":""] in the apiary.</span>"
if(honeycombs.len >= get_max_honeycomb())
to_chat(user, "<span class='warning'>There's no room for more honeycomb!</span>")
. += "<span class='warning'>There's no room for more honeycomb!</span>"
/obj/structure/beebox/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/honey_frame))
@@ -16,7 +16,7 @@
/obj/structure/fermenting_barrel/examine(mob/user)
. = ..()
to_chat(user, "<span class='notice'>It is currently [open?"open, letting you pour liquids in.":"closed, letting you draw liquids from the tap."]</span>")
. += "<span class='notice'>It is currently [open?"open, letting you pour liquids in.":"closed, letting you draw liquids from the tap."]</span>"
/obj/structure/fermenting_barrel/proc/makeWine(obj/item/reagent_containers/food/snacks/grown/fruit)
if(fruit.reagents)
+3 -3
View File
@@ -440,7 +440,7 @@
to_chat(user, "<span class='notice'>You flip the write-protect tab to [src.read_only ? "protected" : "unprotected"].</span>")
/obj/item/disk/plantgene/examine(mob/user)
..()
. = ..()
if(gene && (istype(gene, /datum/plant_gene/core/potency)))
to_chat(user,"<span class='notice'>Percent is relative to potency, not maximum volume of the plant.</span>")
to_chat(user, "The write-protect tab is set to [src.read_only ? "protected" : "unprotected"].")
. += "<span class='notice'>Percent is relative to potency, not maximum volume of the plant.</span>"
. += "The write-protect tab is set to [src.read_only ? "protected" : "unprotected"]."
+2 -2
View File
@@ -56,11 +56,11 @@
return 0
/obj/item/reagent_containers/food/snacks/grown/examine(user)
..()
. = ..()
if(seed)
for(var/datum/plant_gene/trait/T in seed.genes)
if(T.examine_line)
to_chat(user, T.examine_line)
. += T.examine_line
/obj/item/reagent_containers/food/snacks/grown/attackby(obj/item/O, mob/user, params)
..()
+12 -14
View File
@@ -319,33 +319,31 @@
/obj/machinery/hydroponics/examine(user)
..()
. = ..()
if(myseed)
to_chat(user, "<span class='info'>It has <span class='name'>[myseed.plantname]</span> planted.</span>")
. += "<span class='info'>It has <span class='name'>[myseed.plantname]</span> planted.</span>"
if (dead)
to_chat(user, "<span class='warning'>It's dead!</span>")
. += "<span class='warning'>It's dead!</span>"
else if (harvest)
to_chat(user, "<span class='info'>It's ready to harvest.</span>")
. += "<span class='info'>It's ready to harvest.</span>"
else if (plant_health <= (myseed.endurance / 2))
to_chat(user, "<span class='warning'>It looks unhealthy.</span>")
. += "<span class='warning'>It looks unhealthy.</span>"
else
to_chat(user, "<span class='info'>It's empty.</span>")
. += "<span class='info'>It's empty.</span>"
if(!self_sustaining)
to_chat(user, "<span class='info'>Water: [waterlevel]/[maxwater].</span>")
to_chat(user, "<span class='info'>Nutrient: [nutrilevel]/[maxnutri].</span>")
. += "<span class='info'>Water: [waterlevel]/[maxwater].</span>"
. += "<span class='info'>Nutrient: [nutrilevel]/[maxnutri].</span>"
if(self_sufficiency_progress > 0)
var/percent_progress = round(self_sufficiency_progress * 100 / self_sufficiency_req)
to_chat(user, "<span class='info'>Treatment for self-sustenance are [percent_progress]% complete.</span>")
. += "<span class='info'>Treatment for self-sustenance are [percent_progress]% complete.</span>"
else
to_chat(user, "<span class='info'>It doesn't require any water or nutrients.</span>")
. += "<span class='info'>It doesn't require any water or nutrients.</span>"
if(weedlevel >= 5)
to_chat(user, "<span class='warning'>It's filled with weeds!</span>")
. += "<span class='warning'>It's filled with weeds!</span>"
if(pestlevel >= 5)
to_chat(user, "<span class='warning'>It's filled with tiny worms!</span>")
to_chat(user, "" )
. += "<span class='warning'>It's filled with tiny worms!</span>"
/obj/machinery/hydroponics/proc/weedinvasion() // If a weed growth is sufficient, this happens.
dead = 0
@@ -70,16 +70,16 @@
/obj/item/electronic_assembly/examine(mob/user)
. = ..()
if(can_anchor)
to_chat(user, "<span class='notice'>The anchoring bolts [anchored ? "are" : "can be"] <b>wrenched</b> in place and the maintenance panel [opened ? "can be" : "is"] <b>screwed</b> in place.</span>")
. += "<span class='notice'>The anchoring bolts [anchored ? "are" : "can be"] <b>wrenched</b> in place and the maintenance panel [opened ? "can be" : "is"] <b>screwed</b> in place.</span>"
else
to_chat(user, "<span class='notice'>The maintenance panel [opened ? "can be" : "is"] <b>screwed</b> in place.</span>")
. += "<span class='notice'>The maintenance panel [opened ? "can be" : "is"] <b>screwed</b> in place.</span>"
if((isobserver(user) && ckeys_allowed_to_scan[user.ckey]) || IsAdminGhost(user))
to_chat(user, "You can <a href='?src=[REF(src)];ghostscan=1'>scan</a> this circuit.")
. += "You can <a href='?src=[REF(src)];ghostscan=1'>scan</a> this circuit."
for(var/I in assembly_components)
var/obj/item/integrated_circuit/IC = I
IC.external_examine(user)
. += IC.external_examine(user)
if(opened)
interact(user)
@@ -26,8 +26,8 @@
var/displayed_name = ""
var/demands_object_input = FALSE
var/can_input_object_when_closed = FALSE
/*
Integrated circuits are essentially modular machines. Each circuit has a specific function, and combining them inside Electronic Assemblies allows
a creative player the means to solve many problems. Circuits are held inside an electronic assembly, and are wired using special tools.
@@ -35,8 +35,8 @@ 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)
// Can be called via electronic_assembly/attackby()
/obj/item/integrated_circuit/proc/additem(var/obj/item/I, var/mob/living/user)
@@ -62,7 +62,7 @@ a creative player the means to solve many problems. Circuits are held inside an
// 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)
@@ -23,7 +23,7 @@
if(displayed_name && displayed_name != name)
shown_label = " labeled '[displayed_name]'"
to_chat(user, "There is \a [src][shown_label], which displays [!isnull(stuff_to_display) ? "'[stuff_to_display]'" : "nothing"].")
return "There is \a [src][shown_label], 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]
@@ -345,14 +345,13 @@
set_pin_data(IC_INPUT, 1, FALSE)
/obj/item/integrated_circuit/output/led/external_examine(mob/user)
var/text_output = "There is "
. = "There is "
if(name == displayed_name)
text_output += "\an [name]"
. += "\an [name]"
else
text_output += "\an ["\improper[name]"] labeled '[displayed_name]'"
text_output += " which is currently [get_pin_data(IC_INPUT, 1) ? "lit <font color=[led_color]>*</font>" : "unlit"]."
to_chat(user, text_output)
. += "\an ["\improper[name]"] labeled '[displayed_name]'"
. += " which is currently [get_pin_data(IC_INPUT, 1) ? "lit <font color=[led_color]>*</font>" : "unlit"]."
/obj/item/integrated_circuit/output/diagnostic_hud
name = "AR interface"
+6 -6
View File
@@ -25,18 +25,18 @@
var/list/allowed_books = list(/obj/item/book, /obj/item/spellbook, /obj/item/storage/book) //Things allowed in the bookcase
/obj/structure/bookcase/examine(mob/user)
..()
. = ..()
if(!anchored)
to_chat(user, "<span class='notice'>The <i>bolts</i> on the bottom are unsecured.</span>")
. += "<span class='notice'>The <i>bolts</i> on the bottom are unsecured.</span>"
if(anchored)
to_chat(user, "<span class='notice'>It's secured in place with <b>bolts</b>.</span>")
. += "<span class='notice'>It's secured in place with <b>bolts</b>.</span>"
switch(state)
if(0)
to_chat(user, "<span class='notice'>There's a <b>small crack</b> visible on the back panel.</span>")
. += "<span class='notice'>There's a <b>small crack</b> visible on the back panel.</span>"
if(1)
to_chat(user, "<span class='notice'>There's space inside for a <i>wooden</i> shelf.</span>")
. += "<span class='notice'>There's space inside for a <i>wooden</i> shelf.</span>"
if(2)
to_chat(user, "<span class='notice'>There's a <b>small crack</b> visible on the shelf.</span>")
. += "<span class='notice'>There's a <b>small crack</b> visible on the shelf.</span>"
/obj/structure/bookcase/Initialize(mapload)
. = ..()
+2 -2
View File
@@ -16,7 +16,7 @@
/obj/item/soapstone/examine(mob/user)
. = ..()
if(remaining_uses != -1)
to_chat(user, "It has [remaining_uses] uses left.")
. += "It has [remaining_uses] uses left."
/obj/item/soapstone/afterattack(atom/target, mob/user, proximity)
. = ..()
@@ -194,7 +194,7 @@
update_icon()
/obj/structure/chisel_message/examine(mob/user)
..()
. = ..()
ui_interact(user)
/obj/structure/chisel_message/Destroy()
@@ -40,7 +40,7 @@
return ..()
/obj/item/twohanded/kinetic_crusher/examine(mob/living/user)
. =..()
. = ..()
. += "<span class='notice'>Mark a large creature with the destabilizing force, then hit them in melee to do <b>[force + detonation_damage]</b> damage.</span>"
. += "<span class='notice'>Does <b>[force + detonation_damage + backstab_bonus]</b> damage if the target is backstabbed, instead of <b>[force + detonation_damage]</b>.</span>"
for(var/t in trophies)
@@ -201,8 +201,8 @@
var/denied_type = /obj/item/crusher_trophy
/obj/item/crusher_trophy/examine(mob/living/user)
..()
to_chat(user, "<span class='notice'>Causes [effect_desc()] when attached to a kinetic crusher.</span>")
. = ..()
. += "<span class='notice'>Causes [effect_desc()] when attached to a kinetic crusher.</span>"
/obj/item/crusher_trophy/proc/effect_desc()
return "errors"
@@ -59,8 +59,8 @@
malfunctioning = 1
/obj/item/lazarus_injector/examine(mob/user)
..()
. = ..()
if(!loaded)
to_chat(user, "<span class='info'>[src] is empty.</span>")
. += "<span class='info'>[src] is empty.</span>"
if(malfunctioning)
to_chat(user, "<span class='info'>The display on [src] seems to be flickering.</span>")
. += "<span class='info'>The display on [src] seems to be flickering.</span>"
@@ -36,9 +36,9 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list(
update_icon()
/obj/item/stack/marker_beacon/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Use in-hand to place a [singular_name].</span>")
to_chat(user, "<span class='notice'>Alt-click to select a color. Current color is [picked_color].</span>")
. = ..()
. += "<span class='notice'>Use in-hand to place a [singular_name].</span>"
. += "<span class='notice'>Alt-click to select a color. Current color is [picked_color].</span>"
/obj/item/stack/marker_beacon/update_icon()
icon_state = "[initial(icon_state)][lowertext(picked_color)]"
@@ -93,8 +93,8 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list(
qdel(src)
/obj/structure/marker_beacon/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Alt-click to select a color. Current color is [picked_color].</span>")
. = ..()
. += "<span class='notice'>Alt-click to select a color. Current color is [picked_color].</span>"
/obj/structure/marker_beacon/update_icon()
while(!picked_color || !GLOB.marker_beacon_colors[picked_color])
@@ -33,8 +33,8 @@
/obj/item/survivalcapsule/examine(mob/user)
. = ..()
get_template()
to_chat(user, "This capsule has the [template.name] stored.")
to_chat(user, template.description)
. += "This capsule has the [template.name] stored."
. += template.description
/obj/item/survivalcapsule/attack_self()
//Can't grab when capsule is New() because templates aren't loaded then
+1 -1
View File
@@ -15,7 +15,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons)
/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()

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