Files
eae40b1854 Adds a new (to us) medium-lowpop map: Ouroboros (Ringworm) (#5117)
## About The Pull Request
**All the credit for this map goes to Zydras of Nova/Skyrat. See
[here](https://github.com/NovaSector/NovaSector/pull/773) for the
original PR.**

This map is, as the name hints at, circular! It is pretty compact, about
the size of MetaStation or maybe even KiloStation, however, like IceBox,
it has two Z-Levels.
## Why It's Good For The Game
We are currently lacking map variety for low to medium population, as we
have Box/IceBox, Meta, Tram, and Kilo. That's it. Two of those are
different flavors of the same map. Despite having two Z-Levels, this map
plays really well on deadpop, as I actually used to run it on a server
of my own, so it would work quite well for the deadpop EU hours.
## Proof Of Testing
It compiled and ran locally with no issues. See below for some
screenshots taken from the original PR, as I forgot to take screenshots
when I tested it.
<details>
<summary>Screenshots/Videos</summary>
<img width="1288" height="865" alt="image"
src="https://github.com/user-attachments/assets/9c863303-4235-406a-adb3-10b82b24527b"
/>

<img width="1171" height="902" alt="image"
src="https://github.com/user-attachments/assets/47ba2390-182e-4e6a-a318-3403b024cb7f"
/>

<img width="1304" height="861" alt="image"
src="https://github.com/user-attachments/assets/50e1c2c0-7560-43db-8ac1-b6337ccb0533"
/>

<img width="1170" height="908" alt="image"
src="https://github.com/user-attachments/assets/9050c7a4-b428-4b7d-b865-bac3efd2612d"
/>

<img width="1236" height="1026" alt="image"
src="https://github.com/user-attachments/assets/4f4cb92c-c820-42cd-bd68-0d9a8774e314"
/>

<img width="1161" height="968" alt="image"
src="https://github.com/user-attachments/assets/6a4054c0-4693-487a-ae07-e1d56942613b"
/>

<img width="1166" height="892" alt="image"
src="https://github.com/user-attachments/assets/9e858938-92fd-48c8-bfe3-4c7e2702d8c9"
/>

<img width="1313" height="880" alt="image"
src="https://github.com/user-attachments/assets/42642a5d-b757-40a0-a69b-4086f85cf376"
/>

<img width="1252" height="845" alt="image"
src="https://github.com/user-attachments/assets/b62a5bbd-8139-4043-94c1-a57e597c432c"
/>

</details>

## Changelog
🆑
add: Added a new map: Ouroboros!
/🆑

---------

Co-authored-by: shayoki <96078776+shayoki@users.noreply.github.com>
Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
2026-02-17 15:08:03 +01:00

198 lines
6.2 KiB
Plaintext

#define ARRIVALS_STATION "arrivals_stationary"
#define ARRIVALS_INTERLINK "arrivals_shuttle"
#define CONSOLE_ANNOUNCE_COOLDOWN 5 SECONDS
/obj/docking_port/mobile/arrivals_skyrat
name = "NTV Relay"
shuttle_id = "arrivals_shuttle"
dir = WEST
port_direction = SOUTH
callTime = 15 SECONDS
ignitionTime = 6 SECONDS
rechargeTime = 15 SECONDS
movement_force = list("KNOCKDOWN" = 3, "THROW" = 0)
///Our shuttle's control console
var/obj/machinery/computer/shuttle/arrivals/console
///How much time are we waiting before returning to interlink. Sets itself automatically from config file. 0 = no auto return
var/wait_time
///State variable. True when our shuttle is waiting before autoreturn
var/waiting = FALSE // would've been better to use shuttle's mode variable, but check() resets it to SHUTTLE_IDLE so it's more sane way to make this fully modular
/obj/docking_port/mobile/arrivals_skyrat/Initialize(mapload)
. = ..()
wait_time = CONFIG_GET(number/arrivals_wait)
return INITIALIZE_HINT_LATELOAD
/obj/docking_port/mobile/arrivals_skyrat/LateInitialize()
console = get_control_console()
/obj/docking_port/mobile/arrivals_skyrat/check()
. = ..()
if(!wait_time) //0 disables autoreturn
return
if(mode != SHUTTLE_IDLE)
return
if(waiting && !timer)
SSshuttle.moveShuttle(shuttle_id, ARRIVALS_INTERLINK, TRUE) // times up, we're leaving
waiting = FALSE
var/current_dock = getDockedId()
if (current_dock != ARRIVALS_STATION)
return
if(check_occupied())
if(!waiting)
return
timer = 0
waiting = FALSE
if(console && console.last_cancel_announce + CONSOLE_ANNOUNCE_COOLDOWN <= world.time)
console.say("Lifesigns detected onboard, automatic return aborted.")
console.last_cancel_announce = world.time
return
if(timer || waiting)
return
setTimer(wait_time)
waiting = TRUE
if(console && console.last_depart_announce + CONSOLE_ANNOUNCE_COOLDOWN <= world.time)
console.say("Commencing automatic return subroutine in [wait_time / 10] seconds.")
console.last_depart_announce = world.time
/obj/docking_port/mobile/arrivals_skyrat/getModeStr()
. = ..()
return waiting ? "RTN" : .
/**
* Checks if our shuttle is occupied by someone alive, and returns `TRUE` if it is, `FALSE` otherwise.
*/
/obj/docking_port/mobile/arrivals_skyrat/proc/check_occupied()
for(var/alive_player in GLOB.alive_player_list)
if (get_area(alive_player) in shuttle_areas)
return TRUE
return FALSE
/obj/machinery/computer/shuttle/arrivals
name = "arrivals shuttle control"
desc = "The terminal used to control the arrivals interlink shuttle."
shuttleId = "arrivals_shuttle"
possible_destinations = "arrivals_stationary;arrivals_shuttle"
icon = 'modular_skyrat/modules/advanced_shuttles/icons/computer.dmi'
icon_state = "computer_frame"
icon_keyboard = "arrivals_key"
icon_screen = "arrivals"
light_color = COLOR_ORANGE_BROWN
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
connectable = FALSE //connecting_computer change: since icon_state is not a typical console, it cannot be connectable.
no_destination_swap = TRUE
///[world.time] when console last announced departure
var/last_depart_announce
///[world.time] when console last announced canceling shuttle's return
var/last_cancel_announce
/obj/machinery/computer/shuttle/arrivals/recall
name = "arrivals shuttle recall terminal"
desc = "Use this if your friends left you behind."
possible_destinations = "arrivals_stationary;arrivals_shuttle"
/*
* MAP TEMPLATES
*/
/datum/map_template/shuttle/ferry
name = "NAV Monarch (Ferry)"
prefix = "_maps/shuttles/skyrat/"
port_id = "ferry"
suffix = "skyrat"
who_can_purchase = null
/datum/map_template/shuttle/cargo/skyrat
name = "NLV Consign (Cargo)"
prefix = "_maps/shuttles/skyrat/"
port_id = "cargo"
suffix = "skyrat"
/datum/map_template/shuttle/cargo/skyrat/delta
suffix = "delta_skyrat" //I hate this. Delta station is one tile different docking-wise, which fucks it ALL up unless we either a) change the map (this would be nonmodular and also press the engine against disposals) or b) this (actually easy, just dumb)
/datum/map_template/shuttle/whiteship/blueshift
name = "SFS Christian"
description = "A large corvette that seems to have come under attack by some kind of alien infestation. A true asset if it's cleared out and repaired."
prefix = "_maps/shuttles/skyrat/"
port_id = "whiteship"
suffix = "blueshift"
/datum/map_template/shuttle/cargo/skyrat/ouroboros
suffix = "ouroboros"
/datum/map_template/shuttle/whiteship/ouroboros
name = "JN Chasse-Galerie"
description = "A small Jim Nortons shuttle meant to be a mobile cafe. No hostiles onboard, but multiple corpses of Jim Nortons employees."
prefix = "_maps/shuttles/skyrat/"
port_id = "whiteship"
suffix = "ouroboros"
/datum/map_template/shuttle/arrivals_skyrat
name = "NTV Relay (Arrivals)"
prefix = "_maps/shuttles/skyrat/"
port_id = "arrivals"
suffix = "skyrat"
who_can_purchase = null
/datum/map_template/shuttle/emergency/default
prefix = "_maps/shuttles/skyrat/"
suffix = "skyrat"
name = "Standard Emergency Shuttle"
description = "Nanotrasen's standard issue emergency shuttle."
occupancy_limit = 60
/datum/map_template/shuttle/labour/skyrat
name = "NMC Drudge (Labour)"
prefix = "_maps/shuttles/skyrat/"
suffix = "skyrat"
/obj/docking_port/stationary/laborcamp_home
roundstart_template = /datum/map_template/shuttle/labour/skyrat
/obj/docking_port/stationary/laborcamp_home/kilo
roundstart_template = /datum/map_template/shuttle/labour/skyrat
/datum/map_template/shuttle/mining_common/skyrat
name = "NMC Chimera (Mining)"
prefix = "_maps/shuttles/skyrat/"
suffix = "skyrat"
/obj/docking_port/stationary/mining_home/common
roundstart_template = /datum/map_template/shuttle/mining_common/skyrat
/obj/docking_port/stationary/mining_home/common/kilo
roundstart_template = /datum/map_template/shuttle/mining_common/skyrat
/datum/map_template/shuttle/mining/skyrat
name = "NMC Phoenix (Mining)"
prefix = "_maps/shuttles/skyrat/"
suffix = "skyrat"
/obj/docking_port/stationary/mining_home
roundstart_template = /datum/map_template/shuttle/mining/skyrat
/datum/map_template/shuttle/mining/skyrat/large
name = "NMC Manticore (Mining)"
suffix = "large_skyrat"
#undef ARRIVALS_STATION
#undef ARRIVALS_INTERLINK
#undef CONSOLE_ANNOUNCE_COOLDOWN