Lemurian Sea (#22686)

changes:
  - refactor: "Refactors Gravity Generator UI from HTML to TGUI."
- rscadd: "Adds sector-based modifier var 'overmap_hazards_multiplier'
for generating total overmap hazard count."
  - soundadd: "Adds new Lemurian Sea 'welcome' announcements."
- rscadd: "Added Lemurian Sea gravitic anomalies as overmap hazards and
random events."
  - rscadd: "Adds ADPI/The Voices."
- rscadd: "Adds ADPI Panel for modmins to send ADPI messages to a single
character or all characters from their respective pools, or custom
messages."
- balance: "Vaurca Hivenet communication, the Hivenet Manifest, and
Hivenet Echoes are now disabled while the ship is in Lemurian Sea
sectors."
This commit is contained in:
Batrachophreno
2026-06-13 16:25:49 +00:00
committed by GitHub
parent a11c25bef6
commit 0c7ab8baa7
53 changed files with 1818 additions and 417 deletions
+52 -17
View File
@@ -13,11 +13,14 @@
// Acquire the list of not-yet utilized overmap turfs on this Z-level
var/list/candidate_turfs = block(locate(OVERMAP_EDGE, OVERMAP_EDGE, z_level),locate(overmap_size - OVERMAP_EDGE, overmap_size - OVERMAP_EDGE,z_level))
candidate_turfs = where(candidate_turfs, /proc/can_not_locate, /obj/effect/overmap/visitable)
var/list/available_event_types = get_available_event_types()
if(!length(available_event_types))
return
for(var/i = 1 to number_of_events)
if(!candidate_turfs.len)
break
var/overmap_event_type = pick(subtypesof(/datum/overmap_event))
var/overmap_event_type = pick(available_event_types)
var/datum/overmap_event/datum_spawn = new overmap_event_type
var/list/event_turfs = acquire_event_turfs(datum_spawn.count, datum_spawn.radius, candidate_turfs, datum_spawn.continuous)
@@ -29,6 +32,15 @@
qdel(datum_spawn)//idk help how do I do this better?
/singleton/overmap_event_handler/proc/get_available_event_types()
var/list/available_event_types = list()
for(var/overmap_event_type in subtypesof(/datum/overmap_event))
var/datum/overmap_event/datum_spawn = new overmap_event_type
if(datum_spawn.spawns_in_current_sector())
available_event_types += overmap_event_type
qdel(datum_spawn)
return available_event_types
/singleton/overmap_event_handler/proc/acquire_event_turfs(var/number_of_turfs, var/distance_from_origin, var/list/candidate_turfs, var/continuous = TRUE)
number_of_turfs = min(number_of_turfs, candidate_turfs.len)
candidate_turfs = candidate_turfs.Copy() // Not this proc's responsibility to adjust the given lists
@@ -195,6 +207,8 @@
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
/// Text that appears in the tooltip.
var/tooltip_text = "A hazard."
/obj/effect/overmap/event/Initialize()
. = ..()
@@ -266,6 +280,7 @@
opacity = 1
event_icon_states = list("meteor1", "meteor2", "meteor3", "meteor4")
difficulty = EVENT_LEVEL_MAJOR
tooltip_text = "Large rocks and debris traveling at high speed that can destroy entire hull sections."
/obj/effect/overmap/event/electric
name = "electrical storm"
@@ -273,6 +288,7 @@
event_icon_states = list("electrical1", "electrical2")
difficulty = EVENT_LEVEL_MAJOR
can_be_destroyed = FALSE
tooltip_text = "Electromagnetic storm effects that can damage or disable electrical grids."
/obj/effect/overmap/event/dust
name = "dust cloud"
@@ -280,6 +296,7 @@
opacity = 1
event_icon_states = list("dust1", "dust2", "dust3", "dust4")
can_be_destroyed = FALSE
tooltip_text = "Small dust and debris traveling at high speed that can damage or destroy external windows."
/obj/effect/overmap/event/ion
name = "ion cloud"
@@ -287,6 +304,7 @@
event_icon_states = list("ion1", "ion2", "ion3", "ion4")
difficulty = EVENT_LEVEL_MAJOR
can_be_destroyed = FALSE
tooltip_text = "Ionic effects that can damage synthetics like IPCs or AI, as well as disrupt telecommunications."
/obj/effect/overmap/event/carp
name = "carp shoal"
@@ -294,6 +312,7 @@
difficulty = EVENT_LEVEL_MODERATE
event_icon_states = list("carp")
movable_event_chance = 30
tooltip_text = "Xenofauna: usually hostile."
/obj/effect/overmap/event/carp/major
name = "carp school"
@@ -301,22 +320,40 @@
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
// /obj/effect/overmap/event/gravity
// name = "dark matter influx"
// events = list(/datum/event/gravity)
// can_be_destroyed = FALSE
/obj/effect/overmap/event/gravity_anomaly
name = "gravitic anomaly"
events = list(/datum/event/gravity_anomaly)
difficulty = EVENT_LEVEL_MODERATE
event_icon_states = list("grav1")
can_be_destroyed = FALSE
tooltip_text = "Unstable gravitic shear effects detected; wide-field artificial gravity should be powered down before transit."
///These now are basically only used to spawn hazards. Will be useful when we need to spawn group of moving hazards
/obj/effect/overmap/event/MouseEntered(location, control, params)
. = ..()
openToolTip(usr, src, params, tooltip_text)
/obj/effect/overmap/event/MouseExited(location, control, params)
. = ..()
closeToolTip(usr)
/// 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
/// If it should form continous blobs, or can have gaps
/// If it should form continous blobs, or can have gaps.
var/continuous = TRUE
/// If set, this event will only spawn in the named space sectors.
var/list/sectors = list()
/datum/overmap_event/proc/spawns_in_current_sector()
if(!length(sectors))
return TRUE
if(!SSatlas.current_sector)
return FALSE
return (SSatlas.current_sector.name in sectors)
/datum/overmap_event/meteor
name = "asteroid field"
@@ -359,11 +396,9 @@
opacity = 1
hazards = /obj/effect/overmap/event/carp/major
// see comment at code/modules/events/gravity.dm
// tl;dr gravity is handled globally, meaning if the horizon loses gravity, everyone does
// this needs to be fixed before we can uncomment this
// /datum/overmap_event/gravity
// name = "dark matter influx"
// count = 12
// radius = 4
// hazards = /obj/effect/overmap/event/gravity
/datum/overmap_event/gravity
name = "dark matter influx"
count = 15
radius = 8
hazards = /obj/effect/overmap/event/gravity_anomaly
sectors = list(SECTOR_LEMURIAN_SEA, SECTOR_LEMURIAN_SEA_FAR)
+16 -8
View File
@@ -32,15 +32,23 @@
var/list/map_z = list()
var/known = 0 //shows up on nav computers automatically
var/scannable //if set to TRUE will show up on ship sensors for detailed scans
var/unknown_id // A unique identifier used when this entity is scanned. Assigned in Initialize().
var/requires_contact = TRUE //whether or not the effect must be identified by ship sensors before being seen.
var/instant_contact = FALSE //do we instantly identify ourselves to any ship in sensors range?
var/sensor_range_override = FALSE //When true, this overmap object will be scanned with range instead of view.
/// Shows up on nav computers automatically
var/known = 0
/// If set to TRUE will show up on ship sensors for detailed scans
var/scannable
/// A unique identifier used when this entity is scanned. Assigned in Initialize().
var/unknown_id
/// Whether or not the effect must be identified by ship sensors before being seen.
var/requires_contact = TRUE
/// Do we instantly identify ourselves to any ship in sensors range?
var/instant_contact = FALSE
/// When true, this overmap object will be scanned with range instead of view.
var/sensor_range_override = FALSE
var/sensor_visibility = 10 //how likely it is to increase identification process each scan.
var/vessel_mass = 10000 // metric tonnes, very rough number, affects acceleration provided by engines
/// How likely it is to increase identification process each scan.
var/sensor_visibility = 10
/// Metric tonnes, very rough number, affects acceleration provided by engines
var/vessel_mass = 10000
var/image/targeted_overlay