diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index c1c54933183..23d7452f3d8 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -426,3 +426,8 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard)
/obj/random/paicard/item_to_spawn()
return pick(/obj/item/device/paicard ,/obj/item/device/paicard/typeb)
+
+/obj/item/device/paicard/digest_act(var/atom/movable/item_storage = null)
+ if(!pai.digestable)
+ return
+ . = ..()
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 144933a4d53..9c827839287 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -49,7 +49,8 @@
"Rat" = "rat",
"Panther" = "panther",
"Cyber Elf" = "cyberelf",
- "Teppi" = "teppi"
+ "Teppi" = "teppi",
+ "Catslug" = "catslug"
//VOREStation Addition End
)
@@ -258,10 +259,6 @@
return 0
else if(istype(card.loc,/mob))
var/mob/holder = card.loc
- var/datum/belly/inside_belly = check_belly(card) //VOREStation edit.
- if(inside_belly) //VOREStation edit.
- to_chat(src, "There is no room to unfold in here. You're good and stuck.") //VOREStation edit.
- return 0 //VOREStation edit.
if(ishuman(holder))
var/mob/living/carbon/human/H = holder
for(var/obj/item/organ/external/affecting in H.organs)
@@ -271,6 +268,9 @@
H.visible_message("\The [src] explodes out of \the [H]'s [affecting.name] in shower of gore!")
break
holder.drop_from_inventory(card)
+ else if(isbelly(card.loc)) //VOREStation edit.
+ to_chat(src, "There is no room to unfold in here. You're good and stuck.") //VOREStation edit.
+ return 0 //VOREStation edit.
else if(istype(card.loc,/obj/item/device/pda))
var/obj/item/device/pda/holder = card.loc
holder.pai = null
@@ -284,9 +284,8 @@
var/turf/T = get_turf(src)
if(istype(T)) T.visible_message("[src] folds outwards, expanding into a mobile form.")
- verbs += /mob/living/silicon/pai/proc/pai_nom //VOREStation edit
- verbs += /mob/living/proc/set_size //VOREStation edit
- verbs += /mob/living/proc/shred_limb //VORREStation edit
+ verbs |= /mob/living/silicon/pai/proc/pai_nom
+ verbs |= /mob/living/proc/vertical_nom
/mob/living/silicon/pai/verb/fold_up()
set category = "pAI Commands"
@@ -380,7 +379,7 @@
if(src.loc == card)
return
- release_vore_contents() //VOREStation Add
+ release_vore_contents(FALSE) //VOREStation Add
var/turf/T = get_turf(src)
if(istype(T)) T.visible_message("[src] neatly folds inwards, compacting down to a rectangular card.")
@@ -410,9 +409,10 @@
canmove = 1
resting = 0
icon_state = "[chassis]"
- verbs -= /mob/living/silicon/pai/proc/pai_nom //VOREStation edit. Let's remove their nom verb
if(isopenspace(card.loc))
fall()
+ verbs -= /mob/living/silicon/pai/proc/pai_nom
+ verbs -= /mob/living/proc/vertical_nom
// No binary for pAIs.
/mob/living/silicon/pai/binarycheck()
diff --git a/code/modules/mob/living/silicon/pai/pai_vr.dm b/code/modules/mob/living/silicon/pai/pai_vr.dm
index 5ead04e707b..f8eef7b8fea 100644
--- a/code/modules/mob/living/silicon/pai/pai_vr.dm
+++ b/code/modules/mob/living/silicon/pai/pai_vr.dm
@@ -37,14 +37,18 @@
"pai-bear",
"pai-fen",
"cyberelf",
- "teppi"
+ "teppi",
+ "catslug"
)
/mob/living/silicon/pai/Initialize()
. = ..()
verbs |= /mob/living/proc/hide
- verbs |= /mob/living/proc/vertical_nom
+ verbs |= /mob/proc/dominate_predator
+ verbs |= /mob/living/proc/dominate_prey
+ verbs |= /mob/living/proc/set_size
+ verbs |= /mob/living/proc/shred_limb
/mob/living/silicon/pai/proc/pai_nom(var/mob/living/T in oview(1))
set name = "pAI Nom"
@@ -117,6 +121,8 @@
choice = tgui_input_list(usr, "What would you like to use for your mobile chassis icon?", "Chassis Choice", possible_chassis)
if(!choice) return
+ var/oursize = size_multiplier
+ resize(1, FALSE, TRUE, TRUE, FALSE) //We resize ourselves to normal here for a moment to let the vis_height get reset
chassis = possible_chassis[choice]
if(chassis in wide_chassis)
icon = 'icons/mob/pai_vr64x64.dmi'
@@ -124,6 +130,7 @@
else
icon = 'icons/mob/pai_vr.dmi'
vis_height = 32
+ resize(oursize, FALSE, TRUE, TRUE, FALSE) //And then back again now that we're sure the vis_height is correct.
if(chassis in flying_chassis)
hovering = TRUE
@@ -155,9 +162,11 @@
else
to_chat(src, "Your selected chassis eye color can not be modified. The color you pick will only apply to supporting chassis and your card screen.")
- eye_color = input(src, "Choose your character's eye color:", "Eye Color") as color|null
- update_icon()
- card.setEmotion(card.current_emotion)
+ var/new_eye_color = input(src, "Choose your character's eye color:", "Eye Color") as color|null
+ if(new_eye_color)
+ eye_color = new_eye_color
+ update_icon()
+ card.setEmotion(card.current_emotion)
// Release belly contents before being gc'd!
/mob/living/silicon/pai/Destroy()
@@ -165,8 +174,8 @@
return ..()
/mob/living/silicon/pai/proc/add_eyes()
+ remove_eyes()
if(chassis in allows_eye_color)
- remove_eyes()
if(!eye_layer)
eye_layer = image(icon, "[icon_state]-eyes")
eye_layer.appearance_flags = appearance_flags
@@ -176,7 +185,32 @@
add_overlay(eye_layer)
/mob/living/silicon/pai/proc/remove_eyes()
- if(chassis in allows_eye_color)
- cut_overlay(eye_layer)
- qdel(eye_layer)
- eye_layer = null
+ cut_overlay(eye_layer)
+ qdel(eye_layer)
+ eye_layer = null
+
+/mob/living/silicon/pai/UnarmedAttack(atom/A, proximity_flag)
+ . = ..()
+
+ if(!ismob(A) || A == src)
+ return
+
+ var/t_him = "them"
+ if(ishuman(A))
+ var/mob/living/carbon/human/T = A
+ if(!T.species.ambiguous_genders)
+ switch(T.identifying_gender)
+ if(MALE)
+ t_him = "him"
+ if(FEMALE)
+ t_him = "her"
+ else
+ t_him = "them"
+ else
+ switch(A.gender)
+ if(MALE)
+ t_him = "him"
+ if(FEMALE)
+ t_him = "her"
+ visible_message("\The [src] hugs [A] to make [t_him] feel better!", \
+ "You hug [A] to make [t_him] feel better!")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/dominated_brain.dm b/code/modules/mob/living/simple_mob/subtypes/vore/dominated_brain.dm
index 82375f0a153..e69e0fc54ad 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/dominated_brain.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/dominated_brain.dm
@@ -169,6 +169,10 @@
pred = loc.loc
else if(isliving(prey.loc))
pred = loc
+ else if(ispAI(src))
+ var/mob/living/silicon/pai/pocketpal = src
+ if(isbelly(pocketpal.card.loc))
+ pred = pocketpal.card.loc.loc
else
to_chat(prey, "You are not inside anyone.")
return
diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm
index 68070ad9262..ca2fcf3fa4c 100644
--- a/code/modules/vore/eating/living_vr.dm
+++ b/code/modules/vore/eating/living_vr.dm
@@ -680,6 +680,13 @@
to_chat(src, "You are not allowed to eat this.")
return
+ if(istype(I, /obj/item/device/paicard))
+ var/obj/item/device/paicard/palcard = I
+ var/mob/living/silicon/pai/pocketpal = palcard.pai
+ if(!pocketpal.devourable)
+ to_chat(src, "\The [pocketpal] doesn't allow you to eat it.")
+ return
+
if(is_type_in_list(I,edible_trash) | adminbus_trash)
if(I.hidden_uplink)
to_chat(src, "You really should not be eating this.")
diff --git a/icons/mob/pai_vr.dmi b/icons/mob/pai_vr.dmi
index d54bc26fbe7..705369c7f30 100644
Binary files a/icons/mob/pai_vr.dmi and b/icons/mob/pai_vr.dmi differ
diff --git a/icons/mob/pai_vr64x64.dmi b/icons/mob/pai_vr64x64.dmi
index e2def869e16..d19f5137dfd 100644
Binary files a/icons/mob/pai_vr64x64.dmi and b/icons/mob/pai_vr64x64.dmi differ