From ef714c1c342b54f72b5095ddabccd5a08bd30858 Mon Sep 17 00:00:00 2001 From: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Date: Sat, 9 Mar 2024 15:57:19 -0800 Subject: [PATCH] Overlay Lighting Color/Intensity Pass (#81425) ## About The Pull Request I was looking at screenshots of the game and realized we had a lot of light sources that were really... flat. Medium intensity, not colored at all, cringe. So I went over all the uses of overlay styled lighting (since I've done matrix lighting already) and gave them more unique features. Colors that match the sprite they're used with, intensity to produce vibes, that sort of thing. It's kinda impossible to go one by one cause there's a LOT. I may have gone a bit overboard with a few, I'm messing around with some things like giving bots colors based off their department, etc. We'll see how this all turns out. Oh also I tweaked how the cone of overlay lighting is drawn. It seemed a bit too present to me so I dropped the alpha down from like 200 to 120 at max (so it's roughly half of the mask's alpha so it's less overwhelming ## Why It's Good For The Game Lighting should be impactful, subtle and colorful
Old Lights ![dreamseeker_QJ5bFZxd63](https://github.com/tgstation/tgstation/assets/58055496/8ae74a95-32cb-473f-830a-ab4e1073a581) ![dreamseeker_DPVgI8wOoN](https://github.com/tgstation/tgstation/assets/58055496/149095af-a08a-4038-bf18-9e3401327452) ![dreamseeker_pyEmTAb37x](https://github.com/tgstation/tgstation/assets/58055496/6dbb6cf8-2ed7-4bc0-9d19-c64849088a33) ![dreamseeker_aDfvnea6YD](https://github.com/tgstation/tgstation/assets/58055496/4ed983e1-6be3-4513-ba3b-cecde08ccd38) ![dreamseeker_RnkQSwmxmc](https://github.com/tgstation/tgstation/assets/58055496/63e0210e-e1b1-42f0-be64-53d67c43f689) ![dreamseeker_G8NSC3lzAk](https://github.com/tgstation/tgstation/assets/58055496/93001925-904d-4061-8874-1d17bb225a90) ![dreamseeker_yASfxtbHDR](https://github.com/tgstation/tgstation/assets/58055496/ce0ae9ad-9067-44e0-9491-3ef331bbbb84) ![dreamseeker_4ecBbG5urI](https://github.com/tgstation/tgstation/assets/58055496/ce82f471-15c7-40ce-bc08-be4f5dc8a3b7) ![dreamseeker_udYlv8uAce](https://github.com/tgstation/tgstation/assets/58055496/c516a278-852b-44b8-ba7c-1203cea3f845) ![dreamseeker_bc2120Fnmr](https://github.com/tgstation/tgstation/assets/58055496/87a1429a-2329-4dd5-8c7b-ff44f54a08bb)
New Lights ![dreamseeker_0H11TyhGgx](https://github.com/tgstation/tgstation/assets/58055496/75b68a25-055e-488c-af82-b062dbe7413e) ![dreamseeker_2B9AENHsfl](https://github.com/tgstation/tgstation/assets/58055496/b52d441c-6ed3-495b-9ebd-9b0c9f924f30) ![dreamseeker_3vOVRRMTSP](https://github.com/tgstation/tgstation/assets/58055496/b265578f-34cc-4a0a-80ea-3237fb83df33) ![dreamseeker_5bTLup65rx](https://github.com/tgstation/tgstation/assets/58055496/6fcd3dc0-5927-458a-9f77-5582ad57a954) ![dreamseeker_iZzxZv4nfW](https://github.com/tgstation/tgstation/assets/58055496/67c3af13-2305-4130-936b-19ded08ccc4e) ![dreamseeker_Lhe9TSA0Av](https://github.com/tgstation/tgstation/assets/58055496/a5310e58-0ff1-45ac-bb81-b4a0212eb0ce) ![dreamseeker_ngQJUv0tV4](https://github.com/tgstation/tgstation/assets/58055496/c3d7423a-ab32-4401-9ffa-c4c3b7811334) ![dreamseeker_PL0z6sU7by](https://github.com/tgstation/tgstation/assets/58055496/2947d828-3aee-48c2-903f-2bf0db9077d2) ![dreamseeker_xineFZDzPA](https://github.com/tgstation/tgstation/assets/58055496/095ff8b0-51cf-4f7c-a2ee-752d9d7e87bd) ![dreamseeker_zpXxbZZakS](https://github.com/tgstation/tgstation/assets/58055496/c4200d35-a2fa-4c3f-8e88-1fd87f44cd46)
## Changelog :cl: add: Tweaked the saturation, color and intensity of a bunch of lights /:cl: --- code/__DEFINES/lighting.dm | 2 +- code/__HELPERS/paths/path.dm | 2 +- code/datums/components/overlay_lighting.dm | 2 +- code/datums/mutations/body.dm | 2 +- .../status_effects/debuffs/fire_stacks.dm | 5 --- code/datums/status_effects/neutral.dm | 2 +- code/datums/status_effects/song_effects.dm | 2 +- .../effects/effect_system/effects_sparks.dm | 4 +-- code/game/objects/effects/lighting.dm | 1 + code/game/objects/items/cigs_lighters.dm | 2 +- code/game/objects/items/devices/flashlight.dm | 31 ++++++++++++------ code/game/objects/items/flamethrower.dm | 3 ++ .../stacks/golem_food/golem_status_effects.dm | 5 ++- code/game/objects/items/tools/weldingtool.dm | 2 +- code/modules/antagonists/cult/blood_magic.dm | 2 +- code/modules/clothing/head/cakehat.dm | 4 ++- code/modules/clothing/head/hardhat.dm | 1 + code/modules/clothing/spacesuits/plasmamen.dm | 2 ++ code/modules/hydroponics/grown/ambrosia.dm | 2 ++ .../mining/equipment/kinetic_crusher.dm | 2 ++ code/modules/mining/lavaland/tendril_loot.dm | 4 ++- code/modules/mob/dead/observer/observer.dm | 4 +-- code/modules/mob/living/basic/bots/_bots.dm | 3 +- .../living/basic/bots/cleanbot/cleanbot.dm | 1 + .../mob/living/basic/bots/medbot/medbot.dm | 2 ++ .../mob/living/basic/minebots/minebot.dm | 3 ++ .../mob/living/basic/space_fauna/ghost.dm | 4 +-- .../mob/living/silicon/robot/robot_defines.dm | 1 - .../mob/living/simple_animal/bot/bot.dm | 2 +- .../mob/living/simple_animal/bot/ed209bot.dm | 1 + .../mob/living/simple_animal/bot/firebot.dm | 2 ++ .../mob/living/simple_animal/bot/honkbot.dm | 2 ++ .../mob/living/simple_animal/bot/mulebot.dm | 2 ++ .../mob/living/simple_animal/bot/secbot.dm | 3 ++ .../mob/living/simple_animal/bot/vibebot.dm | 4 +-- .../hostile/megafauna/colossus.dm | 4 ++- code/modules/mob/mob.dm | 2 +- code/modules/mod/mod_construction.dm | 3 +- code/modules/mod/mod_core.dm | 3 +- .../computers/item/computer.dm | 1 + code/modules/paperwork/pen.dm | 2 +- code/modules/photography/camera/camera.dm | 4 +-- code/modules/projectiles/projectile/beams.dm | 2 +- .../religion/festival/instrument_rites.dm | 2 +- .../research/ordnance/doppler_array.dm | 2 +- code/modules/surgery/tools.dm | 8 +++-- ...reenshot_high_luminosity_eyes_light_on.png | Bin 5635 -> 5466 bytes code/modules/vehicles/cars/clowncar.dm | 2 +- code/modules/vehicles/cars/vim.dm | 2 +- code/modules/vehicles/mecha/_mecha.dm | 2 +- code/modules/vehicles/mecha/combat/durand.dm | 2 +- 51 files changed, 99 insertions(+), 58 deletions(-) diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm index fe85c38bf46..c417db515b7 100644 --- a/code/__DEFINES/lighting.dm +++ b/code/__DEFINES/lighting.dm @@ -71,7 +71,7 @@ #define LIGHTING_FORCE_UPDATE 3 #define FLASH_LIGHT_DURATION 2 -#define FLASH_LIGHT_POWER 3 +#define FLASH_LIGHT_POWER 2 #define FLASH_LIGHT_RANGE 3.8 // Emissive blocking. diff --git a/code/__HELPERS/paths/path.dm b/code/__HELPERS/paths/path.dm index 28ef66aa45e..61e50601e78 100644 --- a/code/__HELPERS/paths/path.dm +++ b/code/__HELPERS/paths/path.dm @@ -281,7 +281,7 @@ /// Are we being thrown? var/thrown = FALSE /// Are we anchored - var/anchored = FLASH_LIGHT_POWER + var/anchored = FALSE /// Are we a ghost? (they have effectively unique pathfinding) var/is_observer = FALSE diff --git a/code/datums/components/overlay_lighting.dm b/code/datums/components/overlay_lighting.dm index efff82b703a..19c7528db8b 100644 --- a/code/datums/components/overlay_lighting.dm +++ b/code/datums/components/overlay_lighting.dm @@ -398,7 +398,7 @@ return if(current_holder && overlay_lighting_flags & LIGHTING_ON) current_holder.underlays -= cone - cone.alpha = min(200, (abs(new_power) * 90)+20) + cone.alpha = min(120, (abs(new_power) * 60) + 15) if(current_holder && overlay_lighting_flags & LIGHTING_ON) current_holder.underlays += cone diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index ef028e14fb7..3e72777719f 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -220,7 +220,7 @@ instability = 5 power_coeff = 1 conflicts = list(/datum/mutation/human/glow/anti) - var/glow_power = 2.5 + var/glow_power = 2 var/glow_range = 2.5 var/glow_color var/obj/effect/dummy/lighting_obj/moblight/glow diff --git a/code/datums/status_effects/debuffs/fire_stacks.dm b/code/datums/status_effects/debuffs/fire_stacks.dm index 2f32ff5b3be..76d5f8ec896 100644 --- a/code/datums/status_effects/debuffs/fire_stacks.dm +++ b/code/datums/status_effects/debuffs/fire_stacks.dm @@ -272,11 +272,6 @@ overlays |= created_overlay -/obj/effect/dummy/lighting_obj/moblight/fire - name = "fire" - light_color = LIGHT_COLOR_FIRE - light_range = LIGHT_RANGE_FIRE - /datum/status_effect/fire_handler/wet_stacks id = "wet_stacks" diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm index 3f267cb3bad..9efc867a043 100644 --- a/code/datums/status_effects/neutral.dm +++ b/code/datums/status_effects/neutral.dm @@ -562,7 +562,7 @@ return ..() /datum/status_effect/tinlux_light/on_apply() - mob_light_obj = owner.mob_light(2) + mob_light_obj = owner.mob_light(2, 1.5, "#ccff33") return TRUE /datum/status_effect/tinlux_light/on_remove() diff --git a/code/datums/status_effects/song_effects.dm b/code/datums/status_effects/song_effects.dm index 066ac457a9f..f61253c987d 100644 --- a/code/datums/status_effects/song_effects.dm +++ b/code/datums/status_effects/song_effects.dm @@ -44,7 +44,7 @@ var/obj/effect/dummy/lighting_obj/moblight/mob_light_obj /datum/status_effect/song/light/on_apply() - mob_light_obj = owner.mob_light(3, color = LIGHT_COLOR_DIM_YELLOW) + mob_light_obj = owner.mob_light(3, 1.5, color = LIGHT_COLOR_DIM_YELLOW) playsound(owner, 'sound/weapons/fwoosh.ogg', 75, FALSE) return TRUE diff --git a/code/game/objects/effects/effect_system/effects_sparks.dm b/code/game/objects/effects/effect_system/effects_sparks.dm index c3fad6d26b6..874c53fa83c 100644 --- a/code/game/objects/effects/effect_system/effects_sparks.dm +++ b/code/game/objects/effects/effect_system/effects_sparks.dm @@ -17,8 +17,8 @@ icon_state = "sparks" anchored = TRUE light_system = OVERLAY_LIGHT - light_range = 2 - light_power = 0.5 + light_range = 1.5 + light_power = 0.8 light_color = LIGHT_COLOR_FIRE /obj/effect/particle_effect/sparks/Initialize(mapload) diff --git a/code/game/objects/effects/lighting.dm b/code/game/objects/effects/lighting.dm index 1de9fad39ee..caeedbd22bb 100644 --- a/code/game/objects/effects/lighting.dm +++ b/code/game/objects/effects/lighting.dm @@ -37,6 +37,7 @@ name = "mob fire lighting" light_color = LIGHT_COLOR_FIRE light_range = LIGHT_RANGE_FIRE + light_power = 2 /obj/effect/dummy/lighting_obj/moblight/species name = "species lighting" diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index 5a88a2cedff..4bc8fc88e10 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -727,7 +727,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM custom_price = PAYCHECK_CREW * 1.1 light_system = OVERLAY_LIGHT light_range = 2 - light_power = 0.6 + light_power = 1.3 light_color = LIGHT_COLOR_FIRE light_on = FALSE /// Whether the lighter is lit. diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 0b552f08e68..a6705049aa8 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -20,6 +20,7 @@ custom_materials = list(/datum/material/iron= SMALL_MATERIAL_AMOUNT * 0.5, /datum/material/glass= SMALL_MATERIAL_AMOUNT * 0.2) actions_types = list(/datum/action/item_action/toggle_light) light_system = OVERLAY_LIGHT_DIRECTIONAL + light_color = COLOR_LIGHT_ORANGE light_range = 4 light_power = 1 light_on = FALSE @@ -294,6 +295,8 @@ w_class = WEIGHT_CLASS_TINY obj_flags = CONDUCTS_ELECTRICITY light_range = 2 + light_power = 0.8 + light_color = "#CCFFFF" COOLDOWN_DECLARE(holosign_cooldown) /obj/item/flashlight/pen/afterattack(atom/target, mob/user, proximity_flag) @@ -351,6 +354,8 @@ righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' force = 9 // Not as good as a stun baton. light_range = 5 // A little better than the standard flashlight. + light_power = 0.8 + light_color = "#99ccff" hitsound = 'sound/weapons/genhit1.ogg' // the desk lamps are a bit special @@ -397,6 +402,7 @@ heat = 1000 light_color = LIGHT_COLOR_FLARE light_system = OVERLAY_LIGHT + light_power = 2 grind_results = list(/datum/reagent/sulfur = 15) sound_on = 'sound/items/match_strike.ogg' toggle_context = FALSE @@ -522,8 +528,9 @@ righthand_file = 'icons/mob/inhands/items_righthand.dmi' w_class = WEIGHT_CLASS_TINY heat = 1000 - light_color = LIGHT_COLOR_FIRE light_range = 2 + light_power = 1.5 + light_color = LIGHT_COLOR_FIRE fuel = 35 MINUTES randomize_fuel = FALSE trash_type = /obj/item/trash/candle @@ -636,6 +643,7 @@ name = "torch" desc = "A torch fashioned from some leaves and a log." light_range = 4 + light_power = 1.3 icon_state = "torch" inhand_icon_state = "torch" lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' @@ -653,20 +661,24 @@ lefthand_file = 'icons/mob/inhands/equipment/mining_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/mining_righthand.dmi' desc = "A mining lantern." - light_range = 6 // luminosity when on + light_range = 5 // luminosity when on + light_power = 1.5 + light_color = "#ffcc66" light_system = OVERLAY_LIGHT /obj/item/flashlight/lantern/heirloom_moth name = "old lantern" desc = "An old lantern that has seen plenty of use." - light_range = 4 + light_range = 3.5 /obj/item/flashlight/lantern/syndicate name = "suspicious lantern" desc = "A suspicious looking lantern." icon_state = "syndilantern" inhand_icon_state = "syndilantern" - light_range = 10 + light_range = 6 + light_power = 2 + light_color = "#ffffe6" /obj/item/flashlight/lantern/jade name = "jade lantern" @@ -684,7 +696,8 @@ w_class = WEIGHT_CLASS_SMALL slot_flags = ITEM_SLOT_BELT custom_materials = null - light_range = 7 //luminosity when on + light_range = 6 //luminosity when on + light_color = "#ffff66" light_system = OVERLAY_LIGHT /obj/item/flashlight/emp @@ -748,7 +761,8 @@ desc = "A military-grade glowstick." custom_price = PAYCHECK_LOWER w_class = WEIGHT_CLASS_SMALL - light_range = 4 + light_range = 3.5 + light_power = 2 light_system = OVERLAY_LIGHT color = LIGHT_COLOR_GREEN icon_state = "glowstick" @@ -858,7 +872,7 @@ icon_state = null light_system = OVERLAY_LIGHT light_range = 4 - light_power = 10 + light_power = 2 alpha = 0 plane = FLOOR_PLANE anchored = TRUE @@ -903,9 +917,6 @@ /obj/item/flashlight/eyelight name = "eyelight" desc = "This shouldn't exist outside of someone's head, how are you seeing this?" - light_system = OVERLAY_LIGHT - light_range = 15 - light_power = 1 obj_flags = CONDUCTS_ELECTRICITY item_flags = DROPDEL actions_types = list() diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm index 1a31c5d58a2..f7ed18da053 100644 --- a/code/game/objects/items/flamethrower.dm +++ b/code/game/objects/items/flamethrower.dm @@ -16,6 +16,9 @@ resistance_flags = FIRE_PROOF trigger_guard = TRIGGER_GUARD_NORMAL light_system = OVERLAY_LIGHT + light_color = LIGHT_COLOR_FLARE + light_range = 2 + light_power = 2 light_on = FALSE var/status = FALSE var/lit = FALSE //on or off diff --git a/code/game/objects/items/stacks/golem_food/golem_status_effects.dm b/code/game/objects/items/stacks/golem_food/golem_status_effects.dm index 514ab36ed66..43cd135904f 100644 --- a/code/game/objects/items/stacks/golem_food/golem_status_effects.dm +++ b/code/game/objects/items/stacks/golem_food/golem_status_effects.dm @@ -433,15 +433,14 @@ var/glow_range = 3 var/glow_power = 1 var/glow_color = LIGHT_COLOR_DEFAULT - var/datum/component/overlay_lighting/lightbulb + var/obj/effect/dummy/lighting_obj/moblight/lightbulb /datum/status_effect/golem_lightbulb/on_apply() . = ..() if (!.) return to_chat(owner, span_notice("You start to emit a healthy glow.")) - owner.light_system = OVERLAY_LIGHT - lightbulb = owner.AddComponent(/datum/component/overlay_lighting, _range = glow_range, _power = glow_power, _color = glow_color) + lightbulb = owner.mob_light(glow_range, glow_power, glow_color) owner.add_filter(LIGHTBULB_FILTER, 2, list("type" = "outline", "color" = glow_color, "alpha" = 60, "size" = 1)) /datum/status_effect/golem_lightbulb/on_remove() diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index 6a75e99a36a..40f9f47f424 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -19,7 +19,7 @@ pickup_sound = 'sound/items/handling/weldingtool_pickup.ogg' light_system = OVERLAY_LIGHT light_range = 2 - light_power = 0.75 + light_power = 1.5 light_color = LIGHT_COLOR_FIRE light_on = FALSE throw_speed = 3 diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index dd858b739d5..8bd23d11b6a 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -405,7 +405,7 @@ if(IS_CULTIST(user)) user.visible_message(span_warning("[user] holds up [user.p_their()] hand, which explodes in a flash of red light!"), \ span_cultitalic("You attempt to stun [target] with the spell!")) - user.mob_light(range = 3, color = LIGHT_COLOR_BLOOD_MAGIC, duration = 0.2 SECONDS) + user.mob_light(range = 1.1, power = 2, color = LIGHT_COLOR_BLOOD_MAGIC, duration = 0.2 SECONDS) if(IS_HERETIC(target)) to_chat(user, span_warning("Some force greater than you intervenes! [target] is protected by the Forgotten Gods!")) to_chat(target, span_warning("You are protected by your faith to the Forgotten Gods.")) diff --git a/code/modules/clothing/head/cakehat.dm b/code/modules/clothing/head/cakehat.dm index 57369ac24f8..1fc0fa0b05b 100644 --- a/code/modules/clothing/head/cakehat.dm +++ b/code/modules/clothing/head/cakehat.dm @@ -9,8 +9,10 @@ lefthand_file = 'icons/mob/inhands/clothing/hats_lefthand.dmi' righthand_file = 'icons/mob/inhands/clothing/hats_righthand.dmi' armor_type = /datum/armor/none - light_range = 2 //luminosity when on light_system = OVERLAY_LIGHT + light_range = 2 //luminosity when on + light_power = 1.3 + light_color = "#FF964E" flags_cover = HEADCOVERSEYES heat = 999 wound_bonus = 10 diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 2129c598aae..be8323a1186 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -16,6 +16,7 @@ light_system = OVERLAY_LIGHT_DIRECTIONAL light_range = 4 light_power = 0.8 + light_color = "#ffcc99" light_on = FALSE dog_fashion = /datum/dog_fashion/head diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index 90141d281dd..64b83c07650 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -54,6 +54,8 @@ resistance_flags = FIRE_PROOF light_system = OVERLAY_LIGHT_DIRECTIONAL light_range = 4 + light_power = 0.8 + light_color = "#ffcc99" light_on = FALSE var/helmet_on = FALSE var/smile = FALSE diff --git a/code/modules/hydroponics/grown/ambrosia.dm b/code/modules/hydroponics/grown/ambrosia.dm index aa02ba7efa1..2becc390f39 100644 --- a/code/modules/hydroponics/grown/ambrosia.dm +++ b/code/modules/hydroponics/grown/ambrosia.dm @@ -74,6 +74,8 @@ icon_state = "ambrosia_gaia" light_system = OVERLAY_LIGHT light_range = 3 + light_power = 1.2 + light_color = "#ffff00" seed = /obj/item/seeds/ambrosia/gaia wine_power = 70 wine_flavor = "the earthmother's blessing" diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index 56ea43b0c67..6a6df5452bd 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -23,6 +23,8 @@ obj_flags = UNIQUE_RENAME light_system = OVERLAY_LIGHT light_range = 5 + light_power = 1.2 + light_color = "#ffff66" light_on = FALSE var/list/trophies = list() var/charged = TRUE diff --git a/code/modules/mining/lavaland/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm index 00e97dac83e..aff57da45ff 100644 --- a/code/modules/mining/lavaland/tendril_loot.dm +++ b/code/modules/mining/lavaland/tendril_loot.dm @@ -272,7 +272,9 @@ icon = 'icons/obj/lighting.dmi' icon_state = "orb" light_system = OVERLAY_LIGHT - light_range = 7 + light_range = 6 + light_power = 1.2 + light_color = "#79f1ff" light_flags = LIGHT_ATTACHED layer = ABOVE_ALL_MOB_LAYER plane = ABOVE_GAME_PLANE diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 9995821c58c..923507bf189 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -17,8 +17,8 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) hud_type = /datum/hud/ghost movement_type = GROUND | FLYING light_system = OVERLAY_LIGHT - light_range = 1 - light_power = 2 + light_range = 2.5 + light_power = 0.6 light_on = FALSE shift_to_open_context_menu = FALSE var/can_reenter_corpse diff --git a/code/modules/mob/living/basic/bots/_bots.dm b/code/modules/mob/living/basic/bots/_bots.dm index ca1a7c44ba3..d1c306313d7 100644 --- a/code/modules/mob/living/basic/bots/_bots.dm +++ b/code/modules/mob/living/basic/bots/_bots.dm @@ -6,7 +6,6 @@ GLOBAL_LIST_INIT(command_strings, list( "home" = "RETURN HOME", )) - /mob/living/basic/bot icon = 'icons/mob/silicon/aibots.dmi' layer = MOB_LAYER @@ -37,7 +36,7 @@ GLOBAL_LIST_INIT(command_strings, list( faction = list(FACTION_NEUTRAL, FACTION_SILICON, FACTION_TURRET) light_system = OVERLAY_LIGHT light_range = 3 - light_power = 0.9 + light_power = 0.6 speed = 3 req_one_access = list(ACCESS_ROBOTICS) ///The Robot arm attached to this robot - has a 50% chance to drop on death. diff --git a/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm b/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm index 10f3eeede14..18d69105a41 100644 --- a/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm +++ b/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm @@ -10,6 +10,7 @@ anchored = FALSE health = 25 maxHealth = 25 + light_color = "#99ccff" req_one_access = list(ACCESS_ROBOTICS, ACCESS_JANITOR) radio_key = /obj/item/encryptionkey/headset_service diff --git a/code/modules/mob/living/basic/bots/medbot/medbot.dm b/code/modules/mob/living/basic/bots/medbot/medbot.dm index ac540e0acd4..d85adc3ea23 100644 --- a/code/modules/mob/living/basic/bots/medbot/medbot.dm +++ b/code/modules/mob/living/basic/bots/medbot/medbot.dm @@ -11,6 +11,8 @@ health = 20 maxHealth = 20 speed = 2 + light_power = 0.8 + light_color = "#99ccff" pass_flags = PASSMOB | PASSFLAPS status_flags = (CANPUSH | CANSTUN) ai_controller = /datum/ai_controller/basic_controller/bot/medbot diff --git a/code/modules/mob/living/basic/minebots/minebot.dm b/code/modules/mob/living/basic/minebots/minebot.dm index 5422ab4ee2e..11b4530dd7a 100644 --- a/code/modules/mob/living/basic/minebots/minebot.dm +++ b/code/modules/mob/living/basic/minebots/minebot.dm @@ -25,6 +25,9 @@ death_message = "blows apart!" light_system = OVERLAY_LIGHT light_range = 6 + // I want this to be a bit more dim, for vibes + light_power = 0.6 + light_color = "#ff9933" light_on = FALSE combat_mode = FALSE ai_controller = /datum/ai_controller/basic_controller/minebot diff --git a/code/modules/mob/living/basic/space_fauna/ghost.dm b/code/modules/mob/living/basic/space_fauna/ghost.dm index 406d2ecefdd..7545f9cfea3 100644 --- a/code/modules/mob/living/basic/space_fauna/ghost.dm +++ b/code/modules/mob/living/basic/space_fauna/ghost.dm @@ -23,8 +23,8 @@ death_message = "wails, disintegrating into a pile of ectoplasm!" gold_core_spawnable = NO_SPAWN //too spooky for science light_system = OVERLAY_LIGHT - light_range = 1 // same glowing as visible player ghosts - light_power = 2 + light_range = 2.5 // same glowing as visible player ghosts + light_power = 0.6 ai_controller = /datum/ai_controller/basic_controller/ghost ///What hairstyle will this ghost have diff --git a/code/modules/mob/living/silicon/robot/robot_defines.dm b/code/modules/mob/living/silicon/robot/robot_defines.dm index ea1c07e9bd7..12f557962f6 100644 --- a/code/modules/mob/living/silicon/robot/robot_defines.dm +++ b/code/modules/mob/living/silicon/robot/robot_defines.dm @@ -4,7 +4,6 @@ * Definitions for /mob/living/silicon/robot and its children, including AI shells. * */ - /mob/living/silicon/robot name = "Cyborg" real_name = "Cyborg" diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 687cba5dcb2..c64c13b2107 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -25,7 +25,7 @@ faction = list(FACTION_NEUTRAL, FACTION_SILICON, FACTION_TURRET) light_system = OVERLAY_LIGHT light_range = 3 - light_power = 0.9 + light_power = 0.6 del_on_death = TRUE req_one_access = list(ACCESS_ROBOTICS) diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index e91b532d96c..6c0cd6d16ab 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -2,6 +2,7 @@ name = "\improper ED-209 Security Robot" desc = "A security robot. He looks less than thrilled." icon_state = "ed209" + light_color = "#f84e4e" density = TRUE health = 100 maxHealth = 100 diff --git a/code/modules/mob/living/simple_animal/bot/firebot.dm b/code/modules/mob/living/simple_animal/bot/firebot.dm index d82b87634df..f4487bfc9d9 100644 --- a/code/modules/mob/living/simple_animal/bot/firebot.dm +++ b/code/modules/mob/living/simple_animal/bot/firebot.dm @@ -9,6 +9,8 @@ desc = "A little fire extinguishing bot. He looks rather anxious." icon = 'icons/mob/silicon/aibots.dmi' icon_state = "firebot1" + light_color = "#8cffc9" + light_power = 0.8 density = FALSE anchored = FALSE health = 25 diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm index 54335808b8e..71199583317 100644 --- a/code/modules/mob/living/simple_animal/bot/honkbot.dm +++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm @@ -2,6 +2,8 @@ name = "\improper Honkbot" desc = "A little robot. It looks happy with its bike horn." icon_state = "honkbot" + light_color = "#e084f7" + light_power = 1 damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0) combat_mode = FALSE diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index ce5de2d083c..71292405faa 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -13,6 +13,8 @@ name = "\improper MULEbot" desc = "A Multiple Utility Load Effector bot." icon_state = "mulebot0" + light_color = "#ffcc99" + light_power = 0.8 density = TRUE move_resist = MOVE_FORCE_STRONG animate_movement = SLIDE_STEPS diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index c297b2d220b..2f9c3f25f35 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -3,6 +3,8 @@ desc = "A little security robot. He looks less than thrilled." icon = 'icons/mob/silicon/aibots.dmi' icon_state = "secbot" + light_color = "#f56275" + light_power = 0.8 density = FALSE anchored = FALSE health = 25 @@ -102,6 +104,7 @@ /mob/living/simple_animal/bot/secbot/pingsky name = "Officer Pingsky" desc = "It's Officer Pingsky! Delegated to satellite guard duty for harbouring anti-human sentiment." + light_color = "#62baf5" radio_channel = RADIO_CHANNEL_AI_PRIVATE bot_mode_flags = ~(BOT_MODE_CAN_BE_SAPIENT|BOT_MODE_AUTOPATROL) security_mode_flags = SECBOT_DECLARE_ARRESTS | SECBOT_CHECK_IDS | SECBOT_CHECK_RECORDS diff --git a/code/modules/mob/living/simple_animal/bot/vibebot.dm b/code/modules/mob/living/simple_animal/bot/vibebot.dm index d0d550f7737..582b1b5371d 100644 --- a/code/modules/mob/living/simple_animal/bot/vibebot.dm +++ b/code/modules/mob/living/simple_animal/bot/vibebot.dm @@ -10,8 +10,8 @@ maxHealth = 25 pass_flags = PASSMOB | PASSFLAPS light_system = OVERLAY_LIGHT - light_range = 7 - light_power = 3 + light_range = 6 + light_power = 2 hackables = "vibing scanners" radio_key = /obj/item/encryptionkey/headset_service diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index cb93655db05..2911c1b174c 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -166,7 +166,9 @@ layer = FLY_LAYER plane = ABOVE_GAME_PLANE light_system = OVERLAY_LIGHT - light_range = 2 + light_range = 2.5 + light_power = 1.2 + light_color = "#ffff66" duration = 8 var/target diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 2885131cf4d..49bad5734a8 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1069,7 +1069,7 @@ antimagic_color = LIGHT_COLOR_DARK_BLUE playsound(src, 'sound/magic/magic_block_mind.ogg', 50, TRUE) - mob_light(range = 2, color = antimagic_color, duration = 5 SECONDS) + mob_light(range = 2, power = 2, color = antimagic_color, duration = 5 SECONDS) add_overlay(antimagic_effect) addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, cut_overlay), antimagic_effect), 5 SECONDS) diff --git a/code/modules/mod/mod_construction.dm b/code/modules/mod/mod_construction.dm index 8442783d331..ca7be41ec42 100644 --- a/code/modules/mod/mod_construction.dm +++ b/code/modules/mod/mod_construction.dm @@ -60,7 +60,8 @@ Its shape is remarkably similar to that of a MOD core." light_system = OVERLAY_LIGHT light_color = "#cc00cc" - light_range = 2 + light_range = 2.5 + light_power = 1.5 /obj/item/mod/construction/lavalandcore/examine(mob/user) . = ..() diff --git a/code/modules/mod/mod_core.dm b/code/modules/mod/mod_core.dm index 75a5b2385b7..d8138f6f291 100644 --- a/code/modules/mod/mod_core.dm +++ b/code/modules/mod/mod_core.dm @@ -369,7 +369,8 @@ The wires coming out of it could be hooked into a MODsuit." light_system = OVERLAY_LIGHT light_color = "#cc00cc" - light_range = 2 + light_range = 2.5 + light_power = 1.5 // Slightly better than the normal plasma core. // Not super sure if this should just be the same, but will see. maxcharge = 15000 diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index db1921af0bd..6b94a7f91a5 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -7,6 +7,7 @@ icon = 'icons/obj/machines/computer.dmi' icon_state = "laptop" light_on = FALSE + light_power = 1.2 integrity_failure = 0.5 max_integrity = 100 armor_type = /datum/armor/item_modular_computer diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 10a15e88196..27072b8674e 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -327,7 +327,7 @@ item_flags = NO_BLOOD_ON_ITEM light_system = OVERLAY_LIGHT light_range = 1.5 - light_power = 0.75 + light_power = 1.3 light_color = COLOR_SOFT_RED light_on = FALSE dart_insert_projectile_icon_state = "overlay_edagger" diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm index 4bdb1c4d93a..0d5f37cb867 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -10,8 +10,8 @@ worn_icon_state = "camera" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - light_system = OVERLAY_LIGHT //Used as a flash here. - light_range = 8 + light_system = OVERLAY_LIGHT_DIRECTIONAL //Used as a flash here. + light_range = 6 light_color = COLOR_WHITE light_power = FLASH_LIGHT_POWER light_on = FALSE diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index e902a0e1429..e75bbda4d8c 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -11,7 +11,7 @@ impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser light_system = OVERLAY_LIGHT light_range = 1 - light_power = 1 + light_power = 1.4 light_color = COLOR_SOFT_RED ricochets_max = 50 //Honk! ricochet_chance = 80 diff --git a/code/modules/religion/festival/instrument_rites.dm b/code/modules/religion/festival/instrument_rites.dm index d8537f5845e..4b5c1afa18b 100644 --- a/code/modules/religion/festival/instrument_rites.dm +++ b/code/modules/religion/festival/instrument_rites.dm @@ -138,7 +138,7 @@ var/obj/effect/dummy/lighting_obj/moblight/performer_light_obj /datum/religion_rites/song_tuner/light/performer_start_effect(mob/living/carbon/human/performer, atom/song_source) - performer_light_obj = performer.mob_light(8, color = LIGHT_COLOR_DIM_YELLOW) + performer_light_obj = performer.mob_light(8, 1.5, color = LIGHT_COLOR_DIM_YELLOW) /datum/religion_rites/song_tuner/light/Destroy() QDEL_NULL(performer_light_obj) diff --git a/code/modules/research/ordnance/doppler_array.dm b/code/modules/research/ordnance/doppler_array.dm index a6fe3c9f3ac..7afe201f360 100644 --- a/code/modules/research/ordnance/doppler_array.dm +++ b/code/modules/research/ordnance/doppler_array.dm @@ -20,7 +20,7 @@ // Lighting system to better communicate the directions. light_system = OVERLAY_LIGHT_DIRECTIONAL light_range = 4 - light_power = 1 + light_power = 1.5 light_color = COLOR_RED /obj/machinery/doppler_array/Initialize(mapload) diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index fee7f389dca..042ea28be2d 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -94,7 +94,8 @@ w_class = WEIGHT_CLASS_NORMAL toolspeed = 0.7 light_system = OVERLAY_LIGHT - light_range = 1 + light_range = 1.5 + light_power = 1.2 light_color = COLOR_SOFT_RED /obj/item/cautery/advanced/get_all_tool_behaviours() @@ -379,7 +380,8 @@ w_class = WEIGHT_CLASS_NORMAL toolspeed = 0.7 light_system = OVERLAY_LIGHT - light_range = 1 + light_range = 1.5 + light_power = 1.2 light_color = LIGHT_COLOR_BLUE sharpness = SHARP_EDGED @@ -413,7 +415,7 @@ set_light_range(2) else tool_behaviour = TOOL_SCALPEL - set_light_range(1) + set_light_range(1.5) balloon_alert(user, "[active ? "enabled" : "disabled"] bone-cutting mode") playsound(user ? user : src, 'sound/machines/click.ogg', 50, TRUE) diff --git a/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_on.png b/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_on.png index 272f6f25707615fc8cd2810d4ac7906970e50936..8468461cc6e58b44d0dbd8fe7b520190a03cc477 100644 GIT binary patch delta 5348 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 delta 5519 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