diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index da61e4829c2..1df551e53e7 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -45,19 +45,19 @@ #define R_HOST 65535 -#define ADMIN_QUE(user) "(?)" -#define ADMIN_FLW(user) "(FLW)" -#define ADMIN_PP(user) "(PP)" -#define ADMIN_VV(atom) "(VV)" -#define ADMIN_SM(user) "(SM)" -#define ADMIN_TP(user) "(TP)" -#define ADMIN_BSA(user) "(BSA)" -#define ADMIN_CENTCOM_REPLY(user) "(RPLY)" -#define ADMIN_SYNDICATE_REPLY(user) "(RPLY)" -#define ADMIN_SC(user) "(SC)" -#define ADMIN_LOOKUP(user) "[key_name_admin(user)][ADMIN_QUE(user)]" -#define ADMIN_LOOKUPFLW(user) "[key_name_admin(user)][ADMIN_QUE(user)] [ADMIN_FLW(user)]" -#define ADMIN_FULLMONTY(user) "[key_name_admin(user)] [ADMIN_QUE(user)] [ADMIN_PP(user)] [ADMIN_VV(user)] [ADMIN_SM(user)] [ADMIN_FLW(user)] [ADMIN_TP(user)]" +#define ADMIN_QUE(user,display) "[display]" +#define ADMIN_FLW(user,display) "[display]" +#define ADMIN_PP(user,display) "[display]" +#define ADMIN_VV(atom,display) "[display]" +#define ADMIN_SM(user,display) "[display]" +#define ADMIN_TP(user,display) "[display]" +#define ADMIN_BSA(user,display) "[display]" +#define ADMIN_CENTCOM_REPLY(user,display) "[display]" +#define ADMIN_SYNDICATE_REPLY(user,display) "[display]" +#define ADMIN_SC(user,display) "[display]" +#define ADMIN_LOOKUP(user) "[key_name_admin(user)]([ADMIN_QUE(user,"?")])" +#define ADMIN_LOOKUPFLW(user) "[key_name_admin(user)]([ADMIN_QUE(user,"?")]) ([ADMIN_FLW(user,"FLW")])" +#define ADMIN_FULLMONTY(user) "[key_name_admin(user)] ([ADMIN_QUE(user,"?")]) ([ADMIN_PP(user,"PP")]) ([ADMIN_VV(user,"VV")]) ([ADMIN_SM(user,"SM")]) ([ADMIN_FLW(user,"FLW")]) ([ADMIN_TP(user,"TP")])" #define ADMIN_JMP(src) "(JMP)" #define COORD(src) "[src ? "([src.x],[src.y],[src.z])" : "nonexistent location"]" #define AREACOORD(src) "[src ? "[get_area_name(src, TRUE)] [COORD(src)]" : "nonexistent location" ]" diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index b85677ff777..5ade3b0baef 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -18,8 +18,6 @@ //In most cases you want a subsystem instead #define TIMER_LOOP 32 -#define TIMER_NO_INVOKE_WARNING 600 //number of byond ticks that are allowed to pass before the timer subsystem thinks it hung on something - #define TIMER_ID_NULL -1 //For servers that can't do with any additional lag, set this to none in flightpacks.dm in subsystem/processing. diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index c30b2a3ef0d..1ca1fe01036 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -444,7 +444,7 @@ This is always put in the attack log. to_chat(user, "Name = [M.name]; Real_name = [M.real_name]; Mind_name = [M.mind?"[M.mind.name]":""]; Key = [M.key];") to_chat(user, "Location = [location_description];") to_chat(user, "[special_role_description]") - to_chat(user, "(PM) (PP) (VV) (SM) (FLW) (CA)") + to_chat(user, "(PM) ([ADMIN_PP(M,"PP")]) ([ADMIN_VV(M,"VV")]) ([ADMIN_SM(M,"SM")]) ([ADMIN_FLW(M,"FLW")]) (CA)") // Gets the first mob contained in an atom, and warns the user if there's not exactly one /proc/get_mob_in_atom_with_warning(atom/A, mob/user = usr) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 4dd3c56d12f..6ce486bdc05 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1150,6 +1150,11 @@ var/global/list/common_tools = list( return 1 return 0 +/proc/ispowertool(O)//used to check if a tool can force powered doors + if(istype(O, /obj/item/crowbar/power) || istype(O, /obj/item/mecha_parts/mecha_equipment/medical/rescue_jaw)) + return TRUE + return FALSE + /proc/iswire(O) if(istype(O, /obj/item/stack/cable_coil)) return 1 diff --git a/code/_compile_options.dm b/code/_compile_options.dm index c6b63b77271..436970567a0 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -18,7 +18,7 @@ #define MAX_PAPER_MESSAGE_LEN 3072 #define MAX_PAPER_FIELDS 50 #define MAX_BOOK_MESSAGE_LEN 9216 -#define MAX_NAME_LEN 26 +#define MAX_NAME_LEN 50 //diona names can get loooooooong // Version check, terminates compilation if someone is using a version of BYOND that's too old #if DM_VERSION < 510 diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 006f350873b..8ce2177751c 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -236,6 +236,8 @@ Makes the mob face the direction of the clicked thing */ /mob/proc/MiddleShiftClickOn(atom/A) + if(incapacitated()) + return var/face_dir = get_cardinal_dir(src, A) if(forced_look == face_dir) forced_look = null diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index e2539ebdf06..4bbc44c218a 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -10,7 +10,7 @@ SUBSYSTEM_DEF(timer) flags = SS_TICKER|SS_NO_INIT - var/list/second_queue = list() //awe, yes, you've had first queue, but what about second queue? Contains: /datum/timedevent + var/list/second_queue = list() //awe, yes, you've had first queue, but what about second queue? var/list/hashes = list() var/head_offset = 0 //world.time of the first entry in the the bucket. @@ -38,15 +38,15 @@ SUBSYSTEM_DEF(timer) /datum/controller/subsystem/timer/fire(resumed = FALSE) var/lit = last_invoke_tick - var/last_check = world.time - TIMER_NO_INVOKE_WARNING + var/last_check = world.time - TICKS2DS(BUCKET_LEN*1.5) var/list/bucket_list = src.bucket_list if(!bucket_count) last_invoke_tick = world.time - if(lit && lit < last_check && last_invoke_warning < last_check) + if(lit && lit < last_check && head_offset < last_check && last_invoke_warning < last_check) last_invoke_warning = world.time - var/msg = "No regular timers processed in the last [TIMER_NO_INVOKE_WARNING] ticks[bucket_auto_reset ? ", resetting buckets" : ""]!" + var/msg = "No regular timers processed in the last [BUCKET_LEN*1.5] ticks[bucket_auto_reset ? ", resetting buckets" : ""]!" message_admins(msg) WARNING(msg) if(bucket_auto_reset) diff --git a/code/datums/diseases/advance/symptoms/sensory.dm b/code/datums/diseases/advance/symptoms/sensory.dm index e3e50ba468f..c3095a69e08 100644 --- a/code/datums/diseases/advance/symptoms/sensory.dm +++ b/code/datums/diseases/advance/symptoms/sensory.dm @@ -24,35 +24,31 @@ Bonus level = 5 severity = 0 -/datum/symptom/sensory_restoration/proc/check_and_add(reagent, check, add, mob/living/M) - if(M.reagents.get_reagent_amount(reagent) < check) - M.reagents.add_reagent(reagent, add) - return 1 - /datum/symptom/sensory_restoration/Activate(var/datum/disease/advance/A) ..() if(prob(SYMPTOM_ACTIVATION_PROB * 3)) var/mob/living/M = A.affected_mob + var/datum/reagents/RD = M.reagents switch(A.stage) if(2) - if(check_and_add("oculine", 10, 10, M)) + if(RD.check_and_add("oculine", 10, 10)) to_chat(M, "Your hearing feels clearer and crisp.") if(3) - if(check_and_add("antihol", 10, 10, M)) + if(RD.check_and_add("antihol", 10, 10)) to_chat(M, "You feel sober.") - check_and_add("oculine", 10, 10, M) + RD.check_and_add("oculine", 10, 10) if(4) - if(check_and_add("synaphydramine", 10, 5, M)) + if(RD.check_and_add("synaphydramine", 10, 5)) to_chat(M, "You feel focused.") - check_and_add("antihol", 10, 10, M) - check_and_add("oculine", 10, 10, M) + RD.check_and_add("antihol", 10, 10) + RD.check_and_add("oculine", 10, 10) if(5) - if(check_and_add("mannitol", 10, 10, M)) + if(RD.check_and_add("mannitol", 10, 10)) to_chat(M, "Your mind feels relaxed.") - check_and_add("synaphydramine", 10, 5, M) - check_and_add("antihol", 10, 10, M) - check_and_add("oculine", 10, 10, M) + RD.check_and_add("synaphydramine", 10, 5) + RD.check_and_add("antihol", 10, 10) + RD.check_and_add("oculine", 10, 10) return diff --git a/code/datums/spell.dm b/code/datums/spell.dm index 1a78f8be2ca..653cc0020bc 100644 --- a/code/datums/spell.dm +++ b/code/datums/spell.dm @@ -261,9 +261,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin if(istype(target,/mob/living) && message) to_chat(target, text("[message]")) if(sparks_spread) - var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread() - sparks.set_up(sparks_amt, 0, location) //no idea what the 0 is - sparks.start() + do_sparks(sparks_amt, 0, location) if(smoke_spread) if(smoke_spread == 1) var/datum/effect_system/smoke_spread/smoke = new @@ -328,10 +326,10 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin /obj/effect/proc_holder/spell/targeted/choose_targets(mob/user = usr) var/list/targets = list() - + switch(max_targets) if(0) //unlimited - + if(!humans_only) for(var/mob/living/target in view_or_range(range, user, selection_type)) targets += target @@ -344,7 +342,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin targets += user else var/possible_targets = list() - + if(!humans_only) for(var/mob/living/M in view_or_range(range, user, selection_type)) if(!include_user && user == M) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index ef439049611..766203f5330 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -220,7 +220,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) cost = 5 job = list("Chief Medical Officer", "Medical Doctor", "Geneticist", "Psychiatrist", "Chemist", "Paramedic", "Coroner", "Virologist") -/datum/uplink_item/dangerous/cat_grenade +/datum/uplink_item/jobspecific/cat_grenade name = "Feral Cat Delivery Grenade" desc = "The feral cat delivery grenade contains 8 dehydrated feral cats in a similar manner to dehydrated monkeys, which, upon detonation, will be rehydrated by a small reservoir of water contained within the grenade. These cats will then attack anything in sight." item = /obj/item/grenade/spawnergrenade/feral_cats @@ -960,6 +960,15 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) cost = 1 surplus = 20 +/datum/uplink_item/stealthy_tools/clownkit + name = "Honk Brand Infiltration Kit" + desc = "All the tools you need to play the best prank Nanotrasen has ever seen. Includes a voice changer clown mask, magnetic clown shoes, and standard clown outfit, tools, and backpack." + reference = "HBIK" + item = /obj/item/storage/backpack/clown/syndie + cost = 6 + gamemodes = list(/datum/game_mode/nuclear) + surplus = 0 + // DEVICE AND TOOLS /datum/uplink_item/device_tools diff --git a/code/defines/procs/admin.dm b/code/defines/procs/admin.dm index d661e320dd8..b7036f9fbdc 100644 --- a/code/defines/procs/admin.dm +++ b/code/defines/procs/admin.dm @@ -46,7 +46,7 @@ . += "Administrator" else if(include_link && C) - . += "" + . += "" . += key if(include_link) @@ -68,8 +68,10 @@ return . /proc/key_name_admin(whom) - var/message = "[key_name(whom, 1)](?)[isAntag(whom) ? "(A)" : ""][isLivingSSD(whom) ? "(SSD!)" : ""] ([admin_jump_link(whom)])" - return message + if(whom) + var/datum/whom_datum = whom //As long as it's not null, will be close enough/has the proc UID() that is all that's needed + var/message = "[key_name(whom, 1)]([ADMIN_QUE(whom_datum,"?")])[isAntag(whom) ? "(A)" : ""][isLivingSSD(whom) ? "(SSD!)" : ""] ([admin_jump_link(whom)])" + return message /proc/key_name_mentor(whom) // Same as key_name_admin, but does not include (?) or (A) for antags. diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm index fa6a1a93405..9993388afec 100644 --- a/code/game/gamemodes/changeling/powers/revive.dm +++ b/code/game/gamemodes/changeling/powers/revive.dm @@ -52,7 +52,8 @@ IO.rejuvenate() IO.trace_chemicals.Cut() H.remove_all_embedded_objects() - user.updatehealth() + user.status_flags &= ~(FAKEDEATH) + user.updatehealth("revive sting") user.update_blind_effects() user.update_blurry_effects() @@ -60,7 +61,6 @@ user.regenerate_icons() - user.status_flags &= ~(FAKEDEATH) user.update_revive() //Handle waking up the changeling after the regenerative stasis has completed. user.mind.changeling.purchasedpowers -= src user.med_hud_set_status() diff --git a/code/game/gamemodes/cult/cult_comms.dm b/code/game/gamemodes/cult/cult_comms.dm index 2a1d9166370..8bd5fc3cc4f 100644 --- a/code/game/gamemodes/cult/cult_comms.dm +++ b/code/game/gamemodes/cult/cult_comms.dm @@ -34,6 +34,6 @@ if(iscultist(M)) to_chat(M, my_message) else if(M in GLOB.dead_mob_list) - to_chat(M, " (F) [my_message] ") + to_chat(M, " (F) [my_message] ") - log_say("(CULT) [message]", user) \ No newline at end of file + log_say("(CULT) [message]", user) diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 8cde8a9d3d1..05a29a5f3f4 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -561,9 +561,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} /obj/item/restraints/handcuffs/energy/used/dropped(mob/user) user.visible_message("[user]'s [src] break in a discharge of energy!", \ "[user]'s [src] break in a discharge of energy!") - var/datum/effect_system/spark_spread/S = new - S.set_up(4,0,user.loc) - S.start() + do_sparks(4, 0, user.loc) . = ..() /obj/item/abductor_baton/examine(mob/user) @@ -736,6 +734,8 @@ Congratulations! You are now trained for invasive xenobiology research!"} icon_state = "bed" no_icon_updates = 1 //no icon updates for this; it's static. injected_reagents = list("corazone","spaceacillin") + reagent_target_amount = 31 //the patient needs at least 30u of spaceacillin to prevent necrotization. + inject_amount = 10 /obj/structure/closet/abductor name = "alien locker" diff --git a/code/game/gamemodes/miniantags/abduction/machinery/pad.dm b/code/game/gamemodes/miniantags/abduction/machinery/pad.dm index ce30708a76f..f7ff2864608 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/pad.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/pad.dm @@ -46,7 +46,5 @@ duration = 80 /obj/effect/temp_visual/teleport_abductor/New() - var/datum/effect_system/spark_spread/S = new - S.set_up(10,0,loc) - S.start() + do_sparks(10, 0, loc) ..() \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm index 5543a54caa6..6cdfdc736d9 100644 --- a/code/game/gamemodes/miniantags/borer/borer.dm +++ b/code/game/gamemodes/miniantags/borer/borer.dm @@ -91,6 +91,7 @@ ) var/talk_inside_host = FALSE // So that borers don't accidentally give themselves away on a botched message var/used_dominate + var/attempting_to_dominate = FALSE // To prevent people from spam opening the Dominate Victim input var/chemicals = 10 // Chemicals used for reproduction and chemical injection. var/max_chems = 250 var/mob/living/carbon/human/host // Human host for the brain worm. @@ -325,6 +326,9 @@ to_chat(src, "You cannot infest someone who is already infested!") return + if(incapacitated()) + return + to_chat(src, "You slither up [M] and begin probing at [M.p_their()] ear canal...") if(!do_after(src, 50, target = M)) @@ -471,7 +475,7 @@ set category = "Borer" set name = "Dominate Victim" set desc = "Freeze the limbs of a potential host with supernatural fear." - + if(world.time - used_dominate < 150) to_chat(src, "You cannot use that ability again so soon.") return @@ -483,23 +487,43 @@ if(stat) to_chat(src, "You cannot do that in your current state.") return - + + if(attempting_to_dominate) + to_chat(src, "You're already targeting someone!") + return + var/list/choices = list() for(var/mob/living/carbon/C in view(3,src)) if(C.stat != DEAD) choices += C - + if(world.time - used_dominate < 300) to_chat(src, "You cannot use that ability again so soon.") return - + + attempting_to_dominate = TRUE + var/mob/living/carbon/M = input(src,"Who do you wish to dominate?") in null|choices - if(!M || !src) + if(!M) + attempting_to_dominate = FALSE + return + + if(!src) //different statement to avoid a runtime since if the source is deleted then attempting_to_dominate would also be deleted return if(M.has_brain_worms()) to_chat(src, "You cannot dominate someone who is already infested!") + attempting_to_dominate = FALSE + return + + if(incapacitated()) + attempting_to_dominate = FALSE + return + + if(get_dist(src, M) > 7) //to avoid people remotely doing from across the map etc, 7 is the default view range + to_chat(src, "You're too far away!") + attempting_to_dominate = FALSE return to_chat(src, "You focus your psychic lance on [M] and freeze [M.p_their()] limbs with a wave of terrible dread.") @@ -507,6 +531,7 @@ M.Weaken(3) used_dominate = world.time + attempting_to_dominate = FALSE /mob/living/simple_animal/borer/verb/release_host() set category = "Borer" diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index d75a1bd6d52..afae458a58d 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -102,7 +102,7 @@ if(istype(M, /mob/living/simple_animal/revenant)) to_chat(M, rendered) if(isobserver(M)) - to_chat(M, "(F) [rendered]") + to_chat(M, "(F) [rendered]") return /mob/living/simple_animal/revenant/Stat() diff --git a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm index 5a7825c0cfe..c201b1bc45d 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm @@ -209,9 +209,7 @@ if(!L.on) return L.visible_message("\The [L] suddenly flares brightly and begins to spark!") - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread/ - s.set_up(4, 0, L) - s.start() + do_sparks(4, 0, L) new/obj/effect/temp_visual/revenant(L.loc) sleep(20) if(!L.on) //wait, wait, don't shock me @@ -222,9 +220,7 @@ return M.Beam(L,icon_state="purple_lightning",icon='icons/effects/effects.dmi',time=5) M.electrocute_act(shock_damage, "[L.name]", safety=1) - var/datum/effect_system/spark_spread/z = new /datum/effect_system/spark_spread/ - z.set_up(4, 0, M) - z.start() + do_sparks(4, 0, M) playsound(M, 'sound/machines/defib_zap.ogg', 50, 1, -1) //Defile: Corrupts nearby stuff, unblesses floor tiles. diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 257126e8586..11baf813890 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -267,7 +267,7 @@ if(beingborged) to_chat(rev_mind.current, "The frame's firmware detects and deletes your neural reprogramming! You remember nothing[remove_head ? "." : " but the name of the one who flashed you."]") - message_admins("[key_name_admin(rev_mind.current)] ? (FLW) has been borged while being a [remove_head ? "leader" : " member"] of the revolution.") + message_admins("[key_name_admin(rev_mind.current)] [ADMIN_QUE(rev_mind.current,"?")] ([ADMIN_FLW(rev_mind.current,"FLW")]) has been borged while being a [remove_head ? "leader" : " member"] of the revolution.") else rev_mind.current.Paralyse(5) diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index 63e37911224..d2c3cc2c72e 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -540,9 +540,7 @@ to_chat(S, "ERROR $!(@ ERROR )#^! SENSORY OVERLOAD \[$(!@#") S << 'sound/misc/interference.ogg' playsound(S, 'sound/machines/warning-buzzer.ogg', 50, 1) - var/datum/effect_system/spark_spread/sp = new /datum/effect_system/spark_spread - sp.set_up(5, 1, S) - sp.start() + do_sparks(5, 1, S) S.Weaken(6) for(var/obj/structure/window/W in T.contents) W.take_damage(rand(80, 100)) diff --git a/code/game/gamemodes/wizard/godhand.dm b/code/game/gamemodes/wizard/godhand.dm index 260f809334c..c6992f99b98 100644 --- a/code/game/gamemodes/wizard/godhand.dm +++ b/code/game/gamemodes/wizard/godhand.dm @@ -48,9 +48,7 @@ if(!proximity || target == user || !ismob(target) || !iscarbon(user) || user.lying || user.handcuffed) //exploding after touching yourself would be bad return var/mob/M = target - var/datum/effect_system/spark_spread/sparks = new - sparks.set_up(4, 0, M.loc) //no idea what the 0 is - sparks.start() + do_sparks(4, 0, M.loc) //no idea what the 0 is M.gib() ..() @@ -84,9 +82,7 @@ /obj/item/melee/touch_attack/fake_disintegrate/afterattack(atom/target, mob/living/carbon/user, proximity) if(!proximity || target == user || !ismob(target) || !iscarbon(user) || user.lying || user.handcuffed) //not exploding after touching yourself would be bad return - var/datum/effect_system/spark_spread/sparks = new - sparks.set_up(4, 0, target.loc) //no idea what the 0 is - sparks.start() + do_sparks(4, 0, target.loc) playsound(target.loc, 'sound/goonstation/effects/gib.ogg', 50, 1) ..() diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm index 70afe02762a..2ee1e93683d 100644 --- a/code/game/machinery/OpTable.dm +++ b/code/game/machinery/OpTable.dm @@ -15,6 +15,8 @@ buckle_lying = 90 var/no_icon_updates = 0 //set this to 1 if you don't want the icons ever changing var/list/injected_reagents = list() + var/reagent_target_amount = 1 + var/inject_amount = 1 /obj/machinery/optable/New() ..() @@ -106,9 +108,9 @@ check_victim() if(LAZYLEN(injected_reagents)) for(var/mob/living/carbon/C in get_turf(src)) + var/datum/reagents/R = C.reagents for(var/chemical in injected_reagents) - if(C.reagents.get_reagent_amount(chemical) < 1) - C.reagents.add_reagent(chemical, 1) + R.check_and_add(chemical,reagent_target_amount,inject_amount) /obj/machinery/optable/proc/take_victim(mob/living/carbon/C, mob/living/carbon/user as mob) if(C == user) diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index 5d5e6bd9511..604ac3f02f3 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -217,9 +217,7 @@ for(var/turf/T in linkedholodeck) if(prob(30)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(2, 1, T) - s.start() + do_sparks(2, 1, T) T.ex_act(3) T.hotspot_expose(1000,500,1) @@ -257,9 +255,7 @@ if(L.name=="Atmospheric Test Start") spawn(20) var/turf/T = get_turf(L) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(2, 1, T) - s.start() + do_sparks(2, 1, T) if(T) T.temperature = 5000 T.hotspot_expose(50000,50000,1)*/ @@ -306,9 +302,7 @@ /* if(L.name=="Atmospheric Test Start") spawn(20) var/turf/T = get_turf(L) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(2, 1, T) - s.start() + do_sparks(2, 1, T) if(T) T.temperature = 5000 T.hotspot_expose(50000,50000,1)*/ diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 4f2d3801526..9d7310c1c66 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -502,11 +502,11 @@ if(SSshuttle.cancelEvac(user)) log_game("[key_name(user)] has recalled the shuttle.") - message_admins("[key_name_admin(user)] has recalled the shuttle - [ADMIN_FLW(user)].", 1) + message_admins("[key_name_admin(user)] has recalled the shuttle - ([ADMIN_FLW(user,"FLW")]).", 1) else to_chat(user, "Central Command has refused the recall request!") log_game("[key_name(user)] has tried and failed to recall the shuttle.") - message_admins("[key_name_admin(user)] has tried and failed to recall the shuttle - [ADMIN_FLW(user)].", 1) + message_admins("[key_name_admin(user)] has tried and failed to recall the shuttle - ([ADMIN_FLW(user,"FLW")]).", 1) /proc/post_status(command, data1, data2, mob/user = null) diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index bcbe7a07e5d..87d35c2d7b4 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -14,8 +14,6 @@ circuit = /obj/item/circuitboard/message_monitor //Server linked to. var/obj/machinery/message_server/linkedServer = null - //Sparks effect - For emag - var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread //Messages - Saves me time if I want to change something. var/noserver = "ALERT: No server detected." var/incorrectkey = "ALERT: Incorrect decryption key!" @@ -56,8 +54,7 @@ icon_screen = hack_icon // An error screen I made in the computers.dmi emag = 1 screen = 2 - spark_system.set_up(5, 0, src) - src.spark_system.start() + do_sparks(5, 0, src) var/obj/item/paper/monitorkey/MK = new/obj/item/paper/monitorkey MK.loc = src.loc playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1) diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 90ce57e880f..c6755d1dbdd 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -1,5 +1,6 @@ /obj/machinery/atmospherics/unary/cryo_cell name = "cryo cell" + desc = "Lowers the body temperature so certain medications may take effect." icon = 'icons/obj/cryogenics.dmi' icon_state = "pod0" density = 1 diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index af63a92e2ff..b6a02aacfd0 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -149,9 +149,7 @@ playsound(src, 'sound/machines/buzz-sigh.ogg', 30, 1) return visible_message("The console sparks, and some items fall out!") - var/datum/effect_system/spark_spread/sparks = new - sparks.set_up(5, 1, src) - sparks.start() + do_sparks(5, 1, src) for(var/obj/item/I in objective_items) dispense_item(I) diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index c3d25d3cdb9..e0fb65787cd 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -188,9 +188,7 @@ for reference: to_chat(user, "Barrier lock toggled off.") return else - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(2, 1, src) - s.start() + do_sparks(2, 1, src) visible_message("BZZzZZzZZzZT") return return @@ -223,16 +221,12 @@ for reference: emagged = 1 req_access = null to_chat(user, "You break the ID authentication lock on the [src].") - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(2, 1, src) - s.start() + do_sparks(2, 1, src) visible_message("BZZzZZzZZzZT") else if(src.emagged == 1) src.emagged = 2 to_chat(user, "You short out the anchoring mechanism on the [src].") - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(2, 1, src) - s.start() + do_sparks(2, 1, src) visible_message("BZZzZZzZZzZT") /obj/machinery/deployable/barrier/ex_act(severity) @@ -275,9 +269,7 @@ for reference: /* var/obj/item/stack/rods/ =*/ new /obj/item/stack/rods(Tsec) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) explosion(src.loc,-1,-1,0) if(src) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 0fd3d27d3d4..8d9b17ef7c2 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -627,9 +627,7 @@ About the new airlock wires panel: if(isElectrified() && density && istype(mover, /obj/item)) var/obj/item/I = mover if(I.flags & CONDUCT) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, 1, src) return ..() /obj/machinery/door/airlock/attack_hand(mob/user) @@ -1024,7 +1022,7 @@ About the new airlock wires panel: else if(locked) to_chat(user, "The airlock's bolts prevent it from being forced!") else if(!welded && !operating) - if(!beingcrowbarred) //being fireaxe'd + if(istype(I, /obj/item/twohanded/fireaxe)) //let's make this more specific var/obj/item/twohanded/fireaxe/F = I if(F.wielded) spawn(0) @@ -1041,7 +1039,7 @@ About the new airlock wires panel: else close(1) - if(istype(I, /obj/item/crowbar/power)) + if(ispowertool(I)) //jaws of life and rescue claw if(isElectrified()) shock(user, 100)//it's like sticking a forck in a power socket return diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 706b1a82ce0..6f838319040 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -76,8 +76,7 @@ if(autoclose_timer) deltimer(autoclose_timer) autoclose_timer = 0 - if(spark_system) - QDEL_NULL(spark_system) + QDEL_NULL(spark_system) return ..() /obj/machinery/door/Bumped(atom/AM) diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm index 013be887cce..e9836eb0ca6 100644 --- a/code/game/machinery/floodlight.dm +++ b/code/game/machinery/floodlight.dm @@ -15,7 +15,7 @@ /obj/machinery/floodlight/Initialize() . = ..() - src.cell = new(src) + cell = new(src) mapVarInit() /obj/machinery/floodlight/Destroy() @@ -26,13 +26,18 @@ icon_state = "flood[open ? "o" : ""][open && cell ? "b" : ""]0[on]" /obj/machinery/floodlight/process() + if(!cell && on) + on = FALSE + visible_message("[src] shuts down due to lack of power!") + update_icon() + set_light(0) if(on) cell.charge -= use if(cell.charge <= 0) on = FALSE updateicon() set_light(0) - src.visible_message("[src] shuts down due to lack of power!") + visible_message("[src] shuts down due to lack of power!") /obj/machinery/floodlight/attack_ai() return @@ -48,8 +53,12 @@ cell.add_fingerprint(user) cell.update_icon() - src.cell = null + cell = null to_chat(user, "You remove the power cell.") + if(on) + on = FALSE + visible_message("[src] shuts down due to lack of power!") + set_light(0) updateicon() return @@ -80,14 +89,14 @@ /obj/machinery/floodlight/attackby(obj/item/W as obj, mob/user as mob, params) if(istype(W, /obj/item/wrench)) if(!anchored && !isinspace()) - playsound(src.loc, W.usesound, 50, 1) + playsound(loc, W.usesound, 50, 1) user.visible_message( \ "[user] tightens \the [src]'s casters.", \ " You have tightened \the [src]'s casters.", \ "You hear ratchet.") anchored = TRUE else if(anchored) - playsound(src.loc, W.usesound, 50, 1) + playsound(loc, W.usesound, 50, 1) user.visible_message( \ "[user] loosens \the [src]'s casters.", \ " You have loosened \the [src]'s casters.", \ diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 87ec7974711..3c36edb1685 100755 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -101,9 +101,7 @@ flick("[base_state]-spark", src) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(2, 1, src) - s.start() + do_sparks(2, 1, src) src.last_spark = world.time use_power(1000) var/turf/location = src.loc diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 1d33a1ae795..05eaae1a9d9 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -587,9 +587,7 @@ Class Procs: return 0 if((TK in user.mutations) && !Adjacent(user)) return 0 - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, 1, src) if(electrocute_mob(user, get_area(src), src, 0.7)) if(user.stunned) return 1 diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 491cb93018e..a712e033afd 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -241,8 +241,12 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co data["censored"] = viewing_channel.censored var/list/messages = list() data["messages"] = messages + var/message_number = 0 for(var/datum/feed_message/M in viewing_channel.messages) - messages[++messages.len] = list("title" = M.title, "body" = M.body, "img" = M.img ? icon2base64(M.img) : null, "message_type" = M.message_type, "author" = M.author, "view_count" = M.view_count) + if(M.img) + user << browse_rsc(M.img, "tmp_photo[message_number].png") + messages[++messages.len] = list("title" = M.title, "body" = M.body, "img" = M.img ? M.img : null, "message_type" = M.message_type, "author" = M.author, "view_count" = M.view_count, "message_number" = message_number) + message_number += 1 if(8, 9) data["channel_name"] = viewing_channel.channel_name data["ref"] = "\ref[viewing_channel]" @@ -273,7 +277,9 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co data["author"] = news_network.wanted_issue.backup_author data["criminal"] = news_network.wanted_issue.author data["description"] = news_network.wanted_issue.body - data["photo"] = news_network.wanted_issue.img ? icon2base64(news_network.wanted_issue.img) : 0 + if(news_network.wanted_issue.img) + user << browse_rsc(news_network.wanted_issue.img, "tmp_photow.png") + data["photo"] = news_network.wanted_issue.img ? news_network.wanted_issue.img : 0 if(12) var/list/jobs = list() data["jobs"] = jobs diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm index b58e9d12c84..e5a43c523f5 100644 --- a/code/game/machinery/quantum_pad.dm +++ b/code/game/machinery/quantum_pad.dm @@ -94,9 +94,7 @@ doteleport(user) /obj/machinery/quantumpad/proc/sparks() - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, get_turf(src)) - s.start() + do_sparks(5, 1, get_turf(src)) /obj/machinery/quantumpad/attack_ghost(mob/dead/observer/ghost) if(linked_pad) diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index a8e854467a2..9dc6c8e6f11 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -519,3 +519,50 @@ for(var/reagent in processed_reagents) reagents.add_reagent(reagent,amount) chassis.use_power(energy_drain) + +/obj/item/mecha_parts/mecha_equipment/medical/rescue_jaw + name = "rescue jaw" + desc = "Emergency rescue jaws, designed to help first responders reach their patients. Opens doors and removes obstacles." + icon_state = "mecha_clamp" //can work, might use a blue resprite later but I think it works for now + origin_tech = "materials=2;engineering=2" //kind of sad, but identical to jaws of life + equip_cooldown = 15 + energy_drain = 10 + var/dam_force = 20 + + +/obj/item/mecha_parts/mecha_equipment/medical/rescue_jaw/action(atom/target) + if(!action_checks(target)) + return + if(istype(target, /obj)) + if(!istype(target, /obj/machinery/door))//early return if we're not trying to open a door + return + var/obj/machinery/door/D = target //the door we want to open + D.try_to_crowbar(src, chassis.occupant)//use the door's crowbar function + if(isliving(target)) //interact with living beings + var/mob/living/M = target + if(chassis.occupant.a_intent == INTENT_HARM)//the patented, medical rescue claw is incapable of doing harm. Worry not. + target.visible_message("[chassis] gently boops [target] on the nose, its hydraulics hissing as safety overrides slow a brutal punch down at the last second.", \ + "") + else + push_aside(chassis, M)//out of the way, I have people to save! + occupant_message("You gently push [target] out of the way.") + chassis.visible_message("[chassis] gently pushes [target] out of the way.") + +/obj/item/mecha_parts/mecha_equipment/medical/rescue_jaw/proc/push_aside(obj/mecha/M, mob/living/L) + switch(get_dir(M, L)) + if(NORTH, SOUTH) + if(prob(50)) + step(L, WEST) + else + step(L, EAST) + if(WEST, EAST) + if(prob(50)) + step(L, NORTH) + else + step(L, SOUTH) + +/obj/item/mecha_parts/mecha_equipment/medical/rescue_jaw/can_attach(obj/mecha/M) + if(istype(M, /obj/mecha/medical) || istype(M, /obj/mecha/working/ripley/firefighter)) //Odys or firefighters + if(M.equipment.len < M.max_equip) + return TRUE + return FALSE diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index 501b41be4cb..a42e76015c1 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -69,7 +69,7 @@ P.failchance = 0 P.icon_state = "anom" P.name = "wormhole" - message_admins("[key_name_admin(chassis.occupant, chassis.occupant.client)](?) (FLW) used a Wormhole Generator in ([loc.x],[loc.y],[loc.z] - JMP)",0,1) + message_admins("[key_name_admin(chassis.occupant, chassis.occupant.client)]([ADMIN_QUE(chassis.occupant,"?")]) ([ADMIN_FLW(chassis.occupant,"FLW")]) used a Wormhole Generator in ([loc.x],[loc.y],[loc.z] - JMP)",0,1) log_game("[key_name(chassis.occupant)] used a Wormhole Generator in ([loc.x],[loc.y],[loc.z])") src = null spawn(rand(150,300)) diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index b63bb4fc40c..d119469d55a 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -63,8 +63,8 @@ start_cooldown() else step_away(M,chassis) - occupant_message("You push [target] out of the way.") - chassis.visible_message("[chassis] pushes [target] out of the way.") + occupant_message("You push [target] out of the way.") + chassis.visible_message("[chassis] pushes [target] out of the way.") return 1 diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 41f60361831..d4650aa1bbb 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -41,7 +41,7 @@ var/datum/effect_system/spark_spread/spark_system = new var/lights = 0 var/lights_power = 6 - var/emagged = 0 + var/emagged = FALSE //inner atmos var/use_internal_tank = 0 @@ -851,14 +851,8 @@ check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) -/obj/mecha/emag_act(user as mob) - if(istype(src, /obj/mecha/working/ripley) && emagged == 0) - emagged = 1 - to_chat(usr, "You slide the card through the [src]'s ID slot.") - playsound(loc, "sparks", 100, 1) - desc += "
The mech's equipment slots spark dangerously!" - else - to_chat(usr, "The [src]'s ID slot rejects the card.") +/obj/mecha/emag_act(mob/user) + to_chat(user, "[src]'s ID slot rejects the card.") return diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm index 333c05fdd5d..d0fcb0f99be 100644 --- a/code/game/mecha/medical/odysseus.dm +++ b/code/game/mecha/medical/odysseus.dm @@ -42,5 +42,4 @@ A.remove_hud_from(H) builtin_hud_user = 0 - . = ..() - + . = ..() \ No newline at end of file diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index d29bf2ae460..407c9cd63dc 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -180,4 +180,13 @@ else step_in = 5 for(var/obj/item/mecha_parts/mecha_equipment/drill/drill in equipment) - drill.equip_cooldown = initial(drill.equip_cooldown) \ No newline at end of file + drill.equip_cooldown = initial(drill.equip_cooldown) + +/obj/mecha/working/ripley/emag_act(mob/user) + if(!emagged) + emagged = TRUE + to_chat(user, "You slide the card through [src]'s ID slot.") + playsound(loc, "sparks", 100, 1) + desc += "
The mech's equipment slots spark dangerously!" + else + to_chat(user, "[src]'s ID slot rejects the card.") diff --git a/code/game/objects/effects/decals/Cleanable/robots.dm b/code/game/objects/effects/decals/Cleanable/robots.dm index 16a9bf5a711..1c8ad706dc8 100644 --- a/code/game/objects/effects/decals/Cleanable/robots.dm +++ b/code/game/objects/effects/decals/Cleanable/robots.dm @@ -29,9 +29,7 @@ var/obj/effect/decal/cleanable/blood/oil/streak = new(src.loc) streak.update_icon() else if(prob(10)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) if(step_to(src, get_step(src, direction), 0)) break diff --git a/code/game/objects/effects/decals/remains.dm b/code/game/objects/effects/decals/remains.dm index b97b149991b..77a51b4d975 100644 --- a/code/game/objects/effects/decals/remains.dm +++ b/code/game/objects/effects/decals/remains.dm @@ -22,12 +22,6 @@ icon_state = "remainsrobot" anchored = TRUE -/obj/effect/decal/remains/robot/New() - ..() - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() - /obj/effect/decal/remains/slime name = "You shouldn't see this" desc = "Noooooooooooooooooooooo" diff --git a/code/game/objects/effects/effect_system/effect_system.dm b/code/game/objects/effects/effect_system/effect_system.dm index d71e7631565..1231c8136fa 100644 --- a/code/game/objects/effects/effect_system/effect_system.dm +++ b/code/game/objects/effects/effect_system/effect_system.dm @@ -8,8 +8,9 @@ would spawn and follow the beaker, even if it is carried or thrown. /obj/effect/particle_effect name = "particle effect" mouse_opacity = MOUSE_OPACITY_TRANSPARENT - unacidable = 1//So effects are not targeted by alien acid. + unacidable = TRUE //So effects are not targeted by alien acid. pass_flags = PASSTABLE | PASSGRILLE + anchored = TRUE /obj/effect/particle_effect/New() ..() @@ -28,6 +29,7 @@ would spawn and follow the beaker, even if it is carried or thrown. var/atom/holder var/effect_type var/total_effects = 0 + var/autocleanup = FALSE //will delete itself after use /datum/effect_system/Destroy() holder = null @@ -71,3 +73,5 @@ would spawn and follow the beaker, even if it is carried or thrown. /datum/effect_system/proc/decrement_total_effect() total_effects-- + if(autocleanup && total_effects <= 0) + qdel(src) \ No newline at end of file diff --git a/code/game/objects/effects/effect_system/effects_other.dm b/code/game/objects/effects/effect_system/effects_other.dm index ef9ed8ac11a..194a37c860f 100644 --- a/code/game/objects/effects/effect_system/effects_other.dm +++ b/code/game/objects/effects/effect_system/effects_other.dm @@ -155,9 +155,7 @@ /datum/effect_system/reagents_explosion/start() if(amount <= 2) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(2, 1, location) - s.start() + do_sparks(2, 1, location) for(var/mob/M in viewers(5, location)) to_chat(M, "The solution violently explodes.") diff --git a/code/game/objects/effects/effect_system/effects_sparks.dm b/code/game/objects/effects/effect_system/effects_sparks.dm index 77925b3170a..f59f44ca1db 100644 --- a/code/game/objects/effects/effect_system/effects_sparks.dm +++ b/code/game/objects/effects/effect_system/effects_sparks.dm @@ -5,15 +5,26 @@ // will always spawn at the items location. ///////////////////////////////////////////// +/proc/do_sparks(n, c, source) + // n - number of sparks + // c - cardinals, bool, do the sparks only move in cardinal directions? + // source - source of the sparks. + + var/datum/effect_system/spark_spread/sparks = new + sparks.set_up(n, c, source) + sparks.autocleanup = TRUE + sparks.start() + /obj/effect/particle_effect/sparks name = "sparks" desc = "it's a spark what do you need to know?" icon_state = "sparks" - anchored = 1 + anchored = TRUE var/hotspottemp = 1000 /obj/effect/particle_effect/sparks/New() ..() + flick("sparks", src) // replay the animation playsound(loc, "sparks", 100, 1) var/turf/T = loc if(isturf(T)) diff --git a/code/game/objects/effects/gibs.dm b/code/game/objects/effects/gibs.dm index a5cd1b8b6b1..9248134b0a7 100644 --- a/code/game/objects/effects/gibs.dm +++ b/code/game/objects/effects/gibs.dm @@ -30,9 +30,7 @@ var/obj/effect/decal/cleanable/blood/gibs/gib = null if(sparks) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(2, 1, location) - s.start() + do_sparks(2, 1, location) for(var/i = 1, i<= gibtypes.len, i++) if(gibamounts[i]) diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index 8323641c899..1b619faa41b 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -25,9 +25,7 @@ if(triggered) return visible_message("[victim] sets off [bicon(src)] [src]!") - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) mineEffect(victim) triggered = 1 qdel(src) diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index e190988392d..793d7265c27 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -57,9 +57,7 @@ /obj/effect/portal/proc/invalid_teleport() visible_message("[src] flickers and fails due to bluespace interference!") - var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread() - spark_system.set_up(5, 0, loc) - spark_system.start() + do_sparks(5, 0, loc) qdel(src) diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index b587c650c4c..7a25f4ece1b 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -67,10 +67,7 @@ /obj/item/chameleon/proc/disrupt(var/delete_dummy = 1) if(active_dummy) - var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread - spark_system.set_up(5, 0, src) - spark_system.attach(src) - spark_system.start() + do_sparks(5, 0, src) eject_all() if(delete_dummy) qdel(active_dummy) diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index 175ca0886ad..8b53e3d8ed7 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -35,7 +35,7 @@ return if(H.mind) span = H.mind.speech_span - if((COMIC in H.mutations) || H.get_int_organ(/obj/item/organ/internal/cyberimp/brain/clown_voice)) + if((COMIC in H.mutations) || H.get_int_organ(/obj/item/organ/internal/cyberimp/brain/clown_voice) || istype(H.get_item_by_slot(slot_wear_mask), /obj/item/clothing/mask/gas/voice/clown)) span = "sans" if(spamcheck) to_chat(user, "\The [src] needs to recharge!") diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index 9aa30053983..71fc397a2c4 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -87,9 +87,7 @@ if(M) M.moved_recently = 0 to_chat(M, "You feel a sharp shock!") - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, M) - s.start() + do_sparks(3, 1, M) M.Weaken(5) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 4064bf63adb..017dade9ac4 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -166,7 +166,7 @@ var/global/list/datum/stack_recipe/abductor_recipes = list ( \ /obj/item/stack/sheet/mineral/plasma/attackby(obj/item/W, mob/user, params) if(is_hot(W) > 300)//If the temperature of the object is over 300, then ignite - message_admins("Plasma sheets ignited by [key_name_admin(user)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) + message_admins("Plasma sheets ignited by [key_name_admin(user)]([ADMIN_QUE(user,"?")]) ([ADMIN_FLW(user,"FLW")]) in ([x],[y],[z] - JMP)",0,1) log_game("Plasma sheets ignited by [key_name(user)] in ([x],[y],[z])") investigate_log("was ignited by [key_name(user)]","atmos") fire_act() diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index bd06be3282b..3c33d8f66a0 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -54,7 +54,7 @@ to_chat(user, "There are [amount] [singular_name]\s in the stack.") else to_chat(user, "There are [amount] [name]\s in the stack.") - to_chat(user,"Alt-click to take a custom amount.") + to_chat(user,"Ctrl-Shift-click to take a custom amount.") /obj/item/stack/proc/add(newamount) amount += newamount @@ -269,7 +269,7 @@ else ..() -/obj/item/stack/AltClick(mob/living/user) +/obj/item/stack/CtrlShiftClick(mob/living/user) if(!istype(user) || user.incapacitated()) to_chat(user, "You can't do that right now!") return diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index c1b88897bfd..e672ff14b10 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -250,9 +250,7 @@ /obj/item/toy/snappop/virus/throw_impact(atom/hit_atom) ..() - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) new /obj/effect/decal/cleanable/ash(src.loc) visible_message("The [name] explodes!","You hear a bang!") playsound(src, 'sound/effects/snap.ogg', 50, 1) @@ -270,9 +268,7 @@ var/ash_type = /obj/effect/decal/cleanable/ash /obj/item/toy/snappop/proc/pop_burst(var/n=3, var/c=1) - var/datum/effect_system/spark_spread/s = new() - s.set_up(n, c, src) - s.start() + do_sparks(n, c, src) new ash_type(loc) visible_message("[src] explodes!", "You hear a snap!") diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index daaa5c3e4c4..38051dde621 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -774,9 +774,9 @@ // Decals /obj/item/id_decal name = "identification card decal" - desc = "A modification kit to make your ID cards look snazzy.." - icon = 'icons/obj/device.dmi' - icon_state = "batterer" + desc = "A nano-cellophane wrap that molds to an ID card to make it look snazzy." + icon = 'icons/obj/toy.dmi' + icon_state = "id_decal" var/decal_name = "identification card" var/decal_desc = "A card used to provide ID and determine access across the station." var/decal_icon_state = "id" @@ -784,30 +784,40 @@ var/override_name = 0 /obj/item/id_decal/gold - name = "gold ID card card decal" + name = "gold ID card decal" + icon_state = "id_decal_gold" + desc = "Make your ID look like the Captain's or a self-centered HOP's. Applies to any ID." decal_desc = "A golden card which shows power and might." decal_icon_state = "gold" decal_item_state = "gold_id" /obj/item/id_decal/silver name = "silver ID card decal" + icon_state = "id_decal_silver" + desc = "Make your ID look like HOP's because they wouldn't change it officially. Applies to any ID." decal_desc = "A silver card which shows honour and dedication." decal_icon_state = "silver" decal_item_state = "silver_id" /obj/item/id_decal/prisoner name = "prisoner ID card decal" + icon_state = "id_decal_prisoner" + desc = "All the cool kids have an ID that's this color. Applies to any ID." decal_desc = "You are a number, you are not a free man." decal_icon_state = "prisoner" decal_item_state = "orange-id" /obj/item/id_decal/centcom name = "centcom ID card decal" + icon_state = "id_decal_centcom" + desc = "All the prestige without the responsibility or the access. Applies to any ID." decal_desc = "An ID straight from Cent. Com." decal_icon_state = "centcom" /obj/item/id_decal/emag name = "cryptographic sequencer ID card decal" + icon_state = "id_decal_emag" + desc = "A bundle of wires that you can tape to your ID to look very suspect. Applies to any ID." decal_name = "cryptographic sequencer" decal_desc = "It's a card with a magnetic strip attached to some circuitry." decal_icon_state = "emag" diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 26639543426..34877ac8788 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -79,7 +79,7 @@ src.target = AM loc = null - message_admins("[key_name_admin(user)](?) (FLW) planted [src.name] on [target.name] at ([target.x],[target.y],[target.z] - JMP) with [det_time] second fuse",0,1) + message_admins("[key_name_admin(user)]([ADMIN_QUE(user,"?")]) ([ADMIN_FLW(user,"FLW")]) planted [src.name] on [target.name] at ([target.x],[target.y],[target.z] - JMP) with [det_time] second fuse",0,1) log_game("[key_name(user)] planted [name] on [target.name] at ([target.x],[target.y],[target.z]) with [det_time] second fuse") target.overlays += image_overlay @@ -88,7 +88,7 @@ addtimer(CALLBACK(src, .proc/prime), det_time*10) /obj/item/grenade/plastic/suicide_act(mob/user) - message_admins("[key_name_admin(user)](?) (FLW) suicided with [src.name] at ([user.x],[user.y],[user.z] - JMP)",0,1) + message_admins("[key_name_admin(user)]([ADMIN_QUE(user,"?")]) ([ADMIN_FLW(user,"FLW")]) suicided with [src.name] at ([user.x],[user.y],[user.z] - JMP)",0,1) log_game("[key_name(user)] suicided with [name] at ([user.x],[user.y],[user.z])") user.visible_message("[user] activates the [name] and holds it above [user.p_their()] head! It looks like [user.p_theyre()] going out with a bang!") var/message_say = "FOR NO RAISIN!" diff --git a/code/game/objects/items/weapons/fireworks.dm b/code/game/objects/items/weapons/fireworks.dm index 138cb24ff40..d2e523cf953 100644 --- a/code/game/objects/items/weapons/fireworks.dm +++ b/code/game/objects/items/weapons/fireworks.dm @@ -25,7 +25,7 @@ obj/item/sparkler icon = 'icons/obj/fireworks.dmi' icon_state = "sparkler_0" var/litzor = 0 - var/datum/effect_system/spark_spread/S + obj/item/sparkler/attackby(obj/item/W,mob/user, params) if(litzor) return @@ -36,11 +36,7 @@ obj/item/sparkler/attackby(obj/item/W,mob/user, params) icon_state = "sparkler_1" var/b = rand(5,9) for(var/xy, xy<=b, xy++) - S = new() - S.set_up(1,0,src.loc) - if(ismob(src.loc) || isobj(src.loc)) - S.attach(src.loc) - S.start() + do_sparks(1, 0, loc) sleep(10) qdel(src) /obj/crate/fireworks diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 3de4fc4cf8d..8419f0b7537 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -289,7 +289,7 @@ var/mob/last = get_mob_by_ckey(nadeassembly.fingerprintslast) var/turf/T = get_turf(src) var/area/A = get_area(T) - message_admins("grenade primed by an assembly, attached by [key_name_admin(M)](?) ([admin_jump_link(M)]) and last touched by [key_name_admin(last)](?) ([admin_jump_link(last)]) ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] (JMP). [contained]") + message_admins("grenade primed by an assembly, attached by [key_name_admin(M)][ADMIN_QUE(M,"(?)")] ([admin_jump_link(M)]) and last touched by [key_name_admin(last)][ADMIN_QUE(last,"(?)")] ([admin_jump_link(last)]) ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] (JMP). [contained]") log_game("grenade primed by an assembly, attached by [key_name(M)] and last touched by [key_name(last)] ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] ([T.x], [T.y], [T.z]) [contained]") update_mob() @@ -419,7 +419,7 @@ var/mob/last = get_mob_by_ckey(nadeassembly.fingerprintslast) var/turf/T = get_turf(src) var/area/A = get_area(T) - message_admins("grenade primed by an assembly, attached by [key_name_admin(M)](?) (FLW) and last touched by [key_name_admin(last)](?) (FLW) ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] (JMP).") + message_admins("grenade primed by an assembly, attached by [key_name_admin(M)][ADMIN_QUE(M,"(?)")] ([ADMIN_FLW(M,"FLW")]) and last touched by [key_name_admin(last)][ADMIN_QUE(last,"(?)")] ([ADMIN_FLW(last,"FLW")]) ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] (JMP).") log_game("grenade primed by an assembly, attached by [key_name(M)] and last touched by [key_name(last)] ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] ([T.x], [T.y], [T.z])") else addtimer(CALLBACK(src, .proc/prime), det_time) diff --git a/code/game/objects/items/weapons/legcuffs.dm b/code/game/objects/items/weapons/legcuffs.dm index c705374f7a9..3391687f20a 100644 --- a/code/game/objects/items/weapons/legcuffs.dm +++ b/code/game/objects/items/weapons/legcuffs.dm @@ -136,9 +136,7 @@ /obj/item/restraints/legcuffs/beartrap/energy/proc/dissipate() if(!ismob(loc)) - var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread - sparks.set_up(1, 1, src) - sparks.start() + do_sparks(1, 1, src) qdel(src) /obj/item/restraints/legcuffs/beartrap/energy/attack_hand(mob/user) diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 2dcbef5b1a5..8ad283a77da 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -215,16 +215,8 @@ throw_speed = 3 throw_range = 1 w_class = WEIGHT_CLASS_BULKY //So you can't hide it in your pocket or some such. - var/datum/effect_system/spark_spread/spark_system sharp = 1 -//Most of the other special functions are handled in their own files. aka special snowflake code so kewl -/obj/item/melee/energy/blade/New() - ..() - spark_system = new /datum/effect_system/spark_spread() - spark_system.set_up(5, 0, src) - spark_system.attach(src) - /obj/item/melee/energy/blade/attack_self(mob/user) return diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 5395f2e8395..6d45e5b7add 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -89,6 +89,24 @@ icon_state = "clownpack" item_state = "clownpack" +/obj/item/storage/backpack/clown/syndie + +/obj/item/storage/backpack/clown/syndie/New() + ..() + new /obj/item/clothing/under/rank/clown(src) + new /obj/item/clothing/shoes/magboots/clown(src) + new /obj/item/clothing/mask/gas/voice/clown(src) + new /obj/item/radio/headset/headset_service(src) + new /obj/item/pda/clown(src) + new /obj/item/reagent_containers/food/snacks/grown/banana(src) + new /obj/item/stamp/clown(src) + new /obj/item/toy/crayon/rainbow(src) + new /obj/item/storage/fancy/crayons(src) + new /obj/item/reagent_containers/spray/waterflower(src) + new /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana(src) + new /obj/item/instrument/bikehorn(src) + new /obj/item/bikehorn(src) + /obj/item/storage/backpack/mime name = "Parcel Parceaux" desc = "A silent backpack made for those silent workers. Silence Co." diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index bb78ba208ec..0a256136d2e 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -74,9 +74,7 @@ overlays += image('icons/obj/storage.dmi', icon_locking) locked = 0 if(istype(weapon, /obj/item/melee/energy/blade)) - var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread() - spark_system.set_up(5, 0, src.loc) - spark_system.start() + do_sparks(5, 0, loc) playsound(loc, 'sound/weapons/blade1.ogg', 50, 1) playsound(loc, "sparks", 50, 1) to_chat(user, "You slice through the lock on [src].") diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 4defb3b4aae..be803058ea7 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -100,6 +100,8 @@ return L /obj/item/storage/proc/show_to(mob/user as mob) + if(!user.client) + return if(user.s_active != src) for(var/obj/item/I in src) if(I.on_found(user)) diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 56bf5538b02..b9d383b9308 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -139,12 +139,15 @@ /obj/item/melee/baton/proc/baton_stun(mob/living/L, mob/user) + if(!ismob(L)) //because this was being called on turfs for some reason + return + if(ishuman(L)) var/mob/living/carbon/human/H = L if(H.check_shields(0, "[user]'s [name]", src, MELEE_ATTACK)) //No message; check_shields() handles that playsound(L, 'sound/weapons/Genhit.ogg', 50, 1) return - + L.Stun(stunforce) L.Weaken(stunforce) L.apply_effect(STUTTER, stunforce) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 08a6a3e168c..b30d932eed2 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -120,7 +120,7 @@ name = "screwdriver" desc = "You can be totally screwy with this." icon = 'icons/obj/tools.dmi' - icon_state = null + icon_state = "screwdriver_map" flags = CONDUCT slot_flags = SLOT_BELT force = 5 @@ -133,6 +133,7 @@ hitsound = 'sound/weapons/bladeslice.ogg' usesound = 'sound/items/Screwdriver.ogg' toolspeed = 1 + var/random_color = TRUE //if the screwdriver uses random coloring /obj/item/screwdriver/nuke name = "screwdriver" @@ -146,7 +147,7 @@ /obj/item/screwdriver/New(loc, var/param_color = null) ..() - if(!icon_state) + if(random_color) if(!param_color) param_color = pick("red","blue","pink","brown","green","cyan","yellow") icon_state = "screwdriver_[param_color]" @@ -168,6 +169,7 @@ desc = "A screwdriver made of brass. The handle feels freezing cold." icon_state = "screwdriver_brass" toolspeed = 0.5 + random_color = FALSE /obj/item/screwdriver/abductor name = "alien screwdriver" @@ -176,6 +178,7 @@ icon_state = "screwdriver" usesound = 'sound/items/PSHOOM.ogg' toolspeed = 0.1 + random_color = FALSE /obj/item/screwdriver/power name = "hand drill" @@ -192,6 +195,7 @@ hitsound = 'sound/items/drill_hit.ogg' usesound = 'sound/items/drill_use.ogg' toolspeed = 0.25 + random_color = FALSE /obj/item/screwdriver/power/suicide_act(mob/user) user.visible_message("[user] is putting [src] to [user.p_their()] temple. It looks like [user.p_theyre()] trying to commit suicide!") @@ -215,7 +219,7 @@ name = "wirecutters" desc = "This cuts wires." icon = 'icons/obj/tools.dmi' - icon_state = null + icon_state = "cutters" flags = CONDUCT slot_flags = SLOT_BELT force = 6 @@ -229,10 +233,11 @@ usesound = 'sound/items/Wirecutter.ogg' sharp = 1 toolspeed = 1 + var/random_color = TRUE /obj/item/wirecutters/New(loc, param_color = null) ..() - if(!icon_state) + if(random_color) if(!param_color) param_color = pick("yellow", "red") icon_state = "cutters_[param_color]" @@ -258,6 +263,7 @@ desc = "A pair of wirecutters made of brass. The handle feels freezing cold to the touch." icon_state = "cutters_brass" toolspeed = 0.5 + random_color = FALSE /obj/item/wirecutters/abductor name = "alien wirecutters" @@ -266,6 +272,7 @@ icon_state = "cutters" toolspeed = 0.1 origin_tech = "materials=5;engineering=4;abductor=3" + random_color = FALSE /obj/item/wirecutters/cyborg name = "wirecutters" @@ -281,6 +288,7 @@ materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) usesound = 'sound/items/jaws_cut.ogg' toolspeed = 0.25 + random_color = FALSE /obj/item/wirecutters/power/suicide_act(mob/user) user.visible_message("[user] is wrapping \the [src] around [user.p_their()] neck. It looks like [user.p_theyre()] trying to rip [user.p_their()] head off!") diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 9b50956f1af..9418df86368 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -614,9 +614,7 @@ origin_tech = "combat=4;powerstorage=7" /obj/item/twohanded/mjollnir/proc/shock(mob/living/target) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread() - s.set_up(5, 1, target.loc) - s.start() + do_sparks(5, 1, target.loc) target.visible_message("[target.name] was shocked by the [name]!", \ "You feel a powerful shock course through your body sending you flying!", \ "You hear a heavy electrical crack!") @@ -739,9 +737,7 @@ Z.take_organ_damage(0, 30) user.visible_message("[user] slams the charged axe into [Z.name] with all [user.p_their()] might!") playsound(loc, 'sound/magic/lightningbolt.ogg', 5, 1) - var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread - sparks.set_up(1, 1, src) - sparks.start() + do_sparks(1, 1, src) if(A && wielded && (istype(A, /obj/structure/window) || istype(A, /obj/structure/grille))) if(istype(A, /obj/structure/window)) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 2f681c79d76..8e328c9400e 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -206,9 +206,7 @@ if(!(E.rcell && E.rcell.use(E.chargecost))) to_chat(user, "Unable to teleport, insufficient charge.") return - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, 1, src) do_teleport(src, E.pad, 0) to_chat(user, "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left.") return @@ -233,9 +231,7 @@ if(!(E.rcell && E.rcell.use(E.chargecost))) to_chat(user, "Unable to teleport, insufficient charge.") return - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, 1, src) do_teleport(src, L) to_chat(user, "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left.") return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 2a5639eb081..b5b29e8caac 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -253,6 +253,7 @@ new /obj/item/clothing/accessory/holster(src) new /obj/item/clothing/accessory/blue(src) new /obj/item/clothing/shoes/jackboots/jacksandals(src) + new /obj/item/clothing/under/rank/centcom/blueshield(src) /obj/structure/closet/secure_closet/ntrep diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 648f3c95622..87cae2fb993 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -38,15 +38,13 @@ if(isliving(usr)) var/mob/living/L = usr if(L.electrocute_act(17, src)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, 1, src) return 2 playsound(src.loc, 'sound/machines/click.ogg', 15, 1, -3) for(var/obj/O in src) //Objects - O.forceMove(loc) - for(var/mob/M in src) //Mobs + O.forceMove(loc) + for(var/mob/M in src) //Mobs M.forceMove(loc) icon_state = icon_opened src.opened = 1 @@ -115,9 +113,7 @@ if(!(E.rcell && E.rcell.use(E.chargecost))) to_chat(user, "Unable to teleport, insufficient charge.") return - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, 1, src) do_teleport(src, E.pad, 0) to_chat(user, "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left.") return @@ -139,9 +135,7 @@ if(!(E.rcell && E.rcell.use(E.chargecost))) to_chat(user, "Unable to teleport, insufficient charge.") return - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, 1, src) do_teleport(src, L) to_chat(user, "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left.") return @@ -217,9 +211,7 @@ if(isliving(user)) var/mob/living/L = user if(L.electrocute_act(17, src)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, 1, src) return src.add_fingerprint(user) src.toggle(user) diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm index 348c6fde265..dcbc7c017bb 100644 --- a/code/game/objects/structures/electricchair.dm +++ b/code/game/objects/structures/electricchair.dm @@ -69,9 +69,7 @@ A.updateicon() flick("echair_shock", src) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(12, 1, src) - s.start() + do_sparks(12, 1, src) visible_message("The electric chair went off!", "You hear a deep sharp shock!") if(buckled_mob) buckled_mob.electrocute_act(110, src, 1) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 6b8f5544428..22b796c4c20 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -254,9 +254,7 @@ var/obj/structure/cable/C = T.get_cable_node() if(C) if(electrocute_mob(user, C, src)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) return 1 else return 0 diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 44c9da74b20..7cee3769888 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -6,29 +6,44 @@ FLOOR SAFES //SAFES /obj/structure/safe - name = "safe" + name = "\improper Safe" desc = "A huge chunk of metal with a dial embedded in it. Fine print on the dial reads \"Scarborough Arms - 2 tumbler safe, guaranteed thermite resistant, explosion resistant, and assistant resistant.\"" icon = 'icons/obj/structures.dmi' icon_state = "safe" anchored = 1 density = 1 - var/open = 0 //is the safe open? + var/open = FALSE //is the safe open? + var/unlocked = FALSE var/tumbler_1_pos //the tumbler position- from 0 to 72 var/tumbler_1_open //the tumbler position to open at- 0 to 72 var/tumbler_2_pos var/tumbler_2_open + var/open_pos var/dial = 0 //where is the dial pointing? var/space = 0 //the combined w_class of everything in the safe var/maxspace = 24 //the maximum combined w_class of stuff in the safe + var/combo_to_open //so admins know the code /obj/structure/safe/New() - tumbler_1_pos = rand(0, 71) - tumbler_1_open = rand(0, 71) + tumbler_2_pos = rand(0, 99) // first value in the combination set first + tumbler_2_open = rand(0, 99) - tumbler_2_pos = rand(0, 71) - tumbler_2_open = rand(0, 71) + tumbler_1_pos = rand(0, 99) + do + tumbler_1_open = rand(0, 99) + while(tumbler_1_open > Wrap(tumbler_2_open +48, 0, 100) && tumbler_1_open < Wrap(tumbler_2_open + 53, 0, 100)) // prevents a combination that wont open + do + open_pos = rand(0,99) + while(open_pos > Wrap(tumbler_1_open - 2, 0, 100) && open_pos < Wrap(tumbler_1_open + 2, 0, 100)) // prevents a combination that wont open + var/num1 = tumbler_2_open + 54 + if(num1 > 99) + num1 = num1 - 100 + var/num2 = tumbler_1_open + 98 + if(num2 > 99) + num2 = num2 - 100 + combo_to_open = "Go right past [num1] twice then stop at [num1]. Go left past [num2] once then stop at [num2]. Turn right till it stops and its open." /obj/structure/safe/Initialize() ..() @@ -40,31 +55,28 @@ FLOOR SAFES I.loc = src -/obj/structure/safe/proc/check_unlocked(mob/user, canhear) +/obj/structure/safe/proc/check_unlocked() + if(tumbler_1_pos == tumbler_1_open && tumbler_2_pos == tumbler_2_open && dial == open_pos) + unlocked = TRUE + return TRUE + unlocked = FALSE + return FALSE + +/obj/structure/safe/proc/make_noise(turns, turns_total, tum1 = 0, tum2 = 0, mob/user, canhear) if(user && canhear) - if(tumbler_1_pos == tumbler_1_open) + if(turns == 2) + to_chat(user, "The sounds from [src] are too fast and blend together.") + if(tum1 && (turns_total == 1 || prob(10))) // So multi turns dont super spam the chat + to_chat(user, "You hear a [pick("clack", "scrape", "clank")] from [src].") + if(tum2 && (turns_total == 1 || prob(10))) // So multi turns dont super spam the chat + to_chat(user, "You hear a [pick("click", "chink", "clink")] from [src].") + if(tumbler_1_pos == tumbler_1_open && turns_total == 1) // You cant hear tumblers if you spin fast! to_chat(user, "You hear a [pick("tonk", "krunk", "plunk")] from [src].") - if(tumbler_2_pos == tumbler_2_open) + if(tumbler_2_pos == tumbler_2_open && turns_total == 1 ) // You cant hear tumblers if you spin fast! to_chat(user, "You hear a [pick("tink", "krink", "plink")] from [src].") - if(tumbler_1_pos == tumbler_1_open && tumbler_2_pos == tumbler_2_open) - if(user) visible_message("[pick("Spring", "Sprang", "Sproing", "Clunk", "Krunk")]!") - return 1 - return 0 - - -/obj/structure/safe/proc/decrement(num) - num -= 1 - if(num < 0) - num = 71 - return num - - -/obj/structure/safe/proc/increment(num) - num += 1 - if(num > 71) - num = 0 - return num - + if(unlocked) + if(user) + visible_message("[pick("Spring", "Sprang", "Sproing", "Clunk", "Krunk")]!") /obj/structure/safe/update_icon() if(open) @@ -72,75 +84,112 @@ FLOOR SAFES else icon_state = initial(icon_state) - /obj/structure/safe/attack_hand(mob/user) - user.set_machine(src) - var/dat = "
" - dat += "[open ? "Close" : "Open"] [src] | - [dial * 5] +" + if(..()) + return TRUE + ui_interact(user) + return + +/obj/structure/safe/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) + ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "safe.tmpl", name, 600, 750) + ui.open() + ui.set_auto_update(1) + +/obj/structure/safe/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state) + var/data[0] + var/list/contents_names = list() if(open) - dat += "" - for(var/i = contents.len, i>=1, i--) - var/obj/item/P = contents[i] - dat += "" - dat += "
[P.name]
" - user << browse("[name][dat]", "window=safe;size=350x300") + for(var/obj/O in contents) + contents_names[++contents_names.len] = list("name" = O.name, "index" = contents.Find(O), "sprite" = O.icon_state) + user << browse_rsc(icon(O.icon, O.icon_state), "[O.icon_state].png") + else + contents_names = list(list("name" = "you're"), list("name" = "a"), list("name" = "cheater")) + + data["dial"] = dial + data["open"] = open + data["unlocked"] = unlocked + data["rotation"] = "[-dial*3.6]deg" + data["contents"] = contents_names + + return data /obj/structure/safe/Topic(href, href_list) - if(!ishuman(usr)) return - var/mob/living/carbon/human/user = usr + if(..()) + return TRUE var/canhear = 0 + if(!ishuman(usr)) + to_chat(usr, "You don't have hands to operate the safe!") + return FALSE + + var/mob/living/carbon/human/user = usr if(istype(user.l_hand, /obj/item/clothing/accessory/stethoscope) || istype(user.r_hand, /obj/item/clothing/accessory/stethoscope)) canhear = 1 if(href_list["open"]) - if(check_unlocked()) + if(check_unlocked() || open) to_chat(user, "You [open ? "close" : "open"] [src].") open = !open update_icon() - updateUsrDialog() - return else - to_chat(user, "You can't [open ? "close" : "open"] [src], the lock is engaged!") - return + to_chat(user, "You can't open [src], the lock is engaged!") + .= TRUE + SSnanoui.update_uis(src) if(href_list["decrement"]) - dial = decrement(dial) - if(dial == tumbler_1_pos + 1 || dial == tumbler_1_pos - 71) - tumbler_1_pos = decrement(tumbler_1_pos) - if(canhear) - to_chat(user, "You hear a [pick("clack", "scrape", "clank")] from [src].") - if(tumbler_1_pos == tumbler_2_pos + 37 || tumbler_1_pos == tumbler_2_pos - 35) - tumbler_2_pos = decrement(tumbler_2_pos) - if(canhear) - to_chat(user, "You hear a [pick("click", "chink", "clink")] from [src].") - check_unlocked(user, canhear) - updateUsrDialog() - return + var/ticks = text2num(href_list["decrement"]) + if(open) + return + for(var/i=1 to ticks) + if(!check_unlocked()) + dial = Wrap(dial - 1, 0 ,100) + if(dial == tumbler_1_pos + 1 || dial == tumbler_1_pos - 99) + tumbler_1_pos = Wrap(tumbler_1_pos - 1, 0, 100) + make_noise(i, ticks, 1, 0, user, canhear) + if(tumbler_1_pos == tumbler_2_pos + 51 || tumbler_1_pos == tumbler_2_pos - 49) + tumbler_2_pos = Wrap(tumbler_2_pos - 1, 0, 100) + make_noise(0, ticks, 0, 1, user, canhear) + sleep(1) + check_unlocked() + SSnanoui.update_uis(src) + make_noise(0, 0, 0, 0, user, canhear) + .= TRUE if(href_list["increment"]) - dial = increment(dial) - if(dial == tumbler_1_pos - 1 || dial == tumbler_1_pos + 71) - tumbler_1_pos = increment(tumbler_1_pos) - if(canhear) - to_chat(user, "You hear a [pick("clack", "scrape", "clank")] from [src].") - if(tumbler_1_pos == tumbler_2_pos - 37 || tumbler_1_pos == tumbler_2_pos + 35) - tumbler_2_pos = increment(tumbler_2_pos) - if(canhear) - to_chat(user, "You hear a [pick("click", "chink", "clink")] from [src].") - check_unlocked(user, canhear) - updateUsrDialog() - return + var/ticks = text2num(href_list["increment"]) + if(open) + return + for(var/i=1 to ticks) + check_unlocked() + dial = Wrap(dial + 1, 0, 100) + if(dial == tumbler_1_pos - 1 || dial == tumbler_1_pos + 99) + tumbler_1_pos = Wrap(tumbler_1_pos + 1, 0, 100) + make_noise(i, ticks, 1, 0, user, canhear) + if(tumbler_1_pos == tumbler_2_pos - 51 || tumbler_1_pos == tumbler_2_pos + 49) + tumbler_2_pos = Wrap(tumbler_2_pos + 1, 0, 100) + make_noise(0, ticks, 0, 1, user, canhear) + sleep(1) + SSnanoui.update_uis(src) + make_noise(0, 0, 0, 0, user, canhear) + .= TRUE if(href_list["retrieve"]) - user << browse("", "window=safe") // Close the menu + var/index = text2num(href_list["retrieve"]) + if(index > 0 && index <= contents.len) + var/obj/item/P = contents[index] + if(open) + if(P && in_range(src, user)) + user.put_in_hands(P) + space -= P.w_class + SSnanoui.update_uis(src) + .= TRUE - var/obj/item/P = locate(href_list["retrieve"]) in src - if(open) - if(P && in_range(src, user)) - user.put_in_hands(P) - updateUsrDialog() + + updateUsrDialog() + return /obj/structure/safe/attackby(obj/item/I, mob/user, params) @@ -161,14 +210,19 @@ FLOOR SAFES if(istype(I, /obj/item/clothing/accessory/stethoscope)) to_chat(user, "Hold [I] in one of your hands while you manipulate the dial!") return + else + to_chat(user, "You can't put [I] in into the safe while it is closed!") + return -obj/structure/safe/blob_act() +/obj/structure/safe/blob_act() return -obj/structure/safe/ex_act(severity) +/obj/structure/safe/ex_act(severity) return +/obj/structure/safe/examine_status(mob/user) + return //FLOOR SAFES /obj/structure/safe/floor diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index 2d122921b12..14ef2b08f2b 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -184,17 +184,17 @@ burn = TRUE if(burn) if(Proj.firer) - message_admins("Plasma statue ignited by [key_name_admin(Proj.firer)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) + message_admins("Plasma statue ignited by [key_name_admin(Proj.firer)]([ADMIN_QUE(Proj.firer,"?")]) ([ADMIN_FLW(Proj.firer,"FLW")]) in ([x],[y],[z] - JMP)",0,1) log_game("Plasma statue ignited by [key_name(Proj.firer)] in ([x],[y],[z])") investigate_log("was ignited by [key_name(Proj.firer)]","atmos") else - message_admins("Plasma statue ignited by [Proj]. No known firer.(?) (FLW) in ([x],[y],[z] - JMP)",0,1) + message_admins("Plasma statue ignited by [Proj]. No known firer.([ADMIN_QUE(Proj.firer,"?")]) ([ADMIN_FLW(Proj.firer,"FLW")]) in ([x],[y],[z] - JMP)",0,1) log_game("Plasma statue ignited by [Proj] in ([x],[y],[z]). No known firer.") ..() /obj/structure/statue/plasma/attackby(obj/item/W, mob/user, params) if(is_hot(W) > 300)//If the temperature of the object is over 300, then ignite - message_admins("Plasma statue ignited by [key_name_admin(user)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) + message_admins("Plasma statue ignited by [key_name_admin(user)]([ADMIN_QUE(user,"?")]) ([ADMIN_FLW(user,"FLW")]) in ([x],[y],[z] - JMP)",0,1) log_game("Plasma statue ignited by [key_name(user)] in ([x],[y],[z])") investigate_log("was ignited by [key_name(user)]","atmos") ignite(is_hot(W)) diff --git a/code/game/sound.dm b/code/game/sound.dm index c791d3eebb5..ed42af1223f 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -146,4 +146,7 @@ 'sound/machines/terminal_button07.ogg', 'sound/machines/terminal_button08.ogg') if("growls") soundin = pick('sound/goonstation/voice/growl1.ogg', 'sound/goonstation/voice/growl2.ogg', 'sound/goonstation/voice/growl3.ogg') + + if("bonebreak") + soundin = pick('sound/effects/bone_break_1.ogg', 'sound/effects/bone_break_2.ogg', 'sound/effects/bone_break_3.ogg', 'sound/effects/bone_break_4.ogg', 'sound/effects/bone_break_5.ogg', 'sound/effects/bone_break_6.ogg') return soundin diff --git a/code/game/turfs/simulated/floor/mineral.dm b/code/game/turfs/simulated/floor/mineral.dm index d2e147d9532..f5a07bf9241 100644 --- a/code/game/turfs/simulated/floor/mineral.dm +++ b/code/game/turfs/simulated/floor/mineral.dm @@ -38,7 +38,7 @@ /turf/simulated/floor/mineral/plasma/attackby(obj/item/W, mob/user, params) if(is_hot(W) > 300)//If the temperature of the object is over 300, then ignite - message_admins("Plasma flooring was ignited by [key_name_admin(user)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) + message_admins("Plasma flooring was ignited by [key_name_admin(user)]([ADMIN_QUE(user,"?")]) ([ADMIN_FLW(user,"FLW")]) in ([x],[y],[z] - JMP)",0,1) log_game("Plasma flooring was ignited by [key_name(user)] in ([x],[y],[z])") investigate_log("was ignited by [key_name(user)]","atmos") ignite(is_hot(W)) diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm index fa65fffbce9..8a322edd2f8 100644 --- a/code/game/verbs/who.dm +++ b/code/game/verbs/who.dm @@ -47,7 +47,7 @@ if(is_special_character(C.mob)) entry += " - Antagonist" - entry += " (?)" + entry += " ([ADMIN_QUE(C.mob,"?")])" Lines += entry else for(var/client/C in GLOB.clients) diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index 1b3b2edcf3d..ec9fa9af05e 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -11,7 +11,7 @@ world/IsBanned(key,address,computer_id) var/ckey = ckey(key) if((ckey in admin_datums) || (ckey in GLOB.deadmins)) var/datum/admins/A = admin_datums[ckey] - if(A.rights & R_ADMIN) + if(A && (A.rights & R_ADMIN)) admin = 1 //Guest Checking diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 4382c36b58a..2c16a0feb49 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -53,13 +53,13 @@ var/global/nologevent = 0 if(istype(M, /mob/new_player)) body += " Hasn't Entered Game " else - body += " \[Heal\] " + body += " \[Heal\] " body += "

