mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-25 01:22:13 +00:00
Adds a Horizon roundstart report with overmap bearings, sensor tweaks. (#15765)
This commit is contained in:
@@ -176,3 +176,9 @@ var/datum/controller/subsystem/shuttle/SSshuttle
|
||||
|
||||
/datum/controller/subsystem/shuttle/stat_entry()
|
||||
..("Shuttles:[shuttles.len], Ships:[ships.len], L:[registered_shuttle_landmarks.len][overmap_halted ? ", HALT" : ""]")
|
||||
|
||||
/datum/controller/subsystem/shuttle/proc/ship_by_type(type)
|
||||
for (var/obj/effect/overmap/visitable/ship/ship in ships)
|
||||
if (ship.type == type)
|
||||
return ship
|
||||
return null
|
||||
|
||||
@@ -29,8 +29,8 @@ var/global/list/additional_antag_types = list()
|
||||
|
||||
var/station_was_nuked = 0 // See nuclearbomb.dm and malfunction.dm.
|
||||
var/explosion_in_progress = 0 // Sit back and relax
|
||||
var/waittime_l = 600 // Lower bound on time before intercept arrives (in tenths of seconds)
|
||||
var/waittime_h = 1800 // Upper bound on time before intercept arrives (in tenths of seconds)
|
||||
var/waittime_l = 60 SECONDS // Lower bound on time before intercept arrives (in tenths of seconds)
|
||||
var/waittime_h = 180 SECONDS // Upper bound on time before intercept arrives (in tenths of seconds)
|
||||
|
||||
var/event_delay_mod_moderate // Modifies the timing of random events.
|
||||
var/event_delay_mod_major // As above.
|
||||
@@ -277,6 +277,9 @@ var/global/list/additional_antag_types = list()
|
||||
spawn (ROUNDSTART_LOGOUT_REPORT_TIME)
|
||||
display_logout_report()
|
||||
|
||||
var/welcome_delay = rand(waittime_l, waittime_h)
|
||||
addtimer(CALLBACK(current_map, TYPE_PROC_REF(/datum/map, send_welcome)), welcome_delay)
|
||||
|
||||
//Assign all antag types for this game mode. Any players spawned as antags earlier should have been removed from the pending list, so no need to worry about those.
|
||||
for(var/datum/antagonist/antag in antag_templates)
|
||||
if(!(antag.flags & ANTAG_OVERRIDE_JOB))
|
||||
|
||||
@@ -61,6 +61,12 @@
|
||||
sector_hud_menu_sound = 'sound/effects/tajara_menu_click.ogg'
|
||||
sector_hud_arrow = "menu_arrow"
|
||||
|
||||
/datum/space_sector/srandmarr/get_port_travel_time()
|
||||
return "[rand(6, 12)] hours"
|
||||
|
||||
/datum/space_sector/srandmarr/generate_system_name()
|
||||
return "S'rand'marr, and nearby points of interest"
|
||||
|
||||
/datum/space_sector/nrrahrahul
|
||||
name = SECTOR_NRRAHRAHUL
|
||||
description = "Hro'zamal is the second planet in the Nrrahrahul system. Formerly named Nrrahrahul Two, it was given the name Hro'zamal after the establishment of a permanent civilian \
|
||||
|
||||
@@ -110,3 +110,9 @@
|
||||
|
||||
/datum/space_sector/proc/get_chat_description()
|
||||
return "<hr><div align='center'><hr1><B>Current Sector: [name]!</B></hr1><br><i>[description]</i><hr></div>"
|
||||
|
||||
/datum/space_sector/proc/get_port_travel_time()
|
||||
return "[rand(1, 3)] days"
|
||||
|
||||
/datum/space_sector/proc/generate_system_name()
|
||||
return "[pick("Miranda", "BNM", "Xavier", "GJ", "HD", "TC", "Melissa", "TC")][prob(10) ? " Eridani" : ""] [rand(100,999)][prob(10) ? " [pick(greek_letters)]" : ""]"
|
||||
@@ -95,6 +95,7 @@
|
||||
if(looping_sound)
|
||||
soundloop = new(src, enabled)
|
||||
initial_name = name
|
||||
listener = new(LISTENER_MODULAR_COMPUTER, src)
|
||||
|
||||
/obj/item/modular_computer/Destroy()
|
||||
kill_program(TRUE)
|
||||
@@ -105,6 +106,7 @@
|
||||
qdel(CH)
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
QDEL_NULL(soundloop)
|
||||
QDEL_NULL(listener)
|
||||
return ..()
|
||||
|
||||
/obj/item/modular_computer/CouldUseTopic(var/mob/user)
|
||||
|
||||
@@ -79,6 +79,7 @@
|
||||
var/obj/item/computer_hardware/tesla_link/tesla_link // Tesla Link, Allows remote charging from nearest APC.
|
||||
var/obj/item/device/paicard/personal_ai // Personal AI, can control the device via a verb when installed
|
||||
var/obj/item/computer_hardware/flashlight/flashlight
|
||||
var/listener/listener
|
||||
|
||||
var/registered_message = ""
|
||||
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
new /datum/computer_file/program/chat_client(comp),
|
||||
new /datum/computer_file/program/civilian/cargoorder(comp),
|
||||
new /datum/computer_file/program/card_mod(comp),
|
||||
new /datum/computer_file/program/comm(comp, FALSE),
|
||||
new /datum/computer_file/program/comm(comp, TRUE),
|
||||
new /datum/computer_file/program/records/employment(comp)
|
||||
)
|
||||
return _prg_list
|
||||
@@ -279,7 +279,7 @@
|
||||
new /datum/computer_file/program/manifest(comp),
|
||||
new /datum/computer_file/program/chat_client(comp),
|
||||
new /datum/computer_file/program/card_mod(comp),
|
||||
new /datum/computer_file/program/comm(comp, FALSE),
|
||||
new /datum/computer_file/program/comm(comp, TRUE),
|
||||
new /datum/computer_file/program/camera_monitor(comp),
|
||||
new /datum/computer_file/program/digitalwarrant(comp),
|
||||
new /datum/computer_file/program/penal_mechs(comp),
|
||||
|
||||
@@ -81,12 +81,28 @@
|
||||
// Handle datalinked view
|
||||
datalink_process()
|
||||
|
||||
|
||||
for(var/obj/effect/overmap/contact in view(sensor_range, linked))
|
||||
if(contact == linked)
|
||||
continue
|
||||
if(!contact.requires_contact) // Only some effects require contact for visibility.
|
||||
continue
|
||||
|
||||
objects_in_current_view[contact] = TRUE
|
||||
|
||||
if(contact.instant_contact) // Instantly identify the object in range.
|
||||
objects_in_view[contact] = 100
|
||||
else if(!(contact in objects_in_view))
|
||||
objects_in_view[contact] = 0
|
||||
|
||||
if(sensors.deep_scan_toggled)
|
||||
for(var/obj/effect/overmap/contact in range(sensors.deep_scan_range, linked))
|
||||
if(!contact.sensor_range_override)
|
||||
continue
|
||||
if(contact == linked)
|
||||
continue
|
||||
if(!contact.requires_contact) // Only some effects require contact for visibility.
|
||||
continue
|
||||
|
||||
objects_in_current_view[contact] = TRUE
|
||||
|
||||
if(contact.instant_contact) // Instantly identify the object in range.
|
||||
@@ -279,7 +295,7 @@
|
||||
|
||||
// Recurse the function on the other ship's instance
|
||||
sensor_console.datalink_remove_ship_datalink(src.connected)
|
||||
visible_message(SPAN_NOTICE("<b>\The [src]</b> states, \"A datalink contact was sewered! Recalibration...\""))
|
||||
visible_message(SPAN_NOTICE("<b>\The [src]</b> states, \"A datalink contact was severed! Recalibrating...\""))
|
||||
|
||||
|
||||
/obj/machinery/computer/ship/sensors/proc/datalink_remove_all_ships_datalink()
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
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.
|
||||
|
||||
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
|
||||
|
||||
@@ -6,6 +6,7 @@ var/global/area/overmap/map_overmap // Global object used to locate the overmap
|
||||
/obj/effect/overmap/visitable
|
||||
name = "map object"
|
||||
scannable = TRUE
|
||||
sensor_range_override = TRUE
|
||||
var/designation //Actual name of the object.
|
||||
var/class //Imagine a ship or station's class. "NTCC" Odin, "SCCV" Horizon, ...
|
||||
unknown_id = "Bogey"
|
||||
@@ -51,6 +52,7 @@ var/global/area/overmap/map_overmap // Global object used to locate the overmap
|
||||
var/list/place_near_main
|
||||
|
||||
var/invisible_until_ghostrole_spawn = FALSE
|
||||
var/hide_from_reports = FALSE
|
||||
|
||||
/obj/effect/overmap/visitable/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -66,6 +66,9 @@
|
||||
data["range"] = sensors.range
|
||||
data["health"] = sensors.health
|
||||
data["max_health"] = sensors.max_health
|
||||
data["deep_scan_name"] = sensors.deep_scan_sensor_name
|
||||
data["deep_scan_range"] = sensors.deep_scan_range
|
||||
data["deep_scan_toggled"] = sensors.deep_scan_toggled
|
||||
data["heat"] = sensors.heat
|
||||
data["critical_heat"] = sensors.critical_heat
|
||||
if(sensors.health == 0)
|
||||
@@ -96,7 +99,7 @@
|
||||
var/list/contacts = list()
|
||||
var/list/potential_contacts = list()
|
||||
|
||||
for(var/obj/effect/overmap/nearby in view(7,linked))
|
||||
for(var/obj/effect/overmap/nearby in view(7, linked))
|
||||
if(nearby.requires_contact) // Some ships require.
|
||||
continue
|
||||
potential_contacts |= nearby
|
||||
@@ -194,6 +197,10 @@
|
||||
sensors.toggle()
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if(href_list["deep_scan_toggle"])
|
||||
sensors.deep_scan_toggled = !sensors.deep_scan_toggled
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if(identification)
|
||||
if(href_list["toggle_id"])
|
||||
identification.toggle()
|
||||
@@ -303,6 +310,9 @@
|
||||
var/range = 1
|
||||
var/max_range = 10
|
||||
var/sensor_strength = 5//used for detecting ships via contacts
|
||||
var/deep_scan_range = 4 //Maximum range for the range() check in sensors. Basically a way to use range instead of view in this radius.
|
||||
var/deep_scan_toggled = FALSE //When TRUE, this sensor is using long range sensors.
|
||||
var/deep_scan_sensor_name = "High-Power Sensor Array"
|
||||
idle_power_usage = 5000
|
||||
|
||||
var/base_icon_state
|
||||
@@ -401,7 +411,9 @@
|
||||
|
||||
take_damage(rand(10,50))
|
||||
toggle()
|
||||
heat += active_power_usage/15000
|
||||
heat += active_power_usage / 15000
|
||||
if(deep_scan_toggled)
|
||||
heat += deep_scan_range / 8
|
||||
|
||||
if (heat > 0)
|
||||
heat = max(0, heat - heat_reduction)
|
||||
@@ -433,10 +445,18 @@
|
||||
heat_reduction = 1.7 // Can sustain range 4
|
||||
max_range = 7
|
||||
desc = "Miniturized gravity scanner with various other sensors, used to detect irregularities in surrounding space. Can only run in vacuum to protect delicate quantum BS elements."
|
||||
deep_scan_range = 0
|
||||
|
||||
/obj/machinery/shipsensors/strong
|
||||
name = "sensors suite"
|
||||
desc = "An upgrade to the standard ship-mounted sensor array, this beast has massive cooling systems running beneath it, allowing it to run hotter for much longer. Can only run in vacuum to protect delicate quantum BS elements."
|
||||
icon_state = "sensor_suite"
|
||||
heat_reduction = 3.7 // can sustain range 6
|
||||
max_range = 14
|
||||
deep_scan_range = 6
|
||||
deep_scan_sensor_name = "High-Power Sensor Array"
|
||||
|
||||
/obj/machinery/shipsensors/strong/venator
|
||||
name = "venator-class quantum sensor array"
|
||||
desc = "An incredibly advanced sensor array, created using top of the line technology in every conceivable area. Not only does it far outperform and outclass every other sensors system, it also boasts revolutionary quantum long-range sensors."
|
||||
deep_scan_range = 12
|
||||
deep_scan_sensor_name = "Venator-Class Ultra-High Depth Sensors"
|
||||
|
||||
@@ -17,6 +17,8 @@ var/const/OVERMAP_SPEED_CONSTANT = (1 SECOND)
|
||||
icon_state = "generic"
|
||||
requires_contact = TRUE
|
||||
obfuscated_name = "unidentified vessel"
|
||||
sensor_range_override = FALSE
|
||||
hide_from_reports = TRUE
|
||||
var/moving_state = "ship_moving"
|
||||
|
||||
var/list/known_ships = list() //List of ships known at roundstart - put types here.
|
||||
|
||||
@@ -19,9 +19,6 @@ var/list/greek_letters = list("Alpha", "Beta", "Gamma", "Delta",
|
||||
"Nu", "Xi", "Omicron", "Pi", "Rho", "Sigma", "Tau", "Upsilon", "Phi",
|
||||
"Chi", "Psi", "Omega")
|
||||
|
||||
/proc/generate_system_name()
|
||||
return "[pick("CRZ", "BNM", "Xavier", "GJ", "HD", "TC")][prob(10) ? " Eridani" : ""] [rand(100,999)]"
|
||||
|
||||
/proc/generate_planet_name()
|
||||
return "[capitalize(pick(last_names))]-[pick(greek_letters)]"
|
||||
|
||||
|
||||
43
html/changelogs/mattatlas-holybluebullet.yml
Normal file
43
html/changelogs/mattatlas-holybluebullet.yml
Normal file
@@ -0,0 +1,43 @@
|
||||
################################
|
||||
# Example Changelog File
|
||||
#
|
||||
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
|
||||
#
|
||||
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
|
||||
# When it is, any changes listed below will disappear.
|
||||
#
|
||||
# Valid Prefixes:
|
||||
# bugfix
|
||||
# wip (For works in progress)
|
||||
# tweak
|
||||
# soundadd
|
||||
# sounddel
|
||||
# rscadd (general adding of nice things)
|
||||
# rscdel (general deleting of nice things)
|
||||
# imageadd
|
||||
# imagedel
|
||||
# maptweak
|
||||
# spellcheck (typo fixes)
|
||||
# experiment
|
||||
# balance
|
||||
# admin
|
||||
# backend
|
||||
# security
|
||||
# refactor
|
||||
#################################
|
||||
|
||||
# Your name.
|
||||
author: MattAtlas
|
||||
|
||||
# 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, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
|
||||
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
|
||||
changes:
|
||||
- rscadd: "Added high-power sensors. When toggled at a sensor console (must be using normal or better sensors) they will scan things through opaque overmap objects in a wide range. They add heat, so be careful."
|
||||
- rscadd: "A report containing the bearings of all overmap objects is now sent to Horizon command consoles within 180 seconds from roundstart."
|
||||
- bugfix: "Fixed there being odd rows of blank spaces before sensor contacts."
|
||||
@@ -213,6 +213,9 @@
|
||||
|
||||
return list(spawn_cost, player_cost, ship_cost)
|
||||
|
||||
/datum/map/proc/send_welcome()
|
||||
return
|
||||
|
||||
/datum/map/proc/build_away_sites()
|
||||
#ifdef UNIT_TEST
|
||||
log_admin("Unit testing, so not loading away sites")
|
||||
|
||||
@@ -132,3 +132,59 @@
|
||||
allow_borgs_to_leave = TRUE
|
||||
|
||||
warehouse_basearea = /area/operations/storage
|
||||
|
||||
/datum/map/sccv_horizon/send_welcome()
|
||||
var/obj/effect/overmap/visitable/ship/horizon = SSshuttle.ship_by_type(/obj/effect/overmap/visitable/ship/sccv_horizon)
|
||||
|
||||
var/welcome_text = "<center><img src = scclogo.png><br />[FONT_LARGE("<b>SCCV Horizon</b> Ultra-Range Sensor Readings:")]<br>"
|
||||
welcome_text += "Report generated on [worlddate2text()] at [worldtime2text()]</center><br /><br />"
|
||||
welcome_text += "<hr>Current sector:<br /><b>[SSatlas.current_sector.name]</b><br /><br>"
|
||||
|
||||
if (horizon) //If the overmap is disabled, it's possible for there to be no Horizon.
|
||||
var/list/space_things = list()
|
||||
welcome_text += "Current Coordinates:<br /><b>[horizon.x]:[horizon.y]</b><br /><br>"
|
||||
welcome_text += "Next system targeted for jump:<br /><b>[SSatlas.current_sector.generate_system_name()]</b><br /><br>"
|
||||
var/last_visit
|
||||
var/current_day = time2text(world.realtime, "Day")
|
||||
switch(current_day)
|
||||
if("Monday")
|
||||
last_visit = "1 day ago"
|
||||
if("Tuesday")
|
||||
last_visit = "2 days ago"
|
||||
if("Wednesday")
|
||||
last_visit = "3 days ago"
|
||||
if("Thursday")
|
||||
last_visit = "4 days ago"
|
||||
if("Friday")
|
||||
last_visit = "5 days ago"
|
||||
if("Saturday")
|
||||
last_visit = "6 days ago"
|
||||
if("Sunday")
|
||||
last_visit = "1 week ago"
|
||||
welcome_text += "Last port visit: <br><b>[last_visit]</b><br><br>"
|
||||
welcome_text += "Travel time to nearest port:<br /><b>[SSatlas.current_sector.get_port_travel_time()]</b><br /><br>"
|
||||
welcome_text += "Scan results show the following points of interest:<br />"
|
||||
|
||||
for(var/zlevel in map_sectors)
|
||||
var/obj/effect/overmap/visitable/O = map_sectors[zlevel]
|
||||
if(O.name == horizon.name)
|
||||
continue
|
||||
if(istype(O, /obj/effect/overmap/visitable/ship/landable)) //Don't show shuttles
|
||||
continue
|
||||
if (O.hide_from_reports)
|
||||
continue
|
||||
space_things |= O
|
||||
|
||||
for(var/obj/effect/overmap/visitable/O in space_things)
|
||||
var/location_desc = " at present co-ordinates."
|
||||
if(O.loc != horizon.loc)
|
||||
var/bearing = round(90 - Atan2(O.x - horizon.x, O.y - horizon.y),5) //fucking triangles how do they work
|
||||
if(bearing < 0)
|
||||
bearing += 360
|
||||
location_desc = ", bearing [bearing]."
|
||||
welcome_text += "<li>\A <b>[O.name]</b>[location_desc]</li>"
|
||||
|
||||
welcome_text += "<hr>"
|
||||
|
||||
post_comm_message("SCCV Horizon Sensor Readings", welcome_text)
|
||||
priority_announcement.Announce(message = "Long-range sensor readings have been printed out at all communication consoles.")
|
||||
|
||||
@@ -13047,10 +13047,10 @@
|
||||
/turf/simulated/floor/tiled,
|
||||
/area/bridge/controlroom)
|
||||
"kBl" = (
|
||||
/obj/machinery/shipsensors/strong{
|
||||
/obj/effect/floor_decal/industrial/warning/full,
|
||||
/obj/machinery/shipsensors/strong/venator{
|
||||
pixel_y = 7
|
||||
},
|
||||
/obj/effect/floor_decal/industrial/warning/full,
|
||||
/turf/simulated/floor/reinforced/airless,
|
||||
/area/bridge/controlroom)
|
||||
"kCw" = (
|
||||
@@ -30203,8 +30203,8 @@
|
||||
},
|
||||
/obj/item/stack/material/plasteel{
|
||||
amount = 20;
|
||||
pixel_y = 3;
|
||||
pixel_x = 5
|
||||
pixel_x = 5;
|
||||
pixel_y = 3
|
||||
},
|
||||
/obj/item/stack/material/steel/full{
|
||||
pixel_x = 5
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<h3>Sensors control console</h3>
|
||||
<h3>Sensor Array Control Console</h3>
|
||||
<div class='block'>
|
||||
{{:helper.link(data.on ? 'Switch off' : 'Switch on', 'gear', { 'toggle' : 1 }, data.status != 'MISSING' ? null : 'disabled', data.on ? 'selected' : null)}}
|
||||
{{:helper.link(data.on ? 'Switch Off' : 'Switch On', 'gear', { 'toggle' : 1 }, data.status != 'MISSING' ? null : 'disabled', data.on ? 'selected' : null)}}
|
||||
<div class='item'>
|
||||
<div class="itemLabel">
|
||||
<span class='white'>Status:</span>
|
||||
@@ -19,6 +19,17 @@
|
||||
{{/for}}
|
||||
</div>
|
||||
</div>
|
||||
{{if data.deep_scan_range > 0}}
|
||||
<div class='item'>
|
||||
<div class="itemLabel">
|
||||
<span class='white'>{{:data.deep_scan_name}}</span>
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
<span class='white'>Effective Range: {{:data.deep_scan_range}}</span>
|
||||
{{:helper.link(data.deep_scan_toggled ? 'Deactivate' : 'Activate', 'gear', {'deep_scan_toggle' : 1}, data.status != 'MISSING' ? null : 'disabled', data.deep_scan_toggled ? 'selected' : null)}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class='block'>
|
||||
<div class='item'>
|
||||
@@ -105,18 +116,15 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h4>Sensor contacts</h4>
|
||||
<h4>Sensor Contacts</h4>
|
||||
<div class='block'>
|
||||
{{if data.contacts}}
|
||||
<table>
|
||||
{{for data.contacts}}
|
||||
<tr>
|
||||
<div class='item'>
|
||||
<td>{{:helper.link('Scan', 'search' ,{ 'scan' : value.ref }, null, null)}}</td>
|
||||
<td>{{:helper.link('Datalink', 'search' ,{ 'request_datalink' : value.ref }, null, null)}}</td>
|
||||
<td><span class='white'>{{:value.name}}</span>, bearing {{:value.bearing}}</td>
|
||||
</div>
|
||||
</tr>
|
||||
{{/for}}
|
||||
</table>
|
||||
|
||||
Reference in New Issue
Block a user