diff --git a/code/global.dm b/code/global.dm index 0794cd3df2..4bc16b979e 100644 --- a/code/global.dm +++ b/code/global.dm @@ -171,8 +171,7 @@ var/list/AAlarmWireColorToIndex //away missions var/list/awaydestinations = list() //a list of landmarks that the warpgate can take you to var/returndestination //the location immediately south of the station gateway - - +var/calibrateddestination //If you actually arrive at the away gate // MySQL configuration diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index 2a2f4dbfe2..043d20f7e7 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -1,6 +1,6 @@ /obj/machinery/gateway name = "gateway" - desc = "It's a Nanotrasen approved one-way experimental teleporter that will take you places. Still has the pricetag on it." + 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 = 1 @@ -21,53 +21,39 @@ //this is da important part wot makes things go -/obj/machinery/gateway/center +/obj/machinery/gateway/centerstation density = 1 icon_state = "offcenter" use_power = 1 //warping vars - var/list/linked = list() //a list of the connected gateway chunks + var/list/linked = list() var/ready = 0 //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 //inb4 this doesnt work at all - //power vars - var/obj/structure/cable/attached = null - -/obj/machinery/gateway/center/initialize() +/obj/machinery/gateway/centerstation/initialize() update_icon() - attemptAttach() + returndestination = get_step(loc, SOUTH) + wait = world.time + 18000 //+ thirty minutes + awaygate = locate(/obj/machinery/gateway/centeraway, world) - if(src.z == 1) //if it's the station gate - returndestination = get_step(loc, SOUTH) - wait = world.time + 18000 //+ thirty minutes - -/obj/machinery/gateway/center/update_icon() +/obj/machinery/gateway/centerstation/update_icon() if(active) icon_state = "oncenter" return icon_state = "offcenter" -//stolen from syndie beacon code. -/obj/machinery/gateway/center/proc/checkWirePower() - if(!attached) - return 0 - var/datum/powernet/PN = attached.get_powernet() - if(!PN) - return 0 - if(PN.avail < 128000) - return 0 - return 1 -obj/machinery/gateway/center/process() +obj/machinery/gateway/centerstation/process() if(stat & (NOPOWER)) if(active) toggleoff() return if(active) - use_power(128000) + use_power(5000) -/obj/machinery/gateway/center/proc/detect() +/obj/machinery/gateway/centerstation/proc/detect() linked = list() //clear the list var/turf/T = loc @@ -86,19 +72,16 @@ obj/machinery/gateway/center/process() if(linked.len == 8) ready = 1 -/obj/machinery/gateway/center/proc/toggleon(mob/user as mob) +/obj/machinery/gateway/centerstation/proc/toggleon(mob/user as mob) if(!ready) return if(linked.len != 8) return if(!powered()) return if(world.time < wait) user << "Error: Warpspace triangulation in progress. Estimated time to completion: [round(((wait - world.time) / 10) / 60)] minutes." return - if(!awaydestinations.len) + if(awaygate == null) user << "Error: No destination found." return - if(!checkWirePower()) - user << "Error: Inadequate electricity reserve." - return for(var/obj/machinery/gateway/G in linked) G.active = 1 @@ -107,7 +90,7 @@ obj/machinery/gateway/center/process() update_icon() density = 0 -/obj/machinery/gateway/center/proc/toggleoff() +/obj/machinery/gateway/centerstation/proc/toggleoff() for(var/obj/machinery/gateway/G in linked) G.active = 0 G.update_icon() @@ -115,7 +98,7 @@ obj/machinery/gateway/center/process() update_icon() density = 1 -/obj/machinery/gateway/center/attack_hand(mob/user as mob) +/obj/machinery/gateway/centerstation/attack_hand(mob/user as mob) if(!ready) detect() return @@ -124,40 +107,121 @@ obj/machinery/gateway/center/process() return toggleoff() -/obj/machinery/gateway/center/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/screwdriver)) - attemptAttach(user, 1) -//this is kinda ugly i know, but i want the attach proc seperate so we can call it in initialize() -/obj/machinery/gateway/center/proc/attemptAttach(mob/user as mob, tilesafe = 0) - var/turf/T = loc - if(tilesafe && T.intact) - return - if(attached) - attached = null - user << "You detach the cable from [src]." - return - if(isturf(T)) - attached = locate() in T - if(user) - if(!attached) - user << "There isn't a cable to connect to [src]." - return - user << "You attach the cable to [src]." //okay, here's the good teleporting stuff -/obj/machinery/gateway/center/HasEntered(mob/user as mob) +/obj/machinery/gateway/centerstation/HasEntered(mob/user as mob) if(!ready) return if(!active) return - - if(src.z == 1) //if it's the station gate + if(awaygate == null) return + if(awaygate.calibrated) + calibrateddestination = get_step(awaygate.loc, SOUTH) + user.loc = calibrateddestination + return + else var/obj/effect/landmark/dest = pick(awaydestinations) if(dest) -//i'm sorry did i say good? user.loc = dest.loc - use_power(128000) + user.dir = SOUTH + use_power(5000) return - else //they made it back to the station! - user.loc = returndestination - user.dir = SOUTH - use_power(128000) \ No newline at end of file + + + + + +/////////////////////////////////////Away//////////////////////// + + +/obj/machinery/gateway/centeraway + density = 1 + icon_state = "offcenter" + use_power = 0 + var/calibrated = 1 + var/list/linked = list() //a list of the connected gateway chunks + var/ready = 0 + var/stationgate = null + +/obj/machinery/gateway/centeraway/initialize() + update_icon() + calibrateddestination = get_step(loc, SOUTH) + stationgate = locate(/obj/machinery/gateway/centerstation, world) + + +/obj/machinery/gateway/centeraway/update_icon() + if(active) + icon_state = "oncenter" + return + icon_state = "offcenter" + + +/obj/machinery/gateway/centeraway/proc/detect() + linked = list() //clear the list + var/turf/T = loc + + for(var/i in 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 = 0 + toggleoff() + break + + if(linked.len == 8) + ready = 1 + + + +/obj/machinery/gateway/centeraway/proc/toggleon(mob/user as mob) + if(!ready) return + if(linked.len != 8) return + if(stationgate == null) + user << "Error: No destination found." + return + + for(var/obj/machinery/gateway/G in linked) + G.active = 1 + G.update_icon() + active = 1 + update_icon() + density = 0 + +/obj/machinery/gateway/centeraway/proc/toggleoff() + for(var/obj/machinery/gateway/G in linked) + G.active = 0 + G.update_icon() + active = 0 + update_icon() + density = 1 + + + +/obj/machinery/gateway/centeraway/attack_hand(mob/user as mob) + if(!ready) + detect() + return + if(!active) + toggleon(user) + return + toggleoff() + +/obj/machinery/gateway/centeraway/HasEntered(mob/user as mob) + if(!ready) return + if(!active) return + user.loc = returndestination + user.dir = SOUTH + + +/obj/machinery/gateway/centeraway/attackby(obj/item/device/W as obj, mob/user as mob) + if(istype(W,/obj/item/device/multitool)) + if(calibrated == 1) + user << "\black The gate is already calibrated, there is no work for you to do here." + return + else + user << "\blue Recalibration successful!: \black The gates systems have been fine tuned, travel to the gate will now be on target." + calibrated = 1 + return \ No newline at end of file diff --git a/maps/RandomZLevels/blackmarketpackers.dmm b/maps/RandomZLevels/blackmarketpackers.dmm index b0f575244c..eaa94afc7f 100644 --- a/maps/RandomZLevels/blackmarketpackers.dmm +++ b/maps/RandomZLevels/blackmarketpackers.dmm @@ -76,7 +76,7 @@ "bx" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating,/area/awaymission/BMPship1) "by" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/simulated/floor/plating,/area/awaymission/BMPship1) "bz" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor/plating,/area/awaymission/BMPship1) -"bA" = (/obj/machinery/gateway/center,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/awaymission/BMPship1) +"bA" = (/obj/machinery/gateway/centeraway{calibrated = 0},/turf/simulated/floor/plating,/area/awaymission/BMPship1) "bB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/gateway{dir = 4},/turf/simulated/floor/plating,/area/awaymission/BMPship1) "bC" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/awaymission/BMPship1) "bD" = (/obj/structure/largecrate,/turf/simulated/floor/plating{tag = "icon-warnplate (EAST)"; icon_state = "warnplate"; dir = 4},/area/awaymission/BMPship1) diff --git a/maps/RandomZLevels/example.dmm b/maps/RandomZLevels/example.dmm index 354a7a02f3..62a8cacec1 100644 --- a/maps/RandomZLevels/example.dmm +++ b/maps/RandomZLevels/example.dmm @@ -12,7 +12,7 @@ "al" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/awaymission/example) "am" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor,/area/awaymission/example) "an" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor,/area/awaymission/example) -"ao" = (/obj/machinery/gateway/center,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor,/area/awaymission/example) +"ao" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/gateway/centeraway,/turf/simulated/floor,/area/awaymission/example) "ap" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor,/area/awaymission/example) "aq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/awaymission/example) "ar" = (/obj/item/weapon/cigbutt,/turf/simulated/floor,/area/awaymission/example) diff --git a/maps/tgstation.2.0.9.dmm b/maps/tgstation.2.0.9.dmm index 1614bd13ef..a56cc77f26 100644 --- a/maps/tgstation.2.0.9.dmm +++ b/maps/tgstation.2.0.9.dmm @@ -1211,7 +1211,7 @@ "axo" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/storage/tech) "axp" = (/obj/machinery/power/apc{dir = 4; name = "Tech. Storage APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/tech) "axq" = (/obj/item/weapon/paper{info = "Congratulations,

Your station has been selected to carry out the Gateway Project.

The equipment will be shipped to you at the start of the next quarter.
You are to prepare a secure location to house the equipment as outlined in the attached documents.

--Nanotrasen Blue Space Research"; name = "Confidential Correspondence, Pg 1"; pixel_x = 0; pixel_y = 0},/obj/machinery/gateway{dir = 8},/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/teleporter/gateway) -"axr" = (/obj/machinery/gateway/center,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor{icon_state = "dark"},/area/teleporter/gateway) +"axr" = (/obj/machinery/gateway/centerstation,/turf/simulated/floor{icon_state = "dark"},/area/teleporter/gateway) "axs" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/teleporter/gateway) "axt" = (/obj/machinery/camera{c_tag = "EVA Maintenance"; dir = 8; network = "SS13"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint) "axu" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -30},/obj/item/weapon/tank/jetpack/carbondioxide,/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/ai_monitored/storage/eva)