Merge branch 'master' into ok-listen-its-an-accident
This commit is contained in:
@@ -441,7 +441,7 @@
|
||||
to_chat(user, "You cannot send IC messages (muted).")
|
||||
return FALSE
|
||||
else if(!params)
|
||||
var/custom_emote = stripped_multiline_input(user, "Choose an emote to display.", "Custom Emote", null, MAX_MESSAGE_LEN)
|
||||
var/custom_emote = stripped_multiline_input_or_reflect(user, "Choose an emote to display.", "Custom Emote", null, MAX_MESSAGE_LEN)
|
||||
if(custom_emote && !check_invalid(user, custom_emote))
|
||||
var/type = input("Is this a visible or hearable emote?") as null|anything in list("Visible", "Hearable")
|
||||
switch(type)
|
||||
|
||||
@@ -3,8 +3,14 @@
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
|
||||
/datum/emote/sound/silicon
|
||||
mob_type_allowed_typecache = list(/mob/living/silicon)
|
||||
mob_type_allowed_typecache = list(/mob/living/silicon, /mob/living/carbon/human)
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
var/unrestricted = FALSE
|
||||
|
||||
/datum/emote/sound/silicon/run_emote(mob/user, params)
|
||||
if(!unrestricted && !(issilicon(user) || isipcperson(user)))
|
||||
return
|
||||
return ..()
|
||||
|
||||
/datum/emote/silicon/boop
|
||||
key = "boop"
|
||||
|
||||
@@ -60,11 +60,13 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
var/magic_fluff_string = "<span class='holoparasite'>You draw the Coder, symbolizing bugs and errors. This shouldn't happen! Submit a bug report!</span>"
|
||||
var/tech_fluff_string = "<span class='holoparasite'>BOOT SEQUENCE COMPLETE. ERROR MODULE LOADED. THIS SHOULDN'T HAPPEN. Submit a bug report!</span>"
|
||||
var/carp_fluff_string = "<span class='holoparasite'>CARP CARP CARP SOME SORT OF HORRIFIC BUG BLAME THE CODERS CARP CARP CARP</span>"
|
||||
/// sigh, fine.
|
||||
var/datum/song/holoparasite/music_datum
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/Initialize(mapload, theme)
|
||||
GLOB.parasites += src
|
||||
updatetheme(theme)
|
||||
|
||||
music_datum = new(src, get_allowed_instrument_ids())
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/med_hud_set_health()
|
||||
@@ -84,8 +86,16 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/Destroy()
|
||||
GLOB.parasites -= src
|
||||
QDEL_NULL(music_datum)
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/verb/music_interact()
|
||||
set name = "Access Internal Synthesizer"
|
||||
set desc = "Access your internal musical synthesizer"
|
||||
set category = "IC"
|
||||
|
||||
music_datum.ui_interact(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/proc/updatetheme(theme) //update the guardian's theme
|
||||
if(!theme)
|
||||
theme = pick("magic", "tech", "carp")
|
||||
@@ -638,6 +648,12 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
/obj/item/guardiancreator/tech/choose/dextrous
|
||||
possible_guardians = list("Assassin", "Chaos", "Charger", "Dextrous", "Explosive", "Lightning", "Protector", "Ranged", "Standard", "Support")
|
||||
|
||||
/obj/item/guardiancreator/tech/choose/nukie // lacks support and protector as encouraging nukies to play turtle isnt fun and dextrous is epic
|
||||
possible_guardians = list("Assassin", "Chaos", "Charger", "Dextrous", "Explosive", "Lightning", "Ranged", "Standard")
|
||||
|
||||
/obj/item/guardiancreator/tech/choose/nukie/check_uplink_validity()
|
||||
return !used
|
||||
|
||||
/obj/item/paper/guides/antag/guardian
|
||||
name = "Holoparasite Guide"
|
||||
icon_state = "paper_words"
|
||||
@@ -677,7 +693,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
<br>
|
||||
<b>Charger</b>: Moves extremely fast, does medium damage on attack, and can charge at targets, damaging the first target hit and forcing them to drop any items they are holding.<br>
|
||||
<br>
|
||||
<b>Dexterous</b>: Does low damage on attack, but is capable of holding items and storing a single item within it. It will drop items held in its hands when it recalls, but it will retain the stored item.<br>
|
||||
<b>Dextrous</b>: Does low damage on attack, but is capable of holding items and storing a single item within it. It will drop items held in its hands when it recalls, but it will retain the stored item.<br>
|
||||
<br>
|
||||
<b>Explosive</b>: High damage resist and medium power attack that may explosively teleport targets. Can turn any object, including objects too large to pick up, into a bomb, dealing explosive damage to the next person to touch it. The object will return to normal after the trap is triggered or after a delay.<br>
|
||||
<br>
|
||||
@@ -691,6 +707,29 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
<br>
|
||||
"}
|
||||
|
||||
/obj/item/paper/guides/antag/guardian/nukie
|
||||
name = "Guardian Guide"
|
||||
info = {"<b>A list of Guardian Types</b><br>
|
||||
|
||||
<br>
|
||||
<b>Assassin</b>: Does medium damage and takes full damage, but can enter stealth, causing its next attack to do massive damage and ignore armor. However, it becomes briefly unable to recall after attacking from stealth.<br>
|
||||
<br>
|
||||
<b>Chaos</b>: Ignites enemies on touch and causes them to hallucinate all nearby people as the guardian. Automatically extinguishes the user if they catch on fire.<br>
|
||||
<br>
|
||||
<b>Charger</b>: Moves extremely fast, does medium damage on attack, and can charge at targets, damaging the first target hit and forcing them to drop any items they are holding.<br>
|
||||
<br>
|
||||
<b>Dextrous</b>: Does low damage on attack, but is capable of holding items and storing a single item within it. It will drop items held in its hands when it recalls, but it will retain the stored item.<br>
|
||||
<br>
|
||||
<b>Explosive</b>: High damage resist and medium power attack that may explosively teleport targets. Can turn any object, including objects too large to pick up, into a bomb, dealing explosive damage to the next person to touch it. The object will return to normal after the trap is triggered or after a delay.<br>
|
||||
<br>
|
||||
<b>Lightning</b>: Attacks apply lightning chains to targets. Has a lightning chain to the user. Lightning chains shock everything near them, doing constant damage.<br>
|
||||
<br>
|
||||
<b>Ranged</b>: Has two modes. Ranged; which fires a constant stream of weak, armor-ignoring projectiles. Scout; Cannot attack, but can move through walls and is quite hard to see. Can lay surveillance snares, which alert it when crossed, in either mode.<br>
|
||||
<br>
|
||||
<b>Standard</b>: Devastating close combat attacks and high damage resist. Can smash through weak walls.<br>
|
||||
<br>
|
||||
"}
|
||||
|
||||
|
||||
/obj/item/storage/box/syndie_kit/guardian
|
||||
name = "holoparasite injector kit"
|
||||
@@ -699,6 +738,13 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
new /obj/item/guardiancreator/tech/choose/traitor(src)
|
||||
new /obj/item/paper/guides/antag/guardian(src)
|
||||
|
||||
/obj/item/storage/box/syndie_kit/nukieguardian
|
||||
name = "holoparasite injector kit"
|
||||
|
||||
/obj/item/storage/box/syndie_kit/nukieguardian/PopulateContents()
|
||||
new /obj/item/guardiancreator/tech/choose/nukie(src)
|
||||
new /obj/item/paper/guides/antag/guardian/nukie(src)
|
||||
|
||||
/obj/item/guardiancreator/carp
|
||||
name = "holocarp fishsticks"
|
||||
desc = "Using the power of Carp'sie, you can catch a carp from byond the veil of Carpthulu, and bind it to your fleshy flesh form."
|
||||
|
||||
@@ -161,4 +161,4 @@
|
||||
/// The timer that will remove our indicator for early aborts (like when an user finishes their message)
|
||||
var/typing_indicator_timerid
|
||||
/// Current state of our typing indicator. Used for cut overlay, DO NOT RUNTIME ASSIGN OTHER THAN FROM SHOW/CLEAR. Used to absolutely ensure we do not get stuck overlays.
|
||||
var/typing_indicator_current
|
||||
var/mutable_appearance/typing_indicator_current
|
||||
|
||||
@@ -43,6 +43,11 @@
|
||||
if(GLOB.say_disabled) //This is here to try to identify lag problems
|
||||
to_chat(usr, "<span class='danger'>Speech is currently admin-disabled.</span>")
|
||||
return
|
||||
|
||||
if(length(message) > MAX_MESSAGE_LEN)
|
||||
to_chat(usr, message)
|
||||
to_chat(usr, "<span class='danger'>^^^----- The preceeding message has been DISCARDED for being over the maximum length of [MAX_MESSAGE_LEN]. It has NOT been sent! -----^^^</span>")
|
||||
return
|
||||
|
||||
message = trim(copytext_char(sanitize(message), 1, MAX_MESSAGE_LEN))
|
||||
clear_typing_indicator() // clear it immediately!
|
||||
|
||||
@@ -37,7 +37,7 @@ proc/get_top_level_mob(var/mob/S)
|
||||
to_chat(user, "You cannot send IC messages (muted).")
|
||||
return FALSE
|
||||
else if(!params)
|
||||
var/subtle_emote = stripped_multiline_input(user, "Choose an emote to display.", "Subtle", null, MAX_MESSAGE_LEN)
|
||||
var/subtle_emote = stripped_multiline_input_or_reflect(user, "Choose an emote to display.", "Subtle", null, MAX_MESSAGE_LEN)
|
||||
if(subtle_emote && !check_invalid(user, subtle_emote))
|
||||
var/type = input("Is this a visible or hearable emote?") as null|anything in list("Visible", "Hearable")
|
||||
switch(type)
|
||||
@@ -98,7 +98,7 @@ proc/get_top_level_mob(var/mob/S)
|
||||
to_chat(user, "You cannot send IC messages (muted).")
|
||||
return FALSE
|
||||
else if(!params)
|
||||
var/subtle_emote = stripped_multiline_input(user, "Choose an emote to display.", "Subtler" , null, MAX_MESSAGE_LEN)
|
||||
var/subtle_emote = stripped_multiline_input_or_reflect(user, "Choose an emote to display.", "Subtler" , null, MAX_MESSAGE_LEN)
|
||||
if(subtle_emote && !check_invalid(user, subtle_emote))
|
||||
var/type = input("Is this a visible or hearable emote?") as null|anything in list("Visible", "Hearable")
|
||||
switch(type)
|
||||
|
||||
@@ -15,13 +15,23 @@ GLOBAL_LIST_EMPTY(typing_indicator_overlays)
|
||||
/mob/proc/get_typing_indicator_icon_state()
|
||||
return typing_indicator_state
|
||||
|
||||
/// Generates the mutable appearance for typing indicator. Should prevent stuck overlays.
|
||||
/mob/proc/generate_typing_indicator()
|
||||
var/state = get_typing_indicator_icon_state()
|
||||
if(ispath(state))
|
||||
var/atom/thing = new state(null)
|
||||
var/mutable_appearance/generated = new(thing)
|
||||
return generated
|
||||
else
|
||||
CRASH("Unsupported typing indicator state: [state]")
|
||||
|
||||
/**
|
||||
* Displays typing indicator.
|
||||
* @param timeout_override - Sets how long until this will disappear on its own without the user finishing their message or logging out. Defaults to src.typing_indicator_timeout
|
||||
* @param state_override - Sets the state that we will fetch. Defaults to src.get_typing_indicator_icon_state()
|
||||
* @param force - shows even if src.typing_indcator_enabled is FALSE.
|
||||
*/
|
||||
/mob/proc/display_typing_indicator(timeout_override = TYPING_INDICATOR_TIMEOUT, state_override = get_typing_indicator_icon_state(), force = FALSE)
|
||||
/mob/proc/display_typing_indicator(timeout_override = TYPING_INDICATOR_TIMEOUT, state_override = generate_typing_indicator(), force = FALSE)
|
||||
if((!typing_indicator_enabled && !force) || typing_indicator_current)
|
||||
return
|
||||
typing_indicator_current = state_override
|
||||
|
||||
Reference in New Issue
Block a user