Skip to content

Commit

Permalink
Fixed lights stopping emitting light in some situations (#84299) (#3589)
Browse files Browse the repository at this point in the history
## About The Pull Request

closes #77789
edt: also closes #82600

Light sources stop emitting light if the tile in which the light source
itself is located and all 4 adjacent tile block the light. This usually
happens when a smoke grenade is thrown, or something went wrong in the
chemistry again

<details>
<summary>Videos</summary>

As it was before


https://github.com/tgstation/tgstation/assets/112967882/44ff556b-d09f-4024-945e-c2c105f511a9

Now


https://github.com/tgstation/tgstation/assets/112967882/9f9f8f43-47a9-47be-8499-99bab39fc166


</details>

## Why It's Good For The Game

You wont need to switch the lights twice to make them work after someone
threw smoke grenades into the hallways anymore

## Changelog
:cl:
fix: Fixed lights stopping emitting light in some situations
/:cl:

---------

Co-authored-by: Kocma-san <[email protected]>
Co-authored-by: Ghom <[email protected]>
  • Loading branch information
3 people authored Sep 28, 2024
1 parent 04aa76d commit b71d1f6
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 0 deletions.
3 changes: 3 additions & 0 deletions code/__DEFINES/dcs/signals/signals_turf.dm
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,6 @@
#define COMSIG_TURF_RESET_ELEVATION "turf_reset_elevation"
#define ELEVATION_CURRENT_PIXEL_SHIFT 1
#define ELEVATION_MAX_PIXEL_SHIFT 2

///Called when turf no longer blocks light from passing through
#define COMSIG_TURF_NO_LONGER_BLOCK_LIGHT "turf_no_longer_block_light"
2 changes: 2 additions & 0 deletions code/modules/lighting/lighting_source.dm
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@
//yes, we register the signal to the top atom too, this is intentional and ensures contained lighting updates properly
if(ismovable(new_atom_host) && new_atom_host == source_atom)
RegisterSignal(new_atom_host, COMSIG_MOVABLE_MOVED, PROC_REF(update_host_lights))
RegisterSignal(new_atom_host, COMSIG_TURF_NO_LONGER_BLOCK_LIGHT, PROC_REF(force_update))
return TRUE

///remove this light source from old_atom_host's light_sources list, unsetting movement registrations
Expand All @@ -98,6 +99,7 @@
LAZYREMOVE(old_atom_host.light_sources, src)
if(ismovable(old_atom_host) && old_atom_host == source_atom)
UnregisterSignal(old_atom_host, COMSIG_MOVABLE_MOVED)
UnregisterSignal(old_atom_host, COMSIG_TURF_NO_LONGER_BLOCK_LIGHT)
return TRUE

// Yes this doesn't align correctly on anything other than 4 width tabs.
Expand Down
3 changes: 3 additions & 0 deletions code/modules/lighting/lighting_turf.dm
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,9 @@
else //If fulltile and opaque, then the whole tile blocks view, no need to continue checking.
directional_opacity = ALL_CARDINALS
break
else
for(var/atom/movable/content as anything in contents)
SEND_SIGNAL(content, COMSIG_TURF_NO_LONGER_BLOCK_LIGHT)
if(. != directional_opacity && (. == ALL_CARDINALS || directional_opacity == ALL_CARDINALS))
reconsider_lights() //The lighting system only cares whether the tile is fully concealed from all directions or not.
reconsider_sunlight() //monkestation addition
Expand Down

0 comments on commit b71d1f6

Please sign in to comment.