This commit is contained in:
VerySoft
2022-06-03 18:47:19 -04:00
parent 38724d4d4c
commit 67afdfe99e
13 changed files with 127 additions and 31 deletions
+24 -18
View File
@@ -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"
+2 -1
View File
@@ -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())
+2 -2
View File
@@ -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)
+6 -4
View File
@@ -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"
+90 -5
View File
@@ -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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.
Binary file not shown.