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