Explorer Overhaul and Gateway Retirement (#20855)

* Adds Explorer spawnability, removes Cyberaid gateways

* deletes some REALLY old bloat maps and deletes Gateway.dm

* Fixes runtime, and removes more stuff like gateway config... cause we dont have a gateway anymore

* removes all mention of /obj/machine/gateway

* Goodbye test_tiny and evil_santa 😈

* removed a literal fucking pamphlet

* changes map area name from Gateway to Expedetition

* changes the access from ACCESS_GATEWAY to ACCESS_EXPEDITION

* Revert "Goodbye test_tiny and evil_santa 😈"

This reverts commit eda775ecd5.

* ok deletes evil_santa only

* Fixes a runtime

* Adds new visuals for new area and explorer spawn marker

* Unhides explorers from the pref menu

* adds spawns and fixes the gateways for all maps, adds Expedition room to Cere

* improves and cleans up the expedition room maps, also clothes for Explorers

* GET OUT OF HERE EXAMPLE.

* byebye button
This commit is contained in:
Octus
2023-06-03 15:22:37 -05:00
committed by GitHub
parent 173bfb92f5
commit 98ddced488
34 changed files with 787 additions and 72469 deletions
@@ -118,7 +118,7 @@
"Engineering Equipment Storage",
"Engineering Foyer",
"EVA Storage",
"Gateway",
"Expedition",
"Genetics Lab",
"Gravity Generator",
"Head of Personnel's Office",
@@ -160,8 +160,7 @@
/area/medical/research,
/area/crew_quarters/hor,
/area/maintenance/asmaint2,
/area/teleporter,
/area/gateway)
/area/teleporter)
area_whitelist = list(/area/library,
/area/chapel,
/area/medical/psych)
-286
View File
@@ -1,286 +0,0 @@
GLOBAL_DATUM_INIT(the_gateway, /obj/machinery/gateway/centerstation, null)
/obj/machinery/gateway
name = "gateway"
desc = "A mysterious gateway built by unknown hands, it allows for faster than light travel to far-flung locations."
icon = 'icons/obj/machines/gateway.dmi'
icon_state = "off"
density = TRUE
anchored = TRUE
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
flags_2 = NO_MALF_EFFECT_2
var/active = FALSE
/obj/machinery/gateway/Initialize()
..()
update_icon(UPDATE_ICON_STATE)
update_density_from_dir()
/obj/machinery/gateway/proc/update_density_from_dir()
if(dir == 2)
density = FALSE
/obj/machinery/gateway/update_icon_state()
icon_state = active ? "on" : "off"
//this is da important part wot makes things go
/obj/machinery/gateway/centerstation
density = TRUE
icon_state = "offcenter"
power_state = IDLE_POWER_USE
//warping vars
var/list/linked = list()
var/ready = FALSE //have we got all the parts for a gateway?
var/wait = 0 //this just grabs world.time at world start
var/obj/machinery/gateway/centeraway/awaygate = null
/obj/machinery/gateway/centerstation/Initialize(mapload)
. = ..()
if(!GLOB.the_gateway)
GLOB.the_gateway = src
update_icon(UPDATE_ICON_STATE)
wait = world.time + GLOB.configuration.gateway.away_mission_delay
return INITIALIZE_HINT_LATELOAD
/obj/machinery/gateway/centerstation/LateInitialize()
awaygate = locate(/obj/machinery/gateway/centeraway) in GLOB.machines
/obj/machinery/gateway/centerstation/update_density_from_dir()
return
/obj/machinery/gateway/centerstation/Destroy()
if(GLOB.the_gateway == src)
GLOB.the_gateway = null
return ..()
/obj/machinery/gateway/centerstation/update_icon_state()
icon_state = active ? "oncenter" : "offcenter"
/obj/machinery/gateway/centerstation/process()
if(stat & (NOPOWER))
if(active) toggleoff()
return
if(active)
use_power(5000)
/obj/machinery/gateway/centerstation/proc/detect()
linked = list() //clear the list
var/turf/T = loc
for(var/i in GLOB.alldirs)
T = get_step(loc, i)
var/obj/machinery/gateway/G = locate(/obj/machinery/gateway) in T
if(G)
linked.Add(G)
continue
//this is only done if we fail to find a part
ready = FALSE
toggleoff()
break
if(linked.len == 8)
ready = TRUE
/obj/machinery/gateway/centerstation/proc/toggleon(mob/user as mob)
if(!ready)
return
if(linked.len != 8)
return
if(!has_power())
return
if(!awaygate)
awaygate = locate(/obj/machinery/gateway/centeraway) in GLOB.machines
if(!awaygate)
to_chat(user, "<span class='notice'>Error: No destination found.</span>")
return
if(world.time < wait)
to_chat(user, "<span class='notice'>Error: Warpspace triangulation in progress. Estimated time to completion: [round(((wait - world.time) / 10) / 60)] minutes.</span>")
return
for(var/obj/machinery/gateway/G in linked)
G.active = TRUE
G.update_icon(UPDATE_ICON_STATE)
active = TRUE
update_icon(UPDATE_ICON_STATE)
/obj/machinery/gateway/centerstation/proc/toggleoff()
for(var/obj/machinery/gateway/G in linked)
G.active = FALSE
G.update_icon(UPDATE_ICON_STATE)
active = FALSE
update_icon(UPDATE_ICON_STATE)
/obj/machinery/gateway/centerstation/attack_hand(mob/user as mob)
if(!ready)
detect()
return
if(!active)
toggleon(user)
return
toggleoff()
//okay, here's the good teleporting stuff
/obj/machinery/gateway/centerstation/Bumped(atom/movable/M as mob|obj)
if(!ready)
return
if(!active)
return
if(!awaygate)
return
if(awaygate.calibrated)
M.forceMove(get_step(awaygate.loc, SOUTH))
M.dir = SOUTH
return
else
var/obj/effect/landmark/dest = pick(GLOB.awaydestinations)
if(dest)
M.forceMove(dest.loc)
M.dir = SOUTH
use_power(5000)
return
/obj/machinery/gateway/centerstation/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W,/obj/item/multitool))
to_chat(user, "The gate is already calibrated, there is no work for you to do here.")
return
return ..()
/////////////////////////////////////Away////////////////////////
/obj/machinery/gateway/centeraway
density = TRUE
icon_state = "offcenter"
power_state = NO_POWER_USE
var/calibrated = 1
var/list/linked = list() //a list of the connected gateway chunks
var/ready = FALSE
var/obj/machinery/gateway/centeraway/stationgate = null
/obj/machinery/gateway/centeraway/Initialize()
..()
update_icon(UPDATE_ICON_STATE)
stationgate = locate(/obj/machinery/gateway/centerstation) in GLOB.machines
/obj/machinery/gateway/centeraway/update_density_from_dir()
return
/obj/machinery/gateway/centeraway/update_icon_state()
icon_state = active ? "oncenter" : "offcenter"
/obj/machinery/gateway/centeraway/proc/detect()
linked = list() //clear the list
var/turf/T = loc
for(var/i in GLOB.alldirs)
T = get_step(loc, i)
var/obj/machinery/gateway/G = locate(/obj/machinery/gateway) in T
if(G)
linked.Add(G)
continue
//this is only done if we fail to find a part
ready = FALSE
toggleoff()
break
if(linked.len == 8)
ready = TRUE
/obj/machinery/gateway/centeraway/proc/toggleon(mob/user as mob)
if(!ready)
return
if(linked.len != 8)
return
if(!stationgate)
stationgate = locate(/obj/machinery/gateway/centerstation) in GLOB.machines
if(!stationgate)
to_chat(user, "<span class='notice'>Error: No destination found.</span>")
return
for(var/obj/machinery/gateway/G in linked)
G.active = TRUE
G.update_icon(UPDATE_ICON_STATE)
active = TRUE
update_icon(UPDATE_ICON_STATE)
/obj/machinery/gateway/centeraway/proc/toggleoff()
for(var/obj/machinery/gateway/G in linked)
G.active = FALSE
G.update_icon(UPDATE_ICON_STATE)
active = FALSE
update_icon(UPDATE_ICON_STATE)
/obj/machinery/gateway/centeraway/attack_hand(mob/user as mob)
if(!ready)
detect()
return
if(!active)
toggleon(user)
return
toggleoff()
/obj/machinery/gateway/centeraway/Bumped(atom/movable/AM)
if(!ready)
return
if(!active)
return
if(!stationgate || QDELETED(stationgate))
return
if(isliving(AM))
if(exilecheck(AM))
return
else
for(var/mob/living/L in AM.contents)
if(exilecheck(L))
atom_say("Rejecting [AM]: Exile bio-chip detected in contained lifeform.")
return
if(AM.has_buckled_mobs())
for(var/mob/living/L in AM.buckled_mobs)
if(exilecheck(L))
atom_say("Rejecting [AM]: Exile bio-chip detected in close proximity lifeform.")
return
AM.forceMove(get_step(stationgate.loc, SOUTH))
AM.setDir(SOUTH)
if(ismob(AM))
var/mob/M = AM
if(M.client)
M.client.move_delay = max(world.time + 5, M.client.move_delay)
/obj/machinery/gateway/centeraway/proc/exilecheck(mob/living/carbon/M)
for(var/obj/item/implant/exile/E in M)//Checking that there is an exile bio-chip in the contents
if(E.imp_in == M)//Checking that it's actually implanted vs just in their pocket
to_chat(M, "<span class='notice'>The station gate has detected your exile bio-chip and is blocking your entry.</span>")
return 1
return 0
/obj/machinery/gateway/centeraway/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W,/obj/item/multitool))
if(calibrated)
to_chat(user, "<span class='notice'>The gate is already calibrated, there is no work for you to do here.</span>")
return
else
to_chat(user, "<span class='boldnotice'>Recalibration successful!</span><span class='notice'>: This gate's systems have been fine tuned. Travel to this gate will now be on target.</span>")
calibrated = 1
return
return ..()
@@ -1,23 +0,0 @@
/obj/item/paper/journal_scrap_1
name = "survivor's journal page 1"
info = "Coal again.<br> \
Every year, coal in my stockings when this stupid holiday comes around.<br> \
Not this year though. This year will be different. I'm going to find that fat man, I swear.<br> \
He'll have to give me all the good presents, if he wants to live long enough to get any cookies."
/obj/item/paper/journal_scrap_2
name = "survivor's journal page 9"
info = "The North Pole... You'd think it was a part of his legend, but he actually lives there!<br> \
The elves and village are a lie though. Not sure where the toys come from yet, but I'll get them.<br> \
Not much out here, a couple little shacks and a big igloo in the center... Bet he's inside that.<br> \
On an unrelated note, great packing snow. Built a snowman today."
/obj/item/paper/journal_scrap_3
name = "survivor's journal page 25"
info = "Oh man... This is bad...<br> \
Not even my Syndicate training was a match for him. Barely made it out with my life.<br> \
He was just waiting for me... He knew. He was ready.<br> \
Couldn't make it back to my shack. That gun would have helped, if only I brought it...<br> \
Cave-in has me trapped in here, I just hope the distress signal reaches help in time... <br> \
<br> \
He knows. He knows. He knows. He knows. He knows. He knows. He knows. He knows. He knows."
-38
View File
@@ -1,38 +0,0 @@
/obj/item/paper/pamphlet
name = "pamphlet"
icon_state = "pamphlet"
info = "<b>Welcome to the Nanotrasen Gateway project...</b><br>\
Congratulations! If you're reading this, you and your superiors have decided that you're \
ready to commit to a life spent colonising the rolling hills of far away worlds. You \
must be ready for a lifetime of adventure, a little bit of hard work, and an award \
winning dental plan- but that's not all the Nanotrasen Gateway project has to offer.<br>\
<br>Because we care about you, we feel it is only fair to make sure you know the risks \
before you commit to joining the Nanotrasen Gateway project. All away destinations have \
been fully scanned by a Nanotrasen expeditionary team, and are certified to be 100% safe. \
We've even left a case of space beer along with the basic materials you'll need to expand \
Nanotrasen's operational area and start your new life.<br><br>\
<b>Gateway Operation Basics</b><br>\
All Nanotrasen approved Gateways operate on the same basic principals. They operate off \
area equipment power as you would expect, but they also require a backup wire with at least \
128, 000 Watts of power running through it. Without this supply, it cannot safely function \
and will reject all attempts at operation.<br><br>\
Once it is correctly setup, and once it has enough power to operate, the Gateway will begin \
searching for an output location. The amount of time this takes is variable, but the Gateway \
interface will give you an estimate accurate to the minute. Power loss will not interrupt the \
searching process. Influenza will not interrupt the searching process. Temporal anomalies \
may cause the estimate to be inaccurate, but will not interrupt the searching process.<br><br> \
<b>Life On The Other Side</b><br>\
Once you have traversed the Gateway, you may experience some disorientation. Do not panic. \
This is a normal side effect of travelling vast distances in a short period of time. You should \
survey the immediate area, and attempt to locate your complimentary case of space beer. Our \
expeditionary teams have ensured the complete safety of all away locations, but in a small \
number of cases, the Gateway they have established may not be immediately obvious. \
Do not panic if you cannot locate the return Gateway. Begin colonisation of the destination. \
<br><br><b>A New World</b><br>\
As a participant in the Nanotrasen Gateway Project, you will be on the frontiers of space. \
Though complete safety is assured, participants are advised to prepare for inhospitable \
environs."
//we don't want the silly text overlay!
/obj/item/paper/pamphlet/update_icon_state()
return
+12 -1
View File
@@ -1149,7 +1149,18 @@
clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(4)
clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY)
if(JOB_EXPLORER)
clothes_s = new /icon('icons/mob/clothing/under/color.dmi', "orange_s")
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "workboots"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/clothing/hands.dmi', "bgloves"), ICON_OVERLAY)
has_gloves = TRUE
switch(backbag)
if(2)
clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "backpack"), ICON_OVERLAY)
if(3)
clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(4)
clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY)
else if(job_medsci_high)
switch(job_medsci_high)
if(JOB_RD)
+4 -4
View File
@@ -40,8 +40,8 @@
/obj/effect/mapping_helpers/airlock/access/any/command/eva
access = ACCESS_EVA
/obj/effect/mapping_helpers/airlock/access/any/command/gateway
access = ACCESS_GATEWAY
/obj/effect/mapping_helpers/airlock/access/any/command/expedition
access = ACCESS_EXPEDITION
/obj/effect/mapping_helpers/airlock/access/any/command/hop
access = ACCESS_HOP
@@ -249,8 +249,8 @@
/obj/effect/mapping_helpers/airlock/access/all/command/eva
access = ACCESS_EVA
/obj/effect/mapping_helpers/airlock/access/all/command/gateway
access = ACCESS_GATEWAY
/obj/effect/mapping_helpers/airlock/access/all/command/expedition
access = ACCESS_EXPEDITION
/obj/effect/mapping_helpers/airlock/access/all/command/hop
access = ACCESS_HOP
@@ -244,7 +244,6 @@
/obj/machinery/disposal/deliveryChute,
/obj/machinery/camera,
/obj/structure/sign,
/obj/machinery/gateway,
/obj/structure/lattice,
/obj/structure/grille,
/obj/structure/cable,
-5
View File
@@ -83,11 +83,6 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate
/************************************Machine rotate procs************************************/
//prevents shuttles attempting to rotate this since it messes up sprites
/obj/machinery/gateway/shuttleRotate(rotation, params)
params = NONE
return ..()
//prevents shuttles attempting to rotate this since it messes up sprites
/obj/machinery/gravity_generator/shuttleRotate(rotation, params)
params = NONE