\[ " body += "VV - " - body += "TP - " - body += "PM - " - body += "SM - " + body += "[ADMIN_TP(M,"TP")] - " + body += "PM - " + body += "[ADMIN_SM(M,"SM")] - " if(ishuman(M) && M.mind) body += "HM -" body += "[admin_jump_link(M)]\]

" @@ -70,45 +70,45 @@ var/global/nologevent = 0 if(M.client.related_accounts_ip.len) body += "Related accounts by IP: [jointext(M.client.related_accounts_ip, " - ")]

" - body += "Kick | " + body += "Kick | " body += "Warn | " - body += "Ban | " - body += "Jobban | " - body += "Appearance Ban | " + body += "Ban | " + body += "Jobban | " + body += "Appearance Ban | " body += "Notes | " if(M.client) if(M.client.check_watchlist(M.client.ckey)) body += "Remove from Watchlist | " body += "Edit Watchlist Reason " else - body += "Add to Watchlist " + body += "Add to Watchlist " if(M.client) - body += "| Prison | " - body += "\ Send back to Lobby | " + body += "| Prison | " + body += "\ Send back to Lobby | " var/muted = M.client.prefs.muted body += {"
Mute: - \[IC | - OOC | - PRAY | - ADMINHELP | - DEADCHAT\] - (toggle all) + \[IC | + OOC | + PRAY | + ADMINHELP | + DEADCHAT\] + (toggle all) "} var/jumptoeye = "" if(isAI(M)) var/mob/living/silicon/ai/A = M if(A.client && A.eyeobj) // No point following clientless AI eyes - jumptoeye = " (Eye)" + jumptoeye = " (Eye)" body += {"

