mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-20 19:49:39 +01:00
## About The Pull Request 1. Burning paper (and similar) is now two way - rather than necessitating you touch the paper with the burning thing, you can now touch the burning thing with the paper 2. You can now light a cigarette on a lit candle 3. Candles no longer craft into flashlight eyes ## Why It's Good For The Game 1. Burning money with a cigarette larp 2. Cool Frenchman larp 3. ??? I noticed you can't light a candle with a candle because it tried to craft flashlight eyes. ## Changelog 🆑 Melbert qol: Burning paper (and similar) is now two way. Rather than needing to click on the paper with a burning item, you can now click on a burning item with the paper. This means you can burn paper on your lit cigarette like a badass. qol: You can now light cigarettes on candles. del: Flares and candles can no longer craft into flashlight eyes, I guess. /🆑
128 lines
4.7 KiB
Plaintext
128 lines
4.7 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"
|
|
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)
|
|
AddElement(/datum/element/burn_on_item_ignition)
|
|
|
|
/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/custom_fire_overlay()
|
|
if (!custom_fire_overlay)
|
|
custom_fire_overlay = mutable_appearance('icons/obj/service/bureaucracy.dmi', "paperplane_onfire", appearance_flags = RESET_COLOR|KEEP_APART)
|
|
return custom_fire_overlay
|
|
|
|
/obj/item/paperplane/suicide_act(mob/living/user)
|
|
var/obj/item/organ/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(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/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, throw_type_path = /datum/thrownthing)
|
|
return ..(target, range, speed, thrower, FALSE, diagonals_first, callback, quickstart = quickstart)
|