diff --git a/code/controllers/subsystem/voting.dm b/code/controllers/subsystem/voting.dm index 56bc7b62660..164de5d5521 100644 --- a/code/controllers/subsystem/voting.dm +++ b/code/controllers/subsystem/voting.dm @@ -192,6 +192,8 @@ var/datum/subsystem/vote/SSvote for(var/c in clients) var/client/C = c var/datum/action/vote/V = new + if(question) + V.name = "Vote: [question]" V.Grant(C.mob) generated_actions += V return 1 @@ -305,4 +307,4 @@ var/datum/subsystem/vote/SSvote Remove(owner) /datum/action/vote/IsAvailable() - return 1 \ No newline at end of file + return 1 diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index 636fe668dff..5b91c3dffca 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -141,18 +141,6 @@ This file's folder contains: S.show_laws() return 1 -/proc/send_hierophant_message(mob/user, message, large) - if(!user || !message || !ticker || !ticker.mode) - return 0 - var/parsed_message = "Servant [user.name == user.real_name ? user.name : "[user.real_name] (as [user.name])"]: \"[message]\"" - for(var/M in mob_list) - if(isobserver(M)) - var/link = FOLLOW_LINK(M, user) - M << "[link] [parsed_message]" - else if(is_servant_of_ratvar(M)) - M << parsed_message - return 1 - /////////////// // GAME MODE // /////////////// diff --git a/code/game/gamemodes/clock_cult/clock_machines.dm b/code/game/gamemodes/clock_cult/clock_machines.dm index 42077d41548..b2f06b43d2f 100644 --- a/code/game/gamemodes/clock_cult/clock_machines.dm +++ b/code/game/gamemodes/clock_cult/clock_machines.dm @@ -579,7 +579,7 @@ user << "The obelisk lacks the power to broadcast!" return clockwork_say(user, "Uvrebcunag Oebnqpnfg, npgvingr!") - send_hierophant_message(user, input, 1) + send_hierophant_message(user, input, "big_brass", "large_brass") if("Spatial Gateway") if(gateway_active) user << "The obelisk is already sustaining a gateway!" diff --git a/code/game/gamemodes/clock_cult/clock_scripture.dm b/code/game/gamemodes/clock_cult/clock_scripture.dm index 5b966d37d0f..a8002c92653 100644 --- a/code/game/gamemodes/clock_cult/clock_scripture.dm +++ b/code/game/gamemodes/clock_cult/clock_scripture.dm @@ -204,7 +204,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed desc = "Forms a visor that, when worn, will grant the ability to form a flame in your hand that can be activated at an area to smite it, stunning and damaging the nonfaithful. \ Cultists of Nar-Sie will be set on fire, though they will be stunned for half the time." invocations = list("Tenag zr gur synzrf-bs Ratvar!") - channel_time = 0 + channel_time = 10 required_components = list("belligerent_eye" = 2) consumed_components = list("belligerent_eye" = 1) whispered = TRUE @@ -293,7 +293,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed /datum/clockwork_scripture/guvax //Guvax: Converts anyone adjacent to the invoker after completion. - descname = "Area Convert" + descname = "Melee Area Convert" name = "Guvax" desc = "Enlists all nearby living unshielded creatures into servitude to Ratvar. Also purges holy water from nearby servants." invocations = list("Rayvtugra guvf urngura!", "Nyy ner vafrpgf orsber Ratvar!", "Chetr nyy hageh'guf naq ubabe Ratvar.") @@ -359,7 +359,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed /datum/clockwork_scripture/replicant //Replicant: Creates a new clockwork slab. Doesn't use create_object because of its unique behavior. - descname = "New Slab" + descname = "New Clockwork Slab" name = "Replicant" desc = "Creates a new clockwork slab." invocations = list("Z`rgny, orpbzr terngre!") @@ -382,7 +382,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed name = "Tinkerer's Cache" desc = "Forms a cache that can store an infinite amount of components. All caches are linked and will provide components to slabs." invocations = list("Ohv’yqva...", "...n qvfcra’fre!") - channel_time = 40 + channel_time = 50 required_components = list("replicant_alloy" = 2) consumed_components = list("replicant_alloy" = 1) object_path = /obj/structure/clockwork/cache @@ -399,7 +399,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed name = "Wraith Spectacles" desc = "Fabricates a pair of glasses that provides true sight but quickly damage vision, eventually causing blindness if worn for too long." invocations = list("Y'vsg gur fpnyrf sebz zl rl-rf.") - channel_time = 0 + channel_time = 10 required_components = list("hierophant_ansible" = 1) whispered = TRUE object_path = /obj/item/clothing/glasses/wraith_spectacles @@ -433,8 +433,8 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed name = "Ocular Warden" desc = "Forms an automatic short-range turret that deals low sustained damage to the unenlightened in its range." invocations = list("Thne’qvnaf...", "...bs gur Ratvar...", "...qrs’raq!") - channel_time = 150 - required_components = list("belligerent_eye" = 1, "replicant_alloy" = 1) + channel_time = 120 + required_components = list("belligerent_eye" = 2, "replicant_alloy" = 1) consumed_components = list("belligerent_eye" = 1, "replicant_alloy" = 1) object_path = /obj/structure/clockwork/ocular_warden creator_message = "You form an ocular warden, which will focus its searing gaze upon nearby unenlightened." @@ -457,8 +457,8 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed chant_invocations = list("Qenj punetr gb guv’f furyy!") chant_amount = 30 chant_interval = 10 - required_components = list("belligerent_eye" = 1, "hierophant_ansible" = 1) - consumed_components = list("belligerent_eye" = 1, "hierophant_ansible" = 1) + required_components = list("guvax_capacitor" = 1, "hierophant_ansible" = 2) + consumed_components = list("guvax_capacitor" = 1, "hierophant_ansible" = 1) usage_tip = "If standing on a Sigil of Transmission, will transfer power to it. Augumented limbs will also be healed unless above a very high threshhold." tier = SCRIPTURE_SCRIPT var/total_power_drained = 0 @@ -541,9 +541,9 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed descname = "Necessary, Converts Objects" name = "Clockwork Proselytizer" desc = "Forms a device that, when used on certain objects, converts them into their Ratvarian equivalents. It requires replicant alloys to function." - invocations = list("Jvgu guv’f qrivpr, uvf cerfrapr funyy or znqr xabja.") - channel_time = 0 - required_components = list("guvax_capacitor" = 1, "replicant_alloy" = 1) + invocations = list("Jvgu guv’f qrivpr...", "...uvf cerfrapr funyy or znqr xabja.") + channel_time = 20 + required_components = list("guvax_capacitor" = 1, "replicant_alloy" = 2) consumed_components = list("guvax_capacitor" = 1, "replicant_alloy" = 1) whispered = TRUE object_path = /obj/item/clockwork/clockwork_proselytizer/preloaded @@ -560,8 +560,8 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed It grows faster to invoke with more nearby servants." invocations = list("Fuvryq zr...", "...jvgu gur sentzragf...", "...bs Ratvar!") channel_time = 110 //effectively 100 because it counts the invoker - required_components = list("vanguard_cogwheel" = 1, "hierophant_ansible" = 1) - consumed_components = list("vanguard_cogwheel" = 1, "hierophant_ansible" = 1) + required_components = list("vanguard_cogwheel" = 2, "replicant_alloy" = 1) + consumed_components = list("vanguard_cogwheel" = 1, "replicant_alloy" = 1) usage_tip = "Before using, advise adjacent allies to remove their helmets, external suits, gloves, and shoes." tier = SCRIPTURE_SCRIPT multiple_invokers_used = TRUE @@ -594,8 +594,8 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed It will vanish five minutes after being called." invocations = list("Tenag zr...", "...gur zvtug-bs oenff!") channel_time = 20 - required_components = list("vanguard_cogwheel" = 1, "replicant_alloy" = 1) - consumed_components = list("vanguard_cogwheel" = 1, "replicant_alloy" = 1) + required_components = list("replicant_alloy" = 2, "hierophant_ansible" = 1) + consumed_components = list("replicant_alloy" = 1, "hierophant_ansible" = 1) whispered = TRUE usage_tip = "You can impale human targets with the spear by pulling them, then attacking. Throwing the spear at a mob will do massive damage, but break the spear." tier = SCRIPTURE_SCRIPT @@ -621,8 +621,8 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed Each servant assisting in the invocation adds one additional use and four additional seconds to the gateway's uses and duration." invocations = list("Gryrcbegre...", "...pbzva evtug-hc!") channel_time = 80 - required_components = list("replicant_alloy" = 1, "hierophant_ansible" = 1) - consumed_components = list("replicant_alloy" = 1, "hierophant_ansible" = 1) + required_components = list("vanguard_cogwheel" = 1, "hierophant_ansible" = 2) + consumed_components = list("vanguard_cogwheel" = 1, "hierophant_ansible" = 1) multiple_invokers_used = TRUE multiple_invokers_optional = TRUE usage_tip = "This gateway is strictly one-way and will only allow things through the invoker's portal." @@ -661,10 +661,10 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed descname = "Clockwork Posibrain" name = "Soul Vessel" desc = "Forms an ancient positronic brain with an overriding directive to serve Ratvar." - invocations = list("Ureq'gur fbhyf-bs gur oynf curz-bhf qnzarq!") - channel_time = 0 - required_components = list("replicant_alloy" = 1, "guvax_capacitor" = 1) - consumed_components = list("replicant_alloy" = 1, "guvax_capacitor" = 1) + invocations = list("Ureq'gur fbhyf-bs...", "...gur oynf curz-bhf qnzarq!") + channel_time = 20 + required_components = list("vanguard_cogwheel" = 1, "guvax_capacitor" = 2) + consumed_components = list("vanguard_cogwheel" = 1, "guvax_capacitor" = 1) whispered = TRUE object_path = /obj/item/device/mmi/posibrain/soul_vessel creator_message = "You form a soul vessel, which immediately begins drawing in the damned." @@ -679,8 +679,8 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed desc = "Creates a small shell fitted for soul vessels. Adding an active soul vessel to it results in a small construct with tools and an inbuilt proselytizer." invocations = list("Pnyy sbegu...", "...gur jbexref-bs Nezbere.") channel_time = 50 - required_components = list("guvax_capacitor" = 1, "hierophant_ansible" = 1) - consumed_components = list("guvax_capacitor" = 1, "hierophant_ansible" = 1) + required_components = list("belligerent_eye" = 2, "hierophant_ansible" = 1) + consumed_components = list("belligerent_eye" = 1, "hierophant_ansible" = 1) object_path = /obj/structure/clockwork/shell/cogscarab creator_message = "You form a cogscarab, a constructor soul vessel receptable." observer_message = "The slab disgorges a puddle of black metal that contracts and forms into a strange shell!" @@ -695,8 +695,8 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed desc = "Places a luminous sigil that will enslave any valid beings standing on it after a time." invocations = list("Qvivavgl, rayvtugra...", "...gubfr jub gerfcnff urer!") channel_time = 60 - required_components = list("guvax_capacitor" = 2) - consumed_components = list("guvax_capacitor" = 1) + required_components = list("belligerent_eye" = 1, "guvax_capacitor" = 2) + consumed_components = list("belligerent_eye" = 1, "guvax_capacitor" = 1) whispered = TRUE object_path = /obj/effect/clockwork/sigil/submission creator_message = "A luminous sigil appears below you. The next non-servant to cross it will be enslaved after a brief time if they do not move." @@ -715,9 +715,9 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed desc = "Creates a large shell fitted for soul vessels. Adding an active soul vessel to it results in a powerful construct with decent health, notable melee power, \ and exceptional speed, though taking damage will temporarily slow it down." invocations = list("Pnyy sbegu...", "...gur fbyqvref-bs Nezbere.") - channel_time = 50 - required_components = list("belligerent_eye" = 2, "guvax_capacitor" = 1, "replicant_alloy" = 2) - consumed_components = list("belligerent_eye" = 1, "guvax_capacitor" = 1, "replicant_alloy" = 2) + channel_time = 70 + required_components = list("belligerent_eye" = 1, "vanguard_cogwheel" = 1, "replicant_alloy" = 3) + consumed_components = list("belligerent_eye" = 1, "vanguard_cogwheel" = 1, "replicant_alloy" = 2) object_path = /obj/structure/clockwork/shell/fragment creator_message = "You form an anima fragment, a powerful soul vessel receptable." observer_message = "The slab disgorges a puddle of black metal that expands and forms into a strange shell!" @@ -732,9 +732,9 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed desc = "Places a luminous sigil much like a Sigil of Submission, but it will remain even after successfully converting a non-implanted target. \ It will penetrate mindshield implants once before disappearing." invocations = list("Qvivavgl, rafynir...", "...nyy jub gerfcnff urer!") - channel_time = 100 - required_components = list("belligerent_eye" = 2, "guvax_capacitor" = 2, "hierophant_ansible" = 2) - consumed_components = list("belligerent_eye" = 1, "guvax_capacitor" = 1, "hierophant_ansible" = 1) + channel_time = 70 + required_components = list("belligerent_eye" = 3, "guvax_capacitor" = 1, "hierophant_ansible" = 1) + consumed_components = list("belligerent_eye" = 2, "guvax_capacitor" = 1, "hierophant_ansible" = 1) whispered = TRUE object_path = /obj/effect/clockwork/sigil/submission/accession prevent_path = /obj/effect/clockwork/sigil/submission @@ -750,9 +750,9 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed name = "Sigil of Transmission" desc = "Scribes a sigil beneath the invoker which stores power to power clockwork structures." invocations = list("Qvivavgl...", "punetr gur-znpuvarf!") - channel_time = 50 - required_components = list("belligerent_eye" = 2, "replicant_alloy" = 1, "hierophant_ansible" = 2) - consumed_components = list("belligerent_eye" = 1, "replicant_alloy" = 1, "hierophant_ansible" = 2) + channel_time = 70 + required_components = list("vanguard_cogwheel" = 1, "guvax_capacitor" = 1, "hierophant_ansible" = 3) + consumed_components = list("vanguard_cogwheel" = 1, "guvax_capacitor" = 1, "hierophant_ansible" = 2) whispered = TRUE object_path = /obj/effect/clockwork/sigil/transmission creator_message = "A sigil silently appears below you. It will automatically power clockwork structures adjecent to it." @@ -768,8 +768,8 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed desc = "Scribes a sigil beneath the invoker which drains life from any living non-servants that cross it. Servants that cross it, however, will be healed based on how much it drained from non-servants. \ Dead servants can be revived by this sigil if it has enough stored vitality." invocations = list("Qvivavgl...", "fgrny gur've yvsr...", "sbe guv'f furyy!") - channel_time = 50 - required_components = list("belligerent_eye" = 2, "vanguard_cogwheel" = 2, "hierophant_ansible" = 1) + channel_time = 70 + required_components = list("belligerent_eye" = 1, "vanguard_cogwheel" = 3, "hierophant_ansible" = 1) consumed_components = list("belligerent_eye" = 1, "vanguard_cogwheel" = 2, "hierophant_ansible" = 1) whispered = TRUE object_path = /obj/effect/clockwork/sigil/vitality @@ -788,7 +788,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed and will gain Fatigue at an increasing rate as they grow farther away. At maximum Fatigue, the marauder is forced to return to you and will be unable to manifest until its Fatigue is at zero." invocations = list("Pnyy sbegu...", "Sevtug'f jvyy, gur zvaq znqr fjbeq-naq-fuvryq.") channel_time = 100 - required_components = list("belligerent_eye" = 2, "vanguard_cogwheel" = 1, "guvax_capacitor" = 2) + required_components = list("belligerent_eye" = 1, "vanguard_cogwheel" = 1, "guvax_capacitor" = 3) consumed_components = list("belligerent_eye" = 1, "vanguard_cogwheel" = 1, "guvax_capacitor" = 2) usage_tip = "Marauders are useful as personal bodyguards and frontline warriors, although they do little damage." tier = SCRIPTURE_APPLICATION @@ -849,8 +849,8 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed name = "Interdiction Lens" desc = "Creates a clockwork totem that sabotages nearby machinery and funnels drained power into nearby Sigils of Transmission." invocations = list("Znl guvf gbgrz...", "...fuebhq gur snyfr fhaf!") - channel_time = 60 - required_components = list("belligerent_eye" = 1, "replicant_alloy" = 3, "hierophant_ansible" = 1) + channel_time = 80 + required_components = list("belligerent_eye" = 1, "replicant_alloy" = 4, "hierophant_ansible" = 1) consumed_components = list("belligerent_eye" = 1, "replicant_alloy" = 3, "hierophant_ansible" = 1) object_path = /obj/structure/clockwork/powered/interdiction_lens creator_message = "You form an interdiction lens, which disrupts cameras and radios and drains power." @@ -868,8 +868,8 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed name = "Mending Motor" desc = "Creates a mechanized prism that will rapidly repair damage to clockwork creatures, converted cyborgs, and clockwork structures. Requires replicant alloy or power to function." invocations = list("Znl guvf cevfz...", "...zraq bhe qragf naq fpengpurf!") - channel_time = 60 - required_components = list("vanguard_cogwheel" = 3, "guvax_capacitor" = 1, "replicant_alloy" = 1) + channel_time = 80 + required_components = list("vanguard_cogwheel" = 4, "guvax_capacitor" = 1, "replicant_alloy" = 1) consumed_components = list("vanguard_cogwheel" = 3, "guvax_capacitor" = 1, "replicant_alloy" = 1) object_path = /obj/structure/clockwork/powered/mending_motor/prefilled creator_message = "You form a mending motor, which will consume power or replicant alloy to mend the wounds of mechanized servants." @@ -887,8 +887,8 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed name = "Clockwork Obelisk" desc = "Creates a clockwork obelisk that can broadcast messages over the Hierophant Network or open a Spatial Gateway to any living servant or clockwork obelisk." invocations = list("Znl guvf boryvfx...", "...gnxr hf gb nyy cynprf!") - channel_time = 60 - required_components = list("vanguard_cogwheel" = 1, "replicant_alloy" = 1, "hierophant_ansible" = 3) + channel_time = 80 + required_components = list("vanguard_cogwheel" = 1, "replicant_alloy" = 1, "hierophant_ansible" = 4) consumed_components = list("vanguard_cogwheel" = 1, "replicant_alloy" = 1, "hierophant_ansible" = 3) object_path = /obj/structure/clockwork/powered/clockwork_obelisk creator_message = "You form a clockwork obelisk which can broadcast messages or produce Spatial Gateways." @@ -906,8 +906,8 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed name = "Mania Motor" desc = "Creates a mania motor which will cause brain damage and hallucinations in nearby non-servant humans. It will also try to convert humans directly adjecent to the motor." invocations = list("Znl guvf genafzvggre...", "...oernx gur jvyy bs nyy jub bccbfr hf!") - channel_time = 60 - required_components = list("guvax_capacitor" = 3, "replicant_alloy" = 1, "hierophant_ansible" = 1) + channel_time = 80 + required_components = list("guvax_capacitor" = 4, "replicant_alloy" = 1, "hierophant_ansible" = 1) consumed_components = list("guvax_capacitor" = 3, "replicant_alloy" = 1, "hierophant_ansible" = 1) object_path = /obj/structure/clockwork/powered/mania_motor creator_message = "You form a mania motor which will cause brain damage and hallucinations in nearby humans while active." @@ -925,9 +925,9 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed name = "Tinkerer's Daemon" desc = "Forms a daemon shell that can be attached to a tinkerer's cache to add new components at a healthy rate. It will only function if it is outnumbered by servants in a ratio of 5:1." invocations = list("Pbaf'gehpg Ratvar cnegf...", "...gun'g lrg ubyq terngarff!") - channel_time = 40 - required_components = list("vanguard_cogwheel" = 2, "belligerent_eye" = 2, "guvax_capacitor" = 2, "replicant_alloy" = 2, "hierophant_ansible" = 2) - consumed_components = list("vanguard_cogwheel" = 1, "belligerent_eye" = 1, "guvax_capacitor" = 1, "replicant_alloy" = 1, "hierophant_ansible" = 1) + channel_time = 80 + required_components = list("belligerent_eye" = 3, "vanguard_cogwheel" = 3, "guvax_capacitor" = 3, "replicant_alloy" = 3, "hierophant_ansible" = 3) + consumed_components = list("belligerent_eye" = 1, "vanguard_cogwheel" = 1, "guvax_capacitor" = 1, "replicant_alloy" = 1, "hierophant_ansible" = 1) object_path = /obj/item/clockwork/daemon_shell creator_message = "You form a daemon shell. Attach it to a tinkerer's cache to increase its rate of production." usage_tip = "Vital to your success!" diff --git a/code/game/gamemodes/clock_cult/clock_unsorted.dm b/code/game/gamemodes/clock_cult/clock_unsorted.dm index 951ac578061..9f8e0707f08 100644 --- a/code/game/gamemodes/clock_cult/clock_unsorted.dm +++ b/code/game/gamemodes/clock_cult/clock_unsorted.dm @@ -1,3 +1,16 @@ +//sends messages via hierophant +/proc/send_hierophant_message(mob/user, message, name_span = "heavy_brass", message_span = "brass", user_title = "Servant") + if(!user || !message || !ticker || !ticker.mode) + return 0 + var/parsed_message = "[user_title ? "[user_title] ":""][findtextEx(user.name, user.real_name) ? user.name : "[user.real_name] (as [user.name])"]: " + for(var/M in mob_list) + if(isobserver(M)) + var/link = FOLLOW_LINK(M, user) + M << "[link] [parsed_message]" + else if(is_servant_of_ratvar(M)) + M << parsed_message + return 1 + //Function Call action: Calls forth a Ratvarian spear. /datum/action/innate/function_call name = "Function Call" diff --git a/code/game/gamemodes/miniantags/hades/hades.dm b/code/game/gamemodes/miniantags/hades/hades.dm index c76bf4189af..1a8e77c50a6 100644 --- a/code/game/gamemodes/miniantags/hades/hades.dm +++ b/code/game/gamemodes/miniantags/hades/hades.dm @@ -745,6 +745,9 @@ // no absorbing super strong creatures unless they're dead user << "Such power.. Slay this [M] so that I may partake of its being." return + if(!M.stat) + user << "[M] is still too tightly bound to the mortal world! You must either kill or knock them unconscious to sacrifice them." + return user << "I accept your offering." absorbedHP += M.maxHealth if(!M.ckey) diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 55123f67dfb..e8106c5f095 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -26,9 +26,11 @@ mouse_opacity = 0 var/duration = 10 //in deciseconds var/randomdir = TRUE + var/timerid /obj/effect/overlay/temp/Destroy() ..() + deltimer(timerid) return QDEL_HINT_PUTINPOOL /obj/effect/overlay/temp/New() @@ -37,7 +39,7 @@ setDir(pick(cardinal)) flick("[icon_state]", src) //Because we might be pulling it from a pool, flick whatever icon it uses so it starts at the start of the icon's animation. - QDEL_IN(src, duration) + timerid = QDEL_IN(src, duration) /obj/effect/overlay/temp/bloodsplatter icon = 'icons/effects/blood.dmi' diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm index 82687066ff4..8a523373b85 100644 --- a/code/game/objects/items/weapons/melee/misc.dm +++ b/code/game/objects/items/weapons/melee/misc.dm @@ -217,4 +217,4 @@ T.CalculateAdjacentTurfs() /obj/item/weapon/melee/supermatter_sword/add_blood(list/blood_dna) - return 0 + return 0 \ No newline at end of file diff --git a/code/game/objects/items/weapons/powerfist.dm b/code/game/objects/items/weapons/powerfist.dm new file mode 100644 index 00000000000..e28e16c8880 --- /dev/null +++ b/code/game/objects/items/weapons/powerfist.dm @@ -0,0 +1,94 @@ +/obj/item/weapon/melee/powerfist + name = "power-fist" + desc = "A metal gauntlet with a piston-powered ram ontop for that extra 'ompfh' in your punch." + icon_state = "powerfist" + item_state = "powerfist" + flags = CONDUCT + attack_verb = list("whacked", "fisted", "power-punched") + force = 12 + throwforce = 10 + throw_range = 7 + w_class = 3 + origin_tech = "combat=5;powerstorage=3;syndicate=3" + var/click_delay = 1.5 + var/fisto_setting = 1 + var/gasperfist = 3 + var/obj/item/weapon/tank/internals/tank = null //Tank used for the gauntlet's piston-ram. + + +/obj/item/weapon/melee/powerfist/examine(mob/user) + ..() + if(!in_range(user, src)) + user << "You'll need to get closer to see any more." + return + if(tank) + user << "\icon [tank] It has \the [tank] mounted onto it." + + +/obj/item/weapon/melee/powerfist/attackby(obj/item/weapon/W, mob/user, params) + if(istype(W, /obj/item/weapon/tank/internals)) + if(!tank) + var/obj/item/weapon/tank/internals/IT = W + if(IT.volume <= 3) + user << "\The [IT] is too small for \the [src]." + return + updateTank(W, 0, user) + else if(istype(W, /obj/item/weapon/wrench)) + switch(fisto_setting) + if(1) + fisto_setting = 2 + if(2) + fisto_setting = 3 + if(3) + fisto_setting = 1 + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + user << "You tweak \the [src]'s piston valve to [fisto_setting]." + else if(istype(W, /obj/item/weapon/screwdriver)) + if(tank) + updateTank(tank, 1, user) + + +/obj/item/weapon/melee/powerfist/proc/updateTank(obj/item/weapon/tank/internals/thetank, removing = 0, mob/living/carbon/human/user) + if(removing) + if(!tank) + user << "\The [src] currently has no tank attached to it." + return + user << "You detach \the [thetank] from \the [src]." + tank.forceMove(get_turf(user)) + user.put_in_hands(tank) + tank = null + if(!removing) + if(tank) + user << "\The [src] already has a tank." + return + if(!user.unEquip(thetank)) + return + user << "You hook \the [thetank] up to \the [src]." + tank = thetank + thetank.forceMove(src) + + +/obj/item/weapon/melee/powerfist/attack(mob/living/target, mob/living/user) + if(!tank) + user << "\The [src] can't operate without a source of gas!" + return + if(tank && !tank.air_contents.remove(gasperfist * fisto_setting)) + user << "\The [src]'s piston-ram lets out a weak hiss, it needs more gas!" + playsound(loc, 'sound/effects/refill.ogg', 50, 1) + return + target.apply_damage(force * fisto_setting, BRUTE) + target.visible_message("[user]'s powerfist lets out a loud hiss as they punch [target.name]!", \ + "You cry out in pain as [user]'s punch flings you backwards!") + PoolOrNew(/obj/effect/kinetic_blast, target.loc) + playsound(loc, 'sound/weapons/resonator_blast.ogg', 50, 1) + playsound(loc, 'sound/weapons/genhit2.ogg', 50, 1) + + var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src))) + spawn(1) + target.throw_at(throw_target, 5 * fisto_setting, 0.2) + + add_logs(user, target, "power fisted", src) + + user.changeNext_move(CLICK_CD_MELEE * click_delay) + + return \ No newline at end of file diff --git a/code/game/pooling/pool.dm b/code/game/pooling/pool.dm index 338d8be84fd..ebbcebeb959 100644 --- a/code/game/pooling/pool.dm +++ b/code/game/pooling/pool.dm @@ -62,6 +62,8 @@ var/global/list/GlobalPool = list() var/datum/pooled = pop(GlobalPool[get_type]) if(pooled) + pooled.gc_destroyed = null + var/atom/movable/AM if(istype(pooled, /atom/movable)) AM = pooled @@ -91,12 +93,14 @@ var/global/list/GlobalPool = list() GlobalPool[diver.type] |= diver - if (destroy) + if(destroy) diver.Destroy() + diver.gc_destroyed = 1 + diver.ResetVars() -var/list/exclude = list("animate_movement", "contents", "loc", "locs", "parent_type", "vars", "verbs", "type") +var/list/exclude = list("animate_movement", "contents", "loc", "locs", "parent_type", "vars", "verbs", "type", "gc_destroyed") var/list/pooledvariables = list() //thanks to clusterfack @ /vg/station for these two procs /datum/proc/createVariables() diff --git a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm index 6d5b42bfd17..8a5478dedcb 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm @@ -138,4 +138,4 @@ return //we don't get hacked or give a shit about it /mob/living/simple_animal/drone/cogscarab/drone_chat(msg) - send_hierophant_message(src, msg) //HIEROPHANT DRONES + send_hierophant_message(src, msg, "heavy_alloy") //HIEROPHANT DRONES diff --git a/code/modules/shuttle/ripple.dm b/code/modules/shuttle/ripple.dm index fd6568c1435..5b7611d0728 100644 --- a/code/modules/shuttle/ripple.dm +++ b/code/modules/shuttle/ripple.dm @@ -8,6 +8,7 @@ anchored = TRUE density = FALSE layer = RIPPLE_LAYER + mouse_opacity = 1 alpha = 0 duration = 3 * SHUTTLE_RIPPLE_TIME diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 938f11ad798..efcd3e2b3ab 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -320,10 +320,8 @@ /obj/docking_port/mobile/proc/cancel() if(mode != SHUTTLE_CALL) return - if(ripples.len) - for(var/i in ripples) - qdel(i) - ripples.Cut() + + remove_ripples() invertTimer() mode = SHUTTLE_RECALL @@ -380,6 +378,11 @@ for(var/t in turfs) ripples += PoolOrNew(/obj/effect/overlay/temp/ripple, t) +/obj/docking_port/mobile/proc/remove_ripples() + for(var/R in ripples) + qdel(R) + ripples.Cut() + /obj/docking_port/mobile/proc/ripple_area(obj/docking_port/stationary/S1) var/list/L0 = return_ordered_turfs(x, y, z, dir, areaInstance) var/list/L1 = return_ordered_turfs(S1.x, S1.y, S1.z, S1.dir) @@ -437,14 +440,12 @@ for(var/turf/T0 in L0) A0.contents += T0 + + remove_ripples() + //move or squish anything in the way ship at destination roadkill(L0, L1, S1.dir) - // Removes ripples - for(var/i in ripples) - qdel(i) - ripples.Cut() - for(var/i in 1 to L0.len) var/turf/T0 = L0[i] if(!T0) diff --git a/code/modules/uplink/uplink_item.dm b/code/modules/uplink/uplink_item.dm index 3e3ddd681fd..343eab844da 100644 --- a/code/modules/uplink/uplink_item.dm +++ b/code/modules/uplink/uplink_item.dm @@ -233,6 +233,15 @@ var/list/uplink_items = list() // Global list so we only initialize this once. item = /obj/item/weapon/melee/energy/sword/saber cost = 8 +/datum/uplink_item/dangerous/powerfist + name = "Power Fist" + desc = "The power-fist is a metal gauntlet with a built-in piston-ram powered by an external gas supply.\ + Upon hitting a target, the piston-ram will extend foward to make contact for some serious damage. \ + Using a wrench on the piston valve will allow you to tweak the amount of gas used per punch to \ + deal extra damage and hit targets further. Use a screwdriver to take out any attached tanks." + item = /obj/item/weapon/melee/powerfist + cost = 8 + /datum/uplink_item/dangerous/emp name = "EMP Grenades and Implanter Kit" desc = "A box that contains two EMP grenades and an EMP implant. Useful to disrupt communication, \ diff --git a/html/changelog.html b/html/changelog.html index 960b2183a45..c131b2c3357 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,60 @@ -->