diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 3e3910ef0b0..70fa3a409f3 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -217,7 +217,7 @@
-

Each time this button is pressed, a request will be sent out to any available personalities. Check back often give plenty of time for personalities to respond. This process could take anywhere from 15 seconds to several minutes, depending on the available personalities' timeliness.

+

Each time this button is pressed, a request will be sent out to any available personalities. Check back often give plenty of time for personalities to respond. This process could take anywhere from 15 seconds to several minutes, depending on the available personalities' timelines.

"} user << browse(dat, "window=paicard") onclose(user, "paicard") @@ -247,8 +247,11 @@ if(confirm == "Yes") for(var/mob/M in src) M << "

You feel yourself slipping away from reality.

" + sleep(30) M << "

Byte by byte you lose your sense of self.

" + sleep(20) M << "

Your mental faculties leave you.

" + sleep(30) M << "
oblivion...
" M.death(0) removePersonality() @@ -339,6 +342,9 @@ update_location(slot) /obj/item/device/paicard/proc/update_location(var/slotnumber = null) + if (!pai) + return + if (!slotnumber) if (istype(loc, /mob)) slotnumber = get_equip_slot() diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index f6c3ad33b06..ee26efd3fec 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -3,6 +3,7 @@ var/list/preferences_datums = list() var/global/list/special_roles = list( //keep synced with the defines BE_* in setup.dm --rastaf +//REALLY keep synced. The ordering of this list is critical, it must match the order of the BE_* defines --Nanako //some autodetection here. // TODO: Update to new antagonist system. "traitor" = IS_MODE_COMPILED("traitor"), // 0 @@ -19,8 +20,8 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set "raider" = IS_MODE_COMPILED("heist"), // 11 "diona" = 1, // 12 "loyalist" = IS_MODE_COMPILED("revolution"), // 13 - "vampire" = IS_MODE_COMPILED("vampire"), // 14 - "pAI candidate" = 1, // -- TLE // 15 + "personal AI" = 1, // -- TLE // 14 + "vampire" = IS_MODE_COMPILED("vampire"), // 15 ) //used for alternate_option diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 1209d81cae8..23de05af75e 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -70,6 +70,7 @@ var/translator_on = 0 // keeps track of the translator module + var/greeted = 0 var/current_pda_messaging = null /mob/living/silicon/pai/New(var/obj/item/device/paicard/newlocation) @@ -109,9 +110,18 @@ ..() /mob/living/silicon/pai/Login() + greet() ..() +/mob/living/silicon/pai/proc/greet() + + if (!greeted) + // Basic intro text. + src << "You are a Personal AI!" + src << "You are a small artificial intelligence contained inside a portable tablet, and you are bound to a master. Your primary directive is to serve them and follow their instructions, follow this prime directive above all others. Check your Software interface to spend ram on programs that can help, and unfold your chassis to take a holographic form and move around the world." + greeted = 1 + // this function shows the information about being silenced as a pAI in the Status panel /mob/living/silicon/pai/proc/show_silenced() if(src.silence_time) diff --git a/code/modules/mob/living/silicon/pai/personality.dm b/code/modules/mob/living/silicon/pai/personality.dm index c4928878ce9..e3b439afcde 100644 --- a/code/modules/mob/living/silicon/pai/personality.dm +++ b/code/modules/mob/living/silicon/pai/personality.dm @@ -27,7 +27,7 @@ return 1 // loads the savefile corresponding to the mob's ckey -// if silent=true, report incompatible savefiles +// if silent=false, report incompatible savefiles // returns 1 if loaded (or file was incompatible) // returns 0 if savefile did not exist diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm index 91a10bf3e50..291a47a1f91 100644 --- a/code/modules/mob/living/silicon/pai/recruit.dm +++ b/code/modules/mob/living/silicon/pai/recruit.dm @@ -29,6 +29,9 @@ var/datum/paiController/paiController // Global handler for pAI candidates if(href_list["download"]) var/datum/paiCandidate/candidate = locate(href_list["candidate"]) var/obj/item/device/paicard/card = locate(href_list["device"]) + if (!candidate in pai_candidates) + return + if(card.pai) return if(istype(card,/obj/item/device/paicard) && istype(candidate,/datum/paiCandidate)) @@ -107,6 +110,7 @@ var/datum/paiController/paiController // Global handler for pAI candidates candidate.key = M.key pai_candidates.Add(candidate) + candidate.savefile_load(M)//Load the pAI config before displaying the window var/dat = "" dat += {"