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