diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index 5b3fc4aa2c8..96d0a18d87c 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -165,13 +165,13 @@ /obj/item/aicard/see_emote(mob/living/M, text) if(carded_ai && carded_ai.client) - var/rendered = "[text]" + var/rendered = span("message", "[text]") carded_ai.show_message(rendered, 2) ..() /obj/item/aicard/show_message(msg, type, alt, alt_type) if(carded_ai && carded_ai.client) - var/rendered = "[msg]" + var/rendered = span("message", "[msg]") carded_ai.show_message(rendered, type) ..() diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 33921ec61f1..f99647b6361 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -108,17 +108,17 @@ //Possible TODO in future, allow emagging a paicard to let it work like an agent ID, accumulating access from any ID /obj/item/device/paicard/proc/scan_ID(var/obj/item/card/id/card, var/mob/user) if (!pai) - to_chat(user, "Error: ID Registration failed. No pAI personality installed.") + to_chat(user, SPAN_WARNING("Error: ID Registration failed. No pAI personality installed.")) playsound(src.loc, 'sound/machines/buzz-two.ogg', 20, 0) return 0 if (!pai.master_dna) - to_chat(user, "Error: ID Registration failed. User not registered as owner. Please complete imprinting process first.") + to_chat(user, SPAN_WARNING("Error: ID Registration failed. User not registered as owner. Please complete imprinting process first.")) playsound(src.loc, 'sound/machines/buzz-two.ogg', 20, 0) return 0 if (pai.master_dna != card.dna_hash) - to_chat(user, "Error: ID Registration failed. Biometric data on ID card does not match DNA sample of registered owner.") + to_chat(user, SPAN_WARNING("Error: ID Registration failed. Biometric data on ID card does not match DNA sample of registered owner.")) playsound(src.loc, 'sound/machines/buzz-two.ogg', 20, 0) return 0 @@ -126,14 +126,14 @@ pai.id_card.access = card.access.Copy() pai.id_card.registered_name = card.registered_name playsound(src.loc, 'sound/machines/ping.ogg', 50, 0) - to_chat(user, "ID Registration for [pai.id_card.registered_name] is a success. PAI access updated!") + to_chat(user, SPAN_NOTICE("ID Registration for [pai.id_card.registered_name] is a success. PAI access updated!")) return 1 /obj/item/device/paicard/proc/ID_readout() if (pai.id_card.registered_name) - return "Identity of owner: [pai.id_card.registered_name] registered." + return SPAN_NOTICE("Identity of owner: [pai.id_card.registered_name] registered.") else - return "No ID card registered! Please scan your ID to share access." + return SPAN_WARNING("No ID card registered! Please scan your ID to share access.") /obj/item/device/paicard/attack_self(mob/user) if (!in_range(src, user)) @@ -390,6 +390,7 @@ /obj/item/device/paicard/proc/setPersonality(mob/living/silicon/pai/personality) src.pai = personality add_overlay("pai-happy") + playsound(src, 'sound/effects/pai/pai_restore.ogg', 75) /obj/item/device/paicard/proc/removePersonality() src.pai = null @@ -425,7 +426,7 @@ /obj/item/device/paicard/proc/alertUpdate() var/turf/T = get_turf_or_move(src.loc) for (var/mob/M in viewers(T)) - M.show_message("\The [src] flashes a message across its screen, \"Additional personalities available for download.\"", 3, "\The [src] bleeps electronically.", 2) + M.show_message(SPAN_NOTICE("\The [src] flashes a message across its screen, \"Additional personalities available for download.\""), 3, SPAN_NOTICE("\The [src] bleeps electronically."), 2) /obj/item/device/paicard/emp_act(severity) for(var/mob/M in src) @@ -439,7 +440,7 @@ /obj/item/device/paicard/see_emote(mob/living/M, text) if(pai && pai.client && !pai.canmove) - var/rendered = "[text]" + var/rendered = span("message", "[text]") pai.show_message(rendered, 2) ..() @@ -468,6 +469,6 @@ /obj/item/device/paicard/show_message(msg, type, alt, alt_type) if(pai && pai.client) - var/rendered = "[msg]" + var/rendered = span("message", "[msg]") pai.show_message(rendered, type) ..() diff --git a/code/modules/effects/map_effects/portal.dm b/code/modules/effects/map_effects/portal.dm index 522ac1496a4..89c133ae561 100644 --- a/code/modules/effects/map_effects/portal.dm +++ b/code/modules/effects/map_effects/portal.dm @@ -238,7 +238,7 @@ when portals are shortly lived, or when portals are made to be obvious with spec for(var/thing in mobs_to_relay) var/mob/mob = thing - var/rendered = "[text]" + var/rendered = span("message", "[text]") mob.show_message(rendered) ..() @@ -247,7 +247,7 @@ when portals are shortly lived, or when portals are made to be obvious with spec /obj/effect/map_effect/portal/master/show_message(msg, type, alt, alt_type) if(!counterpart) return - var/rendered = "[msg]" + var/rendered = span("message", "[msg]") var/turf/T = counterpart.get_focused_turf() var/list/mobs_to_relay = list() var/list/objs = list() diff --git a/code/modules/mob/language/generic.dm b/code/modules/mob/language/generic.dm index 664263f381f..d6b23f239f2 100644 --- a/code/modules/mob/language/generic.dm +++ b/code/modules/mob/language/generic.dm @@ -4,10 +4,10 @@ desc = "Noises" key = "" flags = RESTRICTED|NONGLOBAL|INNATE|NO_TALK_MSG|NO_STUTTER|TCOMSSIM - allow_accents = TRUE + allow_accents = TRUE /datum/language/noise/format_message(message, verb) - return "[message]" + return span(message, "[message]") /datum/language/noise/format_message_plain(message, verb) return message diff --git a/code/modules/mob/language/synthetic.dm b/code/modules/mob/language/synthetic.dm index 1397928c2d3..c6344711ed8 100644 --- a/code/modules/mob/language/synthetic.dm +++ b/code/modules/mob/language/synthetic.dm @@ -28,7 +28,7 @@ log_say("[key_name(speaker)] : ([name]) [message]",ckey=key_name(speaker)) var/message_start = "[name], [get_speaker_name(speaker)]" - var/message_body = "[speaker.say_quote(message)], \"[message]\"" + var/message_body = span(message, "[speaker.say_quote(message)], \"[message]\"") for (var/mob/M as anything in dead_mob_list) if(!istype(M,/mob/abstract/new_player) && !istype(M,/mob/living/carbon/brain)) //No meta-evesdropping diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 366b9e520a4..2113c335414 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -204,16 +204,13 @@ /mob/living/silicon/pai/LateLogin() - greet() - ..() - -/mob/living/silicon/pai/proc/greet() - - if (!greeted) + if(!greeted) // Basic intro text. - to_chat(src, "You are a Personal AI!") - to_chat(src, "You are a small artificial intelligence contained inside a portable tablet, and you are bound to a master. Your primary directive is to serve them and follow their instructions, follow this prime directive above all others. Check your Software interface to spend ram on programs that can help, and unfold your chassis to take a holographic form and move around the world.") + to_chat(src, SPAN_DANGER("You are a Personal AI!")) + to_chat(src, SPAN_NOTICE("You are a small artificial intelligence contained inside a portable tablet, and you are bound to a master. Your primary directive is to serve them and follow their instructions, follow this prime directive above all others. Check your Software interface to spend ram on programs that can help, and unfold your chassis to take a holographic form and move around the world.")) + playsound(usr, 'sound/effects/pai/pai_login.ogg', 75) greeted = 1 + ..() // this function shows the information about being silenced as a pAI in the Status panel /mob/living/silicon/pai/proc/show_silenced() @@ -248,7 +245,7 @@ if(prob(20)) var/turf/T = get_turf_or_move(src.loc) for (var/mob/M in viewers(T)) - M.show_message("A shower of sparks spray from [src]'s inner workings.", 3, "You hear and smell the ozone hiss of electrical sparks being expelled violently.", 2) + M.show_message(SPAN_WARNING("A shower of sparks spray from [src]'s inner workings."), 3, SPAN_WARNING("You hear and smell the ozone hiss of electrical sparks being expelled violently."), 2) return src.death(0) switch(pick(1,2,3)) @@ -353,6 +350,7 @@ var/turf/T = get_turf(src) if(loud && istype(T)) T.visible_message(SPAN_NOTICE("[src] folds outwards, expanding into a mobile form.")) + playsound(src, 'sound/items/rped.ogg', 40, TRUE) canmove = TRUE resting = FALSE @@ -427,7 +425,7 @@ else resting = !resting icon_state = resting ? "[chassis]_rest" : "[chassis]" - to_chat(src, "You are now [resting ? "resting" : "getting up"].") + to_chat(src, SPAN_NOTICE("You are now [resting ? "resting" : "getting up"].")) canmove = !resting @@ -448,15 +446,15 @@ return if(W.force) - visible_message("[user.name] attacks [src] with [W]!") + visible_message(SPAN_DANGER("[user.name] attacks [src] with [W]!")) src.adjustBruteLoss(W.force) src.updatehealth() else - visible_message("[user.name] bonks [src] harmlessly with [W].") + visible_message(SPAN_WARNING("[user.name] bonks [src] harmlessly with [W].")) /mob/living/silicon/pai/AltClick(mob/user as mob) if(!user || user.stat || user.lying || user.restrained() || !Adjacent(user)) return - visible_message("[user.name] boops [src] on the head.") + visible_message(SPAN_DANGER("[user.name] boops [src] on the head.")) close_up() //I'm not sure how much of this is necessary, but I would rather avoid issues. @@ -468,7 +466,9 @@ return var/turf/T = get_turf(src) - if(istype(T)) T.visible_message("[src] neatly folds inwards, compacting down to a rectangular card.") + if(istype(T)) + T.visible_message("[src] neatly folds inwards, compacting down to a rectangular card.") + playsound(src, 'sound/items/rped.ogg', 40, TRUE) src.stop_pulling() if (client) @@ -521,12 +521,12 @@ if(istype(AM,/obj/item)) var/obj/item/O = AM if(O.w_class > can_pull_size) - to_chat(src, "You are too small to pull that.") + to_chat(src, SPAN_WARNING("You are too small to pull that.")) return else ..() else - to_chat(src, "You are too small to pull that.") + to_chat(src, SPAN_WARNING("You are too small to pull that.")) return /mob/living/silicon/pai/UnarmedAttack(atom/A, proximity) @@ -539,7 +539,7 @@ if(stat || sleeping || paralysis || weakened) return - var/selection = input(src, "Choose an icon for you card.") in pai_emotions + var/selection = input(src, "Choose an icon for your card.") in pai_emotions card.setEmotion(pai_emotions[selection]) /mob/living/silicon/pai/set_respawn_time() diff --git a/html/changelogs/wezzy_paisounds.yml b/html/changelogs/wezzy_paisounds.yml new file mode 100644 index 00000000000..1d39aa6ab88 --- /dev/null +++ b/html/changelogs/wezzy_paisounds.yml @@ -0,0 +1,41 @@ +################################ +# 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 +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: Wowzewow (Wezzy) + +# 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: "Adds some sounds for pAIs." diff --git a/sound/effects/pai/pai_boot.ogg b/sound/effects/pai/pai_boot.ogg new file mode 100644 index 00000000000..3d6783fe703 Binary files /dev/null and b/sound/effects/pai/pai_boot.ogg differ diff --git a/sound/effects/pai/pai_login.ogg b/sound/effects/pai/pai_login.ogg new file mode 100644 index 00000000000..b3aa1329058 Binary files /dev/null and b/sound/effects/pai/pai_login.ogg differ diff --git a/sound/effects/pai/pai_restore.ogg b/sound/effects/pai/pai_restore.ogg new file mode 100644 index 00000000000..858b519a10c Binary files /dev/null and b/sound/effects/pai/pai_restore.ogg differ