diff --git a/pai_shell.dm b/pai_shell.dm new file mode 100644 index 0000000000..164a3e7389 --- /dev/null +++ b/pai_shell.dm @@ -0,0 +1,124 @@ + +/mob/living/silicon/pai/proc/fold_out(force = FALSE) + if(emitterhealth < 0) + to_chat(src, "Your holochassis emitters are still too unstable! Please wait for automatic repair.") + return FALSE + + if(!canholo && !force) + to_chat(src, "Your master or another force has disabled your holochassis emitters!") + return FALSE + + if(holoform) + . = fold_in(force) + return + + if(emittersemicd) + to_chat(src, "Error: Holochassis emitters recycling. Please try again later.") + return FALSE + + emittersemicd = TRUE + addtimer(CALLBACK(src, .proc/emittercool), emittercd) + canmove = TRUE + density = TRUE + if(istype(card.loc, /obj/item/pda)) + var/obj/item/pda/P = card.loc + P.pai = null + P.visible_message("[src] ejects itself from [P]!") + if(isliving(card.loc)) + var/mob/living/L = card.loc + if(!L.temporarilyRemoveItemFromInventory(card)) + to_chat(src, "Error: Unable to expand to mobile form. Chassis is restrained by some device or person.") + return FALSE + if(istype(card.loc, /obj/item/integrated_circuit/input/pAI_connector)) + var/obj/item/integrated_circuit/input/pAI_connector/C = card.loc + C.RemovepAI() + C.visible_message("[src] ejects itself from [C]!") + playsound(src, 'sound/items/Crowbar.ogg', 50, 1) + C.installed_pai = null + C.push_data() + forceMove(get_turf(card)) + card.forceMove(src) + if(client) + client.perspective = EYE_PERSPECTIVE + client.eye = src + set_light(0) + icon_state = "[chassis]" + visible_message("[src] folds out its holochassis emitter and forms a holoshell around itself!") + holoform = TRUE + +/mob/living/silicon/pai/proc/emittercool() + emittersemicd = FALSE + +/mob/living/silicon/pai/proc/fold_in(force = FALSE) + emittersemicd = TRUE + if(!force) + addtimer(CALLBACK(src, .proc/emittercool), emittercd) + else + addtimer(CALLBACK(src, .proc/emittercool), emitteroverloadcd) + icon_state = "[chassis]" + if(!holoform) + . = fold_out(force) + return + visible_message("[src] deactivates its holochassis emitter and folds back into a compact card!") + stop_pulling() + if(client) + client.perspective = EYE_PERSPECTIVE + client.eye = card + var/turf/T = drop_location() + card.forceMove(T) + forceMove(card) + canmove = FALSE + density = FALSE + set_light(0) + holoform = FALSE + if(resting) + lay_down() + +/mob/living/silicon/pai/proc/choose_chassis() + if(!isturf(loc) && loc != card) + to_chat(src, "You can not change your holochassis composite while not on the ground or in your card!") + return FALSE + var/choice = input(src, "What would you like to use for your holochassis composite?") as null|anything in possible_chassis + if(!choice) + return FALSE + chassis = choice + icon_state = "[chassis]" + if(resting) + icon_state = "[chassis]_rest" + to_chat(src, "You switch your holochassis projection composite to [chassis]") + +/mob/living/silicon/pai/lay_down() + ..() + update_resting_icon(resting) + +/mob/living/silicon/pai/proc/update_resting_icon(rest) + if(rest) + icon_state = "[chassis]_rest" + else + icon_state = "[chassis]" + if(loc != card) + visible_message("[src] [rest? "lays down for a moment..." : "perks up from the ground"]") + +/mob/living/silicon/pai/start_pulling(atom/movable/AM) + return FALSE + +/mob/living/silicon/pai/proc/toggle_integrated_light() + if(!light_range) + set_light(brightness_power) + to_chat(src, "You enable your integrated light.") + else + set_light(0) + to_chat(src, "You disable your integrated light.") + +/mob/living/silicon/pai/mob_pickup(mob/living/L) + var/obj/item/clothing/head/mob_holder/holder = new(get_turf(src), src, chassis, item_head_icon, item_lh_icon, item_rh_icon) + if(!L.put_in_hands(holder)) + qdel(holder) + else + L.visible_message("[L] scoops up [src]!") + +/mob/living/silicon/pai/mob_try_pickup(mob/living/user) + if(!possible_chassis[chassis]) + to_chat(user, "[src]'s current form isn't able to be carried!") + return FALSE + return ..()