Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lavaland Gateway travel #6802

Closed
wants to merge 22 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
499 changes: 309 additions & 190 deletions _maps/map_files/Mining/Lavaland.dmm

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions code/__DEFINES/is_helpers.dm
Expand Up @@ -149,6 +149,8 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(

#define ismegafauna(A) (istype(A, /mob/living/simple_animal/hostile/megafauna))

#define iselite(A) (istype(A, /mob/living/simple_animal/hostile/asteroid/elite))

#define isclown(A) (istype(A, /mob/living/simple_animal/hostile/retaliate/clown))

#define iseminence(A) (istype(A, /mob/living/simple_animal/eminence))
Expand Down
1 change: 0 additions & 1 deletion code/controllers/subsystem/mapping.dm
Expand Up @@ -528,7 +528,6 @@ GLOBAL_LIST_EMPTY(the_station_areas)
break
//Link station gate with away gate and remove wait time.
GLOB.the_gateway.awaygate = new_gate
GLOB.the_gateway.wait = world.time

/datum/controller/subsystem/mapping/proc/RequestBlockReservation(width, height, z, type = /datum/turf_reservation, turf_type_override)
UNTIL((!z || reservation_ready["[z]"]) && !clearing_reserved_turfs)
Expand Down
1 change: 0 additions & 1 deletion code/game/objects/items/storage/belt.dm
Expand Up @@ -371,7 +371,6 @@
/obj/item/research_disk_pinpointer
))


/obj/item/storage/belt/mining/vendor
contents = newlist(/obj/item/survivalcapsule)

Expand Down
43 changes: 28 additions & 15 deletions code/modules/awaymissions/gateway.dm
Expand Up @@ -2,7 +2,7 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation)

/obj/machinery/gateway
name = "gateway"
desc = "A mysterious gateway built by unknown hands, it allows for faster than light travel to far-flung locations."
desc = "A gateway built for quick travel between linked destinations."
icon = 'icons/obj/machines/gateway.dmi'
icon_state = "off"
density = TRUE
Expand Down Expand Up @@ -81,7 +81,6 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation)
if(!GLOB.the_gateway)
GLOB.the_gateway = src
update_icon()
wait = world.time + CONFIG_GET(number/gateway_delay) //+ thirty minutes default
awaygate = locate(/obj/machinery/gateway/centeraway)

/obj/machinery/gateway/centerstation/Destroy()
Expand All @@ -96,7 +95,6 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation)
use_power = IDLE_POWER_USE

//warping vars
var/wait = 0 //this just grabs world.time at world start
var/obj/machinery/gateway/centeraway/awaygate = null
can_link = TRUE

Expand All @@ -123,9 +121,6 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation)
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: [DisplayTimeText(wait - world.time)].</span>")
return

for(var/obj/machinery/gateway/G in linked)
G.active = 1
Expand All @@ -140,8 +135,11 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation)
if(!detect())
return
if(!awaygate || QDELETED(awaygate))
say("No Destination found.")
return
if(!awaygate.active)
say("Destination gateway is not active")
return

if(awaygate.calibrated)
AM.forceMove(get_step(awaygate.loc, SOUTH))
AM.setDir(SOUTH)
Expand Down Expand Up @@ -176,12 +174,22 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation)
var/obj/machinery/gateway/centerstation/stationgate = null
can_link = TRUE

/obj/machinery/gateway/centeraway/mining
use_power = IDLE_POWER_USE

/obj/machinery/gateway/centeraway/mining/process()
if((stat & (NOPOWER)) && use_power)
if(active)
toggleoff()
return

if(active)
use_power(5000)

/obj/machinery/gateway/centeraway/Initialize(mapload)
. = ..()
update_icon()
stationgate = locate(/obj/machinery/gateway/centerstation)

toggleon()

/obj/machinery/gateway/centeraway/update_icon()
if(active)
Expand All @@ -192,7 +200,7 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation)
/obj/machinery/gateway/centeraway/toggleon(mob/user)
if(!detect())
return
if(!stationgate)
if(!stationgate && user)
to_chat(user, "<span class='notice'>Error: No destination found.</span>")
return

Expand All @@ -214,19 +222,24 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation)
if(!active)
return
if(!stationgate || QDELETED(stationgate))
say("No Destination found.")
return
if(!stationgate.active)
say("Destination Gateway is not active")
return
if(isliving(AM))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still won't block them inside crates or other contents

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might be simple enough I can make the time to address it in a reasonable timeframe. May be a week or two

