diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index fece7e13f8a..cb7dea3371d 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -225,9 +225,17 @@
/obj/item/device/paicard/Topic(href, href_list)
+ var/mob/U = usr
+
if(!usr || usr.stat)
return
+ if(pai)
+ if(!in_range(src, U) || pai.canmove || pai.resting)
+ U << browse(null, "window=paicard")
+ usr.unset_machine()
+ return
+
if(href_list["setdna"])
if(pai.master_dna)
return
@@ -250,6 +258,10 @@
M << "Byte by byte you lose your sense of self.
"
M << "Your mental faculties leave you.
"
M << "oblivion...
"
+ var/mob/living/silicon/pai/P = M
+ if(istype(P))
+ if(P.resting || P.canmove)
+ P.close_up()
M.death(0)
removePersonality()
if(href_list["wires"])
@@ -302,3 +314,8 @@
M.emp_act(severity)
..()
+/obj/item/device/paicard/ex_act(severity)
+ if(pai)
+ pai.ex_act(severity)
+ else
+ del(src)
diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm
index b4677fee1b6..6caaad370af 100644
--- a/code/game/verbs/suicide.dm
+++ b/code/game/verbs/suicide.dm
@@ -177,7 +177,7 @@
set name = "pAI Suicide"
var/answer = input("REALLY kill yourself? This action can't be undone.", "Suicide", "No") in list ("Yes", "No")
if(answer == "Yes")
- if(canmove && !resting)
+ if(canmove || resting)
close_up()
var/obj/item/device/paicard/card = loc
card.removePersonality()
diff --git a/code/modules/mob/living/silicon/pai/death.dm b/code/modules/mob/living/silicon/pai/death.dm
index b945315ac2b..fea081ddfff 100644
--- a/code/modules/mob/living/silicon/pai/death.dm
+++ b/code/modules/mob/living/silicon/pai/death.dm
@@ -1,13 +1,15 @@
/mob/living/silicon/pai/death(gibbed)
if(stat == DEAD) return
- var/turf/T = get_turf_or_move(loc)
- for (var/mob/M in viewers(T))
- M.show_message("\red A shower of sparks spray from [src]'s inner workings.", 3, "\red You hear and smell the ozone hiss of electrical sparks being expelled violently.", 2)
- var/obj/effect/decal/cleanable/deadpai = new /obj/effect/decal/cleanable/robot_debris(loc)
if(canmove || resting)
- deadpai.icon = 'icons/mob/pai.dmi'
- deadpai.icon_state = "[chassis]_dead"
- del(src)
+ var/turf/T = get_turf_or_move(loc)
+ for (var/mob/M in viewers(T))
+ M.show_message("\red [src] emits a dull beep before it loses power and collapses.", 3, "\red You hear a dull beep followed by the sound of glass crunching.", 2)
+ name = "pAI debris"
+ desc = "The unfortunate remains of some poor personal AI device."
+ icon_state = "[chassis]_dead"
+ else
+ card.overlays.Cut()
+ card.overlays += "pai-off"
stat = DEAD
canmove = 0
if(blind) blind.layer = 0
@@ -23,3 +25,5 @@
if(mind) del(mind)
living_mob_list -= src
ghostize()
+ if(icon_state != "[chassis]_dead")
+ del(src)
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index a91e48b0fdd..7ed993b4520 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -24,6 +24,7 @@
"Cat" = "cat",
"Mouse" = "mouse",
"Monkey" = "monkey",
+ "Corgi" = "corgi",
"Fox" = "fox"
)
@@ -80,7 +81,6 @@
if(!card.radio)
card.radio = new /obj/item/device/radio(src.card)
radio = card.radio
-
//Verbs for pAI mobile form, chassis and Say flavor text
verbs += /mob/living/silicon/pai/proc/choose_chassis
verbs += /mob/living/silicon/pai/proc/choose_verbs
@@ -174,16 +174,16 @@
switch(severity)
if(1.0)
- if (src.stat != 2)
- adjustBruteLoss(100)
- adjustFireLoss(100)
+ if (src.stat != 2) //Let's not have two of these instantly kill you.
+ adjustBruteLoss(45)
+ adjustFireLoss(45)
if(2.0)
if (src.stat != 2)
- adjustBruteLoss(60)
- adjustFireLoss(60)
+ adjustBruteLoss(30)
+ adjustFireLoss(30)
if(3.0)
if (src.stat != 2)
- adjustBruteLoss(30)
+ adjustBruteLoss(20)
src.updatehealth()
@@ -200,8 +200,6 @@
src.updatehealth()
return
-//mob/living/silicon/pai/bullet_act(var/obj/item/projectile/Proj)
-
/mob/living/silicon/pai/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
if (!ticker)
M << "You cannot attack people before the game has started."
@@ -236,8 +234,6 @@
O.show_message(text("\red [] took a swipe at []!", M, src), 1)
return
-///mob/living/silicon/pai/attack_hand(mob/living/carbon/M as mob)
-
/mob/living/silicon/pai/proc/switchCamera(var/obj/machinery/camera/C)
usr:cameraFollow = null
if (!C)
@@ -412,19 +408,22 @@
src.updatehealth()
else
visible_message("[user.name] bonks [src] harmlessly with [W].")
- if(stat != 2) close_up()
+ spawn(1)
+ if(stat != 2)
+ close_up()
return
/mob/living/silicon/pai/attack_hand(mob/user as mob)
if(stat == 2) return
visible_message("[user.name] boops [src] on the head.")
- close_up()
+ spawn(1)
+ close_up()
//I'm not sure how much of this is necessary, but I would rather avoid issues.
/mob/living/silicon/pai/proc/close_up()
last_special = world.time + 200
-
+ resting = 0
if(src.loc == card)
return
@@ -443,10 +442,18 @@
canmove = 0
icon_state = "[chassis]"
-/mob/living/silicon/pai/start_pulling(var/atom/movable/AM)
+/mob/living/silicon/pai/Bump(atom/movable/AM as mob|obj, yes)
+ return
+/mob/living/silicon/pai/Bumped(AM as mob|obj)
+ return
+
+/mob/living/silicon/pai/start_pulling(var/atom/movable/AM)
+ if(stat || sleeping || paralysis || weakened)
+ return
if(istype(AM,/obj/item))
src << "You are far too small to pull anything!"
+ return
/mob/living/silicon/pai/examine()
@@ -479,6 +486,7 @@
..(Proj)
updatehealth()
if (stat != 2)
- close_up()
+ spawn(1)
+ close_up()
return 2
diff --git a/icons/mob/pai.dmi b/icons/mob/pai.dmi
index 30c8d03cb39..954088bfa7a 100644
Binary files a/icons/mob/pai.dmi and b/icons/mob/pai.dmi differ