mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
The away gate doesn't require power to make away mission mapping possible in unpowered areas like caves, the station gate requires less power than it did (for the time being, it'd be nice if people could actually use the gate. Makes no sense to make new content so hard to use. If it becomes a problem, I can up the power requirement again). Added a "calibrated" var to the away gate. If it's uncalibrated, you'll warp to the destination landmarks. Hitting the gate with a multitool with calibrate it, and any more warping to the gate will be on target. It defaults to calibrated, so remember to set it to 0 if you want people to appear somehwere other than at the gate. Updated Cheridans map with the new gate type (and made it uncalibrated) Updated the example map to use the new gate type Updated the station to use the new gate type Changed the gateway description to reflect it's unknown origin To do: Make gates able to block sending from the other gate (so you can exile people), make damaging gates so they can't send/recieve (and still do the other) possible. Give the station gateway unique sprites (for Nanotrasens own prototype gate, with appropriate description) git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4718 316c924e-a436-60f5-8080-3fe189b3f50e
227 lines
5.3 KiB
Plaintext
227 lines
5.3 KiB
Plaintext
/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 = 1
|
|
anchored = 1
|
|
var/active = 0
|
|
|
|
/obj/machinery/gateway/initialize()
|
|
update_icon()
|
|
if(dir == 2)
|
|
density = 0
|
|
|
|
/obj/machinery/gateway/update_icon()
|
|
if(active)
|
|
icon_state = "on"
|
|
return
|
|
icon_state = "off"
|
|
|
|
|
|
|
|
//this is da important part wot makes things go
|
|
/obj/machinery/gateway/centerstation
|
|
density = 1
|
|
icon_state = "offcenter"
|
|
use_power = 1
|
|
|
|
//warping vars
|
|
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
|
|
|
|
/obj/machinery/gateway/centerstation/initialize()
|
|
update_icon()
|
|
returndestination = get_step(loc, SOUTH)
|
|
wait = world.time + 18000 //+ thirty minutes
|
|
awaygate = locate(/obj/machinery/gateway/centeraway, world)
|
|
|
|
/obj/machinery/gateway/centerstation/update_icon()
|
|
if(active)
|
|
icon_state = "oncenter"
|
|
return
|
|
icon_state = "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 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/centerstation/proc/toggleon(mob/user as mob)
|
|
if(!ready) return
|
|
if(linked.len != 8) return
|
|
if(!powered()) return
|
|
if(world.time < wait)
|
|
user << "<span class='notice'>Error: Warpspace triangulation in progress. Estimated time to completion: [round(((wait - world.time) / 10) / 60)] minutes.</span>"
|
|
return
|
|
if(awaygate == null)
|
|
user << "<span class='notice'>Error: No destination found.</span>"
|
|
return
|
|
|
|
for(var/obj/machinery/gateway/G in linked)
|
|
G.active = 1
|
|
G.update_icon()
|
|
active = 1
|
|
update_icon()
|
|
density = 0
|
|
|
|
/obj/machinery/gateway/centerstation/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/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/HasEntered(mob/user as mob)
|
|
if(!ready) return
|
|
if(!active) return
|
|
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)
|
|
user.loc = dest.loc
|
|
user.dir = SOUTH
|
|
use_power(5000)
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////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 << "<span class='notice'>Error: No destination found.</span>"
|
|
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 <b>Recalibration successful!</b>: \black The gates systems have been fine tuned, travel to the gate will now be on target."
|
|
calibrated = 1
|
|
return |