mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-28 02:52:01 +00:00
changes: Flashlights now default to LIGHT_WIDE directional lighting. Glowsticks, Lamps, Flares, and Slime Cores use LIGHT_OMNI. Maglights use LIGHT_NARROW. Heavy-duty flashlights use LIGHT_SEMI. EVA suits default to LIGHT_WIDE. Lanterns use LIGHT_OMNI, as well as now having a more appropriate light color. Floodlights use LIGHT_WIDE, as well as having a more appropriate light color. Synthetics default to LIGHT_WIDE. (including drones) Added some predefined light_wedge values to the lighting defines file. Fixed some bad angles that screwed up north/south lights in some cases.
332 lines
9.9 KiB
Plaintext
332 lines
9.9 KiB
Plaintext
/obj/item/device/flashlight
|
|
name = "flashlight"
|
|
desc = "A hand-held emergency light."
|
|
icon = 'icons/obj/lighting.dmi'
|
|
icon_state = "flashlight"
|
|
item_state = "flashlight"
|
|
w_class = 2
|
|
flags = CONDUCT
|
|
slot_flags = SLOT_BELT
|
|
light_color = LIGHT_COLOR_HALOGEN
|
|
uv_intensity = 50
|
|
light_wedge = LIGHT_WIDE
|
|
|
|
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20)
|
|
|
|
action_button_name = "Toggle Flashlight"
|
|
var/on = 0
|
|
var/brightness_on = 3 //luminosity when on
|
|
|
|
/obj/item/device/flashlight/initialize()
|
|
..()
|
|
update_icon()
|
|
|
|
/obj/item/device/flashlight/update_icon()
|
|
if(on)
|
|
icon_state = "[initial(icon_state)]-on"
|
|
set_light(brightness_on)
|
|
else
|
|
icon_state = "[initial(icon_state)]"
|
|
set_light(0)
|
|
|
|
/obj/item/device/flashlight/attack_self(mob/user)
|
|
if(!isturf(user.loc))
|
|
user << "You cannot turn the light on while in this [user.loc]." //To prevent some lighting anomalities.
|
|
return 0
|
|
on = !on
|
|
update_icon()
|
|
user.update_action_buttons()
|
|
return 1
|
|
|
|
|
|
/obj/item/device/flashlight/attack(mob/living/M as mob, mob/living/user as mob)
|
|
add_fingerprint(user)
|
|
if(on && user.zone_sel.selecting == "eyes")
|
|
|
|
if(((CLUMSY in user.mutations) || user.getBrainLoss() >= 60) && prob(50)) //too dumb to use flashlight properly
|
|
return ..() //just hit them in the head
|
|
|
|
var/mob/living/carbon/human/H = M //mob has protective eyewear
|
|
if(istype(H))
|
|
if(M:eyecheck())
|
|
user << span("warning", "You're going to need to remove \The [M]'s eye protection first.")
|
|
return
|
|
|
|
var/obj/item/organ/vision
|
|
if(H.species.vision_organ)
|
|
vision = H.internal_organs_by_name[H.species.vision_organ]
|
|
if(!vision)
|
|
user << span("warning", "You can't find any [H.species.vision_organ ? H.species.vision_organ : "eyes"] on [H]!")
|
|
|
|
user.visible_message(span("notice", "\The [user] directs [src] to [M]'s eyes."), span("notice", "You direct [src] to [M]'s eyes."))
|
|
|
|
if (H != user) //can't look into your own eyes buster
|
|
if(M.stat == DEAD || M.blinded) //mob is dead or fully blind
|
|
user << span("warning","\The [M]'s pupils do not react to the light!")
|
|
return
|
|
if(XRAY in M.mutations)
|
|
user << span("notice", "\The [M]'s pupils give an eerie glow!")
|
|
if(vision.damage)
|
|
user << span("warning", "There's visible damage to [M]'s [vision.name]!")
|
|
else if(M.eye_blurry)
|
|
user << span("notice", "\The [M]'s pupils react slower than normally.")
|
|
if(M.getBrainLoss() > 15)
|
|
user << span("notice", "There's visible lag between left and right pupils' reactions.")
|
|
|
|
var/list/pinpoint = list("oxycodone"=1,"tramadol"=5)
|
|
var/list/dilating = list("space_drugs"=5,"mindbreaker"=1)
|
|
if(M.reagents.has_any_reagent(pinpoint) || H.ingested.has_any_reagent(pinpoint))
|
|
user << span("notice", "\The [M]'s pupils are already pinpoint and cannot narrow any more.")
|
|
else if(M.reagents.has_any_reagent(dilating) || H.ingested.has_any_reagent(dilating))
|
|
user << span("notice", "\The [M]'s pupils narrow slightly, but are still very dilated.")
|
|
else
|
|
user << span("notice", "\The [M]'s pupils narrow.")
|
|
|
|
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) //can be used offensively
|
|
flick("flash", M.flash)
|
|
else
|
|
return ..()
|
|
|
|
/obj/item/device/flashlight/pen
|
|
name = "penlight"
|
|
desc = "A pen-sized light, used by medical staff."
|
|
icon_state = "penlight"
|
|
item_state = ""
|
|
flags = CONDUCT
|
|
slot_flags = SLOT_EARS
|
|
brightness_on = 2
|
|
w_class = 1
|
|
light_wedge = LIGHT_OMNI
|
|
|
|
/obj/item/device/flashlight/drone
|
|
name = "low-power flashlight"
|
|
desc = "A miniature lamp, that might be used by small robots."
|
|
icon_state = "penlight"
|
|
item_state = ""
|
|
flags = CONDUCT
|
|
brightness_on = 2
|
|
w_class = 1
|
|
|
|
/obj/item/device/flashlight/heavy
|
|
name = "heavy duty flashlight"
|
|
desc = "A high-luminosity flashlight for specialist duties."
|
|
icon_state = "heavyflashlight"
|
|
item_state = "heavyflashlight"
|
|
brightness_on = 4
|
|
w_class = 3
|
|
uv_intensity = 60
|
|
matter = list(DEFAULT_WALL_MATERIAL = 100,"glass" = 70)
|
|
contained_sprite = 1
|
|
light_wedge = LIGHT_SEMI
|
|
|
|
/obj/item/device/flashlight/maglight
|
|
name = "maglight"
|
|
desc = "A heavy flashlight designed for security personnel."
|
|
icon_state = "maglight"
|
|
item_state = "maglight"
|
|
force = 10
|
|
brightness_on = 5
|
|
w_class = 3
|
|
uv_intensity = 70
|
|
attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed")
|
|
matter = list(DEFAULT_WALL_MATERIAL = 200,"glass" = 100)
|
|
hitsound = 'sound/weapons/smash.ogg'
|
|
contained_sprite = 1
|
|
light_wedge = LIGHT_NARROW
|
|
|
|
|
|
// the desk lamps are a bit special
|
|
/obj/item/device/flashlight/lamp
|
|
name = "desk lamp"
|
|
desc = "A desk lamp with an adjustable mount."
|
|
icon_state = "lamp"
|
|
item_state = "lamp"
|
|
brightness_on = 5
|
|
w_class = 5
|
|
flags = CONDUCT
|
|
uv_intensity = 100
|
|
on = 1
|
|
slot_flags = 0 //No wearing desklamps
|
|
light_wedge = LIGHT_OMNI
|
|
|
|
|
|
// green-shaded desk lamp
|
|
/obj/item/device/flashlight/lamp/green
|
|
desc = "A classic green-shaded desk lamp."
|
|
icon_state = "lampgreen"
|
|
item_state = "lampgreen"
|
|
brightness_on = 5
|
|
light_color = "#FFC58F"
|
|
|
|
/obj/item/device/flashlight/lamp/verb/toggle_light()
|
|
set name = "Toggle light"
|
|
set category = "Object"
|
|
set src in oview(1)
|
|
|
|
if(!usr.stat)
|
|
attack_self(usr)
|
|
|
|
// FLARES
|
|
|
|
/obj/item/device/flashlight/flare
|
|
name = "flare"
|
|
desc = "A red standard-issue flare. There are instructions on the side reading 'pull cord, make light'."
|
|
w_class = 2.0
|
|
brightness_on = 4 // Pretty bright.
|
|
light_power = 4
|
|
light_color = LIGHT_COLOR_FLARE
|
|
icon_state = "flare"
|
|
item_state = "flare"
|
|
action_button_name = null //just pull it manually, neckbeard.
|
|
var/fuel = 0
|
|
uv_intensity = 100
|
|
var/on_damage = 7
|
|
var/produce_heat = 1500
|
|
light_wedge = LIGHT_OMNI
|
|
|
|
/obj/item/device/flashlight/flare/New()
|
|
fuel = rand(800, 1000) // Sorry for changing this so much but I keep under-estimating how long X number of ticks last in seconds.
|
|
..()
|
|
|
|
/obj/item/device/flashlight/flare/process()
|
|
var/turf/pos = get_turf(src)
|
|
if(pos)
|
|
pos.hotspot_expose(produce_heat, 5)
|
|
fuel = max(fuel - 1, 0)
|
|
if(!fuel || !on)
|
|
turn_off()
|
|
if(!fuel)
|
|
src.icon_state = "[initial(icon_state)]-empty"
|
|
processing_objects -= src
|
|
|
|
/obj/item/device/flashlight/flare/proc/turn_off()
|
|
on = 0
|
|
src.force = initial(src.force)
|
|
src.damtype = initial(src.damtype)
|
|
update_icon()
|
|
|
|
/obj/item/device/flashlight/flare/attack_self(mob/user)
|
|
|
|
// Usual checks
|
|
if(!fuel)
|
|
user << "<span class='notice'>It's out of fuel.</span>"
|
|
return
|
|
if(on)
|
|
return
|
|
|
|
. = ..()
|
|
// All good, turn it on.
|
|
if(.)
|
|
user.visible_message("<span class='notice'>[user] activates the flare.</span>", "<span class='notice'>You pull the cord on the flare, activating it!</span>")
|
|
src.force = on_damage
|
|
src.damtype = "fire"
|
|
processing_objects += src
|
|
|
|
/obj/item/device/flashlight/slime
|
|
gender = PLURAL
|
|
name = "glowing slime extract"
|
|
desc = "A glowing ball of what appears to be amber."
|
|
icon = 'icons/obj/lighting.dmi'
|
|
icon_state = "floor1" //not a slime extract sprite but... something close enough!
|
|
item_state = "slime"
|
|
w_class = 1
|
|
brightness_on = 6
|
|
uv_intensity = 200
|
|
on = 1 //Bio-luminesence has one setting, on.
|
|
light_color = LIGHT_COLOR_SLIME_LAMP
|
|
light_wedge = LIGHT_OMNI
|
|
|
|
/obj/item/device/flashlight/slime/New()
|
|
..()
|
|
set_light(brightness_on)
|
|
|
|
/obj/item/device/flashlight/slime/update_icon()
|
|
return
|
|
|
|
/obj/item/device/flashlight/slime/attack_self(mob/user)
|
|
return //Bio-luminescence does not toggle.
|
|
|
|
//Glowsticks
|
|
|
|
/obj/item/device/flashlight/glowstick
|
|
name = "green glowstick"
|
|
desc = "A green military-grade glowstick."
|
|
w_class = 2
|
|
brightness_on = 1.5
|
|
light_power = 1
|
|
light_color = "#49F37C"
|
|
icon = 'icons/obj/glowsticks.dmi'
|
|
icon_state = "glowstick"
|
|
item_state = "glowstick"
|
|
contained_sprite = 1
|
|
uv_intensity = 255
|
|
var/fuel = 0
|
|
light_wedge = LIGHT_OMNI
|
|
|
|
/obj/item/device/flashlight/glowstick/New()
|
|
fuel = rand(900, 1200)
|
|
..()
|
|
|
|
/obj/item/device/flashlight/glowstick/process()
|
|
fuel = max(fuel - 1, 0)
|
|
if(!fuel || !on)
|
|
turn_off()
|
|
if(!fuel)
|
|
src.icon_state = "[initial(icon_state)]-empty"
|
|
processing_objects -= src
|
|
|
|
/obj/item/device/flashlight/glowstick/proc/turn_off()
|
|
on = 0
|
|
update_icon()
|
|
|
|
/obj/item/device/flashlight/glowstick/attack_self(var/mob/living/user)
|
|
|
|
if(((CLUMSY in user.mutations)) && prob(50))
|
|
user << "<span class='notice'>You break \the [src] apart, spilling its contents everywhere!</span>"
|
|
fuel = 0
|
|
new /obj/effect/decal/cleanable/greenglow(get_turf(user))
|
|
user.apply_effect((rand(15,30)),IRRADIATE,blocked = user.getarmor(null, "rad"))
|
|
qdel(src)
|
|
return
|
|
|
|
if(!fuel)
|
|
user << "<span class='notice'>\The [src] has already been used.</span>"
|
|
return
|
|
if(on)
|
|
user << "<span class='notice'>\The [src] has already been turned on.</span>"
|
|
return
|
|
|
|
. = ..()
|
|
|
|
if(.)
|
|
user.visible_message("<span class='notice'>[user] cracks and shakes \the [src].</span>", "<span class='notice'>You crack and shake \the [src], turning it on!</span>")
|
|
processing_objects += src
|
|
|
|
/obj/item/device/flashlight/glowstick/red
|
|
name = "red glowstick"
|
|
desc = "A red military-grade glowstick."
|
|
light_color = LIGHT_COLOR_RED //"#FC0F29"
|
|
icon_state = "glowstick_red"
|
|
item_state = "glowstick_red"
|
|
|
|
/obj/item/device/flashlight/glowstick/blue
|
|
name = "blue glowstick"
|
|
desc = "A blue military-grade glowstick."
|
|
light_color = LIGHT_COLOR_BLUE //"#599DFF"
|
|
icon_state = "glowstick_blue"
|
|
item_state = "glowstick_blue"
|
|
|
|
/obj/item/device/flashlight/glowstick/orange
|
|
name = "orange glowstick"
|
|
desc = "A orange military-grade glowstick."
|
|
light_color = LIGHT_COLOR_ORANGE//"#FA7C0B"
|
|
icon_state = "glowstick_orange"
|
|
item_state = "glowstick_orange"
|
|
|
|
/obj/item/device/flashlight/glowstick/yellow
|
|
name = "yellow glowstick"
|
|
desc = "A yellow military-grade glowstick."
|
|
light_color = LIGHT_COLOR_YELLOW //"#FEF923"
|
|
icon_state = "glowstick_yellow"
|
|
item_state = "glowstick_yellow"
|