mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-29 23:17:28 +01:00
[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:
@@ -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'
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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 |
Binary file not shown.
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user