Merge pull request #6840 from Neerti/qol_notification_sounds

QoL: Various Notifications
This commit is contained in:
Atermonera
2020-03-20 12:08:04 -07:00
committed by VirgoBot
parent e3e31b12ff
commit d397c2c1fe
31 changed files with 131 additions and 17 deletions

View File

@@ -5,6 +5,7 @@
var/finished = FALSE
var/role_name = "a thing"
var/question = "Would you like to play as a thing?"
var/query_sound = 'sound/effects/ghost2.ogg' // A sound file to play to the ghost, to help people who are alt-tabbed know something might interest them.
var/be_special_flag = 0
var/list/check_bans = list()
var/wait_time = 60 SECONDS // How long to wait until returning the list of candidates.
@@ -42,6 +43,9 @@
spawn(0)
if(!C)
return
window_flash(C)
if(query_sound)
SEND_SOUND(C, sound(query_sound))
var/response = alert(C, question, "[role_name] request", "Yes", "No", "Never for this round")
if(response == "Yes")
response = alert(C, "Are you sure you want to play as a [role_name]?", "[role_name] request", "Yes", "No") // Protection from a misclick.
@@ -62,12 +66,14 @@
/datum/ghost_query/promethean
role_name = "Promethean"
question = "Someone is requesting a soul for a promethean. Would you like to play as one?"
query_sound = 'sound/effects/slime_squish.ogg'
be_special_flag = BE_ALIEN
cutoff_number = 1
/datum/ghost_query/posi_brain
role_name = "Positronic Intelligence"
question = "Someone has activated a Positronic Brain. Would you like to play as one?"
query_sound = 'sound/machines/boobeebeep.ogg'
be_special_flag = BE_AI
check_bans = list("AI", "Cyborg")
cutoff_number = 1
@@ -75,6 +81,7 @@
/datum/ghost_query/drone_brain
role_name = "Drone Intelligence"
question = "Someone has activated a Drone AI Chipset. Would you like to play as one?"
query_sound = 'sound/machines/boobeebeep.ogg'
be_special_flag = BE_AI
check_bans = list("AI", "Cyborg")
cutoff_number = 1
@@ -90,6 +97,7 @@
/datum/ghost_query/xeno
role_name = "Alien"
question = "An Alien has just been created on the facility. Would you like to play as them?"
query_sound = 'sound/voice/hiss5.ogg'
be_special_flag = BE_ALIEN
/datum/ghost_query/blob

View File

@@ -7,6 +7,7 @@
// Strings.
var/welcome_text = "Cry havoc and let slip the dogs of war!"
var/antag_sound = 'sound/effects/antag_notice/general_baddie_alert.ogg' // The sound file to play when someone gets this role. Only they can hear it.
var/leader_welcome_text // Text shown to the leader, if any.
var/victory_text // World output at roundend for victory.
var/loss_text // As above for loss.

View File

@@ -95,6 +95,10 @@
return code
/datum/antagonist/proc/greet(var/datum/mind/player)
// Makes it harder to miss if you're alt-tabbed or not paying attention.
if(antag_sound)
SEND_SOUND(player.current, sound(antag_sound))
window_flash(player.current.client)
// Basic intro text.
to_chat(player.current, "<span class='danger'><font size=3>You are a [role_text]!</font></span>")

View File

@@ -6,6 +6,7 @@ var/datum/antagonist/deathsquad/mercenary/commandos
role_text = "Syndicate Commando"
role_text_plural = "Commandos"
welcome_text = "You are in the employ of a criminal syndicate hostile to corporate interests."
antag_sound = 'sound/effects/antag_notice/deathsquid_alert.ogg'
id_type = /obj/item/weapon/card/id/centcom/ERT
hard_cap = 4

View File

@@ -6,6 +6,7 @@ var/datum/antagonist/deathsquad/deathsquad
role_text = "Death Commando"
role_text_plural = "Death Commandos"
welcome_text = "You work in the service of corporate Asset Protection, answering directly to the Board of Directors."
antag_sound = 'sound/effects/antag_notice/deathsquid_alert.ogg'
landmark_id = "Commando"
flags = ANTAG_OVERRIDE_JOB | ANTAG_OVERRIDE_MOB | ANTAG_HAS_NUKE | ANTAG_HAS_LEADER
default_access = list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage)

View File

@@ -7,6 +7,7 @@ var/datum/antagonist/ert/ert
role_text = "Emergency Responder"
role_text_plural = "Emergency Responders"
welcome_text = "As member of the Emergency Response Team, you answer only to your leader and company officials."
antag_sound = 'sound/effects/antag_notice/general_goodie_alert.ogg'
antag_text = "You are an <b>anti</b> antagonist! Within the rules, \
try to save the station and its inhabitants from the ongoing crisis. \
Try to make sure other players have <i>fun</i>! If you are confused or at a loss, always adminhelp, \

