diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 8aeac6e880e..6b9c1366ddf 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -349,6 +349,9 @@ Congratulations! You are now trained for xenobiology research!"} /obj/item/weapon/paper/abductor/update_icon() return +/obj/item/weapon/paper/abductor/AltClick() + return + #define BATON_STUN 0 #define BATON_SLEEP 1 #define BATON_CUFF 2 diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 4f172ff20b5..bef437af32a 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -40,6 +40,7 @@ /obj/item/weapon/paper/update_icon() + if(burn_state == ON_FIRE) icon_state = "paper_onfire" return @@ -303,11 +304,11 @@ return else if(istype(P, /obj/item/weapon/stamp)) - if(!in_range(src, usr) && loc != user && !istype(loc, /obj/item/weapon/clipboard) && loc.loc != user && user.get_active_hand() != P) + + if(!in_range(src, user)) return stamps += "" - var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') stampoverlay.pixel_x = rand(-2, 2) stampoverlay.pixel_y = rand(-3, 2) @@ -338,7 +339,6 @@ fire_act() - add_fingerprint(user) /obj/item/weapon/paper/fire_act() @@ -402,6 +402,5 @@ /obj/item/weapon/paper/crumpled/update_icon() return - /obj/item/weapon/paper/crumpled/bloody icon_state = "scrap_bloodied" diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm new file mode 100644 index 00000000000..bbde5e50c49 --- /dev/null +++ b/code/modules/paperwork/paperplane.dm @@ -0,0 +1,113 @@ +/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 = 1 + burn_state = FLAMMABLE + burntime = 4 + + var/obj/item/weapon/paper/internalPaper + var/list/stamped = list() + +/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 + src.flags = newPaper.flags + stamped = internalPaper.stamped + newPaper.forceMove(src) + else + internalPaper = new /obj/item/weapon/paper(src) + update_icon() + +/obj/item/weapon/paperplane/suicide_act(mob/user) + user.Stun(10) + user.visible_message("[user] jams the [src] in their brains. It looks like \he's trying to commit suicide.") + user.adjust_blurriness(6) + user.adjust_eye_damage(rand(6,8)) + sleep(10) + return (BRUTELOSS) + +/obj/item/weapon/paperplane/update_icon() + overlays.Cut() + if(!stamped) + stamped = new + else if(stamped) + for(var/S in stamped) + var/obj/item/weapon/stamp/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) + user << "You unfold [src]." + user.unEquip(src) + user.put_in_hands(internalPaper) + qdel(src) + +/obj/item/weapon/paperplane/attackby(obj/item/weapon/P, mob/living/carbon/human/user, params) + ..() + if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon)) + 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 + + if (!stamped) + stamped = new + + stamped += P.type + internalPaper.stamps += "" //stamps the paper inside! + internalPaper.stamped = stamped + internalPaper.attackby(P) //spoofed attack to update internal paper. + user << "You stamp [src] with your rubber stamp." + update_icon() + + else if(P.is_hot()) + 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 + internalPaper.burntime = 1 //its already pretty burnt out + 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_at(atom/target, range, speed, mob/thrower, spin=0) //prevent the paper plane from spinning + if(!..()) + return + +/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(15)) + if((H.head && H.head.flags_cover & HEADCOVERSEYES) || (H.wear_mask && H.wear_mask.flags_cover & MASKCOVERSEYES) || (H.glasses && H.glasses.flags_cover & GLASSESCOVERSEYES)) + return + visible_message("\The [src] hits [H] in the eye!") + H.adjust_blurriness(6) + H.adjust_eye_damage(rand(6,8)) + H.Weaken(2) + H.emote("scream") + +/obj/item/weapon/paper/AltClick(mob/living/carbon/user, obj/item/I,) + if((!in_range(src, user)) || usr.stat || usr.restrained()) + return + user << "You fold [src] into the shape of a plane!" + user.unEquip(src) + I = new /obj/item/weapon/paperplane(loc, src) + user.put_in_hands(I) diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index 29969886582..f2406325733 100644 Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 0b2e853d5e9..ea7a50fca10 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1464,6 +1464,7 @@ #include "code\modules\paperwork\paper.dm" #include "code\modules\paperwork\paper_cutter.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"