This commit is contained in:
Linzolle
2019-11-25 21:01:25 -06:00
654 changed files with 4610 additions and 2805 deletions
+12 -12
View File
@@ -280,35 +280,35 @@
///Generate the full examine string of this atom (including icon for goonchat)
/atom/proc/get_examine_string(mob/user, thats = FALSE)
. = "[icon2html(src, user)] [thats? "That's ":""][get_examine_name(user)]"
return "[icon2html(src, user)] [thats? "That's ":""][get_examine_name(user)]"
/atom/proc/examine(mob/user)
to_chat(user, "[get_examine_string(user, TRUE)].")
. = list("[get_examine_string(user, TRUE)].")
if(desc)
to_chat(user, desc)
. += desc
if(reagents)
if(reagents.reagents_holder_flags & TRANSPARENT)
to_chat(user, "It contains:")
if(reagents.reagent_list.len)
. += "It contains:"
if(length(reagents.reagent_list))
if(user.can_see_reagents()) //Show each individual reagent
for(var/datum/reagent/R in reagents.reagent_list)
to_chat(user, "[R.volume] units of [R.name]")
. += "[R.volume] units of [R.name]"
else //Otherwise, just show the total volume
var/total_volume = 0
for(var/datum/reagent/R in reagents.reagent_list)
total_volume += R.volume
to_chat(user, "[total_volume] units of various reagents")
. += "[total_volume] units of various reagents"
else
to_chat(user, "Nothing.")
. += "Nothing."
else if(reagents.reagents_holder_flags & AMOUNT_VISIBLE)
if(reagents.total_volume)
to_chat(user, "<span class='notice'>It has [reagents.total_volume] unit\s left.</span>")
. += "<span class='notice'>It has [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>"
SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user)
SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, .)
/atom/proc/relaymove(mob/user)
if(buckle_message_cooldown <= world.time)
@@ -660,7 +660,7 @@
var/atom/L = loc
if(!L)
return null
return L.AllowDrop() ? L : get_turf(L)
return L.AllowDrop() ? L : L.drop_location()
/atom/Entered(atom/movable/AM, atom/oldLoc)
SEND_SIGNAL(src, COMSIG_ATOM_ENTERED, AM, oldLoc)
+4 -8
View File
@@ -339,10 +339,6 @@ Credit where due:
CLOCKCULTCHANGELOG\
</ul>\
<hr>\
<li><b>Zelus oil:</b> A new reagent. It can be used to heal the faithful to Ratvar, or kill heretics and moreso stun blood cultists,\
or splashed onto metal sheets to make brass. This chemical can be found in minimal quantities by grinding brass sheets.\
<li><b>Brass Flasks:</b>Intended to store Zelus Oil in, but can also be used as fragile single use throwing weapons in a pinch! \
These are crafted with a single sheet of brass and fit in the Clockwork Cuirass' suit storage.\
<b>Good luck!</b>"
/obj/item/paper/servant_primer/Initialize()
@@ -353,7 +349,7 @@ Credit where due:
changelog_contents += "<li>[entry]</li>"
info = replacetext(info, "CLOCKCULTCHANGELOG", changelog_contents)
/obj/item/paper/servant_primer/examine(mob/user)
if(!is_servant_of_ratvar(user) && !isobserver(user))
to_chat(user, "<span class='danger'>You can't understand any of the words on [src].</span>")
..()
/obj/item/paper/servant_primer/oui_getcontent(mob/target)
if(!is_servant_of_ratvar(target) && !isobserver(target))
return "<HTML><HEAD><TITLE>[name]</TITLE></HEAD><BODY>[stars(info)]<HR>[stamps]</BODY></HTML>"
return ..()
+1 -1
View File
@@ -53,7 +53,7 @@
/datum/outfit/syndicate/clownop/no_crystals
tc = 0
/datum/outfit/syndicate/clownop/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
/datum/outfit/syndicate/clownop/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
..()
if(visualsOnly)
return
+4 -4
View File
@@ -409,7 +409,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
message_admins("Drafting players for forced ruleset [rule.name].")
log_game("DYNAMIC: Drafting players for forced ruleset [rule.name].")
rule.mode = src
rule.acceptable(GLOB.player_list.len, threat_level) // Assigns some vars in the modes, running it here for consistency
rule.acceptable(roundstart_pop_ready, threat_level) // Assigns some vars in the modes, running it here for consistency
rule.candidates = candidates.Copy()
rule.trim_candidates()
if (rule.ready(TRUE))
@@ -421,7 +421,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
return TRUE
var/list/drafted_rules = list()
for (var/datum/dynamic_ruleset/roundstart/rule in roundstart_rules)
if (rule.acceptable(GLOB.player_list.len, threat_level) && threat >= rule.cost) // If we got the population and threat required
if (rule.acceptable(roundstart_pop_ready, threat_level) && threat >= rule.cost) // If we got the population and threat required
rule.candidates = candidates.Copy()
rule.trim_candidates()
if (rule.ready() && rule.candidates.len > 0)
@@ -429,12 +429,12 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
if(!drafted_rules.len)
message_admins("Not enough threat level for roundstart antags!")
log_game("DYNAMIC: Not enough threat level for roundstart antags!")
var/indice_pop = min(10,round(GLOB.player_list.len/pop_per_requirement)+1)
var/indice_pop = min(10,round(roundstart_pop_ready/pop_per_requirement)+1)
extra_rulesets_amount = 0
if (GLOB.dynamic_classic_secret)
extra_rulesets_amount = 0
else
if (GLOB.player_list.len > GLOB.dynamic_high_pop_limit)
if (roundstart_pop_ready > GLOB.dynamic_high_pop_limit)
message_admins("High Population Override is in effect! Threat Level will have more impact on which roles will appear, and player population less.")
log_game("DYNAMIC: High Population Override is in effect! Threat Level will have more impact on which roles will appear, and player population less.")
if (threat_level > high_pop_second_rule_req)
@@ -143,7 +143,6 @@
repeatable_weight_decrease = 2
requirements = list(60,50,40,30,30,30,30,30,30,30)
high_population_requirement = 30
repeatable = TRUE
/datum/dynamic_ruleset/event/meteor_wave/ready()
if(mode.threat_level > 40 && mode.threat >= 25 && prob(20))
@@ -270,7 +269,7 @@
repeatable = TRUE
/datum/dynamic_ruleset/event/processor_overload
name = "Processer Overload"
name = "Processor Overload"
config_tag = "processor_overload"
typepath = /datum/round_event/processor_overload
cost = 4
@@ -41,6 +41,9 @@
if (!istype(M, required_type))
trimmed_list.Remove(M)
continue
if (M.GetComponent(/datum/component/virtual_reality))
trimmed_list.Remove(M)
continue
if (!M.client) // Are they connected?
trimmed_list.Remove(M)
continue
@@ -107,11 +110,11 @@
candidates = pollGhostCandidates("The mode is looking for volunteers to become a [name]", antag_flag, SSticker.mode, antag_flag, poll_time = 300)
if(!candidates || candidates.len <= 0)
message_admins("The ruleset [name] received no applications.")
log_game("DYNAMIC: The ruleset [name] received no applications.")
if(!candidates || candidates.len <= required_candidates)
message_admins("The ruleset [name] did not receive enough applications.")
log_game("DYNAMIC: The ruleset [name] did not receive enough applications.")
mode.refund_threat(cost)
mode.log_threat("Rule [name] refunded [cost] (no applications)",verbose=TRUE)
mode.log_threat("Rule [name] refunded [cost] (not receive enough applications)",verbose=TRUE)
mode.executed_rules -= src
return
@@ -150,7 +153,7 @@
finish_setup(new_character, i)
assigned += applicant
notify_ghosts("[new_character] has been picked for the ruleset [name]!", source = new_character, action = NOTIFY_ORBIT, header="Something Interesting!")
notify_ghosts("[new_character] has been picked for the ruleset [name]!", source = new_character, action = NOTIFY_ORBIT)
/datum/dynamic_ruleset/midround/from_ghosts/proc/generate_ruleset_body(mob/applicant)
var/mob/living/carbon/human/new_character = makeBody(applicant)
@@ -283,6 +286,7 @@
/datum/dynamic_ruleset/midround/from_ghosts/wizard
name = "Wizard"
config_tag = "midround_wizard"
persistent = TRUE
antag_datum = /datum/antagonist/wizard
antag_flag = ROLE_WIZARD
enemy_roles = list("Security Officer","Detective","Head of Security", "Captain")
@@ -293,6 +297,7 @@
requirements = list(90,90,70,50,50,50,50,40,30,30)
high_population_requirement = 30
repeatable = TRUE
var/datum/mind/wizard
/datum/dynamic_ruleset/midround/from_ghosts/wizard/ready(forced = FALSE)
if (required_candidates > (dead_players.len + list_observers.len))
@@ -307,6 +312,20 @@
..()
new_character.forceMove(pick(GLOB.wizardstart))
/datum/dynamic_ruleset/midround/from_ghosts/wizard/rule_process() // i can literally copy this from are_special_antags_dead it's great
if(isliving(wizard.current) && wizard.current.stat!=DEAD)
return FALSE
for(var/obj/item/phylactery/P in GLOB.poi_list) //TODO : IsProperlyDead()
if(P.mind && P.mind.has_antag_datum(/datum/antagonist/wizard))
return FALSE
if(SSevents.wizardmode) //If summon events was active, turn it off
SSevents.toggleWizardmode()
SSevents.resetFrequency()
return RULESET_STOP_PROCESSING
//////////////////////////////////////////////
// //
// NUCLEAR OPERATIVES (MIDROUND) //
@@ -149,6 +149,7 @@
/datum/dynamic_ruleset/roundstart/wizard
name = "Wizard"
config_tag = "wizard"
persistent = TRUE
antag_flag = ROLE_WIZARD
antag_datum = /datum/antagonist/wizard
minimum_required_age = 14
@@ -183,8 +184,25 @@
for(var/datum/mind/M in assigned)
M.current.forceMove(pick(GLOB.wizardstart))
M.add_antag_datum(new antag_datum())
roundstart_wizards += M
return TRUE
/datum/dynamic_ruleset/roundstart/wizard/rule_process() // i can literally copy this from are_special_antags_dead it's great
for(var/datum/mind/wizard in roundstart_wizards)
if(isliving(wizard.current) && wizard.current.stat!=DEAD)
return FALSE
for(var/obj/item/phylactery/P in GLOB.poi_list) //TODO : IsProperlyDead()
if(P.mind && P.mind.has_antag_datum(/datum/antagonist/wizard))
return FALSE
if(SSevents.wizardmode) //If summon events was active, turn it off
SSevents.toggleWizardmode()
SSevents.resetFrequency()
return RULESET_STOP_PROCESSING
//////////////////////////////////////////////
// //
// BLOOD CULT //
@@ -263,7 +281,7 @@
requirements = list(100,90,80,70,60,50,50,50,50,50)
high_population_requirement = 50
flags = HIGHLANDER_RULESET
antag_cap = list(2,2,2,3,3,3,4,4,5,5)
antag_cap = list(1,1,2,3,4,5,5,5,5,5)
var/datum/team/nuclear/nuke_team
/datum/dynamic_ruleset/roundstart/nuclear/ready(forced = FALSE)
+1 -1
View File
@@ -167,7 +167,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event
/obj/effect/meteor/examine(mob/user)
if(!(flags_1 & ADMIN_SPAWNED_1) && isliving(user))
SSmedals.UnlockMedal(MEDAL_METEOR, user.client)
..()
return ..()
/obj/effect/meteor/attackby(obj/item/I, mob/user, params)
if(I.tool_behaviour == TOOL_MINING)
+1 -1
View File
@@ -144,7 +144,7 @@
/datum/outfit/syndicate/no_crystals
tc = 0
/datum/outfit/syndicate/post_equip(mob/living/carbon/human/H)
/datum/outfit/syndicate/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
var/obj/item/radio/R = H.ears
R.set_frequency(FREQ_SYNDICATE)
R.freqlock = TRUE
+2 -2
View File
@@ -130,8 +130,8 @@
open_machine()
/obj/machinery/sleeper/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Alt-click [src] to [state_open ? "close" : "open"] it.</span>")
. = ..()
. += "<span class='notice'>Alt-click [src] to [state_open ? "close" : "open"] it.</span>"
/obj/machinery/sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state)
+6 -6
View File
@@ -454,20 +454,20 @@ Class Procs:
/obj/machinery/examine(mob/user)
. = ..()
if(stat & BROKEN)
to_chat(user, "<span class='notice'>It looks broken and non-functional.</span>")
. += "<span class='notice'>It looks broken and non-functional.</span>"
if(!(resistance_flags & INDESTRUCTIBLE))
if(resistance_flags & ON_FIRE)
to_chat(user, "<span class='warning'>It's on fire!</span>")
. += "<span class='warning'>It's on fire!</span>"
var/healthpercent = (obj_integrity/max_integrity) * 100
switch(healthpercent)
if(50 to 99)
to_chat(user, "It looks slightly damaged.")
. += "It looks slightly damaged."
if(25 to 50)
to_chat(user, "It appears heavily damaged.")
. += "It appears heavily damaged."
if(0 to 25)
to_chat(user, "<span class='warning'>It's falling apart!</span>")
. += "<span class='warning'>It's falling apart!</span>"
if(user.research_scanner && component_parts)
to_chat(user, display_parts(user, TRUE))
. += display_parts(user, TRUE)
//called on machinery construction (i.e from frame to machinery) but not on initialization
/obj/machinery/proc/on_construction()
+2 -2
View File
@@ -14,8 +14,8 @@
req_access = list(ACCESS_AI_UPLOAD)
/obj/machinery/ai_slipper/examine(mob/user)
..()
to_chat(user, "<span class='notice'>It has <b>[uses]</b> uses of foam remaining.</span>")
. = ..()
. += "<span class='notice'>It has <b>[uses]</b> uses of foam remaining.</span>"
/obj/machinery/ai_slipper/power_change()
if(stat & BROKEN)
+2 -2
View File
@@ -11,9 +11,9 @@
var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi')
/obj/machinery/aug_manipulator/examine(mob/user)
..()
. = ..()
if(storedpart)
to_chat(user, "<span class='notice'>Alt-click to eject the limb.</span>")
. += "<span class='notice'>Alt-click to eject the limb.</span>"
/obj/machinery/aug_manipulator/Initialize()
initial_icon_state = initial(icon_state)
+3 -3
View File
@@ -24,10 +24,10 @@
add_overlay("ccharger-o[newlevel]")
/obj/machinery/cell_charger/examine(mob/user)
..()
to_chat(user, "There's [charging ? "a" : "no"] cell in the charger.")
. = ..()
. += "There's [charging ? "a" : "no"] cell in the charger."
if(charging)
to_chat(user, "Current charge: [round(charging.percent(), 1)]%.")
. += "Current charge: [round(charging.percent(), 1)]%."
/obj/machinery/cell_charger/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/stock_parts/cell) && !panel_open)
+5 -5
View File
@@ -93,20 +93,20 @@
to_chat(user, "<span class='notice'>You flip the write-protect tab to [read_only ? "protected" : "unprotected"].</span>")
/obj/item/disk/data/examine(mob/user)
..()
to_chat(user, "The write-protect tab is set to [read_only ? "protected" : "unprotected"].")
. = ..()
. += "The write-protect tab is set to [read_only ? "protected" : "unprotected"]."
//Clonepod
/obj/machinery/clonepod/examine(mob/user)
..()
. = ..()
var/mob/living/mob_occupant = occupant
if(mess)
to_chat(user, "It's filled with blood and viscera. You swear you can see it moving...")
. += "It's filled with blood and viscera. You swear you can see it moving..."
if(is_operational() && mob_occupant)
if(mob_occupant.stat != DEAD)
to_chat(user, "Current clone cycle is [round(get_completion())]% complete.")
. += "Current clone cycle is [round(get_completion())]% complete."
/obj/machinery/clonepod/return_air()
// We want to simulate the clone not being in contact with
@@ -762,13 +762,13 @@
var/active = 0 //if the ship is on
/obj/item/orion_ship/examine(mob/user)
..()
. = ..()
if(!(in_range(user, src)))
return
if(!active)
to_chat(user, "<span class='notice'>There's a little switch on the bottom. It's flipped down.</span>")
. += "<span class='notice'>There's a little switch on the bottom. It's flipped down.</span>"
else
to_chat(user, "<span class='notice'>There's a little switch on the bottom. It's flipped up.</span>")
. += "<span class='notice'>There's a little switch on the bottom. It's flipped up.</span>"
/obj/item/orion_ship/attack_self(mob/user) //Minibomb-level explosion. Should probably be more because of how hard it is to survive the machine! Also, just over a 5-second fuse
if(active)
@@ -19,7 +19,7 @@
return
to_chat(user, "<span class='notice'>You start deconstructing the frame...</span>")
if(P.use_tool(src, user, 20, volume=50))
if(P.use_tool(src, user, 20, volume=50) && state == 0)
to_chat(user, "<span class='notice'>You deconstruct the frame.</span>")
var/obj/item/stack/sheet/metal/M = new (drop_location(), 5)
M.add_fingerprint(user)
@@ -28,7 +28,7 @@
if(1)
if(istype(P, /obj/item/wrench))
to_chat(user, "<span class='notice'>You start to unfasten the frame...</span>")
if(P.use_tool(src, user, 20, volume=50))
if(P.use_tool(src, user, 20, volume=50) && state == 1)
to_chat(user, "<span class='notice'>You unfasten the frame.</span>")
setAnchored(FALSE)
state = 0
@@ -72,9 +72,7 @@
if(!P.tool_start_check(user, amount=5))
return
to_chat(user, "<span class='notice'>You start adding cables to the frame...</span>")
if(P.use_tool(src, user, 20, volume=50, amount=5))
if(state != 2)
return
if(P.use_tool(src, user, 20, 5, 50, CALLBACK(src, .proc/check_state, 2)))
to_chat(user, "<span class='notice'>You add cables to the frame.</span>")
state = 3
icon_state = "3"
@@ -94,9 +92,7 @@
return
playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
to_chat(user, "<span class='notice'>You start to put in the glass panel...</span>")
if(P.use_tool(src, user, 20, amount=2))
if(state != 3)
return
if(P.use_tool(src, user, 20, 2, 0, CALLBACK(src, .proc/check_state, 3)))
to_chat(user, "<span class='notice'>You put in the glass panel.</span>")
state = 4
src.icon_state = "4"
@@ -121,6 +117,11 @@
if(user.a_intent == INTENT_HARM)
return ..()
//callback proc used on stacks use_tool to stop unnecessary amounts being wasted from spam clicking.
/obj/structure/frame/computer/proc/check_state(target_state)
if(state == target_state)
return TRUE
return FALSE
/obj/structure/frame/computer/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
+19 -30
View File
@@ -17,13 +17,7 @@
network += lowertext(i)
/obj/machinery/computer/security/check_eye(mob/user)
if(CHECK_BITFIELD(stat, NOPOWER|BROKEN) || is_blind(user) || !in_view_range(user, src) || !user.canUseTopic(src, !issilicon(user), FALSE))
user.unset_machine()
return
if(!(user in watchers))
user.unset_machine()
return
if(!watchers[user])
if(!can_interact(user) || !(user in watchers) || !watchers[user])
user.unset_machine()
return
var/obj/machinery/camera/C = watchers[user]
@@ -41,55 +35,50 @@
M.unset_machine() //to properly reset the view of the users if the console is deleted.
return ..()
/obj/machinery/computer/security/attack_hand(mob/user)
/obj/machinery/computer/security/can_interact(mob/user)
if((!issilicon(user) && !Adjacent(user)) || is_blind(user) || !in_view_range(user, src))
return FALSE
return ..()
/obj/machinery/computer/security/interact(mob/user, special_state)
. = ..()
if(.)
return
if(stat)
if (ismob(user) && !isliving(user)) // ghosts don't need cameras
return
if (!network)
throw EXCEPTION("No camera network")
CRASH("No camera network")
user.unset_machine()
return
return FALSE
if (!(islist(network)))
throw EXCEPTION("Camera network is not a list")
CRASH("Camera network is not a list")
user.unset_machine()
return
if(..())
user.unset_machine()
return
return FALSE
var/list/camera_list = get_available_cameras()
if(!(user in watchers))
for(var/Num in camera_list)
var/obj/machinery/camera/CAM = camera_list[Num]
if(istype(CAM))
if(CAM.can_use())
watchers[user] = CAM //let's give the user the first usable camera, and then let him change to the camera he wants.
break
if(istype(CAM) && CAM.can_use())
watchers[user] = CAM //let's give the user the first usable camera, and then let him change to the camera he wants.
break
if(!(user in watchers))
user.unset_machine() // no usable camera on the network, we disconnect the user from the computer.
return
return FALSE
playsound(src, 'sound/machines/terminal_prompt.ogg', 25, 0)
use_camera_console(user)
/obj/machinery/computer/security/proc/use_camera_console(mob/user)
var/list/camera_list = get_available_cameras()
var/t = input(user, "Which camera should you change to?") as null|anything in camera_list
if(user.machine != src) //while we were choosing we got disconnected from our computer or are using another machine.
if(!src || user.machine != src) //while we were choosing we got disconnected from our computer or are using another machine.
return
if(!t)
if(!t || t == "Cancel")
user.unset_machine()
playsound(src, 'sound/machines/terminal_off.ogg', 25, 0)
return
var/obj/machinery/camera/C = camera_list[t]
if(t == "Cancel")
user.unset_machine()
playsound(src, 'sound/machines/terminal_off.ogg', 25, 0)
return
if(!C || !C.can_use() || CHECK_BITFIELD(stat, NOPOWER|BROKEN) || is_blind(user) || !in_view_range(user, src) || !user.canUseTopic(src, !issilicon(user), FALSE))
if(!C || !C.can_use() || !can_interact(user))
user.unset_machine()
return FALSE
+34 -32
View File
@@ -56,33 +56,34 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
/obj/machinery/computer/card/centcom/get_jobs()
return get_all_centcom_jobs()
/obj/machinery/computer/card/examine(mob/user)
. = ..()
if(inserted_scan_id || inserted_modify_id)
to_chat(user, "<span class='notice'>Alt-click to eject the ID card.</span>")
/obj/machinery/computer/card/Initialize()
. = ..()
change_position_cooldown = CONFIG_GET(number/id_console_jobslot_delay)
/obj/machinery/computer/card/examine(mob/user)
. = ..()
if(inserted_scan_id || inserted_modify_id)
. += "<span class='notice'>Alt-click to eject the ID card.</span>"
/obj/machinery/computer/card/attackby(obj/I, mob/user, params)
if(isidcard(I))
if(check_access(I) && !inserted_scan_id)
if(id_insert(user, I, inserted_scan_id))
inserted_scan_id = I
updateUsrDialog()
else if(!inserted_modify_id)
if(id_insert(user, I, inserted_modify_id))
inserted_modify_id = I
updateUsrDialog()
else if(id_insert(user, I, inserted_modify_id))
inserted_modify_id = I
updateUsrDialog()
else
return ..()
/obj/machinery/computer/card/Destroy()
if(inserted_scan_id)
QDEL_NULL(inserted_scan_id)
qdel(inserted_scan_id)
inserted_scan_id = null
if(inserted_modify_id)
QDEL_NULL(inserted_modify_id)
qdel(inserted_modify_id)
inserted_modify_id = null
return ..()
/obj/machinery/computer/card/handle_atom_del(atom/A)
@@ -106,7 +107,6 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
/obj/machinery/computer/card/proc/job_blacklisted(jobtitle)
return (jobtitle in blacklisted)
//Logic check for Topic() if you can open the job
/obj/machinery/computer/card/proc/can_open_job(datum/job/job)
if(job)
@@ -131,6 +131,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
return JOB_MAX_POSITIONS
return JOB_DENIED
/obj/machinery/computer/card/proc/id_insert(mob/user, obj/item/inserting_item, obj/item/target)
var/obj/item/card/id/card_to_insert = inserting_item
var/holder_item = FALSE
@@ -202,8 +203,8 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if(job.title in blacklisted)
continue
dat += {"<td>[job.title]</td>
<td>[job.current_positions]/[job.total_positions]</td>
<td>"}
<td>[job.current_positions]/[job.total_positions]</td>
<td>"}
switch(can_open_job(job))
if(JOB_ALLOWED)
if(authenticated == 2)
@@ -224,7 +225,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
dat += "<a href='?src=[REF(src)];choice=make_job_unavailable;job=[job.title]'>Close Position</a>"
else
dat += "Close Position"
if(-JOB_COOLDOWN)
if(JOB_COOLDOWN)
var/time_to_wait = round(change_position_cooldown - ((world.time / 10) - GLOB.time_last_changed_position), 1)
var/mins = round(time_to_wait / 60)
var/seconds = time_to_wait - (60*mins)
@@ -251,6 +252,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
dat += "</table>"
else
var/list/header = list()
var/scan_name = inserted_scan_id ? html_encode(inserted_scan_id.name) : "--------"
var/target_name = inserted_modify_id ? html_encode(inserted_modify_id.name) : "--------"
var/target_owner = (inserted_modify_id && inserted_modify_id.registered_name) ? html_encode(inserted_modify_id.registered_name) : "--------"
@@ -261,7 +263,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
Target: <a href='?src=[REF(src)];choice=inserted_modify_id'>[target_name]</a><br>
Confirm Identity: <a href='?src=[REF(src)];choice=inserted_scan_id'>[scan_name]</a><br>"}
else
header += {"<div align='center'><br>"
header += {"<div align='center'><br>
Target: <a href='?src=[REF(src)];choice=inserted_modify_id'>Remove [target_name]</a> ||
Confirm Identity: <a href='?src=[REF(src)];choice=inserted_scan_id'>Remove [scan_name]</a><br>
<a href='?src=[REF(src)];choice=mode;mode_target=1'>Access Crew Manifest</a><br>
@@ -297,7 +299,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
allJobsSlot.innerHTML = "<a href='#' onclick='showAll()'>show</a>";
}
</script>"}
carddesc += {"<form name='cardcomp' action='?src=[REF(src)]' method='get'>"
carddesc += {"<form name='cardcomp' action='?src=[REF(src)]' method='get'>
<input type='hidden' name='src' value='[REF(src)]'>
<input type='hidden' name='choice' value='reg'>
<b>registered name:</b> <input type='text' id='namefield' name='reg' value='[target_owner]' style='width:250px; background-color:white;' onchange='markRed()'>
@@ -312,7 +314,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
jobs += "<b>Assignment:</b> [target_rank] (<a href='?src=[REF(src)];choice=demote'>Demote</a>)</span>"
var/list/accesses = list()
if(istype(src, /obj/machinery/computer/card/centcom)) //REE
if(istype(src, /obj/machinery/computer/card/centcom)) // REE
accesses += "<h5>Central Command:</h5>"
for(var/A in get_all_centcom_access())
if(A in inserted_modify_id.access)
@@ -340,13 +342,13 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
accesses += "<br>"
accesses += "</td>"
accesses += "</tr></table>"
body = "[carddesc.Join()]<br>[jobs]<br><br>[accesses.Join()]<hr>" //CHECK THIS
body = "[carddesc.Join()]<br>[jobs.Join()]<br><br>[accesses.Join()]<hr>" //CHECK THIS
else if (!authenticated)
body = {"<a href='?src=[REF(src)];choice=auth'>Log In</a> <br><hr>
body = {"<a href='?src=[REF(src)];choice=auth'>Log In</a><br><hr>
<a href='?src=[REF(src)];choice=mode;mode_target=1'>Access Crew Manifest</a><br><hr>"}
if(!target_dept)
body += "<br><hr><a href='?src=[REF(src)];choice=mode;mode_target=2'>Job Management</a><hr>"
body += "<a href='?src=[REF(src)];choice=mode;mode_target=2'>Job Management</a><hr>"
dat = list("<tt>", header.Join(), body, "<br></tt>")
var/datum/browser/popup = new(user, "id_com", src.name, 900, 620)
@@ -366,7 +368,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
usr.set_machine(src)
switch(href_list["choice"])
if ("inserted_modify_id")
if (inserted_modify_id && !usr.get_active_held_item())
if(inserted_modify_id && !usr.get_active_held_item())
if(id_eject(usr, inserted_modify_id))
inserted_modify_id = null
updateUsrDialog()
@@ -378,7 +380,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
inserted_modify_id = id_to_insert
updateUsrDialog()
if ("inserted_scan_id")
if (inserted_scan_id && !usr.get_active_held_item())
if(inserted_scan_id && !usr.get_active_held_item())
if(id_eject(usr, inserted_scan_id))
inserted_scan_id = null
updateUsrDialog()
@@ -386,7 +388,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if(usr.get_id_in_hand())
var/obj/item/held_item = usr.get_active_held_item()
var/obj/item/card/id/id_to_insert = held_item.GetID()
if(id_insert(usr, held_item, inserted_modify_id))
if(id_insert(usr, held_item, inserted_scan_id))
inserted_scan_id = id_to_insert
updateUsrDialog()
if ("auth")
@@ -462,7 +464,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
updateUsrDialog()
break
if(!jobdatum)
to_chat(usr, "<span class='error'>No log exists for this job.</span>")
to_chat(usr, "<span class='alert'>No log exists for this job.</span>")
updateUsrDialog()
return
@@ -475,7 +477,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
inserted_modify_id.assignment = "Unassigned"
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE)
else
to_chat(usr, "<span class='error'>You are not authorized to demote this position.</span>")
to_chat(usr, "<span class='alert'>You are not authorized to demote this position.</span>")
if ("reg")
if (authenticated)
var/t2 = inserted_modify_id
@@ -485,7 +487,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
inserted_modify_id.registered_name = newName
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE)
else
to_chat(usr, "<span class='error'>Invalid name entered.</span>")
to_chat(usr, "<span class='alert'>Invalid name entered.</span>")
updateUsrDialog()
return
if ("mode")
@@ -498,7 +500,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if("make_job_available")
// MAKE ANOTHER JOB POSITION AVAILABLE FOR LATE JOINERS
if(authenticated && (ACCESS_CHANGE_IDS in inserted_scan_id.access) && !target_dept)
if(authenticated && !target_dept)
var/edit_job_target = href_list["job"]
var/datum/job/j = SSjob.GetJob(edit_job_target)
if(!j)
@@ -515,7 +517,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if("make_job_unavailable")
// MAKE JOB POSITION UNAVAILABLE FOR LATE JOINERS
if(authenticated && (ACCESS_CHANGE_IDS in inserted_scan_id.access) && !target_dept)
if(authenticated && !target_dept)
var/edit_job_target = href_list["job"]
var/datum/job/j = SSjob.GetJob(edit_job_target)
if(!j)
@@ -533,7 +535,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if ("prioritize_job")
// TOGGLE WHETHER JOB APPEARS AS PRIORITIZED IN THE LOBBY
if(authenticated && (ACCESS_CHANGE_IDS in inserted_scan_id.access) && !target_dept)
if(authenticated && !target_dept)
var/priority_target = href_list["job"]
var/datum/job/j = SSjob.GetJob(priority_target)
if(!j)
@@ -549,7 +551,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
return
else
SSjob.prioritized_jobs += j
to_chat(usr, "<span class='notice'>[j.title] has been successfully [priority ? "prioritized" : "unprioritized"]. Potential employees will notice your request.</span>")
to_chat(usr, "<span class='notice'>[j.title] has been successfully [priority ? "prioritized" : "unprioritized"]. Potential employees will notice your request.</span>")
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE)
if ("print")
@@ -625,4 +627,4 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
#undef JOB_ALLOWED
#undef JOB_COOLDOWN
#undef JOB_MAX_POSITIONS
#undef JOB_DENIED
#undef JOB_DENIED
+5 -5
View File
@@ -8,9 +8,9 @@
var/state = 1
/obj/structure/frame/examine(user)
..()
. = ..()
if(circuit)
to_chat(user, "It has \a [circuit] installed.")
. += "It has \a [circuit] installed."
/obj/structure/frame/deconstruct(disassembled = TRUE)
@@ -29,7 +29,7 @@
var/list/req_component_names = null // user-friendly names of components
/obj/structure/frame/machine/examine(user)
..()
. = ..()
if(state == 3 && req_components && req_component_names)
var/hasContent = 0
var/requires = "It requires"
@@ -44,9 +44,9 @@
hasContent = 1
if(hasContent)
to_chat(user, requires + ".")
. += requires + "."
else
to_chat(user, "It does not require any more components.")
. += "It does not require any more components."
/obj/structure/frame/machine/proc/update_namelist()
if(!req_components)
+4 -4
View File
@@ -24,13 +24,13 @@
. = ..()
/obj/machinery/defibrillator_mount/examine(mob/user)
..()
. = ..()
if(defib)
to_chat(user, "<span class='notice'>There is a defib unit hooked up. Alt-click to remove it.<span>")
. += "<span class='notice'>There is a defib unit hooked up. Alt-click to remove it.<span>"
if(GLOB.security_level >= SEC_LEVEL_RED)
to_chat(user, "<span class='notice'>Due to a security situation, its locking clamps can be toggled by swiping any ID.</span>")
. += "<span class='notice'>Due to a security situation, its locking clamps can be toggled by swiping any ID.</span>"
else
to_chat(user, "<span class='notice'>Its locking clamps can be [clamps_locked ? "dis" : ""]engaged by swiping an ID with access.</span>")
. += "<span class='notice'>Its locking clamps can be [clamps_locked ? "dis" : ""]engaged by swiping an ID with access.</span>"
/obj/machinery/defibrillator_mount/process()
if(defib && defib.cell && defib.cell.charge < defib.cell.maxcharge && is_operational())
+2 -2
View File
@@ -149,8 +149,8 @@
var/mode = SINGLE
/obj/item/grenade/barrier/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Alt-click to toggle modes.</span>")
. = ..()
. += "<span class='notice'>Alt-click to toggle modes.</span>"
/obj/item/grenade/barrier/AltClick(mob/living/carbon/user)
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE))
+2 -2
View File
@@ -27,9 +27,9 @@
RefreshParts()
/obj/machinery/dish_drive/examine(mob/user)
..()
. = ..()
if(user.Adjacent(src))
to_chat(user, "<span class='notice'>Alt-click it to beam its contents to any nearby disposal bins.</span>")
. += "<span class='notice'>Alt-click it to beam its contents to any nearby disposal bins.</span>"
/obj/machinery/dish_drive/attack_hand(mob/living/user)
if(!contents.len)
+20 -20
View File
@@ -640,47 +640,47 @@
update_icon(AIRLOCK_CLOSED)
/obj/machinery/door/airlock/examine(mob/user)
..()
. = ..()
if(obj_flags & EMAGGED)
to_chat(user, "<span class='warning'>Its access panel is smoking slightly.</span>")
. += "<span class='warning'>Its access panel is smoking slightly.</span>"
if(charge && !panel_open && in_range(user, src))
to_chat(user, "<span class='warning'>The maintenance panel seems haphazardly fastened.</span>")
. += "<span class='warning'>The maintenance panel seems haphazardly fastened.</span>"
if(charge && panel_open)
to_chat(user, "<span class='warning'>Something is wired up to the airlock's electronics!</span>")
. += "<span class='warning'>Something is wired up to the airlock's electronics!</span>"
if(note)
if(!in_range(user, src))
to_chat(user, "There's a [note.name] pinned to the front. You can't read it from here.")
. += "There's a [note.name] pinned to the front. You can't read it from here."
else
to_chat(user, "There's a [note.name] pinned to the front...")
note.examine(user)
. += "There's a [note.name] pinned to the front..."
. += note.examine(user)
if(panel_open)
switch(security_level)
if(AIRLOCK_SECURITY_NONE)
to_chat(user, "Its wires are exposed!")
. += "Its wires are exposed!"
if(AIRLOCK_SECURITY_METAL)
to_chat(user, "Its wires are hidden behind a welded metal cover.")
. += "Its wires are hidden behind a welded metal cover."
if(AIRLOCK_SECURITY_PLASTEEL_I_S)
to_chat(user, "There is some shredded plasteel inside.")
. += "There is some shredded plasteel inside."
if(AIRLOCK_SECURITY_PLASTEEL_I)
to_chat(user, "Its wires are behind an inner layer of plasteel.")
. += "Its wires are behind an inner layer of plasteel."
if(AIRLOCK_SECURITY_PLASTEEL_O_S)
to_chat(user, "There is some shredded plasteel inside.")
. += "There is some shredded plasteel inside."
if(AIRLOCK_SECURITY_PLASTEEL_O)
to_chat(user, "There is a welded plasteel cover hiding its wires.")
. += "There is a welded plasteel cover hiding its wires."
if(AIRLOCK_SECURITY_PLASTEEL)
to_chat(user, "There is a protective grille over its panel.")
. += "There is a protective grille over its panel."
else if(security_level)
if(security_level == AIRLOCK_SECURITY_METAL)
to_chat(user, "It looks a bit stronger.")
. += "It looks a bit stronger."
else
to_chat(user, "It looks very robust.")
. += "It looks very robust."
if(issilicon(user) && (!stat & BROKEN))
to_chat(user, "<span class='notice'>Shift-click [src] to [ density ? "open" : "close"] it.</span>")
to_chat(user, "<span class='notice'>Ctrl-click [src] to [ locked ? "raise" : "drop"] its bolts.</span>")
to_chat(user, "<span class='notice'>Alt-click [src] to [ secondsElectrified ? "un-electrify" : "permanently electrify"] it.</span>")
to_chat(user, "<span class='notice'>Ctrl-Shift-click [src] to [ emergency ? "disable" : "enable"] emergency access.</span>")
. += "<span class='notice'>Shift-click [src] to [ density ? "open" : "close"] it.</span>"
. += "<span class='notice'>Ctrl-click [src] to [ locked ? "raise" : "drop"] its bolts.</span>"
. += "<span class='notice'>Alt-click [src] to [ secondsElectrified ? "un-electrify" : "permanently electrify"] it.</span>"
. += "<span class='notice'>Ctrl-Shift-click [src] to [ emergency ? "disable" : "enable"] emergency access.</span>"
/obj/machinery/door/airlock/attack_ai(mob/user)
if(!src.canAIControl(user))
@@ -7,8 +7,8 @@
var/unres_sides = 0 //unrestricted sides, or sides of the airlock that will open regardless of access
/obj/item/electronics/airlock/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Has a neat <i>selection menu</i> for modifying airlock access levels.</span>")
. = ..()
. += "<span class='notice'>Has a neat <i>selection menu</i> for modifying airlock access levels.</span>"
/obj/item/electronics/airlock/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state)
+3 -5
View File
@@ -593,14 +593,12 @@
return ..()
/obj/machinery/door/airlock/clockwork/examine(mob/user)
..()
var/gear_text = "The cogwheel is flickering and twisting wildly. Report this to a coder."
. = ..()
switch(construction_state)
if(GEAR_SECURE)
gear_text = "<span class='brass'>The cogwheel is solidly <b>wrenched</b> to the brass around it.</span>"
. += "<span class='brass'>The cogwheel is solidly <b>wrenched</b> to the brass around it.</span>"
if(GEAR_LOOSE)
gear_text = "<span class='alloy'>The cogwheel has been <i>loosened</i>, but remains <b>connected loosely</b> to the door!</span>"
to_chat(user, gear_text)
. += "<span class='alloy'>The cogwheel has been <i>loosened</i>, but remains <b>connected loosely</b> to the door!</span>"
/obj/machinery/door/airlock/clockwork/emp_act(severity)
if(prob(80/severity))
+4 -4
View File
@@ -37,14 +37,14 @@
var/unres_sides = 0 //Unrestricted sides. A bitflag for which direction (if any) can open the door with no access
/obj/machinery/door/examine(mob/user)
..()
. = ..()
if(red_alert_access)
if(GLOB.security_level >= SEC_LEVEL_RED)
to_chat(user, "<span class='notice'>Due to a security threat, its access requirements have been lifted!</span>")
. += "<span class='notice'>Due to a security threat, its access requirements have been lifted!</span>"
else
to_chat(user, "<span class='notice'>In the event of a red alert, its access requirements will automatically lift.</span>")
. += "<span class='notice'>In the event of a red alert, its access requirements will automatically lift.</span>"
if(!poddoor)
to_chat(user, "<span class='notice'>Its maintenance panel is <b>screwed</b> in place.</span>")
. += "<span class='notice'>Its maintenance panel is <b>screwed</b> in place.</span>"
/obj/machinery/door/check_access_list(list/access_list)
if(red_alert_access && GLOB.security_level >= SEC_LEVEL_RED)
+10 -10
View File
@@ -34,13 +34,13 @@
/obj/machinery/door/firedoor/examine(mob/user)
..()
if(!density)
to_chat(user, "<span class='notice'>It is open, but could be <b>pried</b> closed.</span>")
. += "<span class='notice'>It is open, but could be <b>pried</b> closed.</span>"
else if(!welded)
to_chat(user, "<span class='notice'>It is closed, but could be <i>pried</i> open. Deconstruction would require it to be <b>welded</b> shut.</span>")
. += "<span class='notice'>It is closed, but could be <i>pried</i> open. Deconstruction would require it to be <b>welded</b> shut.</span>"
else if(boltslocked)
to_chat(user, "<span class='notice'>It is <i>welded</i> shut. The floor bolts have been locked by <b>screws</b>.</span>")
. += "<span class='notice'>It is <i>welded</i> shut. The floor bolts have been locked by <b>screws</b>.</span>"
else
to_chat(user, "<span class='notice'>The bolt locks have been <i>unscrewed</i>, but the bolts themselves are still <b>wrenched</b> to the floor.</span>")
. += "<span class='notice'>The bolt locks have been <i>unscrewed</i>, but the bolts themselves are still <b>wrenched</b> to the floor.</span>"
/obj/machinery/door/firedoor/proc/CalculateAffectingAreas()
remove_from_areas()
@@ -270,18 +270,18 @@
var/reinforced = 0
/obj/structure/firelock_frame/examine(mob/user)
..()
. = ..()
switch(constructionStep)
if(CONSTRUCTION_PANEL_OPEN)
to_chat(user, "<span class='notice'>It is <i>unbolted</i> from the floor. A small <b>loosely connected</b> metal plate is covering the wires.</span>")
. += "<span class='notice'>It is <i>unbolted</i> from the floor. A small <b>loosely connected</b> metal plate is covering the wires.</span>"
if(!reinforced)
to_chat(user, "<span class='notice'>It could be reinforced with plasteel.</span>")
. += "<span class='notice'>It could be reinforced with plasteel.</span>"
if(CONSTRUCTION_WIRES_EXPOSED)
to_chat(user, "<span class='notice'>The maintenance plate has been <i>pried away</i>, and <b>wires</b> are trailing.</span>")
. += "<span class='notice'>The maintenance plate has been <i>pried away</i>, and <b>wires</b> are trailing.</span>"
if(CONSTRUCTION_GUTTED)
to_chat(user, "<span class='notice'>The maintenance panel is missing <i>wires</i> and the circuit board is <b>loosely connected</b>.</span>")
. += "<span class='notice'>The maintenance panel is missing <i>wires</i> and the circuit board is <b>loosely connected</b>.</span>"
if(CONSTRUCTION_NOCIRCUIT)
to_chat(user, "<span class='notice'>There are no <i>firelock electronics</i> in the frame. The frame could be <b>cut</b> apart.</span>")
. += "<span class='notice'>There are no <i>firelock electronics</i> in the frame. The frame could be <b>cut</b> apart.</span>"
/obj/structure/firelock_frame/update_icon()
..()
+5 -5
View File
@@ -22,8 +22,8 @@ GLOBAL_LIST_EMPTY(doppler_arrays)
return ..()
/obj/machinery/doppler_array/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Its dish is facing to the [dir2text(dir)].</span>")
. = ..()
. += "<span class='notice'>Its dish is facing to the [dir2text(dir)].</span>"
/obj/machinery/doppler_array/process()
return PROCESS_KILL
@@ -114,13 +114,13 @@ GLOBAL_LIST_EMPTY(doppler_arrays)
return
var/point_gain = 0
/*****The Point Calculator*****/
if(orig_light < 10)
say("Explosion not large enough for research calculations.")
return
else if(orig_light < 4500)
else if(orig_light < 4500)
point_gain = (83300 * orig_light) / (orig_light + 3000)
else
point_gain = TECHWEB_BOMB_POINTCAP
+2 -2
View File
@@ -129,9 +129,9 @@
break_message = "slowly falls dark, lights stuttering."
/obj/machinery/droneDispenser/examine(mob/user)
..()
. = ..()
if((mode == DRONE_RECHARGING) && !stat && recharging_text)
to_chat(user, "<span class='warning'>[recharging_text]</span>")
. += "<span class='warning'>[recharging_text]</span>"
/obj/machinery/droneDispenser/power_change()
..()
+2 -2
View File
@@ -196,8 +196,8 @@
var/id = null
/obj/item/wallframe/flasher/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Its channel ID is '[id]'.</span>")
. = ..()
. += "<span class='notice'>Its channel ID is '[id]'.</span>"
/obj/item/wallframe/flasher/after_attach(var/obj/O)
..()
+3 -3
View File
@@ -183,10 +183,10 @@
container_resist(user)
/obj/machinery/harvester/examine(mob/user)
..()
. = ..()
if(stat & BROKEN)
return
if(state_open)
to_chat(user, "<span class='notice'>[src] must be closed before harvesting.</span>")
. += "<span class='notice'>[src] must be closed before harvesting.</span>"
else if(!harvesting)
to_chat(user, "<span class='notice'>Alt-click [src] to start harvesting.</span>")
. += "<span class='notice'>Alt-click [src] to start harvesting.</span>"
-1
View File
@@ -221,7 +221,6 @@
. += "\t<span class='notice'>No chemicals are attached.</span>\n"
. += "\t<span class='notice'>[attached ? attached : "No one"] is attached.</span>"
to_chat(user,.)
#undef IV_TAKING
#undef IV_INJECTING
+2 -2
View File
@@ -33,8 +33,8 @@
icon_state = "light0"
/obj/machinery/light_switch/examine(mob/user)
..()
to_chat(user, "It is [on? "on" : "off"].")
. = ..()
. += "It is [on? "on" : "off"]."
/obj/machinery/light_switch/interact(mob/user)
. = ..()
@@ -838,10 +838,10 @@
T.cp = src
/obj/machinery/turretid/examine(mob/user)
..()
. = ..()
if(issilicon(user) && (!stat & BROKEN))
to_chat(user, "<span class='notice'>Ctrl-click [src] to [ enabled ? "disable" : "enable"] turrets.</span>")
to_chat(user, "<span class='notice'>Alt-click [src] to set turrets to [ lethal ? "stun" : "kill"].</span>")
. += "<span class='notice'>Ctrl-click [src] to [ enabled ? "disable" : "enable"] turrets.</span>"
. += "<span class='notice'>Alt-click [src] to set turrets to [ lethal ? "stun" : "kill"].</span>"
/obj/machinery/turretid/attackby(obj/item/I, mob/user, params)
if(stat & BROKEN)
+4 -4
View File
@@ -30,12 +30,12 @@
return ..()
/obj/machinery/quantumpad/examine(mob/user)
..()
to_chat(user, "<span class='notice'>It is [ linked_pad ? "currently" : "not"] linked to another pad.</span>")
. = ..()
. += "<span class='notice'>It is [ linked_pad ? "currently" : "not"] linked to another pad.</span>"
if(!panel_open)
to_chat(user, "<span class='notice'>The panel is <i>screwed</i> in, obstructing the linking device.</span>")
. += "<span class='notice'>The panel is <i>screwed</i> in, obstructing the linking device.</span>"
else
to_chat(user, "<span class='notice'>The <i>linking</i> device is now able to be <i>scanned<i> with a multitool.</span>")
. += "<span class='notice'>The <i>linking</i> device is now able to be <i>scanned<i> with a multitool.</span>"
/obj/machinery/quantumpad/RefreshParts()
var/E = 0
+4 -4
View File
@@ -40,10 +40,10 @@
butchering.bonus_modifier = amount_produced/5
/obj/machinery/recycler/examine(mob/user)
..()
to_chat(user, "The power light is [(stat & NOPOWER) ? "off" : "on"].")
to_chat(user, "The safety-mode light is [safety_mode ? "on" : "off"].")
to_chat(user, "The safety-sensors status light is [obj_flags & EMAGGED ? "off" : "on"].")
. = ..()
. += "The power light is [(stat & NOPOWER) ? "off" : "on"]."
. += "The safety-mode light is [safety_mode ? "on" : "off"]."
. += "The safety-sensors status light is [obj_flags & EMAGGED ? "off" : "on"]."
/obj/machinery/recycler/power_change()
..()
+4 -4
View File
@@ -46,12 +46,12 @@
return ..()
/obj/machinery/space_heater/examine(mob/user)
..()
to_chat(user, "\The [src] is [on ? "on" : "off"], and the hatch is [panel_open ? "open" : "closed"].")
. = ..()
. += "\The [src] is [on ? "on" : "off"], and the hatch is [panel_open ? "open" : "closed"]."
if(cell)
to_chat(user, "The charge meter reads [cell ? round(cell.percent(), 1) : 0]%.")
. += "The charge meter reads [cell ? round(cell.percent(), 1) : 0]%."
else
to_chat(user, "There is no power cell installed.")
. += "There is no power cell installed."
/obj/machinery/space_heater/update_icon()
if(on)
+11 -12
View File
@@ -114,12 +114,11 @@
/obj/machinery/status_display/examine(mob/user)
. = ..()
if (message1 || message2)
var/list/msg = list("The display says:")
. += "The display says:"
if (message1)
msg += "<br>\t<tt>[html_encode(message1)]</tt>"
. += "\t<tt>[html_encode(message1)]</tt>"
if (message2)
msg += "<br>\t<tt>[html_encode(message2)]</tt>"
to_chat(user, msg.Join())
. += "\t<tt>[html_encode(message2)]</tt>"
// Helper procs for child display types.
/obj/machinery/status_display/proc/display_shuttle_status(obj/docking_port/mobile/shuttle)
@@ -146,9 +145,9 @@
modestr = "<br>\t<tt>[modestr]: [shuttle.getTimerStr()]</tt>"
else
modestr = "<br>\t<tt>[modestr]</tt>"
to_chat(user, "The display says:<br>\t<tt>[shuttle.name]</tt>[modestr]")
return "The display says:<br>\t<tt>[shuttle.name]</tt>[modestr]"
else
to_chat(user, "The display says:<br>\t<tt>Shuttle missing!</tt>")
return "The display says:<br>\t<tt>Shuttle missing!</tt>"
/// Evac display which shows shuttle timer or message set by Command.
@@ -195,9 +194,9 @@
/obj/machinery/status_display/evac/examine(mob/user)
. = ..()
if(mode == SD_EMERGENCY)
examine_shuttle(user, SSshuttle.emergency)
. += examine_shuttle(user, SSshuttle.emergency)
else if(!message1 && !message2)
to_chat(user, "The display is blank.")
. += "The display is blank."
/obj/machinery/status_display/evac/receive_signal(datum/signal/signal)
switch(signal.data["command"])
@@ -257,9 +256,9 @@
else
shuttleMsg = "[shuttle.getModeStr()]: [shuttle.getTimerStr()]"
if (shuttleMsg)
to_chat(user, "The display says:<br>\t<tt>[shuttleMsg]</tt>")
. += "The display says:<br>\t<tt>[shuttleMsg]</tt>"
else
to_chat(user, "The display is blank.")
. += "The display is blank."
/// General-purpose shuttle status display.
@@ -278,9 +277,9 @@
/obj/machinery/status_display/shuttle/examine(mob/user)
. = ..()
if(shuttle_id)
examine_shuttle(user, SSshuttle.getShuttle(shuttle_id))
. += examine_shuttle(user, SSshuttle.getShuttle(shuttle_id))
else
to_chat(user, "The display is blank.")
. += "The display is blank."
/obj/machinery/status_display/shuttle/vv_edit_var(var_name, var_value)
. = ..()
+2 -2
View File
@@ -99,8 +99,8 @@
return ..()
/obj/machinery/syndicatebomb/examine(mob/user)
..()
to_chat(user, "A digital display on it reads \"[seconds_remaining()]\".")
. = ..()
. += "A digital display on it reads \"[seconds_remaining()]\"."
/obj/machinery/syndicatebomb/update_icon()
icon_state = "[initial(icon_state)][active ? "-active" : "-inactive"][open_panel ? "-wires" : ""]"
+1 -1
View File
@@ -28,7 +28,7 @@
/obj/machinery/transformer/examine(mob/user)
. = ..()
if(cooldown && (issilicon(user) || isobserver(user)))
to_chat(user, "It will be ready in [DisplayTimeText(cooldown_timer - world.time)].")
. += "It will be ready in [DisplayTimeText(cooldown_timer - world.time)]."
/obj/machinery/transformer/Destroy()
QDEL_NULL(countdown)
+2 -2
View File
@@ -12,8 +12,8 @@
var/max_wash_capacity = 5
/obj/machinery/washing_machine/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Alt-click it to start a wash cycle.</span>")
. = ..()
. += "<span class='notice'>Alt-click it to start a wash cycle.</span>"
/obj/machinery/washing_machine/AltClick(mob/user)
if(!user.canUseTopic(src))
+1 -1
View File
@@ -9,7 +9,7 @@
/turf/open/floor/mech_bay_recharge_floor/airless
icon_state = "recharge_floor_asteroid"
initial_gas_mix = "TEMP=2.7"
initial_gas_mix = AIRLESS_ATMOS
/obj/machinery/mech_bay_recharge_port
name = "mech bay power port"
+8 -8
View File
@@ -270,23 +270,23 @@
////////////////////////////////////////////////////////////////////////////////
/obj/mecha/examine(mob/user)
..()
. = ..()
var/integrity = obj_integrity*100/max_integrity
switch(integrity)
if(85 to 100)
to_chat(user, "It's fully intact.")
. += "It's fully intact."
if(65 to 85)
to_chat(user, "It's slightly damaged.")
. += "It's slightly damaged."
if(45 to 65)
to_chat(user, "It's badly damaged.")
. += "It's badly damaged."
if(25 to 45)
to_chat(user, "It's heavily damaged.")
. += "It's heavily damaged."
else
to_chat(user, "It's falling apart.")
. += "It's falling apart."
if(equipment && equipment.len)
to_chat(user, "It's equipped with:")
. += "It's equipped with:"
for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment)
to_chat(user, "[icon2html(ME, user)] \A [ME].")
. += "[icon2html(ME, user)] \A [ME]."
//processing internal damage, temperature, air regulation, alert updates, lights power use.
/obj/mecha/process()
+2 -2
View File
@@ -30,9 +30,9 @@
AI.remote_control = null
/obj/structure/mecha_wreckage/examine(mob/user)
..()
. = ..()
if(AI)
to_chat(user, "<span class='notice'>The AI recovery beacon is active.</span>")
. += "<span class='notice'>The AI recovery beacon is active.</span>"
/obj/structure/mecha_wreckage/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weldingtool))
+10 -3
View File
@@ -17,8 +17,15 @@
hud.add_hud_to(H)
/obj/mecha/medical/odysseus/go_out()
if(ishuman(occupant))
var/mob/living/carbon/human/H = occupant
if(isliving(occupant))
var/mob/living/carbon/human/L = occupant
var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
hud.remove_hud_from(H)
hud.remove_hud_from(L)
..()
/obj/mecha/medical/odysseus/mmi_moved_inside(obj/item/mmi/mmi_as_oc, mob/user)
. = ..()
if(.)
var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
var/mob/living/brain/B = mmi_as_oc.brainmob
hud.add_hud_to(B)
+1 -1
View File
@@ -20,7 +20,7 @@
/obj/effect/countdown/examine(mob/user)
. = ..()
to_chat(user, "This countdown is displaying: [displayed_text].")
. += "This countdown is displaying: [displayed_text]."
/obj/effect/countdown/proc/attach(atom/A)
attached_to = A
@@ -130,12 +130,10 @@
/obj/effect/decal/cleanable/blood/footprints/examine(mob/user)
. = ..()
if(shoe_types.len)
. += "You recognise the footprints as belonging to:\n"
. += "You recognise the footprints as belonging to:"
for(var/shoe in shoe_types)
var/obj/item/clothing/shoes/S = shoe
. += "some <B>[initial(S.name)]</B> [icon2html(initial(S.icon), user)]\n"
to_chat(user, .)
. += "some <B>[initial(S.name)]</B> [icon2html(initial(S.icon), user)]"
/obj/effect/decal/cleanable/blood/footprints/replace_decal(obj/effect/decal/cleanable/C)
if(blood_state != C.blood_state) //We only replace footprints of the same type as us
+1 -1
View File
@@ -36,7 +36,7 @@
/obj/structure/glowshroom/examine(mob/user)
. = ..()
to_chat(user, "This is a [generation]\th generation [name]!")
. += "This is a [generation]\th generation [name]!"
/obj/structure/glowshroom/Destroy()
if(myseed)
@@ -315,6 +315,11 @@
randomdir = 0
duration = 6
/obj/effect/temp_visual/desynchronizer
name = "desynchronizer field"
icon_state = "chronofield"
duration = 3
/obj/effect/temp_visual/impact_effect
icon_state = "impact_bullet"
duration = 5
+18 -8
View File
@@ -183,14 +183,24 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
src.loc = T
/obj/item/examine(mob/user) //This might be spammy. Remove?
..()
var/pronoun
if(src.gender == PLURAL)
pronoun = "They are"
. = ..()
. += "[gender == PLURAL ? "They are" : "It is"] a [weightclass2text(w_class)] item."
if(resistance_flags & INDESTRUCTIBLE)
. += "[src] seems extremely robust! It'll probably withstand anything that could happen to it!"
else
pronoun = "It is"
var/size = weightclass2text(src.w_class)
to_chat(user, "[pronoun] a [size] item." )
if(resistance_flags & LAVA_PROOF)
. += "[src] is made of an extremely heat-resistant material, it'd probably be able to withstand lava!"
if(resistance_flags & (ACID_PROOF | UNACIDABLE))
. += "[src] looks pretty robust! It'd probably be able to withstand acid!"
if(resistance_flags & FREEZE_PROOF)
. += "[src] is made of cold-resistant materials."
if(resistance_flags & FIRE_PROOF)
. += "[src] is made of fire-retardant materials."
if(!user.research_scanner)
return
@@ -227,7 +237,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
else
research_msg += "None"
research_msg += "."
to_chat(user, research_msg.Join())
. += research_msg.Join()
/obj/item/interact(mob/user)
add_fingerprint(user)
+1 -1
View File
@@ -25,7 +25,7 @@ AI MODULES
materials = list(MAT_GOLD=50)
/obj/item/aiModule/examine(var/mob/user as mob)
..()
. = ..()
if(Adjacent(user))
show_laws(user)
+16 -13
View File
@@ -46,8 +46,8 @@ RLD
spark_system.attach(src)
/obj/item/construction/examine(mob/user)
..()
to_chat(user, "\A [src]. It currently holds [matter]/[max_matter] matter-units." )
. = ..()
. += "\A [src]. It currently holds [matter]/[max_matter] matter-units."
/obj/item/construction/Destroy()
QDEL_NULL(spark_system)
@@ -163,8 +163,6 @@ RLD
var/use_one_access = 0 //If the airlock should require ALL or only ONE of the listed accesses.
var/delay_mod = 1
var/canRturf = FALSE //Variable for R walls to deconstruct them
var/adjacency_check = TRUE //Wheter it checks if the tool has to be in our hands or not. Wsed for the aux base construction drone's internal RCD
/obj/item/construction/rcd/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] sets the RCD to 'Wall' and points it down [user.p_their()] throat! It looks like [user.p_theyre()] trying to commit suicide..</span>")
@@ -227,11 +225,10 @@ RLD
t1 += "<p><a href='?src=[REF(src)];close=1'>Close</a></p>\n"
var/datum/browser/popup = new(user, "rcd_access", "Access Control", 900, 500)
var/datum/browser/popup = new(user, "rcd_access", "Access Control", 900, 500, src)
popup.set_content(t1)
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
popup.open()
onclose(user, "rcd_access")
/obj/item/construction/rcd/Topic(href, href_list)
..()
@@ -275,7 +272,7 @@ RLD
/obj/item/construction/rcd/proc/check_menu(mob/living/user)
if(!istype(user))
return FALSE
if(user.incapacitated() || (adjacency_check && !user.Adjacent(src)))
if(user.incapacitated() || !user.Adjacent(src))
return FALSE
return TRUE
@@ -288,7 +285,7 @@ RLD
"SOUTH" = image(icon = 'icons/mob/radial.dmi', icon_state = "csouth"),
"WEST" = image(icon = 'icons/mob/radial.dmi', icon_state = "cwest")
)
var/computerdirs = show_radial_menu(user, src, computer_dirs, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = adjacency_check, tooltips = TRUE)
var/computerdirs = show_radial_menu(user, src, computer_dirs, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
if(!check_menu(user))
return
switch(computerdirs)
@@ -347,13 +344,13 @@ RLD
"External Maintenance" = get_airlock_image(/obj/machinery/door/airlock/maintenance/external/glass)
)
var/airlockcat = show_radial_menu(user, src, solid_or_glass_choices, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = adjacency_check)
var/airlockcat = show_radial_menu(user, src, solid_or_glass_choices, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE)
if(!check_menu(user))
return
switch(airlockcat)
if("Solid")
if(advanced_airlock_setting == 1)
var/airlockpaint = show_radial_menu(user, src, solid_choices, radius = 42, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = adjacency_check)
var/airlockpaint = show_radial_menu(user, src, solid_choices, radius = 42, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE)
if(!check_menu(user))
return
switch(airlockpaint)
@@ -398,7 +395,7 @@ RLD
if("Glass")
if(advanced_airlock_setting == 1)
var/airlockpaint = show_radial_menu(user, src , glass_choices, radius = 42, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = adjacency_check)
var/airlockpaint = show_radial_menu(user, src , glass_choices, radius = 42, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE)
if(!check_menu(user))
return
switch(airlockpaint)
@@ -557,6 +554,7 @@ RLD
desc = "A device used to rapidly build walls and floors."
canRturf = TRUE
upgrade = TRUE
var/energyfactor = 72
/obj/item/construction/rcd/borg/useResource(amount, mob/user)
@@ -567,7 +565,7 @@ RLD
if(user)
to_chat(user, no_ammo_message)
return 0
. = borgy.cell.use(amount * 72) //borgs get 1.3x the use of their RCDs
. = borgy.cell.use(amount * energyfactor) //borgs get 1.3x the use of their RCDs
if(!. && user)
to_chat(user, no_ammo_message)
return .
@@ -580,11 +578,16 @@ RLD
if(user)
to_chat(user, no_ammo_message)
return 0
. = borgy.cell.charge >= (amount * 72)
. = borgy.cell.charge >= (amount * energyfactor)
if(!. && user)
to_chat(user, no_ammo_message)
return .
/obj/item/construction/rcd/borg/syndicate
icon_state = "ircd"
item_state = "ircd"
energyfactor = 66
/obj/item/construction/rcd/loaded
matter = 160
+2 -2
View File
@@ -79,9 +79,9 @@
..()
/obj/item/twohanded/rcl/examine(mob/user)
..()
. = ..()
if(loaded)
to_chat(user, "<span class='info'>It contains [loaded.amount]/[max_amount] cables.</span>")
. += "<span class='info'>It contains [loaded.amount]/[max_amount] cables.</span>"
/obj/item/twohanded/rcl/Destroy()
QDEL_NULL(loaded)
+4 -4
View File
@@ -20,8 +20,8 @@ RSF
w_class = WEIGHT_CLASS_NORMAL
/obj/item/rsf/examine(mob/user)
..()
to_chat(user, "<span class='notice'>It currently holds [matter]/30 fabrication-units.</span>")
. = ..()
. += "<span class='notice'>It currently holds [matter]/30 fabrication-units.</span>"
/obj/item/rsf/cyborg
matter = 30
@@ -127,8 +127,8 @@ RSF
w_class = WEIGHT_CLASS_NORMAL
/obj/item/cookiesynth/examine(mob/user)
..()
to_chat(user, "<span class='notice'>It currently holds [matter]/10 cookie-units.</span>")
. = ..()
. += "<span class='notice'>It currently holds [matter]/10 cookie-units.</span>"
/obj/item/cookiesynth/attackby()
return
+3 -3
View File
@@ -91,9 +91,9 @@
/obj/item/airlock_painter/examine(mob/user)
..()
. = ..()
if(!ink)
to_chat(user, "<span class='notice'>It doesn't have a toner cartridge installed.</span>")
. += "<span class='notice'>It doesn't have a toner cartridge installed.</span>"
return
var/ink_level = "high"
if(ink.charges < 1)
@@ -102,7 +102,7 @@
ink_level = "low"
else if((ink.charges/ink.max_charges) > 1) //Over 100% (admin var edit)
ink_level = "dangerously high"
to_chat(user, "<span class='notice'>Its ink levels look [ink_level].</span>")
. += "<span class='notice'>Its ink levels look [ink_level].</span>"
/obj/item/airlock_painter/attackby(obj/item/W, mob/user, params)
+2 -2
View File
@@ -46,10 +46,10 @@
/obj/item/bodybag/bluespace/examine(mob/user)
..()
. = ..()
if(contents.len)
var/s = contents.len == 1 ? "" : "s"
to_chat(user, "<span class='notice'>You can make out the shape[s] of [contents.len] object[s] through the fabric.</span>")
. += "<span class='notice'>You can make out the shape[s] of [contents.len] object[s] through the fabric.</span>"
/obj/item/bodybag/bluespace/Destroy()
for(var/atom/movable/A in contents)
+19 -3
View File
@@ -9,10 +9,10 @@
// Possible restyles for the cutout;
// add an entry in change_appearance() if you add to here
var/list/possible_appearances = list("Assistant", "Clown", "Mime",
"Traitor", "Nuke Op", "Cultist", "Clockwork Cultist",
"Traitor", "Nuke Op", "Cultist", "Brass Cultist", "Clockwork Cultist",
"Revolutionary", "Wizard", "Shadowling", "Xenomorph", "Xenomorph Maid", "Swarmer",
"Ash Walker", "Deathsquad Officer", "Ian", "Slaughter Demon",
"Laughter Demon", "Private Security Officer")
"Laughter Demon", "Private Security Officer", "Securitron", "Gondola", "Monkey")
var/pushed_over = FALSE //If the cutout is pushed over and has to be righted
var/deceptive = FALSE //If the cutout actually appears as what it portray and not a discolored version
@@ -123,10 +123,14 @@
name = "Unknown"
desc = "A cardboard cutout of a cultist."
icon_state = "cutout_cultist"
if("Brass Cultist")
name = "[pick(GLOB.first_names_male)] [pick(GLOB.last_names)]"
desc = "A cardboard cutout of a \"servant\" of Ratvar."
icon_state = "cutout_servant"
if("Clockwork Cultist")
name = "[pick(GLOB.first_names_male)] [pick(GLOB.last_names)]"
desc = "A cardboard cutout of a servant of Ratvar."
icon_state = "cutout_servant"
icon_state = "cutout_new_servant"
if("Revolutionary")
name = "Unknown"
desc = "A cardboard cutout of a revolutionary."
@@ -179,6 +183,18 @@
name = "Private Security Officer"
desc = "A cardboard cutout of a private security officer."
icon_state = "cutout_ntsec"
if("Securitron")
name = "[pick("Officer", "Oftiser", "Sergeant", "General")][pick(" Genesky", " Pingsky", " Beepsky", " Pipsqueak", "-at-Armsky")]"
desc = "A cardboard cutout of a securitron."
icon_state = "cutout_law"
if("Gondola")
name = "gondola"
desc = "A cardboard cutout of a gondola."
icon_state = "cutout_gondola"
if("Monkey")
name = "monkey ([rand(1, 999)])"
desc = "A cardboard cutout of a monkey."
icon_state = "cutout_monky"
return 1
/obj/item/cardboard_cutout/setDir(newdir)
+11 -11
View File
@@ -113,7 +113,7 @@
/obj/item/card/emag/examine(mob/user)
. = ..()
to_chat(user, "<span class='notice'>It has <b>[uses ? uses : "no"]</b> charges left.</span>")
. += "<span class='notice'>It has <b>[uses ? uses : "no"]</b> charges left.</span>"
/obj/item/card/emag/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/emagrecharge))
@@ -139,9 +139,9 @@
/obj/item/emagrecharge/examine(mob/user)
. = ..()
if(uses)
to_chat(user, "<span class='notice'>It can add up to [uses] charges to compatible devices</span>")
. += "<span class='notice'>It can add up to [uses] charges to compatible devices</span>"
else
to_chat(user, "<span class='warning'>It has a small, red, blinking light coming from inside of it. It's spent.</span>")
. += "<span class='warning'>It has a small, red, blinking light coming from inside of it. It's spent.</span>"
/obj/item/card/emagfake
desc = "It's a card with a magnetic strip attached to some circuitry. Closer inspection shows that this card is a poorly made replica, with a \"DonkCo\" logo stamped on the back."
@@ -193,9 +193,9 @@
return
/obj/item/card/id/examine(mob/user)
..()
. = ..()
if(mining_points)
to_chat(user, "There's [mining_points] mining equipment redemption point\s loaded onto this card.")
. += "There's [mining_points] mining equipment redemption point\s loaded onto this card."
/obj/item/card/id/GetAccess()
return access
@@ -405,13 +405,13 @@ update_label("John Doe", "Clowny")
/obj/item/card/id/prisoner/examine(mob/user)
. = ..()
if(sentence && world.time < sentence)
to_chat(user, "<span class='notice'>You're currently serving a sentence for [crime]. <b>[DisplayTimeText(sentence - world.time)]</b> left.</span>")
. += "<span class='notice'>You're currently serving a sentence for [crime]. <b>[DisplayTimeText(sentence - world.time)]</b> left.</span>"
else if(goal)
to_chat(user, "<span class='notice'>You have accumulated [points] out of the [goal] points you need for freedom.</span>")
. += "<span class='notice'>You have accumulated [points] out of the [goal] points you need for freedom.</span>"
else if(!sentence)
to_chat(user, "<span class='warning'>You are currently serving a permanent sentence for [crime].</span>")
. += "<span class='warning'>You are currently serving a permanent sentence for [crime].</span>"
else
to_chat(user, "<span class='notice'>Your sentence is up! You're free!</span>")
. += "<span class='notice'>Your sentence is up! You're free!</span>"
/obj/item/card/id/prisoner/one
name = "Prisoner #13-001"
@@ -533,8 +533,8 @@ update_label("John Doe", "Clowny")
update_icon()
/obj/item/card/id/knight/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
. = ..()
. += "<span class='notice'>Alt-click to recolor it.</span>"
/obj/item/card/id/knight/blue
id_color = "#0000FF"
@@ -56,7 +56,7 @@ micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells.
M.RefreshParts()
/obj/item/circuitboard/machine/examine(mob/user)
..()
. = ..()
if(LAZYLEN(req_components))
var/list/nice_list = list()
for(var/B in req_components)
@@ -64,4 +64,4 @@ micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells.
if(!ispath(A))
continue
nice_list += list("[req_components[A]] [initial(A.name)]")
to_chat(user,"<span class='notice'>Required components: [english_list(nice_list)].</span>")
. += "<span class='notice'>Required components: [english_list(nice_list)].</span>"
@@ -69,8 +69,8 @@
return ..()
/obj/item/circuitboard/computer/card/minor/examine(user)
..()
to_chat(user, "Currently set to \"[dept_list[target_dept]]\".")
. = ..()
. += "Currently set to \"[dept_list[target_dept]]\"."
//obj/item/circuitboard/computer/shield
// name = "Shield Control (Computer Board)"
@@ -429,8 +429,8 @@
return ..()
/obj/item/circuitboard/machine/smartfridge/examine(mob/user)
..()
to_chat(user, "<span class='info'>[src] is set to [fridges_name_paths[build_path]]. You can use a screwdriver to reconfigure it.</span>")
. = ..()
. += "<span class='info'>[src] is set to [fridges_name_paths[build_path]]. You can use a screwdriver to reconfigure it.</span>"
/obj/item/circuitboard/machine/biogenerator
name = "Biogenerator (Machine Board)"
@@ -782,7 +782,7 @@
/obj/item/circuitboard/machine/public_nanite_chamber/examine(mob/user)
. = ..()
to_chat(user, "Cloud ID is currently set to [cloud_id].")
. += "Cloud ID is currently set to [cloud_id]."
/obj/item/circuitboard/machine/nanite_program_hub
name = "Nanite Program Hub (Machine Board)"
@@ -943,9 +943,9 @@
needs_anchored = FALSE
/obj/item/circuitboard/machine/dish_drive/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Its suction function is [suction ? "enabled" : "disabled"]. Use it in-hand to switch.</span>")
to_chat(user, "<span class='notice'>Its disposal auto-transmit function is [transmit ? "enabled" : "disabled"]. Alt-click it to switch.</span>")
. = ..()
. += "<span class='notice'>Its suction function is [suction ? "enabled" : "disabled"]. Use it in-hand to switch.</span>"
. += "<span class='notice'>Its disposal auto-transmit function is [transmit ? "enabled" : "disabled"]. Alt-click it to switch.</span>"
/obj/item/circuitboard/machine/dish_drive/attack_self(mob/living/user)
suction = !suction
+5 -5
View File
@@ -112,11 +112,11 @@
throw_range = 7
attack_verb = list("HONKED")
var/moodlet = "honk" //used to define which kind of moodlet is added to the honked target
var/honksound = 'sound/items/bikehorn.ogg'
var/list/honksounds = list('sound/items/bikehorn.ogg' = 1)
/obj/item/bikehorn/Initialize()
/obj/item/bikehorn/ComponentInitialize()
. = ..()
AddComponent(/datum/component/squeak, list(honksound=1), 50)
AddComponent(/datum/component/squeak, honksounds, 50)
/obj/item/bikehorn/attack(mob/living/carbon/M, mob/living/carbon/user)
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, moodlet, /datum/mood_event/honk)
@@ -124,7 +124,7 @@
/obj/item/bikehorn/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] solemnly points the horn at [user.p_their()] temple! It looks like [user.p_theyre()] trying to commit suicide!</span>")
playsound(src, 'sound/items/bikehorn.ogg', 50, 1)
playsound(src, pickweight(honksounds), 50, 1)
return (BRUTELOSS)
//air horn
@@ -132,7 +132,7 @@
name = "air horn"
desc = "Damn son, where'd you find this?"
icon_state = "air_horn"
honksound = 'sound/items/airhorn2.ogg'
honksounds = list('sound/items/airhorn2.ogg' = 1)
//golden bikehorn
/obj/item/bikehorn/golden
+4 -4
View File
@@ -665,10 +665,10 @@
/obj/item/toy/crayon/spraycan/examine(mob/user)
. = ..()
if(charges_left)
to_chat(user, "It has [charges_left] use\s left.")
. += "It has [charges_left] use\s left."
else
to_chat(user, "It is empty.")
to_chat(user, "<span class='notice'>Alt-click [src] to [ is_capped ? "take the cap off" : "put the cap on"].</span>")
. += "It is empty."
. += "<span class='notice'>Alt-click [src] to [ is_capped ? "take the cap off" : "put the cap on"].</span>"
/obj/item/toy/crayon/spraycan/afterattack(atom/target, mob/user, proximity, params)
if(!proximity)
@@ -829,7 +829,7 @@
/obj/item/toy/crayon/spraycan/gang/examine(mob/user)
. = ..()
if(user.mind && user.mind.has_antag_datum(/datum/antagonist/gang) || isobserver(user))
to_chat(user, "This spraycan has been specially modified with a stage 2 nozzle kit, making it faster.")
. += "This spraycan has been specially modified with a stage 2 nozzle kit, making it faster."
/obj/item/toy/crayon/spraycan/infinite
name = "infinite spraycan"
+29 -28
View File
@@ -103,12 +103,11 @@ GLOBAL_LIST_EMPTY(PDAs)
/obj/item/pda/examine(mob/user)
. = ..()
var/dat = id ? "<span class='notice'>Alt-click to remove the id.</span>" : ""
. += id ? "<span class='notice'>Alt-click to remove the id.</span>" : ""
if(inserted_item && (!isturf(loc)))
dat += "\n<span class='notice'>Ctrl-click to remove [inserted_item].</span>"
. += "<span class='notice'>Ctrl-click to remove [inserted_item].</span>"
if(LAZYLEN(GLOB.pda_reskins))
dat += "\n<span class='notice'>Ctrl-shift-click it to reskin it.</span>"
to_chat(user, dat)
. += "<span class='notice'>Ctrl-shift-click it to reskin it.</span>"
/obj/item/pda/Initialize()
. = ..()
@@ -162,31 +161,33 @@ GLOBAL_LIST_EMPTY(PDAs)
/obj/item/pda/equipped(mob/user, slot)
. = ..()
if(equipped)
if(equipped || !user.client)
return
if(user.client)
background_color = user.client.prefs.pda_color
switch(user.client.prefs.pda_style)
if(MONO)
font_index = MODE_MONO
font_mode = FONT_MONO
if(SHARE)
font_index = MODE_SHARE
font_mode = FONT_SHARE
if(ORBITRON)
font_index = MODE_ORBITRON
font_mode = FONT_ORBITRON
if(VT)
font_index = MODE_VT
font_mode = FONT_VT
else
font_index = MODE_MONO
font_mode = FONT_MONO
var/pref_skin = GLOB.pda_reskins[user.client.prefs.pda_skin]
if(icon != pref_skin)
icon = pref_skin
update_icon(FALSE, TRUE)
equipped = TRUE
update_style(user.client)
/obj/item/pda/proc/update_style(client/C)
background_color = C.prefs.pda_color
switch(C.prefs.pda_style)
if(MONO)
font_index = MODE_MONO
font_mode = FONT_MONO
if(SHARE)
font_index = MODE_SHARE
font_mode = FONT_SHARE
if(ORBITRON)
font_index = MODE_ORBITRON
font_mode = FONT_ORBITRON
if(VT)
font_index = MODE_VT
font_mode = FONT_VT
else
font_index = MODE_MONO
font_mode = FONT_MONO
var/pref_skin = GLOB.pda_reskins[C.prefs.pda_skin]
if(icon != pref_skin)
icon = pref_skin
update_icon(FALSE, TRUE)
equipped = TRUE
/obj/item/pda/proc/update_label()
name = "PDA-[owner] ([ownjob])" //Name generalisation
@@ -12,9 +12,9 @@
var/mode = 0
/obj/item/compressionkit/examine(mob/user)
..()
to_chat(user, "<span class='notice'>It has [charges] charges left. Recharge with bluespace crystals.</span>")
to_chat(user, "<span class='notice'>Use in-hand to swap toggle compress/expand mode (expand mode not yet implemented).</span>")
. = ..()
. += "<span class='notice'>It has [charges] charges left. Recharge with bluespace crystals.</span>"
. += "<span class='notice'>Use in-hand to swap toggle compress/expand mode (expand mode not yet implemented).</span>"
/obj/item/compressionkit/attack_self(mob/user)
if(mode == 0)
@@ -0,0 +1,87 @@
/obj/item/desynchronizer
name = "desynchronizer"
desc = "An experimental device that can temporarily desynchronize the user from spacetime, effectively making them disappear while it's active."
icon = 'icons/obj/device.dmi'
icon_state = "desynchronizer"
item_state = "electronic"
w_class = WEIGHT_CLASS_SMALL
item_flags = NOBLUDGEON
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
materials = list(MAT_METAL = 250, MAT_GLASS = 500)
var/max_duration = 3000
var/duration = 300
var/last_use = 0
var/next_use = 0
var/obj/effect/abstract/sync_holder/sync_holder
/obj/item/desynchronizer/attack_self(mob/living/user)
if(world.time < next_use)
to_chat(user, "<span class='warning'>[src] is still recharging.</span>")
return
if(!sync_holder)
desync(user)
else
resync()
/obj/item/desynchronizer/examine(mob/user)
. = ..()
if(world.time < next_use)
. += "<span class='warning'>Time left to recharge: [DisplayTimeText(next_use - world.time)]</span>"
. += "<span class='notice'>Alt-click to customize the duration. Current duration: [DisplayTimeText(duration)].</span>"
. += "<span class='notice'>Can be used again to interrupt the effect early. The recharge time is the same as the time spent in desync.</span>"
/obj/item/desynchronizer/AltClick(mob/living/user)
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
return
var/new_duration = input(user, "Set the duration (5-300):", "Desynchronizer", duration / 10) as null|num
if(new_duration)
new_duration = new_duration SECONDS
new_duration = CLAMP(new_duration, 50, max_duration)
duration = new_duration
to_chat(user, "<span class='notice'>You set the duration to [DisplayTimeText(duration)].</span>")
/obj/item/desynchronizer/proc/desync(mob/living/user)
if(sync_holder)
return
sync_holder = new(drop_location())
new /obj/effect/temp_visual/desynchronizer(drop_location())
to_chat(user, "<span class='notice'>You activate [src], desynchronizing yourself from the present. You can still see your surroundings, but you feel eerily dissociated from reality.</span>")
user.forceMove(sync_holder)
SEND_SIGNAL(user, COMSIG_MOVABLE_SECLUDED_LOCATION)
for(var/thing in user)
var/atom/movable/AM = thing
SEND_SIGNAL(AM, COMSIG_MOVABLE_SECLUDED_LOCATION)
last_use = world.time
icon_state = "desynchronizer-on"
addtimer(CALLBACK(src, .proc/resync), duration)
/obj/item/desynchronizer/proc/resync()
new /obj/effect/temp_visual/desynchronizer(sync_holder.drop_location())
QDEL_NULL(sync_holder)
icon_state = initial(icon_state)
next_use = world.time + (world.time - last_use) // Could be 2*world.time-last_use but that would just be confusing
/obj/item/desynchronizer/Destroy()
resync()
return ..()
/obj/effect/abstract/sync_holder
name = "desyncronized pocket"
desc = "A pocket in spacetime, keeping the user a fraction of a second in the future."
icon = null
icon_state = null
alpha = 0
invisibility = INVISIBILITY_ABSTRACT
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
anchored = TRUE
resistance_flags = INDESTRUCTIBLE
/obj/effect/abstract/sync_holder/Destroy()
for(var/I in contents)
var/atom/movable/AM = I
AM.forceMove(drop_location())
return ..()
/obj/effect/abstract/sync_holder/AllowDrop()
return TRUE //no dropping spaghetti out of your spacetime pocket
@@ -134,7 +134,6 @@
var/voracious = hound ? TRUE : FALSE
var/list/targets = target && hound ? list(target) : contents
if(hound)
hound.setClickCooldown(50)
if(!hound.client || !(hound.client.prefs.cit_toggles & MEDIHOUND_SLEEPER))
voracious = FALSE
else
@@ -447,7 +446,7 @@
if (!target.devourable)
to_chat(user, "The target registers an error code. Unable to insert into [src].")
return
if(target)
if(patient)
to_chat(user,"<span class='warning'>Your [src] is already occupied.</span>")
return
if(target.buckled)
@@ -524,3 +523,7 @@
update_gut()
user.visible_message("<span class='warning'>[hound.name]'s garbage processor groans lightly as [trashman] slips inside.</span>", "<span class='notice'>Your garbage compactor groans lightly as [trashman] slips inside.</span>")
playsound(hound, 'sound/effects/bin_close.ogg', 80, 1)
/obj/item/dogborg/sleeper/K9/flavour
name = "Mobile Sleeper"
desc = "A mounted, underslung sleeper, intended for holding willing occupants for leisurely purposes."
@@ -35,8 +35,8 @@
return ..()
/obj/item/doorCharge/examine(mob/user)
..()
. = ..()
if(user.mind && user.mind.has_antag_datum(/datum/antagonist/traitor)) //No nuke ops because the device is excluded from nuclear
to_chat(user, "A small explosive device that can be used to sabotage airlocks to cause an explosion upon opening. To apply, remove the airlock's maintenance panel and place it within.")
. += "A small explosive device that can be used to sabotage airlocks to cause an explosion upon opening. To apply, remove the airlock's maintenance panel and place it within."
else
to_chat(user, "A small, suspicious object that feels lukewarm when held.")
. += "A small, suspicious object that feels lukewarm when held."
@@ -16,11 +16,11 @@
maptext = "[circuits]"
/obj/item/electroadaptive_pseudocircuit/examine(mob/user)
..()
. = ..()
if(iscyborg(user))
to_chat(user, "<span class='notice'>It has material for <b>[circuits]</b> circuit[circuits == 1 ? "" : "s"]. Use the pseudocircuit on existing circuits to gain material.</span>")
to_chat(user, "<span class='notice'>Serves as a substitute for <b>fire/air alarm</b>, <b>firelock</b>, and <b>APC</b> electronics.</span>")
to_chat(user, "<span class='notice'>It can also be used on an APC with no power cell to <b>fabricate a low-capacity cell</b> at a high power cost.</span>")
. += "<span class='notice'>It has material for <b>[circuits]</b> circuit[circuits == 1 ? "" : "s"]. Use the pseudocircuit on existing circuits to gain material.</span>"
. += "<span class='notice'>Serves as a substitute for <b>fire/air alarm</b>, <b>firelock</b>, and <b>APC</b> electronics.</span>"
. += "<span class='notice'>It can also be used on an APC with no power cell to <b>fabricate a low-capacity cell</b> at a high power cost.</span>"
/obj/item/electroadaptive_pseudocircuit/proc/adapt_circuit(mob/living/silicon/robot/R, circuit_cost = 0)
if(QDELETED(R) || !istype(R))
@@ -52,9 +52,9 @@
qdel(F)
/obj/item/forcefield_projector/examine(mob/user)
..()
. = ..()
var/percent_charge = round((shield_integrity/max_shield_integrity)*100)
to_chat(user, "<span class='notice'>It is currently sustaining [LAZYLEN(current_fields)]/[max_fields] fields, and it's [percent_charge]% charged.</span>")
. += "<span class='notice'>It is currently sustaining [LAZYLEN(current_fields)]/[max_fields] fields, and it's [percent_charge]% charged.</span>"
/obj/item/forcefield_projector/Initialize(mapload)
. = ..()
@@ -63,28 +63,28 @@
current_tick_amount = 0
/obj/item/geiger_counter/examine(mob/user)
..()
. = ..()
if(!scanning)
return 1
to_chat(user, "<span class='info'>Alt-click it to clear stored radiation levels.</span>")
return
. += "<span class='info'>Alt-click it to clear stored radiation levels.</span>"
if(obj_flags & EMAGGED)
to_chat(user, "<span class='warning'>The display seems to be incomprehensible.</span>")
return 1
. += "<span class='warning'>The display seems to be incomprehensible.</span>"
return
switch(radiation_count)
if(-INFINITY to RAD_LEVEL_NORMAL)
to_chat(user, "<span class='notice'>Ambient radiation level count reports that all is well.</span>")
. += "<span class='notice'>Ambient radiation level count reports that all is well.</span>"
if(RAD_LEVEL_NORMAL + 1 to RAD_LEVEL_MODERATE)
to_chat(user, "<span class='disarm'>Ambient radiation levels slightly above average.</span>")
. += "<span class='disarm'>Ambient radiation levels slightly above average.</span>"
if(RAD_LEVEL_MODERATE + 1 to RAD_LEVEL_HIGH)
to_chat(user, "<span class='warning'>Ambient radiation levels above average.</span>")
. += "<span class='warning'>Ambient radiation levels above average.</span>"
if(RAD_LEVEL_HIGH + 1 to RAD_LEVEL_VERY_HIGH)
to_chat(user, "<span class='danger'>Ambient radiation levels highly above average.</span>")
. += "<span class='danger'>Ambient radiation levels highly above average.</span>"
if(RAD_LEVEL_VERY_HIGH + 1 to RAD_LEVEL_CRITICAL)
to_chat(user, "<span class='suicide'>Ambient radiation levels nearing critical level.</span>")
. += "<span class='suicide'>Ambient radiation levels nearing critical level.</span>"
if(RAD_LEVEL_CRITICAL + 1 to INFINITY)
to_chat(user, "<span class='boldannounce'>Ambient radiation levels above critical level!</span>")
. += "<span class='boldannounce'>Ambient radiation levels above critical level!</span>"
to_chat(user, "<span class='notice'>The last radiation amount detected was [last_tick_amount]</span>")
. += "<span class='notice'>The last radiation amount detected was [last_tick_amount]</span>"
/obj/item/geiger_counter/update_icon()
if(!scanning)
+3 -3
View File
@@ -14,10 +14,10 @@ GLOBAL_LIST_EMPTY(GPS_list)
var/global_mode = TRUE //If disabled, only GPS signals of the same Z level are shown
/obj/item/gps/examine(mob/user)
..()
. = ..()
var/turf/curr = get_turf(src)
to_chat(user, "The screen says: [get_area_name(curr, TRUE)] ([curr.x], [curr.y], [curr.z])")
to_chat(user, "<span class='notice'>Alt-click to switch it [tracking ? "off":"on"].</span>")
. += "The screen says: [get_area_name(curr, TRUE)] ([curr.x], [curr.y], [curr.z])"
. += "<span class='notice'>Alt-click to switch it [tracking ? "off":"on"].</span>"
/obj/item/gps/Initialize()
. = ..()
@@ -73,8 +73,8 @@
..()
/obj/item/lightreplacer/examine(mob/user)
..()
to_chat(user, status_string())
. = ..()
. += status_string()
/obj/item/lightreplacer/attackby(obj/item/W, mob/user, params)
+5 -3
View File
@@ -51,11 +51,11 @@
AddComponent(/datum/component/anti_magic, TRUE, TRUE, FALSE, null, null, FALSE)
/obj/item/multitool/examine(mob/user)
..()
. = ..()
if(selected_io)
to_chat(user, "<span class='notice'>Activate [src] to detach the data wire.</span>")
. += "<span class='notice'>Activate [src] to detach the data wire.</span>"
if(buffer)
to_chat(user, "<span class='notice'>Its buffer contains [buffer].</span>")
. += "<span class='notice'>Its buffer contains [buffer].</span>"
/obj/item/multitool/suicide_act(mob/living/carbon/user)
user.visible_message("<span class='suicide'>[user] puts the [src] to [user.p_their()] chest. It looks like [user.p_theyre()] trying to pulse [user.p_their()] heart off!</span>")
@@ -247,6 +247,8 @@
/obj/item/multitool/cyborg
name = "multitool"
desc = "Optimised and stripped-down version of a regular multitool."
icon = 'icons/obj/items_cyborg.dmi'
icon_state = "multitool_cyborg"
toolspeed = 0.5
/obj/item/multitool/abductor
@@ -26,5 +26,5 @@
paint_color = input("Which colour do you want to use?","Pipe painter") in GLOB.pipe_paint_colors
/obj/item/pipe_painter/examine(mob/user)
..()
to_chat(user, "<span class='notice'>It is set to [paint_color].</span>")
. = ..()
. += "<span class='notice'>It is set to [paint_color].</span>"
@@ -10,12 +10,12 @@
var/obj/machinery/quantumpad/qpad
/obj/item/quantum_keycard/examine(mob/user)
..()
. = ..()
if(qpad)
to_chat(user, "It's currently linked to a quantum pad.")
to_chat(user, "<span class='notice'>Alt-click to unlink the keycard.</span>")
. += "It's currently linked to a quantum pad."
. += "<span class='notice'>Alt-click to unlink the keycard.</span>"
else
to_chat(user, "<span class='notice'>Insert [src] into an active quantum pad to link it.</span>")
. += "<span class='notice'>Insert [src] into an active quantum pad to link it.</span>"
/obj/item/quantum_keycard/AltClick(mob/living/user)
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
@@ -21,7 +21,7 @@
for(var/i in channels)
examine_text_list += "[GLOB.channel_tokens[i]] - [lowertext(i)]"
to_chat(user, "<span class='notice'>It can access the following channels; [jointext(examine_text_list, ", ")].</span>")
. += "<span class='notice'>It can access the following channels; [jointext(examine_text_list, ", ")].</span>"
/obj/item/encryptionkey/syndicate
name = "syndicate encryption key"
@@ -32,7 +32,7 @@ GLOBAL_LIST_INIT(channel_tokens, list(
return TOXLOSS
/obj/item/radio/headset/examine(mob/user)
..()
. = ..()
if(item_flags & IN_INVENTORY && loc == user)
// construction of frequency description
@@ -45,12 +45,12 @@ GLOBAL_LIST_INIT(channel_tokens, list(
avail_chans += "use [MODE_TOKEN_DEPARTMENT] or [GLOB.channel_tokens[channels[i]]] for [lowertext(channels[i])]"
else
avail_chans += "use [GLOB.channel_tokens[channels[i]]] for [lowertext(channels[i])]"
to_chat(user, "<span class='notice'>A small screen on the headset displays the following available frequencies:\n[english_list(avail_chans)].")
. += "<span class='notice'>A small screen on the headset displays the following available frequencies:\n[english_list(avail_chans)]."
if(command)
to_chat(user, "<span class='info'>Alt-click to toggle the high-volume mode.</span>")
. += "<span class='info'>Alt-click to toggle the high-volume mode.</span>"
else
to_chat(user, "<span class='notice'>A small screen on the headset flashes, it's too small to read without holding or wearing the headset.</span>")
. += "<span class='notice'>A small screen on the headset flashes, it's too small to read without holding or wearing the headset.</span>"
/obj/item/radio/headset/Initialize()
. = ..()
@@ -49,11 +49,11 @@
return ..()
/obj/item/radio/intercom/examine(mob/user)
..()
. = ..()
if(!unfastened)
to_chat(user, "<span class='notice'>It's <b>screwed</b> and secured to the wall.</span>")
. += "<span class='notice'>It's <b>screwed</b> and secured to the wall.</span>"
else
to_chat(user, "<span class='notice'>It's <i>unscrewed</i> from the wall, and can be <b>detached</b>.</span>")
. += "<span class='notice'>It's <i>unscrewed</i> from the wall, and can be <b>detached</b>.</span>"
/obj/item/radio/intercom/attackby(obj/item/I, mob/living/user, params)
if(istype(I, /obj/item/screwdriver))
@@ -319,11 +319,11 @@
/obj/item/radio/examine(mob/user)
..()
. = ..()
if (unscrewed)
to_chat(user, "<span class='notice'>It can be attached and modified.</span>")
. += "<span class='notice'>It can be attached and modified.</span>"
else
to_chat(user, "<span class='notice'>It cannot be modified or attached.</span>")
. += "<span class='notice'>It cannot be modified or attached.</span>"
/obj/item/radio/attackby(obj/item/W, mob/user, params)
add_fingerprint(user)
+2 -2
View File
@@ -382,7 +382,7 @@ SLIME SCANNER
else if (S.mutantstomach != initial(S.mutantstomach))
mutant = TRUE
msg += "\t<span class='info'>Reported Species: [H.dna.custom_species ? H.dna.custom_species : S.name]</span>\n"
msg += "\t<span class='info'>Reported Species: [H.dna.custom_species ? H.dna.custom_species : S.name]</span>\n"
msg += "\t<span class='info'>Base Species: [S.name]</span>\n"
if(mutant)
msg += "\t<span class='info'>Subject has mutations present.</span>\n"
@@ -523,7 +523,7 @@ SLIME SCANNER
/obj/item/analyzer/examine(mob/user)
. = ..()
to_chat(user, "<span class='notice'>Alt-click [src] to activate the barometer function.</span>")
. += "<span class='notice'>Alt-click [src] to activate the barometer function.</span>"
/obj/item/analyzer/suicide_act(mob/living/carbon/user)
user.visible_message("<span class='suicide'>[user] begins to analyze [user.p_them()]self with [src]! The display shows that [user.p_theyre()] dead!</span>")
@@ -29,8 +29,8 @@
/obj/item/taperecorder/examine(mob/user)
..()
to_chat(user, "The wire panel is [open_panel ? "opened" : "closed"].")
. = ..()
. += "The wire panel is [open_panel ? "opened" : "closed"]."
/obj/item/taperecorder/attackby(obj/item/I, mob/user, params)
+3 -3
View File
@@ -106,11 +106,11 @@
return ..()
/obj/item/extinguisher/examine(mob/user)
..()
to_chat(user, "The safety is [safety ? "on" : "off"].")
. = ..()
. += "The safety is [safety ? "on" : "off"]."
if(reagents.total_volume)
to_chat(user, "<span class='notice'>You can loose its <b>screws</b> to empty it.</span>")
. += "<span class='notice'>You can loose its <b>screws</b> to empty it.</span>"
/obj/item/extinguisher/proc/AttemptRefill(atom/target, mob/user)
if(istype(target, tanktype) && target.Adjacent(user))
+2 -2
View File
@@ -145,9 +145,9 @@
update_icon()
/obj/item/flamethrower/examine(mob/user)
..()
. = ..()
if(ptank)
to_chat(user, "<span class='notice'>\The [src] has \a [ptank] attached. Alt-click to remove it.</span>")
. += "<span class='notice'>\The [src] has \a [ptank] attached. Alt-click to remove it.</span>"
/obj/item/flamethrower/proc/toggle_igniter(mob/user)
if(!ptank)
@@ -27,19 +27,19 @@
/obj/item/grenade/chem_grenade/examine(mob/user)
display_timer = (stage == READY && !nadeassembly) //show/hide the timer based on assembly state
..()
. = ..()
if(user.can_see_reagents())
var/count = 0
if(beakers.len)
to_chat(user, "<span class='notice'>You scan the grenade and detect the following reagents:</span>")
. += "<span class='notice'>You scan the grenade and detect the following reagents:</span>"
for(var/obj/item/reagent_containers/glass/G in beakers)
var/textcount = thtotext(++count)
for(var/datum/reagent/R in G.reagents.reagent_list)
to_chat(user, "<span class='notice'>[R.volume] units of [R.name] in the [textcount] beaker.</span>")
. += "<span class='notice'>[R.volume] units of [R.name] in the [textcount] beaker.</span>"
if(beakers.len == 1)
to_chat(user, "<span class='notice'>You detect no second beaker in the grenade.</span>")
. += "<span class='notice'>You detect no second beaker in the grenade.</span>"
else
to_chat(user, "<span class='notice'>You scan the grenade, but detect nothing.</span>")
. += "<span class='notice'>You scan the grenade, but detect nothing.</span>"
/obj/item/grenade/chem_grenade/attack_self(mob/user)
@@ -56,5 +56,5 @@
qdel(src)
/obj/item/grenade/iedcasing/examine(mob/user)
..()
to_chat(user, "You can't tell when it will explode!")
. = ..()
. += "You can't tell when it will explode!"
+3 -3
View File
@@ -47,12 +47,12 @@
/obj/item/grenade/examine(mob/user)
..()
. = ..()
if(display_timer)
if(det_time > 1)
to_chat(user, "The timer is set to [DisplayTimeText(det_time)].")
. += "The timer is set to [DisplayTimeText(det_time)]."
else
to_chat(user, "\The [src] is set for instant detonation.")
. += "\The [src] is set for instant detonation."
/obj/item/grenade/attack_self(mob/user)
+8 -8
View File
@@ -52,23 +52,23 @@
return
/obj/item/his_grace/examine(mob/user)
..()
. = ..()
if(awakened)
switch(bloodthirst)
if(HIS_GRACE_SATIATED to HIS_GRACE_PECKISH)
to_chat(user, "<span class='his_grace'>[src] isn't very hungry. Not yet.</span>")
. += "<span class='his_grace'>[src] isn't very hungry. Not yet.</span>"
if(HIS_GRACE_PECKISH to HIS_GRACE_HUNGRY)
to_chat(user, "<span class='his_grace'>[src] would like a snack.</span>")
. += "<span class='his_grace'>[src] would like a snack.</span>"
if(HIS_GRACE_HUNGRY to HIS_GRACE_FAMISHED)
to_chat(user, "<span class='his_grace'>[src] is quite hungry now.</span>")
. += "<span class='his_grace'>[src] is quite hungry now.</span>"
if(HIS_GRACE_FAMISHED to HIS_GRACE_STARVING)
to_chat(user, "<span class='his_grace'>[src] is openly salivating at the sight of you. Be careful.</span>")
. += "<span class='his_grace'>[src] is openly salivating at the sight of you. Be careful.</span>"
if(HIS_GRACE_STARVING to HIS_GRACE_CONSUME_OWNER)
to_chat(user, "<span class='his_grace bold'>You walk a fine line. [src] is very close to devouring you.</span>")
. += "<span class='his_grace bold'>You walk a fine line. [src] is very close to devouring you.</span>"
if(HIS_GRACE_CONSUME_OWNER to HIS_GRACE_FALL_ASLEEP)
to_chat(user, "<span class='his_grace bold'>[src] is shaking violently and staring directly at you.</span>")
. += "<span class='his_grace bold'>[src] is shaking violently and staring directly at you.</span>"
else
to_chat(user, "<span class='his_grace'>[src] is latched closed.</span>")
. += "<span class='his_grace'>[src] is latched closed.</span>"
/obj/item/his_grace/relaymove(mob/living/user) //Allows changelings, etc. to climb out of Him after they revive, provided He isn't active
if(!awakened)
+2 -2
View File
@@ -81,9 +81,9 @@
/obj/item/hot_potato/examine(mob/user)
. = ..()
if(active)
to_chat(user, "<span class='warning'>[src] is flashing red-hot! You should probably get rid of it!</span>")
. += "<span class='warning'>[src] is flashing red-hot! You should probably get rid of it!</span>"
if(show_timer)
to_chat(user, "<span class='warning'>[src]'s timer looks to be at [DisplayTimeText(activation_time - world.time)]!</span>")
. += "<span class='warning'>[src]'s timer looks to be at [DisplayTimeText(activation_time - world.time)]!</span>"
/obj/item/hot_potato/equipped(mob/user)
. = ..()
+4 -4
View File
@@ -155,13 +155,13 @@
/obj/item/inducer/examine(mob/living/M)
..()
. = ..()
if(cell)
to_chat(M, "<span class='notice'>Its display shows: [DisplayEnergy(cell.charge)].</span>")
. += "<span class='notice'>Its display shows: [DisplayEnergy(cell.charge)].</span>"
else
to_chat(M,"<span class='notice'>Its display is dark.</span>")
. += "<span class='notice'>Its display is dark.</span>"
if(opened)
to_chat(M,"<span class='notice'>Its battery compartment is open.</span>")
. += "<span class='notice'>Its battery compartment is open.</span>"
/obj/item/inducer/update_icon()
cut_overlays()
+2 -2
View File
@@ -334,8 +334,8 @@
update_light()
/obj/item/melee/transforming/energy/sword/cx/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
. = ..()
. += "<span class='notice'>Alt-click to recolor it.</span>"
/obj/item/melee/transforming/energy/sword/cx/worn_overlays(isinhands, icon_file)
. = ..()
+2 -2
View File
@@ -119,8 +119,8 @@
reagents.add_reagent(refill_reagent, refill_rate)
/obj/item/mop/advanced/examine(mob/user)
..()
to_chat(user, "<span class='notice'>The condenser switch is set to <b>[refill_enabled ? "ON" : "OFF"]</b>.</span>")
. = ..()
. += "<span class='notice'>The condenser switch is set to <b>[refill_enabled ? "ON" : "OFF"]</b>.</span>"
/obj/item/mop/advanced/Destroy()
if(refill_enabled)
+5 -5
View File
@@ -43,17 +43,17 @@
..()
/obj/item/pet_carrier/examine(mob/user)
..()
. = ..()
if(occupants.len)
for(var/V in occupants)
var/mob/living/L = V
to_chat(user, "<span class='notice'>It has [L] inside.</span>")
. += "<span class='notice'>It has [L] inside.</span>"
else
to_chat(user, "<span class='notice'>It has nothing inside.</span>")
. += "<span class='notice'>It has nothing inside.</span>"
if(user.canUseTopic(src))
to_chat(user, "<span class='notice'>Activate it in your hand to [open ? "close" : "open"] its door.</span>")
. += "<span class='notice'>Activate it in your hand to [open ? "close" : "open"] its door.</span>"
if(!open)
to_chat(user, "<span class='notice'>Alt-click to [locked ? "unlock" : "lock"] its door.</span>")
. += "<span class='notice'>Alt-click to [locked ? "unlock" : "lock"] its door.</span>"
/obj/item/pet_carrier/attack_self(mob/living/user)
if(open)
+6
View File
@@ -1014,3 +1014,9 @@
icon_state = "maya"
item_state = "maya"
attack_verb = list("nuked", "arrested", "harmbatonned")
/obj/item/toy/plush/catgirl/marisa
desc = "An adorable stuffed toy that resembles a crew member, or maybe a witch. Having it makes you feel you can win."
icon_state = "marisa"
item_state = "marisa"
attack_verb = list("blasted", "sparked", "dazzled")
+4 -6
View File
@@ -55,17 +55,15 @@
return automatic
/obj/item/pneumatic_cannon/examine(mob/user)
..()
var/list/out = list()
. = ..()
if(!in_range(user, src))
out += "<span class='notice'>You'll need to get closer to see any more.</span>"
. += "<span class='notice'>You'll need to get closer to see any more.</span>"
return
for(var/obj/item/I in loadedItems)
out += "<span class='info'>[icon2html(I, user)] It has \a [I] loaded.</span>"
. += "<span class='info'>[icon2html(I, user)] It has \a [I] loaded.</span>"
CHECK_TICK
if(tank)
out += "<span class='notice'>[icon2html(tank, user)] It has \a [tank] mounted onto it.</span>"
to_chat(user, out.Join("<br>"))
. += "<span class='notice'>[icon2html(tank, user)] It has \a [tank] mounted onto it.</span>"
/obj/item/pneumatic_cannon/attackby(obj/item/W, mob/user, params)
if(user.a_intent == INTENT_HARM)
+3 -3
View File
@@ -20,12 +20,12 @@
/obj/item/melee/powerfist/examine(mob/user)
..()
. = ..()
if(!in_range(user, src))
to_chat(user, "<span class='notice'>You'll need to get closer to see any more.</span>")
. += "<span class='notice'>You'll need to get closer to see any more.</span>"
return
if(tank)
to_chat(user, "<span class='notice'>[icon2html(tank, user)] It has \a [tank] mounted onto it.</span>")
. += "<span class='notice'>[icon2html(tank, user)] It has \a [tank] mounted onto it.</span>"
/obj/item/melee/powerfist/attackby(obj/item/W, mob/user, params)
+2 -2
View File
@@ -16,9 +16,9 @@
var/warcry
/obj/item/banner/examine(mob/user)
..()
. = ..()
if(inspiration_available)
to_chat(user, "<span class='notice'>Activate it in your hand to inspire nearby allies of this banner's allegiance!</span>")
. += "<span class='notice'>Activate it in your hand to inspire nearby allies of this banner's allegiance!</span>"
/obj/item/banner/attack_self(mob/living/carbon/human/user)
if(!inspiration_available)
@@ -203,7 +203,7 @@
desc = "A trash bag of holding replacement for the janiborg's standard trash bag."
icon_state = "cyborg_upgrade3"
require_module = 1
module_type = list(/obj/item/robot_module/janitor, /obj/item/robot_module/scrubpup)
module_type = list(/obj/item/robot_module/butler)
/obj/item/borg/upgrade/tboh/action(mob/living/silicon/robot/R)
. = ..()
@@ -230,7 +230,7 @@
desc = "An advanced mop replacement for the janiborg's standard mop."
icon_state = "cyborg_upgrade3"
require_module = 1
module_type = list(/obj/item/robot_module/janitor, /obj/item/robot_module/scrubpup)
module_type = list(/obj/item/robot_module/butler)
/obj/item/borg/upgrade/amop/action(mob/living/silicon/robot/R)
. = ..()
@@ -522,8 +522,7 @@
module_type = list(
/obj/item/robot_module/medical,
/obj/item/robot_module/syndicate_medical,
/obj/item/robot_module/medihound,
/obj/item/robot_module/borgi)
/obj/item/robot_module/medihound)
/obj/item/borg/upgrade/advhealth/action(mob/living/silicon/robot/R, user = usr)
. = ..()
@@ -607,7 +606,7 @@
icon = 'icons/obj/storage.dmi'
icon_state = "borg_BS_RPED"
require_module = TRUE
module_type = list(/obj/item/robot_module/engineering)
module_type = list(/obj/item/robot_module/engineering, /obj/item/robot_module/saboteur)
/obj/item/borg/upgrade/rped/action(mob/living/silicon/robot/R, user = usr)
. = ..()
@@ -191,6 +191,12 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20), \
new/datum/stack_recipe("wood table frame", /obj/structure/table_frame/wood, 2, time = 10), \
null, \
new/datum/stack_recipe_list("pews", list(
new /datum/stack_recipe("pew (middle)", /obj/structure/chair/pew, 3, one_per_turf = TRUE, on_floor = TRUE),\
new /datum/stack_recipe("pew (left)", /obj/structure/chair/pew/left, 3, one_per_turf = TRUE, on_floor = TRUE),\
new /datum/stack_recipe("pew (right)", /obj/structure/chair/pew/right, 3, one_per_turf = TRUE, on_floor = TRUE),\
)),
null, \
new/datum/stack_recipe("rifle stock", /obj/item/weaponcrafting/stock, 10, time = 40), \
new/datum/stack_recipe("rolling pin", /obj/item/kitchen/rollingpin, 2, time = 30), \
new/datum/stack_recipe("wooden buckler", /obj/item/shield/riot/buckler, 20, time = 40), \

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