mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-23 04:51:32 +01:00
Infestation Overhaul (#5243)
Overview Makes it so that the infestation overhaul is better coded and works better with any station. Instead of picking from a set of 8 areas (2 which don't exist) it picks from any of the station areas without players currently in them. It also removes some of the more dumber spawns (yithians who exist in the sea, and diyaabs which I don't fucking know.), and replaces them with even dumber spawns such as BLUESPACE BEARS and HIVEBOTS. Details Spawns are based on event severity. A minor severity spawns mice and lizards. A moderate one spawns space bats and baby slimes. A major one spawns bluespace bears and hivebots. The chosen spawns can be any area on the station, however some places are limited. The limitation is based on area as well as if there are any players currently present in the area. Don't want bluespace bears to teleport on people.
This commit is contained in:
@@ -127,57 +127,59 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
|
||||
severity = EVENT_LEVEL_MUNDANE
|
||||
available_events = list(
|
||||
// Severity level, event name, even type, base weight, role weights, one shot, min weight, max weight. Last two only used if set and non-zero
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Nothing", /datum/event/nothing, 120),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "APC Damage", /datum/event/apc_damage, 20, list(ASSIGNMENT_ENGINEER = 15)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Brand Intelligence", /datum/event/brand_intelligence, 15, list(ASSIGNMENT_JANITOR = 20), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Camera Damage", /datum/event/camera_damage, 20, list(ASSIGNMENT_ENGINEER = 10)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Economic News", /datum/event/economic_event, 300),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Carp", /datum/event/carp_migration, 20, list(ASSIGNMENT_SECURITY = 10), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Hacker", /datum/event/money_hacker, 10),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Lotto", /datum/event/money_lotto, 0, list(ASSIGNMENT_ANY = 1), 1, 5, 15),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mundane News", /datum/event/mundane_news, 300),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "PDA Spam", /datum/event/pda_spam, 0, list(ASSIGNMENT_ANY = 4), 0, 25, 50),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Vermin Infestation", /datum/event/infestation, 60, list(ASSIGNMENT_JANITOR = 20, ASSIGNMENT_SECURITY = 10)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Wallrot", /datum/event/wallrot, 75, list(ASSIGNMENT_ENGINEER = 5, ASSIGNMENT_GARDENER = 20)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Clogged Vents", /datum/event/vent_clog, 55),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "False Alarm", /datum/event/false_alarm, 100),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Supply Drop", /datum/event/supply_drop, 80),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "CCIA General Notice", /datum/event/ccia_general_notice, 300)
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Nothing", /datum/event/nothing, 120),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "APC Damage", /datum/event/apc_damage, 20, list(ASSIGNMENT_ENGINEER = 15)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Brand Intelligence", /datum/event/brand_intelligence, 15, list(ASSIGNMENT_JANITOR = 20), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Camera Damage", /datum/event/camera_damage, 20, list(ASSIGNMENT_ENGINEER = 10)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Economic News", /datum/event/economic_event, 300),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Carp", /datum/event/carp_migration, 20, list(ASSIGNMENT_SECURITY = 10), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Hacker", /datum/event/money_hacker, 10),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Lotto", /datum/event/money_lotto, 0, list(ASSIGNMENT_ANY = 1), 1, 5, 15),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mundane News", /datum/event/mundane_news, 300),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "PDA Spam", /datum/event/pda_spam, 0, list(ASSIGNMENT_ANY = 4), 0, 25, 50),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Wallrot", /datum/event/wallrot, 75, list(ASSIGNMENT_ENGINEER = 5, ASSIGNMENT_GARDENER = 20)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Clogged Vents", /datum/event/vent_clog, 55),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "False Alarm", /datum/event/false_alarm, 100),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Supply Drop", /datum/event/supply_drop, 80),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "CCIA General Notice", /datum/event/ccia_general_notice, 300),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mundane Vermin Infestation",/datum/event/infestation, 60, list(ASSIGNMENT_JANITOR = 15, ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 15))
|
||||
|
||||
)
|
||||
|
||||
/datum/event_container/moderate
|
||||
severity = EVENT_LEVEL_MODERATE
|
||||
available_events = list(
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Nothing", /datum/event/nothing, 200),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 25)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 50, list(ASSIGNMENT_SECURITY = 25)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 60),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Electrical Storm", /datum/event/electrical_storm, 50, list(ASSIGNMENT_ENGINEER = 5, ASSIGNMENT_JANITOR = 20)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gravity Failure", /datum/event/gravity, 100),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 80),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ionstorm, 0, list(ASSIGNMENT_AI = 45, ASSIGNMENT_CYBORG = 25, ASSIGNMENT_ENGINEER = 6, ASSIGNMENT_SCIENTIST = 6)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_shower, 40, list(ASSIGNMENT_ENGINEER = 13)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_CYBORG = 20),1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Containment Error - Virology", /datum/event/prison_break/virology, 0, list(ASSIGNMENT_MEDICAL = 15, ASSIGNMENT_CYBORG = 20),1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Containment Error - Xenobiology", /datum/event/prison_break/xenobiology, 0, list(ASSIGNMENT_SCIENTIST = 15, ASSIGNMENT_CYBORG = 20),1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Radiation Storm", /datum/event/radiation_storm, 100),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Random Antagonist", /datum/event/random_antag, 0, list(ASSIGNMENT_ANY = 1, ASSIGNMENT_SECURITY = 1),0,10,125, list("Extended")),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 50, list(ASSIGNMENT_SECURITY = 25)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Moderate Spider Infestation",/datum/event/spider_infestation/moderate,50, list(ASSIGNMENT_SECURITY = 25)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Viral Infection", /datum/event/viral_infection, 0, list(ASSIGNMENT_MEDICAL = 12), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Major Vermin Infestation", /datum/event/infestation, 60, list(ASSIGNMENT_JANITOR = 15, ASSIGNMENT_SECURITY = 15))
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Nothing", /datum/event/nothing, 200),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 25)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 50, list(ASSIGNMENT_SECURITY = 25)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 60),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Electrical Storm", /datum/event/electrical_storm, 50, list(ASSIGNMENT_ENGINEER = 5, ASSIGNMENT_JANITOR = 20)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gravity Failure", /datum/event/gravity, 100),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 80),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ionstorm, 0, list(ASSIGNMENT_AI = 45, ASSIGNMENT_CYBORG = 25, ASSIGNMENT_ENGINEER = 6, ASSIGNMENT_SCIENTIST = 6)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_shower, 40, list(ASSIGNMENT_ENGINEER = 13)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_CYBORG = 20),1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Containment Error - Virology", /datum/event/prison_break/virology, 0, list(ASSIGNMENT_MEDICAL = 15, ASSIGNMENT_CYBORG = 20),1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Containment Error - Xenobiology", /datum/event/prison_break/xenobiology, 0, list(ASSIGNMENT_SCIENTIST = 15, ASSIGNMENT_CYBORG = 20),1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Radiation Storm", /datum/event/radiation_storm, 100),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Random Antagonist", /datum/event/random_antag, 0, list(ASSIGNMENT_ANY = 1, ASSIGNMENT_SECURITY = 1),0,10,125, list("Extended")),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 50, list(ASSIGNMENT_SECURITY = 25)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Moderate Spider Infestation", /datum/event/spider_infestation/moderate, 50, list(ASSIGNMENT_SECURITY = 25)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Viral Infection", /datum/event/viral_infection, 0, list(ASSIGNMENT_MEDICAL = 12), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Moderate Vermin Infestation", /datum/event/infestation/moderate, 30, list(ASSIGNMENT_JANITOR = 15, ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 15))
|
||||
)
|
||||
|
||||
/datum/event_container/major
|
||||
severity = EVENT_LEVEL_MAJOR
|
||||
available_events = list(
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Nothing", /datum/event/nothing, 135),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, 40, list(ASSIGNMENT_ENGINEER = 5,ASSIGNMENT_SECURITY = 5), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 50, list(ASSIGNMENT_SECURITY = 10), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 40, list(ASSIGNMENT_ENGINEER = 10),1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Space Vines", /datum/event/spacevine, 75, list(ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_GARDENER = 20), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Viral Infection", /datum/event/viral_infection, 20, list(ASSIGNMENT_MEDICAL = 15), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Spider Infestation",/datum/event/spider_infestation, 25, list(ASSIGNMENT_SECURITY = 10, ASSIGNMENT_MEDICAL = 5), 1)
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Nothing", /datum/event/nothing, 135),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, 40, list(ASSIGNMENT_ENGINEER = 5,ASSIGNMENT_SECURITY = 5), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 50, list(ASSIGNMENT_SECURITY = 10), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 40, list(ASSIGNMENT_ENGINEER = 10),1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Space Vines", /datum/event/spacevine, 75, list(ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_GARDENER = 20), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Viral Infection", /datum/event/viral_infection, 20, list(ASSIGNMENT_MEDICAL = 15), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Spider Infestation", /datum/event/spider_infestation, 25, list(ASSIGNMENT_SECURITY = 10, ASSIGNMENT_MEDICAL = 5), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Major Vermin Infestation", /datum/event/infestation/major, 15, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 10))
|
||||
)
|
||||
|
||||
#undef ASSIGNMENT_ANY
|
||||
|
||||
@@ -1,216 +1,89 @@
|
||||
//Infestation event now has two modes.
|
||||
//Mundane event spawns some creatures in a place, and tells you which and where.
|
||||
//Moderate event spawns twice the amount of two types of creatures, in two places. And tells you where but not what spawns
|
||||
|
||||
|
||||
#define LOC_KITCHEN 0
|
||||
#define LOC_ATMOS 1
|
||||
#define LOC_INCIN 2
|
||||
#define LOC_CHAPEL 3
|
||||
#define LOC_LIBRARY 4
|
||||
#define LOC_HYDRO 5
|
||||
#define LOC_VAULT 6
|
||||
#define LOC_CONSTR 7
|
||||
#define LOC_TECH 8
|
||||
#define LOC_ARMORY 9
|
||||
#define LOC_DORMS 10
|
||||
#define LOC_FITNESS 11
|
||||
#define LOC_HOLODECK 12
|
||||
#define LOC_DISPOSAL 13
|
||||
#define LOC_CARGO 14
|
||||
#define LOC_MEETING 15
|
||||
#define LOC_LOCKER 16
|
||||
#define LOC_XENO 17
|
||||
|
||||
|
||||
#define VERM_MICE 0
|
||||
#define VERM_LIZARDS 1
|
||||
#define VERM_SPIDERS 2
|
||||
#define VERM_DIYAAB 3
|
||||
#define VERM_BATS 4
|
||||
#define VERM_YITHIAN 5
|
||||
#define VERM_TINDALOS 6
|
||||
#define INFESTATION_MICE "mice"
|
||||
#define INFESTATION_LIZARDS "lizards"
|
||||
#define INFESTATION_SPACE_BATS "space bats"
|
||||
#define INFESTATION_SPIDERLINGS "spiderlings"
|
||||
#define INFESTATION_HIVEBOTS "hivebots"
|
||||
#define INFESTATION_SLIMES "slimes"
|
||||
|
||||
/datum/event/infestation
|
||||
startWhen = 1
|
||||
announceWhen = 10
|
||||
endWhen = 11
|
||||
var/location
|
||||
var/numlocs = 0
|
||||
var/list/locstrings = list()
|
||||
var/vermin
|
||||
var/vermstring
|
||||
var/spawn_area_type
|
||||
var/list/turf/simulated/floor/turfs
|
||||
no_fake = 1
|
||||
var/area/chosen_area
|
||||
var/event_name = "Slime Leak"
|
||||
var/chosen_mob = INFESTATION_SLIMES
|
||||
var/chosen_verb = "have leaked into"
|
||||
var/list/chosen_mob_types = list()
|
||||
var/list/possible_mobs = list(
|
||||
INFESTATION_MICE = 1,
|
||||
INFESTATION_LIZARDS = 1
|
||||
)
|
||||
|
||||
/datum/event/infestation/moderate
|
||||
possible_mobs = list(
|
||||
INFESTATION_SPACE_BATS = 1,
|
||||
INFESTATION_SPIDERLINGS = 1
|
||||
)
|
||||
/datum/event/infestation/major
|
||||
possible_mobs = list(
|
||||
INFESTATION_HIVEBOTS = 1,
|
||||
INFESTATION_SLIMES = 1
|
||||
)
|
||||
|
||||
/datum/event/infestation/setup()
|
||||
choose_area()
|
||||
choose_mobs()
|
||||
|
||||
/datum/event/infestation/start()
|
||||
locstrings = new/list(2)
|
||||
choose_location()
|
||||
spawn_creatures()
|
||||
if (severity == EVENT_LEVEL_MODERATE)
|
||||
choose_location()
|
||||
spawn_creatures()
|
||||
spawn_mobs()
|
||||
|
||||
/datum/event/infestation/proc/choose_area()
|
||||
chosen_area = random_station_area(TRUE)
|
||||
|
||||
/datum/event/infestation/proc/choose_mobs()
|
||||
|
||||
chosen_mob = pickweight(possible_mobs)
|
||||
|
||||
switch(chosen_mob)
|
||||
if(INFESTATION_HIVEBOTS)
|
||||
event_name = "Minor Hivebot Invasion"
|
||||
chosen_verb = "have invaded"
|
||||
chosen_mob_types += /mob/living/simple_animal/hostile/hivebot/tele
|
||||
if(INFESTATION_SPACE_BATS)
|
||||
event_name = "Space Bat Nest"
|
||||
chosen_verb = "have been breeding in"
|
||||
for(var/i = 1, i < rand(3,5),i++)
|
||||
chosen_mob_types += /mob/living/simple_animal/hostile/scarybat
|
||||
if(INFESTATION_LIZARDS)
|
||||
event_name = "Lizard Nest"
|
||||
chosen_verb = "have been breeding in"
|
||||
for(var/i = 1, i < rand(6,8),i++)
|
||||
chosen_mob_types += /mob/living/simple_animal/lizard
|
||||
if(INFESTATION_MICE)
|
||||
event_name = "Mouse Nest"
|
||||
chosen_verb = "have been breeding in"
|
||||
var/list/rat_breeds = list(
|
||||
/mob/living/simple_animal/mouse/gray = 4,
|
||||
/mob/living/simple_animal/mouse/brown = 2,
|
||||
/mob/living/simple_animal/mouse/white = 1
|
||||
)
|
||||
for(var/i = 1, i < rand(6,12),i++)
|
||||
chosen_mob_types += pickweight(rat_breeds)
|
||||
if(INFESTATION_SLIMES)
|
||||
event_name = "Slime Leak"
|
||||
chosen_verb = "have leaked into"
|
||||
for(var/i = 1, i < rand(2,4),i++)
|
||||
chosen_mob_types += /mob/living/carbon/slime/
|
||||
if(INFESTATION_SPIDERLINGS)
|
||||
event_name = "Spiderling Infestation"
|
||||
chosen_verb = "have burrowed into"
|
||||
for(var/i = 1, i < rand(3,6),i++)
|
||||
chosen_mob_types += /obj/effect/spider/spiderling
|
||||
chosen_mob_types += /obj/effect/spider/eggcluster
|
||||
|
||||
/datum/event/infestation/proc/choose_location()
|
||||
|
||||
location = rand(0,17)
|
||||
turfs = list()
|
||||
numlocs++
|
||||
switch(location)
|
||||
if(LOC_KITCHEN)
|
||||
spawn_area_type = /area/crew_quarters/kitchen
|
||||
locstrings[numlocs] = "the kitchen"
|
||||
if(LOC_ATMOS)
|
||||
spawn_area_type = /area/engineering/atmos
|
||||
locstrings[numlocs] = "atmospherics"
|
||||
if(LOC_INCIN)
|
||||
spawn_area_type = /area/maintenance/disposal
|
||||
locstrings[numlocs] = "waste disposal"
|
||||
if(LOC_CHAPEL)
|
||||
spawn_area_type = /area/chapel/main
|
||||
locstrings[numlocs] = "the chapel"
|
||||
if(LOC_LIBRARY)
|
||||
spawn_area_type = /area/library
|
||||
locstrings[numlocs] = "the library"
|
||||
if(LOC_HYDRO)
|
||||
spawn_area_type = /area/hydroponics
|
||||
locstrings[numlocs] = "hydroponics"
|
||||
if(LOC_VAULT)
|
||||
spawn_area_type = /area/security/nuke_storage
|
||||
locstrings[numlocs] = "the vault"
|
||||
if(LOC_CONSTR)
|
||||
spawn_area_type = /area/construction
|
||||
locstrings[numlocs] = "the construction area"
|
||||
if(LOC_TECH)
|
||||
spawn_area_type = /area/storage/tech
|
||||
locstrings[numlocs] = "technical storage"
|
||||
if(LOC_ARMORY)
|
||||
spawn_area_type = /area/security/armoury
|
||||
locstrings[numlocs] = "the armoury"
|
||||
if(LOC_DORMS)
|
||||
spawn_area_type = /area/crew_quarters/sleep
|
||||
locstrings[numlocs] = "the dormitories"
|
||||
if(LOC_FITNESS)
|
||||
spawn_area_type = /area/crew_quarters/fitness
|
||||
locstrings[numlocs] = "the fitness room"
|
||||
if(LOC_HOLODECK)
|
||||
spawn_area_type = /area/holodeck/alphadeck
|
||||
locstrings[numlocs] = "the holodeck"
|
||||
if(LOC_DISPOSAL)
|
||||
spawn_area_type = /area/quartermaster/office
|
||||
locstrings[numlocs] = "the cargo disposals office"
|
||||
if(LOC_CARGO)
|
||||
spawn_area_type = /area/quartermaster/loading
|
||||
locstrings[numlocs] = "the cargo bay"
|
||||
if(LOC_MEETING)
|
||||
spawn_area_type = /area/bridge/meeting_room
|
||||
locstrings[numlocs] = "the command meeting room"
|
||||
if(LOC_LOCKER)
|
||||
spawn_area_type = /area/crew_quarters/locker
|
||||
locstrings[numlocs] = "the locker room"
|
||||
if(LOC_XENO)
|
||||
spawn_area_type = /area/rnd/xenobiology
|
||||
locstrings[numlocs] = "xenobiology"
|
||||
|
||||
|
||||
for(var/areapath in typesof(spawn_area_type))
|
||||
var/area/A = locate(areapath)
|
||||
for(var/turf/simulated/floor/F in A.contents)
|
||||
if(turf_clear(F))
|
||||
turfs += F
|
||||
|
||||
|
||||
/datum/event/infestation/proc/spawn_creatures()
|
||||
var/list/spawn_types = list()
|
||||
var/max_number
|
||||
vermin = rand(0,6)
|
||||
switch(vermin)
|
||||
if(VERM_MICE)
|
||||
spawn_types = list(/mob/living/simple_animal/mouse/gray, /mob/living/simple_animal/mouse/brown, /mob/living/simple_animal/mouse/white)
|
||||
max_number = 16
|
||||
//Large quantities of mice aren't a potential lag issue since they decompose to
|
||||
//inert skeletons now
|
||||
vermstring = "mice"
|
||||
if(VERM_LIZARDS)
|
||||
spawn_types = list(/mob/living/simple_animal/lizard)
|
||||
max_number = 12
|
||||
vermstring = "lizards"
|
||||
if(VERM_SPIDERS)
|
||||
spawn_types = list(/obj/effect/spider/spiderling)
|
||||
max_number = 5
|
||||
vermstring = "spiders"
|
||||
if (VERM_DIYAAB)
|
||||
spawn_types = list(/mob/living/simple_animal/hostile/diyaab)
|
||||
max_number = 4
|
||||
vermstring = "strange creatures"
|
||||
if (VERM_BATS)
|
||||
spawn_types = list(/mob/living/simple_animal/hostile/scarybat)
|
||||
max_number = 4
|
||||
vermstring = "space bats"
|
||||
if (VERM_YITHIAN)
|
||||
spawn_types = list(/mob/living/simple_animal/yithian)
|
||||
max_number = 7
|
||||
vermstring = "strange creatures"
|
||||
if (VERM_TINDALOS)
|
||||
spawn_types = list(/mob/living/simple_animal/tindalos)
|
||||
max_number = 7
|
||||
vermstring = "strange creatures"
|
||||
|
||||
|
||||
if (severity == EVENT_LEVEL_MODERATE)
|
||||
max_number *= 2
|
||||
var/num = rand(2,max_number)
|
||||
|
||||
while(turfs.len > 0 && num > 0)
|
||||
var/turf/simulated/floor/T = pick(turfs)
|
||||
|
||||
turfs.Remove(T)
|
||||
num--
|
||||
|
||||
if(vermin == VERM_SPIDERS)
|
||||
var/obj/effect/spider/spiderling/S = new /obj/effect/spider/spiderling(T)
|
||||
S.amount_grown = 1
|
||||
S.growth_rate = (rand(50,300)/1000)//At most, they grow at 30% the usual rate. As low as 1/20th
|
||||
if (severity == EVENT_LEVEL_MODERATE)
|
||||
S.growth_rate *= 2//They grow faster on the higher severity event
|
||||
else
|
||||
var/spawn_type = pick(spawn_types)
|
||||
new spawn_type(T)
|
||||
/datum/event/infestation/proc/spawn_mobs()
|
||||
for(var/spawned_mob in chosen_mob_types)
|
||||
new spawned_mob(chosen_area.random_space())
|
||||
|
||||
/datum/event/infestation/announce()
|
||||
if (severity == EVENT_LEVEL_MODERATE)
|
||||
command_announcement.Announce("Bioscans indicate that large numbers of lifeforms have been breeding in [locstrings[1]] and [locstrings[2]]. Clear them out, before this starts to affect productivity.", "Vermin infestation", new_sound = 'sound/AI/vermin.ogg')
|
||||
else
|
||||
command_announcement.Announce("Bioscans indicate that [vermstring] have been breeding in [locstrings[1]]. Clear them out, before this starts to affect productivity.", "Vermin infestation", new_sound = 'sound/AI/vermin.ogg')
|
||||
|
||||
|
||||
#undef LOC_KITCHEN
|
||||
#undef LOC_ATMOS
|
||||
#undef LOC_INCIN
|
||||
#undef LOC_CHAPEL
|
||||
#undef LOC_LIBRARY
|
||||
#undef LOC_HYDRO
|
||||
#undef LOC_VAULT
|
||||
#undef LOC_CONSTR
|
||||
#undef LOC_TECH
|
||||
#undef LOC_ARMORY
|
||||
#undef LOC_DORMS
|
||||
#undef LOC_FITNESS
|
||||
#undef LOC_HOLODECK
|
||||
#undef LOC_DISPOSAL
|
||||
#undef LOC_CARGO
|
||||
#undef LOC_MEETING
|
||||
#undef LOC_LOCKER
|
||||
#undef LOC_XENO
|
||||
|
||||
#undef VERM_MICE
|
||||
#undef VERM_LIZARDS
|
||||
#undef VERM_SPIDERS
|
||||
#undef VERM_DIYAAB
|
||||
#undef VERM_BATS
|
||||
#undef VERM_YITHIAN
|
||||
#undef VERM_TINDALOS
|
||||
command_announcement.Announce("Bioscans indicate that [chosen_mob] [chosen_verb] [chosen_area]. Clear them out before this starts to affect productivity.", event_name, new_sound = 'sound/AI/vermin.ogg')
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
add_overlay("aslime-:33")
|
||||
|
||||
|
||||
/mob/living/simple_animal/slime/adult/death()
|
||||
/mob/living/simple_animal/adultslime/death()
|
||||
var/mob/living/simple_animal/slime/S1 = new /mob/living/simple_animal/slime (src.loc)
|
||||
S1.icon_state = "[src.colour] baby slime"
|
||||
S1.icon_living = "[src.colour] baby slime"
|
||||
|
||||
@@ -489,7 +489,7 @@
|
||||
//Used to move to a new part of the station when it sees another bear, or it hasnt found any prey
|
||||
/mob/living/simple_animal/hostile/bear/spatial/proc/teleport()
|
||||
if (stat == CONSCIOUS)
|
||||
var/area/A = random_station_area()
|
||||
var/area/A = random_station_area(TRUE) //Don't teleport to areas with players in them.
|
||||
var/turf/target = A.random_space()
|
||||
|
||||
teleport_to(target)
|
||||
|
||||
Reference in New Issue
Block a user