mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-24 05:23:22 +01:00
Adds the Odyssey gamemode. (#18972)
https://forums.aurorastation.org/topic/20198-mission-briefing-auroras-gamemode-revolution To-do: - [x] Finish storyteller verbs. - [x] Storyteller landmarks. - [x] Proper storyteller spawning. Right now the gamemode system is happy with just picking one storyteller and no actors. - [x] Antagonist whitelists code. - [x] Adding the Storyteller whitelist. - [x] Mission map loading code. - [x] Map in a bunch of missions. - [ ] Storyteller adminhelps. --------- Co-authored-by: Matt Atlas <liermattia@gmail.com> Co-authored-by: DreamySkrell <>
This commit is contained in:
co-authored by
Matt Atlas
DreamySkrell <>
parent
e1f5de6298
commit
1da20ad33f
@@ -1,8 +1,16 @@
|
||||
//How far from the edge of overmap zlevel could randomly placed objects spawn
|
||||
#define OVERMAP_EDGE 2
|
||||
//Dimension of overmap (squares 4 lyfe)
|
||||
|
||||
/// All sector overmap objects.
|
||||
/// Assoc list of stringified zlevel integer value (like `"1"` or `"42"` etc)
|
||||
/// to an instance of `/obj/effect/overmap/visitable`.
|
||||
GLOBAL_LIST_EMPTY(map_sectors)
|
||||
|
||||
/// All sector map templates. Analogous to the list above.
|
||||
/// Assoc list of stringified zlevel integer value
|
||||
/// to an instance of `/datum/map_template`.
|
||||
GLOBAL_LIST_EMPTY(map_templates)
|
||||
|
||||
/area/overmap/
|
||||
name = "System Map"
|
||||
icon_state = "start"
|
||||
|
||||
@@ -116,9 +116,7 @@
|
||||
continue
|
||||
|
||||
// Generate contact information for this overmap object.
|
||||
var/bearing = round(90 - Atan2(contact.x - linked.x, contact.y - linked.y),5)
|
||||
if(bearing < 0)
|
||||
bearing += 360
|
||||
var/bearing = get_bearing(contact)
|
||||
if(!record) // Begin attempting to identify ship.
|
||||
// The chance of detection decreases with distance to the target ship.
|
||||
if(contact.scannable && prob((SENSORS_DISTANCE_COEFFICIENT * contact.sensor_visibility)/max(get_dist(linked, contact), 0.5)))
|
||||
@@ -137,13 +135,7 @@
|
||||
visible_message(SPAN_NOTICE("<b>\The [src]</b> states, \"Contact '[contact.unknown_id]' tracing [objects_in_view[contact]]% complete, bearing [bearing_estimate], error +/- [bearing_variability].\""))
|
||||
playsound(loc, 'sound/machines/sensors/contactgeneric.ogg', 10, 1) //Let players know there's something nearby.
|
||||
if(objects_in_view[contact] >= 100) // Identification complete.
|
||||
record = new /datum/overmap_contact(src, contact)
|
||||
contact_datums[contact] = record
|
||||
if(contact.scannable)
|
||||
playsound(loc, 'sound/machines/sensors/newcontact.ogg', 30, 1)
|
||||
visible_message(SPAN_NOTICE("<b>\The [src]</b> states, \"New contact identified, designation [record.name], bearing [bearing].\""))
|
||||
record.show()
|
||||
animate(record.marker, alpha=255, 2 SECOND, 1, LINEAR_EASING)
|
||||
record = add_contact(contact)
|
||||
continue
|
||||
// Update identification information for this record.
|
||||
record.update_marker_icon()
|
||||
@@ -152,6 +144,28 @@
|
||||
if(!record.pinged)
|
||||
addtimer(CALLBACK(record, PROC_REF(ping)), time_delay)
|
||||
|
||||
/**
|
||||
* Adds an overmap object to the known contacts.
|
||||
*/
|
||||
/obj/machinery/computer/ship/sensors/proc/add_contact(obj/effect/overmap/contact)
|
||||
var/datum/overmap_contact/record = new(src, contact)
|
||||
var/bearing = get_bearing(contact)
|
||||
contact_datums[contact] = record
|
||||
if(contact.scannable)
|
||||
playsound(loc, 'sound/machines/sensors/newcontact.ogg', 30, 1)
|
||||
visible_message(SPAN_NOTICE("<b>\The [src]</b> states, \"New contact identified, designation [record.name], bearing [bearing].\""))
|
||||
record.show()
|
||||
animate(record.marker, alpha=255, 2 SECOND, 1, LINEAR_EASING)
|
||||
return record
|
||||
|
||||
/**
|
||||
* Gets the bearing of an obj/effect/overmap/contact from src.
|
||||
*/
|
||||
/obj/machinery/computer/ship/sensors/proc/get_bearing(obj/effect/overmap/contact)
|
||||
. = round(90 - Atan2(contact.x - linked.x, contact.y - linked.y),5)
|
||||
if(. < 0)
|
||||
. += 360
|
||||
|
||||
/obj/machinery/computer/ship/sensors/attackby(obj/item/attacking_item, mob/user)
|
||||
. = ..()
|
||||
var/obj/item/device/multitool/P = attacking_item
|
||||
|
||||
@@ -17,20 +17,33 @@
|
||||
var/has_edge_icon = TRUE
|
||||
|
||||
/turf/simulated/floor/exoplanet/New()
|
||||
// try to get the the atmos and area of the exoplanet
|
||||
// try to get the the atmos and area of the planet
|
||||
if(SSatlas.current_map.use_overmap)
|
||||
var/obj/effect/overmap/visitable/sector/exoplanet/E = GLOB.map_sectors["[z]"]
|
||||
if(istype(E))
|
||||
if(E.atmosphere)
|
||||
initial_gas = E.atmosphere.gas.Copy()
|
||||
temperature = E.atmosphere.temperature
|
||||
// if exoplanet
|
||||
var/datum/site = GLOB.map_sectors["[z]"]
|
||||
if(istype(site, /obj/effect/overmap/visitable/sector/exoplanet))
|
||||
var/obj/effect/overmap/visitable/sector/exoplanet/exoplanet = site
|
||||
if(exoplanet.atmosphere)
|
||||
initial_gas = exoplanet.atmosphere.gas.Copy()
|
||||
temperature = exoplanet.atmosphere.temperature
|
||||
else
|
||||
initial_gas = list()
|
||||
temperature = T0C
|
||||
//Must be done here, as light data is not fully carried over by ChangeTurf (but overlays are).
|
||||
set_light(MINIMUM_USEFUL_LIGHT_RANGE, E.lightlevel, E.lightcolor)
|
||||
if(E.planetary_area && istype(loc, world.area))
|
||||
ChangeArea(src, E.planetary_area)
|
||||
set_light(MINIMUM_USEFUL_LIGHT_RANGE, exoplanet.lightlevel, exoplanet.lightcolor)
|
||||
if(exoplanet.planetary_area && istype(loc, world.area))
|
||||
ChangeArea(src, exoplanet.planetary_area)
|
||||
// if away site
|
||||
else if(istype(site, /datum/map_template/ruin/away_site))
|
||||
var/datum/map_template/ruin/away_site/away_site = site
|
||||
if(away_site.exoplanet_atmosphere)
|
||||
initial_gas = away_site.exoplanet_atmosphere.gas.Copy()
|
||||
temperature = away_site.exoplanet_atmosphere.temperature
|
||||
else
|
||||
initial_gas = list()
|
||||
temperature = T0C
|
||||
set_light(MINIMUM_USEFUL_LIGHT_RANGE, away_site.lightlevel, away_site.lightcolor)
|
||||
|
||||
// if not on an exoplanet, instead just keep the default or mapped in atmos
|
||||
..()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user