/datum/event/meteor_wave startWhen = 86 endWhen = 9999//safety value, will be set during ticks has_skybox_image = TRUE var/next_meteor = 40 var/waves = 1 var/start_side var/next_meteor_lower = 10 var/next_meteor_upper = 20 ic_name = "a meteor storm" /datum/event/meteor_wave/get_skybox_image() var/image/res = overlay_image('icons/skybox/rockbox.dmi', "rockbox", COLOR_ASTEROID_ROCK, RESET_COLOR) res.blend_mode = BLEND_OVERLAY return res /datum/event/meteor_wave/setup() waves = 0 for(var/n in 1 to severity) waves += rand(5,15) start_side = pick(GLOB.cardinals) endWhen = worst_case_end() /datum/event/meteor_wave/announce() command_announcement.Announce(SSatlas.current_map.meteors_detected_message, "Meteor Alert", new_sound = 'sound/AI/meteors_detected_message.ogg', zlevels = affecting_z) /datum/event/meteor_wave/announce_start() if(announce_to_sensor_console) send_sensor_message("Entering [ic_name].") return FALSE else command_announcement.Announce(SSatlas.current_map.meteor_contact_message, "Meteor Alert", zlevels = affecting_z) /datum/event/meteor_wave/announce_end(var/faked) if(faked) return if(announce_to_sensor_console) send_sensor_message("Exiting [ic_name].") return FALSE else spawn(100)//We give 10 seconds before announcing, for the last wave of meteors to hit the station command_announcement.Announce(SSatlas.current_map.meteor_end_message, "Meteor Alert", zlevels = affecting_z) /datum/event/meteor_wave/tick() if(waves && activeFor >= next_meteor) send_wave() /datum/event/meteor_wave/proc/worst_case_end() return activeFor + ((30 / severity) * waves) + 30 /datum/event/meteor_wave/proc/send_wave() var/pick_side = prob(80) ? start_side : (prob(50) ? turn(start_side, 90) : turn(start_side, -90)) spawn() spawn_meteors(get_wave_size(), get_meteors(), pick_side, pick(affecting_z)) next_meteor += rand(next_meteor_lower, next_meteor_upper) / severity waves-- endWhen = worst_case_end() /datum/event/meteor_wave/proc/get_wave_size() return severity * rand(2,4) /datum/event/meteor_wave/proc/get_meteors() switch(severity) if(EVENT_LEVEL_MAJOR) return SSatlas.current_sector.meteors_major if(EVENT_LEVEL_MODERATE) return SSatlas.current_sector.meteors_moderate else return SSatlas.current_sector.meteors_minor /datum/event/meteor_wave/downed_ship ic_name = "a downed vessel" no_fake = TRUE /datum/event/meteor_wave/downed_ship/get_meteors() return SSatlas.current_sector.downed_ship_meteors /datum/event/meteor_wave/downed_ship/announce() command_announcement.Announce(SSatlas.current_map.ship_meteor_end_message, "Ship Debris Alert", new_sound = 'sound/AI/meteor_end_message.ogg', zlevels = affecting_z) /datum/event/meteor_wave/downed_ship/announce_start() . = ..() if(.) command_announcement.Announce(SSatlas.current_map.ship_meteor_contact_message, "Ship Debris Alert", new_sound = 'sound/AI/meteor_contact_message.ogg', zlevels = affecting_z) /datum/event/meteor_wave/downed_ship/announce_end(var/faked) if(faked) return . = ..() if(.) spawn(100)//We give 10 seconds before announcing, for the last wave of meteors to hit the station command_announcement.Announce(SSatlas.current_map.ship_meteor_end_message, "Ship Debris Alert", new_sound = 'sound/AI/meteor_end_message.ogg', zlevels = affecting_z) /datum/event/meteor_wave/overmap next_meteor_lower = 5 next_meteor_upper = 10 next_meteor = 0 /datum/event/meteor_wave/overmap/announce() return /datum/event/meteor_wave/dust ic_name = "a dust belt" /datum/event/meteor_wave/dust/announce() command_announcement.Announce(SSatlas.current_map.dust_detected_message, "Dust Belt Alert", new_sound = 'sound/AI/dust_detected_message.ogg', zlevels = affecting_z) /datum/event/meteor_wave/dust/announce_start() if(announce_to_sensor_console) send_sensor_message("Entering [ic_name].") return FALSE else command_announcement.Announce(SSatlas.current_map.dust_contact_message, "Dust Belt Alert", new_sound = 'sound/AI/dust_contact_message.ogg', zlevels = affecting_z) /datum/event/meteor_wave/dust/announce_end(var/faked) if(faked) return if(announce_to_sensor_console) send_sensor_message("Exiting [ic_name].") return FALSE else spawn(100)//We give 10 seconds before announcing, for the last wave of meteors to hit the station command_announcement.Announce(SSatlas.current_map.dust_end_message, "Dust Belt Alert", new_sound = 'sound/AI/dust_end_message.ogg', zlevels = affecting_z) /datum/event/meteor_wave/dust/get_meteors() return SSatlas.current_sector.meteors_dust /datum/event/meteor_wave/dust/overmap next_meteor_lower = 5 next_meteor_upper = 10 next_meteor = 0 /datum/event/meteor_wave/dust/overmap/announce() return