mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
67 lines
1.8 KiB
Plaintext
67 lines
1.8 KiB
Plaintext
#define REGAL_RAT_CHANCE 2
|
|
SUBSYSTEM_DEF(minor_mapping)
|
|
name = "Minor Mapping"
|
|
init_order = INIT_ORDER_MINOR_MAPPING
|
|
flags = SS_NO_FIRE
|
|
|
|
/datum/controller/subsystem/minor_mapping/Initialize(timeofday)
|
|
trigger_migration(CONFIG_GET(number/mice_roundstart),FALSE) //we dont want roundstart regal rats
|
|
place_satchels()
|
|
return ..()
|
|
|
|
/datum/controller/subsystem/minor_mapping/proc/trigger_migration(num_mice=10, regal=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(regal && prob(REGAL_RAT_CHANCE))
|
|
M = new /mob/living/simple_animal/hostile/regalrat/controlled(proposed_turf)
|
|
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(is_blocked_turf(T))
|
|
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
|