mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-16 20:52:33 +00:00
* Smugglers satchels will no longer spawn inside the holodeck. (#73164) ## About The Pull Request Once the holodeck is activated the floors become un-removable thus rendering smugglers satchels in-accessible, I'm pretty sure its unintended to place smugglers satchels on the holodeck as the turfs it uses don't allow for any player interaction. I also got rid of some single letter variables. ## Why It's Good For The Game Placing things that are intended to be accessed in inaccessible locations seemed like an oversight to me. ## Changelog 🆑 fix: Smugglers satchels will no longer spawn inside the holodeck. /🆑 * Smugglers satchels will no longer spawn inside the holodeck. --------- Co-authored-by: NamelessFairy <40036527+NamelessFairy@users.noreply.github.com>
79 lines
2.4 KiB
Plaintext
79 lines
2.4 KiB
Plaintext
#define PROB_MOUSE_SPAWN 98
|
|
|
|
SUBSYSTEM_DEF(minor_mapping)
|
|
name = "Minor Mapping"
|
|
init_order = INIT_ORDER_MINOR_MAPPING
|
|
flags = SS_NO_FIRE
|
|
|
|
/datum/controller/subsystem/minor_mapping/Initialize()
|
|
#ifdef UNIT_TESTS // This whole subsystem just introduces a lot of odd confounding variables into unit test situations, so let's just not bother with doing an initialize here.
|
|
return SS_INIT_NO_NEED
|
|
#endif // the mice are easily the bigger problem, but let's just avoid anything that could cause some bullshit.
|
|
trigger_migration(CONFIG_GET(number/mice_roundstart))
|
|
place_satchels()
|
|
return SS_INIT_SUCCESS
|
|
|
|
/datum/controller/subsystem/minor_mapping/proc/trigger_migration(num_mice=10)
|
|
var/list/exposed_wires = find_exposed_wires()
|
|
|
|
var/mob/living/basic/mouse/mouse
|
|
var/turf/open/proposed_turf
|
|
|
|
|
|
while((num_mice > 0) && exposed_wires.len)
|
|
proposed_turf = pick_n_take(exposed_wires)
|
|
|
|
if(!istype(proposed_turf))
|
|
continue
|
|
|
|
if(prob(PROB_MOUSE_SPAWN))
|
|
if(!mouse)
|
|
mouse = new(proposed_turf)
|
|
else
|
|
mouse.forceMove(proposed_turf)
|
|
else
|
|
mouse = new /mob/living/simple_animal/hostile/regalrat/controlled(proposed_turf)
|
|
if(proposed_turf.air.has_gas(/datum/gas/oxygen, 5))
|
|
num_mice -= 1
|
|
mouse = null
|
|
|
|
/datum/controller/subsystem/minor_mapping/proc/place_satchels(amount=10)
|
|
var/list/turfs = find_satchel_suitable_turfs()
|
|
///List of areas where satchels should not be placed.
|
|
var/list/blacklisted_area_types = list(/area/station/holodeck)
|
|
|
|
while(turfs.len && amount > 0)
|
|
var/turf/turf = pick_n_take(turfs)
|
|
if(is_type_in_list(get_area(turf), blacklisted_area_types))
|
|
continue
|
|
var/obj/item/storage/backpack/satchel/flat/flat_satchel = new(turf)
|
|
|
|
SEND_SIGNAL(flat_satchel, COMSIG_OBJ_HIDE, turf.underfloor_accessibility)
|
|
amount--
|
|
|
|
/proc/find_exposed_wires()
|
|
var/list/exposed_wires = list()
|
|
|
|
var/list/all_turfs
|
|
for(var/z in SSmapping.levels_by_trait(ZTRAIT_STATION))
|
|
all_turfs += Z_TURFS(z)
|
|
for(var/turf/open/floor/plating/T in all_turfs)
|
|
if(T.is_blocked_turf())
|
|
continue
|
|
if(locate(/obj/structure/cable) in T)
|
|
exposed_wires += T
|
|
|
|
return shuffle(exposed_wires)
|
|
|
|
/proc/find_satchel_suitable_turfs()
|
|
var/list/suitable = list()
|
|
|
|
for(var/z in SSmapping.levels_by_trait(ZTRAIT_STATION))
|
|
for(var/turf/detected_turf as anything in Z_TURFS(z))
|
|
if(isfloorturf(detected_turf) && detected_turf.underfloor_accessibility == UNDERFLOOR_HIDDEN)
|
|
suitable += detected_turf
|
|
|
|
return shuffle(suitable)
|
|
|
|
#undef PROB_MOUSE_SPAWN
|