414 lines
14 KiB
Plaintext
414 lines
14 KiB
Plaintext
/obj/item/clothing/glasses
|
|
name = "glasses"
|
|
materials = list(MAT_GLASS = 250)
|
|
var/glass_colour_type = null //colors your vision when worn
|
|
|
|
/obj/item/clothing/glasses/visor_toggling()
|
|
..()
|
|
if(visor_vars_to_toggle & VISOR_VISIONFLAGS)
|
|
vision_flags ^= initial(vision_flags)
|
|
if(visor_vars_to_toggle & VISOR_DARKNESSVIEW)
|
|
darkness_view ^= initial(darkness_view)
|
|
if(visor_vars_to_toggle & VISOR_INVISVIEW)
|
|
invis_view ^= initial(invis_view)
|
|
|
|
/obj/item/clothing/glasses/weldingvisortoggle(mob/user)
|
|
. = ..()
|
|
if(. && user)
|
|
user.update_sight()
|
|
|
|
//called when thermal glasses are emped.
|
|
/obj/item/clothing/glasses/proc/thermal_overload()
|
|
if(ishuman(src.loc))
|
|
var/mob/living/carbon/human/H = src.loc
|
|
if(!(H.disabilities & BLIND))
|
|
if(H.glasses == src)
|
|
to_chat(H, "<span class='danger'>The [src] overloads and blinds you!</span>")
|
|
H.flash_act(visual = 1)
|
|
H.blind_eyes(3)
|
|
H.blur_eyes(5)
|
|
H.adjust_eye_damage(5)
|
|
|
|
/obj/item/clothing/glasses/meson
|
|
name = "Optical Meson Scanner"
|
|
desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting conditions."
|
|
icon_state = "meson"
|
|
item_state = "meson"
|
|
origin_tech = "magnets=1;engineering=2"
|
|
darkness_view = 2
|
|
vision_flags = SEE_TURFS
|
|
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
|
|
glass_colour_type = /datum/client_colour/glass_colour/lightgreen
|
|
var/static/list/meson_mining_failure_excuses = list("badly understood science", "damaged meson generators", "electromagnetic storms", "bluespace disruption", "ancient structures", \
|
|
"ambient radiation", "seismic activity", "extreme weather", "strange signals", "excessive lava", "giant monsters", "a loose wire", "lens warping", "radiant heat", "volcanic ash", \
|
|
"budget cuts","alien life","dense rock", "gravity", "dust")
|
|
var/picked_excuse
|
|
var/mesons_on = TRUE
|
|
|
|
/obj/item/clothing/glasses/meson/Initialize()
|
|
. = ..()
|
|
picked_excuse = pick(meson_mining_failure_excuses)
|
|
START_PROCESSING(SSobj, src)
|
|
|
|
/obj/item/clothing/glasses/meson/Destroy()
|
|
STOP_PROCESSING(SSobj, src)
|
|
return ..()
|
|
|
|
/obj/item/clothing/glasses/meson/examine(mob/user)
|
|
..()
|
|
var/turf/T = get_turf(src)
|
|
if(T && T.z == ZLEVEL_MINING && !mesons_on && picked_excuse)
|
|
to_chat(user, "<span class='warning'>Due to [picked_excuse], these Meson Scanners will not be able to display terrain layouts in this area.</span>")
|
|
|
|
/obj/item/clothing/glasses/meson/proc/toggle_mode(mob/user)
|
|
vision_flags ^= SEE_TURFS
|
|
mesons_on = (vision_flags & SEE_TURFS)? TRUE : FALSE
|
|
|
|
if(iscarbon(user)) //only carbons can wear glasses
|
|
var/mob/living/carbon/C = user
|
|
if(mesons_on)
|
|
to_chat(C, "<span class='notice'>Your Meson Scanners have reactivated.</span>")
|
|
else if(picked_excuse)
|
|
to_chat(C, "<span class='warning'>Due to [picked_excuse], your Meson Scanners will not be able to display terrain layouts in this area.</span>")
|
|
if(C.glasses == src)
|
|
C.update_sight()
|
|
|
|
/obj/item/clothing/glasses/meson/process()
|
|
var/turf/T = get_turf(src)
|
|
if(T && T.z == ZLEVEL_MINING)
|
|
if(mesons_on) //if we're on mining, turn mesons OFF
|
|
toggle_mode(loc)
|
|
else if(!mesons_on) //otherwise, if we're not on mining, turn mesons back ON
|
|
toggle_mode(loc)
|
|
|
|
/obj/item/clothing/glasses/meson/night
|
|
name = "Night Vision Optical Meson Scanner"
|
|
desc = "An Optical Meson Scanner fitted with an amplified visible light spectrum overlay, providing greater visual clarity in darkness."
|
|
icon_state = "nvgmeson"
|
|
item_state = "nvgmeson"
|
|
origin_tech = "magnets=4;engineering=5;plasmatech=4"
|
|
darkness_view = 8
|
|
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
|
glass_colour_type = /datum/client_colour/glass_colour/green
|
|
|
|
/obj/item/clothing/glasses/meson/gar
|
|
name = "gar mesons"
|
|
icon_state = "garm"
|
|
item_state = "garm"
|
|
desc = "Do the impossible, see the invisible!"
|
|
force = 10
|
|
throwforce = 10
|
|
throw_speed = 4
|
|
attack_verb = list("sliced")
|
|
hitsound = 'sound/weapons/bladeslice.ogg'
|
|
sharpness = IS_SHARP
|
|
|
|
/obj/item/clothing/glasses/science
|
|
name = "science goggles"
|
|
desc = "A pair of snazzy goggles used to protect against chemical spills. Fitted with an analyzer for scanning items and reagents."
|
|
icon_state = "purple"
|
|
item_state = "glasses"
|
|
origin_tech = "magnets=2;engineering=1"
|
|
scan_reagents = 1 //You can see reagents while wearing science goggles
|
|
actions_types = list(/datum/action/item_action/toggle_research_scanner)
|
|
glass_colour_type = /datum/client_colour/glass_colour/purple
|
|
resistance_flags = ACID_PROOF
|
|
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 100)
|
|
|
|
/obj/item/clothing/glasses/science/item_action_slot_check(slot)
|
|
if(slot == slot_glasses)
|
|
return 1
|
|
|
|
/obj/item/clothing/glasses/night
|
|
name = "Night Vision Goggles"
|
|
desc = "You can totally see in the dark now!"
|
|
icon_state = "night"
|
|
item_state = "glasses"
|
|
origin_tech = "materials=4;magnets=4;plasmatech=4;engineering=4"
|
|
darkness_view = 8
|
|
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
|
glass_colour_type = /datum/client_colour/glass_colour/green
|
|
|
|
/obj/item/clothing/glasses/eyepatch
|
|
name = "eyepatch"
|
|
desc = "Yarr."
|
|
icon_state = "eyepatch"
|
|
item_state = "eyepatch"
|
|
|
|
/obj/item/clothing/glasses/monocle
|
|
name = "monocle"
|
|
desc = "Such a dapper eyepiece!"
|
|
icon_state = "monocle"
|
|
item_state = "headset" // lol
|
|
|
|
/obj/item/clothing/glasses/material
|
|
name = "Optical Material Scanner"
|
|
desc = "Very confusing glasses."
|
|
icon_state = "material"
|
|
item_state = "glasses"
|
|
origin_tech = "magnets=3;engineering=3"
|
|
vision_flags = SEE_OBJS
|
|
glass_colour_type = /datum/client_colour/glass_colour/lightblue
|
|
|
|
/obj/item/clothing/glasses/material/mining
|
|
name = "Optical Material Scanner"
|
|
desc = "Used by miners to detect ores deep within the rock."
|
|
icon_state = "material"
|
|
item_state = "glasses"
|
|
origin_tech = "magnets=3;engineering=3"
|
|
darkness_view = 0
|
|
|
|
/obj/item/clothing/glasses/material/mining/gar
|
|
name = "gar material scanner"
|
|
icon_state = "garm"
|
|
item_state = "garm"
|
|
desc = "Do the impossible, see the invisible!"
|
|
force = 10
|
|
throwforce = 20
|
|
throw_speed = 4
|
|
attack_verb = list("sliced")
|
|
hitsound = 'sound/weapons/bladeslice.ogg'
|
|
sharpness = IS_SHARP
|
|
glass_colour_type = /datum/client_colour/glass_colour/lightgreen
|
|
|
|
/obj/item/clothing/glasses/regular
|
|
name = "Prescription Glasses"
|
|
desc = "Made by Nerd. Co."
|
|
icon_state = "glasses"
|
|
item_state = "glasses"
|
|
vision_correction = 1 //corrects nearsightedness
|
|
|
|
/obj/item/clothing/glasses/regular/jamjar
|
|
name = "Jamjar Glasses"
|
|
desc = "Also known as Virginity Protectors."
|
|
icon_state = "jamjar_glasses"
|
|
item_state = "jamjar_glasses"
|
|
|
|
/obj/item/clothing/glasses/regular/hipster
|
|
name = "Prescription Glasses"
|
|
desc = "Made by Uncool. Co."
|
|
icon_state = "hipster_glasses"
|
|
item_state = "hipster_glasses"
|
|
|
|
//Here lies green glasses, so ugly they died. RIP
|
|
|
|
/obj/item/clothing/glasses/sunglasses
|
|
desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes."
|
|
name = "sunglasses"
|
|
icon_state = "sun"
|
|
item_state = "sunglasses"
|
|
darkness_view = 1
|
|
flash_protect = 1
|
|
tint = 1
|
|
glass_colour_type = /datum/client_colour/glass_colour/gray
|
|
dog_fashion = /datum/dog_fashion/head
|
|
|
|
/obj/item/clothing/glasses/sunglasses/reagent
|
|
name = "beer goggles"
|
|
desc = "A pair of sunglasses outfitted with apparatus to scan reagents."
|
|
origin_tech = "magnets=2;engineering=2"
|
|
scan_reagents = 1
|
|
|
|
/obj/item/clothing/glasses/sunglasses/garb
|
|
desc = "Go beyond impossible and kick reason to the curb!"
|
|
name = "black gar glasses"
|
|
icon_state = "garb"
|
|
item_state = "garb"
|
|
force = 10
|
|
throwforce = 10
|
|
throw_speed = 4
|
|
attack_verb = list("sliced")
|
|
hitsound = 'sound/weapons/bladeslice.ogg'
|
|
sharpness = IS_SHARP
|
|
|
|
/obj/item/clothing/glasses/sunglasses/garb/supergarb
|
|
desc = "Believe in us humans."
|
|
name = "black giga gar glasses"
|
|
icon_state = "supergarb"
|
|
item_state = "garb"
|
|
force = 12
|
|
throwforce = 12
|
|
|
|
/obj/item/clothing/glasses/sunglasses/gar
|
|
desc = "Just who the hell do you think I am?!"
|
|
name = "gar glasses"
|
|
icon_state = "gar"
|
|
item_state = "gar"
|
|
force = 10
|
|
throwforce = 10
|
|
throw_speed = 4
|
|
attack_verb = list("sliced")
|
|
hitsound = 'sound/weapons/bladeslice.ogg'
|
|
sharpness = IS_SHARP
|
|
glass_colour_type = /datum/client_colour/glass_colour/orange
|
|
|
|
/obj/item/clothing/glasses/sunglasses/gar/supergar
|
|
desc = "We evolve past the person we were a minute before. Little by little we advance with each turn. That's how a drill works!"
|
|
name = "giga gar glasses"
|
|
icon_state = "supergar"
|
|
item_state = "gar"
|
|
force = 12
|
|
throwforce = 12
|
|
glass_colour_type = /datum/client_colour/glass_colour/red
|
|
|
|
/obj/item/clothing/glasses/welding
|
|
name = "welding goggles"
|
|
desc = "Protects the eyes from welders; approved by the mad scientist association."
|
|
icon_state = "welding-g"
|
|
item_state = "welding-g"
|
|
actions_types = list(/datum/action/item_action/toggle)
|
|
materials = list(MAT_METAL = 250)
|
|
flash_protect = 2
|
|
tint = 2
|
|
visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT
|
|
flags_cover = GLASSESCOVERSEYES
|
|
visor_flags_inv = HIDEEYES
|
|
glass_colour_type = /datum/client_colour/glass_colour/gray
|
|
|
|
/obj/item/clothing/glasses/welding/attack_self(mob/user)
|
|
weldingvisortoggle(user)
|
|
|
|
|
|
/obj/item/clothing/glasses/sunglasses/blindfold
|
|
name = "blindfold"
|
|
desc = "Covers the eyes, preventing sight."
|
|
icon_state = "blindfold"
|
|
item_state = "blindfold"
|
|
flash_protect = 2
|
|
tint = 3 // to make them blind
|
|
|
|
/obj/item/clothing/glasses/sunglasses/big
|
|
desc = "Strangely ancient technology used to help provide rudimentary eye cover. Larger than average enhanced shielding blocks many flashes."
|
|
icon_state = "bigsunglasses"
|
|
item_state = "bigsunglasses"
|
|
|
|
/obj/item/clothing/glasses/thermal
|
|
name = "Optical Thermal Scanner"
|
|
desc = "Thermals in the shape of glasses."
|
|
icon_state = "thermal"
|
|
item_state = "glasses"
|
|
origin_tech = "magnets=3"
|
|
vision_flags = SEE_MOBS
|
|
invis_view = 2
|
|
flash_protect = 0
|
|
glass_colour_type = /datum/client_colour/glass_colour/red
|
|
|
|
/obj/item/clothing/glasses/thermal/emp_act(severity)
|
|
thermal_overload()
|
|
..()
|
|
|
|
/obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete
|
|
name = "Chameleon Thermals"
|
|
desc = "A pair of thermal optic goggles with an onboard chameleon generator."
|
|
origin_tech = "magnets=3;syndicate=4"
|
|
flash_protect = -1
|
|
|
|
var/datum/action/item_action/chameleon/change/chameleon_action
|
|
|
|
/obj/item/clothing/glasses/thermal/syndi/New()
|
|
..()
|
|
chameleon_action = new(src)
|
|
chameleon_action.chameleon_type = /obj/item/clothing/glasses
|
|
chameleon_action.chameleon_name = "Glasses"
|
|
chameleon_action.chameleon_blacklist = typecacheof(/obj/item/clothing/glasses/changeling, only_root_path = TRUE)
|
|
chameleon_action.initialize_disguises()
|
|
|
|
/obj/item/clothing/glasses/thermal/syndi/emp_act(severity)
|
|
..()
|
|
chameleon_action.emp_randomise()
|
|
|
|
/obj/item/clothing/glasses/thermal/monocle
|
|
name = "Thermoncle"
|
|
desc = "A monocle thermal."
|
|
icon_state = "thermoncle"
|
|
flags = null //doesn't protect eyes because it's a monocle, duh
|
|
|
|
/obj/item/clothing/glasses/thermal/eyepatch
|
|
name = "Optical Thermal Eyepatch"
|
|
desc = "An eyepatch with built-in thermal optics."
|
|
icon_state = "eyepatch"
|
|
item_state = "eyepatch"
|
|
|
|
/obj/item/clothing/glasses/cold
|
|
name = "cold goggles"
|
|
desc = "A pair of goggles meant for low temperatures."
|
|
icon_state = "cold"
|
|
item_state = "cold"
|
|
|
|
/obj/item/clothing/glasses/heat
|
|
name = "heat goggles"
|
|
desc = "A pair of goggles meant for high temperatures."
|
|
icon_state = "heat"
|
|
item_state = "heat"
|
|
|
|
/obj/item/clothing/glasses/orange
|
|
name = "orange glasses"
|
|
desc = "A sweet pair of orange shades."
|
|
icon_state = "orangeglasses"
|
|
item_state = "orangeglasses"
|
|
glass_colour_type = /datum/client_colour/glass_colour/lightorange
|
|
|
|
/obj/item/clothing/glasses/red
|
|
name = "red glasses"
|
|
desc = "Hey, you're looking good, senpai!"
|
|
icon_state = "redglasses"
|
|
item_state = "redglasses"
|
|
glass_colour_type = /datum/client_colour/glass_colour/red
|
|
|
|
/obj/item/clothing/glasses/godeye
|
|
name = "eye of god"
|
|
desc = "A strange eye, said to have been torn from an omniscient creature that used to roam the wastes."
|
|
icon_state = "godeye"
|
|
item_state = "godeye"
|
|
vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS
|
|
darkness_view = 8
|
|
scan_reagents = 1
|
|
flags = NODROP
|
|
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
|
|
|
/obj/item/clothing/glasses/godeye/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
|
if(istype(W, src) && W != src && W.loc == user)
|
|
if(W.icon_state == "godeye")
|
|
W.icon_state = "doublegodeye"
|
|
W.item_state = "doublegodeye"
|
|
W.desc = "A pair of strange eyes, said to have been torn from an omniscient creature that used to roam the wastes. There's no real reason to have two, but that isn't stopping you."
|
|
if(iscarbon(user))
|
|
var/mob/living/carbon/C = user
|
|
C.update_inv_wear_mask()
|
|
else
|
|
to_chat(user, "<span class='notice'>The eye winks at you and vanishes into the abyss, you feel really unlucky.</span>")
|
|
qdel(src)
|
|
..()
|
|
|
|
/obj/item/clothing/glasses/AltClick(mob/user)
|
|
if(glass_colour_type && ishuman(user))
|
|
var/mob/living/carbon/human/H = user
|
|
if(H.client)
|
|
if(H.client.prefs)
|
|
if(src == H.glasses)
|
|
H.client.prefs.uses_glasses_colour = !H.client.prefs.uses_glasses_colour
|
|
if(H.client.prefs.uses_glasses_colour)
|
|
to_chat(H, "You will now see glasses colors.")
|
|
else
|
|
to_chat(H, "You will no longer see glasses colors.")
|
|
H.update_glasses_color(src, 1)
|
|
else
|
|
return ..()
|
|
|
|
/obj/item/clothing/glasses/proc/change_glass_color(mob/living/carbon/human/H, datum/client_colour/glass_colour/new_color_type)
|
|
var/old_colour_type = glass_colour_type
|
|
if(!new_color_type || ispath(new_color_type)) //the new glass colour type must be null or a path.
|
|
glass_colour_type = new_color_type
|
|
if(H && H.glasses == src)
|
|
if(old_colour_type)
|
|
H.remove_client_colour(old_colour_type)
|
|
if(glass_colour_type)
|
|
H.update_glasses_color(src, 1)
|
|
|
|
|
|
/mob/living/carbon/human/proc/update_glasses_color(obj/item/clothing/glasses/G, glasses_equipped)
|
|
if(client && client.prefs.uses_glasses_colour && glasses_equipped)
|
|
add_client_colour(G.glass_colour_type)
|
|
else
|
|
remove_client_colour(G.glass_colour_type)
|