Removes hacky see in darkness invisibility bullshit, uses planes. (#25931)

* Removes hacky see in darkness invisibility bullshit, uses planes.

Also removed the use of invisibility for ghosts of others, instead using override images.

Per client lighting visibility now has 4 levels, all on, all off, and two midways, this allows for things to be able to see in the dark while still being able to see what is dark and what has light, ghosts and aliens and other shit can cycle between all 4, other things were given one of the 3 values depending.

* Remove qdel global var search.

* Cleans up code, makes changing lighting/NV level easier.
This commit is contained in:
Kyle Spier-Swenson
2017-04-11 02:01:24 -07:00
committed by oranges
parent 240b6ab14c
commit 11d504e93a
35 changed files with 142 additions and 144 deletions

View File

@@ -67,3 +67,8 @@
#define LIGHT_COLOR_SLIME_LAMP "#AFC84B" //Weird color, between yellow and green, very slimy. rgb(175, 200, 75) #define LIGHT_COLOR_SLIME_LAMP "#AFC84B" //Weird color, between yellow and green, very slimy. rgb(175, 200, 75)
#define LIGHT_COLOR_TUNGSTEN "#FAE1AF" //Extremely diluted yellow, close to skin color (for some reason). rgb(250, 225, 175) #define LIGHT_COLOR_TUNGSTEN "#FAE1AF" //Extremely diluted yellow, close to skin color (for some reason). rgb(250, 225, 175)
#define LIGHT_COLOR_HALOGEN "#F0FAFA" //Barely visible cyan-ish hue, as the doctor prescribed. rgb(240, 250, 250) #define LIGHT_COLOR_HALOGEN "#F0FAFA" //Barely visible cyan-ish hue, as the doctor prescribed. rgb(240, 250, 250)
#define LIGHTING_PLANE_ALPHA_VISIBLE 255
#define LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE 192
#define LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE 128 //For lighting alpha, small amounts lead to big changes. even at 128 its hard to figure out what is dark and what is light, at 64 you almost can't even tell.
#define LIGHTING_PLANE_ALPHA_INVISIBLE 0

View File

@@ -1,8 +1,5 @@
#define SEE_INVISIBLE_MINIMUM 5 #define SEE_INVISIBLE_MINIMUM 5
#define SEE_INVISIBLE_NOLIGHTING 15 //to not see the lighting objects. Used for nightvision and observer with darkness toggled.
#define INVISIBILITY_LIGHTING 20 #define INVISIBILITY_LIGHTING 20
#define SEE_INVISIBLE_LIVING 25 #define SEE_INVISIBLE_LIVING 25

View File

@@ -132,6 +132,7 @@
/mob/proc/create_mob_hud() /mob/proc/create_mob_hud()
if(client && !hud_used) if(client && !hud_used)
hud_used = new /datum/hud(src) hud_used = new /datum/hud(src)
update_sight()
//Version denotes which style should be displayed. blank or 0 means "next version" //Version denotes which style should be displayed. blank or 0 means "next version"
/datum/hud/proc/show_hud(version = 0,mob/viewmob) /datum/hud/proc/show_hud(version = 0,mob/viewmob)

View File

@@ -5,10 +5,10 @@
blend_mode = BLEND_OVERLAY blend_mode = BLEND_OVERLAY
var/show_alpha = 255 var/show_alpha = 255
var/hide_alpha = 0 var/hide_alpha = 0
/obj/screen/plane_master/proc/Show(override) /obj/screen/plane_master/proc/Show(override)
alpha = override || show_alpha alpha = override || show_alpha
/obj/screen/plane_master/proc/Hide(override) /obj/screen/plane_master/proc/Hide(override)
alpha = override || hide_alpha alpha = override || hide_alpha
@@ -27,11 +27,6 @@
blend_mode = BLEND_MULTIPLY blend_mode = BLEND_MULTIPLY
mouse_opacity = 0 mouse_opacity = 0
/obj/screen/plane_master/lighting/proc/params2color(params)
color = params2list(params)
/obj/screen/plane_master/lighting/proc/basecolor()
color = LIGHTING_BASE_MATRIX
/obj/screen/plane_master/parallax /obj/screen/plane_master/parallax
name = "parallax plane master" name = "parallax plane master"
plane = PLANE_SPACE_PARALLAX plane = PLANE_SPACE_PARALLAX

View File

@@ -339,4 +339,5 @@ SUBSYSTEM_DEF(garbage)
#else #else
CHECK_TICK CHECK_TICK
#endif #endif
#endif #endif

View File

@@ -218,8 +218,8 @@
force_threshold = 10 force_threshold = 10
pressure_resistance = 50 pressure_resistance = 50
mob_size = MOB_SIZE_LARGE mob_size = MOB_SIZE_LARGE
see_invisible = SEE_INVISIBLE_MINIMUM
see_in_dark = 8 see_in_dark = 8
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
var/independent = FALSE var/independent = FALSE
/mob/living/simple_animal/hostile/blob/blobbernaut/Initialize() /mob/living/simple_animal/hostile/blob/blobbernaut/Initialize()

View File

@@ -7,13 +7,12 @@
mouse_opacity = 1 mouse_opacity = 1
move_on_shuttle = 1 move_on_shuttle = 1
see_in_dark = 8 see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM
invisibility = INVISIBILITY_OBSERVER invisibility = INVISIBILITY_OBSERVER
layer = FLY_LAYER layer = FLY_LAYER
pass_flags = PASSBLOB pass_flags = PASSBLOB
faction = list("blob") faction = list("blob")
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
var/obj/structure/blob/core/blob_core = null // The blob overmind's core var/obj/structure/blob/core/blob_core = null // The blob overmind's core
var/blob_points = 0 var/blob_points = 0
var/max_blob_points = 100 var/max_blob_points = 100
@@ -21,7 +20,6 @@
var/datum/reagent/blob/blob_reagent_datum = new/datum/reagent/blob() var/datum/reagent/blob/blob_reagent_datum = new/datum/reagent/blob()
var/list/blob_mobs = list() var/list/blob_mobs = list()
var/list/resource_blobs = list() var/list/resource_blobs = list()
var/ghostimage = null
var/free_chem_rerolls = 1 //one free chemical reroll var/free_chem_rerolls = 1 //one free chemical reroll
var/nodes_required = 1 //if the blob needs nodes to place resource and factory blobs var/nodes_required = 1 //if the blob needs nodes to place resource and factory blobs
var/placed = 0 var/placed = 0
@@ -52,9 +50,6 @@
if(blob_core) if(blob_core)
blob_core.update_icon() blob_core.update_icon()
ghostimage = image(src.icon,src,src.icon_state)
GLOB.ghost_darkness_images |= ghostimage //so ghosts can see the blob cursor when they disable darkness
updateallghostimages()
..() ..()
/mob/camera/blob/Life() /mob/camera/blob/Life()
@@ -82,11 +77,7 @@
BM.overmind = null BM.overmind = null
BM.update_icons() BM.update_icons()
GLOB.overminds -= src GLOB.overminds -= src
if(ghostimage)
GLOB.ghost_darkness_images -= ghostimage
qdel(ghostimage)
ghostimage = null
updateallghostimages()
return ..() return ..()
/mob/camera/blob/Login() /mob/camera/blob/Login()

View File

@@ -57,13 +57,13 @@
return TRUE return TRUE
/obj/item/clothing/glasses/wraith_spectacles/proc/set_vision_vars(update_vision) /obj/item/clothing/glasses/wraith_spectacles/proc/set_vision_vars(update_vision)
invis_view = SEE_INVISIBLE_LIVING lighting_alpha = null
tint = 0 tint = 0
vision_flags = NONE vision_flags = NONE
darkness_view = 2 darkness_view = 2
if(!up) if(!up)
if(is_servant_of_ratvar(loc)) if(is_servant_of_ratvar(loc))
invis_view = SEE_INVISIBLE_NOLIGHTING lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
vision_flags = SEE_MOBS | SEE_TURFS | SEE_OBJS vision_flags = SEE_MOBS | SEE_TURFS | SEE_OBJS
darkness_view = 3 darkness_view = 3
else else

View File

@@ -30,9 +30,9 @@
melee_damage_lower = 10 melee_damage_lower = 10
melee_damage_upper = 15 melee_damage_upper = 15
see_in_dark = 8 see_in_dark = 8
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
var/boost = 0 var/boost = 0
bloodcrawl = BLOODCRAWL_EAT bloodcrawl = BLOODCRAWL_EAT
see_invisible = SEE_INVISIBLE_MINIMUM
var/list/consumed_mobs = list() var/list/consumed_mobs = list()
var/playstyle_string = "<B><font size=3 color='red'>You are an imp,</font> a mischevious creature from hell. You are the lowest rank on the hellish totem pole \ var/playstyle_string = "<B><font size=3 color='red'>You are an imp,</font> a mischevious creature from hell. You are the lowest rank on the hellish totem pole \
Though you are not obligated to help, perhaps by aiding a higher ranking devil, you might just get a promotion. However, you are incapable \ Though you are not obligated to help, perhaps by aiding a higher ranking devil, you might just get a promotion. However, you are incapable \

View File

@@ -25,7 +25,7 @@
melee_damage_lower = 20 melee_damage_lower = 20
melee_damage_upper = 20 melee_damage_upper = 20
see_in_dark = 8 see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
idle_vision_range = 1 // Only attack when target is close idle_vision_range = 1 // Only attack when target is close
wander = 0 wander = 0
attacktext = "glomps" attacktext = "glomps"

View File

@@ -21,8 +21,9 @@
layer = GHOST_LAYER layer = GHOST_LAYER
healable = FALSE healable = FALSE
sight = SEE_SELF sight = SEE_SELF
see_invisible = SEE_INVISIBLE_NOLIGHTING
see_in_dark = 8 see_in_dark = 8
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
response_help = "passes through" response_help = "passes through"
response_disarm = "swings through" response_disarm = "swings through"
response_harm = "punches through" response_harm = "punches through"
@@ -57,16 +58,8 @@
var/draining = FALSE //If the revenant is draining someone. var/draining = FALSE //If the revenant is draining someone.
var/list/drained_mobs = list() //Cannot harvest the same mob twice var/list/drained_mobs = list() //Cannot harvest the same mob twice
var/perfectsouls = 0 //How many perfect, regen-cap increasing souls the revenant has. //TODO, add objective for getting a perfect soul(s?) var/perfectsouls = 0 //How many perfect, regen-cap increasing souls the revenant has. //TODO, add objective for getting a perfect soul(s?)
var/image/ghostimage = null //Visible to ghost with darkness off
var/generated_objectives_and_spells = FALSE var/generated_objectives_and_spells = FALSE
/mob/living/simple_animal/revenant/Initialize()
..()
ghostimage = image(src.icon,src,src.icon_state)
GLOB.ghost_darkness_images |= ghostimage
updateallghostimages()
/mob/living/simple_animal/revenant/Login() /mob/living/simple_animal/revenant/Login()
..() ..()
to_chat(src, "<span class='deadsay'><font size=3><b>You are a revenant.</b></font></span>") to_chat(src, "<span class='deadsay'><font size=3><b>You are a revenant.</b></font></span>")
@@ -210,8 +203,6 @@
if(!revealed || stat == DEAD) //Revenants cannot die if they aren't revealed //or are already dead if(!revealed || stat == DEAD) //Revenants cannot die if they aren't revealed //or are already dead
return 0 return 0
..(1) ..(1)
GLOB.ghost_darkness_images -= ghostimage
updateallghostimages()
to_chat(src, "<span class='revendanger'>NO! No... it's too late, you can feel your essence [pick("breaking apart", "drifting away")]...</span>") to_chat(src, "<span class='revendanger'>NO! No... it's too late, you can feel your essence [pick("breaking apart", "drifting away")]...</span>")
notransform = TRUE notransform = TRUE
revealed = TRUE revealed = TRUE
@@ -274,9 +265,6 @@
icon_state = icon_reveal icon_state = icon_reveal
else else
icon_state = icon_idle icon_state = icon_idle
if(ghostimage)
ghostimage.icon_state = src.icon_state
updateallghostimages()
/mob/living/simple_animal/revenant/proc/castcheck(essence_cost) /mob/living/simple_animal/revenant/proc/castcheck(essence_cost)
if(!src) if(!src)

View File

@@ -32,9 +32,9 @@
melee_damage_lower = 30 melee_damage_lower = 30
melee_damage_upper = 30 melee_damage_upper = 30
see_in_dark = 8 see_in_dark = 8
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
var/boost = 0 var/boost = 0
bloodcrawl = BLOODCRAWL_EAT bloodcrawl = BLOODCRAWL_EAT
see_invisible = SEE_INVISIBLE_MINIMUM
var/playstyle_string = "<B><font size=3 color='red'>You are a slaughter demon,</font> a terrible creature from another realm. You have a single desire: To kill. \ var/playstyle_string = "<B><font size=3 color='red'>You are a slaughter demon,</font> a terrible creature from another realm. You have a single desire: To kill. \
You may use the \"Blood Crawl\" ability near blood pools to travel through them, appearing and disappearing from the station at will. \ You may use the \"Blood Crawl\" ability near blood pools to travel through them, appearing and disappearing from the station at will. \
Pulling a dead or unconscious mob while you enter a pool will pull them in with you, allowing you to feast and regain your health. \ Pulling a dead or unconscious mob while you enter a pool will pull them in with you, allowing you to feast and regain your health. \

View File

@@ -298,7 +298,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS
prefs.save_preferences() prefs.save_preferences()
if(isobserver(mob)) if(isobserver(mob))
var/mob/dead/observer/O = mob var/mob/dead/observer/O = mob
O.updateghostsight() O.update_sight()
/client/verb/toggle_intent_style() /client/verb/toggle_intent_style()
set name = "Toggle Intent Selection Style" set name = "Toggle Intent Selection Style"

View File

@@ -148,7 +148,7 @@
if(pockets.priority) if(pockets.priority)
how_cool_are_your_threads += "Your [src]'s storage opens when clicked.\n" how_cool_are_your_threads += "Your [src]'s storage opens when clicked.\n"
else else
how_cool_are_your_threads += "Your [src]'s storage opens when dragged to yourself.\n" how_cool_are_your_threads += "Your [src]'s storage opens when dragged to yourself.\n"
how_cool_are_your_threads += "Your [src] can store [pockets.storage_slots] item[pockets.storage_slots > 1 ? "s" : ""].\n" how_cool_are_your_threads += "Your [src] can store [pockets.storage_slots] item[pockets.storage_slots > 1 ? "s" : ""].\n"
how_cool_are_your_threads += "Your [src] can store items that are [weightclass2text(pockets.max_w_class)] or smaller.\n" how_cool_are_your_threads += "Your [src] can store items that are [weightclass2text(pockets.max_w_class)] or smaller.\n"
if(pockets.quickdraw) if(pockets.quickdraw)
@@ -213,6 +213,7 @@
var/darkness_view = 2//Base human is 2 var/darkness_view = 2//Base human is 2
var/invis_view = SEE_INVISIBLE_LIVING var/invis_view = SEE_INVISIBLE_LIVING
var/invis_override = 0 //Override to allow glasses to set higher than normal see_invis var/invis_override = 0 //Override to allow glasses to set higher than normal see_invis
var/lighting_alpha
var/emagged = 0 var/emagged = 0
var/list/icon/current = list() //the current hud icons var/list/icon/current = list() //the current hud icons
var/vision_correction = 0 //does wearing these glasses correct some of our vision defects? var/vision_correction = 0 //does wearing these glasses correct some of our vision defects?

View File

@@ -24,7 +24,7 @@
STOP_PROCESSING(SSobj, src) STOP_PROCESSING(SSobj, src)
vision_flags = SEE_TURFS vision_flags = SEE_TURFS
darkness_view = 1 darkness_view = 1
invis_view = SEE_INVISIBLE_MINIMUM lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE
to_chat(loc, "<span class='notice'>You toggle the goggles' scanning mode to \[Meson].</span>") to_chat(loc, "<span class='notice'>You toggle the goggles' scanning mode to \[Meson].</span>")
invis_update() invis_update()

View File

@@ -37,7 +37,7 @@
origin_tech = "magnets=1;engineering=2" origin_tech = "magnets=1;engineering=2"
darkness_view = 2 darkness_view = 2
vision_flags = SEE_TURFS vision_flags = SEE_TURFS
invis_view = SEE_INVISIBLE_MINIMUM lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE
glass_colour_type = /datum/client_colour/glass_colour/lightgreen glass_colour_type = /datum/client_colour/glass_colour/lightgreen
/obj/item/clothing/glasses/meson/night /obj/item/clothing/glasses/meson/night
@@ -47,6 +47,7 @@
item_state = "nvgmeson" item_state = "nvgmeson"
origin_tech = "magnets=4;engineering=5;plasmatech=4" origin_tech = "magnets=4;engineering=5;plasmatech=4"
darkness_view = 8 darkness_view = 8
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
glass_colour_type = /datum/client_colour/glass_colour/green glass_colour_type = /datum/client_colour/glass_colour/green
/obj/item/clothing/glasses/meson/gar /obj/item/clothing/glasses/meson/gar
@@ -84,7 +85,7 @@
item_state = "glasses" item_state = "glasses"
origin_tech = "materials=4;magnets=4;plasmatech=4;engineering=4" origin_tech = "materials=4;magnets=4;plasmatech=4;engineering=4"
darkness_view = 8 darkness_view = 8
invis_view = SEE_INVISIBLE_MINIMUM lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
glass_colour_type = /datum/client_colour/glass_colour/green glass_colour_type = /datum/client_colour/glass_colour/green
/obj/item/clothing/glasses/eyepatch /obj/item/clothing/glasses/eyepatch
@@ -322,7 +323,7 @@
darkness_view = 8 darkness_view = 8
scan_reagents = 1 scan_reagents = 1
flags = NODROP flags = NODROP
invis_view = SEE_INVISIBLE_MINIMUM lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
/obj/item/clothing/glasses/godeye/attackby(obj/item/weapon/W as obj, mob/user as mob, params) /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(istype(W, src) && W != src && W.loc == user)

View File

@@ -43,7 +43,7 @@
item_state = "glasses" item_state = "glasses"
origin_tech = "magnets=4;biotech=4;plasmatech=4;engineering=5" origin_tech = "magnets=4;biotech=4;plasmatech=4;engineering=5"
darkness_view = 8 darkness_view = 8
invis_view = SEE_INVISIBLE_MINIMUM lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
glass_colour_type = /datum/client_colour/glass_colour/green glass_colour_type = /datum/client_colour/glass_colour/green
/obj/item/clothing/glasses/hud/health/sunglasses /obj/item/clothing/glasses/hud/health/sunglasses
@@ -71,7 +71,7 @@
item_state = "glasses" item_state = "glasses"
origin_tech = "magnets=4;powerstorage=4;plasmatech=4;engineering=5" origin_tech = "magnets=4;powerstorage=4;plasmatech=4;engineering=5"
darkness_view = 8 darkness_view = 8
invis_view = SEE_INVISIBLE_MINIMUM lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
glass_colour_type = /datum/client_colour/glass_colour/green glass_colour_type = /datum/client_colour/glass_colour/green
/obj/item/clothing/glasses/hud/security /obj/item/clothing/glasses/hud/security
@@ -125,7 +125,7 @@
icon_state = "securityhudnight" icon_state = "securityhudnight"
origin_tech = "magnets=4;combat=4;plasmatech=4;engineering=5" origin_tech = "magnets=4;combat=4;plasmatech=4;engineering=5"
darkness_view = 8 darkness_view = 8
invis_view = SEE_INVISIBLE_MINIMUM lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
glass_colour_type = /datum/client_colour/glass_colour/green glass_colour_type = /datum/client_colour/glass_colour/green
/obj/item/clothing/glasses/hud/security/sunglasses/gars /obj/item/clothing/glasses/hud/security/sunglasses/gars

View File

@@ -195,13 +195,14 @@
/datum/action/innate/minedrone/toggle_meson_vision/Activate() /datum/action/innate/minedrone/toggle_meson_vision/Activate()
var/mob/living/simple_animal/hostile/mining_drone/user = owner var/mob/living/simple_animal/hostile/mining_drone/user = owner
if(user.sight & SEE_TURFS) if(user.sight & SEE_TURFS)
user.sight &= ~SEE_TURFS user.sight &= ~SEE_TURFS
user.see_invisible = SEE_INVISIBLE_LIVING user.lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE
else else
user.sight |= SEE_TURFS user.sight |= SEE_TURFS
user.see_invisible = SEE_INVISIBLE_MINIMUM user.lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE
user.sync_lighting_plane_alpha()
to_chat(user, "<span class='notice'>You toggle your meson vision [(user.sight & SEE_TURFS) ? "on" : "off"].</span>") to_chat(user, "<span class='notice'>You toggle your meson vision [(user.sight & SEE_TURFS) ? "on" : "off"].</span>")

View File

@@ -1,6 +1,7 @@
/mob/dead/observer/Logout() /mob/dead/observer/Logout()
if (client) if (client)
client.images -= GLOB.ghost_darkness_images client.images -= (GLOB.ghost_images_default+GLOB.ghost_images_simple)
if(observetarget) if(observetarget)
if(ismob(observetarget)) if(ismob(observetarget))
var/mob/target = observetarget var/mob/target = observetarget

View File

@@ -1,5 +1,3 @@
GLOBAL_LIST_EMPTY(ghost_darkness_images) //this is a list of images for things ghosts should still be able to see when they toggle darkness, BUT NOT THE GHOSTS THEMSELVES!
GLOBAL_LIST_EMPTY(ghost_images_full) //this is a list of full images of the ghosts themselves
GLOBAL_LIST_EMPTY(ghost_images_default) //this is a list of the default (non-accessorized, non-dir) images of the ghosts themselves GLOBAL_LIST_EMPTY(ghost_images_default) //this is a list of the default (non-accessorized, non-dir) images of the ghosts themselves
GLOBAL_LIST_EMPTY(ghost_images_simple) //this is a list of all ghost images as the simple white ghost GLOBAL_LIST_EMPTY(ghost_images_simple) //this is a list of all ghost images as the simple white ghost
@@ -27,11 +25,9 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
//Note that this is not a reliable way to determine if admins started as observers, since they change mobs a lot. //Note that this is not a reliable way to determine if admins started as observers, since they change mobs a lot.
var/atom/movable/following = null var/atom/movable/following = null
var/fun_verbs = 0 var/fun_verbs = 0
var/image/ghostimage = null //this mobs ghost image, for deleting and stuff
var/image/ghostimage_default = null //this mobs ghost image without accessories and dirs var/image/ghostimage_default = null //this mobs ghost image without accessories and dirs
var/image/ghostimage_simple = null //this mob with the simple white ghost sprite var/image/ghostimage_simple = null //this mob with the simple white ghost sprite
var/ghostvision = 1 //is the ghost able to see things humans can't? var/ghostvision = 1 //is the ghost able to see things humans can't?
var/seedarkness = 1
var/mob/observetarget = null //The target mob that the ghost is observing. Used as a reference in logout() var/mob/observetarget = null //The target mob that the ghost is observing. Used as a reference in logout()
var/ghost_hud_enabled = 1 //did this ghost disable the on-screen HUD? var/ghost_hud_enabled = 1 //did this ghost disable the on-screen HUD?
var/data_huds_on = 0 //Are data HUDs currently enabled? var/data_huds_on = 0 //Are data HUDs currently enabled?
@@ -65,15 +61,17 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
if(config.cross_allowed) if(config.cross_allowed)
verbs += /mob/dead/observer/proc/server_hop verbs += /mob/dead/observer/proc/server_hop
ghostimage = image(src.icon,src,src.icon_state)
if(icon_state in GLOB.ghost_forms_with_directions_list) if(icon_state in GLOB.ghost_forms_with_directions_list)
ghostimage_default = image(src.icon,src,src.icon_state + "_nodir") ghostimage_default = image(src.icon,src,src.icon_state + "_nodir")
else else
ghostimage_default = image(src.icon,src,src.icon_state) ghostimage_default = image(src.icon,src,src.icon_state)
ghostimage_simple = image(src.icon,src,"ghost_nodir") ghostimage_default.override = TRUE
GLOB.ghost_images_full |= ghostimage
GLOB.ghost_images_default |= ghostimage_default GLOB.ghost_images_default |= ghostimage_default
ghostimage_simple = image(src.icon,src,"ghost_nodir")
ghostimage_simple.override = TRUE
GLOB.ghost_images_simple |= ghostimage_simple GLOB.ghost_images_simple |= ghostimage_simple
updateallghostimages() updateallghostimages()
var/turf/T var/turf/T
@@ -137,11 +135,6 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
animate(src, color = old_color, time = 10) animate(src, color = old_color, time = 10)
addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 10) addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 10)
/mob/dead/observer/Destroy()
GLOB.ghost_images_full -= ghostimage
qdel(ghostimage)
ghostimage = null
GLOB.ghost_images_default -= ghostimage_default GLOB.ghost_images_default -= ghostimage_default
qdel(ghostimage_default) qdel(ghostimage_default)
ghostimage_default = null ghostimage_default = null
@@ -170,18 +163,15 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
if(hair_image) if(hair_image)
cut_overlay(hair_image) cut_overlay(hair_image)
ghostimage.add_overlay(hair_image)
hair_image = null hair_image = null
if(facial_hair_image) if(facial_hair_image)
cut_overlay(facial_hair_image) cut_overlay(facial_hair_image)
ghostimage.add_overlay(facial_hair_image)
facial_hair_image = null facial_hair_image = null
if(new_form) if(new_form)
icon_state = new_form icon_state = new_form
ghostimage.icon_state = new_form
if(icon_state in GLOB.ghost_forms_with_directions_list) if(icon_state in GLOB.ghost_forms_with_directions_list)
ghostimage_default.icon_state = new_form + "_nodir" //if this icon has dirs, the default ghostimage must use its nodir version or clients with the preference set to default sprites only will see the dirs ghostimage_default.icon_state = new_form + "_nodir" //if this icon has dirs, the default ghostimage must use its nodir version or clients with the preference set to default sprites only will see the dirs
else else
@@ -203,7 +193,6 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
facial_hair_image.color = "#" + facial_hair_color facial_hair_image.color = "#" + facial_hair_color
facial_hair_image.alpha = 200 facial_hair_image.alpha = 200
add_overlay(facial_hair_image) add_overlay(facial_hair_image)
ghostimage.add_overlay(facial_hair_image)
if(hair_style) if(hair_style)
S = GLOB.hair_styles_list[hair_style] S = GLOB.hair_styles_list[hair_style]
if(S) if(S)
@@ -212,7 +201,6 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
hair_image.color = "#" + hair_color hair_image.color = "#" + hair_color
hair_image.alpha = 200 hair_image.alpha = 200
add_overlay(hair_image) add_overlay(hair_image)
ghostimage.add_overlay(hair_image)
/* /*
* Increase the brightness of a color by calculating the average distance between the R, G and B values, * Increase the brightness of a color by calculating the average distance between the R, G and B values,
@@ -510,33 +498,40 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
set desc = "Toggles your ability to see things only ghosts can see, like other ghosts" set desc = "Toggles your ability to see things only ghosts can see, like other ghosts"
set category = "Ghost" set category = "Ghost"
ghostvision = !(ghostvision) ghostvision = !(ghostvision)
updateghostsight() update_sight()
to_chat(usr, "You [(ghostvision?"now":"no longer")] have ghost vision.") to_chat(usr, "You [(ghostvision?"now":"no longer")] have ghost vision.")
/mob/dead/observer/verb/toggle_darkness() /mob/dead/observer/verb/toggle_darkness()
set name = "Toggle Darkness" set name = "Toggle Darkness"
set category = "Ghost" set category = "Ghost"
seedarkness = !(seedarkness) switch(lighting_alpha)
updateghostsight() if (LIGHTING_PLANE_ALPHA_VISIBLE)
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
if (LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE)
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
if (LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE)
lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE
else
lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE
/mob/dead/observer/proc/updateghostsight() update_sight()
/mob/dead/observer/update_sight()
if(client) if(client)
ghost_others = client.prefs.ghost_others //A quick update just in case this setting was changed right before calling the proc ghost_others = client.prefs.ghost_others //A quick update just in case this setting was changed right before calling the proc
if (seedarkness) if (!ghostvision)
see_invisible = SEE_INVISIBLE_OBSERVER see_invisible = SEE_INVISIBLE_LIVING
if (!ghostvision || ghost_others <= GHOST_OTHERS_DEFAULT_SPRITE)
see_invisible = SEE_INVISIBLE_LIVING
else else
see_invisible = SEE_INVISIBLE_NOLIGHTING see_invisible = SEE_INVISIBLE_OBSERVER
updateghostimages() updateghostimages()
..()
/proc/updateallghostimages() /proc/updateallghostimages()
listclearnulls(GLOB.ghost_images_full)
listclearnulls(GLOB.ghost_images_default) listclearnulls(GLOB.ghost_images_default)
listclearnulls(GLOB.ghost_images_simple) listclearnulls(GLOB.ghost_images_simple)
listclearnulls(GLOB.ghost_darkness_images)
for (var/mob/dead/observer/O in GLOB.player_list) for (var/mob/dead/observer/O in GLOB.player_list)
O.updateghostimages() O.updateghostimages()
@@ -547,34 +542,19 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(lastsetting) if(lastsetting)
switch(lastsetting) //checks the setting we last came from, for a little efficiency so we don't try to delete images from the client that it doesn't have anyway switch(lastsetting) //checks the setting we last came from, for a little efficiency so we don't try to delete images from the client that it doesn't have anyway
if(GHOST_OTHERS_THEIR_SETTING)
client.images -= GLOB.ghost_images_full
if(GHOST_OTHERS_DEFAULT_SPRITE) if(GHOST_OTHERS_DEFAULT_SPRITE)
client.images -= GLOB.ghost_images_default client.images -= GLOB.ghost_images_default
if(GHOST_OTHERS_SIMPLE) if(GHOST_OTHERS_SIMPLE)
client.images -= GLOB.ghost_images_simple client.images -= GLOB.ghost_images_simple
lastsetting = client.prefs.ghost_others
if ((seedarkness || !ghostvision) && client.prefs.ghost_others == GHOST_OTHERS_THEIR_SETTING) if(!ghostvision)
client.images -= GLOB.ghost_darkness_images return
lastsetting = null if(client.prefs.ghost_others != GHOST_OTHERS_THEIR_SETTING)
else if(ghostvision && (!seedarkness || client.prefs.ghost_others <= GHOST_OTHERS_DEFAULT_SPRITE))
//add images for the 60inv things ghosts can normally see when darkness is enabled so they can see them now
if(!lastsetting)
client.images |= GLOB.ghost_darkness_images
switch(client.prefs.ghost_others) switch(client.prefs.ghost_others)
if(GHOST_OTHERS_THEIR_SETTING)
client.images |= GLOB.ghost_images_full
if (ghostimage)
client.images -= ghostimage //remove ourself
if(GHOST_OTHERS_DEFAULT_SPRITE) if(GHOST_OTHERS_DEFAULT_SPRITE)
client.images |= GLOB.ghost_images_default client.images |= (GLOB.ghost_images_default-ghostimage_default)
if(ghostimage_default)
client.images -= ghostimage_default
if(GHOST_OTHERS_SIMPLE) if(GHOST_OTHERS_SIMPLE)
client.images |= GLOB.ghost_images_simple client.images |= (GLOB.ghost_images_simple-ghostimage_simple)
if(ghostimage_simple)
client.images -= ghostimage_simple
lastsetting = client.prefs.ghost_others
/mob/dead/observer/verb/possess() /mob/dead/observer/verb/possess()
set category = "Ghost" set category = "Ghost"
@@ -754,11 +734,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
. = ..() . = ..()
switch(var_name) switch(var_name)
if("icon") if("icon")
ghostimage.icon = icon
ghostimage_default.icon = icon ghostimage_default.icon = icon
ghostimage_simple.icon = icon ghostimage_simple.icon = icon
if("icon_state") if("icon_state")
ghostimage.icon_state = icon_state
ghostimage_default.icon_state = icon_state ghostimage_default.icon_state = icon_state
ghostimage_simple.icon_state = icon_state ghostimage_simple.icon_state = icon_state
if("fun_verbs") if("fun_verbs")

View File

@@ -522,6 +522,7 @@
return return
sight = initial(sight) sight = initial(sight)
lighting_alpha = initial(lighting_alpha)
var/obj/item/organ/eyes/E = getorganslot("eye_sight") var/obj/item/organ/eyes/E = getorganslot("eye_sight")
if(!E) if(!E)
update_tint() update_tint()
@@ -529,6 +530,8 @@
see_invisible = E.see_invisible see_invisible = E.see_invisible
see_in_dark = E.see_in_dark see_in_dark = E.see_in_dark
sight |= E.sight_flags sight |= E.sight_flags
if(!isnull(E.lighting_alpha))
lighting_alpha = E.lighting_alpha
if(client.eye != src) if(client.eye != src)
var/atom/A = client.eye var/atom/A = client.eye
@@ -543,6 +546,8 @@
see_invisible = G.invis_override see_invisible = G.invis_override
else else
see_invisible = min(G.invis_view, see_invisible) see_invisible = min(G.invis_view, see_invisible)
if(!isnull(G.lighting_alpha))
lighting_alpha = min(lighting_alpha, G.lighting_alpha)
if(dna) if(dna)
for(var/X in dna.mutations) for(var/X in dna.mutations)
var/datum/mutation/M = X var/datum/mutation/M = X
@@ -552,6 +557,7 @@
if(see_override) if(see_override)
see_invisible = see_override see_invisible = see_override
. = ..()
//to recalculate and update the mob's total tint from tinted equipment it's wearing. //to recalculate and update the mob's total tint from tinted equipment it's wearing.

View File

@@ -102,7 +102,7 @@
update_tint() update_tint()
if(G.vision_correction) if(G.vision_correction)
clear_fullscreen("nearsighted") clear_fullscreen("nearsighted")
if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view) if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha))
update_sight() update_sight()
update_inv_glasses() update_inv_glasses()
if(slot_gloves) if(slot_gloves)
@@ -181,7 +181,7 @@
if(G.vision_correction) if(G.vision_correction)
if(disabilities & NEARSIGHT) if(disabilities & NEARSIGHT)
overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1) overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1)
if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view) if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha))
update_sight() update_sight()
update_inv_glasses() update_inv_glasses()
else if(I == ears) else if(I == ears)

View File

@@ -804,9 +804,6 @@
setStaminaLoss(health - 2) setStaminaLoss(health - 2)
update_health_hud() update_health_hud()
/mob/proc/update_sight()
return
/mob/living/proc/owns_soul() /mob/living/proc/owns_soul()
if(mind) if(mind)
return mind.soulOwner == mind return mind.soulOwner == mind

View File

@@ -91,6 +91,7 @@
if(see_override) if(see_override)
see_invisible = see_override see_invisible = see_override
sync_lighting_plane_alpha()
/mob/living/silicon/ai/proc/start_RestorePowerRoutine() /mob/living/silicon/ai/proc/start_RestorePowerRoutine()

View File

@@ -881,12 +881,12 @@
if(sight_mode & BORGMESON) if(sight_mode & BORGMESON)
sight |= SEE_TURFS sight |= SEE_TURFS
see_invisible = min(see_invisible, SEE_INVISIBLE_MINIMUM) lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE
see_in_dark = 1 see_in_dark = 1
if(sight_mode & BORGMATERIAL) if(sight_mode & BORGMATERIAL)
sight |= SEE_OBJS sight |= SEE_OBJS
see_invisible = min(see_invisible, SEE_INVISIBLE_MINIMUM) lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
see_in_dark = 1 see_in_dark = 1
if(sight_mode & BORGXRAY) if(sight_mode & BORGXRAY)
@@ -901,6 +901,7 @@
if(see_override) if(see_override)
see_invisible = see_override see_invisible = see_override
sync_lighting_plane_alpha()
/mob/living/silicon/robot/update_stat() /mob/living/silicon/robot/update_stat()
if(status_flags & GODMODE) if(status_flags & GODMODE)

View File

@@ -62,12 +62,23 @@
P.color = namedatum.colour P.color = namedatum.colour
/mob/living/simple_animal/hostile/guardian/ranged/ToggleLight() /mob/living/simple_animal/hostile/guardian/ranged/ToggleLight()
if(see_invisible == SEE_INVISIBLE_MINIMUM) var/msg
to_chat(src, "<span class='notice'>You deactivate your night vision.</span>") switch(lighting_alpha)
see_invisible = SEE_INVISIBLE_LIVING if (LIGHTING_PLANE_ALPHA_VISIBLE)
else lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
to_chat(src, "<span class='notice'>You activate your night vision.</span>") msg = "You activate your night vision."
see_invisible = SEE_INVISIBLE_MINIMUM if (LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE)
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
msg = "You increase your night vision."
if (LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE)
lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE
msg = "You maximize your night vision."
else
lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE
msg = "You deactivate your night vision."
to_chat(src, "<span class='notice'>[msg]</span>")
/mob/living/simple_animal/hostile/guardian/ranged/verb/Snare() /mob/living/simple_animal/hostile/guardian/ranged/verb/Snare()
set name = "Set Surveillance Snare" set name = "Set Surveillance Snare"

View File

@@ -30,7 +30,7 @@
status_flags = CANPUSH status_flags = CANPUSH
minbodytemp = 0 minbodytemp = 0
see_in_dark = 8 see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
unique_name = 1 unique_name = 1
gold_core_spawnable = 0 gold_core_spawnable = 0
death_sound = 'sound/voice/hiss6.ogg' death_sound = 'sound/voice/hiss6.ogg'

View File

@@ -47,8 +47,8 @@
attack_sound = 'sound/weapons/bite.ogg' attack_sound = 'sound/weapons/bite.ogg'
unique_name = 1 unique_name = 1
gold_core_spawnable = 1 gold_core_spawnable = 1
see_invisible = SEE_INVISIBLE_MINIMUM
see_in_dark = 4 see_in_dark = 4
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
var/playable_spider = FALSE var/playable_spider = FALSE
/mob/living/simple_animal/hostile/poison/giant_spider/Topic(href, href_list) /mob/living/simple_animal/hostile/poison/giant_spider/Topic(href, href_list)

View File

@@ -15,7 +15,7 @@
var/throw_message = "bounces off of" var/throw_message = "bounces off of"
var/icon_aggro = null // for swapping to when we get aggressive var/icon_aggro = null // for swapping to when we get aggressive
see_in_dark = 8 see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
mob_size = MOB_SIZE_LARGE mob_size = MOB_SIZE_LARGE
/mob/living/simple_animal/hostile/asteroid/Aggro() /mob/living/simple_animal/hostile/asteroid/Aggro()

View File

@@ -27,8 +27,8 @@
stat_attack = 1 stat_attack = 1
gold_core_spawnable = 1 gold_core_spawnable = 1
faction = list("skeleton") faction = list("skeleton")
see_invisible = SEE_INVISIBLE_MINIMUM
see_in_dark = 8 see_in_dark = 8
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
deathmessage = "collapses into a pile of bones!" deathmessage = "collapses into a pile of bones!"
del_on_death = 1 del_on_death = 1
loot = list(/obj/effect/decal/remains/human) loot = list(/obj/effect/decal/remains/human)

View File

@@ -35,6 +35,7 @@
hud_possible = list(ANTAG_HUD) hud_possible = list(ANTAG_HUD)
see_in_dark = 13 see_in_dark = 13
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
vision_range = 12 vision_range = 12
aggro_vision_range = 12 aggro_vision_range = 12
idle_vision_range = 12 idle_vision_range = 12
@@ -44,9 +45,11 @@
sight = SEE_SELF|SEE_MOBS|SEE_OBJS|SEE_TURFS sight = SEE_SELF|SEE_MOBS|SEE_OBJS|SEE_TURFS
anchored = 1 anchored = 1
gold_core_spawnable = 1
var/cannot_be_seen = 1 var/cannot_be_seen = 1
var/mob/living/creator = null var/mob/living/creator = null
gold_core_spawnable = 1
// No movement while seen code. // No movement while seen code.
@@ -58,9 +61,6 @@
mob_spell_list += new /obj/effect/proc_holder/spell/aoe_turf/blindness(src) mob_spell_list += new /obj/effect/proc_holder/spell/aoe_turf/blindness(src)
mob_spell_list += new /obj/effect/proc_holder/spell/targeted/night_vision(src) mob_spell_list += new /obj/effect/proc_holder/spell/targeted/night_vision(src)
// Give nightvision
see_invisible = SEE_INVISIBLE_NOLIGHTING
// Set creator // Set creator
if(creator) if(creator)
src.creator = creator src.creator = creator
@@ -205,15 +205,22 @@
range = -1 range = -1
include_user = 1 include_user = 1
/obj/effect/proc_holder/spell/targeted/night_vision/cast(list/targets,mob/user = usr) /obj/effect/proc_holder/spell/targeted/night_vision/cast(list/targets, mob/user = usr)
for(var/mob/living/target in targets) for(var/mob/living/target in targets)
if(!iscarbon(target)) //Carbons should be toggling their vision via organ, this spell is used as a power for simple mobs switch(target.lighting_alpha)
if(target.see_invisible == SEE_INVISIBLE_LIVING) if (LIGHTING_PLANE_ALPHA_VISIBLE)
target.see_invisible = SEE_INVISIBLE_NOLIGHTING target.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
name = "Toggle Nightvision \[ON]" name = "Toggle Nightvision \[More]"
else if (LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE)
target.see_invisible = SEE_INVISIBLE_LIVING target.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
name = "Toggle Nightvision \[Full]"
if (LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE)
target.lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE
name = "Toggle Nightvision \[OFF]" name = "Toggle Nightvision \[OFF]"
else
target.lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE
name = "Toggle Nightvision \[ON]"
target.update_sight()
/mob/living/simple_animal/hostile/statue/sentience_act() /mob/living/simple_animal/hostile/statue/sentience_act()
faction -= "neutral" faction -= "neutral"

View File

@@ -449,6 +449,7 @@
var/atom/A = client.eye var/atom/A = client.eye
if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates. if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates.
return return
sync_lighting_plane_alpha()
/mob/living/simple_animal/get_idcard() /mob/living/simple_animal/get_idcard()
return access_card return access_card

View File

@@ -923,6 +923,15 @@
/mob/proc/update_health_hud() /mob/proc/update_health_hud()
return return
/mob/proc/update_sight()
sync_lighting_plane_alpha()
/mob/proc/sync_lighting_plane_alpha()
if(hud_used)
var/obj/screen/plane_master/lighting/L = hud_used.plane_masters["[LIGHTING_PLANE]"]
if (L)
L.alpha = lighting_alpha
/mob/living/vv_edit_var(var_name, var_value) /mob/living/vv_edit_var(var_name, var_value)
switch(var_name) switch(var_name)
if("stat") if("stat")
@@ -956,6 +965,8 @@
updatehealth() updatehealth()
if("resize") if("resize")
update_transform() update_transform()
if("lighting_alpha")
sync_lighting_plane_alpha()
/mob/proc/is_literate() /mob/proc/is_literate()

View File

@@ -5,6 +5,7 @@
flags = HEAR flags = HEAR
hud_possible = list(ANTAG_HUD) hud_possible = list(ANTAG_HUD)
pressure_resistance = 8 pressure_resistance = 8
var/lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE
var/datum/mind/mind var/datum/mind/mind
var/list/datum/action/actions = list() var/list/datum/action/actions = list()

View File

@@ -784,6 +784,7 @@
var/old_eye_color = "fff" var/old_eye_color = "fff"
var/flash_protect = 0 var/flash_protect = 0
var/see_invisible = SEE_INVISIBLE_LIVING var/see_invisible = SEE_INVISIBLE_LIVING
var/lighting_alpha
/obj/item/organ/eyes/Insert(mob/living/carbon/M, special = 0) /obj/item/organ/eyes/Insert(mob/living/carbon/M, special = 0)
..() ..()
@@ -811,26 +812,27 @@
name = "shadow eyes" name = "shadow eyes"
desc = "A spooky set of eyes that can see in the dark." desc = "A spooky set of eyes that can see in the dark."
see_in_dark = 8 see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
actions_types = list(/datum/action/item_action/organ_action/use) actions_types = list(/datum/action/item_action/organ_action/use)
var/night_vision = TRUE var/night_vision = TRUE
/obj/item/organ/eyes/night_vision/ui_action_click() /obj/item/organ/eyes/night_vision/ui_action_click()
if(night_vision) switch(lighting_alpha)
see_in_dark = 4 if (LIGHTING_PLANE_ALPHA_VISIBLE)
see_invisible = SEE_INVISIBLE_LIVING lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
night_vision = FALSE if (LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE)
else lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
see_in_dark = 8 if (LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE)
see_invisible = SEE_INVISIBLE_MINIMUM lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE
night_vision = TRUE else
lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE
owner.update_sight() owner.update_sight()
/obj/item/organ/eyes/night_vision/alien /obj/item/organ/eyes/night_vision/alien
name = "alien eyes" name = "alien eyes"
desc = "It turned out they had them after all!" desc = "It turned out they had them after all!"
see_in_dark = 8 see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
sight_flags = SEE_MOBS sight_flags = SEE_MOBS
@@ -864,7 +866,7 @@
eye_color = "FC0" eye_color = "FC0"
origin_tech = "materials=5;programming=4;biotech=4;magnets=4;syndicate=1" origin_tech = "materials=5;programming=4;biotech=4;magnets=4;syndicate=1"
sight_flags = SEE_MOBS sight_flags = SEE_MOBS
see_invisible = SEE_INVISIBLE_MINIMUM lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
flash_protect = -1 flash_protect = -1
see_in_dark = 8 see_in_dark = 8