mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
Merge branch 'master' of https://github.com/Yawn-Wider/YWPolarisVore into May2020UpstreamPull
This commit is contained in:
@@ -40,12 +40,10 @@
|
||||
if(spawn_locations.len) // Okay we've got landmarks, lets use those!
|
||||
shuffle_inplace(spawn_locations)
|
||||
num_groups = min(num_groups, spawn_locations.len)
|
||||
var/i = 1
|
||||
while (i <= num_groups)
|
||||
for (var/i = 1, i <= num_groups, i++)
|
||||
var/group_size = rand(group_size_min, group_size_max)
|
||||
for (var/j = 0, j < group_size, j++)
|
||||
spawn_one_carp(spawn_locations[i])
|
||||
i++
|
||||
return
|
||||
|
||||
// Okay we did *not* have any landmarks, so lets do our best!
|
||||
|
||||
@@ -35,8 +35,16 @@
|
||||
|
||||
/datum/event/electrical_storm/tick()
|
||||
..()
|
||||
// See if shields can stop it first (It would be nice to port baystation's cooler shield gens perhaps)
|
||||
// TODO - We need a better shield generator system to handle this properly.
|
||||
// See if shields can stop it first
|
||||
var/list/shields = list()
|
||||
for(var/obj/machinery/power/shield_generator/G in global.machines)
|
||||
if((G.z in affecting_z) && G.running && G.check_flag(MODEFLAG_EM))
|
||||
shields += G
|
||||
if(shields.len)
|
||||
var/obj/machinery/power/shield_generator/shield_gen = pick(shields)
|
||||
//Minor breaches aren't enough to let through frying amounts of power
|
||||
if(shield_gen.deal_shield_damage(30 * severity, SHIELD_DAMTYPE_EM) <= SHIELD_BREACHED_MINOR)
|
||||
return
|
||||
if(!valid_apcs.len)
|
||||
log_debug("No valid APCs found for electrical storm event ship=[victim]!")
|
||||
return
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
var/datum/event_meta/event_meta = null
|
||||
var/list/affecting_z = null // List of z-levels to affect, null lets the event choose (usally station_levels)
|
||||
var/has_skybox_image = FALSE // True if SSskybox should query this event for an image to put in the skybox.
|
||||
var/obj/effect/overmap/visitable/ship/victim = null // Ship that triggered this event on itself. Some messages might be different etc.
|
||||
var/obj/effect/overmap/visitable/ship/victim = null // Ship this event is acting upon (If this is event is due to overmap travel).nt etc.
|
||||
|
||||
/datum/event/nothing
|
||||
|
||||
@@ -137,27 +137,29 @@
|
||||
activeFor++
|
||||
|
||||
//Called when start(), announce() and end() has all been called.
|
||||
/datum/event/proc/kill()
|
||||
/datum/event/proc/kill(external_use = FALSE)
|
||||
// If this event was forcefully killed run end() for individual cleanup
|
||||
if(isRunning)
|
||||
isRunning = 0
|
||||
end()
|
||||
|
||||
endedAt = world.time
|
||||
SSevents.event_complete(src)
|
||||
if(!external_use)
|
||||
SSevents.event_complete(src)
|
||||
|
||||
//Called during building of skybox to get overlays
|
||||
/datum/event/proc/get_skybox_image()
|
||||
return
|
||||
|
||||
/datum/event/New(var/datum/event_meta/EM)
|
||||
/datum/event/New(var/datum/event_meta/EM, external_use = FALSE)
|
||||
// event needs to be responsible for this, as stuff like APLUs currently make their own events for curious reasons
|
||||
SSevents.active_events += src
|
||||
if(!external_use)
|
||||
SSevents.active_events += src
|
||||
|
||||
event_meta = EM
|
||||
severity = event_meta.severity
|
||||
if(severity < EVENT_LEVEL_MUNDANE) severity = EVENT_LEVEL_MUNDANE
|
||||
if(severity > EVENT_LEVEL_MAJOR) severity = EVENT_LEVEL_MAJOR
|
||||
event_meta = EM
|
||||
severity = event_meta.severity
|
||||
if(severity < EVENT_LEVEL_MUNDANE) severity = EVENT_LEVEL_MUNDANE
|
||||
if(severity > EVENT_LEVEL_MAJOR) severity = EVENT_LEVEL_MAJOR
|
||||
|
||||
startedAt = world.time
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ var/list/event_last_fired = list()
|
||||
|
||||
possibleEvents[/datum/event/pda_spam] = max(min(25, player_list.len) * 4, 200)
|
||||
possibleEvents[/datum/event/money_lotto] = max(min(5, player_list.len), 50)
|
||||
if(account_hack_attempted)
|
||||
if(GLOB.account_hack_attempted)
|
||||
possibleEvents[/datum/event/money_hacker] = max(min(25, player_list.len) * 4, 200)
|
||||
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
/datum/event/gravity/start()
|
||||
gravity_is_on = 0
|
||||
for(var/area/A in all_areas)
|
||||
for(var/area/A in world)
|
||||
if(A.z in zLevels)
|
||||
A.gravitychange(gravity_is_on)
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
if(!gravity_is_on)
|
||||
gravity_is_on = 1
|
||||
|
||||
for(var/area/A in all_areas)
|
||||
for(var/area/A in world)
|
||||
if(A.z in zLevels)
|
||||
A.gravitychange(gravity_is_on)
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
/datum/event/ionstorm
|
||||
has_skybox_image = TRUE
|
||||
announceWhen = -1 // Never (setup may override)
|
||||
var/botEmagChance = 0 //VOREStation Edit
|
||||
var/cloud_hueshift
|
||||
var/list/players = list()
|
||||
@@ -17,10 +18,13 @@
|
||||
|
||||
/datum/event/ionstorm/setup()
|
||||
endWhen = rand(500, 1500)
|
||||
if(prob(50))
|
||||
announceWhen = endWhen + rand(250, 400)
|
||||
|
||||
// Interestingly enough, announce() actually *DOES* this event for some reason.
|
||||
/datum/event/ionstorm/announce()
|
||||
// command_alert("The station has entered an ion storm. Monitor all electronic equipment for malfunctions", "Anomaly Alert")
|
||||
command_announcement.Announce("It has come to our attention that \the [location_name()] passed through an ion storm. Please monitor all electronic equipment for malfunctions.", "Anomaly Alert")
|
||||
|
||||
/datum/event/ionstorm/start()
|
||||
for (var/mob/living/carbon/human/player in player_list)
|
||||
if( !player.mind || player_is_antag(player.mind, only_offstation_roles = 1) || player.client.inactivity > MinutesToTicks(10))
|
||||
continue
|
||||
@@ -67,11 +71,6 @@
|
||||
if(prob(botEmagChance))
|
||||
bot.emag_act(1)
|
||||
|
||||
/datum/event/ionstorm/end()
|
||||
..()
|
||||
if(prob(50))
|
||||
spawn(rand(5000,8000))
|
||||
command_announcement.Announce("It has come to our attention that \the [location_name()] passed through an ion storm. Please monitor all electronic equipment for malfunctions.", "Anomaly Alert")
|
||||
|
||||
// Overmap version
|
||||
/datum/event/ionstorm/overmap/announce()
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
startWhen = 30 // About one minute early warning
|
||||
endWhen = 60 // Adjusted automatically in tick()
|
||||
has_skybox_image = TRUE
|
||||
var/next_meteor = 6
|
||||
var/alarmWhen = 30
|
||||
var/next_meteor = 40
|
||||
var/waves = 1
|
||||
var/start_side
|
||||
var/next_meteor_lower = 10
|
||||
@@ -32,6 +33,12 @@
|
||||
command_announcement.Announce("\The [location_name()] is now in a meteor shower.", "Meteor Alert")
|
||||
|
||||
/datum/event/meteor_wave/tick()
|
||||
// Begin sending the alarm signals to shield diffusers so the field is already regenerated (if it exists) by the time actual meteors start flying around.
|
||||
if(activeFor >= alarmWhen)
|
||||
for(var/obj/machinery/shield_diffuser/SD in global.machines)
|
||||
if(SD.z in affecting_z)
|
||||
SD.meteor_alarm(10)
|
||||
|
||||
if(waves && activeFor >= next_meteor)
|
||||
send_wave()
|
||||
|
||||
@@ -105,10 +112,11 @@
|
||||
next_meteor_lower = 5
|
||||
next_meteor_upper = 10
|
||||
next_meteor = 0
|
||||
alarmWhen = 0
|
||||
|
||||
/datum/event/meteor_wave/overmap/tick()
|
||||
if(victim && !victim.is_still()) // Meteors mostly fly in your face
|
||||
start_side = prob(90) ? victim.fore_dir : pick(GLOB.cardinal)
|
||||
if(victim && !victim.is_still() && prob(90)) // Meteors mostly fly in your face
|
||||
start_side = victim.fore_dir
|
||||
else //Unless you're standing still
|
||||
start_side = pick(GLOB.cardinal)
|
||||
..()
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
//var/global/account_hack_attempted = 0
|
||||
|
||||
GLOBAL_VAR_INIT(account_hack_attempted, 0)
|
||||
|
||||
/datum/event/money_hacker
|
||||
var/datum/money_account/affected_account
|
||||
endWhen = 100
|
||||
@@ -10,7 +12,7 @@
|
||||
if(all_money_accounts.len)
|
||||
affected_account = pick(all_money_accounts)
|
||||
|
||||
account_hack_attempted = 1
|
||||
GLOB.account_hack_attempted = 1
|
||||
else
|
||||
kill()
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
|
||||
/datum/event/prison_break/start()
|
||||
for(var/area/A in all_areas)
|
||||
for(var/area/A in world)
|
||||
if(is_type_in_list(A,areaType) && !is_type_in_list(A,areaNotType))
|
||||
areas += A
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//var/global/list/event_viruses = list() // so that event viruses are kept around for admin logs, rather than being GCed
|
||||
var/global/list/event_viruses = list() // so that event viruses are kept around for admin logs, rather than being GCed
|
||||
|
||||
datum/event/viral_infection
|
||||
var/list/viruses = list()
|
||||
|
||||
Reference in New Issue
Block a user