// Ported from TG. Known issue: Throw hit can possibly double-proc. Seems to be throw code. /obj/item/weapon/paperplane name = "paper plane" desc = "Paper folded into the shape of a plane." icon = 'icons/obj/bureaucracy.dmi' icon_state = "paperplane" throw_range = 7 throw_speed = 1 throwforce = 0 w_class = ITEMSIZE_TINY var/obj/item/weapon/paper/internalPaper /obj/item/weapon/paperplane/New(loc, obj/item/weapon/paper/newPaper) . = ..() pixel_y = rand(-8, 8) pixel_x = rand(-9, 9) if(newPaper) internalPaper = newPaper flags = newPaper.flags color = newPaper.color if(isstorage(newPaper.loc)) var/obj/item/weapon/storage/S = newPaper.loc S.remove_from_storage(newPaper, src) else newPaper.forceMove(src) else internalPaper = new /obj/item/weapon/paper(src) update_icon() /obj/item/weapon/paperplane/Destroy() if(internalPaper) qdel(internalPaper) internalPaper = null return ..() /obj/item/weapon/paperplane/update_icon() overlays.Cut() var/list/stamped = internalPaper.stamped if(!stamped) stamped = new else if(stamped) for(var/S in stamped) var/obj/item/weapon/stamp/ = S var/image/stampoverlay = image('icons/obj/bureaucracy.dmi', "paperplane_[initial(stamp.icon_state)]") overlays += stampoverlay /obj/item/weapon/paperplane/attack_self(mob/user) to_chat(user, "You unfold [src].") var/atom/movable/internal_paper_tmp = internalPaper internal_paper_tmp.forceMove(loc) internalPaper = null qdel(src) user.put_in_hands(internal_paper_tmp) /obj/item/weapon/paperplane/attackby(obj/item/P, mob/living/carbon/human/user, params) ..() if(istype(P, /obj/item/weapon/pen)) to_chat(user, "You should unfold [src] before changing it.") return else if(istype(P, /obj/item/weapon/stamp)) //we don't randomize stamps on a paperplane internalPaper.attackby(P, user) //spoofed attack to update internal paper. update_icon() else if(is_hot(P)) if(user.disabilities & CLUMSY && prob(10)) user.visible_message("[user] accidentally ignites themselves!", \ "You miss the [src] and accidentally light yourself on fire!") user.unEquip(P) user.adjust_fire_stacks(1) user.IgniteMob() return if(!(in_range(user, src))) //to prevent issues as a result of telepathically lighting a paper return user.unEquip(src) user.visible_message("[user] lights [src] ablaze with [P]!", "You light [src] on fire!") fire_act() add_fingerprint(user) /obj/item/weapon/paperplane/throw_impact(atom/hit_atom) if(..() || !ishuman(hit_atom))//if the plane is caught or it hits a nonhuman return var/mob/living/carbon/human/H = hit_atom if(prob(2)) if((H.head && H.head.body_parts_covered & EYES) || (H.wear_mask && H.wear_mask.body_parts_covered & EYES) || (H.glasses && H.glasses.body_parts_covered & EYES)) return visible_message("\The [src] hits [H] in the eye!") H.eye_blurry += 10 var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES] if(E) E.damage += 2.5 H.emote("scream") /obj/item/weapon/paper/AltClick(mob/living/carbon/user, obj/item/I) if ( istype(user) ) if( (!in_range(src, user)) || user.stat || user.restrained() ) return to_chat(user, "You fold [src] into the shape of a plane!") user.unEquip(src) I = new /obj/item/weapon/paperplane(user, src) user.put_in_hands(I) else to_chat(user, " You lack the dexterity to fold \the [src]. ")