diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm new file mode 100644 index 00000000000..c51cd39e56e --- /dev/null +++ b/code/modules/paperwork/paperplane.dm @@ -0,0 +1,129 @@ +// Ported from TG +/obj/item/weapon/paperplane + name = "paper plane" + desc = "Paper, folded in the shape of a plane." + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "paperplane" + throw_range = 7 + throw_speed = 1 + throwforce = 0 + w_class = WEIGHT_CLASS_TINY + burn_state = FLAMMABLE + burntime = 5 + no_spin = TRUE + + var/obj/item/weapon/paper/internal_paper + +/obj/item/weapon/paperplane/New(loc, obj/item/weapon/paper/new_paper) + ..() + pixel_y = rand(-8, 8) + pixel_x = rand(-9, 9) + 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/weapon/paper(src) + update_icon() + +/obj/item/weapon/paperplane/Destroy() + QDEL_NULL(internal_paper) + return ..() + +/obj/item/weapon/paperplane/suicide_act(mob/living/user) + user.Stun(10) + user.visible_message("[user] jams [name] in \his nose. It looks like \he's trying to commit suicide!") + user.EyeBlurry(6) + 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/weapon/paperplane/update_icon() + overlays.Cut() + var/list/stamped = internal_paper.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) // Unfold the paper plane + to_chat(user, "You unfold [src].") + if(internal_paper) + internal_paper.forceMove(get_turf(src)) + user.put_in_hands(internal_paper) + internal_paper = null + qdel(src) + +/obj/item/weapon/paperplane/attackby(obj/item/P, mob/living/carbon/human/user, params) + ..() + + if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon)) + 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 + internal_paper.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 [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] on fire with [P]!", "You lights [src] on fire!") + fire_act() + + add_fingerprint(user) + +/obj/item/weapon/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("[src] hits [H] in the eye!") + H.EyeBlurry(6) + H.Weaken(2) + 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/weapon/paper/AltClick(mob/user, obj/item/I) + var/mob/living/carbon/human/H = user + I = H.is_in_hands(/obj/item/weapon/paper) + if(I) + ProcFoldPlane(H, I) + else + ..() + +/obj/item/weapon/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, "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 [src].") diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index 9e0eb73a992..720fafd8847 100644 Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ diff --git a/paradise.dme b/paradise.dme index 787f6e500b6..fe4daedb1ee 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1886,6 +1886,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\pen.dm" #include "code\modules\paperwork\photocopier.dm" #include "code\modules\paperwork\photography.dm"