mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
Ninja-night vision now works.
A ninja now uses proper glasses instead of using its own hack. Fixed a bug that would override the old ninja-night vision unless one also wore additional glasses in the glasses-inventory slot. Adds overlays to thermals and mesons as well. Slightly reduces the intensity of the night vision overlay.
This commit is contained in:
@@ -15,6 +15,8 @@ var/datum/global_hud/global_hud = new()
|
|||||||
var/list/vimpaired
|
var/list/vimpaired
|
||||||
var/list/darkMask
|
var/list/darkMask
|
||||||
var/obj/screen/nvg
|
var/obj/screen/nvg
|
||||||
|
var/obj/screen/thermal
|
||||||
|
var/obj/screen/meson
|
||||||
|
|
||||||
/datum/global_hud/New()
|
/datum/global_hud/New()
|
||||||
//420erryday psychedellic colours screen overlay for when you are high
|
//420erryday psychedellic colours screen overlay for when you are high
|
||||||
@@ -33,11 +35,25 @@ var/datum/global_hud/global_hud = new()
|
|||||||
|
|
||||||
nvg = new /obj/screen()
|
nvg = new /obj/screen()
|
||||||
nvg.screen_loc = "1,1"
|
nvg.screen_loc = "1,1"
|
||||||
nvg.icon = 'icons/obj/nvg_hud_full.dmi'
|
nvg.icon = 'icons/obj/hud_full.dmi'
|
||||||
nvg.icon_state = "nvg_hud"
|
nvg.icon_state = "nvg_hud"
|
||||||
nvg.layer = 17
|
nvg.layer = 17
|
||||||
nvg.mouse_opacity = 0
|
nvg.mouse_opacity = 0
|
||||||
|
|
||||||
|
thermal = new /obj/screen()
|
||||||
|
thermal.screen_loc = "1,1"
|
||||||
|
thermal.icon = 'icons/obj/hud_full.dmi'
|
||||||
|
thermal.icon_state = "thermal_hud"
|
||||||
|
thermal.layer = 17
|
||||||
|
thermal.mouse_opacity = 0
|
||||||
|
|
||||||
|
meson = new /obj/screen()
|
||||||
|
meson.screen_loc = "1,1"
|
||||||
|
meson.icon = 'icons/obj/hud_full.dmi'
|
||||||
|
meson.icon_state = "meson_hud"
|
||||||
|
meson.layer = 17
|
||||||
|
meson.mouse_opacity = 0
|
||||||
|
|
||||||
var/obj/screen/O
|
var/obj/screen/O
|
||||||
var/i
|
var/i
|
||||||
//that nasty looking dither you get when you're short-sighted
|
//that nasty looking dither you get when you're short-sighted
|
||||||
|
|||||||
@@ -1173,16 +1173,25 @@ ________________________________________________________________________________
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
===================================================================================
|
===================================================================================
|
||||||
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<SPACE NINJA MASK>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<SPACE NINJA HUD>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||||
===================================================================================
|
===================================================================================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/obj/item/clothing/mask/gas/voice/space_ninja/New()
|
/obj/item/clothing/glasses/hud/ninja
|
||||||
verbs += /obj/item/clothing/mask/gas/voice/space_ninja/proc/togglev
|
name = "Ninja Scanner HUD"
|
||||||
verbs += /obj/item/clothing/mask/gas/voice/space_ninja/proc/switchm
|
desc = "Assesses targets"
|
||||||
|
body_parts_covered = 0
|
||||||
|
|
||||||
//This proc is linked to human life.dm. It determines what hud icons to display based on mind special role for most mobs.
|
/obj/item/clothing/glasses/hud/ninja/process_hud(var/mob/M)
|
||||||
/obj/item/clothing/mask/gas/voice/space_ninja/proc/assess_targets(list/target_list, mob/living/carbon/U)
|
var/target_list[] = list()
|
||||||
|
for(var/mob/living/target in oview(M))
|
||||||
|
if(target.mind && (target.mind.special_role || issilicon(target))) //They need to have a mind.
|
||||||
|
target_list += target
|
||||||
|
if(target_list.len)
|
||||||
|
assess_targets(target_list, M)
|
||||||
|
if(!M.druggy) M.see_invisible = SEE_INVISIBLE_LIVING
|
||||||
|
|
||||||
|
/obj/item/clothing/glasses/hud/ninja/proc/assess_targets(list/target_list, mob/living/carbon/U)
|
||||||
var/icon/tempHud = 'icons/mob/hud.dmi'
|
var/icon/tempHud = 'icons/mob/hud.dmi'
|
||||||
for(var/mob/living/target in target_list)
|
for(var/mob/living/target in target_list)
|
||||||
if(iscarbon(target))
|
if(iscarbon(target))
|
||||||
@@ -1216,6 +1225,42 @@ ________________________________________________________________________________
|
|||||||
U.client.images += image(tempHud,silicon_target,"hudmalai")
|
U.client.images += image(tempHud,silicon_target,"hudmalai")
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
===================================================================================
|
||||||
|
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<SPACE NINJA MASK>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||||
|
===================================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
/datum/ninja_vision
|
||||||
|
var/mode
|
||||||
|
var/obj/item/clothing/glasses/glasses
|
||||||
|
|
||||||
|
/datum/ninja_vision/scouter
|
||||||
|
mode = "Scouter"
|
||||||
|
glasses = new/obj/item/clothing/glasses/hud/ninja
|
||||||
|
|
||||||
|
/datum/ninja_vision/nvg
|
||||||
|
mode = "Night Vision"
|
||||||
|
glasses = new/obj/item/clothing/glasses/night
|
||||||
|
|
||||||
|
/datum/ninja_vision/thermal
|
||||||
|
mode = "Thermal Scanner"
|
||||||
|
glasses = new/obj/item/clothing/glasses/thermal
|
||||||
|
|
||||||
|
/datum/ninja_vision/meson
|
||||||
|
mode = "Meson Scanner"
|
||||||
|
glasses = new/obj/item/clothing/glasses/meson
|
||||||
|
|
||||||
|
/obj/item/clothing/mask/gas/voice/space_ninja
|
||||||
|
var/datum/ninja_vision/ninja_vision
|
||||||
|
var/list/datum/ninja_vision/ninja_visions
|
||||||
|
|
||||||
|
/obj/item/clothing/mask/gas/voice/space_ninja/New()
|
||||||
|
ninja_visions = list(new/datum/ninja_vision/scouter, new/datum/ninja_vision/nvg, new/datum/ninja_vision/thermal, new/datum/ninja_vision/meson)
|
||||||
|
ninja_vision = ninja_visions[1]
|
||||||
|
verbs += /obj/item/clothing/mask/gas/voice/space_ninja/proc/togglev
|
||||||
|
verbs += /obj/item/clothing/mask/gas/voice/space_ninja/proc/switchm
|
||||||
|
|
||||||
/obj/item/clothing/mask/gas/voice/space_ninja/proc/togglev()
|
/obj/item/clothing/mask/gas/voice/space_ninja/proc/togglev()
|
||||||
set name = "Toggle Voice"
|
set name = "Toggle Voice"
|
||||||
set desc = "Toggles the voice synthesizer on or off."
|
set desc = "Toggles the voice synthesizer on or off."
|
||||||
@@ -1248,42 +1293,20 @@ ________________________________________________________________________________
|
|||||||
set name = "Switch Mode"
|
set name = "Switch Mode"
|
||||||
set desc = "Switches between Night Vision, Meson, or Thermal vision modes."
|
set desc = "Switches between Night Vision, Meson, or Thermal vision modes."
|
||||||
set category = "Ninja Equip"
|
set category = "Ninja Equip"
|
||||||
//Have to reset these manually since life.dm is retarded like that. Go figure.
|
|
||||||
//This will only work for humans because only they have the appropriate code for the mask.
|
var/index = ninja_visions.Find(ninja_vision) + 1
|
||||||
|
if(index > ninja_visions.len)
|
||||||
|
index = 1
|
||||||
|
ninja_vision = ninja_visions[index]
|
||||||
|
|
||||||
var/mob/U = loc
|
var/mob/U = loc
|
||||||
switch(mode)
|
U << "Switching mode to <B>[ninja_vision.mode]</B>."
|
||||||
if(0)
|
|
||||||
mode=1
|
|
||||||
U << "Switching mode to <B>Night Vision</B>."
|
|
||||||
if(1)
|
|
||||||
mode=2
|
|
||||||
U.see_in_dark = 2
|
|
||||||
U << "Switching mode to <B>Thermal Scanner</B>."
|
|
||||||
if(2)
|
|
||||||
mode=3
|
|
||||||
U.see_invisible = SEE_INVISIBLE_LIVING
|
|
||||||
U.sight &= ~SEE_MOBS
|
|
||||||
U << "Switching mode to <B>Meson Scanner</B>."
|
|
||||||
if(3)
|
|
||||||
mode=0
|
|
||||||
U.sight &= ~SEE_TURFS
|
|
||||||
U << "Switching mode to <B>Scouter</B>."
|
|
||||||
|
|
||||||
/obj/item/clothing/mask/gas/voice/space_ninja/examine()
|
/obj/item/clothing/mask/gas/voice/space_ninja/examine()
|
||||||
set src in view()
|
set src in view()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
var/mode
|
usr << "<B>[ninja_vision.mode]</B> is active."//Leaving usr here since it may be on the floor or on a person.
|
||||||
switch(mode)
|
|
||||||
if(0)
|
|
||||||
mode = "Scouter"
|
|
||||||
if(1)
|
|
||||||
mode = "Night Vision"
|
|
||||||
if(2)
|
|
||||||
mode = "Thermal Scanner"
|
|
||||||
if(3)
|
|
||||||
mode = "Meson Scanner"
|
|
||||||
usr << "<B>[mode]</B> is active."//Leaving usr here since it may be on the floor or on a person.
|
|
||||||
usr << "Voice mimicking algorithm is set <B>[!vchange?"inactive":"active"]</B>."
|
usr << "Voice mimicking algorithm is set <B>[!vchange?"inactive":"active"]</B>."
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
var/prescription = 0
|
var/prescription = 0
|
||||||
var/toggleable = 0
|
var/toggleable = 0
|
||||||
var/active = 1
|
var/active = 1
|
||||||
|
var/obj/screen/overlay = null
|
||||||
body_parts_covered = EYES
|
body_parts_covered = EYES
|
||||||
|
|
||||||
/obj/item/clothing/glasses/attack_self(mob/user)
|
/obj/item/clothing/glasses/attack_self(mob/user)
|
||||||
@@ -18,13 +19,11 @@
|
|||||||
if(active)
|
if(active)
|
||||||
active = 0
|
active = 0
|
||||||
icon_state = "degoggles"
|
icon_state = "degoggles"
|
||||||
vision_flags = 0
|
|
||||||
user.update_inv_glasses()
|
user.update_inv_glasses()
|
||||||
usr << "You deactivate the optical matrix on the [src]."
|
usr << "You deactivate the optical matrix on the [src]."
|
||||||
else
|
else
|
||||||
active = 1
|
active = 1
|
||||||
icon_state = initial(icon_state)
|
icon_state = initial(icon_state)
|
||||||
vision_flags = initial(vision_flags)
|
|
||||||
user.update_inv_glasses()
|
user.update_inv_glasses()
|
||||||
usr << "You activate the optical matrix on the [src]."
|
usr << "You activate the optical matrix on the [src]."
|
||||||
|
|
||||||
@@ -38,6 +37,10 @@
|
|||||||
toggleable = 1
|
toggleable = 1
|
||||||
vision_flags = SEE_TURFS
|
vision_flags = SEE_TURFS
|
||||||
|
|
||||||
|
/obj/item/clothing/glasses/meson/New()
|
||||||
|
..()
|
||||||
|
overlay = global_hud.meson
|
||||||
|
|
||||||
/obj/item/clothing/glasses/meson/prescription
|
/obj/item/clothing/glasses/meson/prescription
|
||||||
name = "prescription mesons"
|
name = "prescription mesons"
|
||||||
desc = "Optical Meson Scanner with prescription lenses."
|
desc = "Optical Meson Scanner with prescription lenses."
|
||||||
@@ -57,6 +60,10 @@
|
|||||||
origin_tech = "magnets=2"
|
origin_tech = "magnets=2"
|
||||||
darkness_view = 7
|
darkness_view = 7
|
||||||
|
|
||||||
|
/obj/item/clothing/glasses/night/New()
|
||||||
|
..()
|
||||||
|
overlay = global_hud.nvg
|
||||||
|
|
||||||
/obj/item/clothing/glasses/eyepatch
|
/obj/item/clothing/glasses/eyepatch
|
||||||
name = "eyepatch"
|
name = "eyepatch"
|
||||||
desc = "Yarr."
|
desc = "Yarr."
|
||||||
@@ -212,6 +219,10 @@
|
|||||||
M.disabilities &= ~NEARSIGHTED
|
M.disabilities &= ~NEARSIGHTED
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
/obj/item/clothing/glasses/thermal/New()
|
||||||
|
..()
|
||||||
|
overlay = global_hud.thermal
|
||||||
|
|
||||||
/obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete
|
/obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete
|
||||||
name = "Optical Meson Scanner"
|
name = "Optical Meson Scanner"
|
||||||
desc = "Used for seeing walls, floors, and stuff through anything."
|
desc = "Used for seeing walls, floors, and stuff through anything."
|
||||||
|
|||||||
@@ -1202,7 +1202,7 @@
|
|||||||
if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe
|
if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe
|
||||||
client.images.Remove(hud)
|
client.images.Remove(hud)
|
||||||
|
|
||||||
client.screen.Remove(global_hud.blurry, global_hud.druggy, global_hud.vimpaired, global_hud.darkMask, global_hud.nvg)
|
client.screen.Remove(global_hud.blurry, global_hud.druggy, global_hud.vimpaired, global_hud.darkMask, global_hud.nvg, global_hud.thermal, global_hud.meson)
|
||||||
|
|
||||||
update_action_buttons()
|
update_action_buttons()
|
||||||
|
|
||||||
@@ -1314,57 +1314,18 @@
|
|||||||
see_invisible = SEE_INVISIBLE_LIVING
|
see_invisible = SEE_INVISIBLE_LIVING
|
||||||
seer = 0
|
seer = 0
|
||||||
|
|
||||||
|
var/tmp/glasses_processed = 0
|
||||||
if(istype(wear_mask, /obj/item/clothing/mask/gas/voice/space_ninja))
|
if(istype(wear_mask, /obj/item/clothing/mask/gas/voice/space_ninja))
|
||||||
var/obj/item/clothing/mask/gas/voice/space_ninja/O = wear_mask
|
var/obj/item/clothing/mask/gas/voice/space_ninja/O = wear_mask
|
||||||
switch(O.mode)
|
glasses_processed = 1
|
||||||
if(0)
|
process_glasses(O.ninja_vision.glasses)
|
||||||
var/target_list[] = list()
|
|
||||||
for(var/mob/living/target in oview(src))
|
|
||||||
if( target.mind&&(target.mind.special_role||issilicon(target)) )//They need to have a mind.
|
|
||||||
target_list += target
|
|
||||||
if(target_list.len)//Everything else is handled by the ninja mask proc.
|
|
||||||
O.assess_targets(target_list, src)
|
|
||||||
if(!druggy) see_invisible = SEE_INVISIBLE_LIVING
|
|
||||||
if(1)
|
|
||||||
see_in_dark = 5
|
|
||||||
if(!druggy) see_invisible = SEE_INVISIBLE_LIVING
|
|
||||||
if(2)
|
|
||||||
sight |= SEE_MOBS
|
|
||||||
if(!druggy) see_invisible = SEE_INVISIBLE_LEVEL_TWO
|
|
||||||
if(3)
|
|
||||||
sight |= SEE_TURFS
|
|
||||||
if(!druggy) see_invisible = SEE_INVISIBLE_LIVING
|
|
||||||
|
|
||||||
if(glasses)
|
if(glasses)
|
||||||
var/obj/item/clothing/glasses/G = glasses
|
glasses_processed = 1
|
||||||
if(istype(G))
|
process_glasses(glasses)
|
||||||
see_in_dark += G.darkness_view
|
|
||||||
if(G.vision_flags) // MESONS
|
|
||||||
sight |= G.vision_flags
|
|
||||||
if(!druggy)
|
|
||||||
see_invisible = SEE_INVISIBLE_MINIMUM
|
|
||||||
if(istype(G,/obj/item/clothing/glasses/night))
|
|
||||||
see_invisible = SEE_INVISIBLE_MINIMUM
|
|
||||||
client.screen += global_hud.nvg
|
|
||||||
|
|
||||||
/* HUD shit goes here, as long as it doesn't modify sight flags */
|
if(!seer && !glasses_processed)
|
||||||
// The purpose of this is to stop xray and w/e from preventing you from using huds -- Love, Doohl
|
|
||||||
|
|
||||||
if(istype(glasses, /obj/item/clothing/glasses/sunglasses/sechud))
|
|
||||||
var/obj/item/clothing/glasses/sunglasses/sechud/O = glasses
|
|
||||||
if(O.hud) O.hud.process_hud(src)
|
|
||||||
if(!druggy) see_invisible = SEE_INVISIBLE_LIVING
|
|
||||||
else if(istype(glasses, /obj/item/clothing/glasses/hud))
|
|
||||||
var/obj/item/clothing/glasses/hud/O = glasses
|
|
||||||
O.process_hud(src)
|
|
||||||
if(!druggy)
|
|
||||||
see_invisible = SEE_INVISIBLE_LIVING
|
|
||||||
|
|
||||||
else if(!seer)
|
|
||||||
see_invisible = SEE_INVISIBLE_LIVING
|
see_invisible = SEE_INVISIBLE_LIVING
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(healths)
|
if(healths)
|
||||||
if (analgesic)
|
if (analgesic)
|
||||||
healths.icon_state = "health_health_numb"
|
healths.icon_state = "health_health_numb"
|
||||||
@@ -1491,6 +1452,29 @@
|
|||||||
reset_view(null)
|
reset_view(null)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
proc/process_glasses(var/obj/item/clothing/glasses/G)
|
||||||
|
if(G && G.active)
|
||||||
|
see_in_dark += G.darkness_view
|
||||||
|
if(G.overlay)
|
||||||
|
client.screen |= G.overlay
|
||||||
|
if(G.vision_flags)
|
||||||
|
sight |= G.vision_flags
|
||||||
|
if(!druggy)
|
||||||
|
see_invisible = SEE_INVISIBLE_MINIMUM
|
||||||
|
if(istype(G,/obj/item/clothing/glasses/night))
|
||||||
|
see_invisible = SEE_INVISIBLE_MINIMUM
|
||||||
|
/* HUD shit goes here, as long as it doesn't modify sight flags */
|
||||||
|
// The purpose of this is to stop xray and w/e from preventing you from using huds -- Love, Doohl
|
||||||
|
if(istype(G, /obj/item/clothing/glasses/sunglasses/sechud))
|
||||||
|
var/obj/item/clothing/glasses/sunglasses/sechud/O = G
|
||||||
|
if(O.hud) O.hud.process_hud(src)
|
||||||
|
if(!druggy) see_invisible = SEE_INVISIBLE_LIVING
|
||||||
|
else if(istype(G, /obj/item/clothing/glasses/hud))
|
||||||
|
var/obj/item/clothing/glasses/hud/O = G
|
||||||
|
O.process_hud(src)
|
||||||
|
if(!druggy)
|
||||||
|
see_invisible = SEE_INVISIBLE_LIVING
|
||||||
|
|
||||||
proc/handle_random_events()
|
proc/handle_random_events()
|
||||||
// Puke if toxloss is too high
|
// Puke if toxloss is too high
|
||||||
if(!stat)
|
if(!stat)
|
||||||
|
|||||||
BIN
icons/obj/hud_full.dmi
Normal file
BIN
icons/obj/hud_full.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.8 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 2.0 KiB |
Reference in New Issue
Block a user