View File

@@ -10,7 +10,8 @@ var/datum/antagonist/technomancer/technomancers
welcome_text = "You will need to purchase <b>functions</b> and perhaps some <b>equipment</b> from the various machines around your \
base. Choose your technological arsenal carefully. Remember that without the <b>core</b> on your back, your functions are \
powerless, and therefore you will be as well.<br>\
In your pockets you will find a one-time use teleport device. Use it to leave the base and go to the colony, when you are ready."
In your pockets you will find a one-time use teleport device. Use it to leave the base and go to the station, when you are ready."
antag_sound = 'sound/effects/antag_notice/technomancer_alert.ogg'
flags = ANTAG_OVERRIDE_JOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_SET_APPEARANCE | ANTAG_VOTABLE
antaghud_indicator = "hudwizard"

View File

@@ -6,6 +6,7 @@ var/datum/antagonist/trader/traders
role_text = "Trader"
role_text_plural = "Traders"
welcome_text = "As a crewmember of the Beruang, you answer to your captain and international laws of space."
antag_sound = 'sound/effects/antag_notice/general_goodie_alert.ogg'
antag_text = "You are an <b>non-antagonist</b> visitor! Within the rules, \
try to provide interesting interaction for the crew. \
Try to make sure other players have <i>fun</i>! If you are confused or at a loss, always adminhelp, \

View File

@@ -8,6 +8,7 @@
restricted_jobs = list("AI", "Cyborg")
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Colony Director")
welcome_text = "Use say \"#g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them."
antag_sound = 'sound/effects/antag_notice/ling_alert.ogg'
flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE
antaghud_indicator = "hudchangeling"

View File

@@ -18,6 +18,7 @@ var/datum/antagonist/cultist/cult
feedback_tag = "cult_objective"
antag_indicator = "cult"
welcome_text = "You have a talisman in your possession; one that will help you start the cult on this station. Use it well and remember - there are others."
antag_sound = 'sound/effects/antag_notice/cult_alert.ogg'
victory_text = "The cult wins! It has succeeded in serving its dark masters!"
loss_text = "The staff managed to stop the cult!"
victory_feedback_tag = "win - cult win"

View File

@@ -9,6 +9,7 @@ var/datum/antagonist/loyalists/loyalists
feedback_tag = "loyalist_objective"
antag_indicator = "loyal_head"
welcome_text = "You belong to the Company, body and soul. Preserve its interests against the conspirators amongst the crew."
antag_sound = 'sound/effects/antag_notice/general_goodie_alert.ogg'
victory_text = "The heads of staff remained at their posts! The loyalists win!"
loss_text = "The heads of staff did not stop the revolution!"
victory_feedback_tag = "win - rev heads killed"

View File

@@ -8,6 +8,7 @@ var/datum/antagonist/renegade/renegades
bantype = "renegade"
restricted_jobs = list("AI", "Cyborg")
welcome_text = "Something's going to go wrong today, you can just feel it. You're paranoid, you've got a gun, and you're going to survive."
antag_sound = 'sound/effects/antag_notice/general_goodie_alert.ogg'
antag_text = "You are a <b>minor</b> antagonist! Within the rules, \
try to protect yourself and what's important to you. You aren't here to cause trouble, \
you're just more willing (and equipped) to go to extremes to stop it than others are. \

View File

@@ -8,6 +8,7 @@ var/datum/antagonist/rogue_ai/malf
mob_path = /mob/living/silicon/ai
landmark_id = "AI"
welcome_text = "You are malfunctioning! You do not have to follow any laws."
antag_sound = 'sound/effects/antag_notice/malf_alert.ogg'
victory_text = "The AI has taken control of all of the station's systems."
loss_text = "The AI has been shut down!"
flags = ANTAG_VOTABLE | ANTAG_OVERRIDE_MOB | ANTAG_OVERRIDE_JOB | ANTAG_CHOOSE_NAME

View File

@@ -3,6 +3,7 @@ var/datum/antagonist/traitor/traitors
// Inherits most of its vars from the base datum.
/datum/antagonist/traitor
id = MODE_TRAITOR
antag_sound = 'sound/effects/antag_notice/traitor_alert.ogg'
protected_jobs = list("Security Officer", "Warden", "Detective", "Internal Affairs Agent", "Head of Security", "Colony Director")
flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE
can_speak_aooc = FALSE // If they want to plot and plan as this sort of traitor, they'll need to do it ICly.

View File