- Jump to[jumptoeye] | - Get | - Send To + Jump to[jumptoeye] | + Get | + Send To

- [check_rights(R_ADMIN,0) ? "Traitor panel | " : "" ] - Narrate to | - Subtle message + [check_rights(R_ADMIN,0) ? "[ADMIN_TP(M,"Traitor panel")] | " : "" ] + Narrate to | + [ADMIN_SM(M,"Subtle message")] "} if(check_rights(R_EVENT, 0)) @@ -128,39 +128,39 @@ var/global/nologevent = 0 if(issmall(M)) body += "Monkeyized | " else - body += "Monkeyize | " + body += "Monkeyize | " //Corgi if(iscorgi(M)) body += "Corgized | " else - body += "Corgize | " + body += "Corgize | " //AI / Cyborg if(isAI(M)) body += "Is an AI " else if(ishuman(M)) - body += {"Make AI | - Make Mask | - Make Robot | - Make Alien | - Make Slime | - Make Superhero + body += {"Make AI | + Make Mask | + Make Robot | + Make Alien | + Make Slime | + Make Superhero "} //Simple Animals if(isanimal(M)) - body += "Re-Animalize | " + body += "Re-Animalize | " else - body += "Animalize | " + body += "Animalize | " if(istype(M, /mob/dead/observer)) - body += "Re-incarnate | " + body += "Re-incarnate | " if(ispAI(M)) body += "Is a pAI " else - body += "Make pAI | " + body += "Make pAI | " // DNA2 - Admin Hax if(M.dna && iscarbon(M)) @@ -175,7 +175,7 @@ var/global/nologevent = 0 if(bname) var/bstate=M.dna.GetSEState(block) var/bcolor="[(bstate)?"#006600":"#ff0000"]" - body += "[bname][block]" + body += "[bname][block]" else body += "[block]" body+="" @@ -183,39 +183,39 @@ var/global/nologevent = 0 body += {"