if(check_exile_implant(AM))
if(check_exile_implant(AM) || is_species(AM, /datum/species/lizard/ashwalker) || ismegafauna(AM) || iselite(AM))
say("Rejecting [AM]: Unauthorized lifeform detected.")
return
else
for(var/mob/living/L in AM.contents)
if(check_exile_implant(L))
say("Rejecting [AM]: Exile implant detected in contained lifeform.")
if(check_exile_implant(L) || is_species(L, /datum/species/lizard/ashwalker))
say("Rejecting [AM]: Unauthorized lifeform detected.")
return
if(AM.has_buckled_mobs())
for(var/mob/living/L in AM.buckled_mobs)
if(check_exile_implant(L))
say("Rejecting [AM]: Exile implant detected in close proximity lifeform.")
if(check_exile_implant(L) || is_species(L, /datum/species/lizard/ashwalker))
say("Rejecting [AM]: Unauthorized lifeform detected nearby")
return
AM.forceMove(get_step(stationgate.loc, SOUTH))
AM.setDir(SOUTH)
Expand Down
63 changes: 33 additions & 30 deletions code/modules/awaymissions/pamphlet.dm
Expand Up @@ -10,36 +10,39 @@
info = "They don't make you kill people. There, we said it. Now get back to work!"

/obj/item/paper/pamphlet/gateway
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, and without this supply, it cannot safely function, \
causinng it to 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."
info = "<big><b>Hello valued Nanotrasen employee!</b><br>\
You have volunteered and/or been selected to join our crew working, living, and \
enjoying our premier plasma resourcing planet endearingly named “Lavaland”!<br><br> \
<b>Here are a few things to expect with your new work enviroment:</b></big><br><br> \
<b>Sweet natural atmosphere!</b><br>\
Is the station just not your style? Are you partial to warmer climates? Is a lower than \
average barometric pressure a comfortable and welcome thing to you? Well by Jiminy, Lavaland \
isn't a paradise world but you won't be worried about explosive decompression! \
Just remember to keep your Oxygen mask on and step inside for break time when the wind picks up!<br><br> \
<b>Game hunting!</b><br>\
Have you ever wanted to bag yourself a real hunting trophy? Well, here's your chance! There are all \
sorts of hearty creatures that float and stomp about the ashen plains. Get \
your dinner plates and wooden plaques ready for the next beast; be they goliath, watcher, \
ashwalker or even bigger and more exotic creatures! And the best part: you do it on company time!<br><br> \
<b>Wild enviroment!</b><br>\
Are you the frontier type? Do you embrace the challenge of maintaining a building with your \
peers? Lavaland and its base are perfect for you! Sometimes the unexpected happens: some \
of the walls, pipework, and floors may need your expertise. Working in space on places like \
asteroids about the sector are also an NT approved course of action for the more void inclined!<br><br> \
<b>Top of the line equipment!</b><br>\
You might be surprised how much of R&D's budget is devoted to outfitting our folks' digging! While \
we won't be discussing numbers, you can get a good idea based on the peerless equipment you'll \
be handling. From proto-kinetic accelerators, sonic resonators, and even new experimental \
technology like our plasma cutters! The latest in rock sundering and beast cleaving technological \
marvels are produced to make getting any materials an easy task!<br><br> \
<b><big>So what are you waiting for?<br>\
Reap the rewards and make us proud!</big></b><br><br> \
<small>“Lavaland” does not possess a breathable atmosphere. Volcanic ash storms capable of inflicting 1st to 3rd degree burns and death regularly occur. \
Various trophies gained through hunting are considered property of Nanotrasen and will be taken for company use at the end of the shift. \
Repair skills not necessary but recommended; no repair training provided. \
The seniority and skill of miners on shift may vary depending on current rates of death and dismemberment. \
Nanotrasen is not responsible for any injuries, death, or dismemberment which may occur as a direct or indirect result of this employment opportunity."


//we don't want the silly text overlay!
/obj/item/paper/pamphlet/update_icon()
Expand Down
4 changes: 2 additions & 2 deletions code/modules/jobs/job_types/quartermaster.dm
Expand Up @@ -15,8 +15,8 @@

outfit = /datum/outfit/job/quartermaster

access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MECH_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_VAULT, ACCESS_AUX_BASE, ACCESS_EXPLORATION)
minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MECH_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_VAULT, ACCESS_AUX_BASE, ACCESS_EXPLORATION)
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MECH_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_VAULT, ACCESS_AUX_BASE, ACCESS_EXPLORATION, ACCESS_GATEWAY)
minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MECH_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_VAULT, ACCESS_AUX_BASE, ACCESS_EXPLORATION, ACCESS_GATEWAY)
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_CAR

