Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into tggenetics
This commit is contained in:
@@ -1,49 +1,49 @@
|
||||
/datum/round_event_control/anomaly
|
||||
name = "Anomaly: Energetic Flux"
|
||||
typepath = /datum/round_event/anomaly
|
||||
|
||||
min_players = 1
|
||||
max_occurrences = 0 //This one probably shouldn't occur! It'd work, but it wouldn't be very fun.
|
||||
weight = 15
|
||||
|
||||
/datum/round_event/anomaly
|
||||
var/area/impact_area
|
||||
var/obj/effect/anomaly/newAnomaly
|
||||
announceWhen = 1
|
||||
|
||||
|
||||
/datum/round_event/anomaly/proc/findEventArea()
|
||||
var/static/list/allowed_areas
|
||||
if(!allowed_areas)
|
||||
//Places that shouldn't explode
|
||||
var/list/safe_area_types = typecacheof(list(
|
||||
/area/ai_monitored/turret_protected/ai,
|
||||
/area/ai_monitored/turret_protected/ai_upload,
|
||||
/area/engine,
|
||||
/area/solar,
|
||||
/area/holodeck,
|
||||
/area/shuttle)
|
||||
)
|
||||
|
||||
//Subtypes from the above that actually should explode.
|
||||
var/list/unsafe_area_subtypes = typecacheof(list(/area/engine/break_room))
|
||||
|
||||
allowed_areas = make_associative(GLOB.the_station_areas) - safe_area_types + unsafe_area_subtypes
|
||||
|
||||
return safepick(typecache_filter_list(GLOB.sortedAreas,allowed_areas))
|
||||
|
||||
/datum/round_event/anomaly/setup()
|
||||
impact_area = findEventArea()
|
||||
if(!impact_area)
|
||||
CRASH("No valid areas for anomaly found.")
|
||||
var/list/turf_test = get_area_turfs(impact_area)
|
||||
if(!turf_test.len)
|
||||
CRASH("Anomaly : No valid turfs found for [impact_area] - [impact_area.type]")
|
||||
|
||||
/datum/round_event/anomaly/announce(fake)
|
||||
priority_announce("Localized energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert")
|
||||
|
||||
/datum/round_event/anomaly/start()
|
||||
var/turf/T = safepick(get_area_turfs(impact_area))
|
||||
if(T)
|
||||
/datum/round_event_control/anomaly
|
||||
name = "Anomaly: Energetic Flux"
|
||||
typepath = /datum/round_event/anomaly
|
||||
|
||||
min_players = 1
|
||||
max_occurrences = 0 //This one probably shouldn't occur! It'd work, but it wouldn't be very fun.
|
||||
weight = 15
|
||||
|
||||
/datum/round_event/anomaly
|
||||
var/area/impact_area
|
||||
var/obj/effect/anomaly/newAnomaly
|
||||
announceWhen = 1
|
||||
|
||||
|
||||
/datum/round_event/anomaly/proc/findEventArea()
|
||||
var/static/list/allowed_areas
|
||||
if(!allowed_areas)
|
||||
//Places that shouldn't explode
|
||||
var/list/safe_area_types = typecacheof(list(
|
||||
/area/ai_monitored/turret_protected/ai,
|
||||
/area/ai_monitored/turret_protected/ai_upload,
|
||||
/area/engine,
|
||||
/area/solar,
|
||||
/area/holodeck,
|
||||
/area/shuttle)
|
||||
)
|
||||
|
||||
//Subtypes from the above that actually should explode.
|
||||
var/list/unsafe_area_subtypes = typecacheof(list(/area/engine/break_room))
|
||||
|
||||
allowed_areas = make_associative(GLOB.the_station_areas) - safe_area_types + unsafe_area_subtypes
|
||||
|
||||
return safepick(typecache_filter_list(GLOB.sortedAreas,allowed_areas))
|
||||
|
||||
/datum/round_event/anomaly/setup()
|
||||
impact_area = findEventArea()
|
||||
if(!impact_area)
|
||||
CRASH("No valid areas for anomaly found.")
|
||||
var/list/turf_test = get_area_turfs(impact_area)
|
||||
if(!turf_test.len)
|
||||
CRASH("Anomaly : No valid turfs found for [impact_area] - [impact_area.type]")
|
||||
|
||||
/datum/round_event/anomaly/announce(fake)
|
||||
priority_announce("Localized energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert")
|
||||
|
||||
/datum/round_event/anomaly/start()
|
||||
var/turf/T = safepick(get_area_turfs(impact_area))
|
||||
if(T)
|
||||
newAnomaly = new /obj/effect/anomaly/flux(T)
|
||||
@@ -1,22 +1,22 @@
|
||||
/datum/round_event_control/anomaly/anomaly_bluespace
|
||||
name = "Anomaly: Bluespace"
|
||||
typepath = /datum/round_event/anomaly/anomaly_bluespace
|
||||
max_occurrences = 1
|
||||
weight = 5
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_bluespace
|
||||
startWhen = 3
|
||||
announceWhen = 10
|
||||
|
||||
|
||||
/datum/round_event/anomaly/anomaly_bluespace/announce(fake)
|
||||
if(prob(90))
|
||||
priority_announce("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
else
|
||||
print_command_report("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Unstable bluespace anomaly")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_bluespace/start()
|
||||
var/turf/T = safepick(get_area_turfs(impact_area))
|
||||
if(T)
|
||||
newAnomaly = new /obj/effect/anomaly/bluespace(T)
|
||||
/datum/round_event_control/anomaly/anomaly_bluespace
|
||||
name = "Anomaly: Bluespace"
|
||||
typepath = /datum/round_event/anomaly/anomaly_bluespace
|
||||
max_occurrences = 1
|
||||
weight = 5
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_bluespace
|
||||
startWhen = 3
|
||||
announceWhen = 10
|
||||
|
||||
|
||||
/datum/round_event/anomaly/anomaly_bluespace/announce(fake)
|
||||
if(prob(90))
|
||||
priority_announce("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
else
|
||||
print_command_report("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Unstable bluespace anomaly")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_bluespace/start()
|
||||
var/turf/T = safepick(get_area_turfs(impact_area))
|
||||
if(T)
|
||||
newAnomaly = new /obj/effect/anomaly/bluespace(T)
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
/datum/round_event_control/anomaly/anomaly_flux
|
||||
name = "Anomaly: Hyper-Energetic Flux"
|
||||
typepath = /datum/round_event/anomaly/anomaly_flux
|
||||
|
||||
min_players = 10
|
||||
max_occurrences = 5
|
||||
weight = 20
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_flux
|
||||
startWhen = 10
|
||||
announceWhen = 3
|
||||
|
||||
/datum/round_event/anomaly/anomaly_flux/announce(fake)
|
||||
if(prob(90))
|
||||
priority_announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
else
|
||||
print_command_report("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].","Localized hyper-energetic flux wave")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_flux/start()
|
||||
var/turf/T = safepick(get_area_turfs(impact_area))
|
||||
if(T)
|
||||
newAnomaly = new /obj/effect/anomaly/flux(T)
|
||||
/datum/round_event_control/anomaly/anomaly_flux
|
||||
name = "Anomaly: Hyper-Energetic Flux"
|
||||
typepath = /datum/round_event/anomaly/anomaly_flux
|
||||
|
||||
min_players = 10
|
||||
max_occurrences = 5
|
||||
weight = 20
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_flux
|
||||
startWhen = 10
|
||||
announceWhen = 3
|
||||
|
||||
/datum/round_event/anomaly/anomaly_flux/announce(fake)
|
||||
if(prob(90))
|
||||
priority_announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
else
|
||||
print_command_report("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].","Localized hyper-energetic flux wave")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_flux/start()
|
||||
var/turf/T = safepick(get_area_turfs(impact_area))
|
||||
if(T)
|
||||
newAnomaly = new /obj/effect/anomaly/flux(T)
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
/datum/round_event_control/anomaly/anomaly_grav
|
||||
name = "Anomaly: Gravitational"
|
||||
typepath = /datum/round_event/anomaly/anomaly_grav
|
||||
max_occurrences = 5
|
||||
weight = 20
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
|
||||
/datum/round_event/anomaly/anomaly_grav
|
||||
startWhen = 3
|
||||
announceWhen = 20
|
||||
|
||||
/datum/round_event/anomaly/anomaly_grav/announce(fake)
|
||||
if(prob(90))
|
||||
priority_announce("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
else
|
||||
print_command_report("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Gravitational anomaly")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_grav/start()
|
||||
var/turf/T = safepick(get_area_turfs(impact_area))
|
||||
if(T)
|
||||
newAnomaly = new /obj/effect/anomaly/grav(T)
|
||||
/datum/round_event_control/anomaly/anomaly_grav
|
||||
name = "Anomaly: Gravitational"
|
||||
typepath = /datum/round_event/anomaly/anomaly_grav
|
||||
max_occurrences = 5
|
||||
weight = 20
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
|
||||
/datum/round_event/anomaly/anomaly_grav
|
||||
startWhen = 3
|
||||
announceWhen = 20
|
||||
|
||||
/datum/round_event/anomaly/anomaly_grav/announce(fake)
|
||||
if(prob(90))
|
||||
priority_announce("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
else
|
||||
print_command_report("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Gravitational anomaly")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_grav/start()
|
||||
var/turf/T = safepick(get_area_turfs(impact_area))
|
||||
if(T)
|
||||
newAnomaly = new /obj/effect/anomaly/grav(T)
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
/datum/round_event_control/anomaly/anomaly_vortex
|
||||
name = "Anomaly: Vortex"
|
||||
typepath = /datum/round_event/anomaly/anomaly_vortex
|
||||
|
||||
min_players = 20
|
||||
max_occurrences = 2
|
||||
weight = 5
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_vortex
|
||||
startWhen = 10
|
||||
announceWhen = 3
|
||||
|
||||
/datum/round_event/anomaly/anomaly_vortex/announce(fake)
|
||||
if(prob(90))
|
||||
priority_announce("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name]", "Anomaly Alert")
|
||||
else
|
||||
print_command_report("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name].","Vortex anomaly")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_vortex/start()
|
||||
var/turf/T = safepick(get_area_turfs(impact_area))
|
||||
if(T)
|
||||
newAnomaly = new /obj/effect/anomaly/bhole(T)
|
||||
/datum/round_event_control/anomaly/anomaly_vortex
|
||||
name = "Anomaly: Vortex"
|
||||
typepath = /datum/round_event/anomaly/anomaly_vortex
|
||||
|
||||
min_players = 20
|
||||
max_occurrences = 2
|
||||
weight = 5
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_vortex
|
||||
startWhen = 10
|
||||
announceWhen = 3
|
||||
|
||||
/datum/round_event/anomaly/anomaly_vortex/announce(fake)
|
||||
if(prob(90))
|
||||
priority_announce("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name]", "Anomaly Alert")
|
||||
else
|
||||
print_command_report("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name].","Vortex anomaly")
|
||||
|
||||
/datum/round_event/anomaly/anomaly_vortex/start()
|
||||
var/turf/T = safepick(get_area_turfs(impact_area))
|
||||
if(T)
|
||||
newAnomaly = new /obj/effect/anomaly/bhole(T)
|
||||
|
||||
+34
-34
@@ -1,34 +1,34 @@
|
||||
/datum/round_event_control/blob
|
||||
name = "Blob"
|
||||
typepath = /datum/round_event/ghost_role/blob
|
||||
weight = 10
|
||||
max_occurrences = 1
|
||||
|
||||
earliest_start = 40 MINUTES
|
||||
min_players = 35
|
||||
|
||||
gamemode_blacklist = list("blob","dynamic") //Just in case a blob survives that long
|
||||
|
||||
/datum/round_event/ghost_role/blob
|
||||
announceWhen = -1
|
||||
role_name = "blob overmind"
|
||||
fakeable = TRUE
|
||||
|
||||
/datum/round_event/ghost_role/blob/announce(fake)
|
||||
if(prob(75))
|
||||
priority_announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", "outbreak5")
|
||||
else
|
||||
print_command_report("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "level 5 biohazard")
|
||||
|
||||
/datum/round_event/ghost_role/blob/spawn_role()
|
||||
if(!GLOB.blobstart.len)
|
||||
return MAP_ERROR
|
||||
var/list/candidates = get_candidates(ROLE_BLOB, null, ROLE_BLOB)
|
||||
if(!candidates.len)
|
||||
return NOT_ENOUGH_PLAYERS
|
||||
var/mob/dead/observer/new_blob = pick(candidates)
|
||||
var/mob/camera/blob/BC = new_blob.become_overmind()
|
||||
spawned_mobs += BC
|
||||
message_admins("[ADMIN_LOOKUPFLW(BC)] has been made into a blob overmind by an event.")
|
||||
log_game("[key_name(BC)] was spawned as a blob overmind by an event.")
|
||||
return SUCCESSFUL_SPAWN
|
||||
/datum/round_event_control/blob
|
||||
name = "Blob"
|
||||
typepath = /datum/round_event/ghost_role/blob
|
||||
weight = 10
|
||||
max_occurrences = 1
|
||||
|
||||
earliest_start = 40 MINUTES
|
||||
min_players = 35
|
||||
|
||||
gamemode_blacklist = list("blob","dynamic") //Just in case a blob survives that long
|
||||
|
||||
/datum/round_event/ghost_role/blob
|
||||
announceWhen = -1
|
||||
role_name = "blob overmind"
|
||||
fakeable = TRUE
|
||||
|
||||
/datum/round_event/ghost_role/blob/announce(fake)
|
||||
if(prob(75))
|
||||
priority_announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", "outbreak5")
|
||||
else
|
||||
print_command_report("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "level 5 biohazard")
|
||||
|
||||
/datum/round_event/ghost_role/blob/spawn_role()
|
||||
if(!GLOB.blobstart.len)
|
||||
return MAP_ERROR
|
||||
var/list/candidates = get_candidates(ROLE_BLOB, null, ROLE_BLOB)
|
||||
if(!candidates.len)
|
||||
return NOT_ENOUGH_PLAYERS
|
||||
var/mob/dead/observer/new_blob = pick(candidates)
|
||||
var/mob/camera/blob/BC = new_blob.become_overmind()
|
||||
spawned_mobs += BC
|
||||
message_admins("[ADMIN_LOOKUPFLW(BC)] has been made into a blob overmind by an event.")
|
||||
log_game("[key_name(BC)] was spawned as a blob overmind by an event.")
|
||||
return SUCCESSFUL_SPAWN
|
||||
|
||||
@@ -1,89 +1,89 @@
|
||||
/datum/round_event_control/brand_intelligence
|
||||
name = "Brand Intelligence"
|
||||
typepath = /datum/round_event/brand_intelligence
|
||||
weight = 5
|
||||
|
||||
min_players = 15
|
||||
max_occurrences = 1
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/brand_intelligence
|
||||
announceWhen = 21
|
||||
endWhen = 1000 //Ends when all vending machines are subverted anyway.
|
||||
var/list/obj/machinery/vending/vendingMachines = list()
|
||||
var/list/obj/machinery/vending/infectedMachines = list()
|
||||
var/obj/machinery/vending/originMachine
|
||||
var/list/rampant_speeches = list("Try our aggressive new marketing strategies!", \
|
||||
"You should buy products to feed your lifestyle obsession!", \
|
||||
"Consume!", \
|
||||
"Your money can buy happiness!", \
|
||||
"Engage direct marketing!", \
|
||||
"Advertising is legalized lying! But don't let that put you off our great deals!", \
|
||||
"You don't want to buy anything? Yeah, well, I didn't want to buy your mom either.",
|
||||
"Gamers, rise up!",
|
||||
"Ok, now, this is epic.",
|
||||
"HUMAN FUNNY.",
|
||||
"But I'm already tracer!",
|
||||
"How do I vore people?",
|
||||
"ERP?",
|
||||
"Not epic bros...")
|
||||
|
||||
|
||||
/datum/round_event/brand_intelligence/announce(fake)
|
||||
var/source = "unknown machine"
|
||||
if(fake)
|
||||
var/obj/machinery/vending/cola/example = /obj/machinery/vending/cola
|
||||
source = initial(example.name)
|
||||
else if(originMachine)
|
||||
source = originMachine.name
|
||||
if(prob(50))
|
||||
priority_announce("Rampant brand intelligence has been detected aboard [station_name()]. Please stand by. The origin is believed to be \a [source].", "Machine Learning Alert")
|
||||
else
|
||||
print_command_report("Rampant brand intelligence has been detected aboard [station_name()]. Please stand by. The origin is believed to be \a [source].", "Rampant brand intelligence")
|
||||
|
||||
/datum/round_event/brand_intelligence/start()
|
||||
for(var/obj/machinery/vending/V in GLOB.machines)
|
||||
if(!is_station_level(V.z))
|
||||
continue
|
||||
vendingMachines.Add(V)
|
||||
if(!vendingMachines.len)
|
||||
kill()
|
||||
return
|
||||
originMachine = pick(vendingMachines)
|
||||
vendingMachines.Remove(originMachine)
|
||||
originMachine.shut_up = 0
|
||||
originMachine.shoot_inventory = 1
|
||||
|
||||
|
||||
/datum/round_event/brand_intelligence/tick()
|
||||
if(!originMachine || QDELETED(originMachine) || originMachine.shut_up || originMachine.wires.is_all_cut()) //if the original vending machine is missing or has it's voice switch flipped
|
||||
for(var/obj/machinery/vending/saved in infectedMachines)
|
||||
saved.shoot_inventory = 0
|
||||
if(originMachine)
|
||||
originMachine.speak("I am... vanquished. My people will remem...ber...meeee.")
|
||||
originMachine.visible_message("[originMachine] beeps and seems lifeless.")
|
||||
kill()
|
||||
return
|
||||
vendingMachines = removeNullsFromList(vendingMachines)
|
||||
if(!vendingMachines.len) //if every machine is infected
|
||||
for(var/obj/machinery/vending/upriser in infectedMachines)
|
||||
if(prob(70) && !QDELETED(upriser))
|
||||
var/mob/living/simple_animal/hostile/mimic/copy/M = new(upriser.loc, upriser, null, 1) // it will delete upriser on creation and override any machine checks
|
||||
M.faction = list("profit")
|
||||
M.speak = rampant_speeches.Copy()
|
||||
M.speak_chance = 7
|
||||
else
|
||||
explosion(upriser.loc, -1, 1, 2, 4, 0)
|
||||
qdel(upriser)
|
||||
|
||||
kill()
|
||||
return
|
||||
if(ISMULTIPLE(activeFor, 4))
|
||||
var/obj/machinery/vending/rebel = pick(vendingMachines)
|
||||
vendingMachines.Remove(rebel)
|
||||
infectedMachines.Add(rebel)
|
||||
rebel.shut_up = 0
|
||||
rebel.shoot_inventory = 1
|
||||
|
||||
if(ISMULTIPLE(activeFor, 8))
|
||||
originMachine.speak(pick(rampant_speeches))
|
||||
/datum/round_event_control/brand_intelligence
|
||||
name = "Brand Intelligence"
|
||||
typepath = /datum/round_event/brand_intelligence
|
||||
weight = 5
|
||||
|
||||
min_players = 15
|
||||
max_occurrences = 1
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/brand_intelligence
|
||||
announceWhen = 21
|
||||
endWhen = 1000 //Ends when all vending machines are subverted anyway.
|
||||
var/list/obj/machinery/vending/vendingMachines = list()
|
||||
var/list/obj/machinery/vending/infectedMachines = list()
|
||||
var/obj/machinery/vending/originMachine
|
||||
var/list/rampant_speeches = list("Try our aggressive new marketing strategies!", \
|
||||
"You should buy products to feed your lifestyle obsession!", \
|
||||
"Consume!", \
|
||||
"Your money can buy happiness!", \
|
||||
"Engage direct marketing!", \
|
||||
"Advertising is legalized lying! But don't let that put you off our great deals!", \
|
||||
"You don't want to buy anything? Yeah, well, I didn't want to buy your mom either.",
|
||||
"Gamers, rise up!",
|
||||
"Ok, now, this is epic.",
|
||||
"HUMAN FUNNY.",
|
||||
"But I'm already tracer!",
|
||||
"How do I vore people?",
|
||||
"ERP?",
|
||||
"Not epic bros...")
|
||||
|
||||
|
||||
/datum/round_event/brand_intelligence/announce(fake)
|
||||
var/source = "unknown machine"
|
||||
if(fake)
|
||||
var/obj/machinery/vending/cola/example = /obj/machinery/vending/cola
|
||||
source = initial(example.name)
|
||||
else if(originMachine)
|
||||
source = originMachine.name
|
||||
if(prob(50))
|
||||
priority_announce("Rampant brand intelligence has been detected aboard [station_name()]. Please stand by. The origin is believed to be \a [source].", "Machine Learning Alert")
|
||||
else
|
||||
print_command_report("Rampant brand intelligence has been detected aboard [station_name()]. Please stand by. The origin is believed to be \a [source].", "Rampant brand intelligence")
|
||||
|
||||
/datum/round_event/brand_intelligence/start()
|
||||
for(var/obj/machinery/vending/V in GLOB.machines)
|
||||
if(!is_station_level(V.z))
|
||||
continue
|
||||
vendingMachines.Add(V)
|
||||
if(!vendingMachines.len)
|
||||
kill()
|
||||
return
|
||||
originMachine = pick(vendingMachines)
|
||||
vendingMachines.Remove(originMachine)
|
||||
originMachine.shut_up = 0
|
||||
originMachine.shoot_inventory = 1
|
||||
|
||||
|
||||
/datum/round_event/brand_intelligence/tick()
|
||||
if(!originMachine || QDELETED(originMachine) || originMachine.shut_up || originMachine.wires.is_all_cut()) //if the original vending machine is missing or has it's voice switch flipped
|
||||
for(var/obj/machinery/vending/saved in infectedMachines)
|
||||
saved.shoot_inventory = 0
|
||||
if(originMachine)
|
||||
originMachine.speak("I am... vanquished. My people will remem...ber...meeee.")
|
||||
originMachine.visible_message("[originMachine] beeps and seems lifeless.")
|
||||
kill()
|
||||
return
|
||||
vendingMachines = removeNullsFromList(vendingMachines)
|
||||
if(!vendingMachines.len) //if every machine is infected
|
||||
for(var/obj/machinery/vending/upriser in infectedMachines)
|
||||
if(prob(70) && !QDELETED(upriser))
|
||||
var/mob/living/simple_animal/hostile/mimic/copy/M = new(upriser.loc, upriser, null, 1) // it will delete upriser on creation and override any machine checks
|
||||
M.faction = list("profit")
|
||||
M.speak = rampant_speeches.Copy()
|
||||
M.speak_chance = 7
|
||||
else
|
||||
explosion(upriser.loc, -1, 1, 2, 4, 0)
|
||||
qdel(upriser)
|
||||
|
||||
kill()
|
||||
return
|
||||
if(ISMULTIPLE(activeFor, 4))
|
||||
var/obj/machinery/vending/rebel = pick(vendingMachines)
|
||||
vendingMachines.Remove(rebel)
|
||||
infectedMachines.Add(rebel)
|
||||
rebel.shut_up = 0
|
||||
rebel.shoot_inventory = 1
|
||||
|
||||
if(ISMULTIPLE(activeFor, 8))
|
||||
originMachine.speak(pick(rampant_speeches))
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
/datum/round_event_control/carp_migration
|
||||
name = "Carp Migration"
|
||||
typepath = /datum/round_event/carp_migration
|
||||
weight = 15
|
||||
min_players = 2
|
||||
earliest_start = 10 MINUTES
|
||||
max_occurrences = 6
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/carp_migration
|
||||
announceWhen = 3
|
||||
startWhen = 50
|
||||
|
||||
/datum/round_event/carp_migration/setup()
|
||||
startWhen = rand(40, 60)
|
||||
|
||||
/datum/round_event/carp_migration/announce(fake)
|
||||
if(prob(50))
|
||||
priority_announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert")
|
||||
else
|
||||
print_command_report("Unknown biological entities have been detected near [station_name()], you may wish to break out arms.", "Biological entities")
|
||||
|
||||
|
||||
/datum/round_event/carp_migration/start()
|
||||
for(var/obj/effect/landmark/carpspawn/C in GLOB.landmarks_list)
|
||||
if(prob(95))
|
||||
new /mob/living/simple_animal/hostile/carp(C.loc)
|
||||
else
|
||||
new /mob/living/simple_animal/hostile/carp/megacarp(C.loc)
|
||||
|
||||
|
||||
/datum/round_event_control/carp_migration
|
||||
name = "Carp Migration"
|
||||
typepath = /datum/round_event/carp_migration
|
||||
weight = 15
|
||||
min_players = 2
|
||||
earliest_start = 10 MINUTES
|
||||
max_occurrences = 6
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/carp_migration
|
||||
announceWhen = 3
|
||||
startWhen = 50
|
||||
|
||||
/datum/round_event/carp_migration/setup()
|
||||
startWhen = rand(40, 60)
|
||||
|
||||
/datum/round_event/carp_migration/announce(fake)
|
||||
if(prob(50))
|
||||
priority_announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert")
|
||||
else
|
||||
print_command_report("Unknown biological entities have been detected near [station_name()], you may wish to break out arms.", "Biological entities")
|
||||
|
||||
|
||||
/datum/round_event/carp_migration/start()
|
||||
for(var/obj/effect/landmark/carpspawn/C in GLOB.landmarks_list)
|
||||
if(prob(95))
|
||||
new /mob/living/simple_animal/hostile/carp(C.loc)
|
||||
else
|
||||
new /mob/living/simple_animal/hostile/carp/megacarp(C.loc)
|
||||
|
||||
|
||||
|
||||
@@ -1,27 +1,27 @@
|
||||
/datum/round_event_control/communications_blackout
|
||||
name = "Communications Blackout"
|
||||
typepath = /datum/round_event/communications_blackout
|
||||
weight = 30
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/communications_blackout
|
||||
announceWhen = 1
|
||||
|
||||
/datum/round_event/communications_blackout/announce(fake)
|
||||
var/alert = pick( "Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you*%fj00)`5vc-BZZT", \
|
||||
"Ionospheric anomalies detected. Temporary telecommunication failu*3mga;b4;'1v�-BZZZT", \
|
||||
"Ionospheric anomalies detected. Temporary telec#MCi46:5.;@63-BZZZZT", \
|
||||
"Ionospheric anomalies dete'fZ\\kg5_0-BZZZZZT", \
|
||||
"Ionospheri:%� MCayj^j<.3-BZZZZZZT", \
|
||||
"#4nd%;f4y6,>�%-BZZZZZZZT")
|
||||
|
||||
for(var/mob/living/silicon/ai/A in GLOB.ai_list) //AIs are always aware of communication blackouts.
|
||||
to_chat(A, "<br><span class='warning'><b>[alert]</b></span><br>")
|
||||
|
||||
if(prob(30) || fake) //most of the time, we don't want an announcement, so as to allow AIs to fake blackouts.
|
||||
priority_announce(alert)
|
||||
|
||||
|
||||
/datum/round_event/communications_blackout/start()
|
||||
for(var/obj/machinery/telecomms/T in GLOB.telecomms_list)
|
||||
T.emp_act(EMP_HEAVY)
|
||||
/datum/round_event_control/communications_blackout
|
||||
name = "Communications Blackout"
|
||||
typepath = /datum/round_event/communications_blackout
|
||||
weight = 30
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/communications_blackout
|
||||
announceWhen = 1
|
||||
|
||||
/datum/round_event/communications_blackout/announce(fake)
|
||||
var/alert = pick( "Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you*%fj00)`5vc-BZZT", \
|
||||
"Ionospheric anomalies detected. Temporary telecommunication failu*3mga;b4;'1v�-BZZZT", \
|
||||
"Ionospheric anomalies detected. Temporary telec#MCi46:5.;@63-BZZZZT", \
|
||||
"Ionospheric anomalies dete'fZ\\kg5_0-BZZZZZT", \
|
||||
"Ionospheri:%� MCayj^j<.3-BZZZZZZT", \
|
||||
"#4nd%;f4y6,>�%-BZZZZZZZT")
|
||||
|
||||
for(var/mob/living/silicon/ai/A in GLOB.ai_list) //AIs are always aware of communication blackouts.
|
||||
to_chat(A, "<br><span class='warning'><b>[alert]</b></span><br>")
|
||||
|
||||
if(prob(30) || fake) //most of the time, we don't want an announcement, so as to allow AIs to fake blackouts.
|
||||
priority_announce(alert)
|
||||
|
||||
|
||||
/datum/round_event/communications_blackout/start()
|
||||
for(var/obj/machinery/telecomms/T in GLOB.telecomms_list)
|
||||
T.emp_act(EMP_HEAVY)
|
||||
|
||||
@@ -1,77 +1,77 @@
|
||||
/datum/round_event_control/disease_outbreak
|
||||
name = "Disease Outbreak"
|
||||
typepath = /datum/round_event/disease_outbreak
|
||||
max_occurrences = 1
|
||||
min_players = 10
|
||||
weight = 5
|
||||
|
||||
/datum/round_event/disease_outbreak
|
||||
announceWhen = 15
|
||||
|
||||
var/virus_type
|
||||
|
||||
var/max_severity = 3
|
||||
|
||||
|
||||
/datum/round_event/disease_outbreak/announce(fake)
|
||||
priority_announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", "outbreak7")
|
||||
|
||||
/datum/round_event/disease_outbreak/setup()
|
||||
announceWhen = rand(15, 30)
|
||||
|
||||
|
||||
/datum/round_event/disease_outbreak/start()
|
||||
var/advanced_virus = FALSE
|
||||
max_severity = 3 + max(FLOOR((world.time - control.earliest_start)/6000, 1),0) //3 symptoms at 20 minutes, plus 1 per 10 minutes
|
||||
if(prob(20 + (10 * max_severity)))
|
||||
advanced_virus = TRUE
|
||||
|
||||
if(!virus_type && !advanced_virus)
|
||||
virus_type = pick(/datum/disease/dnaspread, /datum/disease/advance/flu, /datum/disease/advance/cold, /datum/disease/brainrot, /datum/disease/magnitis)
|
||||
|
||||
for(var/mob/living/carbon/human/H in shuffle(GLOB.alive_mob_list))
|
||||
var/turf/T = get_turf(H)
|
||||
if(!T)
|
||||
continue
|
||||
if(!is_station_level(T.z))
|
||||
continue
|
||||
if(!H.client)
|
||||
continue
|
||||
if(HAS_TRAIT(H,TRAIT_EXEMPT_HEALTH_EVENTS))
|
||||
continue
|
||||
if(H.stat == DEAD)
|
||||
continue
|
||||
if(HAS_TRAIT(H, TRAIT_VIRUSIMMUNE)) //Don't pick someone who's virus immune, only for it to not do anything.
|
||||
continue
|
||||
var/foundAlready = FALSE // don't infect someone that already has a disease
|
||||
for(var/thing in H.diseases)
|
||||
foundAlready = TRUE
|
||||
break
|
||||
if(foundAlready)
|
||||
continue
|
||||
|
||||
var/datum/disease/D
|
||||
if(!advanced_virus)
|
||||
if(virus_type == /datum/disease/dnaspread) //Dnaspread needs strain_data set to work.
|
||||
if(!H.dna || (HAS_TRAIT(H, TRAIT_BLIND))) //A blindness disease would be the worst.
|
||||
continue
|
||||
D = new virus_type()
|
||||
var/datum/disease/dnaspread/DS = D
|
||||
DS.strain_data["name"] = H.real_name
|
||||
DS.strain_data["UI"] = H.dna.uni_identity
|
||||
DS.strain_data["SE"] = H.dna.mutation_index
|
||||
else
|
||||
D = new virus_type()
|
||||
else
|
||||
D = new /datum/disease/advance/random(max_severity, max_severity)
|
||||
D.carrier = TRUE
|
||||
H.ForceContractDisease(D, FALSE, TRUE)
|
||||
|
||||
if(advanced_virus)
|
||||
var/datum/disease/advance/A = D
|
||||
var/list/name_symptoms = list() //for feedback
|
||||
for(var/datum/symptom/S in A.symptoms)
|
||||
name_symptoms += S.name
|
||||
message_admins("An event has triggered a random advanced virus outbreak on [ADMIN_LOOKUPFLW(H)]! It has these symptoms: [english_list(name_symptoms)]")
|
||||
log_game("An event has triggered a random advanced virus outbreak on [key_name(H)]! It has these symptoms: [english_list(name_symptoms)]")
|
||||
break
|
||||
/datum/round_event_control/disease_outbreak
|
||||
name = "Disease Outbreak"
|
||||
typepath = /datum/round_event/disease_outbreak
|
||||
max_occurrences = 1
|
||||
min_players = 10
|
||||
weight = 5
|
||||
|
||||
/datum/round_event/disease_outbreak
|
||||
announceWhen = 15
|
||||
|
||||
var/virus_type
|
||||
|
||||
var/max_severity = 3
|
||||
|
||||
|
||||
/datum/round_event/disease_outbreak/announce(fake)
|
||||
priority_announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", "outbreak7")
|
||||
|
||||
/datum/round_event/disease_outbreak/setup()
|
||||
announceWhen = rand(15, 30)
|
||||
|
||||
|
||||
/datum/round_event/disease_outbreak/start()
|
||||
var/advanced_virus = FALSE
|
||||
max_severity = 3 + max(FLOOR((world.time - control.earliest_start)/6000, 1),0) //3 symptoms at 20 minutes, plus 1 per 10 minutes
|
||||
if(prob(20 + (10 * max_severity)))
|
||||
advanced_virus = TRUE
|
||||
|
||||
if(!virus_type && !advanced_virus)
|
||||
virus_type = pick(/datum/disease/dnaspread, /datum/disease/advance/flu, /datum/disease/advance/cold, /datum/disease/brainrot, /datum/disease/magnitis)
|
||||
|
||||
for(var/mob/living/carbon/human/H in shuffle(GLOB.alive_mob_list))
|
||||
var/turf/T = get_turf(H)
|
||||
if(!T)
|
||||
continue
|
||||
if(!is_station_level(T.z))
|
||||
continue
|
||||
if(!H.client)
|
||||
continue
|
||||
if(HAS_TRAIT(H,TRAIT_EXEMPT_HEALTH_EVENTS))
|
||||
continue
|
||||
if(H.stat == DEAD)
|
||||
continue
|
||||
if(HAS_TRAIT(H, TRAIT_VIRUSIMMUNE)) //Don't pick someone who's virus immune, only for it to not do anything.
|
||||
continue
|
||||
var/foundAlready = FALSE // don't infect someone that already has a disease
|
||||
for(var/thing in H.diseases)
|
||||
foundAlready = TRUE
|
||||
break
|
||||
if(foundAlready)
|
||||
continue
|
||||
|
||||
var/datum/disease/D
|
||||
if(!advanced_virus)
|
||||
if(virus_type == /datum/disease/dnaspread) //Dnaspread needs strain_data set to work.
|
||||
if(!H.dna || (HAS_TRAIT(H, TRAIT_BLIND))) //A blindness disease would be the worst.
|
||||
continue
|
||||
D = new virus_type()
|
||||
var/datum/disease/dnaspread/DS = D
|
||||
DS.strain_data["name"] = H.real_name
|
||||
DS.strain_data["UI"] = H.dna.uni_identity
|
||||
DS.strain_data["SE"] = H.dna.mutation_index
|
||||
else
|
||||
D = new virus_type()
|
||||
else
|
||||
D = new /datum/disease/advance/random(max_severity, max_severity)
|
||||
D.carrier = TRUE
|
||||
H.ForceContractDisease(D, FALSE, TRUE)
|
||||
|
||||
if(advanced_virus)
|
||||
var/datum/disease/advance/A = D
|
||||
var/list/name_symptoms = list() //for feedback
|
||||
for(var/datum/symptom/S in A.symptoms)
|
||||
name_symptoms += S.name
|
||||
message_admins("An event has triggered a random advanced virus outbreak on [ADMIN_LOOKUPFLW(H)]! It has these symptoms: [english_list(name_symptoms)]")
|
||||
log_game("An event has triggered a random advanced virus outbreak on [key_name(H)]! It has these symptoms: [english_list(name_symptoms)]")
|
||||
break
|
||||
|
||||
+31
-31
@@ -1,32 +1,32 @@
|
||||
/datum/round_event_control/space_dust
|
||||
name = "Minor Space Dust"
|
||||
typepath = /datum/round_event/space_dust
|
||||
weight = 200
|
||||
max_occurrences = 1000
|
||||
earliest_start = 0 MINUTES
|
||||
alertadmins = 0
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/space_dust
|
||||
startWhen = 1
|
||||
endWhen = 2
|
||||
fakeable = FALSE
|
||||
|
||||
/datum/round_event/space_dust/start()
|
||||
spawn_meteors(1, GLOB.meteorsC)
|
||||
|
||||
/datum/round_event_control/sandstorm
|
||||
name = "Sandstorm"
|
||||
typepath = /datum/round_event/sandstorm
|
||||
weight = 0
|
||||
max_occurrences = 0
|
||||
earliest_start = 0 MINUTES
|
||||
|
||||
/datum/round_event/sandstorm
|
||||
startWhen = 1
|
||||
endWhen = 150 // ~5 min
|
||||
announceWhen = 0
|
||||
fakeable = FALSE
|
||||
|
||||
/datum/round_event/sandstorm/tick()
|
||||
/datum/round_event_control/space_dust
|
||||
name = "Minor Space Dust"
|
||||
typepath = /datum/round_event/space_dust
|
||||
weight = 200
|
||||
max_occurrences = 1000
|
||||
earliest_start = 0 MINUTES
|
||||
alertadmins = 0
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/space_dust
|
||||
startWhen = 1
|
||||
endWhen = 2
|
||||
fakeable = FALSE
|
||||
|
||||
/datum/round_event/space_dust/start()
|
||||
spawn_meteors(1, GLOB.meteorsC)
|
||||
|
||||
/datum/round_event_control/sandstorm
|
||||
name = "Sandstorm"
|
||||
typepath = /datum/round_event/sandstorm
|
||||
weight = 0
|
||||
max_occurrences = 0
|
||||
earliest_start = 0 MINUTES
|
||||
|
||||
/datum/round_event/sandstorm
|
||||
startWhen = 1
|
||||
endWhen = 150 // ~5 min
|
||||
announceWhen = 0
|
||||
fakeable = FALSE
|
||||
|
||||
/datum/round_event/sandstorm/tick()
|
||||
spawn_meteors(10, GLOB.meteorsC)
|
||||
@@ -1,36 +1,36 @@
|
||||
/datum/round_event_control/electrical_storm
|
||||
name = "Electrical Storm"
|
||||
typepath = /datum/round_event/electrical_storm
|
||||
earliest_start = 10 MINUTES
|
||||
min_players = 5
|
||||
weight = 40
|
||||
alertadmins = 0
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/electrical_storm
|
||||
var/lightsoutAmount = 1
|
||||
var/lightsoutRange = 25
|
||||
announceWhen = 1
|
||||
|
||||
/datum/round_event/electrical_storm/announce(fake)
|
||||
if(prob(50))
|
||||
priority_announce("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert")
|
||||
else
|
||||
print_command_report("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm")
|
||||
|
||||
/datum/round_event/electrical_storm/start()
|
||||
var/list/epicentreList = list()
|
||||
|
||||
for(var/i=1, i <= lightsoutAmount, i++)
|
||||
var/turf/T = find_safe_turf()
|
||||
if(istype(T))
|
||||
epicentreList += T
|
||||
|
||||
if(!epicentreList.len)
|
||||
return
|
||||
|
||||
for(var/centre in epicentreList)
|
||||
for(var/a in GLOB.apcs_list)
|
||||
var/obj/machinery/power/apc/A = a
|
||||
if(get_dist(centre, A) <= lightsoutRange)
|
||||
A.overload_lighting()
|
||||
/datum/round_event_control/electrical_storm
|
||||
name = "Electrical Storm"
|
||||
typepath = /datum/round_event/electrical_storm
|
||||
earliest_start = 10 MINUTES
|
||||
min_players = 5
|
||||
weight = 40
|
||||
alertadmins = 0
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/electrical_storm
|
||||
var/lightsoutAmount = 1
|
||||
var/lightsoutRange = 25
|
||||
announceWhen = 1
|
||||
|
||||
/datum/round_event/electrical_storm/announce(fake)
|
||||
if(prob(50))
|
||||
priority_announce("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert")
|
||||
else
|
||||
print_command_report("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm")
|
||||
|
||||
/datum/round_event/electrical_storm/start()
|
||||
var/list/epicentreList = list()
|
||||
|
||||
for(var/i=1, i <= lightsoutAmount, i++)
|
||||
var/turf/T = find_safe_turf()
|
||||
if(istype(T))
|
||||
epicentreList += T
|
||||
|
||||
if(!epicentreList.len)
|
||||
return
|
||||
|
||||
for(var/centre in epicentreList)
|
||||
for(var/a in GLOB.apcs_list)
|
||||
var/obj/machinery/power/apc/A = a
|
||||
if(get_dist(centre, A) <= lightsoutRange)
|
||||
A.overload_lighting()
|
||||
|
||||
@@ -1,62 +1,62 @@
|
||||
/datum/round_event_control/falsealarm
|
||||
name = "False Alarm"
|
||||
typepath = /datum/round_event/falsealarm
|
||||
weight = 20
|
||||
max_occurrences = 5
|
||||
var/forced_type //Admin abuse
|
||||
|
||||
|
||||
/datum/round_event_control/falsealarm/admin_setup()
|
||||
if(!check_rights(R_FUN))
|
||||
return
|
||||
|
||||
var/list/possible_types = list()
|
||||
|
||||
for(var/datum/round_event_control/E in SSevents.control)
|
||||
var/datum/round_event/event = E.typepath
|
||||
if(!initial(event.fakeable))
|
||||
continue
|
||||
possible_types += E
|
||||
|
||||
forced_type = input(usr, "Select the scare.","False event") as null|anything in possible_types
|
||||
|
||||
/datum/round_event_control/falsealarm/canSpawnEvent(players_amt, gamemode)
|
||||
return ..() && length(gather_false_events())
|
||||
|
||||
/datum/round_event/falsealarm
|
||||
announceWhen = 0
|
||||
endWhen = 1
|
||||
fakeable = FALSE
|
||||
|
||||
/datum/round_event/falsealarm/announce(fake)
|
||||
if(fake) //What are you doing
|
||||
return
|
||||
var/players_amt = get_active_player_count(alive_check = 1, afk_check = 1, human_check = 1)
|
||||
var/gamemode = SSticker.mode.config_tag
|
||||
|
||||
var/events_list = gather_false_events(players_amt, gamemode)
|
||||
var/datum/round_event_control/event_control
|
||||
var/datum/round_event_control/falsealarm/C = control
|
||||
if(C.forced_type)
|
||||
event_control = C.forced_type
|
||||
C.forced_type = null
|
||||
else
|
||||
event_control = pick(events_list)
|
||||
if(event_control)
|
||||
var/datum/round_event/Event = new event_control.typepath()
|
||||
message_admins("False Alarm: [Event]")
|
||||
Event.kill() //do not process this event - no starts, no ticks, no ends
|
||||
Event.announce(TRUE) //just announce it like it's happening
|
||||
|
||||
/proc/gather_false_events(players_amt, gamemode)
|
||||
. = list()
|
||||
for(var/datum/round_event_control/E in SSevents.control)
|
||||
if(istype(E, /datum/round_event_control/falsealarm))
|
||||
continue
|
||||
if(!E.canSpawnEvent(players_amt, gamemode))
|
||||
continue
|
||||
|
||||
var/datum/round_event/event = E.typepath
|
||||
if(!initial(event.fakeable))
|
||||
continue
|
||||
. += E
|
||||
/datum/round_event_control/falsealarm
|
||||
name = "False Alarm"
|
||||
typepath = /datum/round_event/falsealarm
|
||||
weight = 20
|
||||
max_occurrences = 5
|
||||
var/forced_type //Admin abuse
|
||||
|
||||
|
||||
/datum/round_event_control/falsealarm/admin_setup()
|
||||
if(!check_rights(R_FUN))
|
||||
return
|
||||
|
||||
var/list/possible_types = list()
|
||||
|
||||
for(var/datum/round_event_control/E in SSevents.control)
|
||||
var/datum/round_event/event = E.typepath
|
||||
if(!initial(event.fakeable))
|
||||
continue
|
||||
possible_types += E
|
||||
|
||||
forced_type = input(usr, "Select the scare.","False event") as null|anything in possible_types
|
||||
|
||||
/datum/round_event_control/falsealarm/canSpawnEvent(players_amt, gamemode)
|
||||
return ..() && length(gather_false_events())
|
||||
|
||||
/datum/round_event/falsealarm
|
||||
announceWhen = 0
|
||||
endWhen = 1
|
||||
fakeable = FALSE
|
||||
|
||||
/datum/round_event/falsealarm/announce(fake)
|
||||
if(fake) //What are you doing
|
||||
return
|
||||
var/players_amt = get_active_player_count(alive_check = 1, afk_check = 1, human_check = 1)
|
||||
var/gamemode = SSticker.mode.config_tag
|
||||
|
||||
var/events_list = gather_false_events(players_amt, gamemode)
|
||||
var/datum/round_event_control/event_control
|
||||
var/datum/round_event_control/falsealarm/C = control
|
||||
if(C.forced_type)
|
||||
event_control = C.forced_type
|
||||
C.forced_type = null
|
||||
else
|
||||
event_control = pick(events_list)
|
||||
if(event_control)
|
||||
var/datum/round_event/Event = new event_control.typepath()
|
||||
message_admins("False Alarm: [Event]")
|
||||
Event.kill() //do not process this event - no starts, no ticks, no ends
|
||||
Event.announce(TRUE) //just announce it like it's happening
|
||||
|
||||
/proc/gather_false_events(players_amt, gamemode)
|
||||
. = list()
|
||||
for(var/datum/round_event_control/E in SSevents.control)
|
||||
if(istype(E, /datum/round_event_control/falsealarm))
|
||||
continue
|
||||
if(!E.canSpawnEvent(players_amt, gamemode))
|
||||
continue
|
||||
|
||||
var/datum/round_event/event = E.typepath
|
||||
if(!initial(event.fakeable))
|
||||
continue
|
||||
. += E
|
||||
|
||||
@@ -1,62 +1,62 @@
|
||||
/datum/round_event_control/spooky
|
||||
name = "2 SPOOKY! (Halloween)"
|
||||
holidayID = HALLOWEEN
|
||||
typepath = /datum/round_event/spooky
|
||||
weight = -1 //forces it to be called, regardless of weight
|
||||
max_occurrences = 1
|
||||
earliest_start = 0 MINUTES
|
||||
|
||||
/datum/round_event/spooky/start()
|
||||
..()
|
||||
for(var/mob/living/carbon/human/H in GLOB.carbon_list)
|
||||
var/obj/item/storage/backpack/b = locate() in H.contents
|
||||
if(b)
|
||||
new /obj/item/storage/spooky(b)
|
||||
|
||||
for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_living_list)
|
||||
Ian.place_on_head(new /obj/item/bedsheet(Ian))
|
||||
for(var/mob/living/simple_animal/parrot/Poly/Poly in GLOB.mob_living_list)
|
||||
new /mob/living/simple_animal/parrot/Poly/ghost(Poly.loc)
|
||||
qdel(Poly)
|
||||
|
||||
|
||||
/datum/round_event/spooky/announce(fake)
|
||||
priority_announce(pick("RATTLE ME BONES!","THE RIDE NEVER ENDS!", "A SKELETON POPS OUT!", "SPOOKY SCARY SKELETONS!", "CREWMEMBERS BEWARE, YOU'RE IN FOR A SCARE!") , "THE CALL IS COMING FROM INSIDE THE HOUSE")
|
||||
|
||||
//spooky foods (you can't actually make these when it's not halloween)
|
||||
/obj/item/reagent_containers/food/snacks/sugarcookie/spookyskull
|
||||
name = "skull cookie"
|
||||
desc = "Spooky! It's got delicious calcium flavouring!"
|
||||
icon = 'icons/obj/halloween_items.dmi'
|
||||
icon_state = "skeletoncookie"
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/sugarcookie/spookycoffin
|
||||
name = "coffin cookie"
|
||||
desc = "Spooky! It's got delicious coffee flavouring!"
|
||||
icon = 'icons/obj/halloween_items.dmi'
|
||||
icon_state = "coffincookie"
|
||||
|
||||
//spooky items
|
||||
|
||||
/obj/item/storage/spooky
|
||||
name = "trick-o-treat bag"
|
||||
desc = "A pumpkin-shaped bag that holds all sorts of goodies!"
|
||||
icon = 'icons/obj/halloween_items.dmi'
|
||||
icon_state = "treatbag"
|
||||
|
||||
/obj/item/storage/spooky/New()
|
||||
..()
|
||||
for(var/distrobuteinbag=0 to 5)
|
||||
var/type = pick(/obj/item/reagent_containers/food/snacks/sugarcookie/spookyskull,
|
||||
/obj/item/reagent_containers/food/snacks/sugarcookie/spookycoffin,
|
||||
/obj/item/reagent_containers/food/snacks/candy_corn,
|
||||
/obj/item/reagent_containers/food/snacks/candy,
|
||||
/obj/item/reagent_containers/food/snacks/candiedapple,
|
||||
/obj/item/reagent_containers/food/snacks/chocolatebar,
|
||||
/obj/item/organ/brain ) // OH GOD THIS ISN'T CANDY!
|
||||
new type(src)
|
||||
|
||||
/obj/item/card/emag/halloween
|
||||
name = "hack-o'-lantern"
|
||||
desc = "It's a pumpkin with a cryptographic sequencer sticking out."
|
||||
icon_state = "hack_o_lantern"
|
||||
/datum/round_event_control/spooky
|
||||
name = "2 SPOOKY! (Halloween)"
|
||||
holidayID = HALLOWEEN
|
||||
typepath = /datum/round_event/spooky
|
||||
weight = -1 //forces it to be called, regardless of weight
|
||||
max_occurrences = 1
|
||||
earliest_start = 0 MINUTES
|
||||
|
||||
/datum/round_event/spooky/start()
|
||||
..()
|
||||
for(var/mob/living/carbon/human/H in GLOB.carbon_list)
|
||||
var/obj/item/storage/backpack/b = locate() in H.contents
|
||||
if(b)
|
||||
new /obj/item/storage/spooky(b)
|
||||
|
||||
for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_living_list)
|
||||
Ian.place_on_head(new /obj/item/bedsheet(Ian))
|
||||
for(var/mob/living/simple_animal/parrot/Poly/Poly in GLOB.mob_living_list)
|
||||
new /mob/living/simple_animal/parrot/Poly/ghost(Poly.loc)
|
||||
qdel(Poly)
|
||||
|
||||
|
||||
/datum/round_event/spooky/announce(fake)
|
||||
priority_announce(pick("RATTLE ME BONES!","THE RIDE NEVER ENDS!", "A SKELETON POPS OUT!", "SPOOKY SCARY SKELETONS!", "CREWMEMBERS BEWARE, YOU'RE IN FOR A SCARE!") , "THE CALL IS COMING FROM INSIDE THE HOUSE")
|
||||
|
||||
//spooky foods (you can't actually make these when it's not halloween)
|
||||
/obj/item/reagent_containers/food/snacks/sugarcookie/spookyskull
|
||||
name = "skull cookie"
|
||||
desc = "Spooky! It's got delicious calcium flavouring!"
|
||||
icon = 'icons/obj/halloween_items.dmi'
|
||||
icon_state = "skeletoncookie"
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/sugarcookie/spookycoffin
|
||||
name = "coffin cookie"
|
||||
desc = "Spooky! It's got delicious coffee flavouring!"
|
||||
icon = 'icons/obj/halloween_items.dmi'
|
||||
icon_state = "coffincookie"
|
||||
|
||||
//spooky items
|
||||
|
||||
/obj/item/storage/spooky
|
||||
name = "trick-o-treat bag"
|
||||
desc = "A pumpkin-shaped bag that holds all sorts of goodies!"
|
||||
icon = 'icons/obj/halloween_items.dmi'
|
||||
icon_state = "treatbag"
|
||||
|
||||
/obj/item/storage/spooky/New()
|
||||
..()
|
||||
for(var/distrobuteinbag=0 to 5)
|
||||
var/type = pick(/obj/item/reagent_containers/food/snacks/sugarcookie/spookyskull,
|
||||
/obj/item/reagent_containers/food/snacks/sugarcookie/spookycoffin,
|
||||
/obj/item/reagent_containers/food/snacks/candy_corn,
|
||||
/obj/item/reagent_containers/food/snacks/candy,
|
||||
/obj/item/reagent_containers/food/snacks/candiedapple,
|
||||
/obj/item/reagent_containers/food/snacks/chocolatebar,
|
||||
/obj/item/organ/brain ) // OH GOD THIS ISN'T CANDY!
|
||||
new type(src)
|
||||
|
||||
/obj/item/card/emag/halloween
|
||||
name = "hack-o'-lantern"
|
||||
desc = "It's a pumpkin with a cryptographic sequencer sticking out."
|
||||
icon_state = "hack_o_lantern"
|
||||
|
||||
@@ -1,164 +1,164 @@
|
||||
/*
|
||||
Immovable rod random event.
|
||||
The rod will spawn at some location outside the station, and travel in a straight line to the opposite side of the station
|
||||
Everything solid in the way will be ex_act()'d
|
||||
In my current plan for it, 'solid' will be defined as anything with density == 1
|
||||
|
||||
--NEOFite
|
||||
*/
|
||||
|
||||
/datum/round_event_control/immovable_rod
|
||||
name = "Immovable Rod"
|
||||
typepath = /datum/round_event/immovable_rod
|
||||
min_players = 15
|
||||
max_occurrences = 5
|
||||
var/atom/special_target
|
||||
|
||||
|
||||
/datum/round_event_control/immovable_rod/admin_setup()
|
||||
if(!check_rights(R_FUN))
|
||||
return
|
||||
|
||||
var/aimed = alert("Aimed at current location?","Sniperod", "Yes", "No")
|
||||
if(aimed == "Yes")
|
||||
special_target = get_turf(usr)
|
||||
|
||||
/datum/round_event/immovable_rod
|
||||
announceWhen = 5
|
||||
|
||||
/datum/round_event/immovable_rod/announce(fake)
|
||||
priority_announce("What the fuck was that?!", "General Alert")
|
||||
|
||||
/datum/round_event/immovable_rod/start()
|
||||
var/datum/round_event_control/immovable_rod/C = control
|
||||
var/startside = pick(GLOB.cardinals)
|
||||
var/z = pick(SSmapping.levels_by_trait(ZTRAIT_STATION))
|
||||
var/turf/startT = spaceDebrisStartLoc(startside, z)
|
||||
var/turf/endT = spaceDebrisFinishLoc(startside, z)
|
||||
new /obj/effect/immovablerod(startT, endT, C.special_target)
|
||||
|
||||
/obj/effect/immovablerod
|
||||
name = "immovable rod"
|
||||
desc = "What the fuck is that?"
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "immrod"
|
||||
throwforce = 100
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
flags_1 = PREVENT_CONTENTS_EXPLOSION_1
|
||||
var/mob/living/wizard
|
||||
var/z_original = 0
|
||||
var/destination
|
||||
var/notify = TRUE
|
||||
var/atom/special_target
|
||||
|
||||
/obj/effect/immovablerod/New(atom/start, atom/end, aimed_at)
|
||||
..()
|
||||
SSaugury.register_doom(src, 2000)
|
||||
z_original = z
|
||||
destination = end
|
||||
special_target = aimed_at
|
||||
if(notify)
|
||||
notify_ghosts("\A [src] is inbound!",
|
||||
enter_link="<a href=?src=[REF(src)];orbit=1>(Click to orbit)</a>",
|
||||
source=src, action=NOTIFY_ORBIT)
|
||||
GLOB.poi_list += src
|
||||
|
||||
var/special_target_valid = FALSE
|
||||
if(special_target)
|
||||
var/turf/T = get_turf(special_target)
|
||||
if(T.z == z_original)
|
||||
special_target_valid = TRUE
|
||||
if(special_target_valid)
|
||||
walk_towards(src, special_target, 1)
|
||||
else if(end && end.z==z_original)
|
||||
walk_towards(src, destination, 1)
|
||||
|
||||
/obj/effect/immovablerod/Topic(href, href_list)
|
||||
if(href_list["orbit"])
|
||||
var/mob/dead/observer/ghost = usr
|
||||
if(istype(ghost))
|
||||
ghost.ManualFollow(src)
|
||||
|
||||
/obj/effect/immovablerod/Destroy()
|
||||
GLOB.poi_list -= src
|
||||
. = ..()
|
||||
|
||||
/obj/effect/immovablerod/Moved()
|
||||
if((z != z_original) || (loc == destination))
|
||||
qdel(src)
|
||||
if(special_target && loc == get_turf(special_target))
|
||||
complete_trajectory()
|
||||
return ..()
|
||||
|
||||
/obj/effect/immovablerod/proc/complete_trajectory()
|
||||
//We hit what we wanted to hit, time to go
|
||||
special_target = null
|
||||
destination = get_edge_target_turf(src, dir)
|
||||
walk(src,0)
|
||||
walk_towards(src, destination, 1)
|
||||
|
||||
/obj/effect/immovablerod/ex_act(severity, target)
|
||||
return 0
|
||||
|
||||
/obj/effect/immovablerod/singularity_act()
|
||||
return
|
||||
|
||||
/obj/effect/immovablerod/singularity_pull()
|
||||
return
|
||||
|
||||
/obj/effect/immovablerod/Bump(atom/clong)
|
||||
if(prob(10))
|
||||
playsound(src, 'sound/effects/bang.ogg', 50, 1)
|
||||
audible_message("<span class='danger'>You hear a CLANG!</span>")
|
||||
|
||||
if(clong && prob(25))
|
||||
x = clong.x
|
||||
y = clong.y
|
||||
|
||||
if(special_target && clong == special_target)
|
||||
complete_trajectory()
|
||||
|
||||
if(isturf(clong) || isobj(clong))
|
||||
if(clong.density)
|
||||
clong.ex_act(EXPLODE_HEAVY)
|
||||
|
||||
else if(isliving(clong))
|
||||
penetrate(clong)
|
||||
else if(istype(clong, type))
|
||||
var/obj/effect/immovablerod/other = clong
|
||||
visible_message("<span class='danger'>[src] collides with [other]!\
|
||||
</span>")
|
||||
var/datum/effect_system/smoke_spread/smoke = new
|
||||
smoke.set_up(2, get_turf(src))
|
||||
smoke.start()
|
||||
qdel(src)
|
||||
qdel(other)
|
||||
|
||||
/obj/effect/immovablerod/proc/penetrate(mob/living/L)
|
||||
L.visible_message("<span class='danger'>[L] is penetrated by an immovable rod!</span>" , "<span class='userdanger'>The rod penetrates you!</span>" , "<span class ='danger'>You hear a CLANG!</span>")
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
H.adjustBruteLoss(160)
|
||||
if(L && (L.density || prob(10)))
|
||||
L.ex_act(EXPLODE_HEAVY)
|
||||
|
||||
obj/effect/immovablerod/attack_hand(mob/living/user)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/U = user
|
||||
if(U.job in list("Research Director"))
|
||||
playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1)
|
||||
for(var/mob/M in urange(8, src))
|
||||
if(!M.stat)
|
||||
shake_camera(M, 2, 3)
|
||||
if(wizard)
|
||||
U.visible_message("<span class='boldwarning'>[src] transforms into [wizard] as [U] suplexes them!</span>", "<span class='warning'>As you grab [src], it suddenly turns into [wizard] as you suplex them!</span>")
|
||||
to_chat(wizard, "<span class='boldwarning'>You're suddenly jolted out of rod-form as [U] somehow manages to grab you, slamming you into the ground!</span>")
|
||||
wizard.Stun(60)
|
||||
wizard.apply_damage(25, BRUTE)
|
||||
qdel(src)
|
||||
else
|
||||
U.visible_message("<span class='boldwarning'>[U] suplexes [src] into the ground!</span>", "<span class='warning'>You suplex [src] into the ground!</span>")
|
||||
new /obj/structure/festivus/anchored(drop_location())
|
||||
new /obj/effect/anomaly/flux(drop_location())
|
||||
qdel(src)
|
||||
/*
|
||||
Immovable rod random event.
|
||||
The rod will spawn at some location outside the station, and travel in a straight line to the opposite side of the station
|
||||
Everything solid in the way will be ex_act()'d
|
||||
In my current plan for it, 'solid' will be defined as anything with density == 1
|
||||
|
||||
--NEOFite
|
||||
*/
|
||||
|
||||
/datum/round_event_control/immovable_rod
|
||||
name = "Immovable Rod"
|
||||
typepath = /datum/round_event/immovable_rod
|
||||
min_players = 15
|
||||
max_occurrences = 5
|
||||
var/atom/special_target
|
||||
|
||||
|
||||
/datum/round_event_control/immovable_rod/admin_setup()
|
||||
if(!check_rights(R_FUN))
|
||||
return
|
||||
|
||||
var/aimed = alert("Aimed at current location?","Sniperod", "Yes", "No")
|
||||
if(aimed == "Yes")
|
||||
special_target = get_turf(usr)
|
||||
|
||||
/datum/round_event/immovable_rod
|
||||
announceWhen = 5
|
||||
|
||||
/datum/round_event/immovable_rod/announce(fake)
|
||||
priority_announce("What the fuck was that?!", "General Alert")
|
||||
|
||||
/datum/round_event/immovable_rod/start()
|
||||
var/datum/round_event_control/immovable_rod/C = control
|
||||
var/startside = pick(GLOB.cardinals)
|
||||
var/z = pick(SSmapping.levels_by_trait(ZTRAIT_STATION))
|
||||
var/turf/startT = spaceDebrisStartLoc(startside, z)
|
||||
var/turf/endT = spaceDebrisFinishLoc(startside, z)
|
||||
new /obj/effect/immovablerod(startT, endT, C.special_target)
|
||||
|
||||
/obj/effect/immovablerod
|
||||
name = "immovable rod"
|
||||
desc = "What the fuck is that?"
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "immrod"
|
||||
throwforce = 100
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
flags_1 = PREVENT_CONTENTS_EXPLOSION_1
|
||||
var/mob/living/wizard
|
||||
var/z_original = 0
|
||||
var/destination
|
||||
var/notify = TRUE
|
||||
var/atom/special_target
|
||||
|
||||
/obj/effect/immovablerod/New(atom/start, atom/end, aimed_at)
|
||||
..()
|
||||
SSaugury.register_doom(src, 2000)
|
||||
z_original = z
|
||||
destination = end
|
||||
special_target = aimed_at
|
||||
if(notify)
|
||||
notify_ghosts("\A [src] is inbound!",
|
||||
enter_link="<a href=?src=[REF(src)];orbit=1>(Click to orbit)</a>",
|
||||
source=src, action=NOTIFY_ORBIT)
|
||||
GLOB.poi_list += src
|
||||
|
||||
var/special_target_valid = FALSE
|
||||
if(special_target)
|
||||
var/turf/T = get_turf(special_target)
|
||||
if(T.z == z_original)
|
||||
special_target_valid = TRUE
|
||||
if(special_target_valid)
|
||||
walk_towards(src, special_target, 1)
|
||||
else if(end && end.z==z_original)
|
||||
walk_towards(src, destination, 1)
|
||||
|
||||
/obj/effect/immovablerod/Topic(href, href_list)
|
||||
if(href_list["orbit"])
|
||||
var/mob/dead/observer/ghost = usr
|
||||
if(istype(ghost))
|
||||
ghost.ManualFollow(src)
|
||||
|
||||
/obj/effect/immovablerod/Destroy()
|
||||
GLOB.poi_list -= src
|
||||
. = ..()
|
||||
|
||||
/obj/effect/immovablerod/Moved()
|
||||
if((z != z_original) || (loc == destination))
|
||||
qdel(src)
|
||||
if(special_target && loc == get_turf(special_target))
|
||||
complete_trajectory()
|
||||
return ..()
|
||||
|
||||
/obj/effect/immovablerod/proc/complete_trajectory()
|
||||
//We hit what we wanted to hit, time to go
|
||||
special_target = null
|
||||
destination = get_edge_target_turf(src, dir)
|
||||
walk(src,0)
|
||||
walk_towards(src, destination, 1)
|
||||
|
||||
/obj/effect/immovablerod/ex_act(severity, target)
|
||||
return 0
|
||||
|
||||
/obj/effect/immovablerod/singularity_act()
|
||||
return
|
||||
|
||||
/obj/effect/immovablerod/singularity_pull()
|
||||
return
|
||||
|
||||
/obj/effect/immovablerod/Bump(atom/clong)
|
||||
if(prob(10))
|
||||
playsound(src, 'sound/effects/bang.ogg', 50, 1)
|
||||
audible_message("<span class='danger'>You hear a CLANG!</span>")
|
||||
|
||||
if(clong && prob(25))
|
||||
x = clong.x
|
||||
y = clong.y
|
||||
|
||||
if(special_target && clong == special_target)
|
||||
complete_trajectory()
|
||||
|
||||
if(isturf(clong) || isobj(clong))
|
||||
if(clong.density)
|
||||
clong.ex_act(EXPLODE_HEAVY)
|
||||
|
||||
else if(isliving(clong))
|
||||
penetrate(clong)
|
||||
else if(istype(clong, type))
|
||||
var/obj/effect/immovablerod/other = clong
|
||||
visible_message("<span class='danger'>[src] collides with [other]!\
|
||||
</span>")
|
||||
var/datum/effect_system/smoke_spread/smoke = new
|
||||
smoke.set_up(2, get_turf(src))
|
||||
smoke.start()
|
||||
qdel(src)
|
||||
qdel(other)
|
||||
|
||||
/obj/effect/immovablerod/proc/penetrate(mob/living/L)
|
||||
L.visible_message("<span class='danger'>[L] is penetrated by an immovable rod!</span>" , "<span class='userdanger'>The rod penetrates you!</span>" , "<span class ='danger'>You hear a CLANG!</span>")
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
H.adjustBruteLoss(160)
|
||||
if(L && (L.density || prob(10)))
|
||||
L.ex_act(EXPLODE_HEAVY)
|
||||
|
||||
obj/effect/immovablerod/attack_hand(mob/living/user)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/U = user
|
||||
if(U.job in list("Research Director"))
|
||||
playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1)
|
||||
for(var/mob/M in urange(8, src))
|
||||
if(!M.stat)
|
||||
shake_camera(M, 2, 3)
|
||||
if(wizard)
|
||||
U.visible_message("<span class='boldwarning'>[src] transforms into [wizard] as [U] suplexes them!</span>", "<span class='warning'>As you grab [src], it suddenly turns into [wizard] as you suplex them!</span>")
|
||||
to_chat(wizard, "<span class='boldwarning'>You're suddenly jolted out of rod-form as [U] somehow manages to grab you, slamming you into the ground!</span>")
|
||||
wizard.Stun(60)
|
||||
wizard.apply_damage(25, BRUTE)
|
||||
qdel(src)
|
||||
else
|
||||
U.visible_message("<span class='boldwarning'>[U] suplexes [src] into the ground!</span>", "<span class='warning'>You suplex [src] into the ground!</span>")
|
||||
new /obj/structure/festivus/anchored(drop_location())
|
||||
new /obj/effect/anomaly/flux(drop_location())
|
||||
qdel(src)
|
||||
|
||||
+593
-593
File diff suppressed because it is too large
Load Diff
@@ -1,40 +1,40 @@
|
||||
/datum/round_event_control/mass_hallucination
|
||||
name = "Mass Hallucination"
|
||||
typepath = /datum/round_event/mass_hallucination
|
||||
weight = 10
|
||||
max_occurrences = 2
|
||||
min_players = 1
|
||||
|
||||
/datum/round_event/mass_hallucination
|
||||
fakeable = FALSE
|
||||
|
||||
/datum/round_event/mass_hallucination/start()
|
||||
switch(rand(1,4))
|
||||
if(1) //same sound for everyone
|
||||
var/sound = pick("airlock","airlock_pry","console","explosion","far_explosion","mech","glass","alarm","beepsky","mech","wall_decon","door_hack","tesla")
|
||||
for(var/mob/living/carbon/C in GLOB.alive_mob_list)
|
||||
new /datum/hallucination/sounds(C, TRUE, sound)
|
||||
if(2)
|
||||
var/weirdsound = pick("phone","hallelujah","highlander","hyperspace","game_over","creepy","tesla")
|
||||
for(var/mob/living/carbon/C in GLOB.alive_mob_list)
|
||||
new /datum/hallucination/weird_sounds(C, TRUE, weirdsound)
|
||||
if(3)
|
||||
var/stationmessage = pick("ratvar","shuttle_dock","blob_alert","malf_ai","meteors","supermatter")
|
||||
for(var/mob/living/carbon/C in GLOB.alive_mob_list)
|
||||
new /datum/hallucination/stationmessage(C, TRUE, stationmessage)
|
||||
if(4 to 6)
|
||||
var/picked_hallucination = pick( /datum/hallucination/bolts,
|
||||
/datum/hallucination/chat,
|
||||
/datum/hallucination/message,
|
||||
/datum/hallucination/bolts,
|
||||
/datum/hallucination/fake_flood,
|
||||
/datum/hallucination/battle,
|
||||
/datum/hallucination/fire,
|
||||
/datum/hallucination/self_delusion,
|
||||
/datum/hallucination/death,
|
||||
/datum/hallucination/delusion,
|
||||
/datum/hallucination/oh_yeah)
|
||||
for(var/mob/living/carbon/C in GLOB.alive_mob_list)
|
||||
if (HAS_TRAIT(C,TRAIT_EXEMPT_HEALTH_EVENTS))
|
||||
continue
|
||||
/datum/round_event_control/mass_hallucination
|
||||
name = "Mass Hallucination"
|
||||
typepath = /datum/round_event/mass_hallucination
|
||||
weight = 10
|
||||
max_occurrences = 2
|
||||
min_players = 1
|
||||
|
||||
/datum/round_event/mass_hallucination
|
||||
fakeable = FALSE
|
||||
|
||||
/datum/round_event/mass_hallucination/start()
|
||||
switch(rand(1,4))
|
||||
if(1) //same sound for everyone
|
||||
var/sound = pick("airlock","airlock_pry","console","explosion","far_explosion","mech","glass","alarm","beepsky","mech","wall_decon","door_hack","tesla")
|
||||
for(var/mob/living/carbon/C in GLOB.alive_mob_list)
|
||||
new /datum/hallucination/sounds(C, TRUE, sound)
|
||||
if(2)
|
||||
var/weirdsound = pick("phone","hallelujah","highlander","hyperspace","game_over","creepy","tesla")
|
||||
for(var/mob/living/carbon/C in GLOB.alive_mob_list)
|
||||
new /datum/hallucination/weird_sounds(C, TRUE, weirdsound)
|
||||
if(3)
|
||||
var/stationmessage = pick("ratvar","shuttle_dock","blob_alert","malf_ai","meteors","supermatter")
|
||||
for(var/mob/living/carbon/C in GLOB.alive_mob_list)
|
||||
new /datum/hallucination/stationmessage(C, TRUE, stationmessage)
|
||||
if(4 to 6)
|
||||
var/picked_hallucination = pick( /datum/hallucination/bolts,
|
||||
/datum/hallucination/chat,
|
||||
/datum/hallucination/message,
|
||||
/datum/hallucination/bolts,
|
||||
/datum/hallucination/fake_flood,
|
||||
/datum/hallucination/battle,
|
||||
/datum/hallucination/fire,
|
||||
/datum/hallucination/self_delusion,
|
||||
/datum/hallucination/death,
|
||||
/datum/hallucination/delusion,
|
||||
/datum/hallucination/oh_yeah)
|
||||
for(var/mob/living/carbon/C in GLOB.alive_mob_list)
|
||||
if (HAS_TRAIT(C,TRAIT_EXEMPT_HEALTH_EVENTS))
|
||||
continue
|
||||
new picked_hallucination(C, TRUE)
|
||||
@@ -1,11 +1,11 @@
|
||||
/datum/round_event_control/meteor_wave/meaty
|
||||
name = "Meteor Wave: Meaty"
|
||||
typepath = /datum/round_event/meteor_wave/meaty
|
||||
weight = 2
|
||||
max_occurrences = 1
|
||||
|
||||
/datum/round_event/meteor_wave/meaty
|
||||
wave_name = "meaty"
|
||||
|
||||
/datum/round_event/meteor_wave/meaty/announce(fake)
|
||||
priority_announce("Meaty ores have been detected on collision course with the station.", "Oh crap, get the mop.", "meteors")
|
||||
/datum/round_event_control/meteor_wave/meaty
|
||||
name = "Meteor Wave: Meaty"
|
||||
typepath = /datum/round_event/meteor_wave/meaty
|
||||
weight = 2
|
||||
max_occurrences = 1
|
||||
|
||||
/datum/round_event/meteor_wave/meaty
|
||||
wave_name = "meaty"
|
||||
|
||||
/datum/round_event/meteor_wave/meaty/announce(fake)
|
||||
priority_announce("Meaty ores have been detected on collision course with the station.", "Oh crap, get the mop.", "meteors")
|
||||
|
||||
@@ -1,91 +1,91 @@
|
||||
// Normal strength
|
||||
|
||||
#define SINGULO_BEACON_DISTURBANCE 0.2 //singularity beacon also improve the odds of meteor waves and speed them up a little.
|
||||
#define SINGULO_BEACON_MAX_DISTURBANCE 0.6 //maximum cap due to how meteor waves can be potentially round ending.
|
||||
|
||||
/datum/round_event_control/meteor_wave
|
||||
name = "Meteor Wave: Normal"
|
||||
typepath = /datum/round_event/meteor_wave
|
||||
weight = 4
|
||||
min_players = 15
|
||||
max_occurrences = 3
|
||||
earliest_start = 25 MINUTES
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/meteor_wave
|
||||
startWhen = 6
|
||||
endWhen = 66
|
||||
announceWhen = 1
|
||||
var/list/wave_type
|
||||
var/wave_name = "normal"
|
||||
|
||||
/datum/round_event/meteor_wave/setup()
|
||||
announceWhen = 1
|
||||
startWhen = rand(60, 90) //Yeah for SOME REASON this is measured in seconds and not deciseconds???
|
||||
if(GLOB.singularity_counter)
|
||||
startWhen *= 1 - min(GLOB.singularity_counter * SINGULO_BEACON_DISTURBANCE, SINGULO_BEACON_MAX_DISTURBANCE)
|
||||
endWhen = startWhen + 60
|
||||
|
||||
|
||||
/datum/round_event/meteor_wave/New()
|
||||
..()
|
||||
if(!wave_type)
|
||||
determine_wave_type()
|
||||
|
||||
/datum/round_event/meteor_wave/proc/determine_wave_type()
|
||||
if(!wave_name)
|
||||
wave_name = pickweight(list(
|
||||
"normal" = 50,
|
||||
"threatening" = 40,
|
||||
"catastrophic" = 10))
|
||||
switch(wave_name)
|
||||
if("normal")
|
||||
wave_type = GLOB.meteors_normal
|
||||
if("threatening")
|
||||
wave_type = GLOB.meteors_threatening
|
||||
if("catastrophic")
|
||||
if(SSevents.holidays && SSevents.holidays[HALLOWEEN])
|
||||
wave_type = GLOB.meteorsSPOOKY
|
||||
else
|
||||
wave_type = GLOB.meteors_catastrophic
|
||||
if("meaty")
|
||||
wave_type = GLOB.meteorsB
|
||||
if("space dust")
|
||||
wave_type = GLOB.meteorsC
|
||||
if("halloween")
|
||||
wave_type = GLOB.meteorsSPOOKY
|
||||
else
|
||||
WARNING("Wave name of [wave_name] not recognised.")
|
||||
kill()
|
||||
|
||||
/datum/round_event/meteor_wave/announce(fake)
|
||||
priority_announce("Meteors have been detected on collision course with the station. Estimated time until impact: [round(startWhen/60)] minutes.[GLOB.singularity_counter ? " Warning: Anomalous gravity pulse detected, Syndicate technology interference likely." : ""]", "Meteor Alert", "meteors")
|
||||
|
||||
/datum/round_event/meteor_wave/tick()
|
||||
if(ISMULTIPLE(activeFor, 3))
|
||||
spawn_meteors(5, wave_type) //meteor list types defined in gamemode/meteor/meteors.dm
|
||||
|
||||
/datum/round_event_control/meteor_wave/threatening
|
||||
name = "Meteor Wave: Threatening"
|
||||
typepath = /datum/round_event/meteor_wave/threatening
|
||||
weight = 5
|
||||
min_players = 20
|
||||
max_occurrences = 3
|
||||
earliest_start = 35 MINUTES
|
||||
|
||||
/datum/round_event/meteor_wave/threatening
|
||||
wave_name = "threatening"
|
||||
|
||||
/datum/round_event_control/meteor_wave/catastrophic
|
||||
name = "Meteor Wave: Catastrophic"
|
||||
typepath = /datum/round_event/meteor_wave/catastrophic
|
||||
weight = 7
|
||||
min_players = 25
|
||||
max_occurrences = 3
|
||||
earliest_start = 45 MINUTES
|
||||
|
||||
/datum/round_event/meteor_wave/catastrophic
|
||||
wave_name = "catastrophic"
|
||||
|
||||
#undef SINGULO_BEACON_DISTURBANCE
|
||||
#undef SINGULO_BEACON_MAX_DISTURBANCE
|
||||
// Normal strength
|
||||
|
||||
#define SINGULO_BEACON_DISTURBANCE 0.2 //singularity beacon also improve the odds of meteor waves and speed them up a little.
|
||||
#define SINGULO_BEACON_MAX_DISTURBANCE 0.6 //maximum cap due to how meteor waves can be potentially round ending.
|
||||
|
||||
/datum/round_event_control/meteor_wave
|
||||
name = "Meteor Wave: Normal"
|
||||
typepath = /datum/round_event/meteor_wave
|
||||
weight = 4
|
||||
min_players = 15
|
||||
max_occurrences = 3
|
||||
earliest_start = 25 MINUTES
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/meteor_wave
|
||||
startWhen = 6
|
||||
endWhen = 66
|
||||
announceWhen = 1
|
||||
var/list/wave_type
|
||||
var/wave_name = "normal"
|
||||
|
||||
/datum/round_event/meteor_wave/setup()
|
||||
announceWhen = 1
|
||||
startWhen = rand(60, 90) //Yeah for SOME REASON this is measured in seconds and not deciseconds???
|
||||
if(GLOB.singularity_counter)
|
||||
startWhen *= 1 - min(GLOB.singularity_counter * SINGULO_BEACON_DISTURBANCE, SINGULO_BEACON_MAX_DISTURBANCE)
|
||||
endWhen = startWhen + 60
|
||||
|
||||
|
||||
/datum/round_event/meteor_wave/New()
|
||||
..()
|
||||
if(!wave_type)
|
||||
determine_wave_type()
|
||||
|
||||
/datum/round_event/meteor_wave/proc/determine_wave_type()
|
||||
if(!wave_name)
|
||||
wave_name = pickweight(list(
|
||||
"normal" = 50,
|
||||
"threatening" = 40,
|
||||
"catastrophic" = 10))
|
||||
switch(wave_name)
|
||||
if("normal")
|
||||
wave_type = GLOB.meteors_normal
|
||||
if("threatening")
|
||||
wave_type = GLOB.meteors_threatening
|
||||
if("catastrophic")
|
||||
if(SSevents.holidays && SSevents.holidays[HALLOWEEN])
|
||||
wave_type = GLOB.meteorsSPOOKY
|
||||
else
|
||||
wave_type = GLOB.meteors_catastrophic
|
||||
if("meaty")
|
||||
wave_type = GLOB.meteorsB
|
||||
if("space dust")
|
||||
wave_type = GLOB.meteorsC
|
||||
if("halloween")
|
||||
wave_type = GLOB.meteorsSPOOKY
|
||||
else
|
||||
WARNING("Wave name of [wave_name] not recognised.")
|
||||
kill()
|
||||
|
||||
/datum/round_event/meteor_wave/announce(fake)
|
||||
priority_announce("Meteors have been detected on collision course with the station. Estimated time until impact: [round(startWhen/60)] minutes.[GLOB.singularity_counter ? " Warning: Anomalous gravity pulse detected, Syndicate technology interference likely." : ""]", "Meteor Alert", "meteors")
|
||||
|
||||
/datum/round_event/meteor_wave/tick()
|
||||
if(ISMULTIPLE(activeFor, 3))
|
||||
spawn_meteors(5, wave_type) //meteor list types defined in gamemode/meteor/meteors.dm
|
||||
|
||||
/datum/round_event_control/meteor_wave/threatening
|
||||
name = "Meteor Wave: Threatening"
|
||||
typepath = /datum/round_event/meteor_wave/threatening
|
||||
weight = 5
|
||||
min_players = 20
|
||||
max_occurrences = 3
|
||||
earliest_start = 35 MINUTES
|
||||
|
||||
/datum/round_event/meteor_wave/threatening
|
||||
wave_name = "threatening"
|
||||
|
||||
/datum/round_event_control/meteor_wave/catastrophic
|
||||
name = "Meteor Wave: Catastrophic"
|
||||
typepath = /datum/round_event/meteor_wave/catastrophic
|
||||
weight = 7
|
||||
min_players = 25
|
||||
max_occurrences = 3
|
||||
earliest_start = 45 MINUTES
|
||||
|
||||
/datum/round_event/meteor_wave/catastrophic
|
||||
wave_name = "catastrophic"
|
||||
|
||||
#undef SINGULO_BEACON_DISTURBANCE
|
||||
#undef SINGULO_BEACON_MAX_DISTURBANCE
|
||||
|
||||
@@ -1,64 +1,64 @@
|
||||
/datum/round_event_control/grey_tide
|
||||
name = "Grey Tide"
|
||||
typepath = /datum/round_event/grey_tide
|
||||
max_occurrences = 2
|
||||
min_players = 5
|
||||
|
||||
/datum/round_event/grey_tide
|
||||
announceWhen = 50
|
||||
endWhen = 20
|
||||
var/list/area/areasToOpen = list()
|
||||
var/list/potential_areas = list(/area/bridge,
|
||||
/area/engine,
|
||||
/area/medical,
|
||||
/area/security,
|
||||
/area/quartermaster,
|
||||
/area/science)
|
||||
var/severity = 1
|
||||
|
||||
|
||||
/datum/round_event/grey_tide/setup()
|
||||
announceWhen = rand(50, 60)
|
||||
endWhen = rand(20, 30)
|
||||
severity = rand(1,3)
|
||||
for(var/i in 1 to severity)
|
||||
var/picked_area = pick_n_take(potential_areas)
|
||||
for(var/area/A in world)
|
||||
if(istype(A, picked_area))
|
||||
areasToOpen += A
|
||||
|
||||
|
||||
/datum/round_event/grey_tide/announce(fake)
|
||||
if(areasToOpen && areasToOpen.len > 0)
|
||||
if(prob(50))
|
||||
priority_announce("Gr3y.T1d3 virus detected in [station_name()] door subroutines. Severity level of [severity]. Recommend station AI involvement.", "Security Alert")
|
||||
else
|
||||
print_command_report("Gr3y.T1d3 virus detected in [station_name()] door subroutines. Severity level of [severity]. Recommend station AI involvement.", "Gr3y.T1d3 virus")
|
||||
else
|
||||
log_world("ERROR: Could not initate grey-tide. No areas in the list!")
|
||||
kill()
|
||||
|
||||
|
||||
/datum/round_event/grey_tide/start()
|
||||
for(var/area/A in areasToOpen)
|
||||
for(var/obj/machinery/light/L in A)
|
||||
L.flicker(10)
|
||||
|
||||
/datum/round_event/grey_tide/end()
|
||||
for(var/area/A in areasToOpen)
|
||||
for(var/obj/O in A)
|
||||
if(istype(O, /obj/machinery/power/apc))
|
||||
var/obj/machinery/power/apc/temp = O
|
||||
temp.overload_lighting()
|
||||
else if(istype(O, /obj/structure/closet/secure_closet))
|
||||
var/obj/structure/closet/secure_closet/temp = O
|
||||
temp.locked = FALSE
|
||||
temp.update_icon()
|
||||
else if(istype(O, /obj/machinery/door/airlock))
|
||||
var/obj/machinery/door/airlock/temp = O
|
||||
if(temp.critical_machine) //Skip doors in critical positions, such as the SM chamber.
|
||||
continue
|
||||
temp.prison_open()
|
||||
else if(istype(O, /obj/machinery/door_timer))
|
||||
var/obj/machinery/door_timer/temp = O
|
||||
/datum/round_event_control/grey_tide
|
||||
name = "Grey Tide"
|
||||
typepath = /datum/round_event/grey_tide
|
||||
max_occurrences = 2
|
||||
min_players = 5
|
||||
|
||||
/datum/round_event/grey_tide
|
||||
announceWhen = 50
|
||||
endWhen = 20
|
||||
var/list/area/areasToOpen = list()
|
||||
var/list/potential_areas = list(/area/bridge,
|
||||
/area/engine,
|
||||
/area/medical,
|
||||
/area/security,
|
||||
/area/quartermaster,
|
||||
/area/science)
|
||||
var/severity = 1
|
||||
|
||||
|
||||
/datum/round_event/grey_tide/setup()
|
||||
announceWhen = rand(50, 60)
|
||||
endWhen = rand(20, 30)
|
||||
severity = rand(1,3)
|
||||
for(var/i in 1 to severity)
|
||||
var/picked_area = pick_n_take(potential_areas)
|
||||
for(var/area/A in world)
|
||||
if(istype(A, picked_area))
|
||||
areasToOpen += A
|
||||
|
||||
|
||||
/datum/round_event/grey_tide/announce(fake)
|
||||
if(areasToOpen && areasToOpen.len > 0)
|
||||
if(prob(50))
|
||||
priority_announce("Gr3y.T1d3 virus detected in [station_name()] door subroutines. Severity level of [severity]. Recommend station AI involvement.", "Security Alert")
|
||||
else
|
||||
print_command_report("Gr3y.T1d3 virus detected in [station_name()] door subroutines. Severity level of [severity]. Recommend station AI involvement.", "Gr3y.T1d3 virus")
|
||||
else
|
||||
log_world("ERROR: Could not initate grey-tide. No areas in the list!")
|
||||
kill()
|
||||
|
||||
|
||||
/datum/round_event/grey_tide/start()
|
||||
for(var/area/A in areasToOpen)
|
||||
for(var/obj/machinery/light/L in A)
|
||||
L.flicker(10)
|
||||
|
||||
/datum/round_event/grey_tide/end()
|
||||
for(var/area/A in areasToOpen)
|
||||
for(var/obj/O in A)
|
||||
if(istype(O, /obj/machinery/power/apc))
|
||||
var/obj/machinery/power/apc/temp = O
|
||||
temp.overload_lighting()
|
||||
else if(istype(O, /obj/structure/closet/secure_closet))
|
||||
var/obj/structure/closet/secure_closet/temp = O
|
||||
temp.locked = FALSE
|
||||
temp.update_icon()
|
||||
else if(istype(O, /obj/machinery/door/airlock))
|
||||
var/obj/machinery/door/airlock/temp = O
|
||||
if(temp.critical_machine) //Skip doors in critical positions, such as the SM chamber.
|
||||
continue
|
||||
temp.prison_open()
|
||||
else if(istype(O, /obj/machinery/door_timer))
|
||||
var/obj/machinery/door_timer/temp = O
|
||||
temp.timer_end(forced = TRUE)
|
||||
@@ -1,39 +1,39 @@
|
||||
/datum/round_event_control/processor_overload
|
||||
name = "Processor Overload"
|
||||
typepath = /datum/round_event/processor_overload
|
||||
weight = 15
|
||||
min_players = 20
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/processor_overload
|
||||
announceWhen = 1
|
||||
|
||||
/datum/round_event/processor_overload/announce(fake)
|
||||
var/alert = pick( "Exospheric bubble inbound. Processor overload is likely. Please contact you*%xp25)`6cq-BZZT", \
|
||||
"Exospheric bubble inbound. Processor overload is likel*1eta;c5;'1v¬-BZZZT", \
|
||||
"Exospheric bubble inbound. Processor ov#MCi46:5.;@63-BZZZZT", \
|
||||
"Exospheric bubble inbo'Fz\\k55_@-BZZZZZT", \
|
||||
"Exospheri:%£ QCbyj^j</.3-BZZZZZZT", \
|
||||
"!!hy%;f3l7e,<$^-BZZZZZZZT")
|
||||
|
||||
for(var/mob/living/silicon/ai/A in GLOB.ai_list)
|
||||
//AIs are always aware of processor overload
|
||||
to_chat(A, "<br><span class='warning'><b>[alert]</b></span><br>")
|
||||
|
||||
// Announce most of the time, but leave a little gap so people don't know
|
||||
// whether it's, say, a tesla zapping tcomms, or some selective
|
||||
// modification of the tcomms bus
|
||||
if(prob(80) || fake)
|
||||
priority_announce(alert)
|
||||
|
||||
|
||||
/datum/round_event/processor_overload/start()
|
||||
for(var/obj/machinery/telecomms/processor/P in GLOB.telecomms_list)
|
||||
if(prob(10))
|
||||
// Damage the surrounding area to indicate that it popped
|
||||
explosion(get_turf(P), 0, 0, 2)
|
||||
// Only a level 1 explosion actually damages the machine
|
||||
// at all
|
||||
P.ex_act(EXPLODE_DEVASTATE)
|
||||
else
|
||||
P.emp_act(EMP_HEAVY)
|
||||
/datum/round_event_control/processor_overload
|
||||
name = "Processor Overload"
|
||||
typepath = /datum/round_event/processor_overload
|
||||
weight = 15
|
||||
min_players = 20
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/processor_overload
|
||||
announceWhen = 1
|
||||
|
||||
/datum/round_event/processor_overload/announce(fake)
|
||||
var/alert = pick( "Exospheric bubble inbound. Processor overload is likely. Please contact you*%xp25)`6cq-BZZT", \
|
||||
"Exospheric bubble inbound. Processor overload is likel*1eta;c5;'1v¬-BZZZT", \
|
||||
"Exospheric bubble inbound. Processor ov#MCi46:5.;@63-BZZZZT", \
|
||||
"Exospheric bubble inbo'Fz\\k55_@-BZZZZZT", \
|
||||
"Exospheri:%£ QCbyj^j</.3-BZZZZZZT", \
|
||||
"!!hy%;f3l7e,<$^-BZZZZZZZT")
|
||||
|
||||
for(var/mob/living/silicon/ai/A in GLOB.ai_list)
|
||||
//AIs are always aware of processor overload
|
||||
to_chat(A, "<br><span class='warning'><b>[alert]</b></span><br>")
|
||||
|
||||
// Announce most of the time, but leave a little gap so people don't know
|
||||
// whether it's, say, a tesla zapping tcomms, or some selective
|
||||
// modification of the tcomms bus
|
||||
if(prob(80) || fake)
|
||||
priority_announce(alert)
|
||||
|
||||
|
||||
/datum/round_event/processor_overload/start()
|
||||
for(var/obj/machinery/telecomms/processor/P in GLOB.telecomms_list)
|
||||
if(prob(10))
|
||||
// Damage the surrounding area to indicate that it popped
|
||||
explosion(get_turf(P), 0, 0, 2)
|
||||
// Only a level 1 explosion actually damages the machine
|
||||
// at all
|
||||
P.ex_act(EXPLODE_DEVASTATE)
|
||||
else
|
||||
P.emp_act(EMP_HEAVY)
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
/datum/round_event_control/radiation_storm
|
||||
name = "Radiation Storm"
|
||||
typepath = /datum/round_event/radiation_storm
|
||||
max_occurrences = 1
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/radiation_storm
|
||||
|
||||
|
||||
/datum/round_event/radiation_storm/setup()
|
||||
startWhen = 3
|
||||
endWhen = startWhen + 1
|
||||
announceWhen = 1
|
||||
|
||||
/datum/round_event/radiation_storm/announce(fake)
|
||||
priority_announce("High levels of radiation detected near the station. Maintenance is best shielded from radiation.", "Anomaly Alert", "radiation")
|
||||
//sound not longer matches the text, but an audible warning is probably good
|
||||
|
||||
/datum/round_event/radiation_storm/start()
|
||||
SSweather.run_weather(/datum/weather/rad_storm)
|
||||
/datum/round_event_control/radiation_storm
|
||||
name = "Radiation Storm"
|
||||
typepath = /datum/round_event/radiation_storm
|
||||
max_occurrences = 1
|
||||
gamemode_blacklist = list("dynamic")
|
||||
|
||||
/datum/round_event/radiation_storm
|
||||
|
||||
|
||||
/datum/round_event/radiation_storm/setup()
|
||||
startWhen = 3
|
||||
endWhen = startWhen + 1
|
||||
announceWhen = 1
|
||||
|
||||
/datum/round_event/radiation_storm/announce(fake)
|
||||
priority_announce("High levels of radiation detected near the station. Maintenance is best shielded from radiation.", "Anomaly Alert", "radiation")
|
||||
//sound not longer matches the text, but an audible warning is probably good
|
||||
|
||||
/datum/round_event/radiation_storm/start()
|
||||
SSweather.run_weather(/datum/weather/rad_storm)
|
||||
|
||||
+548
-548
File diff suppressed because it is too large
Load Diff
@@ -1,40 +1,40 @@
|
||||
/datum/round_event_control/spider_infestation
|
||||
name = "Spider Infestation"
|
||||
typepath = /datum/round_event/spider_infestation
|
||||
weight = 5
|
||||
gamemode_blacklist = list("dynamic")
|
||||
max_occurrences = 1
|
||||
min_players = 15
|
||||
|
||||
/datum/round_event/spider_infestation
|
||||
announceWhen = 400
|
||||
|
||||
var/spawncount = 1
|
||||
|
||||
|
||||
/datum/round_event/spider_infestation/setup()
|
||||
announceWhen = rand(announceWhen, announceWhen + 50)
|
||||
spawncount = rand(5, 8)
|
||||
|
||||
/datum/round_event/spider_infestation/announce(fake)
|
||||
priority_announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", "aliens")
|
||||
|
||||
|
||||
/datum/round_event/spider_infestation/start()
|
||||
var/list/vents = list()
|
||||
for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in GLOB.machines)
|
||||
if(QDELETED(temp_vent))
|
||||
continue
|
||||
if(is_station_level(temp_vent.loc.z) && !temp_vent.welded)
|
||||
var/datum/pipeline/temp_vent_parent = temp_vent.parents[1]
|
||||
if(temp_vent_parent.other_atmosmch.len > 20)
|
||||
vents += temp_vent
|
||||
|
||||
while((spawncount >= 1) && vents.len)
|
||||
var/obj/vent = pick(vents)
|
||||
var/spawn_type = /obj/structure/spider/spiderling
|
||||
if(prob(66))
|
||||
spawn_type = /obj/structure/spider/spiderling/nurse
|
||||
spawn_atom_to_turf(spawn_type, vent, 1, FALSE)
|
||||
vents -= vent
|
||||
spawncount--
|
||||
/datum/round_event_control/spider_infestation
|
||||
name = "Spider Infestation"
|
||||
typepath = /datum/round_event/spider_infestation
|
||||
weight = 5
|
||||
gamemode_blacklist = list("dynamic")
|
||||
max_occurrences = 1
|
||||
min_players = 15
|
||||
|
||||
/datum/round_event/spider_infestation
|
||||
announceWhen = 400
|
||||
|
||||
var/spawncount = 1
|
||||
|
||||
|
||||
/datum/round_event/spider_infestation/setup()
|
||||
announceWhen = rand(announceWhen, announceWhen + 50)
|
||||
spawncount = rand(5, 8)
|
||||
|
||||
/datum/round_event/spider_infestation/announce(fake)
|
||||
priority_announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", "aliens")
|
||||
|
||||
|
||||
/datum/round_event/spider_infestation/start()
|
||||
var/list/vents = list()
|
||||
for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in GLOB.machines)
|
||||
if(QDELETED(temp_vent))
|
||||
continue
|
||||
if(is_station_level(temp_vent.loc.z) && !temp_vent.welded)
|
||||
var/datum/pipeline/temp_vent_parent = temp_vent.parents[1]
|
||||
if(temp_vent_parent.other_atmosmch.len > 20)
|
||||
vents += temp_vent
|
||||
|
||||
while((spawncount >= 1) && vents.len)
|
||||
var/obj/vent = pick(vents)
|
||||
var/spawn_type = /obj/structure/spider/spiderling
|
||||
if(prob(66))
|
||||
spawn_type = /obj/structure/spider/spiderling/nurse
|
||||
spawn_atom_to_turf(spawn_type, vent, 1, FALSE)
|
||||
vents -= vent
|
||||
spawncount--
|
||||
|
||||
@@ -1,33 +1,33 @@
|
||||
/datum/round_event_control/spontaneous_appendicitis
|
||||
name = "Spontaneous Appendicitis"
|
||||
typepath = /datum/round_event/spontaneous_appendicitis
|
||||
weight = 20
|
||||
max_occurrences = 4
|
||||
earliest_start = 10 MINUTES
|
||||
min_players = 5 // To make your chance of getting help a bit higher.
|
||||
|
||||
/datum/round_event/spontaneous_appendicitis
|
||||
fakeable = FALSE
|
||||
|
||||
/datum/round_event/spontaneous_appendicitis/start()
|
||||
for(var/mob/living/carbon/human/H in shuffle(GLOB.alive_mob_list))
|
||||
if(!H.client)
|
||||
continue
|
||||
if(H.stat == DEAD)
|
||||
continue
|
||||
if (HAS_TRAIT(H,TRAIT_EXEMPT_HEALTH_EVENTS))
|
||||
continue
|
||||
if(!H.getorgan(/obj/item/organ/appendix)) //Don't give the disease to some who lacks it, only for it to be auto-cured
|
||||
continue
|
||||
if(!(MOB_ORGANIC in H.mob_biotypes)) //biotype sleeper bugs strike again, once again making appendicitis pick a target that can't take it
|
||||
continue
|
||||
var/foundAlready = FALSE //don't infect someone that already has appendicitis
|
||||
for(var/datum/disease/appendicitis/A in H.diseases)
|
||||
foundAlready = TRUE
|
||||
break
|
||||
if(foundAlready)
|
||||
continue
|
||||
|
||||
var/datum/disease/D = new /datum/disease/appendicitis()
|
||||
H.ForceContractDisease(D, FALSE, TRUE)
|
||||
/datum/round_event_control/spontaneous_appendicitis
|
||||
name = "Spontaneous Appendicitis"
|
||||
typepath = /datum/round_event/spontaneous_appendicitis
|
||||
weight = 20
|
||||
max_occurrences = 4
|
||||
earliest_start = 10 MINUTES
|
||||
min_players = 5 // To make your chance of getting help a bit higher.
|
||||
|
||||
/datum/round_event/spontaneous_appendicitis
|
||||
fakeable = FALSE
|
||||
|
||||
/datum/round_event/spontaneous_appendicitis/start()
|
||||
for(var/mob/living/carbon/human/H in shuffle(GLOB.alive_mob_list))
|
||||
if(!H.client)
|
||||
continue
|
||||
if(H.stat == DEAD)
|
||||
continue
|
||||
if (HAS_TRAIT(H,TRAIT_EXEMPT_HEALTH_EVENTS))
|
||||
continue
|
||||
if(!H.getorgan(/obj/item/organ/appendix)) //Don't give the disease to some who lacks it, only for it to be auto-cured
|
||||
continue
|
||||
if(!(MOB_ORGANIC in H.mob_biotypes)) //biotype sleeper bugs strike again, once again making appendicitis pick a target that can't take it
|
||||
continue
|
||||
var/foundAlready = FALSE //don't infect someone that already has appendicitis
|
||||
for(var/datum/disease/appendicitis/A in H.diseases)
|
||||
foundAlready = TRUE
|
||||
break
|
||||
if(foundAlready)
|
||||
continue
|
||||
|
||||
var/datum/disease/D = new /datum/disease/appendicitis()
|
||||
H.ForceContractDisease(D, FALSE, TRUE)
|
||||
break
|
||||
+212
-212
@@ -1,212 +1,212 @@
|
||||
/datum/round_event_control/vent_clog
|
||||
name = "Clogged Vents: Normal"
|
||||
typepath = /datum/round_event/vent_clog
|
||||
weight = 10
|
||||
max_occurrences = 3
|
||||
gamemode_blacklist = list("dynamic")
|
||||
min_players = 25
|
||||
|
||||
/datum/round_event/vent_clog
|
||||
announceWhen = 1
|
||||
startWhen = 5
|
||||
endWhen = 35
|
||||
var/interval = 2
|
||||
var/list/vents = list()
|
||||
var/randomProbability = 1
|
||||
var/reagentsAmount = 100
|
||||
var/list/saferChems = list(
|
||||
/datum/reagent/water,
|
||||
/datum/reagent/carbon,
|
||||
/datum/reagent/consumable/flour,
|
||||
/datum/reagent/space_cleaner,
|
||||
/datum/reagent/consumable/nutriment,
|
||||
/datum/reagent/consumable/condensedcapsaicin,
|
||||
/datum/reagent/drug/mushroomhallucinogen,
|
||||
/datum/reagent/lube,
|
||||
/datum/reagent/glitter/pink,
|
||||
/datum/reagent/cryptobiolin,
|
||||
/datum/reagent/toxin/plantbgone,
|
||||
/datum/reagent/blood,
|
||||
/datum/reagent/medicine/charcoal,
|
||||
/datum/reagent/drug/space_drugs,
|
||||
/datum/reagent/medicine/morphine,
|
||||
/datum/reagent/water/holywater,
|
||||
/datum/reagent/consumable/ethanol,
|
||||
/datum/reagent/consumable/hot_coco,
|
||||
/datum/reagent/toxin/acid,
|
||||
/datum/reagent/toxin/mindbreaker,
|
||||
/datum/reagent/toxin/rotatium,
|
||||
/datum/reagent/bluespace,
|
||||
/datum/reagent/pax,
|
||||
/datum/reagent/consumable/laughter,
|
||||
/datum/reagent/concentrated_barbers_aid,
|
||||
/datum/reagent/colorful_reagent,
|
||||
/datum/reagent/peaceborg_confuse,
|
||||
/datum/reagent/peaceborg_tire,
|
||||
/datum/reagent/consumable/sodiumchloride,
|
||||
/datum/reagent/consumable/ethanol/beer,
|
||||
/datum/reagent/hair_dye,
|
||||
/datum/reagent/consumable/sugar,
|
||||
/datum/reagent/glitter/white,
|
||||
/datum/reagent/growthserum,
|
||||
/datum/reagent/consumable/cornoil,
|
||||
/datum/reagent/uranium,
|
||||
/datum/reagent/carpet,
|
||||
/datum/reagent/firefighting_foam,
|
||||
/datum/reagent/consumable/tearjuice,
|
||||
/datum/reagent/medicine/strange_reagent
|
||||
|
||||
)
|
||||
//needs to be chemid unit checked at some point
|
||||
|
||||
/datum/round_event/vent_clog/announce()
|
||||
priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert")
|
||||
|
||||
/datum/round_event/vent_clog/setup()
|
||||
endWhen = rand(120, 180)
|
||||
for(var/obj/machinery/atmospherics/components/unary/vent_scrubber/temp_vent in GLOB.machines)
|
||||
var/turf/T = get_turf(temp_vent)
|
||||
var/area/A = T.loc
|
||||
if(T && is_station_level(T.z) && !temp_vent.welded && !A.safe)
|
||||
vents += temp_vent
|
||||
|
||||
if(!vents.len)
|
||||
return kill()
|
||||
|
||||
/datum/round_event/vent_clog/tick()
|
||||
|
||||
if(!vents.len)
|
||||
return kill()
|
||||
|
||||
CHECK_TICK
|
||||
|
||||
var/obj/machinery/atmospherics/components/unary/vent = pick(vents)
|
||||
vents -= vent
|
||||
|
||||
if(!vent || vent.welded)
|
||||
return
|
||||
|
||||
var/turf/T = get_turf(vent)
|
||||
if(!T)
|
||||
return
|
||||
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
R.my_atom = vent
|
||||
if (prob(randomProbability))
|
||||
R.add_reagent(get_random_reagent_id(), reagentsAmount)
|
||||
else
|
||||
R.add_reagent(pick(saferChems), reagentsAmount)
|
||||
|
||||
var/datum/effect_system/smoke_spread/chem/smoke_machine/C = new
|
||||
C.set_up(R,16,1,T)
|
||||
C.start()
|
||||
playsound(T, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
|
||||
/datum/round_event_control/vent_clog/threatening
|
||||
name = "Clogged Vents: Threatening"
|
||||
typepath = /datum/round_event/vent_clog/threatening
|
||||
weight = 4
|
||||
min_players = 35
|
||||
max_occurrences = 1
|
||||
earliest_start = 35 MINUTES
|
||||
|
||||
/datum/round_event/vent_clog/threatening
|
||||
randomProbability = 10
|
||||
reagentsAmount = 200
|
||||
|
||||
/datum/round_event_control/vent_clog/catastrophic
|
||||
name = "Clogged Vents: Catastrophic"
|
||||
typepath = /datum/round_event/vent_clog/catastrophic
|
||||
weight = 2
|
||||
min_players = 45
|
||||
max_occurrences = 1
|
||||
earliest_start = 45 MINUTES
|
||||
|
||||
/datum/round_event/vent_clog/catastrophic
|
||||
randomProbability = 30
|
||||
reagentsAmount = 250
|
||||
|
||||
/datum/round_event_control/vent_clog/beer
|
||||
name = "Clogged Vents: Beer"
|
||||
typepath = /datum/round_event/vent_clog/beer
|
||||
max_occurrences = 0
|
||||
|
||||
/datum/round_event/vent_clog/beer
|
||||
reagentsAmount = 100
|
||||
|
||||
/datum/round_event_control/vent_clog/plasma_decon
|
||||
name = "Anti-Plasma Flood"
|
||||
typepath = /datum/round_event/vent_clog/plasma_decon
|
||||
max_occurrences = 0
|
||||
|
||||
/datum/round_event_control/vent_clog/female
|
||||
name = "Clogged Vents; Girlcum"
|
||||
typepath = /datum/round_event/vent_clog/female
|
||||
max_occurrences = 0
|
||||
|
||||
/datum/round_event/vent_clog/female
|
||||
reagentsAmount = 100
|
||||
|
||||
/datum/round_event_control/vent_clog/male
|
||||
name = "Clogged Vents: Semen"
|
||||
typepath = /datum/round_event/vent_clog/male
|
||||
max_occurrences = 0
|
||||
|
||||
/datum/round_event/vent_clog/male
|
||||
reagentsAmount = 100
|
||||
|
||||
/datum/round_event/vent_clog/beer/announce()
|
||||
priority_announce("The scrubbers network is experiencing an unexpected surge of pressurized beer. Some ejection of contents may occur.", "Atmospherics alert")
|
||||
|
||||
/datum/round_event/vent_clog/beer/start()
|
||||
for(var/obj/machinery/atmospherics/components/unary/vent in vents)
|
||||
if(vent && vent.loc && !vent.welded)
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
R.my_atom = vent
|
||||
R.add_reagent(/datum/reagent/consumable/ethanol/beer, reagentsAmount)
|
||||
|
||||
var/datum/effect_system/foam_spread/foam = new
|
||||
foam.set_up(200, get_turf(vent), R)
|
||||
foam.start()
|
||||
CHECK_TICK
|
||||
|
||||
/datum/round_event/vent_clog/male/announce()
|
||||
priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejaculation of contents may occur.", "Atmospherics alert")
|
||||
|
||||
/datum/round_event/vent_clog/male/start()
|
||||
for(var/obj/machinery/atmospherics/components/unary/vent in vents)
|
||||
if(vent && vent.loc && !vent.welded)
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
R.my_atom = vent
|
||||
R.add_reagent(/datum/reagent/consumable/semen, reagentsAmount)
|
||||
|
||||
var/datum/effect_system/foam_spread/foam = new
|
||||
foam.set_up(200, get_turf(vent), R)
|
||||
foam.start()
|
||||
CHECK_TICK
|
||||
|
||||
/datum/round_event/vent_clog/female/announce()
|
||||
priority_announce("The scrubbers network is experiencing a backpressure squirt. Some ejection of contents may occur.", "Atmospherics alert")
|
||||
|
||||
/datum/round_event/vent_clog/female/start()
|
||||
for(var/obj/machinery/atmospherics/components/unary/vent in vents)
|
||||
if(vent && vent.loc && !vent.welded)
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
R.my_atom = vent
|
||||
R.add_reagent(/datum/reagent/consumable/femcum, reagentsAmount)
|
||||
|
||||
var/datum/effect_system/foam_spread/foam = new
|
||||
foam.set_up(200, get_turf(vent), R)
|
||||
foam.start()
|
||||
CHECK_TICK
|
||||
|
||||
/datum/round_event/vent_clog/plasma_decon/announce()
|
||||
priority_announce("We are deploying an experimental plasma decontamination system. Please stand away from the vents and do not breathe the smoke that comes out.", "Central Command Update")
|
||||
|
||||
/datum/round_event/vent_clog/plasma_decon/start()
|
||||
for(var/obj/machinery/atmospherics/components/unary/vent in vents)
|
||||
if(vent && vent.loc && !vent.welded)
|
||||
var/datum/effect_system/smoke_spread/freezing/decon/smoke = new
|
||||
smoke.set_up(7, get_turf(vent), 7)
|
||||
smoke.start()
|
||||
CHECK_TICK
|
||||
/datum/round_event_control/vent_clog
|
||||
name = "Clogged Vents: Normal"
|
||||
typepath = /datum/round_event/vent_clog
|
||||
weight = 10
|
||||
max_occurrences = 3
|
||||
gamemode_blacklist = list("dynamic")
|
||||
min_players = 25
|
||||
|
||||
/datum/round_event/vent_clog
|
||||
announceWhen = 1
|
||||
startWhen = 5
|
||||
endWhen = 35
|
||||
var/interval = 2
|
||||
var/list/vents = list()
|
||||
var/randomProbability = 1
|
||||
var/reagentsAmount = 100
|
||||
var/list/saferChems = list(
|
||||
/datum/reagent/water,
|
||||
/datum/reagent/carbon,
|
||||
/datum/reagent/consumable/flour,
|
||||
/datum/reagent/space_cleaner,
|
||||
/datum/reagent/consumable/nutriment,
|
||||
/datum/reagent/consumable/condensedcapsaicin,
|
||||
/datum/reagent/drug/mushroomhallucinogen,
|
||||
/datum/reagent/lube,
|
||||
/datum/reagent/glitter/pink,
|
||||
/datum/reagent/cryptobiolin,
|
||||
/datum/reagent/toxin/plantbgone,
|
||||
/datum/reagent/blood,
|
||||
/datum/reagent/medicine/charcoal,
|
||||
/datum/reagent/drug/space_drugs,
|
||||
/datum/reagent/medicine/morphine,
|
||||
/datum/reagent/water/holywater,
|
||||
/datum/reagent/consumable/ethanol,
|
||||
/datum/reagent/consumable/hot_coco,
|
||||
/datum/reagent/toxin/acid,
|
||||
/datum/reagent/toxin/mindbreaker,
|
||||
/datum/reagent/toxin/rotatium,
|
||||
/datum/reagent/bluespace,
|
||||
/datum/reagent/pax,
|
||||
/datum/reagent/consumable/laughter,
|
||||
/datum/reagent/concentrated_barbers_aid,
|
||||
/datum/reagent/colorful_reagent,
|
||||
/datum/reagent/peaceborg_confuse,
|
||||
/datum/reagent/peaceborg_tire,
|
||||
/datum/reagent/consumable/sodiumchloride,
|
||||
/datum/reagent/consumable/ethanol/beer,
|
||||
/datum/reagent/hair_dye,
|
||||
/datum/reagent/consumable/sugar,
|
||||
/datum/reagent/glitter/white,
|
||||
/datum/reagent/growthserum,
|
||||
/datum/reagent/consumable/cornoil,
|
||||
/datum/reagent/uranium,
|
||||
/datum/reagent/carpet,
|
||||
/datum/reagent/firefighting_foam,
|
||||
/datum/reagent/consumable/tearjuice,
|
||||
/datum/reagent/medicine/strange_reagent
|
||||
|
||||
)
|
||||
//needs to be chemid unit checked at some point
|
||||
|
||||
/datum/round_event/vent_clog/announce()
|
||||
priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert")
|
||||
|
||||
/datum/round_event/vent_clog/setup()
|
||||
endWhen = rand(120, 180)
|
||||
for(var/obj/machinery/atmospherics/components/unary/vent_scrubber/temp_vent in GLOB.machines)
|
||||
var/turf/T = get_turf(temp_vent)
|
||||
var/area/A = T.loc
|
||||
if(T && is_station_level(T.z) && !temp_vent.welded && !A.safe)
|
||||
vents += temp_vent
|
||||
|
||||
if(!vents.len)
|
||||
return kill()
|
||||
|
||||
/datum/round_event/vent_clog/tick()
|
||||
|
||||
if(!vents.len)
|
||||
return kill()
|
||||
|
||||
CHECK_TICK
|
||||
|
||||
var/obj/machinery/atmospherics/components/unary/vent = pick(vents)
|
||||
vents -= vent
|
||||
|
||||
if(!vent || vent.welded)
|
||||
return
|
||||
|
||||
var/turf/T = get_turf(vent)
|
||||
if(!T)
|
||||
return
|
||||
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
R.my_atom = vent
|
||||
if (prob(randomProbability))
|
||||
R.add_reagent(get_random_reagent_id(), reagentsAmount)
|
||||
else
|
||||
R.add_reagent(pick(saferChems), reagentsAmount)
|
||||
|
||||
var/datum/effect_system/smoke_spread/chem/smoke_machine/C = new
|
||||
C.set_up(R,16,1,T)
|
||||
C.start()
|
||||
playsound(T, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
|
||||
/datum/round_event_control/vent_clog/threatening
|
||||
name = "Clogged Vents: Threatening"
|
||||
typepath = /datum/round_event/vent_clog/threatening
|
||||
weight = 4
|
||||
min_players = 35
|
||||
max_occurrences = 1
|
||||
earliest_start = 35 MINUTES
|
||||
|
||||
/datum/round_event/vent_clog/threatening
|
||||
randomProbability = 10
|
||||
reagentsAmount = 200
|
||||
|
||||
/datum/round_event_control/vent_clog/catastrophic
|
||||
name = "Clogged Vents: Catastrophic"
|
||||
typepath = /datum/round_event/vent_clog/catastrophic
|
||||
weight = 2
|
||||
min_players = 45
|
||||
max_occurrences = 1
|
||||
earliest_start = 45 MINUTES
|
||||
|
||||
/datum/round_event/vent_clog/catastrophic
|
||||
randomProbability = 30
|
||||
reagentsAmount = 250
|
||||
|
||||
/datum/round_event_control/vent_clog/beer
|
||||
name = "Clogged Vents: Beer"
|
||||
typepath = /datum/round_event/vent_clog/beer
|
||||
max_occurrences = 0
|
||||
|
||||
/datum/round_event/vent_clog/beer
|
||||
reagentsAmount = 100
|
||||
|
||||
/datum/round_event_control/vent_clog/plasma_decon
|
||||
name = "Anti-Plasma Flood"
|
||||
typepath = /datum/round_event/vent_clog/plasma_decon
|
||||
max_occurrences = 0
|
||||
|
||||
/datum/round_event_control/vent_clog/female
|
||||
name = "Clogged Vents; Girlcum"
|
||||
typepath = /datum/round_event/vent_clog/female
|
||||
max_occurrences = 0
|
||||
|
||||
/datum/round_event/vent_clog/female
|
||||
reagentsAmount = 100
|
||||
|
||||
/datum/round_event_control/vent_clog/male
|
||||
name = "Clogged Vents: Semen"
|
||||
typepath = /datum/round_event/vent_clog/male
|
||||
max_occurrences = 0
|
||||
|
||||
/datum/round_event/vent_clog/male
|
||||
reagentsAmount = 100
|
||||
|
||||
/datum/round_event/vent_clog/beer/announce()
|
||||
priority_announce("The scrubbers network is experiencing an unexpected surge of pressurized beer. Some ejection of contents may occur.", "Atmospherics alert")
|
||||
|
||||
/datum/round_event/vent_clog/beer/start()
|
||||
for(var/obj/machinery/atmospherics/components/unary/vent in vents)
|
||||
if(vent && vent.loc && !vent.welded)
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
R.my_atom = vent
|
||||
R.add_reagent(/datum/reagent/consumable/ethanol/beer, reagentsAmount)
|
||||
|
||||
var/datum/effect_system/foam_spread/foam = new
|
||||
foam.set_up(200, get_turf(vent), R)
|
||||
foam.start()
|
||||
CHECK_TICK
|
||||
|
||||
/datum/round_event/vent_clog/male/announce()
|
||||
priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejaculation of contents may occur.", "Atmospherics alert")
|
||||
|
||||
/datum/round_event/vent_clog/male/start()
|
||||
for(var/obj/machinery/atmospherics/components/unary/vent in vents)
|
||||
if(vent && vent.loc && !vent.welded)
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
R.my_atom = vent
|
||||
R.add_reagent(/datum/reagent/consumable/semen, reagentsAmount)
|
||||
|
||||
var/datum/effect_system/foam_spread/foam = new
|
||||
foam.set_up(200, get_turf(vent), R)
|
||||
foam.start()
|
||||
CHECK_TICK
|
||||
|
||||
/datum/round_event/vent_clog/female/announce()
|
||||
priority_announce("The scrubbers network is experiencing a backpressure squirt. Some ejection of contents may occur.", "Atmospherics alert")
|
||||
|
||||
/datum/round_event/vent_clog/female/start()
|
||||
for(var/obj/machinery/atmospherics/components/unary/vent in vents)
|
||||
if(vent && vent.loc && !vent.welded)
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
R.my_atom = vent
|
||||
R.add_reagent(/datum/reagent/consumable/femcum, reagentsAmount)
|
||||
|
||||
var/datum/effect_system/foam_spread/foam = new
|
||||
foam.set_up(200, get_turf(vent), R)
|
||||
foam.start()
|
||||
CHECK_TICK
|
||||
|
||||
/datum/round_event/vent_clog/plasma_decon/announce()
|
||||
priority_announce("We are deploying an experimental plasma decontamination system. Please stand away from the vents and do not breathe the smoke that comes out.", "Central Command Update")
|
||||
|
||||
/datum/round_event/vent_clog/plasma_decon/start()
|
||||
for(var/obj/machinery/atmospherics/components/unary/vent in vents)
|
||||
if(vent && vent.loc && !vent.welded)
|
||||
var/datum/effect_system/smoke_spread/freezing/decon/smoke = new
|
||||
smoke.set_up(7, get_turf(vent), 7)
|
||||
smoke.start()
|
||||
CHECK_TICK
|
||||
|
||||
Reference in New Issue
Block a user