Files
Bubberstation/code/modules/paperwork/paperplane.dm
Waterpig bb70889f6e TG Upstream Part 1
3591 individual conflicts

Update build.js

Update install_node.sh

Update byond.js

oh my fucking god

hat

slow

huh

holy shit

we all fall down

2 more I missed

2900 individual conflicts

2700 Individual conflicts

replaces yarn file with tg version, bumping us down to 2200-ish

Down to 2000 individual conflicts

140 down

mmm

aaaaaaaaaaaaaaaaaaa

not yt

575

soon

900 individual conflicts

600 individual conflicts, 121 file conflicts

im not okay

160 across 19 files

29 in 4 files

0 conflicts, compiletime fix time

some minor incap stuff

missed ticks

weird dupe definition stuff

missed ticks 2

incap fixes

undefs and pie fix

Radio update and some extra minor stuff

returns a single override

no more dupe definitions, 175 compiletime errors

Unticked file fix

sound and emote stuff

honk and more radio stuff
2024-10-19 08:04:33 -07:00

125 lines
4.5 KiB
Plaintext

/obj/item/paperplane
name = "paper plane"
desc = "Paper, folded in the shape of a plane."
icon = 'icons/obj/service/bureaucracy.dmi'
icon_state = "paperplane"
base_icon_state = "paperplane"
custom_fire_overlay = "paperplane_onfire"
throw_range = 7
throw_speed = 1
throwforce = 0
w_class = WEIGHT_CLASS_TINY
resistance_flags = FLAMMABLE
max_integrity = 50
///The chance of hitting a mob in the eye when thrown, in percentage.
var/hit_probability = 2
///Reference to the paper that's folded up in this paperplane, which we return when unfolded.
var/obj/item/paper/internal_paper
// SKYRAT EDIT START - Better paper planes
/// How long does getting shot in the eyes knock you down for?
var/knockdown_duration = 4 SECONDS
/// How much eye damage does it deal at minimum on eye impact?
var/impact_eye_damage_lower = 6
/// How much eye damage does it deal at maximum on eye impact?
var/impact_eye_damage_higher = 8
/// Does it get deleted when hitting anything or landing?
var/delete_on_impact = FALSE
// SKYRAT EDIT END
/obj/item/paperplane/syndicate
desc = "Paper, masterfully folded in the shape of a plane."
throwforce = 20
hit_probability = 100
/obj/item/paperplane/Initialize(mapload, obj/item/paper/paper_made_of)
. = ..()
pixel_x = base_pixel_x + rand(-9, 9)
pixel_y = base_pixel_y + rand(-8, 8)
if(paper_made_of)
internal_paper = paper_made_of
flags_1 = paper_made_of.flags_1
color = paper_made_of.color
paper_made_of.forceMove(src)
else
internal_paper = new(src)
if(istype(internal_paper, /obj/item/paper/carbon_copy))
icon_state = "[base_icon_state]_carbon"
update_appearance(UPDATE_ICON)
/obj/item/paperplane/Exited(atom/movable/gone, direction)
. = ..()
if (internal_paper == gone)
internal_paper = null
if(!QDELETED(src))
qdel(src)
/obj/item/paperplane/Destroy()
internal_paper = null
return ..()
/obj/item/paperplane/suicide_act(mob/living/user)
var/obj/item/organ/internal/eyes/eyes = user.get_organ_slot(ORGAN_SLOT_EYES)
user.Stun(20 SECONDS)
user.visible_message(span_suicide("[user] jams [src] in [user.p_their()] nose. It looks like [user.p_theyre()] trying to commit suicide!"))
user.adjust_eye_blur(12 SECONDS)
if(eyes)
eyes.apply_organ_damage(rand(impact_eye_damage_lower, impact_eye_damage_higher)) // SKYRAT EDIT START - Better paper planes
sleep(1 SECONDS)
return BRUTELOSS
/obj/item/paperplane/update_overlays()
. = ..()
for(var/stamp in internal_paper.stamp_cache)
. += "[base_icon_state]_[stamp]"
/obj/item/paperplane/attack_self(mob/user)
balloon_alert(user, "unfolded")
var/atom/location = drop_location()
// Need to keep a reference to the internal paper
// when we move it out of the plane, our ref gets set to null
var/obj/item/paper/released_paper = internal_paper
released_paper.forceMove(location)
// This will as a side effect, qdel the paper plane, making the user's hands empty
user.put_in_hands(released_paper)
/obj/item/paperplane/attackby(obj/item/attacking_item, mob/user, params)
if(burn_paper_product_attackby_check(attacking_item, user))
return
if(IS_WRITING_UTENSIL(attacking_item))
to_chat(user, span_warning("You should unfold [src] before changing it!"))
return
else if(istype(attacking_item, /obj/item/stamp)) //we don't randomize stamps on a paperplane
internal_paper.attackby(attacking_item, user) //spoofed attack to update internal paper.
update_appearance()
add_fingerprint(user)
return
return ..()
/obj/item/paperplane/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
if(iscarbon(hit_atom) && HAS_TRAIT(hit_atom, TRAIT_PAPER_MASTER))
var/mob/living/carbon/hit_carbon = hit_atom
if(hit_carbon.can_catch_item(src, skip_throw_mode_check = TRUE))
hit_carbon.throw_mode_on(THROW_MODE_TOGGLE)
. = ..()
if(. || !ishuman(hit_atom)) //if the plane is caught or it hits a nonhuman
return
var/mob/living/carbon/human/hit_human = hit_atom
var/obj/item/organ/internal/eyes/eyes = hit_human.get_organ_slot(ORGAN_SLOT_EYES)
if(!prob(hit_probability))
return
if(hit_human.is_eyes_covered())
return
visible_message(span_danger("\The [src] hits [hit_human] in the eye[eyes ? "" : " socket"]!"))
hit_human.adjust_eye_blur(12 SECONDS)
eyes?.apply_organ_damage(rand(6, 8))
hit_human.Paralyze(4 SECONDS)
hit_human.emote("scream")
/obj/item/paperplane/throw_at(atom/target, range, speed, mob/thrower, spin=FALSE, diagonals_first = FALSE, datum/callback/callback, gentle, quickstart = TRUE)
return ..(target, range, speed, thrower, FALSE, diagonals_first, callback, quickstart = quickstart)