[PTBF] [ready for review] Anomalous particulate processing objective. (#30649)

* pausing work on this till pickweight

* push

* more stuff

* proper file it

* these 2 would be interested

* and examine fix

* I should be more awake before resolving merge conflicts

* god you are stupid stop commiting every 2 seconds

* temp buff size change

* Event inhand descriptions

* behold the c o d e

* the rest of the owl

* sprite correction

* 2 more words to the list

* and this one

* yes I am having too much fun with this

* m o r e

* better glow, tech levels

* Apply suggestions from code review

Co-authored-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>
Signed-off-by: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com>

* message admins, variable

* Apply suggestions from code review

Co-authored-by: Taurtura <141481662+Taurtura@users.noreply.github.com>
Signed-off-by: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com>

* PPPProcessor

---------

Signed-off-by: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com>
Co-authored-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>
Co-authored-by: Taurtura <141481662+Taurtura@users.noreply.github.com>
This commit is contained in:
Qwertytoforty
2025-10-24 21:01:03 -04:00
committed by GitHub
parent 07b2f76367
commit 2ecff9033a
27 changed files with 1009 additions and 38 deletions
+4 -1
View File
@@ -13,6 +13,7 @@ GLOBAL_LIST_INIT(huds, list(
DATA_HUD_JANITOR = new/datum/atom_hud/data/janitor(),
DATA_HUD_PRESSURE = new/datum/atom_hud/data/pressure(),
DATA_HUD_MALF_AI = new/datum/atom_hud/data/human/malf_ai(),
DATA_HUD_ANOMALOUS = new/datum/atom_hud/data/anomalous(),
ANTAG_HUD_CULT = new/datum/atom_hud/antag(),
ANTAG_HUD_REV = new/datum/atom_hud/antag(),
ANTAG_HUD_OPS = new/datum/atom_hud/antag(),
@@ -34,6 +35,8 @@ GLOBAL_LIST_INIT(huds, list(
var/list/atom/hudatoms = list() //list of all atoms which display this hud
var/list/mob/hudusers = list() //list with all mobs who can see the hud
var/list/hud_icons = list() //these will be the indexes for the atom's hud_list
/// Do we ignore the invisibility check? Used by anom huds so we can see our stuff.
var/ignore_invisibility_check = FALSE
/datum/atom_hud/New()
@@ -86,7 +89,7 @@ GLOBAL_LIST_INIT(huds, list(
/datum/atom_hud/proc/add_to_single_hud(mob/M, atom/A) //unsafe, no sanity apart from client
if(!M || !M.client || !A)
return
if(A.invisibility > M.see_invisible) // yee yee ass snowflake check for our yee yee ass snowflake huds
if((A.invisibility > M.see_invisible) && !ignore_invisibility_check) // yee yee ass snowflake check for our yee yee ass snowflake huds
return
for(var/i in hud_icons)
if(A.hud_list[i])
+48
View File
@@ -238,3 +238,51 @@
if(random_location.is_safe())
return random_location
/// Returns a random department of areas to pass into get_safe_random_station_turf() for more equal spawning.
/proc/get_safe_random_station_turf_equal_weight()
// Big list of departments, each with lists of each area subtype.
var/static/list/department_areas
if(isnull(department_areas))
department_areas = list(
subtypesof(/area/station/engineering), \
subtypesof(/area/station/medical), \
subtypesof(/area/station/science), \
subtypesof(/area/station/security), \
subtypesof(/area/station/service), \
subtypesof(/area/station/command), \
subtypesof(/area/station/hallway), \
subtypesof(/area/station/supply)
)
var/list/area/final_department = pick(department_areas) // Pick a department
var/list/area/final_area_list = list()
for(var/checked_area in final_department) // Check each area to make sure it exists on the station
if(checked_area in SSmapping.existing_station_areas_types)
final_area_list += checked_area
if(!length(final_area_list)) // Failsafe
return get_safe_random_station_turf()
return get_safe_random_station_turf(final_area_list)
/proc/get_safe_random_station_turf(list/areas_to_pick_from = SSmapping.existing_station_areas_types)
for(var/i in 1 to 5)
var/list/turf_list = get_area_turfs(pick(areas_to_pick_from))
var/turf/target
while(length(turf_list) && !target)
var/I = rand(1, length(turf_list))
var/turf/checked_turf = turf_list[I]
if(!checked_turf.density)
var/clear = TRUE
for(var/obj/checked_object in checked_turf)
if(checked_object.density)
clear = FALSE
break
if(clear)
target = checked_turf
if(!target)
turf_list.Cut(I, I + 1)
if(target)
return target
+3
View File
@@ -261,6 +261,9 @@
/datum/status_effect/bluespace_slowdown/on_remove()
owner.next_move_modifier /= 2
/datum/status_effect/bluespace_slowdown/long
duration = 1 MINUTES
/datum/status_effect/shadow_boxing
id = "shadow barrage"
alert_type = null