Rudimentary transformation:
These transformations only create a new mob type and copy stuff over. They do not take into account MMIs and similar mob-specific things. The buttons in 'Transformations' are preferred, when possible.

- Observer | - \[ Alien: Drone, - Hunter, - Queen, - Sentinel, - Larva \] - Human - \[ slime: Baby, - Adult \] - Monkey | - Cyborg | - Cat | - Runtime | - Corgi | - Ian | - Crab | - Coffee | - \[ Construct: Armoured , - Builder , - Wraith \] - Shade + Observer | + \[ Alien: Drone, + Hunter, + Queen, + Sentinel, + Larva \] + Human + \[ slime: Baby, + Adult \] + Monkey | + Cyborg | + Cat | + Runtime | + Corgi | + Ian | + Crab | + Coffee | + \[ Construct: Armoured , + Builder , + Wraith \] + Shade "} if(M.client) body += {"

Other actions:
- Forcesay | - Admin Room | - Thunderdome 1 | - Thunderdome 2 | - Thunderdome Admin | - Thunderdome Observer | + Forcesay | + Admin Room | + Thunderdome 1 | + Thunderdome 2 | + Thunderdome Admin | + Thunderdome Observer | "} body += {"
@@ -953,7 +953,7 @@ var/gamma_ship_location = 1 // 0 = station , 1 = space return "[A.name] - [loc.x],[loc.y],[loc.z]" /proc/formatPlayerPanel(var/mob/U,var/text="PP") - return "[text]" + return "[ADMIN_PP(U,"[text]")]" //Kicks all the clients currently in the lobby. The second parameter (kick_only_afk) determins if an is_afk() check is ran, or if all clients are kicked //defaults to kicking everyone (afk + non afk clients in the lobby) diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 9a39c51d971..8c83961d8ad 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -61,7 +61,7 @@ } - function expand(id,job,name,real_name,image,key,ip,antagonist,ref,eyeref){ + function expand(id,job,name,real_name,image,key,ip,antagonist,UID,eyeUID){ clearAll(); @@ -75,15 +75,15 @@ body += ""; - body += "PP - " + body += "PP - " body += "N - " - body += "VV - " - body += "TP - " - body += "PM - " - body += "SM - " - body += "FLW" - if(eyeref) - body += "|EYE" + body += "VV - " + body += "TP - " + body += "PM - " + body += "SM - " + body += "FLW" + if(eyeUID) + body += "|EYE" body += "
" if(antagonist > 0) body += "Antagonist"; @@ -288,11 +288,11 @@ M_key = replacetext(M_key, "\"", "") M_key = replacetext(M_key, "\\", "") - var/M_eyeref = "" + var/M_eyeUID = "" if(isAI(M)) var/mob/living/silicon/ai/A = M if(A.client && A.eyeobj) // No point following clientless AI eyes - M_eyeref = "\ref[A.eyeobj]" + M_eyeUID = "[A.eyeobj.UID()]" //output for each mob dat += {" @@ -300,7 +300,7 @@ [M_name] - [M_rname] - [M_key] ([M_job]) @@ -370,16 +370,16 @@ dat += {"[(M.client ? "[M.client]" : "No client")] - X - PM + X + PM "} switch(is_special_character(M)) if(0) - dat += {"Traitor?"} + dat += {"Traitor?"} if(1) - dat += {"Traitor?"} + dat += {"Traitor?"} if(2) - dat += {"Traitor?"} + dat += {"Traitor?"} dat += "" @@ -397,8 +397,8 @@ if(!dname) dname = M - return {"[dname][caption][logout_status][M.stat == 2 ? " (DEAD)" : ""] - PM[close ? "" : ""]"} + return {"[dname][caption][logout_status][M.stat == 2 ? " (DEAD)" : ""] + PM[close ? "" : ""]"} /datum/admins/proc/check_antagonists() if(!check_rights(R_ADMIN)) return @@ -433,7 +433,7 @@ while(!istype(disk_loc, /turf)) if(istype(disk_loc, /mob)) var/mob/M = disk_loc - dat += "carried by [M.real_name] " + dat += "carried by [M.real_name] " if(istype(disk_loc, /obj)) var/obj/O = disk_loc dat += "in \a [O.name] " @@ -472,7 +472,7 @@ for(var/datum/mind/blob in mode.infected_crew) var/mob/M = blob.current if(M) - dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "[ADMIN_PP(M,"[M.real_name]")][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" else dat += "Blob not found!" @@ -563,7 +563,7 @@ if(show_objectives) txt += {" - Show Objective + Show Objective "} diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 4edd7e709ab..3df28fdf505 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -13,7 +13,7 @@ if(href_list["rejectadminhelp"]) if(!check_rights(R_ADMIN|R_MOD)) return - var/client/C = locate(href_list["rejectadminhelp"]) + var/client/C = locateUID(href_list["rejectadminhelp"]) if(!C) return @@ -317,7 +317,7 @@ else if(href_list["simplemake"]) if(!check_rights(R_SPAWN)) return - var/mob/M = locate(href_list["mob"]) + var/mob/M = locateUID(href_list["mob"]) if(!ismob(M)) to_chat(usr, "This can only be used on instances of type /mob") return @@ -426,7 +426,7 @@ else if(href_list["appearanceban"]) if(!check_rights(R_BAN)) return - var/mob/M = locate(href_list["appearanceban"]) + var/mob/M = locateUID(href_list["appearanceban"]) if(!ismob(M)) to_chat(usr, "This can only be used on instances of type /mob") return @@ -475,7 +475,7 @@ else if(href_list["jobban2"]) // if(!check_rights(R_BAN)) return - var/mob/M = locate(href_list["jobban2"]) + var/mob/M = locateUID(href_list["jobban2"]) if(!ismob(M)) to_chat(usr, "This can only be used on instances of type /mob") return @@ -501,17 +501,17 @@ //Regular jobs //Command (Blue) jobs += "" - jobs += "" + jobs += "" for(var/jobPos in command_positions) if(!jobPos) continue var/datum/job/job = job_master.GetJob(jobPos) if(!job) continue if(jobban_isbanned(M, job.title)) - jobs += "" + jobs += "" counter++ else - jobs += "" + jobs += "" counter++ if(counter >= 6) //So things dont get squiiiiished! @@ -522,17 +522,17 @@ //Security (Red) counter = 0 jobs += "
Command Positions
Command Positions
[replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")]
" - jobs += "" + jobs += "" for(var/jobPos in security_positions) if(!jobPos) continue var/datum/job/job = job_master.GetJob(jobPos) if(!job) continue if(jobban_isbanned(M, job.title)) - jobs += "" + jobs += "" counter++ else - jobs += "" + jobs += "" counter++ if(counter >= 5) //So things dont get squiiiiished! @@ -543,17 +543,17 @@ //Engineering (Yellow) counter = 0 jobs += "
Security Positions
Security Positions
[replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")]
" - jobs += "" + jobs += "" for(var/jobPos in engineering_positions) if(!jobPos) continue var/datum/job/job = job_master.GetJob(jobPos) if(!job) continue if(jobban_isbanned(M, job.title)) - jobs += "" + jobs += "" counter++ else - jobs += "" + jobs += "" counter++ if(counter >= 5) //So things dont get squiiiiished! @@ -564,17 +564,17 @@ //Medical (White) counter = 0 jobs += "
Engineering Positions
Engineering Positions
[replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")]
" - jobs += "" + jobs += "" for(var/jobPos in medical_positions) if(!jobPos) continue var/datum/job/job = job_master.GetJob(jobPos) if(!job) continue if(jobban_isbanned(M, job.title)) - jobs += "" + jobs += "" counter++ else - jobs += "" + jobs += "" counter++ if(counter >= 5) //So things dont get squiiiiished! @@ -585,17 +585,17 @@ //Science (Purple) counter = 0 jobs += "
Medical Positions
Medical Positions
[replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")]
" - jobs += "" + jobs += "" for(var/jobPos in science_positions) if(!jobPos) continue var/datum/job/job = job_master.GetJob(jobPos) if(!job) continue if(jobban_isbanned(M, job.title)) - jobs += "" + jobs += "" counter++ else - jobs += "" + jobs += "" counter++ if(counter >= 5) //So things dont get squiiiiished! @@ -606,17 +606,17 @@ //Support (Grey) counter = 0 jobs += "
Science Positions
Science Positions
[replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")]
" - jobs += "" + jobs += "" for(var/jobPos in support_positions) if(!jobPos) continue var/datum/job/job = job_master.GetJob(jobPos) if(!job) continue if(jobban_isbanned(M, job.title)) - jobs += "" + jobs += "" counter++ else - jobs += "" + jobs += "" counter++ if(counter >= 5) //So things dont get squiiiiished! @@ -627,17 +627,17 @@ //Non-Human (Green) counter = 0 jobs += "
Support Positions
Support Positions
[replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")]
" - jobs += "" + jobs += "" for(var/jobPos in nonhuman_positions) if(!jobPos) continue var/datum/job/job = job_master.GetJob(jobPos) if(!job) continue if(jobban_isbanned(M, job.title)) - jobs += "" + jobs += "" counter++ else - jobs += "" + jobs += "" counter++ if(counter >= 5) //So things dont get squiiiiished! @@ -646,29 +646,29 @@ //Drone if(jobban_isbanned(M, "Drone")) - jobs += "" + jobs += "" else - jobs += "" + jobs += "" //pAI if(jobban_isbanned(M, "pAI")) - jobs += "" + jobs += "" else - jobs += "" + jobs += "" jobs += "
Non-human Positions
Non-human Positions
[replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")]DroneDroneDroneDronepAIpAIpAIpAI
" //Antagonist (Orange) var/isbanned_dept = jobban_isbanned(M, "Syndicate") jobs += "" - jobs += "" + jobs += "" counter = 0 for(var/role in antag_roles) if(jobban_isbanned(M, role) || isbanned_dept) - jobs += "" + jobs += "" else - jobs += "" + jobs += "" counter++ if(counter >= 5) //So things dont get squiiiiished! @@ -683,9 +683,9 @@ counter = 0 for(var/role in other_roles) if(jobban_isbanned(M, role) || isbanned_dept) - jobs += "" + jobs += "" else - jobs += "" + jobs += "" counter++ if(counter >= 5) //So things dont get squiiiiished! @@ -696,17 +696,17 @@ //Whitelisted positions counter = 0 jobs += "
Antagonist Positions
Antagonist Positions
[replacetext(role, " ", " ")][replacetext(role, " ", " ")][replacetext(role, " ", " ")][replacetext(role, " ", " ")][replacetext(role, " ", " ")][replacetext(role, " ", " ")][replacetext(role, " ", " ")][replacetext(role, " ", " ")]
" - jobs += "" + jobs += "" for(var/jobPos in whitelisted_positions) if(!jobPos) continue var/datum/job/job = job_master.GetJob(jobPos) if(!job) continue if(jobban_isbanned(M, job.title)) - jobs += "" + jobs += "" counter++ else - jobs += "" + jobs += "" counter++ if(counter >= 5) //So things dont get squiiiiished! @@ -723,7 +723,7 @@ else if(href_list["jobban3"]) if(!check_rights(R_BAN)) return - var/mob/M = locate(href_list["jobban4"]) + var/mob/M = locateUID(href_list["jobban4"]) if(!ismob(M)) to_chat(usr, "This can only be used on instances of type /mob") return @@ -885,10 +885,10 @@ return 0 //we didn't do anything! else if(href_list["boot2"]) - var/mob/M = locate(href_list["boot2"]) + var/mob/M = locateUID(href_list["boot2"]) if(ismob(M)) if(M.client && M.client.holder && (M.client.holder.rights & R_BAN)) - to_chat(src, "[key_name_admin(M)] cannot be kicked from the server.") + to_chat(usr, "[key_name_admin(M)] cannot be kicked from the server.") return to_chat(M, "You have been kicked from the server") log_admin("[key_name(usr)] booted [key_name(M)].") @@ -958,7 +958,7 @@ else if(href_list["newban"]) if(!check_rights(R_BAN)) return - var/mob/M = locate(href_list["newban"]) + var/mob/M = locateUID(href_list["newban"]) if(!ismob(M)) return switch(alert("Temporary Ban?",,"Yes","No", "Cancel")) @@ -1016,7 +1016,7 @@ //Watchlist else if(href_list["watchadd"]) - var/target_ckey = locate(href_list["watchadd"]) + var/target_ckey = href_list["watchadd"] usr.client.watchlist_add(target_ckey) else if(href_list["watchremove"]) @@ -1062,7 +1062,7 @@ if(!check_rights(R_ADMIN|R_MOD)) return - var/mob/M = locate(href_list["mute"]) + var/mob/M = locateUID(href_list["mute"]) if(!ismob(M)) return if(!M.client) return @@ -1128,7 +1128,7 @@ else if(href_list["monkeyone"]) if(!check_rights(R_SPAWN)) return - var/mob/living/carbon/human/H = locate(href_list["monkeyone"]) + var/mob/living/carbon/human/H = locateUID(href_list["monkeyone"]) if(!istype(H)) to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return @@ -1143,7 +1143,7 @@ else if(href_list["corgione"]) if(!check_rights(R_SPAWN)) return - var/mob/living/carbon/human/H = locate(href_list["corgione"]) + var/mob/living/carbon/human/H = locateUID(href_list["corgione"]) if(!istype(H)) to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return @@ -1158,7 +1158,7 @@ else if(href_list["makePAI"]) if(!check_rights(R_SPAWN)) return - var/mob/living/carbon/human/H = locate(href_list["makePAI"]) + var/mob/living/carbon/human/H = locateUID(href_list["makePAI"]) if(!istype(H)) to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return @@ -1182,7 +1182,7 @@ else if(href_list["forcespeech"]) if(!check_rights(R_SERVER|R_EVENT)) return - var/mob/M = locate(href_list["forcespeech"]) + var/mob/M = locateUID(href_list["forcespeech"]) if(!ismob(M)) to_chat(usr, "this can only be used on instances of type /mob") @@ -1199,7 +1199,7 @@ if(alert(usr, "Send to admin prison for the round?", "Message", "Yes", "No") != "Yes") return - var/mob/M = locate(href_list["sendtoprison"]) + var/mob/M = locateUID(href_list["sendtoprison"]) if(!ismob(M)) to_chat(usr, "This can only be used on instances of type /mob") return @@ -1242,7 +1242,7 @@ if(!check_rights(R_ADMIN)) return - var/mob/M = locate(href_list["sendbacktolobby"]) + var/mob/M = locateUID(href_list["sendbacktolobby"]) if(!isobserver(M)) to_chat(usr, "You can only send ghost players back to the Lobby.") @@ -1269,7 +1269,7 @@ if(alert(usr, "Confirm?", "Message", "Yes", "No") != "Yes") return - var/mob/M = locate(href_list["tdome1"]) + var/mob/M = locateUID(href_list["tdome1"]) if(!ismob(M)) to_chat(usr, "This can only be used on instances of type /mob") return @@ -1299,7 +1299,7 @@ if(alert(usr, "Confirm?", "Message", "Yes", "No") != "Yes") return - var/mob/M = locate(href_list["tdome2"]) + var/mob/M = locateUID(href_list["tdome2"]) if(!ismob(M)) to_chat(usr, "This can only be used on instances of type /mob") return @@ -1329,7 +1329,7 @@ if(alert(usr, "Confirm?", "Message", "Yes", "No") != "Yes") return - var/mob/M = locate(href_list["tdomeadmin"]) + var/mob/M = locateUID(href_list["tdomeadmin"]) if(!ismob(M)) to_chat(usr, "This can only be used on instances of type /mob") return @@ -1351,7 +1351,7 @@ if(alert(usr, "Confirm?", "Message", "Yes", "No") != "Yes") return - var/mob/M = locate(href_list["tdomeobserve"]) + var/mob/M = locateUID(href_list["tdomeobserve"]) if(!ismob(M)) to_chat(usr, "This can only be used on instances of type /mob") return @@ -1385,7 +1385,7 @@ if(alert(usr, "Confirm?", "Message", "Yes", "No") != "Yes") return - var/mob/M = locate(href_list["aroomwarp"]) + var/mob/M = locateUID(href_list["aroomwarp"]) if(!ismob(M)) to_chat(usr, "This can only be used on instances of type /mob") return @@ -1405,7 +1405,7 @@ else if(href_list["revive"]) if(!check_rights(R_REJUVINATE)) return - var/mob/living/L = locate(href_list["revive"]) + var/mob/living/L = locateUID(href_list["revive"]) if(!istype(L)) to_chat(usr, "This can only be used on instances of type /mob/living") return @@ -1417,7 +1417,7 @@ else if(href_list["makeai"]) if(!check_rights(R_SPAWN)) return - var/mob/living/carbon/human/H = locate(href_list["makeai"]) + var/mob/living/carbon/human/H = locateUID(href_list["makeai"]) if(!istype(H)) to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return @@ -1433,7 +1433,7 @@ else if(href_list["makealien"]) if(!check_rights(R_SPAWN)) return - var/mob/living/carbon/human/H = locate(href_list["makealien"]) + var/mob/living/carbon/human/H = locateUID(href_list["makealien"]) if(!istype(H)) to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return @@ -1445,7 +1445,7 @@ else if(href_list["makeslime"]) if(!check_rights(R_SPAWN)) return - var/mob/living/carbon/human/H = locate(href_list["makeslime"]) + var/mob/living/carbon/human/H = locateUID(href_list["makeslime"]) if(!istype(H)) to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return @@ -1457,7 +1457,7 @@ else if(href_list["makesuper"]) if(!check_rights(R_SPAWN)) return - var/mob/living/carbon/human/H = locate(href_list["makesuper"]) + var/mob/living/carbon/human/H = locateUID(href_list["makesuper"]) if(!istype(H)) to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return @@ -1470,7 +1470,7 @@ else if(href_list["makerobot"]) if(!check_rights(R_SPAWN)) return - var/mob/living/carbon/human/H = locate(href_list["makerobot"]) + var/mob/living/carbon/human/H = locateUID(href_list["makerobot"]) if(!istype(H)) to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return @@ -1482,7 +1482,7 @@ else if(href_list["makeanimal"]) if(!check_rights(R_SPAWN)) return - var/mob/M = locate(href_list["makeanimal"]) + var/mob/M = locateUID(href_list["makeanimal"]) if(istype(M, /mob/new_player)) to_chat(usr, "This cannot be used on instances of type /mob/new_player") return @@ -1494,7 +1494,7 @@ else if(href_list["incarn_ghost"]) if(!check_rights(R_SPAWN)) return - var/mob/dead/observer/G = locate(href_list["incarn_ghost"]) + var/mob/dead/observer/G = locateUID(href_list["incarn_ghost"]) if(!istype(G)) to_chat(usr, "This will only work on /mob/dead/observer") log_admin("[key_name(G)] was incarnated by [key_name(src.owner)]") @@ -1504,7 +1504,7 @@ else if(href_list["togmutate"]) if(!check_rights(R_SPAWN)) return - var/mob/living/carbon/human/H = locate(href_list["togmutate"]) + var/mob/living/carbon/human/H = locateUID(href_list["togmutate"]) if(!istype(H)) to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return @@ -1515,25 +1515,14 @@ //H.regenerate_icons() else if(href_list["adminplayeropts"]) - var/mob/M = locate(href_list["adminplayeropts"]) + var/mob/M = locateUID(href_list["adminplayeropts"]) show_player_panel(M) - else if(href_list["adminplayerobservejump"]) - if(!check_rights(R_ADMIN|R_MOD)) - return - - var/mob/M = locate(href_list["adminplayerobservejump"]) - - var/client/C = usr.client - if(!isobserver(usr)) C.admin_ghost() - sleep(2) - C.jumptomob(M) - else if(href_list["adminplayerobservefollow"]) if(!check_rights(R_ADMIN|R_MOD)) return - var/mob/M = locate(href_list["adminplayerobservefollow"]) + var/mob/M = locateUID(href_list["adminplayerobservefollow"]) var/client/C = usr.client if(!isobserver(usr)) C.admin_ghost() @@ -1605,13 +1594,13 @@ output_ai_laws() else if(href_list["adminmoreinfo"]) - var/mob/M = locate(href_list["adminmoreinfo"]) + var/mob/M = locateUID(href_list["adminmoreinfo"]) admin_mob_info(M) else if(href_list["adminspawncookie"]) if(!check_rights(R_ADMIN|R_EVENT)) return - var/mob/living/carbon/human/H = locate(href_list["adminspawncookie"]) + var/mob/living/carbon/human/H = locateUID(href_list["adminspawncookie"]) if(!ishuman(H)) to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return @@ -1635,7 +1624,7 @@ else if(href_list["BlueSpaceArtillery"]) if(!check_rights(R_ADMIN|R_EVENT)) return - var/mob/living/M = locate(href_list["BlueSpaceArtillery"]) + var/mob/living/M = locateUID(href_list["BlueSpaceArtillery"]) if(!isliving(M)) to_chat(usr, "This can only be used on instances of type /mob/living") return @@ -1694,7 +1683,7 @@ else if(href_list["EvilFax"]) if(!check_rights(R_ADMIN)) return - var/mob/living/carbon/human/H = locate(href_list["EvilFax"]) + var/mob/living/carbon/human/H = locateUID(href_list["EvilFax"]) if(!istype(H)) to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return @@ -1979,7 +1968,7 @@ else if(href_list["FaxReplyTemplate"]) if(!check_rights(R_ADMIN)) return - var/mob/living/carbon/human/H = locate(href_list["FaxReplyTemplate"]) + var/mob/living/carbon/human/H = locateUID(href_list["FaxReplyTemplate"]) if(!istype(H)) to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return @@ -2033,7 +2022,7 @@ message_admins("[key_name_admin(src.owner)] replied to [key_name_admin(H)] with a standard '[stype]' fax") else if(href_list["HONKReply"]) - var/mob/living/carbon/human/H = locate(href_list["HONKReply"]) + var/mob/living/carbon/human/H = locateUID(href_list["HONKReply"]) if(!istype(H)) to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return @@ -2053,7 +2042,7 @@ return if(alert(src.owner, "Accept or Deny ERT request?", "CentComm Response", "Accept", "Deny") == "Deny") - var/mob/living/carbon/human/H = locate(href_list["ErtReply"]) + var/mob/living/carbon/human/H = locateUID(href_list["ErtReply"]) if(!istype(H)) to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return @@ -2282,32 +2271,32 @@ else if(href_list["jumpto"]) if(!check_rights(R_ADMIN)) return - var/mob/M = locate(href_list["jumpto"]) + var/mob/M = locateUID(href_list["jumpto"]) usr.client.jumptomob(M) else if(href_list["getmob"]) if(!check_rights(R_ADMIN)) return if(alert(usr, "Confirm?", "Message", "Yes", "No") != "Yes") return - var/mob/M = locate(href_list["getmob"]) + var/mob/M = locateUID(href_list["getmob"]) usr.client.Getmob(M) else if(href_list["sendmob"]) if(!check_rights(R_ADMIN)) return - var/mob/M = locate(href_list["sendmob"]) + var/mob/M = locateUID(href_list["sendmob"]) usr.client.sendmob(M) else if(href_list["narrateto"]) if(!check_rights(R_ADMIN)) return - var/mob/M = locate(href_list["narrateto"]) + var/mob/M = locateUID(href_list["narrateto"]) usr.client.cmd_admin_direct_narrate(M) else if(href_list["subtlemessage"]) if(!check_rights(R_ADMIN)) return - var/mob/M = locate(href_list["subtlemessage"]) + var/mob/M = locateUID(href_list["subtlemessage"]) usr.client.cmd_admin_subtle_message(M) else if(href_list["traitor"]) @@ -2317,7 +2306,7 @@ alert("The game hasn't started yet!") return - var/mob/M = locate(href_list["traitor"]) + var/mob/M = locateUID(href_list["traitor"]) if(!ismob(M)) to_chat(usr, "This can only be used on instances of type /mob.") return @@ -3221,12 +3210,12 @@ return 1 else if(href_list["viewruntime"]) - var/datum/ErrorViewer/error_viewer = locate(href_list["viewruntime"]) + var/datum/ErrorViewer/error_viewer = locateUID(href_list["viewruntime"]) if(!istype(error_viewer)) to_chat(usr, "That runtime viewer no longer exists.") return if(href_list["viewruntime_backto"]) - error_viewer.showTo(usr, locate(href_list["viewruntime_backto"]), href_list["viewruntime_linear"]) + error_viewer.showTo(usr, locateUID(href_list["viewruntime_backto"]), href_list["viewruntime_linear"]) else error_viewer.showTo(usr, null, href_list["viewruntime_linear"]) @@ -3364,19 +3353,13 @@ /proc/admin_jump_link(var/atom/target) if(!target) return // The way admin jump links handle their src is weirdly inconsistent... - var/source = "_src_=holder" + . = ADMIN_FLW(target,"FLW") if(isAI(target)) // AI core/eye follow links var/mob/living/silicon/ai/A = target - . = "FLW" if(A.client && A.eyeobj) // No point following clientless AI eyes - . += "|EYE" - return + . += "|[ADMIN_FLW(A.eyeobj,"EYE")]" else if(istype(target, /mob/dead/observer)) var/mob/dead/observer/O = target - . = "FLW" if(O.mind && O.mind.current) - . += "|BDY" - return - else - return "FLW" + . += "|[ADMIN_FLW(O.mind.current,"BDY")]" diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 997b586149a..e0baebfc775 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -86,9 +86,6 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," if(!mob) return //this doesn't happen - var/ref_mob = "\ref[mob]" - var/ref_client = "\ref[src]" - //send this msg to all admins var/admin_number_afk = 0 var/list/mentorholders = list() @@ -109,7 +106,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," switch(selected_type) if("Mentorhelp") - msg = "[selected_type]: [key_name(src, TRUE, selected_type)] (?) (PP) (VV) (SM) ([admin_jump_link(mob)]) (CA) (REJT) [ai_found ? " (CL)" : ""] (TAKE) :[msg]" + msg = "[selected_type]: [key_name(src, TRUE, selected_type)] ([ADMIN_QUE(mob,"?")]) ([ADMIN_PP(mob,"PP")]) ([ADMIN_VV(mob,"VV")]) ([ADMIN_SM(mob,"SM")]) ([admin_jump_link(mob)]) (CA) (REJT) [ai_found ? " (CL)" : ""] (TAKE) :[msg]" for(var/client/X in mentorholders + modholders + adminholders) if(X.prefs.sound & SOUND_ADMINHELP) X << 'sound/effects/adminhelp.ogg' @@ -123,7 +120,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," T.addResponse(usr.client, msg) else ticketNum = SStickets.getTicketCounter() // ticketNum is the ticket ready to be assigned. - msg = "[selected_type]: [key_name(src, TRUE, selected_type)] (?) (PP) (VV) (SM) ([admin_jump_link(mob)]) (CA) (TICKET) [ai_found ? " (CL)" : ""](TAKE) :[msg]" + msg = "[selected_type]: [key_name(src, TRUE, selected_type)] ([ADMIN_QUE(mob,"?")]) ([ADMIN_PP(mob,"PP")]) ([ADMIN_VV(mob,"VV")]) ([ADMIN_SM(mob,"SM")]) ([admin_jump_link(mob)]) (CA) (TICKET) [ai_found ? " (CL)" : ""](TAKE) :[msg]" //Open a new adminticket and inform the user. SStickets.newTicket(src, prunedmsg, msg) for(var/client/X in modholders + adminholders) diff --git a/code/modules/admin/verbs/freeze.dm b/code/modules/admin/verbs/freeze.dm index 67ae72817f9..8dc852e9221 100644 --- a/code/modules/admin/verbs/freeze.dm +++ b/code/modules/admin/verbs/freeze.dm @@ -9,12 +9,12 @@ var/global/list/frozen_mob_list = list() /client/proc/freeze(var/mob/living/M as mob in GLOB.mob_list) set category = "Admin" set name = "Freeze" - + if(!check_rights(R_ADMIN)) return - - if(!istype(M)) - return + + if(!istype(M)) + return if(M in frozen_mob_list) M.admin_unFreeze(src) @@ -89,8 +89,8 @@ var/global/list/frozen_mob_list = list() set name = "Freeze Mech" if(!check_rights(R_ADMIN)) - return - + return + var/obj/mecha/M = O if(!istype(M,/obj/mecha)) to_chat(src, "This can only be used on mechs!") @@ -105,7 +105,7 @@ var/global/list/frozen_mob_list = list() M.overlays += adminomaly if(M.occupant) M.removeVerb(/obj/mecha/verb/eject) - to_chat(M.occupant, "You have been frozen by [key]") + to_chat(M.occupant, "You have been frozen by [key]") message_admins("[key_name_admin(usr)] froze [key_name(M.occupant)] in a [M.name]") log_admin("[key_name(usr)] froze [key_name(M.occupant)] in a [M.name]") else @@ -116,7 +116,7 @@ var/global/list/frozen_mob_list = list() M.overlays -= adminomaly if(M.occupant) M.addVerb(/obj/mecha/verb/eject) - to_chat(M.occupant, "You have been unfrozen by [key]") + to_chat(M.occupant, "You have been unfrozen by [key]") message_admins("[key_name_admin(usr)] unfroze [key_name(M.occupant)] in a [M.name]") log_admin("[key_name(usr)] unfroze [key_name(M.occupant)] in a [M.name]") else diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index 0823a0e75a5..b92b304fd57 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -29,7 +29,7 @@ deity = ticker.cultdat.entity_name log_say("(PRAYER) [msg]", usr) - msg = "[bicon(cross)][prayer_type][deity ? " (to [deity])" : ""]:[key_name(src, 1)] (?) (PP) (VV) (SM) ([admin_jump_link(src)]) (CA) (SC) (BLESS) (SMITE): [msg]" + msg = "[bicon(cross)][prayer_type][deity ? " (to [deity])" : ""]:[key_name(src, 1)] ([ADMIN_QUE(src,"?")]) ([ADMIN_PP(src,"PP")]) ([ADMIN_VV(src,"VV")]) ([ADMIN_SM(src,"SM")]) ([admin_jump_link(src)]) (CA) ([ADMIN_SC(src,"SC")]) (BLESS) (SMITE): [msg]" for(var/client/X in GLOB.admins) if(check_rights(R_EVENT,0,X.mob)) @@ -40,7 +40,7 @@ /proc/Centcomm_announce(var/text , var/mob/Sender) var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN)) - msg = "CENTCOMM: [key_name(Sender, 1)] (PP) (VV) (SM) ([admin_jump_link(Sender)]) (CA) (BSA) [ADMIN_CENTCOM_REPLY(Sender)]): [msg]" + msg = "CENTCOMM: [key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) (CA) ([ADMIN_BSA(Sender,"BSA")]) ([ADMIN_CENTCOM_REPLY(Sender,"RPLY")])): [msg]" for(var/client/X in GLOB.admins) if(R_EVENT & X.holder.rights) to_chat(X, msg) @@ -49,7 +49,7 @@ /proc/Syndicate_announce(var/text , var/mob/Sender) var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN)) - msg = "SYNDICATE: [key_name(Sender, 1)] (PP) (VV) (SM) ([admin_jump_link(Sender)]) (CA) (BSA) [ADMIN_SYNDICATE_REPLY(Sender)]: [msg]" + msg = "SYNDICATE: [key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) (CA) ([ADMIN_BSA(Sender,"BSA")]) ([ADMIN_SYNDICATE_REPLY(Sender,"RPLY")]): [msg]" for(var/client/X in GLOB.admins) if(check_rights(R_EVENT,0,X.mob)) to_chat(X, msg) @@ -58,7 +58,7 @@ /proc/HONK_announce(var/text , var/mob/Sender) var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN)) - msg = "HONK: [key_name(Sender, 1)] (PP) (VV) (SM) ([admin_jump_link(Sender)]) (CA) (BSA) (RPLY): [msg]" + msg = "HONK: [key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) (CA) ([ADMIN_BSA(Sender,"BSA")]) (RPLY): [msg]" for(var/client/X in GLOB.admins) if(R_EVENT & X.holder.rights) to_chat(X, msg) @@ -67,7 +67,7 @@ /proc/ERT_Announce(var/text , var/mob/Sender, var/repeat_warning) var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN)) - msg = "ERT REQUEST: [key_name(Sender, 1)] (PP) (VV) (SM) ([admin_jump_link(Sender)]) (CA) (BSA) (RESPOND): [msg]" + msg = "ERT REQUEST: [key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) (CA) ([ADMIN_BSA(Sender,"BSA")]) (RESPOND): [msg]" if(repeat_warning) msg += "
WARNING: ERT request has gone 5 minutes with no reply!" for(var/client/X in GLOB.admins) @@ -79,7 +79,7 @@ /proc/Nuke_request(text , mob/Sender) var/nuke_code = get_nuke_code() var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN)) - msg = "NUKE CODE REQUEST: [key_name(Sender)] (PP) (VV) (SM) ([admin_jump_link(Sender)]) (CA) (BSA) [ADMIN_CENTCOM_REPLY(Sender)]: [msg]" + msg = "NUKE CODE REQUEST: [key_name(Sender)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) (CA) ([ADMIN_BSA(Sender,"BSA")]) ([ADMIN_CENTCOM_REPLY(Sender,"RPLY")]): [msg]" for(var/client/X in GLOB.admins) if(check_rights(R_EVENT,0,X.mob)) to_chat(X, msg) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 38442d9011f..b507af0871e 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -981,7 +981,7 @@ Traitors and the like can also be revived with the previous role mostly intact. if(!H.key && H.mind.key) key_string = H.mind.key msg += "" - msg += "" + msg += "" if(istype(H.loc, /obj/machinery/cryopod)) msg += "" else diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index ecf8c336118..80a62f9c818 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -52,9 +52,7 @@ if(!borg_to_spawn) //If there's no type at all, let it still be used but don't do anything used = FALSE return - var/datum/effect_system/spark_spread/S = new /datum/effect_system/spark_spread - S.set_up(4, 1, src) - S.start() + do_sparks(4, 1, src) var/mob/living/silicon/robot/R switch(borg_to_spawn) if("Medical") diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index 8228e490a38..2dc6749bd73 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -70,7 +70,7 @@ /obj/item/assembly/voice/noise/hear_talk(mob/living/M as mob, msg) return -/obj/item/assembly/voice/hear_message(mob/living/M as mob, msg) +/obj/item/assembly/voice/noise/hear_message(mob/living/M as mob, msg) pulse(0) var/turf/T = get_turf(src) //otherwise it won't work in hand T.visible_message("[bicon(src)] beeps!") \ No newline at end of file diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index f67d1ac6c0b..448344761ba 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -9,7 +9,7 @@ icon = 'icons/effects/blood.dmi' icon_state = "remains" var/mob_type = null - var/mob_name = "" + var/mob_name = "unidentified entity" var/mob_gender = null var/death = TRUE //Kill the mob var/roundstart = TRUE //fires on initialize @@ -48,7 +48,7 @@ /obj/effect/mob_spawn/Initialize(mapload) . = ..() - if(instant || (roundstart && (ticker && ticker.current_state > GAME_STATE_SETTING_UP))) + if(instant || roundstart) //at some point we should probably re-introduce the (ticker && ticker.current_state > GAME_STATE_SETTING_UP) portion of this check, but for now it was preventing the corpses from spawning at roundstart and resulting in ghost role spawners that made dead bodies. create() else GLOB.poi_list |= src @@ -83,7 +83,7 @@ if(disease) M.ForceContractDisease(new disease) if(death) - M.death(1) //Kills the new mob + M.death() //Kills the new mob M.adjustOxyLoss(oxy_damage) M.adjustBruteLoss(brute_damage) @@ -155,6 +155,8 @@ outfit = new outfit() if(!outfit) outfit = new /datum/outfit + if(!mob_name) + mob_name = id_job return ..() /obj/effect/mob_spawn/human/equip(mob/living/carbon/human/H) @@ -271,6 +273,7 @@ /obj/effect/mob_spawn/human/corpse/assistant name = "Assistant" + mob_name = "Assistant" id_job = "Assistant" outfit = /datum/outfit/job/assistant @@ -285,11 +288,13 @@ /obj/effect/mob_spawn/human/cook name = "Cook" + mob_name = "Chef" id_job = "Chef" outfit = /datum/outfit/job/chef /obj/effect/mob_spawn/human/doctor name = "Doctor" + mob_name = "Medical Doctor" id_job = "Medical Doctor" outfit = /datum/outfit/job/doctor @@ -313,6 +318,7 @@ /obj/effect/mob_spawn/human/engineer name = "Engineer" + mob_name = "Engineer" id_job = "Engineer" outfit = /datum/outfit/job/engineer @@ -393,16 +399,18 @@ /obj/effect/mob_spawn/human/scientist name = "Scientist" + mob_name = "Scientist" id_job = "Scientist" outfit = /datum/outfit/job/scientist /obj/effect/mob_spawn/human/miner name = "Shaft Miner" + mob_name = "Shaft Miner" id_job = "Shaft Miner" outfit = /datum/outfit/job/mining/suit /datum/outfit/job/mining/suit - name = "Station Engineer" + name = "Shaft Miner" suit = /obj/item/clothing/suit/space/hardsuit/mining head = /obj/item/clothing/head/helmet/space/hardsuit/mining uniform = /obj/item/clothing/under/rank/miner @@ -416,6 +424,7 @@ /obj/effect/mob_spawn/human/bartender name = "Space Bartender" + mob_name = "Bartender" id_job = "Bartender" id_access_list = list(access_bar) outfit = /datum/outfit/spacebartender @@ -479,6 +488,7 @@ /obj/effect/mob_spawn/human/bridgeofficer name = "Bridge Officer" + mob_name = "Bridge Officer" id_job = "Bridge Officer" id_access = "Captain" outfit = /datum/outfit/nanotrasenbridgeofficercorpse @@ -495,6 +505,7 @@ /obj/effect/mob_spawn/human/commander name = "Commander" + mob_name = "Commander" id_job = "Commander" id_access = "Captain" outfit = /datum/outfit/nanotrasencommandercorpse diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm index 73509693012..91c09d15f30 100644 --- a/code/modules/awaymissions/mission_code/wildwest.dm +++ b/code/modules/awaymissions/mission_code/wildwest.dm @@ -155,10 +155,8 @@ call(src,triggerproc)(M) /obj/effect/meatgrinder/proc/triggerrad1(mob) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread for(var/mob/O in viewers(world.view, src.loc)) - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) explosion(mob, 1, 0, 0, 0) qdel(src) diff --git a/code/modules/awaymissions/trigger.dm b/code/modules/awaymissions/trigger.dm index 0ac6e656206..60a43702cb1 100644 --- a/code/modules/awaymissions/trigger.dm +++ b/code/modules/awaymissions/trigger.dm @@ -22,13 +22,9 @@ M.Move(dest) if(entersparks) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(4, 1, src) - s.start() + do_sparks(4, 1, src) if(exitsparks) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(4, 1, dest) - s.start() + do_sparks(4, 1, dest) if(entersmoke) var/datum/effect_system/smoke_spread/s = new diff --git a/code/modules/buildmode/buildmode.dm b/code/modules/buildmode/buildmode.dm index 3c91dc49a4b..7f43f20c934 100644 --- a/code/modules/buildmode/buildmode.dm +++ b/code/modules/buildmode/buildmode.dm @@ -49,8 +49,9 @@ var/x = pos_idx % switch_width var/y = FLOOR(pos_idx / switch_width, 1) var/obj/screen/buildmode/B = new buttontype(src, thing) - // extra .5 for a nice offset look - B.screen_loc = "NORTH-[(1 + 0.5 + y*1.5)],WEST+[0.5 + x*1.5]" + // this stuff is equivalent to the commented out line for 511 compat + // B.screen_loc = "NORTH-[(1 + 0.5 + y*1.5)],WEST+[0.5 + x*1.5]" + B.screen_loc = "NORTH-[1 + FLOOR(0.5 + 1.5*y, 1) + ((y + 1) % 2)]:[16*((y + 1) % 2)],WEST+[FLOOR(0.5 + 1.5*x, 1)]:[16*((x + 1) % 2)]" buttonslist += B pos_idx++ diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 40c29c1d991..5e1beb969ef 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -92,9 +92,7 @@ if(H.a_intent == INTENT_HARM) var/mob/living/carbon/C = A if(cell.use(stun_cost)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 0, loc) - s.start() + do_sparks(5, 0, loc) playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) H.do_attack_animation(C) visible_message("[C] has been touched with [src] by [H]!") diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index fba251f71f8..c10ccf32f89 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -170,9 +170,7 @@ var/mob/M = can_shock(loc) if(M) to_chat(M, "You feel a sharp shock!") - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, M) - s.start() + do_sparks(3, 1, M) M.Weaken(5) M.Stuttering(1) diff --git a/code/modules/clothing/masks/voice.dm b/code/modules/clothing/masks/voice.dm index 01dd9a65a99..b5b6298dcb2 100644 --- a/code/modules/clothing/masks/voice.dm +++ b/code/modules/clothing/masks/voice.dm @@ -28,4 +28,11 @@ /obj/item/clothing/mask/gas/voice/New() ..() - changer = new(src) \ No newline at end of file + changer = new(src) + +/obj/item/clothing/mask/gas/voice/clown + name = "clown wig and mask" + desc = "A true prankster's facial attire. A clown is incomplete without his wig and mask." + icon_state = "clown" + item_state = "clown_hat" + flags = BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT | BLOCKHAIR \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 2ba550d8a81..dea27a5b946 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -591,9 +591,7 @@ /obj/item/clothing/suit/space/hardsuit/shielded/hit_reaction(mob/living/carbon/human/owner, attack_text) if(current_charges > 0) - var/datum/effect_system/spark_spread/s = new - s.set_up(2, 1, src) - s.start() + do_sparks(2, 1, src) owner.visible_message("[owner]'s shields deflect [attack_text] in a shower of sparks!") current_charges-- recharge_cooldown = world.time + recharge_delay diff --git a/code/modules/error_handler/error_viewer.dm b/code/modules/error_handler/error_viewer.dm index d17b75b986e..fdcbe6056b5 100644 --- a/code/modules/error_handler/error_viewer.dm +++ b/code/modules/error_handler/error_viewer.dm @@ -14,7 +14,7 @@ var/global/datum/ErrorViewer/ErrorCache/error_cache = new() var/global/datum/ErrorViewer/ErrorCache/error_cache = null #endif -// - ErrorSource datums exist for each line (of code) that generates an error, +// - ErrorSource datums exist for each line (of code) that generates an error, // and keep track of all errors generated by that line. // // - ErrorEntry datums exist for each logged error, and keep track of all @@ -68,10 +68,10 @@ var/global/datum/ErrorViewer/ErrorCache/error_cache = null if(!linktext) linktext = name if(istype(back_to)) - back_to_param = ";viewruntime_backto=\ref[back_to]" + back_to_param = ";viewruntime_backto=[back_to.UID()]" if(linear) back_to_param += ";viewruntime_linear=1" - return "[html_encode(linktext)]" + return "[html_encode(linktext)]" /datum/ErrorViewer/ErrorCache var/list/errors = list() @@ -181,15 +181,15 @@ var/global/datum/ErrorViewer/ErrorCache/error_cache = null if(srcRef) html += "
src: VV" if(ispath(srcType, /mob)) - html += " PP" - html += " Follow" + html += " PP" + html += " Follow" if(istype(srcLoc)) html += "
src.loc: VV" html += " JMP" if(usrRef) html += "
usr: VV" - html += " PP" - html += " Follow" + html += " PP" + html += " Follow" if(istype(usrLoc)) html += "
usr.loc: VV" html += " JMP" diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm index eef486ee5cd..2179cf411b4 100644 --- a/code/modules/events/brand_intelligence.dm +++ b/code/modules/events/brand_intelligence.dm @@ -29,7 +29,7 @@ vendingMachines.Remove(originMachine) originMachine.shut_up = 0 originMachine.shoot_inventory = 1 - log_debug("Original brand intelligence machine: [originMachine] [ADMIN_VV(originMachine)] [ADMIN_JMP(originMachine)]") + log_debug("Original brand intelligence machine: [originMachine] ([ADMIN_VV(originMachine,"VV")]) [ADMIN_JMP(originMachine)]") /datum/event/brand_intelligence/tick() if(!originMachine || QDELETED(originMachine) || originMachine.shut_up || originMachine.wires.IsAllCut()) //if the original vending machine is missing or has it's voice switch flipped diff --git a/code/modules/events/rogue_drones.dm b/code/modules/events/rogue_drones.dm index c4f1f8ac40a..2b61744658e 100644 --- a/code/modules/events/rogue_drones.dm +++ b/code/modules/events/rogue_drones.dm @@ -38,9 +38,7 @@ /datum/event/rogue_drone/end() var/num_recovered = 0 for(var/mob/living/simple_animal/hostile/retaliate/malf_drone/D in drones_list) - var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread() - sparks.set_up(3, 0, D.loc) - sparks.start() + do_sparks(3, 0, D.loc) D.z = level_name_to_num(CENTCOMM) D.has_loot = 0 diff --git a/code/modules/fish/fishtank.dm b/code/modules/fish/fishtank.dm index 412c5407ddc..f0451d25817 100644 --- a/code/modules/fish/fishtank.dm +++ b/code/modules/fish/fishtank.dm @@ -492,9 +492,7 @@ if(water_level && prob(45)) //If there is water, there is a chance the cat will slip, Syndicat will spark like E-N when this happens M.visible_message("[M.name] slipped and got soaked!", "You slipped and got soaked!") if(istype(M, /mob/living/simple_animal/pet/cat/Syndi)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) else //No water or didn't slip, get that fish! M.visible_message("[M.name] catches and devours a live fish!", "You catch and devour a live fish, yum!") kill_fish() //Kill a random fish diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index d9c59a46d58..cbf06629954 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -329,7 +329,7 @@ active = 1 var/turf/bombturf = get_turf(src) var/area/bombarea = get_area(bombturf) - message_admins("[key_name(user)]? has primed a [name] for detonation at [bombarea] (JMP).") + message_admins("[key_name(user)][ADMIN_QUE(user,"?")] has primed a [name] for detonation at [bombarea] (JMP).") log_game("[key_name(user)] has primed a [name] for detonation at [bombarea] ([bombturf.x],[bombturf.y],[bombturf.z]).") to_chat(user, "You light [src] on fire.") diff --git a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm index 9de98749e42..f36f6400f27 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm @@ -392,9 +392,7 @@ updateUsrDialog() /obj/machinery/kitchen_machine/proc/broke() - var/datum/effect_system/spark_spread/s = new - s.set_up(2, 1, src) - s.start() + do_sparks(2, 1, src) icon_state = broken_icon // Make it look all busted up and shit visible_message("The [src] breaks!") //Let them know they're stupid broken = 2 // Make it broken so it can't be used util fixed diff --git a/code/modules/hydroponics/grown/kudzu.dm b/code/modules/hydroponics/grown/kudzu.dm index 09c16544396..855ca829bfa 100644 --- a/code/modules/hydroponics/grown/kudzu.dm +++ b/code/modules/hydroponics/grown/kudzu.dm @@ -30,7 +30,7 @@ if(istype(user.loc, /turf/space)) return var/turf/T = get_turf(src) - message_admins("Kudzu planted by [key_name_admin(user)](?) (FLW) at ([T.x],[T.y],[T.z] - (JMP))",0,1) + message_admins("Kudzu planted by [key_name_admin(user)]([ADMIN_QUE(user,"?")]) ([ADMIN_FLW(user,"FLW")]) at ([T.x],[T.y],[T.z] - (JMP))",0,1) investigate_log("was planted by [key_name(user)] at ([T.x],[T.y],[T.z])","kudzu") new /obj/structure/spacevine_controller(user.loc, mutations, potency, production) user.drop_item() diff --git a/code/modules/martial_arts/brawling.dm b/code/modules/martial_arts/brawling.dm index 520f4c1a96a..7869e101505 100644 --- a/code/modules/martial_arts/brawling.dm +++ b/code/modules/martial_arts/brawling.dm @@ -14,12 +14,12 @@ A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) var/atk_verb = pick("left hook","right hook","straight punch") - + var/damage = rand(5, 8) + A.dna.species.punchdamagelow if(!damage) playsound(D.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) D.visible_message("[A] has attempted to hit [D] with a [atk_verb]!") - add_attack_logs(A, D, "Melee attacked with [src] (miss/block)") + add_attack_logs(A, D, "Melee attacked with [src] (miss/block)", ATKLOG_ALL) return 0 @@ -32,7 +32,7 @@ "[A] has hit [D] with a [atk_verb]!") D.apply_damage(damage, STAMINA, affecting, armor_block) - add_attack_logs(A, D, "Melee attacked with [src]") + add_attack_logs(A, D, "Melee attacked with [src]", ATKLOG_ALL) if(D.getStaminaLoss() > 50) var/knockout_prob = D.getStaminaLoss() + rand(-15,15) if((D.stat != DEAD) && prob(knockout_prob)) diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 61e1f2efeed..6b62f07c103 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -352,9 +352,7 @@ updateUsrDialog() /obj/machinery/mineral/ore_redemption/ex_act(severity, target) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, 1, src) if(severity == 1) if(prob(50)) qdel(src) @@ -564,9 +562,7 @@ qdel(voucher) /obj/machinery/mineral/equipment_vendor/ex_act(severity, target) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, 1, src) if(prob(50 / severity) && severity < 3) qdel(src) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index f781b57a309..c3c276a5766 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -326,7 +326,7 @@ var/turf/T = deploy_location if(!is_mining_level(T.z))//only report capsules away from the mining/lavaland level - message_admins("[key_name_admin(usr)] (?) (FLW) activated a bluespace capsule away from the mining level! (JMP)") + message_admins("[key_name_admin(usr)] ([ADMIN_QUE(usr,"?")]) ([ADMIN_FLW(usr,"FLW")]) activated a bluespace capsule away from the mining level! (JMP)") log_admin("[key_name(usr)] activated a bluespace capsule away from the mining level at [T.x], [T.y], [T.z]") template.load(deploy_location, centered = TRUE) new /obj/effect/particle_effect/smoke(get_turf(src)) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index ba23b1c2153..26f77a31adc 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -540,18 +540,18 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if((!target) || (!ghost)) return if(isAI(target)) // AI core/eye follow links var/mob/living/silicon/ai/A = target - . = "core" + . = "core" if(A.client && A.eyeobj) // No point following clientless AI eyes - . += "|eye" + . += "|eye" return else if(istype(target, /mob/dead/observer)) var/mob/dead/observer/O = target - . = "follow" + . = "follow" if(O.mind && O.mind.current) - . += "|body" + . += "|body" return else - return "follow" + return "follow" //BEGIN TELEPORT HREF CODE /mob/dead/observer/Topic(href, href_list) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index c5557028896..b793ec154c7 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1019,7 +1019,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, return 1 /mob/living/carbon/proc/forceFedAttackLog(var/obj/item/reagent_containers/food/toEat, mob/user) - add_attack_logs(user, src, "Fed [toEat]. Reagents: [toEat.reagentlist(toEat)]", ATKLOG_FEW) + add_attack_logs(user, src, "Fed [toEat]. Reagents: [toEat.reagentlist(toEat)]", ATKLOG_MOST) if(!iscarbon(user)) LAssailant = null else diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index b2d2d24400b..1f405b91464 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -19,8 +19,9 @@ for(var/obj/item/organ/internal/I in internal_organs) if(isturf(loc)) var/atom/movable/thing = I.remove(src) - thing.forceMove(get_turf(src)) - thing.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),5) + if(thing) + thing.forceMove(get_turf(src)) + thing.throw_at(get_edge_target_turf(src, pick(alldirs)), rand(1,3), 5) for(var/obj/item/organ/external/E in bodyparts) if(istype(E, /obj/item/organ/external/chest)) @@ -41,9 +42,7 @@ hgibs(loc, dna) else new /obj/effect/decal/cleanable/blood/gibs/robot(loc) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) QDEL_IN(animation, 15) QDEL_IN(src, 0) return TRUE diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index ccd4c1540f6..9201075bd56 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -840,7 +840,7 @@ if(locate(/obj/item/storage/bible) in get_turf(src)) to_chat(viewers(src), "[src] farts on the Bible!") var/image/cross = image('icons/obj/storage.dmi', "bible") - var/adminbfmessage = "[bicon(cross)] Bible Fart: [key_name(src, 1)] (?) (PP) (VV) (SM) ([admin_jump_link(src)]) (CA) (SMITE):" + var/adminbfmessage = "[bicon(cross)] Bible Fart: [key_name(src, 1)] ([ADMIN_QUE(src,"?")]) ([ADMIN_PP(src,"PP")]) ([ADMIN_VV(src,"VV")]) ([ADMIN_SM(src,"SM")]) ([admin_jump_link(src)]) (CA) (SMITE):" for(var/client/X in GLOB.admins) if(check_rights(R_EVENT, 0, X.mob)) to_chat(X, adminbfmessage) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index d82fc719d88..d4c14bda32a 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -29,7 +29,7 @@ if(dna.species && dna.species.has_organ["brain"]) var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain) if(sponge) - if(dna.species) + if(dna.species && amount > 0) amount = amount * dna.species.brain_mod sponge.receive_damage(amount, 1) if(updating) @@ -43,7 +43,7 @@ if(dna.species && dna.species.has_organ["brain"]) var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain) if(sponge) - if(dna.species) + if(dna.species && amount > 0) amount = amount * dna.species.brain_mod sponge.damage = min(max(amount, 0), (maxHealth*2)) if(updating) @@ -76,11 +76,10 @@ amount += O.burn_dam return amount - /mob/living/carbon/human/adjustBruteLoss(amount, updating_health = TRUE, damage_source = null, robotic = FALSE) - if(dna.species) - amount = amount * dna.species.brute_mod if(amount > 0) + if(dna.species) + amount = amount * dna.species.brute_mod take_overall_damage(amount, 0, updating_health, used_weapon = damage_source) else heal_overall_damage(-amount, 0, updating_health, FALSE, robotic) @@ -88,9 +87,9 @@ return STATUS_UPDATE_HEALTH /mob/living/carbon/human/adjustFireLoss(amount, updating_health = TRUE, damage_source = null, robotic = FALSE) - if(dna.species) - amount = amount * dna.species.burn_mod if(amount > 0) + if(dna.species) + amount = amount * dna.species.burn_mod take_overall_damage(0, amount, updating_health, used_weapon = damage_source) else heal_overall_damage(0, -amount, updating_health, FALSE, robotic) @@ -98,9 +97,8 @@ return STATUS_UPDATE_HEALTH /mob/living/carbon/human/proc/adjustBruteLossByPart(amount, organ_name, obj/damage_source = null, updating_health = TRUE) - if(dna.species) + if(dna.species && amount > 0) amount = amount * dna.species.brute_mod - if(organ_name in bodyparts_by_name) var/obj/item/organ/external/O = get_organ(organ_name) @@ -111,9 +109,8 @@ O.heal_damage(-amount, 0, internal = 0, robo_repair = O.is_robotic(), updating_health = updating_health) return STATUS_UPDATE_HEALTH - /mob/living/carbon/human/proc/adjustFireLossByPart(amount, organ_name, obj/damage_source = null, updating_health = TRUE) - if(dna.species) + if(dna.species && amount > 0) amount = amount * dna.species.burn_mod if(organ_name in bodyparts_by_name) @@ -134,7 +131,7 @@ return ..() /mob/living/carbon/human/adjustCloneLoss(amount) - if(dna.species) + if(dna.species && amount > 0) amount = amount * dna.species.clone_mod . = ..() @@ -174,22 +171,22 @@ // Defined here solely to take species flags into account without having to recast at mob/living level. /mob/living/carbon/human/adjustOxyLoss(amount) - if(dna.species) + if(dna.species && amount > 0) amount = amount * dna.species.oxy_mod . = ..() /mob/living/carbon/human/setOxyLoss(amount) - if(dna.species) + if(dna.species && amount > 0) amount = amount * dna.species.oxy_mod . = ..() /mob/living/carbon/human/adjustToxLoss(amount) - if(dna.species) + if(dna.species && amount > 0) amount = amount * dna.species.tox_mod . = ..() /mob/living/carbon/human/setToxLoss(amount) - if(dna.species) + if(dna.species && amount > 0) amount = amount * dna.species.tox_mod . = ..() diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index 2c03e66bf8a..55228c51a51 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -107,12 +107,7 @@ custom_emote(1, "drops what [p_they()] [p_were()] holding, [p_their()] [E.name] malfunctioning!") - var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread() - spark_system.set_up(5, 0, src) - spark_system.attach(src) - spark_system.start() - spawn(10) - qdel(spark_system) + do_sparks(5, 0, src) /mob/living/carbon/human/proc/becomeSlim() to_chat(src, "You feel fit again!") diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 11df45462c4..a1d0630e586 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -709,14 +709,10 @@ adjustToxLoss(0.1) else //stuff only for synthetics if(alcohol_strength >= spark_start && prob(25)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) if(alcohol_strength >= collapse_start && prob(10)) emote("collapse") - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) if(alcohol_strength >= braindamage_start && prob(10)) adjustBrainLoss(1) diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index a9f93f3d441..70cab4751e2 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -150,7 +150,7 @@ message = uppertext(message) verb = "yells loudly" - if((COMIC in mutations) || (locate(/obj/item/organ/internal/cyberimp/brain/clown_voice) in internal_organs)) + if((COMIC in mutations) || (locate(/obj/item/organ/internal/cyberimp/brain/clown_voice) in internal_organs) || istype(get_item_by_slot(slot_wear_mask), /obj/item/clothing/mask/gas/voice/clown)) span = "sans" if(span) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index ed6ef267fb0..bc4eeb804b9 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -286,9 +286,7 @@ visible_message("The [M.name] has shocked [src]!", \ "The [M.name] has shocked [src]!") - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, 1, src) return 1 add_attack_logs(src, M, "Slime'd") return diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm index cb207932a9a..6e3e4ba7d95 100644 --- a/code/modules/mob/living/silicon/robot/examine.dm +++ b/code/modules/mob/living/silicon/robot/examine.dm @@ -3,6 +3,8 @@ ..(user) var/msg = "" + if(module) + msg += "It has loaded a [module.name].\n" var/obj/act_module = get_active_hand() if(act_module) msg += "It is holding [bicon(act_module)] \a [act_module].\n" diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index d2e065d3b8d..2f4056f6149 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -275,6 +275,7 @@ var/list/robot_verbs_default = list( QDEL_NULL(camera) QDEL_NULL(cell) QDEL_NULL(robot_suit) + QDEL_NULL(spark_system) return ..() /mob/living/silicon/robot/proc/pick_module() diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 8414f928544..dbec1d42bbe 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -373,17 +373,13 @@ to_chat(user, "The welder must be on for this task!") else if(W.force) //if force is non-zero - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, 1, src) ..() /mob/living/simple_animal/bot/bullet_act(obj/item/projectile/Proj) if(Proj && (Proj.damage_type == BRUTE || Proj.damage_type == BURN)) if(prob(75) && Proj.damage > 0) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, 1, src) return ..() /mob/living/simple_animal/bot/emp_act(severity) diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index 5a0a04d0189..b6cca5940e3 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -187,9 +187,7 @@ if(prob(50)) new /obj/item/robot_parts/l_arm(Tsec) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) ..() /obj/machinery/bot_core/cleanbot diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index 6895dc21cbc..5969d7a6d40 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -406,9 +406,7 @@ if(lasercolor == "r") new /obj/item/clothing/suit/redtag(Tsec) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) new /obj/effect/decal/cleanable/blood/oil(loc) ..() diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index b1133cb0e08..68e64ee65ed 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -407,9 +407,7 @@ T.amount = amount amount = 0 - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) ..() /obj/machinery/bot_core/floorbot diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index 52de4660908..3ed09c39a99 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -595,9 +595,7 @@ if(emagged && prob(25)) playsound(loc, 'sound/voice/minsult.ogg', 50, 0) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) ..() /mob/living/simple_animal/bot/medbot/proc/declare(crit_patient) diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index a65e0198539..103e443d7e7 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -847,9 +847,7 @@ cell.update_icon() cell = null - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) new /obj/effect/decal/cleanable/blood/oil(loc) ..() diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 451f21ce09a..3069499b3f0 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -439,9 +439,7 @@ Auto Patrol: []"}, if(prob(50)) new /obj/item/robot_parts/l_arm(Tsec) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) new /obj/effect/decal/cleanable/blood/oil(loc) ..() diff --git a/code/modules/mob/living/simple_animal/bot/syndicate.dm b/code/modules/mob/living/simple_animal/bot/syndicate.dm index 3ca3c6d1f2b..d1e42598ff4 100644 --- a/code/modules/mob/living/simple_animal/bot/syndicate.dm +++ b/code/modules/mob/living/simple_animal/bot/syndicate.dm @@ -165,9 +165,7 @@ depotarea.list_remove(src, depotarea.guard_list) walk_to(src,0) visible_message("[src] blows apart!") - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) new /obj/effect/decal/cleanable/blood/oil(loc) var/obj/effect/decal/mecha_wreckage/gygax/dark/wreck = new /obj/effect/decal/mecha_wreckage/gygax/dark(loc) wreck.name = "sentry bot wreckage" diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 77d930b6b69..e26a004e2c3 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -613,15 +613,11 @@ //spark for no reason if(prob(5)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) /mob/living/simple_animal/pet/corgi/Ian/borgi/death(gibbed) // Only execute the below if we successfully died . = ..(gibbed) if(!.) return FALSE - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index e08e7e11502..051f2209729 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -52,9 +52,7 @@ . = ..(gibbed) if(!.) return FALSE - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) /mob/living/simple_animal/hostile/hivebot/tele//this still needs work name = "Beacon" diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index 118ee54e858..6a6e44a5852 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -75,7 +75,7 @@ return var/turf/newloc = loc message_admins("Megafauna [src] \ - (FLW) \ + ([ADMIN_FLW(src,"FLW")]) \ moved via shuttle from ([oldloc.x], [oldloc.y], [oldloc.z]) to \ ([newloc.x], [newloc.y], [newloc.z])") diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm index 90586bb43c6..709a238346a 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm @@ -80,16 +80,12 @@ //repair a bit of damage if(prob(1)) src.visible_message("[bicon(src)] [src] shudders and shakes as some of it's damaged systems come back online.") - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) health += rand(25,100) //spark for no reason if(prob(5)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) //sometimes our targetting sensors malfunction, and we attack anyone nearby if(prob(disabled ? 0 : 1)) @@ -129,9 +125,7 @@ src.visible_message("[bicon(src)] [src] begins to spark and shake violenty!") else src.visible_message("[bicon(src)] [src] sparks and shakes like it's about to explode!") - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) if(!exploding && !disabled && prob(explode_chance)) exploding = 1 @@ -154,9 +148,7 @@ /mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy() //Seriously, what the actual hell. //some random debris left behind if(has_loot) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) var/obj/O //shards diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 1da97adf801..eecd0650af0 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -19,10 +19,10 @@ spawn() alert("You have logged in already with another key this round, please log out of this one NOW or risk being banned!") if(matches) if(M.client) - message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(M)].", 1) + message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(M)].", 1) log_adminwarn("Notice: [key_name(src)] has the same [matches] as [key_name(M)].") else - message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(M)] (no longer logged in). ", 1) + message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(M)] (no longer logged in). ", 1) log_adminwarn("Notice: [key_name(src)] has the same [matches] as [key_name(M)] (no longer logged in).") /mob/Login() diff --git a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm index aadf49ad9c0..22df710c6f8 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm @@ -27,16 +27,12 @@ if(battery_module && prob(25)) qdel(battery_module) computer.visible_message("\The [computer]'s battery explodes in rain of sparks.") - var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread() - spark_system.set_up(5, 0, computer.loc) - spark_system.start() + do_sparks(5, 0, computer.loc) if(recharger && prob(50)) qdel(recharger) computer.visible_message("\The [computer]'s recharger explodes in rain of sparks.") - var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread() - spark_system.set_up(5, 0, computer.loc) - spark_system.start() + do_sparks(5, 0, computer.loc) /datum/computer_file/program/revelation/Topic(href, list/href_list) diff --git a/code/modules/paperwork/fax.dm b/code/modules/paperwork/fax.dm index ade10febd2c..4b8d4f9db6e 100644 --- a/code/modules/paperwork/fax.dm +++ b/code/modules/paperwork/fax.dm @@ -45,7 +45,7 @@ var/list/adminfaxes = list() html += "" if(A.sent_by) var/mob/living/S = A.sent_by - html += "" + html += "" else html += "" html += "" @@ -74,7 +74,7 @@ var/list/adminfaxes = list() html += "" if(F.sent_by) var/mob/living/S = F.sent_by - html += "" + html += "" else html += "" html += "" diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index a43e0b66a95..cd0832bd714 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -316,7 +316,7 @@ var/list/alldepartments = list() /obj/machinery/photocopier/faxmachine/proc/message_admins(var/mob/sender, var/faxname, var/faxtype, var/obj/item/sent, font_colour="#9A04D1") - var/msg = "[faxname]: [key_name_admin(sender)] | REPLY: (RADIO) (FAX) (SM) | REJECT: (TEMPLATE) (BSA) (EVILFAX) : Receiving '[sent.name]' via secure connection... view message" + var/msg = "[faxname]: [key_name_admin(sender)] | REPLY: (RADIO) (FAX) ([ADMIN_SM(sender,"SM")]) | REJECT: (TEMPLATE) ([ADMIN_BSA(sender,"BSA")]) (EVILFAX) : Receiving '[sent.name]' via secure connection... view message" for(var/client/C in GLOB.admins) if(check_rights(R_EVENT, 0, C.mob)) to_chat(C, msg) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index f8c47a0214c..06921bce252 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -316,7 +316,7 @@ to_chat(user, "Take off the carbon copy first.") add_fingerprint(user) return - var/obj/item/paper_bundle/B = new(src.loc) + var/obj/item/paper_bundle/B = new(src.loc, default_papers = FALSE) if(name != "paper") B.name = name else if(P.name != "paper" && P.name != "photo") diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index 08cb7b6555e..73c9f9459dc 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -11,11 +11,15 @@ layer = 4 pressure_resistance = 1 attack_verb = list("bapped") - var/amount = 0 //Amount of items clipped to the paper + var/amount = 0 //Amount of items clipped to the paper. Note: If you have 2 paper, this should be 1 var/page = 1 var/screen = 0 - +/obj/item/paper_bundle/New(default_papers = TRUE) + if(default_papers) // This is to avoid runtime occuring from a paper bundle being created without a paper in it. + new /obj/item/paper(src) + new /obj/item/paper(src) + amount += 1 /obj/item/paper_bundle/attackby(obj/item/W as obj, mob/user as mob, params) ..() var/obj/item/paper/P diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index a8a0c8ddd19..a3a8dda68e1 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -72,9 +72,15 @@ photocopy(copyitem) sleep(15) else if(istype(copyitem, /obj/item/paper_bundle)) + var/obj/item/paper_bundle/C = copyitem + if(toner < (C.amount + 1)) + visible_message("A yellow light on [src] flashes, indicating there's not enough toner for the operation.") // It is better to prevent partial bundle than to produce broken paper bundle + return var/obj/item/paper_bundle/B = bundlecopy(copyitem) + if(!B) + return sleep(15*B.amount) - else if(ass && ass.loc == src.loc) + else if(ass && ass.loc == loc) copyass() sleep(15) else @@ -287,7 +293,7 @@ //If need_toner is 0, the copies will still be lightened when low on toner, however it will not be prevented from printing. TODO: Implement print queues for fax machines and get rid of need_toner /obj/machinery/photocopier/proc/bundlecopy(var/obj/item/paper_bundle/bundle, var/need_toner=1) - var/obj/item/paper_bundle/p = new /obj/item/paper_bundle (src) + var/obj/item/paper_bundle/P = new /obj/item/paper_bundle (src, default_papers = FALSE) for(var/obj/item/W in bundle) if(toner <= 0 && need_toner) toner = 0 @@ -298,16 +304,19 @@ W = copy(W) else if(istype(W, /obj/item/photo)) W = photocopy(W) - W.forceMove(p) - p.amount++ - p.amount-- - p.forceMove(get_turf(src)) - p.update_icon() - p.icon_state = "paper_words" - p.name = bundle.name - p.pixel_y = rand(-8, 8) - p.pixel_x = rand(-9, 9) - return p + W.forceMove(P) + P.amount++ + if(!P.amount) + qdel(P) + return null + P.amount-- + P.forceMove(get_turf(src)) + P.update_icon() + P.icon_state = "paper_words" + P.name = bundle.name + P.pixel_y = rand(-8, 8) + P.pixel_x = rand(-9, 9) + return P /obj/machinery/photocopier/MouseDrop_T(mob/target, mob/user) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 5f7ddcc035c..dbf30cd59b0 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -536,9 +536,7 @@ var/turf/T = get_turf(src) var/obj/structure/cable/N = T.get_cable_node() if(prob(50) && electrocute_mob(usr, N, N)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, 1, src) return C.use(10) user.visible_message(\ @@ -555,9 +553,7 @@ if(do_after(user, 50 * W.toolspeed, target = src)) if(terminal && opened && has_electronics!=2) if(prob(50) && electrocute_mob(usr, terminal.powernet, terminal)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, 1, src) return new /obj/item/stack/cable_coil(loc,10) to_chat(user, "You cut the cables and dismantle the power terminal.") @@ -1076,9 +1072,7 @@ smoke.set_up(3, 0, src.loc) smoke.attach(src) smoke.start() - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) for(var/mob/M in viewers(src)) M.show_message("The [src.name] suddenly lets out a blast of smoke and some sparks!", 3, "You hear sizzling electronics.", 2) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 5860bcd1e3a..048cbf65500 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -195,9 +195,7 @@ By design, d1 is the smallest direction and d2 is the highest if(!prob(prb)) return 0 if(electrocute_mob(user, powernet, src, siemens_coeff)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, 1, src) return 1 else return 0 diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index d978e39a7f0..fcb0b12f0d3 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -386,9 +386,7 @@ to_chat(user, "You stick \the [W] into the light socket!") if(has_power() && (W.flags & CONDUCT)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) if(prob(75)) electrocute_mob(user, get_area(src), src, rand(0.7,1.0)) @@ -540,9 +538,7 @@ if(status == LIGHT_OK || status == LIGHT_BURNED) playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) if(on || overloaded) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) status = LIGHT_BROKEN update() diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index 0e9bdd8ddf3..a0e84f8455a 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -99,9 +99,7 @@ if(hasShocked) return 0 hasShocked = 1 - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, AM.loc) - s.start() + do_sparks(5, 1, AM.loc) var/atom/target = get_edge_target_turf(AM, get_dir(src, get_step_away(AM, src))) AM.throw_at(target, 200, 4) spawn(5) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 0bcde54af4b..ca0c4cb749a 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -24,6 +24,7 @@ var/frequency = 0 var/id_tag = null var/datum/radio_frequency/radio_connection + var/datum/effect_system/spark_spread/sparks /obj/machinery/power/emitter/New() ..() @@ -32,6 +33,8 @@ component_parts += new /obj/item/stock_parts/micro_laser(null) component_parts += new /obj/item/stock_parts/manipulator(null) RefreshParts() + sparks = new + sparks.set_up(5, 1, src) /obj/machinery/power/emitter/RefreshParts() var/max_firedelay = 120 @@ -124,6 +127,7 @@ msg_admin_attack("Emitter deleted at ([x],[y],[z] - [ADMIN_JMP(src)])", ATKLOG_FEW) log_game("Emitter deleted at ([x],[y],[z])") investigate_log("deleted at ([x],[y],[z])","singulo") + QDEL_NULL(sparks) return ..() /obj/machinery/power/emitter/update_icon() @@ -206,9 +210,7 @@ A.dir = src.dir playsound(get_turf(src), 'sound/weapons/emitter.ogg', 25, 1) if(prob(35)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + sparks.start() switch(dir) if(NORTH) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index e5a669ef860..6d5d0226e69 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -184,9 +184,7 @@ if(do_after(user, 50 * I.toolspeed, target = src)) if(prob(50) && electrocute_mob(usr, terminal.powernet, terminal)) //animate the electrocution if uncautious and unlucky - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, 1, src) return //give the wires back and delete the terminal @@ -323,9 +321,7 @@ var/turf/T = get_turf(user) var/obj/structure/cable/N = T.get_cable_node() //get the connecting node cable, if there's one if(prob(50) && electrocute_mob(user, N, N)) //animate the electrocution if uncautious and unlucky - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, 1, src) return user.visible_message(\ @@ -446,9 +442,7 @@ qdel(src) return if(prob(15)) //Power drain - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) if(prob(50)) emp_act(1) else diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 6c19971a996..cd73c90d1cf 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -96,9 +96,7 @@ ..() /obj/item/projectile/bullet/pellet/weak/on_range() - var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread - sparks.set_up(1, 1, src) - sparks.start() + do_sparks(1, 1, src) ..() /obj/item/projectile/bullet/pellet/overload @@ -114,9 +112,7 @@ /obj/item/projectile/bullet/pellet/overload/on_range() explosion(src, 0, 0, 2) - var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread - sparks.set_up(3, 3, src) - sparks.start() + do_sparks(3, 3, src) ..() /obj/item/projectile/bullet/midbullet diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index 10786ec4b82..5da56d179bd 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -22,9 +22,7 @@ /obj/item/projectile/energy/electrode/on_hit(var/atom/target, var/blocked = 0) . = ..() if(!ismob(target) || blocked >= 100) //Fully blocked by mob or collided with dense object - burst into sparks! - var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread - sparks.set_up(1, 1, src) - sparks.start() + do_sparks(1, 1, src) else if(iscarbon(target)) var/mob/living/carbon/C = target if(HULK in C.mutations) @@ -34,9 +32,7 @@ C.do_jitter_animation(jitter) /obj/item/projectile/energy/electrode/on_range() //to ensure the bolt sparks when it reaches the end of its range if it didn't hit a target yet - var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread - sparks.set_up(1, 1, src) - sparks.start() + do_sparks(1, 1, src) ..() /obj/item/projectile/energy/declone diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index ef8a36f7f86..85eb3b25c9f 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -193,9 +193,7 @@ icon_state = "snappop" /obj/item/projectile/clown/Bump(atom/A as mob|obj|turf|area) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, 1, src) new /obj/effect/decal/cleanable/ash(loc) visible_message("The [name] explodes!","You hear a snap!") playsound(src, 'sound/effects/snap.ogg', 50, 1) diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index dacd44a5035..43233df217b 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -594,6 +594,11 @@ var/const/INGEST = 2 return 1 +/datum/reagents/proc/check_and_add(reagent, check, add) + if(get_reagent_amount(reagent) < check) + add_reagent(reagent, add) + return TRUE + /datum/reagents/proc/remove_reagent(reagent, amount, safety)//Added a safety check for the trans_id_to if(!isnum(amount)) diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 2a7dac0f48d..d6dc8f91806 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -20,7 +20,7 @@ /obj/machinery/chem_master/New() create_reagents(100) - overlays += "waitlight" + update_icon() /obj/machinery/chem_master/ex_act(severity) switch(severity) @@ -32,6 +32,12 @@ qdel(src) return +/obj/machinery/chem_master/update_icon() + overlays.Cut() + icon_state = "mixer[beaker ? "1" : "0"][powered() ? "" : "_nopower"]" + if(powered()) + overlays += "waitlight" + /obj/machinery/chem_master/blob_act() if(prob(50)) qdel(src) @@ -57,7 +63,7 @@ B.forceMove(src) to_chat(user, "You add the beaker to the machine!") SSnanoui.update_uis(src) - icon_state = "mixer1" + update_icon() else if(istype(B, /obj/item/storage/pill_bottle)) @@ -184,7 +190,7 @@ beaker.forceMove(get_turf(src)) beaker = null reagents.clear_reagents() - icon_state = "mixer0" + update_icon() else if(href_list["createpill"] || href_list["createpill_multiple"]) if(!condi) var/count = 1 diff --git a/code/modules/reagents/chemistry/reagents/drinks.dm b/code/modules/reagents/chemistry/reagents/drinks.dm index b6b4a27e10d..be5e71d53bd 100644 --- a/code/modules/reagents/chemistry/reagents/drinks.dm +++ b/code/modules/reagents/chemistry/reagents/drinks.dm @@ -296,6 +296,7 @@ /datum/reagent/consumable/drink/coffee/overdose_process(mob/living/M, severity) if(volume > 45) M.Jitter(5) + return list(0, STATUS_UPDATE_NONE) /datum/reagent/consumable/drink/coffee/icecoffee name = "Iced Coffee" diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm index bc6f8f66317..3ce9e5587cb 100644 --- a/code/modules/reagents/chemistry/reagents/medicine.dm +++ b/code/modules/reagents/chemistry/reagents/medicine.dm @@ -641,6 +641,7 @@ update_flags |= M.Weaken(3, FALSE) if(effect <= 15) M.emote("collapse") + return list(effect, update_flags) /datum/reagent/medicine/strange_reagent name = "Strange Reagent" diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index 28994d10fb2..281bed84b0e 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -38,11 +38,11 @@ var/list/chemical_mob_spawn_nicecritters = list() // and possible friendly mobs var/turf/T = get_turf(A) var/area/my_area = get_area(T) var/message = "A [reaction_name] reaction has occured in [my_area.name]. (JMP)" - message += " (VV)" + message += " ([ADMIN_VV(A,"VV")])" var/mob/M = get(A, /mob) if(M) - message += " - Carried By: [key_name_admin(M)](?) (FLW)" + message += " - Carried By: [key_name_admin(M)]([ADMIN_QUE(M,"?")]) ([ADMIN_FLW(M,"FLW")])" else message += " - Last Fingerprint: [(A.fingerprintslast ? A.fingerprintslast : "N/A")]" diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index a5d37cb8b60..b08e96a8d9e 100644 --- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm +++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm @@ -157,9 +157,7 @@ /datum/chemical_reaction/blackpowder_explosion/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(2, 1, location) - s.start() + do_sparks(2, 1, location) sleep(rand(20,30)) blackpowder_detonate(holder, created_volume) @@ -186,9 +184,7 @@ datum/chemical_reaction/flash_powder if(holder.has_reagent("stabilizing_agent")) return var/location = get_turf(holder.my_atom) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(2, 1, location) - s.start() + do_sparks(2, 1, location) for(var/mob/living/carbon/C in viewers(5, location)) if(C.flash_eyes()) if(get_dist(C, location) < 4) @@ -206,9 +202,7 @@ datum/chemical_reaction/flash_powder /datum/chemical_reaction/flash_powder_flash/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(2, 1, location) - s.start() + do_sparks(2, 1, location) for(var/mob/living/carbon/C in viewers(5, location)) if(C.flash_eyes()) if(get_dist(C, location) < 4) diff --git a/code/modules/reagents/chemistry/recipes/toxins.dm b/code/modules/reagents/chemistry/recipes/toxins.dm index 462402c4317..0697ccd50d4 100644 --- a/code/modules/reagents/chemistry/recipes/toxins.dm +++ b/code/modules/reagents/chemistry/recipes/toxins.dm @@ -144,9 +144,7 @@ /datum/chemical_reaction/teslium/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(6, 1, location) - s.start() + do_sparks(6, 1, location) /datum/chemical_reaction/mutagen name = "Unstable mutagen" diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 1589b78438b..0253bb32055 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -653,6 +653,15 @@ construction_time = 200 category = list("Exosuit Equipment") +/datum/design/medical_jaw + name = "Exosuit Medical Equipment (Rescue Jaw)" + id = "mech_medical_jaw" + build_type = MECHFAB + req_tech = list("materials" = 4, "engineering" = 6, "magnets" = 6) //now same as jaws of life + materials = list(MAT_METAL=5000,MAT_SILVER=2000,MAT_TITANIUM=1500) + construction_time = 200 + category = list("Exosuit Equipment") + /datum/design/mech_generator name = "Exosuit Equipment (Plasma Generator)" id = "mech_generator" diff --git a/code/modules/response_team/ert_outfits.dm b/code/modules/response_team/ert_outfits.dm index 93227849f1f..be0a6808c39 100644 --- a/code/modules/response_team/ert_outfits.dm +++ b/code/modules/response_team/ert_outfits.dm @@ -411,6 +411,7 @@ l_pocket = /obj/item/grenade/clusterbuster/holy shoes = /obj/item/clothing/shoes/magboots/advance glasses = /obj/item/clothing/glasses/night + r_pocket = /obj/item/nullrod cybernetic_implants = list( /obj/item/organ/internal/cyberimp/chest/nutriment/plus, diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index 3c52246cb23..00bf181a6d3 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -60,8 +60,8 @@ name = "DNA Sampler" desc = "Can be used to take chemical and genetic samples of pretty much anything." icon = 'icons/obj/hypo.dmi' - item_state = "hypo" - icon_state = "hypo" + item_state = "sampler_hypo" + icon_state = "sampler_hypo" flags = NOBLUDGEON var/list/animals = list() var/list/plants = list() diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index e83dc1abc44..2616c6c6c7e 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -284,9 +284,7 @@ var/mob/living/carbon/human/H = user if(H.get_int_organ(/obj/item/organ/internal/cell)) if(A.emagged || A.stat & BROKEN) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, A) - s.start() + do_sparks(3, 1, A) to_chat(H, "The APC power currents surge erratically, damaging your chassis!") H.adjustFireLoss(10,0) else if(A.cell && A.cell.charge > 0) @@ -326,11 +324,11 @@ /obj/item/organ/internal/cyberimp/arm/telebaton name = "telebaton implant" desc = "Telescopic baton implant. Does what it says on the tin" // A better description - + contents = newlist(/obj/item/melee/classic_baton) /obj/item/organ/internal/cyberimp/arm/advmop name = "advanced mop implant" desc = "Advanced mop implant. Does what it says on the tin" // A better description - + contents = newlist(/obj/item/mop/advanced) \ No newline at end of file diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index 02a6d54a073..74d498704aa 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -608,6 +608,7 @@ Note that amputating the affected organ does in fact remove the infection from t "You hear a loud cracking sound coming from \the [owner].",\ "Something feels like it shattered in your [name]!",\ "You hear a sickening crack.") + playsound(owner, "bonebreak", 150, 1) if(owner.dna.species && !(NO_PAIN in owner.dna.species.species_traits)) owner.emote("scream") @@ -728,12 +729,7 @@ Note that amputating the affected organ does in fact remove the infection from t "Your [src.name] explodes!",\ "You hear an explosion!") explosion(get_turf(owner),-1,-1,2,3) - var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread() - spark_system.set_up(5, 0, victim) - spark_system.attach(owner) - spark_system.start() - spawn(10) - qdel(spark_system) + do_sparks(5, 0, victim) qdel(src) /obj/item/organ/external/proc/disfigure() diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm index 73da331e342..2f3667a645f 100644 --- a/code/modules/telesci/telepad.dm +++ b/code/modules/telesci/telepad.dm @@ -155,8 +155,6 @@ /obj/item/rcs/emag_act(user as mob) if(!emagged) emagged = 1 - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, 1, src) to_chat(user, " You emag the RCS. Activate it to toggle between modes.") return diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index 2e3cd109062..f458d6e7152 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -145,9 +145,7 @@ /obj/machinery/computer/telescience/proc/sparks() if(telepad) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, get_turf(telepad)) - s.start() + do_sparks(5, 1, get_turf(telepad)) else return @@ -203,9 +201,7 @@ // use a lot of power use_power(power * 10) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, get_turf(telepad)) - s.start() + do_sparks(5, 1, get_turf(telepad)) temp_msg = "Teleport successful.
" if(teles_left < 10) @@ -214,9 +210,7 @@ temp_msg += "Data printed below." var/sparks = get_turf(target) - var/datum/effect_system/spark_spread/y = new /datum/effect_system/spark_spread - y.set_up(5, 1, sparks) - y.start() + do_sparks(5, 1, sparks) var/turf/source = target var/turf/dest = get_turf(telepad) diff --git a/html/changelog.html b/html/changelog.html index 1d19c855ad3..735cb9d6cee 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,156 @@ -->
+

19 October 2018

+

Fox McCloud updated:

+
    +
  • Fixes round-start sparks being stuck in maintenance
  • +
+

TDSSS updated:

+
    +
  • New exosuit equipment: The rescue jaws for the Odysseus lets it open doors, firelocks and even force powered doors. It can also be added to firefighter ripleys.
  • +
+

Triiodine updated:

+
    +
  • new DNA Sampler Sprite
  • +
+

Warior4356 updated:

+
    +
  • Added nanoui for safe. Added minor quality of life to safe.
  • +
  • Removed old UI from safe
  • +
  • Safe now is only Right - Left - Right. Safe is 0-99 rather than 0-71.
  • +
  • Added safe dial for it's nanoui.
  • +
+ +

18 October 2018

+

IrkallaEpsilon updated:

+
    +
  • Feral Cat grenades are now listed as job specific items.
  • +
+

Shazbot updated:

+
    +
  • Shazbot's custom cyborg sprites.
  • +
+

Squirgenheimer updated:

+
    +
  • Ghosting from cryopods with an inventory open should no longer cause a runtime
  • +
+

Triiodine updated:

+
    +
  • disposals pipes sprite offsets & stray pixels.
  • +
  • id_decal icons
  • +
  • arcade id_decals using mind batterer sprite. (That's just silly.)
  • +
+ +

17 October 2018

+

Alonefromhell updated:

+
    +
  • Added a Nanotrasen Navy Uniform to the blueshields locker
  • +
+

Crazylemon updated:

+
    +
  • Buildmode is now compatible with 511 clients.
  • +
+

FalseIncarnate updated:

+
    +
  • Floodlights will now shut off if lacking a power cell.
  • +
+

Fox McCloud updated:

+
    +
  • Fixes the Timer SS timing out when it shouldn't
  • +
  • Fixes reagent overdose runtimes
  • +
+

TDSSS updated:

+
    +
  • Examining a borg tells you what module it has loaded
  • +
+

datlo updated:

+
    +
  • Added the Honk Brand Infiltration Kit to Nuke Ops.
  • +
+ +

16 October 2018

+

FalseIncarnate updated:

+
    +
  • Corpse spawners (such as those on the Wild West away mission) now properly spawn corpses at roundstart that don't remain standing.
  • +
+ +

15 October 2018

+

FreeStylaLT updated:

+
    +
  • Crunchy sounds when bones are broken
  • +
+

Squirgenheimer updated:

+
    +
  • Changelings will now wake up after using Regenerative Stasis.
  • +
+

TDSSS updated:

+
    +
  • The maximal length of a name that won't be rejected as a 'bad name' has been raised.
  • +
+

Ty-Omaha updated:

+
    +
  • Fixes stunbaton runtime (Stun() being called on a turf)
  • +
  • Borers with their "Dominate" window already open can no longer run across the map and successfully cast the spell on those people, they must be within 7 tiles (default view range)
  • +
  • Borers can no longer spam open the "Dominate" spell
  • +
  • Borers with their "Dominate" target window already open can no longer successfully target someone if they are dead
  • +
  • Borers no longer "slither up and probe people's ear canal" if they select the target of an "infect host" spell after they die
  • +
+

uc_guy updated:

+
    +
  • You can no longer roll around when dead.
  • +
+ +

14 October 2018

+

Purpose updated:

+
    +
  • Makes it so that Screwdrivers & Wirecutters are no longer invisible in the map editor.
  • +
  • Fixes a gibbing runtime
  • +
+

taac updated:

+
    +
  • added cryo cell description
  • +
+

uc_guy updated:

+
    +
  • fixed runtime in IsBanned.dm
  • +
+

variableundefined updated:

+
    +
  • Stacks are split by CtrlShiftClick instead of AltClick now.
  • +
  • A runtime that occurs with paper bundle being created with one or less paper.
  • +
+ +

13 October 2018

+

Birdtalon updated:

+
    +
  • Chem master now will show its de-powered state properly.
  • +
+

DarkPyrolord updated:

+
    +
  • Changed attack log level for reagent forcefeeding from FEW to MOST
  • +
+

FlimFlamm updated:

+
    +
  • Tweaked formatting of Newscaster stories
  • +
  • Fixes images displaying improperly on Newscaster stories
  • +
+

Ty-Omaha updated:

+
    +
  • Boxing logs moved to the ALL preference
  • +
+

alex-gh updated:

+
    +
  • Species damage modifiers now only affect damage, not healing.
  • +
  • Races that took more damage from certain damage types no longer heal from that damage type faster. For example: Drask no longer heal from burn at double rate; Grey, Vox no longer heal from brute at increased rate (Note: IPC healing with welders/wires is not affected).
  • +
  • Kidan no longer heal from brute at a reduced rate.
  • +
+

uc_guy updated:

+
    +
  • You can no longer get an infection and die during abductor surgery.
  • +
  • Voice analyzers no longer activate on noise.
  • +
+

12 October 2018

Alonefromhell updated:

    @@ -63,6 +213,34 @@
  • META - Cargo shuttle airlocks now bolt properly.
  • META - Cargo shuttle flaps are now airtight. All hail Cargonia.
+

Birdtalon updated:

+
    +
  • Gamma ERT Paranormal gets their null rod.
  • +
  • Moves check_and_add() to reagents holder
  • +
+

DesolateG updated:

+
    +
  • Refactors global var lists to use the global subsystem.
  • +
+

Farie82 updated:

+
    +
  • Added the on_give proc for items. Was needed for the fixes
  • +
  • Giving two handed items like the DIY chainsaw and potted plants now works correctly
  • +
  • The DIY chainsaw, doomslayer chainsaw and the potted plants now do damage when given to somebody else and when picked up while the chainsaw was on.
  • +
+

Purpose updated:

+
    +
  • Cyberiad's grimy tiles are now actually dirty and cleanable.
  • +
  • Delta's grimy tiles are now actually dirty and cleanable.
  • +
  • Ironsand is now visible in the Map Maker.
  • +
  • Away missions updated with the appropriate dirt/grime so that it is now cleanable.
  • +
  • Fixes stool's unique suicide message.
  • +
  • Fixes rollerbeds no longer going through plastic flaps.
  • +
+

TDSSS updated:

+
    +
  • Removed Skrell discrimination, allows ! character in IDs (agent IDs or made via ID computer)
  • +

variableundefined updated:

  • Ore now represented by stack that holds up to 50 items. Should reduce lag with ORM greatly.
  • diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 4a3974e3afd..24edf7d9cf9 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -7442,6 +7442,28 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: META - Cargo shuttle blast doors now reacts to the right button. - bugfix: META - Cargo shuttle airlocks now bolt properly. - bugfix: META - Cargo shuttle flaps are now airtight. All hail Cargonia. + Birdtalon: + - bugfix: Gamma ERT Paranormal gets their null rod. + - tweak: Moves check_and_add() to reagents holder + DesolateG: + - tweak: Refactors global var lists to use the global subsystem. + Farie82: + - rscadd: Added the on_give proc for items. Was needed for the fixes + - bugfix: Giving two handed items like the DIY chainsaw and potted plants now works + correctly + - bugfix: The DIY chainsaw, doomslayer chainsaw and the potted plants now do damage + when given to somebody else and when picked up while the chainsaw was on. + Purpose: + - tweak: Cyberiad's grimy tiles are now actually dirty and cleanable. + - tweak: Delta's grimy tiles are now actually dirty and cleanable. + - bugfix: Ironsand is now visible in the Map Maker. + - bugfix: Away missions updated with the appropriate dirt/grime so that it is now + cleanable. + - bugfix: Fixes stool's unique suicide message. + - bugfix: Fixes rollerbeds no longer going through plastic flaps. + TDSSS: + - bugfix: Removed Skrell discrimination, allows ! character in IDs (agent IDs or + made via ID computer) variableundefined: - tweak: Ore now represented by stack that holds up to 50 items. Should reduce lag with ORM greatly. @@ -7455,3 +7477,100 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - rscadd: You can throw sand into people's eyes! Pocket sand! - tweak: 'Phazon take 5 bluespace crystal to construct now instead of 1. remove: Transfer prompt when you click on a stack of the same type with a stack' +2018-10-13: + Birdtalon: + - bugfix: Chem master now will show its de-powered state properly. + DarkPyrolord: + - tweak: Changed attack log level for reagent forcefeeding from FEW to MOST + FlimFlamm: + - tweak: Tweaked formatting of Newscaster stories + - bugfix: Fixes images displaying improperly on Newscaster stories + Ty-Omaha: + - tweak: Boxing logs moved to the ALL preference + alex-gh: + - bugfix: Species damage modifiers now only affect damage, not healing. + - tweak: 'Races that took more damage from certain damage types no longer heal from + that damage type faster. For example: Drask no longer heal from burn at double + rate; Grey, Vox no longer heal from brute at increased rate (Note: IPC healing + with welders/wires is not affected).' + - tweak: Kidan no longer heal from brute at a reduced rate. + uc_guy: + - bugfix: You can no longer get an infection and die during abductor surgery. + - bugfix: Voice analyzers no longer activate on noise. +2018-10-14: + Purpose: + - bugfix: Makes it so that Screwdrivers & Wirecutters are no longer invisible in + the map editor. + - bugfix: Fixes a gibbing runtime + taac: + - bugfix: added cryo cell description + uc_guy: + - bugfix: fixed runtime in IsBanned.dm + variableundefined: + - tweak: Stacks are split by CtrlShiftClick instead of AltClick now. + - bugfix: A runtime that occurs with paper bundle being created with one or less + paper. +2018-10-15: + FreeStylaLT: + - rscadd: Crunchy sounds when bones are broken + Squirgenheimer: + - bugfix: Changelings will now wake up after using Regenerative Stasis. + TDSSS: + - tweak: The maximal length of a name that won't be rejected as a 'bad name' has + been raised. + Ty-Omaha: + - bugfix: Fixes stunbaton runtime (Stun() being called on a turf) + - bugfix: Borers with their "Dominate" window already open can no longer run across + the map and successfully cast the spell on those people, they must be within + 7 tiles (default view range) + - bugfix: Borers can no longer spam open the "Dominate" spell + - bugfix: Borers with their "Dominate" target window already open can no longer + successfully target someone if they are dead + - bugfix: Borers no longer "slither up and probe people's ear canal" if they select + the target of an "infect host" spell after they die + uc_guy: + - bugfix: You can no longer roll around when dead. +2018-10-16: + FalseIncarnate: + - bugfix: Corpse spawners (such as those on the Wild West away mission) now properly + spawn corpses at roundstart that don't remain standing. +2018-10-17: + Alonefromhell: + - rscadd: Added a Nanotrasen Navy Uniform to the blueshields locker + Crazylemon: + - bugfix: Buildmode is now compatible with 511 clients. + FalseIncarnate: + - bugfix: Floodlights will now shut off if lacking a power cell. + Fox McCloud: + - bugfix: Fixes the Timer SS timing out when it shouldn't + - bugfix: Fixes reagent overdose runtimes + TDSSS: + - rscadd: Examining a borg tells you what module it has loaded + datlo: + - rscadd: Added the Honk Brand Infiltration Kit to Nuke Ops. +2018-10-18: + IrkallaEpsilon: + - bugfix: Feral Cat grenades are now listed as job specific items. + Shazbot: + - rscadd: Shazbot's custom cyborg sprites. + Squirgenheimer: + - bugfix: Ghosting from cryopods with an inventory open should no longer cause a + runtime + Triiodine: + - bugfix: disposals pipes sprite offsets & stray pixels. + - rscadd: id_decal icons + - bugfix: arcade id_decals using mind batterer sprite. (That's just silly.) +2018-10-19: + Fox McCloud: + - bugfix: Fixes round-start sparks being stuck in maintenance + TDSSS: + - rscadd: 'New exosuit equipment: The rescue jaws for the Odysseus lets it open + doors, firelocks and even force powered doors. It can also be added to firefighter + ripleys.' + Triiodine: + - rscadd: new DNA Sampler Sprite + Warior4356: + - rscadd: Added nanoui for safe. Added minor quality of life to safe. + - rscdel: Removed old UI from safe + - tweak: Safe now is only Right - Left - Right. Safe is 0-99 rather than 0-71. + - imageadd: Added safe dial for it's nanoui. diff --git a/html/changelogs/AutoChangeLog-pr-9677.yml b/html/changelogs/AutoChangeLog-pr-9677.yml deleted file mode 100644 index ea12e7e55e3..00000000000 --- a/html/changelogs/AutoChangeLog-pr-9677.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "DesolateG" -delete-after: True -changes: - - tweak: "Refactors global var lists to use the global subsystem." diff --git a/html/changelogs/AutoChangeLog-pr-9815.yml b/html/changelogs/AutoChangeLog-pr-9815.yml deleted file mode 100644 index 1440dc00ab4..00000000000 --- a/html/changelogs/AutoChangeLog-pr-9815.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "TDSSS" -delete-after: True -changes: - - bugfix: "Removed Skrell discrimination, allows ! character in IDs (agent IDs or made via ID computer)" diff --git a/html/changelogs/AutoChangeLog-pr-9817.yml b/html/changelogs/AutoChangeLog-pr-9817.yml deleted file mode 100644 index 49b105caa1e..00000000000 --- a/html/changelogs/AutoChangeLog-pr-9817.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Purpose" -delete-after: True -changes: - - bugfix: "Fixes stool's unique suicide message." - - bugfix: "Fixes rollerbeds no longer going through plastic flaps." diff --git a/html/changelogs/AutoChangeLog-pr-9818.yml b/html/changelogs/AutoChangeLog-pr-9818.yml deleted file mode 100644 index b031aaeb7a5..00000000000 --- a/html/changelogs/AutoChangeLog-pr-9818.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Farie82" -delete-after: True -changes: - - rscadd: "Added the on_give proc for items. Was needed for the fixes" - - bugfix: "Giving two handed items like the DIY chainsaw and potted plants now works correctly" - - bugfix: "The DIY chainsaw, doomslayer chainsaw and the potted plants now do damage when given to somebody else and when picked up while the chainsaw was on." diff --git a/html/changelogs/AutoChangeLog-pr-9819.yml b/html/changelogs/AutoChangeLog-pr-9819.yml deleted file mode 100644 index 937b4deacbe..00000000000 --- a/html/changelogs/AutoChangeLog-pr-9819.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Purpose" -delete-after: True -changes: - - tweak: "Cyberiad's grimy tiles are now actually dirty and cleanable." diff --git a/html/changelogs/AutoChangeLog-pr-9820.yml b/html/changelogs/AutoChangeLog-pr-9820.yml deleted file mode 100644 index 33afd4c3702..00000000000 --- a/html/changelogs/AutoChangeLog-pr-9820.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Purpose" -delete-after: True -changes: - - tweak: "Delta's grimy tiles are now actually dirty and cleanable." diff --git a/html/changelogs/AutoChangeLog-pr-9821.yml b/html/changelogs/AutoChangeLog-pr-9821.yml deleted file mode 100644 index 75bb220f482..00000000000 --- a/html/changelogs/AutoChangeLog-pr-9821.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Purpose" -delete-after: True -changes: - - bugfix: "Ironsand is now visible in the Map Maker." - - bugfix: "Away missions updated with the appropriate dirt/grime so that it is now cleanable." diff --git a/icons/mob/custom_synthetic/custom-synthetic.dmi b/icons/mob/custom_synthetic/custom-synthetic.dmi index 3d3a7a5c685..5b50438d6dd 100644 Binary files a/icons/mob/custom_synthetic/custom-synthetic.dmi and b/icons/mob/custom_synthetic/custom-synthetic.dmi differ diff --git a/icons/obj/hypo.dmi b/icons/obj/hypo.dmi index a51a981251d..7dd561de617 100644 Binary files a/icons/obj/hypo.dmi and b/icons/obj/hypo.dmi differ diff --git a/icons/obj/pipes/disposal.dmi b/icons/obj/pipes/disposal.dmi index 83440fc1b52..f2dd62c9393 100644 Binary files a/icons/obj/pipes/disposal.dmi and b/icons/obj/pipes/disposal.dmi differ diff --git a/icons/obj/tools.dmi b/icons/obj/tools.dmi index a78a0babdc4..1111dfb02ee 100644 Binary files a/icons/obj/tools.dmi and b/icons/obj/tools.dmi differ diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi index b7f40b4cdbb..524418ba0e9 100644 Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ diff --git a/nano/images/Scarborough Arms.svg b/nano/images/Scarborough Arms.svg new file mode 100644 index 00000000000..cf164903bdf --- /dev/null +++ b/nano/images/Scarborough Arms.svg @@ -0,0 +1,75 @@ + + + + + + + + + + image/svg+xml + + + + + + + SA + + diff --git a/nano/images/safe_dial.png b/nano/images/safe_dial.png new file mode 100644 index 00000000000..de24f16b670 Binary files /dev/null and b/nano/images/safe_dial.png differ diff --git a/nano/templates/autolathe.tmpl b/nano/templates/autolathe.tmpl index 55e017ca95c..d56ae4926c3 100644 --- a/nano/templates/autolathe.tmpl +++ b/nano/templates/autolathe.tmpl @@ -121,7 +121,7 @@ Used In File(s): \code\game\machinery\autolathe.dm {{if !value.can_build}} {{/if}} - {{:value.name}} {{:value.multiplier > 1 ? '(xvalue.multiplier)' : ''}} + {{:value.name}} {{:value.multiplier > 1 ? '(' + value.multiplier + ')' : ''}} {{if !value.can_build}} {{/if}} diff --git a/nano/templates/newscaster.tmpl b/nano/templates/newscaster.tmpl index 16c201407e3..4ddf376e71f 100644 --- a/nano/templates/newscaster.tmpl +++ b/nano/templates/newscaster.tmpl @@ -139,11 +139,15 @@ Property of Nanotrasen

    {{else}} {{for data.messages}}
    - {{:value.title}}
    - {{:value.body}}
    +

    + {{:value.title}}
    +

    {{if value.img}} -
    - {{/if}} +
    + {{/if}} +

    + {{:value.body}}
    +

    [{{:value.message_type}} by {{:value.author}}]
    Message view count: {{:value.view_count}}
    @@ -296,10 +300,10 @@ Property of Nanotrasen

    {{:data.description}}
-
Photo:
+
Photo:

{{if data.photo}} - +
{{else}} None {{/if}} diff --git a/nano/templates/safe.tmpl b/nano/templates/safe.tmpl new file mode 100644 index 00000000000..e0c98215737 --- /dev/null +++ b/nano/templates/safe.tmpl @@ -0,0 +1,62 @@ + + + +{{if data.open}} +
+
+
{{:helper.link('Close', 'caret-square-o-up', {'open': 1})}}
+
+
+
+ {{for data.contents}} +
+ {{:helper.link(value.name, 'arrow-left', {'retrieve': value.index})}} +
+ {{/for}} +
+{{else}} +
+
+
{{:helper.link('Open', 'caret-square-o-down', {'open': 1})}}
+
+
+
+
+
{{:helper.link('Left 50', 'arrow-left', {'increment': 50})}}
+
{{:helper.link('Left 10', 'arrow-left', {'increment': 10})}}
+
{{:helper.link('Left 1', 'arrow-left', {'increment': 1})}}
+
+ {{if data.unlocked}} +
{{:helper.link('Right 1', 'arrow-right', null, 'disabled')}}
+
{{:helper.link('Right 10', 'arrow-right', null, 'disabled')}}
+
{{:helper.link('Right 100', 'arrow-right', null, 'disabled')}}
+ {{else}} +
{{:helper.link('Right 1', 'arrow-right', {'decrement': 1})}}
+
{{:helper.link('Right 10', 'arrow-right', {'decrement': 10})}}
+
{{:helper.link('Right 50', 'arrow-right', {'decrement': 50})}}
+ {{/if}} +
+
+
+ +
+
+
+
+
+
How to open your Scarborough Arms - 2 tumbler safe
+
+
1. Turn the dial to the right past the first number twice
+
2. Stop at the first number
+
3. Turn the dial to the left past the second number once
+
4. Stop at the second number
+
5. Turn to the right until the dial stops
+
6. Open the safe
+
+
To lock fully, turn the dial to the left for three rotations
+
+{{/if}} \ No newline at end of file diff --git a/sound/effects/bone_break_1.ogg b/sound/effects/bone_break_1.ogg new file mode 100644 index 00000000000..0c7d31a9769 Binary files /dev/null and b/sound/effects/bone_break_1.ogg differ diff --git a/sound/effects/bone_break_2.ogg b/sound/effects/bone_break_2.ogg new file mode 100644 index 00000000000..0e0c71def88 Binary files /dev/null and b/sound/effects/bone_break_2.ogg differ diff --git a/sound/effects/bone_break_3.ogg b/sound/effects/bone_break_3.ogg new file mode 100644 index 00000000000..420c61a9f8d Binary files /dev/null and b/sound/effects/bone_break_3.ogg differ diff --git a/sound/effects/bone_break_4.ogg b/sound/effects/bone_break_4.ogg new file mode 100644 index 00000000000..93ad793b6a2 Binary files /dev/null and b/sound/effects/bone_break_4.ogg differ diff --git a/sound/effects/bone_break_5.ogg b/sound/effects/bone_break_5.ogg new file mode 100644 index 00000000000..e052c0ba091 Binary files /dev/null and b/sound/effects/bone_break_5.ogg differ diff --git a/sound/effects/bone_break_6.ogg b/sound/effects/bone_break_6.ogg new file mode 100644 index 00000000000..7cba2da19ae Binary files /dev/null and b/sound/effects/bone_break_6.ogg differ
Whitelisted Positions
Whitelisted Positions
[replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")]
[key_string][H.real_name][job_string][mins_ssd][role_string][get_area(H)]PP[get_area(H)][ADMIN_PP(H,"PP")]In Cryo[station_time_timestamp("hh:mm:ss", A.sent_at)][S.name][ADMIN_PP(S,"[S.name]")]UnknownView[station_time_timestamp("hh:mm:ss", F.sent_at)][S.name][ADMIN_PP(S,"[S.name]")]UnknownView