Updoot
@@ -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 = "#21ffff"
|
||||
|
||||
/obj/item/device/paicard/relaymove(var/mob/user, var/direction)
|
||||
if(user.stat || user.stunned)
|
||||
@@ -313,36 +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-neutral")
|
||||
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-neutral")
|
||||
if(2) add_overlay("pai-what")
|
||||
if(3) add_overlay("pai-happy")
|
||||
if(4) add_overlay("pai-cat")
|
||||
if(5) add_overlay("pai-extremely-happy")
|
||||
if(6) add_overlay("pai-face")
|
||||
if(7) add_overlay("pai-laugh")
|
||||
if(8) add_overlay("pai-sad")
|
||||
if(9) add_overlay("pai-angry")
|
||||
if(10) add_overlay("pai-silly")
|
||||
if(11) add_overlay("pai-nose")
|
||||
if(12) add_overlay("pai-smirk")
|
||||
if(13) add_overlay("pai-exclamation")
|
||||
if(14) add_overlay("pai-question")
|
||||
if(15) add_overlay("pai-blank")
|
||||
if(16) add_overlay("pai-off")
|
||||
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()
|
||||
|
||||
@@ -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!"
|
||||
|
||||
@@ -56,12 +56,13 @@
|
||||
emote_sound = 'sound/machines/dwoop.ogg'
|
||||
|
||||
/decl/emote/audible/synth/boop
|
||||
key = "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'
|
||||
sound_vary = FALSE
|
||||
|
||||
/decl/emote/audible/synth/robochirp
|
||||
key = "robochirp"
|
||||
|
||||
@@ -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, 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())
|
||||
|
||||
@@ -26,8 +26,8 @@
|
||||
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)
|
||||
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",
|
||||
@@ -409,6 +409,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()
|
||||
@@ -453,11 +455,11 @@
|
||||
|
||||
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()
|
||||
set name = "Enter Storage"
|
||||
|
||||
@@ -1,10 +1,44 @@
|
||||
/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"
|
||||
)
|
||||
|
||||
//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"
|
||||
)
|
||||
|
||||
/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,6 +76,7 @@
|
||||
icon_state = "[chassis]_rest_full"
|
||||
else
|
||||
icon_state = "[chassis]_rest"
|
||||
add_eyes()
|
||||
|
||||
/mob/living/silicon/pai/update_icons() //And other functions cause this to occur, such as digesting someone.
|
||||
..()
|
||||
@@ -54,6 +89,7 @@
|
||||
icon_state = "[chassis]_full"
|
||||
else if(people_eaten && resting)
|
||||
icon_state = "[chassis]_rest_full"
|
||||
add_eyes()
|
||||
|
||||
//proc override to avoid pAI players being invisible while the chassis selection window is open
|
||||
/mob/living/silicon/pai/proc/choose_chassis()
|
||||
@@ -64,10 +100,7 @@
|
||||
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(icon != 'icons/mob/pai_vr64x64.dmi' || icon != 'icons/mob/pai_vr.dmi')
|
||||
//It's been modified to something else, so just leave it alone
|
||||
else if(chassis in wide_chassis)
|
||||
if(chassis in wide_chassis)
|
||||
icon = 'icons/mob/pai_vr64x64.dmi'
|
||||
pixel_x = -16
|
||||
vis_height = 64
|
||||
@@ -76,8 +109,60 @@
|
||||
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()
|
||||
remove_eyes()
|
||||
if(!chassis in allows_eye_color)
|
||||
return
|
||||
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)
|
||||
return
|
||||
cut_overlay(eye_layer)
|
||||
qdel(eye_layer)
|
||||
eye_layer = null
|
||||
|
||||
|
Before Width: | Height: | Size: 162 KiB After Width: | Height: | Size: 162 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |