pAI and emote tweaks and upgrades
@@ -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 //</font></font>
|
||||
dat += "<b>Radio Uplink</b><br>"
|
||||
dat += "<font color=red><i>Radio firmware not loaded. Please install a pAI personality to load firmware.</i></font><br>"
|
||||
/* - //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 += {"
|
||||
<table>
|
||||
<td class="button_red"><a href='byond://?src=\ref[src];wipe=1' class='button'>Wipe current pAI personality</a>
|
||||
@@ -221,6 +231,7 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard)
|
||||
</td>
|
||||
</table>
|
||||
"}
|
||||
*/
|
||||
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)]."))
|
||||
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'
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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, "<span class='notice'>You add the access from the [W] to [src].</span>")
|
||||
to_chat(src, "<span class='notice'>\The [user] swipes the [W] over you. You copy the access codes.</span>")
|
||||
return
|
||||
if("Remove Access")
|
||||
idcard.access = list()
|
||||
to_chat(user, "<span class='notice'>You remove the access from [src].</span>")
|
||||
to_chat(src, "<span class='warning'>\The [user] swipes the [W] over you, removing access codes from you.</span>")
|
||||
return
|
||||
if("Cancel")
|
||||
return
|
||||
@@ -451,16 +459,22 @@
|
||||
|
||||
if(idaccessible == 0)
|
||||
idaccessible = 1
|
||||
to_chat(src, "<span class='notice'>You allow access modifications.</span>")
|
||||
|
||||
visible_message("<span class='notice'>\The [src] clicks as their access modification slot opens.</span>","<span class='notice'>You allow access modifications.</span>", runemessage = "click")
|
||||
else
|
||||
idaccessible = 0
|
||||
to_chat(src, "<span class='notice'>You block access modfications.</span>")
|
||||
visible_message("<span class='notice'>\The [src] clicks as their access modification slot closes.</span>","<span class='notice'>You block access modfications.</span>", 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")
|
||||
|
||||
@@ -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, "<span class='warning'>Your selected chassis eye color can not be modified. The color you pick will only apply to supporting chassis and your card screen.</span>")
|
||||
|
||||
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 ..()
|
||||
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
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
Before Width: | Height: | Size: 162 KiB After Width: | Height: | Size: 167 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 25 KiB |
BIN
icons/obj/paicard.dmi
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |