// Ported from TG /obj/item/paperplane name = "paper plane" desc = "Paper, folded in the shape of a plane." icon = 'icons/obj/bureaucracy.dmi' icon_state = "paperplane" throw_speed = 1 w_class = WEIGHT_CLASS_TINY resistance_flags = FLAMMABLE max_integrity = 50 no_spin = TRUE var/obj/item/paper/internal_paper scatter_distance = 8 new_attack_chain = TRUE /obj/item/paperplane/Initialize(mapload, obj/item/paper/new_paper) . = ..() scatter_atom() if(new_paper) internal_paper = new_paper flags = new_paper.flags color = new_paper.color new_paper.forceMove(src) else internal_paper = new /obj/item/paper(src) update_icon() /obj/item/paperplane/Destroy() QDEL_NULL(internal_paper) return ..() /obj/item/paperplane/suicide_act(mob/living/user) user.Stun(20 SECONDS) user.visible_message(SPAN_SUICIDE("[user] jams [name] in [user.p_their()] nose. It looks like [user.p_theyre()] trying to commit suicide!")) user.EyeBlurry(12 SECONDS) var/obj/item/organ/internal/eyes/E = user.get_int_organ(/obj/item/organ/internal/eyes) if(E) E.take_damage(8, 1) sleep(10) return BRUTELOSS /obj/item/paperplane/update_overlays() . = ..() var/list/stamped = internal_paper.stamped if(!stamped) stamped = new else if(stamped) for(var/S in stamped) var/obj/item/stamp = S . += "paperplane_[initial(stamp.icon_state)]" /obj/item/paperplane/activate_self(mob/user) // Unfold the paper plane if(!user) return ..() to_chat(user, SPAN_NOTICE("You unfold [src].")) if(!internal_paper) return ITEM_INTERACT_COMPLETE internal_paper.forceMove(get_turf(src)) user.put_in_hands(internal_paper) internal_paper.add_fingerprint(user) internal_paper = null qdel(src) return ITEM_INTERACT_COMPLETE /obj/item/paperplane/item_interaction(mob/living/user, obj/item/used, list/modifiers) if(is_pen(used) || istype(used, /obj/item/toy/crayon)) to_chat(user, SPAN_NOTICE("You should unfold [src] before changing it.")) return ITEM_INTERACT_COMPLETE if(istype(used, /obj/item/stamp)) //we don't randomize stamps on a paperplane internal_paper.item_interaction(user, used) // spoofed attack to update internal paper. update_icon() add_fingerprint(user) return ITEM_INTERACT_COMPLETE if(used.get_heat()) if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(10)) user.visible_message(SPAN_WARNING("[user] accidentally ignites [user.p_themselves()]!"), \ SPAN_USERDANGER("You miss [src] and accidentally light yourself on fire!")) user.drop_item_to_ground(used) user.adjust_fire_stacks(1) user.IgniteMob() return ITEM_INTERACT_COMPLETE if(!in_range(user, src)) //to prevent issues as a result of telepathically lighting a paper return ITEM_INTERACT_COMPLETE user.drop_item_to_ground(src) user.visible_message(SPAN_DANGER("[user] lights [src] on fire with [used]!"), SPAN_DANGER("You lights [src] on fire!")) fire_act() return ITEM_INTERACT_COMPLETE add_fingerprint(user) return ..() /obj/item/paperplane/throw_impact(atom/hit_atom) if(..()) return if(!ishuman(hit_atom)) return var/mob/living/carbon/human/H = hit_atom if(prob(2)) if(H.head && H.head.flags_cover & HEADCOVERSEYES) return if(H.wear_mask && H.wear_mask.flags_cover & MASKCOVERSEYES) return if(H.glasses && H.glasses.flags_cover & GLASSESCOVERSEYES) return visible_message(SPAN_DANGER("[src] hits [H] in the eye!")) H.EyeBlurry(12 SECONDS) H.Weaken(4 SECONDS) var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes) if(E) E.take_damage(8, 1) H.emote("scream") /obj/item/paper/proc/ProcFoldPlane(mob/living/carbon/user, obj/item/I) if(istype(user)) if((!in_range(src, user)) || user.stat || user.restrained()) return to_chat(user, SPAN_NOTICE("You fold [src] into the shape of a plane!")) user.unequip(src) // forceMove happens in paperplane/Initialize I = new /obj/item/paperplane(user, src) user.put_in_hands(I) add_fingerprint(user) I.add_fingerprint(user) else to_chat(user, SPAN_NOTICE("You lack the dexterity to fold [src]."))