From d83c07ca0e8bc7cb216ebdd29990f4f7327c36b2 Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Sat, 9 Nov 2013 22:42:54 -0800 Subject: [PATCH 1/2] Made telescience WORK! --- code/modules/telesci/gps.dm | 18 ++- code/modules/telesci/telepad.dm | 37 ++--- code/modules/telesci/telesci_computer.dm | 166 +++++++---------------- 3 files changed, 76 insertions(+), 145 deletions(-) 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..56bcd16a3bc 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,11 +59,13 @@ 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)) sparks() @@ -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 From 3e02b55386226be2144ec89cb10a3de226678bfd Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Sat, 9 Nov 2013 22:51:20 -0800 Subject: [PATCH 2/2] reduced fizzle chance to 50, it was very common and overrode everything --- code/modules/telesci/telesci_computer.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index 56bcd16a3bc..03d41853a9e 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -67,7 +67,7 @@ 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)