diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index f743ab87f2b..7323debadca 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -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 //
dat += "Radio Uplink
"
dat += "Radio firmware not loaded. Please install a pAI personality to load firmware.
"
+ /* - //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 += {"
"}
+ */
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)]."))
\ No newline at end of file
+ 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'
diff --git a/code/modules/client/verbs/suicide.dm b/code/modules/client/verbs/suicide.dm
index 52841c84648..9d2a3f064b9 100644
--- a/code/modules/client/verbs/suicide.dm
+++ b/code/modules/client/verbs/suicide.dm
@@ -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("[src] flashes a message across its screen, \"Wiping core files. Please acquire a new personality to continue using pAI device functions.\"", 3, "[src] bleeps electronically.", 2)
death(0)
else
- to_chat(src, "Aborting suicide attempt.")
\ No newline at end of file
+ to_chat(src, "Aborting suicide attempt.")
+*/
\ No newline at end of file
diff --git a/code/modules/emotes/definitions/synthetics.dm b/code/modules/emotes/definitions/synthetics.dm
index 70e05481cee..f5f94b6697f 100644
--- a/code/modules/emotes/definitions/synthetics.dm
+++ b/code/modules/emotes/definitions/synthetics.dm
@@ -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'
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index 1881e2856a4..1f8f33b2085 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -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,
diff --git a/code/modules/mob/living/silicon/emote.dm b/code/modules/mob/living/silicon/emote.dm
index 153e05a7b6f..de001c9e952 100644
--- a/code/modules/mob/living/silicon/emote.dm
+++ b/code/modules/mob/living/silicon/emote.dm
@@ -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
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/pai/life.dm b/code/modules/mob/living/silicon/pai/life.dm
index e4f461179d4..9caaf03d66b 100644
--- a/code/modules/mob/living/silicon/pai/life.dm
+++ b/code/modules/mob/living/silicon/pai/life.dm
@@ -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)
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index a1764fbcd26..9ba6d398839 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -433,10 +433,12 @@
if("Add Access")
idcard.access |= ID.access
to_chat(user, "You add the access from the [W] to [src].")
+ to_chat(src, "\The [user] swipes the [W] over you. You copy the access codes.")
return
if("Remove Access")
idcard.access = list()
to_chat(user, "You remove the access from [src].")
+ to_chat(src, "\The [user] swipes the [W] over you, removing access codes from you.")
return
if("Cancel")
return
@@ -458,9 +460,9 @@
to_chat(src, "You block access modfications.")
/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")
diff --git a/code/modules/mob/living/silicon/pai/pai_vr.dm b/code/modules/mob/living/silicon/pai/pai_vr.dm
index d5f989b67e0..df2a1f18b04 100644
--- a/code/modules/mob/living/silicon/pai/pai_vr.dm
+++ b/code/modules/mob/living/silicon/pai/pai_vr.dm
@@ -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()
diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm
index 3a98a5bea3d..3475700c4bc 100644
--- a/code/modules/mob/living/silicon/pai/software.dm
+++ b/code/modules/mob/living/silicon/pai/software.dm
@@ -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
)
diff --git a/code/modules/mob/living/silicon/pai/software_modules.dm b/code/modules/mob/living/silicon/pai/software_modules.dm
index 1fb28a58fd2..7e4bff120a3 100644
--- a/code/modules/mob/living/silicon/pai/software_modules.dm
+++ b/code/modules/mob/living/silicon/pai/software_modules.dm
@@ -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
diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm
index f2a4d9775bc..f05ee135acb 100644
--- a/code/modules/mob/living/silicon/robot/emote.dm
+++ b/code/modules/mob/living/silicon/robot/emote.dm
@@ -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
diff --git a/icons/obj/paicard.dmi b/icons/obj/paicard.dmi
new file mode 100644
index 00000000000..990757c465c
Binary files /dev/null and b/icons/obj/paicard.dmi differ
diff --git a/icons/obj/pda.dmi b/icons/obj/pda.dmi
index 9aa94d1fe94..7a94c033c1d 100644
Binary files a/icons/obj/pda.dmi and b/icons/obj/pda.dmi differ
diff --git a/sound/voice/roboboop.ogg b/sound/voice/roboboop.ogg
new file mode 100644
index 00000000000..cb42d0a22d5
Binary files /dev/null and b/sound/voice/roboboop.ogg differ
diff --git a/sound/voice/robochirp.ogg b/sound/voice/robochirp.ogg
new file mode 100644
index 00000000000..64db4c2c4cf
Binary files /dev/null and b/sound/voice/robochirp.ogg differ