Expand Down
4 changes: 2 additions & 2 deletions code/modules/jobs/job_types/shaft_miner.dm
Expand Up @@ -13,9 +13,9 @@
outfit = /datum/outfit/job/miner

access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MECH_MINING,
ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_AUX_BASE)
ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_AUX_BASE, ACCESS_GATEWAY)
minimal_access = list(ACCESS_MINING, ACCESS_MECH_MINING, ACCESS_MINING_STATION, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM,
ACCESS_AUX_BASE)
ACCESS_AUX_BASE, ACCESS_GATEWAY)
paycheck = PAYCHECK_HARD
paycheck_department = ACCOUNT_CAR

Expand Down
37 changes: 22 additions & 15 deletions code/modules/mining/machine_vending.dm
Expand Up @@ -203,33 +203,39 @@
return ..()

/obj/machinery/vendor/mining/proc/RedeemVoucher(obj/item/mining_voucher/voucher, mob/redeemer)
var/items = list("Survival Capsule and Explorer's Webbing", "Resonator Kit", "Minebot Kit", "Extraction and Rescue Kit", "Crusher Kit", "Mining Conscription Kit")
var/items = list("Asteroid Miner Kit", "Crusher Kit", "Survivalist Kit", "Extraction and Rescue Kit", "Minebot Kit", "Mining Conscription Kit")

var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in sortList(items)
if(!selection || !Adjacent(redeemer) || QDELETED(voucher) || voucher.loc != redeemer)
return
var/drop_location = drop_location()
switch(selection)
if("Survival Capsule and Explorer's Webbing")
new /obj/item/storage/belt/mining/vendor(drop_location)
if("Resonator Kit")
new /obj/item/storage/firstaid/brute(drop_location)
new /obj/item/resonator(drop_location)
if("Minebot Kit")
new /mob/living/simple_animal/hostile/mining_drone(drop_location)
new /obj/item/weldingtool/hugetank(drop_location)
new /obj/item/clothing/head/welding(drop_location)
new /obj/item/borg/upgrade/modkit/minebot_passthrough(drop_location)
if("Asteroid Miner Kit")
new /obj/item/clothing/suit/space/hardsuit/mining(drop_location)
new /obj/item/tank/internals/oxygen(drop_location)
new /obj/item/gps/mining(drop_location)
new /obj/item/wormhole_jaunter(drop_location)
if("Crusher Kit")
new /obj/item/extinguisher/mini(drop_location)
new /obj/item/kinetic_crusher(drop_location)
if("Survivalist Kit")
new /obj/item/survivalcapsule(drop_location)
new /obj/item/wormhole_jaunter(drop_location)
new /obj/item/hivelordstabilizer(drop_location)
if("Extraction and Rescue Kit")
new /obj/item/extraction_pack(drop_location)
new /obj/item/fulton_core(drop_location)
new /obj/item/stack/marker_beacon/thirty(drop_location)
if("Crusher Kit")
new /obj/item/extinguisher/mini(drop_location)
new /obj/item/kinetic_crusher(drop_location)
if("Minebot Kit")
new /mob/living/simple_animal/hostile/mining_drone(drop_location)
new /obj/item/weldingtool(drop_location)
new /obj/item/clothing/head/welding(drop_location)
new /obj/item/borg/upgrade/modkit/minebot_passthrough(drop_location)
new /obj/item/slimepotion/slime/sentience/mining(drop_location)
if("Mining Conscription Kit")
new /obj/item/storage/backpack/duffelbag/mining_conscript(drop_location)


SSblackbox.record_feedback("tally", "mining_voucher_redeemed", 1, selection)
qdel(voucher)

Expand Down Expand Up @@ -291,14 +297,15 @@
/obj/item/card/id/pass/mining_access_card
name = "mining access card"
desc = "A small card, that when used on any ID, will add mining access."
access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MECH_MINING, ACCESS_MINERAL_STOREROOM, ACCESS_CARGO)
access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MECH_MINING, ACCESS_MINERAL_STOREROOM, ACCESS_CARGO, ACCESS_GATEWAY)

/obj/item/storage/backpack/duffelbag/mining_conscript
name = "mining conscription kit"
desc = "A kit containing everything a crewmember needs to support a shaft miner in the field."

/obj/item/storage/backpack/duffelbag/mining_conscript/PopulateContents()
new /obj/item/pickaxe/mini(src)
new /obj/item/resonator(src)
new /obj/item/clothing/glasses/meson(src)
new /obj/item/t_scanner/adv_mining_scanner/lesser(src)
new /obj/item/storage/bag/ore(src)
Expand Down