diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index f743ab87f2..d0eb0b7e26 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -14,6 +14,8 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard) var/obj/item/device/radio/radio var/looking_for_personality = 0 var/mob/living/silicon/pai/pai + var/image/screen_layer + var/screen_color = "#00ff0d" /obj/item/device/paicard/relaymove(var/mob/user, var/direction) if(user.stat || user.stunned) @@ -48,12 +50,19 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard) return ..() var/turf/location = get_turf(src) - var/obj/item/device/paicard/card = new(location) - var/mob/living/silicon/pai/new_pai = new(card) + if(istype(src , /obj/item/device/paicard/typeb)) + var/obj/item/device/paicard/typeb/card = new(location) + var/mob/living/silicon/pai/new_pai = new(card) + new_pai.key = user.key + card.setPersonality(new_pai) + new_pai.SetName(actual_pai_name) + else + var/obj/item/device/paicard/card = new(location) + var/mob/living/silicon/pai/new_pai = new(card) + new_pai.key = user.key + card.setPersonality(new_pai) + new_pai.SetName(actual_pai_name) qdel(src) - new_pai.key = user.key - card.setPersonality(new_pai) - new_pai.SetName(actual_pai_name) return ..() // VOREStation Edit End @@ -214,6 +223,7 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard) else // dat += "Radio Uplink
" dat += "Radio firmware not loaded. Please install a pAI personality to load firmware.
" + /* - //A button for instantly deleting people from the game is lame, especially considering that pAIs on our server tend to activate without a master. dat += {"
Wipe current pAI personality @@ -221,6 +231,7 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard)
"} + */ else if(looking_for_personality) dat += {" @@ -304,34 +315,40 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard) /obj/item/device/paicard/proc/setPersonality(mob/living/silicon/pai/personality) src.pai = personality - add_overlay("pai-happy") + setEmotion(1) /obj/item/device/paicard/proc/removePersonality() src.pai = null cut_overlays() - add_overlay("pai-off") + setEmotion(16) /obj/item/device/paicard var/current_emotion = 1 /obj/item/device/paicard/proc/setEmotion(var/emotion) if(pai) cut_overlays() + qdel(screen_layer) + screen_layer = null switch(emotion) - if(1) add_overlay("pai-happy") - if(2) add_overlay("pai-cat") - if(3) add_overlay("pai-extremely-happy") - if(4) add_overlay("pai-face") - if(5) add_overlay("pai-laugh") - if(6) add_overlay("pai-off") - if(7) add_overlay("pai-sad") - if(8) add_overlay("pai-angry") - if(9) add_overlay("pai-what") - if(10) add_overlay("pai-neutral") - if(11) add_overlay("pai-silly") - if(12) add_overlay("pai-nose") - if(13) add_overlay("pai-smirk") - if(14) add_overlay("pai-exclamation") - if(15) add_overlay("pai-question") + if(1) screen_layer = image(icon, "pai-neutral") + if(2) screen_layer = image(icon, "pai-what") + if(3) screen_layer = image(icon, "pai-happy") + if(4) screen_layer = image(icon, "pai-cat") + if(5) screen_layer = image(icon, "pai-extremely-happy") + if(6) screen_layer = image(icon, "pai-face") + if(7) screen_layer = image(icon, "pai-laugh") + if(8) screen_layer = image(icon, "pai-sad") + if(9) screen_layer = image(icon, "pai-angry") + if(10) screen_layer = image(icon, "pai-silly") + if(11) screen_layer = image(icon, "pai-nose") + if(12) screen_layer = image(icon, "pai-smirk") + if(13) screen_layer = image(icon, "pai-exclamation") + if(14) screen_layer = image(icon, "pai-question") + if(15) screen_layer = image(icon, "pai-blank") + if(16) screen_layer = image(icon, "pai-off") + + screen_layer.color = pai.eye_color + add_overlay(screen_layer) current_emotion = emotion /obj/item/device/paicard/proc/alertUpdate() @@ -396,4 +413,8 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard) name = initial(src.name) to_chat(AI, span_notice("You feel a tad claustrophobic as your mind closes back into your card, ejecting from \the [initial(src.name)].")) if(user) - to_chat(user, span_notice("You eject the card from \the [initial(src.name)].")) \ No newline at end of file + to_chat(user, span_notice("You eject the card from \the [initial(src.name)].")) + +/obj/item/device/paicard/typeb + name = "personal AI device" + icon = 'icons/obj/paicard.dmi' diff --git a/code/modules/client/verbs/suicide.dm b/code/modules/client/verbs/suicide.dm index ad24f6e0d0..acc2f23c60 100644 --- a/code/modules/client/verbs/suicide.dm +++ b/code/modules/client/verbs/suicide.dm @@ -78,7 +78,11 @@ adjustOxyLoss(max(getMaxHealth() * 2 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) updatehealth() +<<<<<<< HEAD /* CHOMP EDIT START: Removing PAI suicide, literally no one needs this. +======= +/* +>>>>>>> 337b7e903f... Merge pull request #13031 from Very-Soft/master /mob/living/silicon/pai/verb/suicide() set category = "pAI Commands" set desc = "Kill yourself and become a ghost (You will receive a confirmation prompt)" @@ -93,5 +97,9 @@ death(0) else to_chat(src, "Aborting suicide attempt.") +<<<<<<< HEAD */ +======= +*/ +>>>>>>> 337b7e903f... Merge pull request #13031 from Very-Soft/master diff --git a/code/modules/emotes/definitions/audible.dm b/code/modules/emotes/definitions/audible.dm index 1a5a4e3084..4df078aa11 100644 --- a/code/modules/emotes/definitions/audible.dm +++ b/code/modules/emotes/definitions/audible.dm @@ -183,6 +183,7 @@ key = "squish" emote_sound = 'sound/effects/slime_squish.ogg' //Credit to DrMinky (freesound.org) for the sound. emote_message_3p = "squishes." + sound_vary = FALSE /decl/emote/audible/warble key = "warble" @@ -211,6 +212,7 @@ emote_message_1p_target = "You chirp in surprise at TARGET!" emote_message_3p_target = "chirps in surprise at TARGET!" emote_sound = 'sound/voice/teshsqueak.ogg' // Copyright CC BY 3.0 InspectorJ (freesound.org) for the source audio. + sound_vary = FALSE /decl/emote/audible/teshchirp key = "tchirp" diff --git a/code/modules/emotes/definitions/audible_furry_vr.dm b/code/modules/emotes/definitions/audible_furry_vr.dm index 61d980ad27..832c5e6dfa 100644 --- a/code/modules/emotes/definitions/audible_furry_vr.dm +++ b/code/modules/emotes/definitions/audible_furry_vr.dm @@ -34,6 +34,7 @@ key = "chirp" emote_message_3p = "chirps!" emote_sound = 'sound/misc/nymphchirp.ogg' + sound_vary = FALSE /decl/emote/audible/hoot key = "hoot" emote_message_3p = "hoots!" @@ -109,10 +110,12 @@ key = "snort" emote_message_3p = "snorts!" emote_sound = 'sound/voice/Snort.ogg' + sound_vary = FALSE /decl/emote/audible/meow key = "meow" emote_message_3p = "gently meows!" emote_sound = 'sound/voice/Meow.ogg' + sound_vary = FALSE /decl/emote/audible/moo key = "moo" emote_message_3p = "takes a breath and lets out a moo." diff --git a/code/modules/emotes/definitions/synthetics.dm b/code/modules/emotes/definitions/synthetics.dm index 70e05481ce..32e7bdf504 100644 --- a/code/modules/emotes/definitions/synthetics.dm +++ b/code/modules/emotes/definitions/synthetics.dm @@ -1,17 +1,18 @@ /decl/emote/audible/synth - key = "beep" - emote_message_3p = "beeps." - emote_sound = 'sound/machines/twobeep.ogg' + key = "ping" + emote_message_3p = "pings." + emote_sound = 'sound/machines/ping.ogg' /decl/emote/audible/synth/mob_can_use(var/mob/living/user) if(istype(user) && user.isSynthetic()) return ..() return FALSE -/decl/emote/audible/synth/ping - key = "ping" - emote_message_3p = "pings." - emote_sound = 'sound/machines/ping.ogg' +/decl/emote/audible/synth/beep + key = "beep" + emote_message_3p = "beeps." + emote_sound = 'sound/machines/twobeep.ogg' + sound_vary = FALSE /decl/emote/audible/synth/buzz key = "buzz" @@ -54,3 +55,19 @@ emote_message_3p_target = "chirps happily at TARGET!" emote_message_3p = "chirps happily." emote_sound = 'sound/machines/dwoop.ogg' + +/decl/emote/audible/synth/boop + key = "roboboop" + emote_message_1p_target = "You boop at TARGET!" + emote_message_1p = "You boop." + emote_message_3p_target = "boops at TARGET!" + emote_message_3p = "boops." + emote_sound = 'sound/voice/roboboop.ogg' + +/decl/emote/audible/synth/robochirp + key = "robochirp" + emote_message_1p_target = "You chirp at TARGET!" + emote_message_1p = "You chirp." + emote_message_3p_target = "chirps at TARGET!" + emote_message_3p = "chirps." + emote_sound = 'sound/voice/robochirp.ogg' diff --git a/code/modules/emotes/emote_define.dm b/code/modules/emotes/emote_define.dm index daff23f85d..14e7481d5d 100644 --- a/code/modules/emotes/emote_define.dm +++ b/code/modules/emotes/emote_define.dm @@ -44,6 +44,7 @@ var/global/list/emotes_by_key var/emote_range = 0 // If >0, restricts emote visibility to viewers within range. var/sound_preferences = list(/datum/client_preference/emote_noises) // Default emote sound_preferences is just emote_noises. Belch emote overrides this list for pref-checks. + var/sound_vary = TRUE /decl/emote/Initialize() . = ..() @@ -186,7 +187,7 @@ var/global/list/emotes_by_key if(islist(sound_to_play) && length(sound_to_play)) sound_to_play = pick(sound_to_play) if(sound_to_play) - playsound(user.loc, sound_to_play, use_sound["vol"], 0, preference = sound_preferences) //VOREStation Add - Preference + playsound(user.loc, sound_to_play, use_sound["vol"], sound_vary, frequency = null, preference = sound_preferences) //VOREStation Add - Preference /decl/emote/proc/mob_can_use(var/mob/user) return istype(user) && user.stat != DEAD && (type in user.get_available_emotes()) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 1881e2856a..47cc1e8f57 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -1,12 +1,14 @@ var/list/_human_default_emotes = list( /decl/emote/visible/blink, /decl/emote/audible/synth, - /decl/emote/audible/synth/ping, + /decl/emote/audible/synth/beep, /decl/emote/audible/synth/buzz, /decl/emote/audible/synth/confirm, /decl/emote/audible/synth/deny, /decl/emote/audible/synth/scary, /decl/emote/audible/synth/dwoop, + /decl/emote/audible/synth/boop, + /decl/emote/audible/synth/robochirp, /decl/emote/visible/nod, /decl/emote/visible/shake, /decl/emote/visible/shiver, diff --git a/code/modules/mob/living/silicon/emote.dm b/code/modules/mob/living/silicon/emote.dm index 153e05a7b6..a471c62b22 100644 --- a/code/modules/mob/living/silicon/emote.dm +++ b/code/modules/mob/living/silicon/emote.dm @@ -1,14 +1,23 @@ var/list/_silicon_default_emotes = list( /decl/emote/audible/synth, - /decl/emote/audible/synth/ping, + /decl/emote/audible/synth/beep, /decl/emote/audible/synth/buzz, /decl/emote/audible/synth/confirm, /decl/emote/audible/synth/deny, /decl/emote/audible/synth/scary, /decl/emote/audible/synth/dwoop, + /decl/emote/audible/synth/boop, + /decl/emote/audible/synth/robochirp, /decl/emote/audible/synth/security, /decl/emote/audible/synth/security/halt ) /mob/living/silicon/get_available_emotes() return global._silicon_default_emotes + +/mob/living/silicon/pai/get_available_emotes() + + var/list/fulllist = _silicon_default_emotes + fulllist |= _robot_default_emotes + fulllist |= _human_default_emotes + return fulllist \ No newline at end of file diff --git a/code/modules/mob/living/silicon/pai/life.dm b/code/modules/mob/living/silicon/pai/life.dm index e4f461179d..4879b7460c 100644 --- a/code/modules/mob/living/silicon/pai/life.dm +++ b/code/modules/mob/living/silicon/pai/life.dm @@ -25,7 +25,9 @@ if(health <= 0) death(null,"gives one shrill beep before falling lifeless.") - + else if(health < maxHealth && istype(src.loc , /obj/item/device/paicard)) + adjustBruteLoss(-0.5) + adjustFireLoss(-0.5) /mob/living/silicon/pai/updatehealth() if(status_flags & GODMODE) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index bcdeb751a4..313831ba53 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -31,7 +31,7 @@ "Cat" = "pai-cat", "Mouse" = "pai-mouse", "Monkey" = "pai-monkey", - "Corgi" = "pai-borgi", + "Borgi" = "pai-borgi", "Fox" = "pai-fox", "Parrot" = "pai-parrot", "Rabbit" = "pai-rabbit", @@ -48,6 +48,10 @@ "Duffel" = "pai-duffel", "Rat" = "rat", "Panther" = "panther", +<<<<<<< HEAD +======= + "Cyber Elf" = "cyberelf" +>>>>>>> 337b7e903f... Merge pull request #13031 from Very-Soft/master //VOREStation Addition End ) @@ -409,6 +413,8 @@ resting = 0 icon_state = "[chassis]" verbs -= /mob/living/silicon/pai/proc/pai_nom //VOREStation edit. Let's remove their nom verb + if(isopenspace(card.loc)) + fall() // No binary for pAIs. /mob/living/silicon/pai/binarycheck() @@ -433,10 +439,12 @@ if("Add Access") idcard.access |= ID.access to_chat(user, "You add the access from the [W] to [src].") + to_chat(src, "\The [user] swipes the [W] over you. You copy the access codes.") return if("Remove Access") idcard.access = list() to_chat(user, "You remove the access from [src].") + to_chat(src, "\The [user] swipes the [W] over you, removing access codes from you.") return if("Cancel") return @@ -451,16 +459,22 @@ if(idaccessible == 0) idaccessible = 1 - to_chat(src, "You allow access modifications.") - + visible_message("\The [src] clicks as their access modification slot opens.","You allow access modifications.", runemessage = "click") else idaccessible = 0 - to_chat(src, "You block access modfications.") + visible_message("\The [src] clicks as their access modification slot closes.","You block access modfications.", runemessage = "click") + /mob/living/silicon/pai/verb/wipe_software() +<<<<<<< HEAD set name = "Wipe Software (CRYO)" //CHOMP EDIT: making this clear on first glance set category = "pAI Commands" //CHOMP EDIT: moving this to pai commands, where it belongs set desc = "Wipe your software. This is functionally equivalent to cryo or robotic storage, freeing up your job slot." +======= + set name = "Enter Storage" + set category = "pAI Commands" + set desc = "Upload your personality to the cloud and wipe your software from the card. This is functionally equivalent to cryo or robotic storage, freeing up your job slot." +>>>>>>> 337b7e903f... Merge pull request #13031 from Very-Soft/master // Make sure people don't kill themselves accidentally if(tgui_alert(usr, "WARNING: This will immediately wipe your software and ghost you, removing your character from the round permanently (similar to cryo and robotic storage). Are you entirely sure you want to do this?", "Wipe Software", list("No", "Yes")) != "Yes") diff --git a/code/modules/mob/living/silicon/pai/pai_vr.dm b/code/modules/mob/living/silicon/pai/pai_vr.dm index d5f989b67e..8bccfbad18 100644 --- a/code/modules/mob/living/silicon/pai/pai_vr.dm +++ b/code/modules/mob/living/silicon/pai/pai_vr.dm @@ -1,10 +1,48 @@ /mob/living/silicon/pai var/people_eaten = 0 icon = 'icons/mob/pai_vr.dmi' + softfall = TRUE + var/eye_glow = TRUE + var/image/eye_layer = null // Holds the eye overlay. + var/eye_color = "#00ff0d" var/global/list/wide_chassis = list( "rat", "panther" ) + var/global/list/flying_chassis = list( + "pai-parrot", + "pai-bat", + "pai-butterfly", + "pai-hawk", + "cyberelf" + ) + + //Sure I could spend all day making wacky overlays for all of the different forms + //but quite simply most of these sprites aren't made for that, and I'd rather just make new ones + //the birds especially! Just naw. If someone else wants to mess with 12x4 frames of animation where + //most of the pixels are different kinds of green and tastefully translate that to whitescale + //they can have fun with that! I not doing it! + var/global/list/allows_eye_color = list( + "pai-repairbot", + "pai-typezero", + "pai-bat", + "pai-butterfly", + "pai-mouse", + "pai-monkey", + "pai-raccoon", + "pai-cat", + "rat", + "panther", + "pai-bear", + "pai-fen", + "cyberelf" + ) + +/mob/living/silicon/pai/Initialize() + . = ..() + + verbs |= /mob/living/proc/hide + verbs |= /mob/living/proc/vertical_nom /mob/living/silicon/pai/proc/pai_nom(var/mob/living/T in oview(1)) set name = "pAI Nom" @@ -42,15 +80,7 @@ icon_state = "[chassis]_rest_full" else icon_state = "[chassis]_rest" - - if(chassis in wide_chassis) - icon = 'icons/mob/pai_vr64x64.dmi' - pixel_x = -16 - vis_height = 64 - else - icon = 'icons/mob/pai_vr.dmi' - pixel_x = 0 - vis_height = 32 + add_eyes() /mob/living/silicon/pai/update_icons() //And other functions cause this to occur, such as digesting someone. ..() @@ -63,13 +93,8 @@ icon_state = "[chassis]_full" else if(people_eaten && resting) icon_state = "[chassis]_rest_full" + add_eyes() - if(chassis in wide_chassis) - icon = 'icons/mob/pai_vr64x64.dmi' - pixel_x = -16 - else - icon = 'icons/mob/pai_vr.dmi' - pixel_x = 0 //proc override to avoid pAI players being invisible while the chassis selection window is open /mob/living/silicon/pai/proc/choose_chassis() set category = "pAI Commands" @@ -79,9 +104,67 @@ choice = tgui_input_list(usr, "What would you like to use for your mobile chassis icon?", "Chassis Choice", possible_chassis) if(!choice) return chassis = possible_chassis[choice] - verbs |= /mob/living/proc/hide + if(chassis in wide_chassis) + icon = 'icons/mob/pai_vr64x64.dmi' + pixel_x = -16 + vis_height = 64 + else + icon = 'icons/mob/pai_vr.dmi' + pixel_x = 0 + vis_height = 32 + + if(chassis in flying_chassis) + hovering = TRUE + else + hovering = FALSE + if(isopenspace(loc)) + fall() + update_icon() + +/mob/living/silicon/pai/verb/toggle_eyeglow() + set category = "pAI Commands" + set name = "Toggle Eye Glow" + if(chassis in allows_eye_color) + if(eye_glow) + eye_glow = FALSE + else + eye_glow = TRUE + update_icon() + else + to_chat(src, "Your selected chassis cannot modify its eye glow!") + return + + +/mob/living/silicon/pai/verb/pick_eye_color() + set category = "pAI Commands" + set name = "Pick Eye Color" + if(chassis in allows_eye_color) + else + to_chat(src, "Your selected chassis eye color can not be modified. The color you pick will only apply to supporting chassis and your card screen.") + + eye_color = input(src, "Choose your character's eye color:", "Eye Color") as color|null + update_icon() + card.setEmotion(card.current_emotion) + // Release belly contents before being gc'd! /mob/living/silicon/pai/Destroy() release_vore_contents() - return ..() \ No newline at end of file + return ..() + +/mob/living/silicon/pai/proc/add_eyes() + if(chassis in allows_eye_color) + remove_eyes() + if(!eye_layer) + eye_layer = image(icon, "[icon_state]-eyes") + eye_layer.appearance_flags = appearance_flags + eye_layer.color = eye_color + if(eye_glow) + eye_layer.plane = PLANE_LIGHTING_ABOVE + add_overlay(eye_layer) + +/mob/living/silicon/pai/proc/remove_eyes() + if(chassis in allows_eye_color) + cut_overlay(eye_layer) + qdel(eye_layer) + eye_layer = null diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index 3a98a5bea3..3475700c4b 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -1,19 +1,20 @@ var/list/pai_emotions = list( - "Happy" = 1, - "Cat" = 2, - "Extremely Happy" = 3, - "Face" = 4, - "Laugh" = 5, - "Off" = 6, - "Sad" = 7, - "Angry" = 8, - "What" = 9, - "Neutral" = 10, - "Silly" = 11, - "Nose" = 12, - "Smirk" = 13, - "Exclamation Points" = 14, - "Question Mark" = 15 + "Neutral" = 1, + "What" = 2, + "Happy" = 3, + "Cat" = 4, + "Extremely Happy" = 5, + "Face" = 6, + "Laugh" = 7, + "Sad" = 8, + "Angry" = 9, + "Silly" = 10, + "Nose" = 11, + "Smirk" = 12, + "Exclamation Points" = 13, + "Question Mark" = 14, + "Blank" = 15, + "Off" = 16 ) diff --git a/code/modules/mob/living/silicon/pai/software_modules.dm b/code/modules/mob/living/silicon/pai/software_modules.dm index 1fb28a58fd..7e4bff120a 100644 --- a/code/modules/mob/living/silicon/pai/software_modules.dm +++ b/code/modules/mob/living/silicon/pai/software_modules.dm @@ -411,6 +411,35 @@ user.add_language(LANGUAGE_SKRELLIAN) user.add_language(LANGUAGE_ZADDAT) user.add_language(LANGUAGE_SCHECHI) + user.add_language(LANGUAGE_DRUDAKAR) + user.add_language(LANGUAGE_SLAVIC) + user.add_language(LANGUAGE_BIRDSONG) + user.add_language(LANGUAGE_SAGARU) + user.add_language(LANGUAGE_CANILUNZT) + user.add_language(LANGUAGE_ECUREUILIAN) + user.add_language(LANGUAGE_DAEMON) + user.add_language(LANGUAGE_ENOCHIAN) + user.add_language(LANGUAGE_VESPINAE) + user.add_language(LANGUAGE_SPACER) + user.add_language(LANGUAGE_CLOWNISH) + user.add_language(LANGUAGE_TAVAN) + user.add_language(LANGUAGE_ECHOSONG) + user.add_language(LANGUAGE_CHIMPANZEE) + user.add_language(LANGUAGE_NEAERA) + user.add_language(LANGUAGE_STOK) + user.add_language(LANGUAGE_FARWA) + user.add_language(LANGUAGE_ROOTLOCAL) + user.add_language(LANGUAGE_VOX) + user.add_language(LANGUAGE_SKRELLIANFAR) + user.add_language(LANGUAGE_MINBUS) + user.add_language(LANGUAGE_ALAI) + user.add_language(LANGUAGE_PROMETHEAN) + user.add_language(LANGUAGE_GIBBERISH) + user.add_language("Mouse") + user.add_language("Cat") + user.add_language("Bird") + user.add_language("Dog") + user.add_language("Teppi") else user.remove_language(LANGUAGE_UNATHI) user.remove_language(LANGUAGE_SIIK) @@ -418,6 +447,35 @@ user.remove_language(LANGUAGE_SKRELLIAN) user.remove_language(LANGUAGE_ZADDAT) user.remove_language(LANGUAGE_SCHECHI) + user.remove_language(LANGUAGE_DRUDAKAR) + user.remove_language(LANGUAGE_SLAVIC) + user.remove_language(LANGUAGE_BIRDSONG) + user.remove_language(LANGUAGE_SAGARU) + user.remove_language(LANGUAGE_CANILUNZT) + user.remove_language(LANGUAGE_ECUREUILIAN) + user.remove_language(LANGUAGE_DAEMON) + user.remove_language(LANGUAGE_ENOCHIAN) + user.remove_language(LANGUAGE_VESPINAE) + user.remove_language(LANGUAGE_SPACER) + user.remove_language(LANGUAGE_CLOWNISH) + user.remove_language(LANGUAGE_TAVAN) + user.remove_language(LANGUAGE_ECHOSONG) + user.remove_language(LANGUAGE_CHIMPANZEE) + user.remove_language(LANGUAGE_NEAERA) + user.remove_language(LANGUAGE_STOK) + user.remove_language(LANGUAGE_FARWA) + user.remove_language(LANGUAGE_ROOTLOCAL) + user.remove_language(LANGUAGE_VOX) + user.remove_language(LANGUAGE_SKRELLIANFAR) + user.remove_language(LANGUAGE_MINBUS) + user.remove_language(LANGUAGE_ALAI) + user.remove_language(LANGUAGE_PROMETHEAN) + user.remove_language(LANGUAGE_GIBBERISH) + user.remove_language("Mouse") + user.remove_language("Cat") + user.remove_language("Bird") + user.remove_language("Dog") + user.remove_language("Teppi") /datum/pai_software/translator/is_active(mob/living/silicon/pai/user) return user.translator_on diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm index f2a4d9775b..9def436c7c 100644 --- a/code/modules/mob/living/silicon/robot/emote.dm +++ b/code/modules/mob/living/silicon/robot/emote.dm @@ -16,12 +16,14 @@ var/list/_robot_default_emotes = list( /decl/emote/visible/spin, /decl/emote/visible/sidestep, /decl/emote/audible/synth, - /decl/emote/audible/synth/ping, + /decl/emote/audible/synth/beep, /decl/emote/audible/synth/buzz, /decl/emote/audible/synth/confirm, /decl/emote/audible/synth/deny, /decl/emote/audible/synth/scary, /decl/emote/audible/synth/dwoop, + /decl/emote/audible/synth/boop, + /decl/emote/audible/synth/robochirp, /decl/emote/audible/synth/security, /decl/emote/audible/synth/security/halt, //VOREStation Add diff --git a/icons/mob/pai_vr.dmi b/icons/mob/pai_vr.dmi index 0b8b985ff7..d54bc26fbe 100644 Binary files a/icons/mob/pai_vr.dmi and b/icons/mob/pai_vr.dmi differ diff --git a/icons/mob/pai_vr64x64.dmi b/icons/mob/pai_vr64x64.dmi index f9c99e51eb..800b6a902d 100644 Binary files a/icons/mob/pai_vr64x64.dmi and b/icons/mob/pai_vr64x64.dmi differ diff --git a/icons/obj/paicard.dmi b/icons/obj/paicard.dmi new file mode 100644 index 0000000000..c69ead6efd Binary files /dev/null and b/icons/obj/paicard.dmi differ diff --git a/icons/obj/pda.dmi b/icons/obj/pda.dmi index 9aa94d1fe9..e7e7f0859c 100644 Binary files a/icons/obj/pda.dmi and b/icons/obj/pda.dmi differ diff --git a/sound/voice/roboboop.ogg b/sound/voice/roboboop.ogg new file mode 100644 index 0000000000..6a2d9fd0af Binary files /dev/null and b/sound/voice/roboboop.ogg differ diff --git a/sound/voice/robochirp.ogg b/sound/voice/robochirp.ogg new file mode 100644 index 0000000000..51d534662d Binary files /dev/null and b/sound/voice/robochirp.ogg differ