diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm
index 79897c7e6ea..19b107a5039 100644
--- a/code/modules/telesci/gps.dm
+++ b/code/modules/telesci/gps.dm
@@ -1,5 +1,6 @@
+var/list/GPS_list = list()
/obj/item/device/gps
- name = "Global Positioning System"
+ name = "global positioning system"
desc = "Helping lost spacemen find their way through the planets since 2016."
icon = 'icons/obj/telescience.dmi'
icon_state = "gps-c"
@@ -11,9 +12,13 @@
var/emped = 0
/obj/item/device/gps/New()
- name = "Global Positioning System ([gpstag])"
+ ..()
+ GPS_list.Add(src)
+ name = "global positioning system ([gpstag])"
overlays += "working"
-
+/obj/item/device/gps/Del()
+ GPS_list.Remove(src)
+ ..()
/obj/item/device/gps/emp_act(severity)
emped = 1
overlays -= "working"
@@ -31,7 +36,7 @@
t += "
Set Tag "
t += "
Tag: [gpstag]"
- for(var/obj/item/device/gps/G in world)
+ for(var/obj/item/device/gps/G in GPS_list)
var/turf/pos = get_turf(G)
var/area/gps_area = get_area(G)
var/tracked_gpstag = G.gpstag
@@ -46,15 +51,16 @@
popup.open()
/obj/item/device/gps/Topic(href, href_list)
+ ..()
if(href_list["tag"] )
var/a = input("Please enter desired tag.", name, gpstag) as text
a = copytext(sanitize(a), 1, 20)
if(length(a) != 4)
- usr << "\blue The tag must be four letters long!"
+ usr << " The tag must be four letters long!"
return
else
gpstag = a
- name = "Global Positioning System ([gpstag])"
+ name = "global positioning system ([gpstag])"
return
/obj/item/device/gps/science
diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm
index 1ebc1a3572e..c54d079afde 100644
--- a/code/modules/telesci/telepad.dm
+++ b/code/modules/telesci/telepad.dm
@@ -8,10 +8,6 @@
use_power = 1
idle_power_usage = 200
active_power_usage = 5000
-/obj/machinery/telepad/New()
- ..()
-/obj/machinery/telepad/Del()
- ..()
//CARGO TELEPAD//
/obj/machinery/telepad_cargo
name = "cargo telepad"
@@ -23,39 +19,35 @@
idle_power_usage = 20
active_power_usage = 500
var/stage = 0
-/obj/machinery/telepad_cargo/New()
- ..()
-/obj/machinery/telepad_cargo/Del()
- ..()
/obj/machinery/telepad_cargo/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/wrench))
anchored = 0
playsound(src, 'sound/items/Ratchet.ogg', 50, 1)
if(anchored)
anchored = 0
- user << "\blue The [src] can now be moved."
+ user << " The [src] can now be moved."
else if(!anchored)
anchored = 1
- user << "\blue The [src] is now secured."
+ user << " The [src] is now secured."
if(istype(W, /obj/item/weapon/screwdriver))
if(stage == 0)
playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
- user << "\blue You unscrew the telepad's tracking beacon."
+ user << " You unscrew the telepad's tracking beacon."
stage = 1
else if(stage == 1)
playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
- user << "\blue You screw in the telepad's tracking beacon."
+ user << " You screw in the telepad's tracking beacon."
stage = 0
if(istype(W, /obj/item/weapon/weldingtool) && stage == 1)
playsound(src, 'sound/items/Welder.ogg', 50, 1)
- user << "\blue You disassemble the telepad."
+ user << " You disassemble the telepad."
new /obj/item/stack/sheet/metal(get_turf(src))
new /obj/item/stack/sheet/glass(get_turf(src))
del(src)
///TELEPAD CALLER///
/obj/item/device/telepad_beacon
- name = "Telepad Beacon"
+ name = "telepad beacon"
desc = "Use to warp in a cargo telepad."
icon = 'icons/obj/radio.dmi'
icon_state = "beacon"
@@ -64,7 +56,7 @@
/obj/item/device/telepad_beacon/attack_self(mob/user as mob)
if(user)
- user << "\blue Locked In"
+ user << " Locked In"
new /obj/machinery/telepad_cargo(user.loc)
playsound(src, 'sound/effects/pop.ogg', 100, 1, 1)
del(src)
@@ -76,9 +68,6 @@
desc = "Use this to send crates and closets to cargo telepads."
icon = 'icons/obj/telescience.dmi'
icon_state = "rcs"
- opacity = 0
- density = 0
- anchored = 0.0
flags = FPRINT | TABLEPASS| CONDUCT
force = 10.0
throwforce = 10.0
@@ -94,18 +83,20 @@
var/teleporting = 0
/obj/item/weapon/rcs/New()
+ ..()
processing_objects.Add(src)
+/obj/item/weapon/rcs/examine()
desc = "Use this to send crates and closets to cargo telepads. There are [rcharges] charges left."
+ ..()
/obj/item/weapon/rcs/Del()
processing_objects.Remove(src)
-
+ ..()
/obj/item/weapon/rcs/process()
if(rcharges > 10)
rcharges = 10
if(last_charge == 0)
rcharges++
- desc = "Use this to send crates and closets to cargo telepads. There are [rcharges] charges left."
last_charge = 30
else
last_charge--
@@ -115,11 +106,11 @@
if(mode == 0)
mode = 1
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
- user << "\red The telepad locator has become uncalibrated."
+ user << " The telepad locator has become uncalibrated."
else
mode = 0
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
- user << "\blue You calibrate the telepad locator."
+ user << " You calibrate the telepad locator."
/obj/item/weapon/rcs/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/weapon/card/emag) && emagged == 0)
@@ -127,5 +118,5 @@
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
- user << "\red You emag the RCS. Click on it to toggle between modes."
+ user << " You emag the RCS. Click on it to toggle between modes."
return
\ No newline at end of file
diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm
index 471473ed2e9..03d41853a9e 100644
--- a/code/modules/telesci/telesci_computer.dm
+++ b/code/modules/telesci/telesci_computer.dm
@@ -1,7 +1,9 @@
/obj/machinery/computer/telescience
- name = "Telepad Control Console"
+ name = "telepad control console"
desc = "Used to teleport objects to and from the telescience telepad."
icon_state = "teleport"
+ var/sending = 1
+ var/obj/machinery/telepad/telepad = null
// VARIABLES //
var/teles_left // How many teleports left until it becomes uncalibrated
@@ -12,9 +14,15 @@
var/z_co // Z coordinate
/obj/machinery/computer/telescience/New()
+ ..()
teles_left = rand(8,12)
x_off = rand(-10,10)
y_off = rand(-10,10)
+ initialize()
+
+/obj/machinery/computer/telescience/initialize()
+ ..()
+ telepad = locate() in range(src, 7)
/obj/machinery/computer/telescience/update_icon()
if(stat & BROKEN)
@@ -28,17 +36,15 @@
stat &= ~NOPOWER
/obj/machinery/computer/telescience/attack_paw(mob/user)
- usr << "You are too primitive to use this computer."
+ user << "You are too primitive to use this computer."
return
/obj/machinery/computer/telescience/attack_ai(mob/user)
- src.attack_hand()
+ src.attack_hand(user)
/obj/machinery/computer/telescience/attack_hand(mob/user)
if(..())
return
- if(stat & (NOPOWER|BROKEN))
- return
var/t = ""
t += "Set X"
t += "Set Y"
@@ -53,13 +59,15 @@
popup.open()
return
/obj/machinery/computer/telescience/proc/sparks()
- for(var/obj/machinery/telepad/E in machines)
+ if(telepad)
var/L = get_turf(E)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, L)
s.start()
+ else
+ return
/obj/machinery/computer/telescience/proc/telefail()
- if(prob(95))
+ if(prob(50))
sparks()
for(var/mob/O in hearers(src, null))
O.show_message("\red The telepad weakly fizzles.", 2)
@@ -137,120 +145,54 @@
return
return
-/obj/machinery/computer/telescience/proc/dosend()
+/obj/machinery/computer/telescience/proc/doteleport(mob/user)
var/trueX = (x_co + x_off)
var/trueY = (y_co + y_off)
- for(var/obj/machinery/telepad/E in machines)
- var/L = get_turf(E)
- var/target = locate(trueX, trueY, z_co)
+ trueX = Clamp(trueX, 1, world.maxx)
+ trueY = Clamp(trueY, 1, world.maxy)
+ if(telepad)
+ var/turf/target = locate(trueX, trueY, z_co)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(5, 1, L)
+ s.set_up(5, 1, telepad)
s.start()
- flick("pad-beam", E)
- usr << "\blue Teleport successful."
+ flick("pad-beam", telepad)
+ user << " Teleport successful."
var/sparks = get_turf(target)
var/datum/effect/effect/system/spark_spread/y = new /datum/effect/effect/system/spark_spread
y.set_up(5, 1, sparks)
y.start()
- for(var/obj/item/OI in L)
- do_teleport(OI, target, 0)
- for(var/obj/structure/closet/OC in L)
- do_teleport(OC, target, 0)
- for(var/mob/living/carbon/MO in L)
- do_teleport(MO, target, 0)
- for(var/mob/living/simple_animal/SA in L)
- do_teleport(SA, target, 0)
+ var/turf/source = target
+ var/turf/dest = get_turf(telepad)
+ if(sending)
+ source = dest
+ dest = target
+ for(var/atom/movable/ROI in source)
+ if(ROI.anchored) continue
+ do_teleport(ROI, dest, 0)
return
return
-/obj/machinery/computer/telescience/proc/doreceive()
- var/trueX = (x_co + x_off)
- var/trueY = (y_co + y_off)
- for(var/obj/machinery/telepad/E in machines)
- var/L = get_turf(E)
- var/T = locate(trueX, trueY, z_co)
- var/G = get_turf(T)
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(5, 1, L)
- s.start()
- flick("pad-beam", E)
- usr << "\blue Teleport successful."
- var/sparks = get_turf(T)
- var/datum/effect/effect/system/spark_spread/y = new /datum/effect/effect/system/spark_spread
- y.set_up(5, 1, sparks)
- y.start()
- for(var/obj/item/ROI in G)
- do_teleport(ROI, E, 0)
- for(var/obj/structure/closet/ROC in G)
- do_teleport(ROC, E, 0)
- for(var/mob/living/carbon/RMO in G)
- do_teleport(RMO, E, 0)
- for(var/mob/living/simple_animal/RSA in G)
- do_teleport(RSA, E, 0)
- return
- return
-
-/obj/machinery/computer/telescience/proc/telesend()
- if(x_co == "")
- usr << "\red Error: set coordinates."
- return
- if(y_co == "")
- usr << "\red Error: set coordinates."
- return
- if(z_co == "")
- usr << "\red Error: set coordinates."
+/obj/machinery/computer/telescience/proc/teleport(mob/user)
+ if(x_co == null || y_co == null || z_co == null)
+ user << " Error: set coordinates."
return
if(x_co < 1 || x_co > 255)
telefail()
- usr << "\red Error: X is less than 11 or greater than 245."
+ user << " Error: X is less than 1 or greater than 255."
return
if(y_co < 1 || y_co > 255)
telefail()
- usr << "\red Error: Y is less than 11 or greater than 245."
+ user << " Error: Y is less than 1 or greater than 255."
return
- if(z_co == 2 || z_co < 1 || z_co > 6)
+ if(z_co == 2 || z_co < 1 || z_co > 7)
telefail()
- usr << "\red Error: Z is less than 1, greater than 6, or equal to 2."
+ user << " Error: Z is less than 1, greater than 7, or equal to 2."
return
if(teles_left > 0)
teles_left -= 1
- dosend()
+ doteleport(user)
else
- dosend()
- return
- return
-
-/obj/machinery/computer/telescience/proc/telereceive()
- // basically the same thing
- if(x_co == "")
- usr << "\red Error: set coordinates."
- return
- if(y_co == "")
- usr << "\red Error: set coordinates."
- return
- if(z_co == "")
- usr << "\red Error: set coordinates."
- return
- if(x_co < 1 || x_co > 255)
telefail()
- usr << "\red Error: X is less than 11 or greater than 200."
- return
- if(y_co < 1 || y_co > 255)
- telefail()
- usr << "\red Error: Y is less than 11 or greater than 200."
- return
- if(z_co == 2 || z_co < 1 || z_co > 6)
- telefail()
- usr << "\red Error: Z is less than 1, greater than 6, or equal to 2."
- return
- if(teles_left > 0)
- teles_left -= 1
- doreceive()
- else
- if(prob(35))
- doreceive()
- else
- telefail()
return
return
@@ -258,37 +200,29 @@
if(..())
return
if(href_list["setx"])
- var/a = input("Please input desired X coordinate.", name, x_co) as num
- a = copytext(sanitize(a), 1, 20)
- x_co = a
- x_co = text2num(x_co)
+ var/new_x = input("Please input desired X coordinate.", name, x_co) as num
+ x_co = Clamp(new_x, 1, 9999)
return
if(href_list["sety"])
- var/b = input("Please input desired Y coordinate.", name, y_co) as num
- b = copytext(sanitize(b), 1, 20)
- y_co = b
- y_co = text2num(y_co)
+ var/new_y = input("Please input desired Y coordinate.", name, y_co) as num
+ y_co = Clamp(new_y, 1, 9999)
return
if(href_list["setz"])
- var/c = input("Please input desired Z coordinate.", name, z_co) as num
- c = copytext(sanitize(c), 1, 20)
- z_co = c
- z_co = text2num(z_co)
+ var/new_z = input("Please input desired Z coordinate.", name, z_co) as num
+ z_co = Clamp(new_z, 1, 9999)
return
if(href_list["send"])
- telesend()
+ sending = 1
+ teleport(usr)
return
if(href_list["receive"])
- telereceive()
+ sending = 0
+ teleport(usr)
return
if(href_list["recal"])
teles_left = rand(9,12)
x_off = rand(-10,10)
y_off = rand(-10,10)
- for(var/obj/machinery/telepad/E in machines)
- var/L = get_turf(E)
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(5, 1, L)
- s.start()
- usr << "\blue Calibration successful."
+ sparks()
+ usr << " Calibration successful."
return
\ No newline at end of file