diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm new file mode 100644 index 0000000000..bb37a380b6 --- /dev/null +++ b/code/modules/paperwork/paperplane.dm @@ -0,0 +1,102 @@ +// 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 + 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]. ") diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index 42fac1ec7a..b621d05474 100644 Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ diff --git a/polaris.dme b/polaris.dme index 5984d65873..72c09371d3 100644 --- a/polaris.dme +++ b/polaris.dme @@ -1923,6 +1923,7 @@ #include "code\modules\paperwork\paper.dm" #include "code\modules\paperwork\paper_bundle.dm" #include "code\modules\paperwork\paperbin.dm" +#include "code\modules\paperwork\paperplane.dm" #include "code\modules\paperwork\papershredder.dm" #include "code\modules\paperwork\pen.dm" #include "code\modules\paperwork\photocopier.dm"