mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-10 09:54:52 +00:00
* Starting a replacement of how threat works. * no, we do it this way * Added threat levels to jobs * Added threat to... a lot. * Updated for traitor classes. * Fixed errors, except for one. It's consistently giving me "maximum number of internal arrays exceeded (65535)". I have no idea what could be causing this. * Added type annotation to GetJob. * This one I should change though * wow how'd that happen * spammable means low threat * Made story threat have initial threat level on average * Made somet rulesets force if they won the vote * ) * Gave EVERY job threat, added a config for it. * Rebalanced some numbers * Update code/game/gamemodes/dynamic/dynamic_storytellers.dm Co-Authored-By: Ghom <42542238+Ghommie@users.noreply.github.com> * Removes mush threat * Makes devil threat scale with form * reviewing reviewer's review of reviewer * Gutlunches can be friendly spawned, so no * Also made forced-friendly mobs not count Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
111 lines
3.4 KiB
Plaintext
111 lines
3.4 KiB
Plaintext
// 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
|
|
threat = 15
|
|
var/list/wave_type
|
|
var/wave_name = "normal"
|
|
var/direction
|
|
|
|
/datum/round_event/meteor_wave/setup()
|
|
announceWhen = 1
|
|
startWhen = rand(90, 180) // Apparently it is by 2 seconds, so 90 is actually 180 seconds, and 180 is 360 seconds. So this is 3-6 minutes
|
|
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))
|
|
if(!direction)
|
|
direction = pick(GLOB.cardinals)
|
|
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(generateMeteorString(startWhen,TRUE,direction), "Meteor Alert", "meteors")
|
|
|
|
/proc/generateMeteorString(startWhen,syndiealert,direction)
|
|
var/directionstring
|
|
switch(direction)
|
|
if(NORTH)
|
|
directionstring = " towards the fore"
|
|
if(SOUTH)
|
|
directionstring = " towards the aft"
|
|
if(EAST)
|
|
directionstring = " towards starboard"
|
|
if(WEST)
|
|
directionstring = " towards port"
|
|
return "Meteors have been detected on a collision course with the station[directionstring]. Estimated time until impact: [round((startWhen * SSevents.wait) / 10, 0.1)] seconds.[GLOB.singularity_counter && syndiealert ? " Warning: Anomalous gravity pulse detected, Syndicate technology interference likely." : ""]"
|
|
|
|
/datum/round_event/meteor_wave/tick()
|
|
if(ISMULTIPLE(activeFor, 3))
|
|
spawn_meteors(5, wave_type, direction) //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"
|
|
threat = 25
|
|
|
|
/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"
|
|
threat = 35
|
|
|
|
#undef SINGULO_BEACON_DISTURBANCE
|
|
#undef SINGULO_BEACON_MAX_DISTURBANCE
|