From 2c57d4ac19bc444d16df765fd96cec9b65c52be8 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Mon, 8 Jul 2024 11:20:42 +0200 Subject: [PATCH] [MIRROR] Night Vision Goggles update (#28695) * Night Vision Goggles update (#84594) ## About The Pull Request This is a reboot of #84550 but with way less unbearable: mesons are off the table and I've made the night vision tonalities lighter now, while also improving the darkness cutoffs of some of them. Btw, you can also turn night vision googles on/off now. Each pair of departmental night vision goggles now comes with their own tint to boot. As always, this doesn't affect nukies and ninjas. They're almost garaunteed to keep their googles equipped and on at all time, so it would honestly adulterate the overall experience a little. Now, for some pictures... In the dark, **top** row is **old**, **bottom** row is **new**. from left to right: security, science, standard/meson, diagnostic, health:  In the light: security, science, no goggles, standard/meson, diagnostic, health:  The screenshots were taken from varedited goggles on the servers because it's bit faster than booting up a local server, plus I had to finetune a few things. ## Why It's Good For The Game So, I kinda wanted to give a bit of screen colors to goggles that was not some sort of "optional, by default turned off" kind of crap nobody cares about, however my previous PR was met with a lot of criticism, which made me rethink how to do it. I honestly don't want it to be a burden, but I do want to make them a bit fancier tho. Also the the medical NVs (and perhaps sec NVs) were a bit crappier than the rest. ## Changelog :cl: add: Night vision goggles now subtly tint your screen. add: You can turn your night vision goggles off. Doing so removes the tint and the eye protection malus. /:cl: * Night Vision Goggles update * Update clothing.dm --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> Co-authored-by: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com> --- code/datums/actions/items/toggles.dm | 33 +++++++++++++++++ .../game/objects/items/storage/uplink_kits.dm | 2 +- .../crates_lockers/closets/syndicate.dm | 2 +- code/modules/antagonists/cult/cult_items.dm | 4 +++ code/modules/antagonists/ninja/outfit.dm | 2 +- code/modules/antagonists/nukeop/outfits.dm | 2 +- code/modules/client/client_colour.dm | 9 +++++ code/modules/clothing/glasses/_glasses.dm | 34 ++++++++++++++---- code/modules/clothing/glasses/hud.dm | 33 +++++++++++++---- code/modules/clothing/outfits/ert.dm | 2 +- .../mob_spawn/ghost_roles/unused_roles.dm | 2 +- icons/mob/clothing/eyes.dmi | Bin 15514 -> 16048 bytes icons/obj/clothing/glasses.dmi | Bin 18678 -> 19166 bytes .../modules/exp_corps/code/clothing.dm | 6 ++-- sound/items/attributions.txt | 1 + sound/items/night_vision_on.ogg | Bin 0 -> 13711 bytes 16 files changed, 110 insertions(+), 22 deletions(-) create mode 100644 sound/items/attributions.txt create mode 100644 sound/items/night_vision_on.ogg diff --git a/code/datums/actions/items/toggles.dm b/code/datums/actions/items/toggles.dm index fa7bc821a5e..1ff88f41a73 100644 --- a/code/datums/actions/items/toggles.dm +++ b/code/datums/actions/items/toggles.dm @@ -118,3 +118,36 @@ /datum/action/item_action/call_link name = "Call MODlink" +/datum/action/item_action/toggle_nv + name = "Toggle Night Vision" + var/stored_cutoffs + var/stored_colour + +/datum/action/item_action/toggle_nv/New(obj/item/clothing/glasses/target) + . = ..() + target.AddElement(/datum/element/update_icon_updates_onmob) + +/datum/action/item_action/toggle_nv/Trigger(trigger_flags) + if(!istype(target, /obj/item/clothing/glasses)) + return ..() + var/obj/item/clothing/glasses/goggles = target + var/mob/holder = goggles.loc + if(!istype(holder) || holder.get_slot_by_item(goggles) != ITEM_SLOT_EYES) + holder = null + if(stored_cutoffs) + goggles.color_cutoffs = stored_cutoffs + goggles.flash_protect = FLASH_PROTECTION_SENSITIVE + stored_cutoffs = null + if(stored_colour) + goggles.change_glass_color(stored_colour) + playsound(goggles, 'sound/items/night_vision_on.ogg', 30, TRUE, -3) + else + stored_cutoffs = goggles.color_cutoffs + stored_colour = goggles.glass_colour_type + goggles.color_cutoffs = list() + goggles.flash_protect = FLASH_PROTECTION_NONE + if(stored_colour) + goggles.change_glass_color(null) + playsound(goggles, 'sound/machines/click.ogg', 30, TRUE, -3) + holder?.update_sight() + goggles.update_appearance() diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 978f53dcc79..5bef4162f02 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -300,7 +300,7 @@ new /obj/item/clothing/suit/armor/vest/marine/pmc(src) //The armor kit is comparable to the infiltrator, 6 TC new /obj/item/clothing/head/helmet/marine/pmc(src) new /obj/item/clothing/mask/gas/sechailer(src) - new /obj/item/clothing/glasses/night(src) // 3~ TC + new /obj/item/clothing/glasses/night/colorless(src) // 3~ TC new /obj/item/clothing/gloves/krav_maga/combatglovesplus(src) //5TC new /obj/item/clothing/shoes/jackboots(src) new /obj/item/storage/belt/military/assault/fisher(src) //items in this belt easily costs 18 TC diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index aab8e4b8582..64be6a4df8d 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -20,7 +20,7 @@ /obj/structure/closet/syndicate/personal/PopulateContents() ..() new /obj/item/trench_tool(src) - new /obj/item/clothing/glasses/night(src) + new /obj/item/clothing/glasses/night/colorless(src) new /obj/item/ammo_box/magazine/m10mm(src) new /obj/item/storage/belt/military(src) new /obj/item/storage/belt/holster/nukie(src) diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 4197d96dad8..595d95c168e 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -634,6 +634,10 @@ Striking a noncultist, however, will tear their flesh."} icon_state = "blindfold" inhand_icon_state = "blindfold" flash_protect = FLASH_PROTECTION_WELDER + actions_types = null + color_cutoffs = list(40, 0, 0) //red + glass_colour_type = null + forced_glass_color = FALSE /obj/item/clothing/glasses/hud/health/night/cultblind/equipped(mob/living/user, slot) ..() diff --git a/code/modules/antagonists/ninja/outfit.dm b/code/modules/antagonists/ninja/outfit.dm index 9b81dd75f05..ba54c33d842 100644 --- a/code/modules/antagonists/ninja/outfit.dm +++ b/code/modules/antagonists/ninja/outfit.dm @@ -1,7 +1,7 @@ /datum/outfit/ninja name = "Space Ninja" uniform = /obj/item/clothing/under/syndicate/ninja - glasses = /obj/item/clothing/glasses/night + glasses = /obj/item/clothing/glasses/night/colorless mask = /obj/item/clothing/mask/gas/ninja ears = /obj/item/radio/headset shoes = /obj/item/clothing/shoes/jackboots diff --git a/code/modules/antagonists/nukeop/outfits.dm b/code/modules/antagonists/nukeop/outfits.dm index 5cd89e6c842..fa214aa7046 100644 --- a/code/modules/antagonists/nukeop/outfits.dm +++ b/code/modules/antagonists/nukeop/outfits.dm @@ -67,7 +67,7 @@ /datum/outfit/syndicate/full name = "Syndicate Operative - Full Kit" - glasses = /obj/item/clothing/glasses/night + glasses = /obj/item/clothing/glasses/night/colorless mask = /obj/item/clothing/mask/gas/syndicate back = /obj/item/mod/control/pre_equipped/nuclear r_pocket = /obj/item/tank/internals/emergency_oxygen/engi diff --git a/code/modules/client/client_colour.dm b/code/modules/client/client_colour.dm index 5dbcaa0f824..4ca500a9e71 100644 --- a/code/modules/client/client_colour.dm +++ b/code/modules/client/client_colour.dm @@ -180,9 +180,15 @@ /datum/client_colour/glass_colour/yellow colour = "#ffff66" +/datum/client_colour/glass_colour/lightyellow + colour = "#ffffaa" + /datum/client_colour/glass_colour/red colour = "#ffaaaa" +/datum/client_colour/glass_colour/lightred + colour = "#ffcccc" + /datum/client_colour/glass_colour/darkred colour = "#bb5555" @@ -195,6 +201,9 @@ /datum/client_colour/glass_colour/purple colour = "#ff99ff" +/datum/client_colour/glass_colour/lightpurple + colour = "#ffccff" + /datum/client_colour/glass_colour/gray colour = "#cccccc" diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 4202c9d1e3a..6e4a7274563 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -92,8 +92,14 @@ inhand_icon_state = "nvgmeson" flash_protect = FLASH_PROTECTION_SENSITIVE // Night vision mesons get the same but more intense - color_cutoffs = list(10, 30, 10) - glass_colour_type = /datum/client_colour/glass_colour/green + color_cutoffs = list(10, 35, 10) + glass_colour_type = /datum/client_colour/glass_colour/lightgreen + actions_types = list(/datum/action/item_action/toggle_nv) + forced_glass_color = TRUE + +/obj/item/clothing/glasses/meson/night/update_icon_state() + . = ..() + icon_state = length(color_cutoffs) ? initial(icon_state) : "nvgmeson_off" /obj/item/clothing/glasses/meson/gar name = "gar mesons" @@ -138,8 +144,14 @@ icon_state = "scihudnight" flash_protect = FLASH_PROTECTION_SENSITIVE // Real vivid purple - color_cutoffs = list(50, 10, 30) - glass_colour_type = /datum/client_colour/glass_colour/green + color_cutoffs = list(30, 5, 15) + glass_colour_type = /datum/client_colour/glass_colour/lightpurple + actions_types = list(/datum/action/item_action/toggle_nv) + forced_glass_color = TRUE + +/obj/item/clothing/glasses/science/night/update_icon_state() + . = ..() + icon_state = length(color_cutoffs) ? initial(icon_state) : "night_off" /obj/item/clothing/glasses/night name = "night vision goggles" @@ -149,8 +161,18 @@ flags_cover = GLASSESCOVERSEYES flash_protect = FLASH_PROTECTION_SENSITIVE // Dark green - color_cutoffs = list(10, 30, 10) - glass_colour_type = /datum/client_colour/glass_colour/green + color_cutoffs = list(10, 25, 10) + glass_colour_type = /datum/client_colour/glass_colour/lightgreen + actions_types = list(/datum/action/item_action/toggle_nv) + forced_glass_color = TRUE + +/obj/item/clothing/glasses/night/update_icon_state() + . = ..() + icon_state = length(color_cutoffs) ? initial(icon_state) : "night_off" + +/obj/item/clothing/glasses/night/colorless + desc = parent_type::desc + " Now with 50% less green!" + forced_glass_color = FALSE /obj/item/clothing/glasses/eyepatch name = "eyepatch" diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index c3c357cfb04..4f5668f7bcc 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -67,8 +67,14 @@ flash_protect = FLASH_PROTECTION_SENSITIVE flags_cover = GLASSESCOVERSEYES // Blue green, dark - color_cutoffs = list(5, 15, 30) - glass_colour_type = /datum/client_colour/glass_colour/green + color_cutoffs = list(20, 20, 45) + glass_colour_type = /datum/client_colour/glass_colour/lightgreen + actions_types = list(/datum/action/item_action/toggle_nv) + forced_glass_color = TRUE + +/obj/item/clothing/glasses/hud/health/night/update_icon_state() + . = ..() + icon_state = length(color_cutoffs) ? initial(icon_state) : "night_off" /obj/item/clothing/glasses/hud/health/night/meson name = "night vision meson health scanner HUD" @@ -79,7 +85,8 @@ name = "night vision medical science scanner HUD" desc = "An clandestine medical science heads-up display that allows operatives to find \ dying captains and the perfect poison to finish them off in complete darkness." - clothing_traits = list(TRAIT_REAGENT_SCANNER) + clothing_traits = list(TRAIT_REAGENT_SCANNER, TRAIT_MEDICAL_HUD) + forced_glass_color = FALSE /obj/item/clothing/glasses/hud/health/sunglasses name = "medical HUDSunglasses" @@ -115,8 +122,14 @@ flash_protect = FLASH_PROTECTION_SENSITIVE flags_cover = GLASSESCOVERSEYES // Pale yellow - color_cutoffs = list(30, 20, 5) - glass_colour_type = /datum/client_colour/glass_colour/green + color_cutoffs = list(25, 15, 5) + glass_colour_type = /datum/client_colour/glass_colour/lightyellow + actions_types = list(/datum/action/item_action/toggle_nv) + forced_glass_color = TRUE + +/obj/item/clothing/glasses/hud/diagnostic/night/update_icon_state() + . = ..() + icon_state = length(color_cutoffs) ? initial(icon_state) : "night_off" /obj/item/clothing/glasses/hud/diagnostic/sunglasses name = "diagnostic sunglasses" @@ -187,8 +200,14 @@ flash_protect = FLASH_PROTECTION_SENSITIVE flags_cover = GLASSESCOVERSEYES // Red with a tint of green - color_cutoffs = list(35, 5, 5) - glass_colour_type = /datum/client_colour/glass_colour/green + color_cutoffs = list(40, 15, 10) + glass_colour_type = /datum/client_colour/glass_colour/lightred + actions_types = list(/datum/action/item_action/toggle_nv) + forced_glass_color = TRUE + +/obj/item/clothing/glasses/hud/security/night/update_icon_state() + . = ..() + icon_state = length(color_cutoffs) ? initial(icon_state) : "night_off" /obj/item/clothing/glasses/hud/security/sunglasses/gars name = "\improper HUD gar glasses" diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index db20562039b..2aa61b00460 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -242,7 +242,7 @@ /obj/item/storage/box/lights/mixed = 1, ) belt = /obj/item/storage/belt/janitor/full - glasses = /obj/item/clothing/glasses/night + glasses = /obj/item/clothing/glasses/night/colorless l_pocket = /obj/item/grenade/chem_grenade/cleaner r_pocket = /obj/item/grenade/chem_grenade/cleaner l_hand = /obj/item/storage/bag/trash/bluespace diff --git a/code/modules/mob_spawn/ghost_roles/unused_roles.dm b/code/modules/mob_spawn/ghost_roles/unused_roles.dm index 817b2154986..102501f9b39 100644 --- a/code/modules/mob_spawn/ghost_roles/unused_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/unused_roles.dm @@ -308,7 +308,7 @@ /datum/outfit/syndicatespace/syndicrew name = "Syndicate Ship Crew Member" - glasses = /obj/item/clothing/glasses/night + glasses = /obj/item/clothing/glasses/night/colorless mask = /obj/item/clothing/mask/gas/syndicate l_pocket = /obj/item/gun/ballistic/automatic/pistol r_pocket = /obj/item/knife/combat/survival diff --git a/icons/mob/clothing/eyes.dmi b/icons/mob/clothing/eyes.dmi index 20bf4d18381fdcef95b13f9f5d083cfc01a9a2ac..92b155f62d5475d5660e4c228fe9b867e6b705b6 100644 GIT binary patch literal 16048 zcmdVBXFwC}x-J|=L`6hwsHnjJB2uCvy#y3NML
t|7B_vT%iUp(y(m@cUB^2o;
zDk7aAEkb}uOMuWrfI!Nb_^!3jKKtzTo&9U?_xlkhljoUX=9#-(*LB|$c}HJ|Z{Nv%
zAP|V}<_)cTAkfYyoX?)!z%To|+C+ezH^KK!eYG5X?7W>H`#O7ifIxw%9}{u +)Qcr2}gF
zsXR}{B+o=wZF^kP*^U|8@}Evg>wpr4A+}}ZVrw(mm+csvi)KbD0Ge=EXoT-0uXZSW
zUf)V`$_?7qd3{` x&Vy(aa0E0>lP2-N1JI1AQ=Xz4*4DdCc{7$ c^kil#_7)x%W*W(59;dBk+N`x~7&qR02?n`kO!%mP8VgvYvMSv~7ul}v_?c`o+
zI-04;LF}qEQ$I+9|Bsn64`u 83yH4`!
z>OmbE*sBDO1E{~>Ck1P6TMT>mE0pV_EhF6;I-U5zjse)+x!m$rCJHd6-yE6+U2I!`
z-(!Cq#^DU|S~V9EP>LLScPu@}r`4Hn>RnP&5)u-!+{t8un@1|~-lNL)tBcEz+`pIQ
zmqnI2ES=q3YaP&*r%w~IZFSso=<`{UP6|U?$Kzvah?WPH=S36pfB6u!4IB+}Hn;YI
zFy<&!n~?AhuL^T|s}ac$Hax$|woan7E2A6iTj?6h&G2MgS8`fu@?ookCu{0eFa|U@
z{0tU3`jk^YVqieYXl^l_;pD_Is2(FqfDXZ8aKN%;rn9 6!>bOsk=^10g9_q?k3ikFA(5(e7sN@IkiEW6=&m4wcpn=B_+LC
zBXal(unlUOQY50QJvylGY5R^2%-2^LloNRCT-l_R?p1d<-k!6=V`oTSypX6(O9;A?
zlw=4G4;NsO)9j?(f#2Qh7-z4G<<#b)cfELFXkLh6la%U^eq^AnfCCspO@FJH?|171
zzKaqU9R^he_bj>#4$krIWl=tOb6xPxTm6iToafA9Vw~n~K9g<*`z@2UhCUi|(Bg}|
zr{bGH5+l{+ki A0Lz7i=_9 BuvjuJHkFSy&hWMA4^%lf_&HIu&1V|Ba8zoVqBh
z8T|gZLIo$FW`maUA*lCJIzN8IlI3@a#fht=tIT5aSEauC8m;x~YfnG6?Kaq%=5`YMob|S4(-`jK;COmkaD`^(%4~-Z|kHS
zO!+-*_BM>*<@*M2(!?;j#iA$nQS}?U81RI6G-wRDJ?gmJ^KkV`LG>x+;H%cf+i{k#
zRYUKUmaR7aeblMnEX3;OWVD&k6B8RP``?+-Rf{n1O$-DwND;@31EaAc(FE
VLt7>up2ufJn$ZB4QG!a-C3YF-R%&8T|f9#-cw
zo`!;RM9X%a%l2*e>Re6fH_ETb%inTVXy88OZKW{nxyo9^WD`J7#@e>)uu&ddGbfaf
za%#anJ}Y2NuD>gS(W(mCn$6QQs9(CD)1iFm<79FV+}%`pbbe^fsC+9tYN&j+(6Om^
zwg8NZWR_UHO3zlIEp#ee&;BXT-`LyRdk3G`=X3PPk@t@k-5U4-Nd{Py_TdUwqYahw
zfUwDn2zSBT{Iprz+^U1Dwk6;Sp?iaGKD{*`?w*0YRGkh(E_IRCZBzvh2?RB`h0Q8-
zwnie(*2u8i?yPzdXevJSb@&N)BI_0Tsx?eoyS;c2Q`jkIjf=zgByH=`_dNjA{Q|O6
zdon$VgIH)jccpUI6*vU}09*k^{YUdpO<
ZiJ;UgluzR^4c5k
zBHUgjiM*+JRdTH{4z)f%bZ+t)^3VbPx1lJ6&Y>!Nv4s
?bg>y86Mwa?^1QY8g92{
TLA0v#A$7-C;<_x05-zm2tQz2aM|EwV*YIxCi?=E
za#o|1bvAd?aVkFuUFtA0XQfmc*ksvWHC|z81-v@zG%9O%&^~nc4t1L7ryS8WbNYrb5WB5mIP8j(wq?fjEhBW
z6Q5x9f
>a#wu>cq>>0ff64j1x?T^n4ZcFSU5JtLDl&I?q-#hLkvx0vk0b{*E5
zobDGpzElEs%Y#o?@dfPWqc=lOVQC`$vZ3WIU{KFy70hym=Icy4#s$6iw(~g`i&9P#
zjNvtdI2y#S`J0C(i9tmzLT^xrgEUYXr1q{oUr!U;AZ{-(#l*xcrJwUE
St--w7T