diff --git a/code/modules/events/comet_expulsion.dm b/code/modules/events/comet_expulsion.dm index 5fde976c042..8b5434ca6f2 100644 --- a/code/modules/events/comet_expulsion.dm +++ b/code/modules/events/comet_expulsion.dm @@ -88,7 +88,7 @@ /datum/event/comet_expulsion severity = EVENT_LEVEL_MAJOR - startWhen = 30 + startWhen = 10 /// Number of meteors aimed directly at Horizon (few) var/meteors_aimed = 0 /// Number of meteors traveling on random trajectories on the overmap (lots) @@ -165,6 +165,6 @@ command_announcement.Announce("Warning, long range field scanners have detected an unforeseen comet expulsion in collision route with [location_name()].\n\ All hands, assume defense condition, perform evasive maneuvers to avoid collision with the debris cloud. Damage control teams prepare to respond to breaches of the \ vessel perimeter.", - "[location_name()] Long Range Field Objects Sensor Array", new_sound = 'sound/effects/Evacuation.ogg', zlevels = affecting_z) + "[location_name()] Long Range Field Objects Sensor Array", new_sound = sound('sound/effects/Evacuation.ogg', volume = 50), zlevels = affecting_z) #undef SHIELD_MINIMUM_STRENGTH_TO_REDUCE_EXPLOSION_POWER diff --git a/code/modules/events/event.dm b/code/modules/events/event.dm index 88209f6e565..dbc06f45ab5 100644 --- a/code/modules/events/event.dm +++ b/code/modules/events/event.dm @@ -91,24 +91,24 @@ return total_weight -/datum/event //NOTE: Times are measured in master controller ticks! +/datum/event - ///When in the lifetime to call start() + ///When in the lifetime to call start(). IMPORTANT: Measured in ticks (two seconds)! var/startWhen = 0 - ///When in the lifetime to call announce() + ///When in the lifetime to call announce(). IMPORTANT: Measured in ticks (two seconds)! var/announceWhen = 0 - ///When in the lifetime the event should end + ///When in the lifetime the event should end. IMPORTANT: Measured in ticks (two seconds)! var/endWhen = 0 ///Severity. Lower means less severe, higher means more severe. Does not have to be supported. Is set on New() var/severity = 0 - ///How long the event has existed. You don't need to change this + ///How long the event has existed. You don't need to change this. var/activeFor = 0 - ///If this event is currently running. You should not change this + ///If this event is currently running. You should not change this. var/isRunning = TRUE ///When this event started diff --git a/code/modules/events/meteors.dm b/code/modules/events/meteors.dm index 3ba7b947bb1..fb2158f87d8 100644 --- a/code/modules/events/meteors.dm +++ b/code/modules/events/meteors.dm @@ -28,15 +28,19 @@ 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(.) + 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(.) + 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) @@ -105,17 +109,21 @@ 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(.) + 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(.) + 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) + 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 diff --git a/code/modules/overmap/events/event.dm b/code/modules/overmap/events/event.dm index 05ed2c1e298..f890cc72177 100644 --- a/code/modules/overmap/events/event.dm +++ b/code/modules/overmap/events/event.dm @@ -168,28 +168,31 @@ var/list/events var/list/event_icon_states = list("event") var/difficulty = EVENT_LEVEL_MODERATE - var/list/victims //basically cached events on which Z level - var/can_be_destroyed = TRUE //Can this event be destroyed by ship guns? + /// Basically cached events on which Z level + var/list/victims + /// Can this event be destroyed by ship guns? + var/can_be_destroyed = TRUE - // Events must be detected by sensors, but are otherwise instantly visible. + /// Events must be detected by sensors, but are otherwise instantly visible. requires_contact = TRUE instant_contact = TRUE - // Vars that determine movability, current moving direction, and moving speed // + // Vars that determine movability, current moving direction, and moving speed /// Whether this event can move or not var/movable_event = FALSE /// The percentage chance that this event will turn itself into a mobile version - var/movable_event_chance = 0 + var/movable_event_chance /// In which direction this event is currently planning on moving, will select a random dir if null var/moving_dir = null - /// How many times the event has to process before moving (2 seconds per) - var/movable_speed = 60 + /// How many times the event has to process before moving (2 seconds per). + /// This is automatically randomized to be 1/3 higher or lower on init, so not all events fire simultaneously. + var/movable_speed = 75 /// Ticks up each process until move speed is matched, at which point the event will move var/move_counter = 0 /// Percentage chance that the event changes direction - var/dir_change_chance = 25 + var/dir_change_chance = 33 /// How long to delay the next move counter if there's a ship in our loc, this gives bad events some time to happen - var/ship_delay_time = 2 + var/ship_delay_time = 10 /// Ticks up each process until move speed is matched, at which point the event will move var/ship_delay_counter = 0 @@ -203,7 +206,12 @@ make_movable() /obj/effect/overmap/event/proc/make_movable() - movable_event = TRUE + // For a default movable_speed of 60, this could result in a movable speed of anywhere between 40 and 80 (ie. moves every ~1.5-2.5 minutes). + var/speed_randomness = movable_speed / 3 + movable_speed = movable_speed + rand((0 - speed_randomness), (speed_randomness)) + // Hee hee + if(prob(1)) + movable_speed = initial(movable_speed) / 4 start_moving() /obj/effect/overmap/event/proc/start_moving() @@ -258,6 +266,10 @@ opacity = 1 event_icon_states = list("meteor1", "meteor2", "meteor3", "meteor4") difficulty = EVENT_LEVEL_MAJOR + // Faster than carp, but only ever move in a single direction. + movable_event_chance = 20 + movable_speed = 50 + dir_change_chance = 0 /obj/effect/overmap/event/electric name = "electrical storm" @@ -272,6 +284,10 @@ opacity = 1 event_icon_states = list("dust1", "dust2", "dust3", "dust4") can_be_destroyed = FALSE + // Faster than carp, but only ever move in a single direction. + movable_event_chance = 20 + movable_speed = 40 + dir_change_chance = 0 /obj/effect/overmap/event/ion name = "ion cloud" @@ -279,18 +295,23 @@ event_icon_states = list("ion1", "ion2", "ion3", "ion4") difficulty = EVENT_LEVEL_MAJOR can_be_destroyed = FALSE + // Very rare to move, very slow to move when it does, but hilarious. + movable_event_chance = 5 + movable_speed = 240 + dir_change_chance = 0 /obj/effect/overmap/event/carp name = "carp shoal" events = list(/datum/event/carp_migration/overmap) difficulty = EVENT_LEVEL_MODERATE event_icon_states = list("carp") - movable_event_chance = 5 + movable_event_chance = 30 /obj/effect/overmap/event/carp/major name = "carp school" opacity = 1 difficulty = EVENT_LEVEL_MAJOR + movable_event_chance = 15 // see comment at code/modules/events/gravity.dm // tl;dr gravity is handled globally, meaning if the horizon loses gravity, everyone does @@ -299,14 +320,15 @@ // events = list(/datum/event/gravity) // can_be_destroyed = FALSE -//These now are basically only used to spawn hazards. Will be useful when we need to spawn group of moving hazards +///These now are basically only used to spawn hazards. Will be useful when we need to spawn group of moving hazards /datum/overmap_event var/name = "map event" var/radius = 2 var/count = 6 var/hazards var/opacity = 0 - var/continuous = TRUE //if it should form continous blob, or can have gaps + /// If it should form continous blobs, or can have gaps + var/continuous = TRUE /datum/overmap_event/meteor name = "asteroid field" @@ -318,34 +340,34 @@ /datum/overmap_event/electric name = "electrical storm" - count = 11 - radius = 3 + count = 6 + radius = 2 hazards = /obj/effect/overmap/event/electric /datum/overmap_event/dust name = "dust cloud" - count = 16 - radius = 4 + count = 13 + radius = 3 opacity = 1 hazards = /obj/effect/overmap/event/dust /datum/overmap_event/ion name = "ion cloud" - count = 8 - radius = 3 + count = 5 + radius = 2 hazards = /obj/effect/overmap/event/ion /datum/overmap_event/carp name = "carp shoal" count = 8 - radius = 3 + radius = 2 continuous = FALSE hazards = /obj/effect/overmap/event/carp /datum/overmap_event/carp/major name = "carp school" count = 5 - radius = 4 + radius = 3 opacity = 1 hazards = /obj/effect/overmap/event/carp/major diff --git a/html/changelogs/Bat-OvermapEvents.yml b/html/changelogs/Bat-OvermapEvents.yml new file mode 100644 index 00000000000..89aabe5c0b4 --- /dev/null +++ b/html/changelogs/Bat-OvermapEvents.yml @@ -0,0 +1,18 @@ +# Your name. +author: Batrachophrenoboocosmomachia + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - balance: "Reduces the total quantity of hazards spawned on the overmap to reduce general transit time (fewer dead ends, etc.)" + - balance: "Reduces the advanced warning time of Comet Expulsion event from 60s -> 20s." + - balance: "Modifies the likelihood of certain hazards being movable as well as their relative speeds." + - bugfix: "Removes duplicated 'meteor wave' announcement procing when ship encounters/exits dust belts." + - qol: "Updates meteor impact warning text to be more impactful now that primary cause of false positives is removed." + - qol: "Lowers volume of Comet Expulsion Event announcement sound to reduce incidents of ears bleeding." diff --git a/maps/_common/mapsystem/map.dm b/maps/_common/mapsystem/map.dm index 35530a55945..6737aefa4a2 100644 --- a/maps/_common/mapsystem/map.dm +++ b/maps/_common/mapsystem/map.dm @@ -124,7 +124,7 @@ //event messages var/meteors_detected_message = "A meteor storm has been detected on collision course with the station. Estimated three minutes until impact, please activate station shields, and seek shelter in the central ring." - var/meteor_contact_message = "Contact with meteor wave imminent, all hands brace for impact." + var/meteor_contact_message = "Contact with meteor wave imminent, all hands brace for impact! Repeat, all hands brace for impact!" var/meteor_end_message = "The station has cleared the meteor shower, please return to your stations." var/ship_meteor_contact_message = "The NDV Icarus reports that it has downed an unknown vessel that was approaching your station. Prepare for debris impact - please evacuate the surface level if needed."