forked from tgstation/tgstation
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Removes COMSIG_AREA_INITIALIZED_IN (tgstation#78143)
Literally just me stealing tgstation#77207 completely muhahahhahahah screw you @Mothblocks I did add some documentation and some radnebula related cleaning and testing to make it work well Copied from original PR: > Please do NOT add code to InitAtom, it is extremely hot. The conditions on this alone were costing nearly 200ms on my extremely powerful machine. > > Changes the radioactive nebula to perform its work by looping over every space tile on init (which on my machine is faster than the time being wasted on this signal), and adds a subsystem that does this in SS_BACKGROUND every 30 seconds (usually completeable in about half a second) for any new atoms, because the effect is hardly noticeable anyway with how green space is. Honestly we really don't care that much about stuff being initialized in space. Everything that walks into space (about everything that matters to players), is completely unaffected by this change, but roundstart is now slightly faster
- Loading branch information
1 parent
8bb2626
commit 1be0841
Showing
8 changed files
with
83 additions
and
27 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
/// Name of the glow we use for the radioation effect outside | ||
#define GLOW_NEBULA "glow_nebula" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
/// Trait for tracking if something already has the fake irradiation effect, so we don't waste time on effect operations if otherwise unnecessary | ||
#define TRAIT_RADIOACTIVE_NEBULA_FAKE_IRRADIATED "radioactive_nebula_fake_irradiated" | ||
|
||
/// Controls making objects irradiated when Radioactive Nebula is in effect. | ||
SUBSYSTEM_DEF(radioactive_nebula) | ||
name = "Radioactive Nebula" | ||
flags = SS_BACKGROUND | ||
wait = 30 SECONDS | ||
|
||
VAR_PRIVATE | ||
datum/station_trait/nebula/hostile/radiation/radioactive_nebula | ||
|
||
/datum/controller/subsystem/radioactive_nebula/Initialize() | ||
radioactive_nebula = locate() in SSstation.station_traits | ||
if (!radioactive_nebula) | ||
can_fire = FALSE | ||
return SS_INIT_NO_NEED | ||
|
||
// We don't *really* care that this happens by the time the server is ready to play. | ||
ASYNC | ||
irradiate_everything() | ||
|
||
// Don't leak that the station trait has been picked | ||
return SS_INIT_NO_MESSAGE | ||
|
||
/// Makes something appear irradiated for the purposes of the Radioactive Nebula | ||
/datum/controller/subsystem/radioactive_nebula/proc/fake_irradiate(atom/movable/target) | ||
if (HAS_TRAIT(target, TRAIT_RADIOACTIVE_NEBULA_FAKE_IRRADIATED)) | ||
return | ||
|
||
ADD_TRAIT(target, TRAIT_RADIOACTIVE_NEBULA_FAKE_IRRADIATED, REF(src)) | ||
|
||
if(iscarbon(target))//Don't actually make EVERY. SINGLE. THING. RADIOACTIVE. Just irradiate people | ||
target.AddComponent( \ | ||
/datum/component/radioactive_exposure, \ | ||
minimum_exposure_time = NEBULA_RADIATION_MINIMUM_EXPOSURE_TIME, \ | ||
irradiation_chance_base = RADIATION_EXPOSURE_NEBULA_BASE_CHANCE, \ | ||
irradiation_chance_increment = RADIATION_EXPOSURE_NEBULA_CHANCE_INCREMENT, \ | ||
irradiation_interval = RADIATION_EXPOSURE_NEBULA_CHECK_INTERVAL, \ | ||
source = src, \ | ||
radioactive_areas = radioactive_nebula.radioactive_areas, \ | ||
) | ||
else if(isobj(target)) //and fake the rest | ||
//outline clashes too much with other outlines and creates pretty ugly lines | ||
target.add_filter(GLOW_NEBULA, 2, list("type" = "drop_shadow", "color" = radioactive_nebula.nebula_radglow, "size" = 2)) | ||
|
||
/datum/controller/subsystem/radioactive_nebula/fire() | ||
irradiate_everything() | ||
|
||
/// Loop through radioactive space (with lag checks) and make it all radioactive! | ||
/datum/controller/subsystem/radioactive_nebula/proc/irradiate_everything() | ||
for (var/area/area as anything in get_areas(radioactive_nebula.radioactive_areas)) | ||
for (var/turf/turf as anything in area.get_contained_turfs()) | ||
for (var/atom/movable/target as anything in turf) | ||
fake_irradiate(target) | ||
|
||
CHECK_TICK | ||
|
||
/// Remove the fake radiation. The compontent we add to mobs handles its own removal | ||
/datum/controller/subsystem/radioactive_nebula/proc/fake_unirradiate(atom/movable/leaver) | ||
REMOVE_TRAIT(leaver, TRAIT_RADIOACTIVE_NEBULA_FAKE_IRRADIATED, REF(src)) | ||
leaver.remove_filter(GLOW_NEBULA) | ||
|
||
#undef TRAIT_RADIOACTIVE_NEBULA_FAKE_IRRADIATED |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters