[WIP] pAI tweaks and upgrades

Changes some things around! 

Removes the 'wipe' button from pAI's interface, since I think there being an instant 'kill player' button is pretty lame, especially since most pAIs activate on their own without a master. They're easy enough to kill or contain without this, so I don't see it as necessary. If you want to kill your pAI friend just eat them. :U

Removes the 'pAI Suicide' verb, and renames the 'Wipe Personality' to 'Enter Storage' and moved it from the OOC tab to the pAI Commands tab. Killing a pAI deletes the card and all that, where the 'Enter Storage' verb deletes the card and spawns a new one that can be used, which! I think it more appropriate.

Makes it so that, when damaged, pAIs will slowly regenerate while folded up, at a rate of 0.5 brute and burn per life tick, where previously it had been impossible to recover health outside of admin intervention.

Updated the Universal Translator with many of the newer languages that aren't obviously for events or hivemind type things.

Added the same emotes that humans can use to pAIs

Added an alternative pAI card style, and rearranged the expressions for the cards a little bit, and added one more.

Plan to add more pAI chassis to play with
This commit is contained in:
VerySoft
2022-06-02 20:13:52 -04:00
parent fb04abb32d
commit 38724d4d4c
15 changed files with 162 additions and 57 deletions
+37 -22
View File
@@ -48,12 +48,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 +221,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 +229,7 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard)
</td>
</table>
"}
*/
else
if(looking_for_personality)
dat += {"
@@ -304,7 +313,7 @@ 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")
add_overlay("pai-neutral")
/obj/item/device/paicard/proc/removePersonality()
src.pai = null
@@ -317,21 +326,23 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard)
if(pai)
cut_overlays()
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) 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")
current_emotion = emotion
/obj/item/device/paicard/proc/alertUpdate()
@@ -396,4 +407,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'
+3 -1
View File
@@ -78,6 +78,7 @@
adjustOxyLoss(max(getMaxHealth() * 2 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
updatehealth()
/*
/mob/living/silicon/pai/verb/suicide()
set category = "pAI Commands"
set desc = "Kill yourself and become a ghost (You will receive a confirmation prompt)"
@@ -91,4 +92,5 @@
M.show_message("<span class='notice'>[src] flashes a message across its screen, \"Wiping core files. Please acquire a new personality to continue using pAI device functions.\"</span>", 3, "<span class='notice'>[src] bleeps electronically.</span>", 2)
death(0)
else
to_chat(src, "Aborting suicide attempt.")
to_chat(src, "Aborting suicide attempt.")
*/
@@ -54,3 +54,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 = "boop"
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'
@@ -7,6 +7,8 @@ var/list/_human_default_emotes = list(
/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,
+9
View File
@@ -6,9 +6,18 @@ var/list/_silicon_default_emotes = list(
/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
+3 -1
View File
@@ -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)
+5 -3
View File
@@ -433,10 +433,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
@@ -458,9 +460,9 @@
to_chat(src, "<span class='notice'>You block access modfications.</span>")
/mob/living/silicon/pai/verb/wipe_software()
set name = "Wipe Software"
set category = "OOC"
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."
// 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")
+11 -15
View File
@@ -43,15 +43,6 @@
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
/mob/living/silicon/pai/update_icons() //And other functions cause this to occur, such as digesting someone.
..()
update_fullness_pai()
@@ -64,12 +55,6 @@
else if(people_eaten && resting)
icon_state = "[chassis]_rest_full"
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"
@@ -80,6 +65,17 @@
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)
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
update_icon()
// Release belly contents before being gc'd!
/mob/living/silicon/pai/Destroy()
+16 -15
View File
@@ -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
@@ -22,6 +22,8 @@ var/list/_robot_default_emotes = list(
/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
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 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.