From 7401f53d755856c2040bdb548ec4735c1ff90417 Mon Sep 17 00:00:00 2001 From: Cael_Aislinn Date: Sat, 4 Aug 2012 03:41:59 +1000 Subject: [PATCH] tweaks to vermin spawning Signed-off-by: Cael_Aislinn --- code/game/gamemodes/gameticker.dm | 42 +++++++++++-------------- code/modules/critters/critters.dm | 1 + code/modules/mob/simple_animal/mouse.dm | 1 + 3 files changed, 20 insertions(+), 24 deletions(-) diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index 3f94c2be76..3491cadd53 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -37,7 +37,7 @@ var/datum/roundinfo/roundinfo = new() var/vermin_min_spawntime = 3000 //between 5 (3000) and 15 (9000) minutes interval var/vermin_max_spawntime = 9000 var/spawning_vermin = 0 - var/list/vermin_spawn_areas + var/list/vermin_spawn_turfs /datum/controller/gameticker/proc/pregame() login_music = pick('title1.ogg', 'title2.ogg') // choose title music! @@ -57,7 +57,16 @@ var/datum/roundinfo/roundinfo = new() while (!setup()) spawn(10) - vermin_spawn_areas = list("/area/maintenance","/area/mine/maintenance") + var/list/vermin_spawn_areas = list("/area/maintenance","/area/mine/maintenance","/area/crew_quarters/locker/locker_toilet","/area/crew_quarters/toilet") + vermin_spawn_turfs = new/list() + for(var/area_text in vermin_spawn_areas) + var/area_base_type = text2path(area_text) + for(var/area in typesof(area_base_type)) + var/list/area_turfs = get_area_turfs(area) + for(var/turf/T in area_turfs) + if(T.density) + turfs -= T + vermin_spawn_turfs.Add(area_turfs) /datum/controller/gameticker/proc/setup() //Create and announce mode @@ -314,35 +323,20 @@ var/datum/roundinfo/roundinfo = new() world.Reboot() //randomly spawn vermin in maintenance and other areas - if(spawn_vermin && vermin_spawn_areas && vermin_spawn_areas.len) + if(spawn_vermin && vermin_spawn_turfs && vermin_spawn_turfs.len) if(!spawning_vermin) spawning_vermin = 1 spawn(rand(vermin_min_spawntime, vermin_max_spawntime)) - var/area_text = pick(vermin_spawn_areas) - area_text = text2path(area_text) - var/random_area = pick( typesof(area_text) ) - var/list/turfs = get_area_turfs(random_area) - if(!turfs.len) - turfs = get_area_turfs(pick(typesof(pick(vermin_spawn_areas)))) - // - while(turfs.len > 0) - var/turf/T = pick(turfs) - turfs -= T - if(T.density) - continue - var/bad = 0 - for(var/obj/I in T) - if(I.density) - bad = 1 - break - if(bad) - continue + spawning_vermin = 0 + var/turf/T = pick(vermin_spawn_turfs) + if(T) if(prob(50)) new /mob/living/simple_animal/mouse(T) else new /obj/effect/critter/roach(T) - break - spawning_vermin = 0 + else + //no turf, skip this time + vermin_spawn_turfs.Remove(T) return 1 diff --git a/code/modules/critters/critters.dm b/code/modules/critters/critters.dm index bb5ccf0b3b..ce763b3811 100644 --- a/code/modules/critters/critters.dm +++ b/code/modules/critters/critters.dm @@ -164,6 +164,7 @@ atkcarbon = 1 atksilicon = 0 attacktext = "bites" + layer = 2.1 //so they can hide under objects Bump(var/mob/M) if(ishuman(M)) diff --git a/code/modules/mob/simple_animal/mouse.dm b/code/modules/mob/simple_animal/mouse.dm index 0d84ecd9fa..5207ea657b 100644 --- a/code/modules/mob/simple_animal/mouse.dm +++ b/code/modules/mob/simple_animal/mouse.dm @@ -18,6 +18,7 @@ response_harm = "splats the" density = 0 var/color //brown, gray and white + layer = 2.1 //so they can hide under objects /mob/living/simple_animal/mouse/Life() ..()