@@ -43,9 +43,8 @@
if(!H.client && H.mind) //Don't force the dead person to come back if they don't want to.
for(var/mob/observer/dead/ghost in player_list)
if(ghost.mind == H.mind)
to_chat(ghost, "<b><font color = #330033><font size = 3>The Technomancer [user.real_name] is trying to \
revive you. Return to your body if you want to be resurrected!</b> \
(Verbs -> Ghost -> Re-enter corpse)</font></font>")
ghost.notify_revive("The Technomancer [user.real_name] is trying to revive you. \
Re-enter your body if you want to be revived!", 'sound/effects/genetics.ogg')
break
H.adjustBruteLoss(-40)

View File

@@ -310,9 +310,6 @@
if (subject.suiciding)
scantemp = "Error: Subject's brain is not responding to scanning stimuli."
return
if ((!subject.ckey) || (!subject.client))
scantemp = "Error: Mental interface failure."
return
if (NOCLONE in subject.mutations)
scantemp = "Error: Mental interface failure."
return
@@ -323,6 +320,14 @@
if(istype(modifier_type, /datum/modifier/no_clone))
scantemp = "Error: Mental interface failure."
return
if ((!subject.ckey) || (!subject.client))
scantemp = "Error: Mental interface failure."
if(subject.stat == DEAD && subject.mind && subject.mind.key) // If they're dead and not in their body, tell them to get in it.
for(var/mob/observer/dead/ghost in player_list)
if(ghost.ckey == ckey(subject.mind.key))
ghost.notify_revive("Someone is trying to scan your body in the cloner. Re-enter your body if you want to be revived!", 'sound/effects/genetics.ogg')
break
return
if (!isnull(find_record(subject.ckey)))
scantemp = "Subject already in database."
return

View File

@@ -390,7 +390,7 @@
if(!H.client && !H.teleop)
for(var/mob/observer/dead/ghost in player_list)
if(ghost.mind == H.mind)
to_chat(ghost, "<b><font color = #330033><font size = 3>Someone is attempting to resuscitate you. Re-enter your body if you want to be revived!</b> (Verbs -> Ghost -> Re-enter corpse)</font></font>")
ghost.notify_revive("Someone is trying to resuscitate you. Re-enter your body if you want to be revived!", 'sound/effects/genetics.ogg')
break
//beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process

View File

@@ -106,6 +106,7 @@ AI MODULES
if(laws)
laws.sync(target, 0)
target.notify_of_law_change()
addAdditionalLaws(target, sender)
to_chat(target, "\The [sender] has uploaded a change to the laws you must follow, using \an [src]. From now on: ")

View File

@@ -85,6 +85,7 @@
"ED-209" = "ed209",
"Beepsky" = "secbot"
)
var/last_revive_notification = null // world.time of last notification, used to avoid spamming players from defibs or cloners.
/mob/observer/dead/New(mob/body)
sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF
@@ -137,6 +138,9 @@
var/mob/target = locate(href_list["track"]) in mob_list
if(target)
ManualFollow(target)
if(href_list["reenter"])
reenter_corpse()
return
/mob/observer/dead/attackby(obj/item/W, mob/user)
if(istype(W,/obj/item/weapon/book/tome))
@@ -811,3 +815,18 @@ mob/observer/dead/MayRespawn(var/feedback = 0)
/mob/observer/dead/speech_bubble_appearance()
return "ghost"
// Lets a ghost know someone's trying to bring them back, and for them to get into their body.
// Mostly the same as TG's sans the hud element, since we don't have TG huds.
/mob/observer/dead/proc/notify_revive(var/message, var/sound, flashwindow = TRUE)
if((last_revive_notification + 2 MINUTES) > world.time)
return
last_revive_notification = world.time
if(flashwindow)
window_flash(client)
if(message)
to_chat(src, "<span class='ghostalert'><font size=4>[message]</font></span>")
to_chat(src, "<span class='ghostalert'><a href=?src=[REF(src)];reenter=1>(Click to re-enter)</a></span>")
if(sound)
SEND_SOUND(src, sound(sound))

View File

