mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-21 12:17:40 +01:00
80 lines
2.3 KiB
Plaintext
80 lines
2.3 KiB
Plaintext
/datum/event/disease_outbreak/floor
|
|
var/area/target_area
|
|
var/area/target_turfs = list()
|
|
var/infected_tiles
|
|
|
|
var/list/excluded = list(
|
|
/area/shuttle,
|
|
/area/crew_quarters,
|
|
/area/holodeck,
|
|
/area/construction,
|
|
/area/engineering/engine_room,
|
|
/area/engineering/engine_monitoring,
|
|
/area/engineering/gravgen,
|
|
/area/maintenance,
|
|
/area/medical,
|
|
/area/rnd/test_area,
|
|
/area/solar
|
|
)
|
|
|
|
/datum/event/disease_outbreak/floor/setup()
|
|
. = ..()
|
|
announceWhen = rand(0, 1500)
|
|
endWhen = announceWhen + 1
|
|
|
|
/datum/event/disease_outbreak/floor/announce()
|
|
GLOB.command_announcement.Announce("Confirmed outbreak of level 7 biohazard aboard \the [location_name()]. All personnel must contain the outbreak.", "Infectious Contaminant in [target_area.name]", new_sound = 'sound/AI/outbreak7.ogg')
|
|
|
|
/datum/event/disease_outbreak/floor/start()
|
|
GLOB.current_pending_diseases += chosen_disease
|
|
var/list/area/affected_area = get_station_areas(excluded)
|
|
var/decal
|
|
|
|
for(var/i in 1 to 10)
|
|
var/area/A = pick(affected_area)
|
|
if(is_area_occupied(A))
|
|
log_game("infectedroom event: Rejected [A] because it is occupied.")
|
|
continue
|
|
|
|
var/list/turfs = list()
|
|
for(var/turf/simulated/floor/F in A)
|
|
if(!F.check_density())
|
|
turfs += F
|
|
if(turfs.len == 0)
|
|
log_game("infectedroom event: Rejected [A] because it has no clear turfs.")
|
|
continue
|
|
target_area = A
|
|
target_turfs = turfs
|
|
|
|
if(!target_area)
|
|
log_game("infectedroom event: Giving up after too many failures to pick target area")
|
|
kill()
|
|
return
|
|
else
|
|
log_game("infectedroom event: [target_area] was chosen. Infecting...")
|
|
log_admin("Infected room event started; Virus: [chosen_disease.name]")
|
|
message_admins("Infected room event started; Virus: [chosen_disease.name]")
|
|
|
|
switch(severity)
|
|
if(EVENT_LEVEL_MODERATE)
|
|
infected_tiles = rand(5, 8)
|
|
else
|
|
infected_tiles = rand(7, 10)
|
|
|
|
for(var/i in 1 to infected_tiles)
|
|
decal = rand(1, 5)
|
|
if(decal == 1)
|
|
var/obj/effect/decal/cleanable/blood/C
|
|
C = new(pick_n_take(target_turfs))
|
|
C.basecolor = get_random_colour(rand(0, 1))
|
|
C.update_icon()
|
|
C.viruses |= chosen_disease
|
|
else if(decal == 2)
|
|
var/obj/effect/decal/cleanable/vomit/V
|
|
V = new(pick_n_take(target_turfs))
|
|
V.viruses |= chosen_disease
|
|
else
|
|
var/mob/living/simple_mob/vore/aggressive/macrophage/M
|
|
M = new(pick_n_take(target_turfs))
|
|
M.infections |= chosen_disease
|