mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
* Ports climbable & blocked turf Adds the climbable element to replace the copy paste code between machines and structures Ports the code improvements to blocked turf checks, commenting back in its uses that tattax had added but couldnt get functional (fixes ethereal jaunt & hierophant teleporting) Ports over LADYADDASSOCLIST code improvements, this has no effect in-game and mostly in the codebase, it's only ever used in two other locations total. Fixes being able to stack several machines on one tile * fixes climbing on crates * Update climbable.dm * merge conflicts r awesome
76 lines
2.4 KiB
Plaintext
76 lines
2.4 KiB
Plaintext
#define REGAL_RAT_CHANCE 2
|
|
#define PLAGUE_RAT_CHANCE 0
|
|
SUBSYSTEM_DEF(minor_mapping)
|
|
name = "Minor Mapping"
|
|
init_order = INIT_ORDER_MINOR_MAPPING
|
|
flags = SS_NO_FIRE
|
|
|
|
/datum/controller/subsystem/minor_mapping/Initialize(timeofday)
|
|
#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
|
|
#else
|
|
trigger_migration(CONFIG_GET(number/mice_roundstart))
|
|
place_satchels()
|
|
return SS_INIT_SUCCESS
|
|
#endif // the mice are easily the bigger problem, but let's just avoid anything that could cause some bullshit.
|
|
|
|
/datum/controller/subsystem/minor_mapping/proc/trigger_migration(num_mice = 10, special = TRUE)
|
|
var/list/exposed_wires = find_exposed_wires()
|
|
|
|
var/mob/living/simple_animal/M
|
|
var/turf/proposed_turf
|
|
|
|
|
|
while((num_mice > 0) && exposed_wires.len)
|
|
proposed_turf = pick_n_take(exposed_wires)
|
|
if(!M)
|
|
if(special && prob(REGAL_RAT_CHANCE))
|
|
M = new /mob/living/simple_animal/hostile/regalrat/controlled(proposed_turf)
|
|
else if(special && prob(PLAGUE_RAT_CHANCE))
|
|
M = new /mob/living/simple_animal/hostile/rat/plaguerat(proposed_turf)
|
|
notify_ghosts("A plague \a [M] has migrated into the station!", source = M, action=NOTIFY_ORBIT, header="Something Interesting!")
|
|
else
|
|
M = new /mob/living/simple_animal/mouse(proposed_turf)
|
|
else
|
|
M.forceMove(proposed_turf)
|
|
if(M.environment_is_safe())
|
|
num_mice -= 1
|
|
M = null
|
|
|
|
/datum/controller/subsystem/minor_mapping/proc/place_satchels(amount=10)
|
|
var/list/turfs = find_satchel_suitable_turfs()
|
|
|
|
while(turfs.len && amount > 0)
|
|
var/turf/T = pick_n_take(turfs)
|
|
var/obj/item/storage/backpack/satchel/flat/S = new(T)
|
|
S.hide(intact=TRUE)
|
|
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 += block(locate(1,1,z), locate(world.maxx,world.maxy,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/t in block(locate(1,1,z), locate(world.maxx,world.maxy,z)))
|
|
if(isfloorturf(t) && !isplatingturf(t))
|
|
suitable += t
|
|
|
|
return shuffle(suitable)
|
|
|
|
#undef REGAL_RAT_CHANCE
|
|
#undef PLAGUE_RAT_CHANCE
|