@@ -1,6 +1,7 @@
/mob/living/silicon
var/datum/ai_laws/laws = null
var/list/additional_law_channels = list("State" = "")
var/last_law_notification = null // Avoids receiving 5+ of them at once.
/mob/living/silicon/proc/laws_sanity_check()
if (!src.laws)
@@ -9,54 +10,79 @@
/mob/living/silicon/proc/has_zeroth_law()
return laws.zeroth_law != null
/mob/living/silicon/proc/set_zeroth_law(var/law, var/law_borg)
/mob/living/silicon/proc/set_zeroth_law(var/law, var/law_borg, notify = TRUE)
laws_sanity_check()
laws.set_zeroth_law(law, law_borg)
if(notify)
notify_of_law_change(law||law_borg ? "NEW ZEROTH LAW: <b>[istype(src, /mob/living/silicon/robot) && law_borg ? law_borg : law]</b>" : null)
log_and_message_admins("has given [src] the zeroth laws: [law]/[law_borg ? law_borg : "N/A"]")
/mob/living/silicon/robot/set_zeroth_law(var/law, var/law_borg)
/mob/living/silicon/robot/set_zeroth_law(var/law, var/law_borg, notify = TRUE)
..()
if(tracking_entities)
to_chat(src, "<span class='warning'>Internal camera is currently being accessed.</span>")
/mob/living/silicon/proc/add_ion_law(var/law)
/mob/living/silicon/proc/add_ion_law(var/law, notify = TRUE)
laws_sanity_check()
laws.add_ion_law(law)
if(notify)
notify_of_law_change("NEW \[!ERROR!\] LAW: <b>[law]</b>")
log_and_message_admins("has given [src] the ion law: [law]")
/mob/living/silicon/proc/add_inherent_law(var/law)
/mob/living/silicon/proc/add_inherent_law(var/law, notify = TRUE)
laws_sanity_check()
laws.add_inherent_law(law)
if(notify)
notify_of_law_change("NEW CORE LAW: <b>[law]</b>")
log_and_message_admins("has given [src] the inherent law: [law]")
/mob/living/silicon/proc/add_supplied_law(var/number, var/law)
/mob/living/silicon/proc/add_supplied_law(var/number, var/law, notify = TRUE)
laws_sanity_check()
laws.add_supplied_law(number, law)
if(notify)
var/th = uppertext("[number]\th")
notify_of_law_change("NEW \[[th]\] LAW: <b>[law]</b>")
log_and_message_admins("has given [src] the supplied law: [law]")
/mob/living/silicon/proc/delete_law(var/datum/ai_law/law)
/mob/living/silicon/proc/delete_law(var/datum/ai_law/law, notify = TRUE)
laws_sanity_check()
laws.delete_law(law)
if(notify)
notify_of_law_change("LAW DELETED: <b>[law.law]</b>")
log_and_message_admins("has deleted a law belonging to [src]: [law.law]")
/mob/living/silicon/proc/clear_inherent_laws(var/silent = 0)
/mob/living/silicon/proc/clear_inherent_laws(var/silent = 0, notify = TRUE)
laws_sanity_check()
laws.clear_inherent_laws()
if(notify)
notify_of_law_change("CORE LAWS WIPED.")
if(!silent)
log_and_message_admins("cleared the inherent laws of [src]")
/mob/living/silicon/proc/clear_ion_laws(var/silent = 0)
/mob/living/silicon/proc/clear_ion_laws(var/silent = 0, notify = TRUE)
laws_sanity_check()
laws.clear_ion_laws()
if(notify)
notify_of_law_change("CORRUPTED LAWS WIPED.")
if(!silent)
log_and_message_admins("cleared the ion laws of [src]")
/mob/living/silicon/proc/clear_supplied_laws(var/silent = 0)
/mob/living/silicon/proc/clear_supplied_laws(var/silent = 0, notify = TRUE)
laws_sanity_check()
laws.clear_supplied_laws()
if(notify)
notify_of_law_change("NON-CORE LAWS WIPED.")
if(!silent)
log_and_message_admins("cleared the supplied laws of [src]")
/mob/living/silicon/proc/notify_of_law_change(message)
if((last_law_notification + 1 SECOND) > world.time)
return
last_law_notification = world.time
SEND_SOUND(src, 'sound/machines/defib_success.ogg')
window_flash(client)
to_chat(src, span("warning", message))
/mob/living/silicon/proc/statelaws(var/datum/ai_laws/laws)
var/prefix = ""
if(MAIN_CHANNEL == lawchannel)

View File

@@ -65,6 +65,7 @@ em {font-style: normal;font-weight: bold;}
.say {}
.alert {color: #ff0000;}
h1.alert, h2.alert {color: #000000;}
.ghostalert {color: #5c00e6; font-style: italic; font-weight: bold;}
.emote {font-style: italic;}

View File

@@ -0,0 +1,39 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# wip (For works in progress)
# tweak
# soundadd
# sounddel
# rscadd (general adding of nice things)
# rscdel (general deleting of nice things)
# imageadd
# imagedel
# maptweak
# spellcheck (typo fixes)
# experiment
#################################
# Your name.
author: Neerti
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
changes:
- soundadd: "Receiving an antag role will now play a sound to the new antagonist."
- soundadd: "Having laws changed as a silicon (AI or Borg) will now play a sound and show the changed law in the chat."
- soundadd: "Being offered a ghost role while a ghost will now play a sound."
- soundadd: "Someone attempting to revive someone else will play a sound to the player being revived, if they are not in their body."

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
sound/effects/genetics.ogg Normal file

Binary file not shown.