mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-15 09:03:23 +01:00
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:
@@ -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)
|
||||
|
||||
@@ -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."
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user