mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 03:02:54 +00:00
Removal of Telescience.
This commit is contained in:
@@ -1260,10 +1260,6 @@
|
|||||||
#include "code\modules\surgery\ribcage.dm"
|
#include "code\modules\surgery\ribcage.dm"
|
||||||
#include "code\modules\surgery\robolimbs.dm"
|
#include "code\modules\surgery\robolimbs.dm"
|
||||||
#include "code\modules\surgery\surgery.dm"
|
#include "code\modules\surgery\surgery.dm"
|
||||||
#include "code\modules\telesci\bscrystal.dm"
|
|
||||||
#include "code\modules\telesci\gps.dm"
|
|
||||||
#include "code\modules\telesci\telepad.dm"
|
|
||||||
#include "code\modules\telesci\telesci_computer.dm"
|
|
||||||
#include "code\modules\virus2\analyser.dm"
|
#include "code\modules\virus2\analyser.dm"
|
||||||
#include "code\modules\virus2\antibodies.dm"
|
#include "code\modules\virus2\antibodies.dm"
|
||||||
#include "code\modules\virus2\centrifuge.dm"
|
#include "code\modules\virus2\centrifuge.dm"
|
||||||
|
|||||||
@@ -1373,10 +1373,6 @@ var/list/ghostteleportlocs = list()
|
|||||||
name = "\improper Miscellaneous Research"
|
name = "\improper Miscellaneous Research"
|
||||||
icon_state = "toxmisc"
|
icon_state = "toxmisc"
|
||||||
|
|
||||||
/area/toxins/telesci
|
|
||||||
name = "\improper Telescience Lab"
|
|
||||||
icon_state = "toxmisc"
|
|
||||||
|
|
||||||
/area/toxins/server
|
/area/toxins/server
|
||||||
name = "\improper Server Room"
|
name = "\improper Server Room"
|
||||||
icon_state = "server"
|
icon_state = "server"
|
||||||
|
|||||||
@@ -43,10 +43,7 @@
|
|||||||
if(10)
|
if(10)
|
||||||
for(var/i = 0, i < 3, i++)
|
for(var/i = 0, i < 3, i++)
|
||||||
new/obj/item/weapon/reagent_containers/glass/beaker/noreact(src)
|
new/obj/item/weapon/reagent_containers/glass/beaker/noreact(src)
|
||||||
if(11 to 12)
|
if(11 to 13)
|
||||||
for(var/i = 0, i < 9, i++)
|
|
||||||
new/obj/item/bluespace_crystal(src)
|
|
||||||
if(13)
|
|
||||||
new/obj/item/weapon/melee/classic_baton(src)
|
new/obj/item/weapon/melee/classic_baton(src)
|
||||||
if(14)
|
if(14)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -1,38 +0,0 @@
|
|||||||
// Bluespace crystals, used in telescience and when crushed it will blink you to a random turf.
|
|
||||||
|
|
||||||
/obj/item/bluespace_crystal
|
|
||||||
name = "bluespace crystal"
|
|
||||||
desc = "A glowing bluespace crystal, not much is known about how they work. It looks very delicate."
|
|
||||||
icon = 'icons/obj/telescience.dmi'
|
|
||||||
icon_state = "bluespace_crystal"
|
|
||||||
w_class = 1
|
|
||||||
origin_tech = "bluespace=4;materials=3"
|
|
||||||
var/blink_range = 8 // The teleport range when crushed/thrown at someone.
|
|
||||||
|
|
||||||
/obj/item/bluespace_crystal/New()
|
|
||||||
..()
|
|
||||||
pixel_x = rand(-5, 5)
|
|
||||||
pixel_y = rand(-5, 5)
|
|
||||||
|
|
||||||
/obj/item/bluespace_crystal/attack_self(var/mob/user)
|
|
||||||
blink_mob(user)
|
|
||||||
user.drop_item()
|
|
||||||
user.visible_message("<span class='notice'>[user] crushes the [src]!</span>")
|
|
||||||
del(src)
|
|
||||||
|
|
||||||
/obj/item/bluespace_crystal/proc/blink_mob(var/mob/living/L)
|
|
||||||
do_teleport(L, get_turf(L), blink_range, asoundin = 'sound/effects/phasein.ogg')
|
|
||||||
|
|
||||||
/obj/item/bluespace_crystal/throw_impact(atom/hit_atom)
|
|
||||||
..()
|
|
||||||
if(isliving(hit_atom))
|
|
||||||
blink_mob(hit_atom)
|
|
||||||
del(src)
|
|
||||||
|
|
||||||
// Artifical bluespace crystal, doesn't give you much research.
|
|
||||||
|
|
||||||
/obj/item/bluespace_crystal/artificial
|
|
||||||
name = "artificial bluespace crystal"
|
|
||||||
desc = "An artificially made bluespace crystal, it looks delicate."
|
|
||||||
origin_tech = "bluespace=2"
|
|
||||||
blink_range = 4 // Not as good as the organic stuff!
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
var/list/GPS_list = list()
|
|
||||||
/obj/item/device/gps
|
|
||||||
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"
|
|
||||||
w_class = 2.0
|
|
||||||
flags = FPRINT | TABLEPASS
|
|
||||||
slot_flags = SLOT_BELT
|
|
||||||
origin_tech = "programming=2;engineering=2"
|
|
||||||
var/gpstag = "COM0"
|
|
||||||
var/emped = 0
|
|
||||||
|
|
||||||
/obj/item/device/gps/New()
|
|
||||||
..()
|
|
||||||
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"
|
|
||||||
overlays += "emp"
|
|
||||||
spawn(300)
|
|
||||||
emped = 0
|
|
||||||
overlays -= "emp"
|
|
||||||
overlays += "working"
|
|
||||||
|
|
||||||
/obj/item/device/gps/attack_self(mob/user as mob)
|
|
||||||
|
|
||||||
var/obj/item/device/gps/t = ""
|
|
||||||
if(emped)
|
|
||||||
t += "ERROR"
|
|
||||||
else
|
|
||||||
t += "<BR><A href='?src=\ref[src];tag=1'>Set Tag</A> "
|
|
||||||
t += "<BR>Tag: [gpstag]"
|
|
||||||
|
|
||||||
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
|
|
||||||
if(G.emped == 1)
|
|
||||||
t += "<BR>[tracked_gpstag]: ERROR"
|
|
||||||
else
|
|
||||||
t += "<BR>[tracked_gpstag]: [format_text(gps_area.name)] ([pos.x], [pos.y], [pos.z])"
|
|
||||||
|
|
||||||
var/datum/browser/popup = new(user, "GPS", name, 600, 450)
|
|
||||||
popup.set_content(t)
|
|
||||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
|
||||||
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 = uppertext(copytext(sanitize(a), 1, 5))
|
|
||||||
if(src.loc == usr)
|
|
||||||
gpstag = a
|
|
||||||
name = "global positioning system ([gpstag])"
|
|
||||||
attack_self(usr)
|
|
||||||
|
|
||||||
/obj/item/device/gps/science
|
|
||||||
icon_state = "gps-s"
|
|
||||||
gpstag = "SCI0"
|
|
||||||
|
|
||||||
/obj/item/device/gps/engineering
|
|
||||||
icon_state = "gps-e"
|
|
||||||
gpstag = "ENG0"
|
|
||||||
@@ -1,122 +0,0 @@
|
|||||||
///SCI TELEPAD///
|
|
||||||
/obj/machinery/telepad
|
|
||||||
name = "telepad"
|
|
||||||
desc = "A bluespace telepad used for teleporting objects to and from a location."
|
|
||||||
icon = 'icons/obj/telescience.dmi'
|
|
||||||
icon_state = "pad-idle"
|
|
||||||
anchored = 1
|
|
||||||
use_power = 1
|
|
||||||
idle_power_usage = 200
|
|
||||||
active_power_usage = 5000
|
|
||||||
//CARGO TELEPAD//
|
|
||||||
/obj/machinery/telepad_cargo
|
|
||||||
name = "cargo telepad"
|
|
||||||
desc = "A telepad used by the Rapid Crate Sender."
|
|
||||||
icon = 'icons/obj/telescience.dmi'
|
|
||||||
icon_state = "pad-idle"
|
|
||||||
anchored = 1
|
|
||||||
use_power = 1
|
|
||||||
idle_power_usage = 20
|
|
||||||
active_power_usage = 500
|
|
||||||
var/stage = 0
|
|
||||||
/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 << "<span class = 'caution'> The [src] can now be moved.</span>"
|
|
||||||
else if(!anchored)
|
|
||||||
anchored = 1
|
|
||||||
user << "<span class = 'caution'> The [src] is now secured.</span>"
|
|
||||||
if(istype(W, /obj/item/weapon/screwdriver))
|
|
||||||
if(stage == 0)
|
|
||||||
playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
|
|
||||||
user << "<span class = 'caution'> You unscrew the telepad's tracking beacon.</span>"
|
|
||||||
stage = 1
|
|
||||||
else if(stage == 1)
|
|
||||||
playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
|
|
||||||
user << "<span class = 'caution'> You screw in the telepad's tracking beacon.</span>"
|
|
||||||
stage = 0
|
|
||||||
if(istype(W, /obj/item/weapon/weldingtool) && stage == 1)
|
|
||||||
playsound(src, 'sound/items/Welder.ogg', 50, 1)
|
|
||||||
user << "<span class = 'caution'> You disassemble the telepad.</span>"
|
|
||||||
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"
|
|
||||||
desc = "Use to warp in a cargo telepad."
|
|
||||||
icon = 'icons/obj/radio.dmi'
|
|
||||||
icon_state = "beacon"
|
|
||||||
item_state = "signaler"
|
|
||||||
origin_tech = "bluespace=3"
|
|
||||||
|
|
||||||
/obj/item/device/telepad_beacon/attack_self(mob/user as mob)
|
|
||||||
if(user)
|
|
||||||
user << "<span class = 'caution'> Locked In</span>"
|
|
||||||
new /obj/machinery/telepad_cargo(user.loc)
|
|
||||||
playsound(src, 'sound/effects/pop.ogg', 100, 1, 1)
|
|
||||||
del(src)
|
|
||||||
return
|
|
||||||
|
|
||||||
///HANDHELD TELEPAD USER///
|
|
||||||
/obj/item/weapon/rcs
|
|
||||||
name = "rapid-crate-sender (RCS)"
|
|
||||||
desc = "Use this to send crates and closets to cargo telepads."
|
|
||||||
icon = 'icons/obj/telescience.dmi'
|
|
||||||
icon_state = "rcs"
|
|
||||||
flags = FPRINT | TABLEPASS| CONDUCT
|
|
||||||
force = 10.0
|
|
||||||
throwforce = 10.0
|
|
||||||
throw_speed = 1
|
|
||||||
throw_range = 5
|
|
||||||
var/rcharges = 10
|
|
||||||
var/obj/machinery/pad = null
|
|
||||||
var/last_charge = 30
|
|
||||||
var/mode = 0
|
|
||||||
var/rand_x = 0
|
|
||||||
var/rand_y = 0
|
|
||||||
var/emagged = 0
|
|
||||||
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++
|
|
||||||
last_charge = 30
|
|
||||||
else
|
|
||||||
last_charge--
|
|
||||||
|
|
||||||
/obj/item/weapon/rcs/attack_self(mob/user)
|
|
||||||
if(emagged)
|
|
||||||
if(mode == 0)
|
|
||||||
mode = 1
|
|
||||||
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
|
|
||||||
user << "<span class = 'caution'> The telepad locator has become uncalibrated.</span>"
|
|
||||||
else
|
|
||||||
mode = 0
|
|
||||||
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
|
|
||||||
user << "<span class = 'caution'> You calibrate the telepad locator.</span>"
|
|
||||||
|
|
||||||
/obj/item/weapon/rcs/attackby(obj/item/W, mob/user)
|
|
||||||
if(istype(W, /obj/item/weapon/card/emag) && emagged == 0)
|
|
||||||
emagged = 1
|
|
||||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
|
||||||
s.set_up(5, 1, src)
|
|
||||||
s.start()
|
|
||||||
user << "<span class = 'caution'> You emag the RCS. Click on it to toggle between modes.</span>"
|
|
||||||
return
|
|
||||||
@@ -1,312 +0,0 @@
|
|||||||
/obj/machinery/computer/telescience
|
|
||||||
name = "\improper 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
|
|
||||||
var/temp_msg = "Telescience control console initialized.<BR>Welcome."
|
|
||||||
|
|
||||||
// VARIABLES //
|
|
||||||
var/teles_left // How many teleports left until it becomes uncalibrated
|
|
||||||
var/datum/projectile_data/last_tele_data = null
|
|
||||||
var/z_co = 1
|
|
||||||
var/power_off
|
|
||||||
var/rotation_off
|
|
||||||
var/angle_off
|
|
||||||
|
|
||||||
var/rotation = 0
|
|
||||||
var/angle = 45
|
|
||||||
var/power
|
|
||||||
|
|
||||||
// Based on the power used
|
|
||||||
var/teleport_cooldown = 0
|
|
||||||
var/list/power_options = list(5, 10, 20, 25, 30, 40, 50, 80, 100) // every index requires a bluespace crystal
|
|
||||||
var/teleporting = 0
|
|
||||||
var/starting_crystals = 3
|
|
||||||
var/list/crystals = list()
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/New()
|
|
||||||
..()
|
|
||||||
link_telepad()
|
|
||||||
recalibrate()
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/Del()
|
|
||||||
eject()
|
|
||||||
..()
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/examine()
|
|
||||||
..()
|
|
||||||
usr << "There are [crystals.len] bluespace crystals in the crystal ports."
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/initialize()
|
|
||||||
..()
|
|
||||||
link_telepad()
|
|
||||||
for(var/i = 1; i <= starting_crystals; i++)
|
|
||||||
crystals += new /obj/item/bluespace_crystal/artificial(null) // starting crystals
|
|
||||||
power = power_options[1]
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/proc/link_telepad()
|
|
||||||
telepad = locate() in range(src, 7)
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/update_icon()
|
|
||||||
if(stat & BROKEN)
|
|
||||||
icon_state = "telescib"
|
|
||||||
else
|
|
||||||
if(stat & NOPOWER)
|
|
||||||
src.icon_state = "teleport0"
|
|
||||||
stat |= NOPOWER
|
|
||||||
else
|
|
||||||
icon_state = initial(icon_state)
|
|
||||||
stat &= ~NOPOWER
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/attack_paw(mob/user)
|
|
||||||
user << "You are too primitive to use this computer."
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/attackby(obj/item/W, mob/user)
|
|
||||||
if(istype(W, /obj/item/bluespace_crystal))
|
|
||||||
if(crystals.len >= power_options.len)
|
|
||||||
user << "<span class='warning'>There are not enough crystal ports.</span>"
|
|
||||||
return
|
|
||||||
user.drop_item()
|
|
||||||
crystals += W
|
|
||||||
W.loc = null
|
|
||||||
user.visible_message("<span class='notice'>[user] inserts a [W] into the [src]'s crystal port.</span>")
|
|
||||||
else
|
|
||||||
..()
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/attack_ai(mob/user)
|
|
||||||
src.attack_hand(user)
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/attack_hand(mob/user)
|
|
||||||
if(..())
|
|
||||||
return
|
|
||||||
interact(user)
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/interact(mob/user)
|
|
||||||
user.machine = src
|
|
||||||
in_use = 1
|
|
||||||
|
|
||||||
var/t = "<div class='statusDisplay'>[temp_msg]</div><BR>"
|
|
||||||
t += "<A href='?src=\ref[src];setrotation=1'>Set Bearing</A>"
|
|
||||||
t += "<div class='statusDisplay'>[rotation]<5D></div>"
|
|
||||||
t += "<A href='?src=\ref[src];setangle=1'>Set Elevation</A>"
|
|
||||||
t += "<div class='statusDisplay'>[angle]<5D></div>"
|
|
||||||
t += "<span class='linkOn'>Set Power</span>"
|
|
||||||
t += "<div class='statusDisplay'>"
|
|
||||||
|
|
||||||
for(var/i = 1; i <= power_options.len; i++)
|
|
||||||
if(crystals.len < i)
|
|
||||||
t += "<span class='linkOff'>[power_options[i]]</span>"
|
|
||||||
continue
|
|
||||||
if(power == power_options[i])
|
|
||||||
t += "<span class='linkOn'>[power_options[i]]</span>"
|
|
||||||
continue
|
|
||||||
t += "<A href='?src=\ref[src];setpower=[i]'>[power_options[i]]</A>"
|
|
||||||
|
|
||||||
t += "</div>"
|
|
||||||
t += "<A href='?src=\ref[src];setz=1'>Set Sector</A>"
|
|
||||||
t += "<div class='statusDisplay'>[z_co ? z_co : "NULL"]</div>"
|
|
||||||
|
|
||||||
t += "<BR><A href='?src=\ref[src];send=1'>Send</A>"
|
|
||||||
t += " <A href='?src=\ref[src];receive=1'>Receive</A>"
|
|
||||||
t += "<BR><A href='?src=\ref[src];recal=1'>Recalibrate Crystals</A> <A href='?src=\ref[src];eject=1'>Eject Crystals</A>"
|
|
||||||
|
|
||||||
// Information about the last teleport
|
|
||||||
t += "<BR><div class='statusDisplay'>"
|
|
||||||
if(!last_tele_data)
|
|
||||||
t += "No teleport data found."
|
|
||||||
else
|
|
||||||
t += "Source Location: ([last_tele_data.src_x], [last_tele_data.src_y])<BR>"
|
|
||||||
//t += "Distance: [round(last_tele_data.distance, 0.1)]m<BR>"
|
|
||||||
t += "Time: [round(last_tele_data.time, 0.1)] secs<BR>"
|
|
||||||
t += "</div>"
|
|
||||||
|
|
||||||
var/datum/browser/popup = new(user, "telesci", name, 300, 500)
|
|
||||||
popup.set_content(t)
|
|
||||||
popup.open()
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/proc/sparks()
|
|
||||||
if(telepad)
|
|
||||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
|
||||||
s.set_up(5, 1, get_turf(telepad))
|
|
||||||
s.start()
|
|
||||||
else
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/proc/telefail()
|
|
||||||
sparks()
|
|
||||||
visible_message("<span class='warning'>The telepad weakly fizzles.</span>")
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/proc/doteleport(mob/user)
|
|
||||||
|
|
||||||
if(teleport_cooldown > world.time)
|
|
||||||
temp_msg = "Telepad is recharging power.<BR>Please wait [round((teleport_cooldown - world.time) / 10)] seconds."
|
|
||||||
return
|
|
||||||
|
|
||||||
if(teleporting)
|
|
||||||
temp_msg = "Telepad is in use.<BR>Please wait."
|
|
||||||
return
|
|
||||||
|
|
||||||
if(telepad)
|
|
||||||
|
|
||||||
var/truePower = Clamp(power + power_off, 1, 1000)
|
|
||||||
var/trueRotation = rotation + rotation_off
|
|
||||||
var/trueAngle = Clamp(angle + angle_off, 1, 90)
|
|
||||||
|
|
||||||
var/datum/projectile_data/proj_data = projectile_trajectory(telepad.x, telepad.y, trueRotation, trueAngle, truePower)
|
|
||||||
last_tele_data = proj_data
|
|
||||||
|
|
||||||
var/trueX = Clamp(round(proj_data.dest_x, 1), 1, world.maxx)
|
|
||||||
var/trueY = Clamp(round(proj_data.dest_y, 1), 1, world.maxy)
|
|
||||||
var/spawn_time = round(proj_data.time) * 10
|
|
||||||
|
|
||||||
var/turf/target = locate(trueX, trueY, z_co)
|
|
||||||
var/area/A = get_area(target)
|
|
||||||
flick("pad-beam", telepad)
|
|
||||||
|
|
||||||
if(spawn_time > 15) // 1.5 seconds
|
|
||||||
playsound(telepad.loc, 'sound/weapons/flash.ogg', 25, 1)
|
|
||||||
// Wait depending on the time the projectile took to get there
|
|
||||||
teleporting = 1
|
|
||||||
temp_msg = "Powering up bluespace crystals.<BR>Please wait."
|
|
||||||
|
|
||||||
|
|
||||||
spawn(round(proj_data.time) * 10) // in seconds
|
|
||||||
if(!telepad)
|
|
||||||
return
|
|
||||||
if(telepad.stat & NOPOWER)
|
|
||||||
return
|
|
||||||
teleporting = 0
|
|
||||||
teleport_cooldown = world.time + (power * 2)
|
|
||||||
teles_left -= 1
|
|
||||||
|
|
||||||
// use a lot of power
|
|
||||||
use_power(power * 10)
|
|
||||||
|
|
||||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
|
||||||
s.set_up(5, 1, get_turf(telepad))
|
|
||||||
s.start()
|
|
||||||
|
|
||||||
temp_msg = "Teleport successful.<BR>"
|
|
||||||
if(teles_left < 10)
|
|
||||||
temp_msg += "<BR>Calibration required soon."
|
|
||||||
else
|
|
||||||
temp_msg += "Data printed below."
|
|
||||||
investigate_log("[key_name(usr)]/[user] has teleported with Telescience at [trueX],[trueY],[z_co], in [A ? A.name : "null area"].","telesci")
|
|
||||||
|
|
||||||
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()
|
|
||||||
|
|
||||||
var/turf/source = target
|
|
||||||
var/turf/dest = get_turf(telepad)
|
|
||||||
if(sending)
|
|
||||||
source = dest
|
|
||||||
dest = target
|
|
||||||
|
|
||||||
flick("pad-beam", telepad)
|
|
||||||
playsound(telepad.loc, 'sound/weapons/emitter2.ogg', 25, 1)
|
|
||||||
for(var/atom/movable/ROI in source)
|
|
||||||
// if is anchored, don't let through
|
|
||||||
if(ROI.anchored)
|
|
||||||
if(isliving(ROI))
|
|
||||||
var/mob/living/L = ROI
|
|
||||||
if(L.buckled)
|
|
||||||
// TP people on office chairs
|
|
||||||
if(L.buckled.anchored)
|
|
||||||
continue
|
|
||||||
else
|
|
||||||
continue
|
|
||||||
else if(!isobserver(ROI))
|
|
||||||
continue
|
|
||||||
do_teleport(ROI, dest)
|
|
||||||
updateDialog()
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/proc/teleport(mob/user)
|
|
||||||
if(rotation == null || angle == null || z_co == null)
|
|
||||||
temp_msg = "ERROR!<BR>Set a angle, rotation and sector."
|
|
||||||
return
|
|
||||||
if(power <= 0)
|
|
||||||
telefail()
|
|
||||||
temp_msg = "ERROR!<BR>No power selected!"
|
|
||||||
return
|
|
||||||
if(angle < 1 || angle > 90)
|
|
||||||
telefail()
|
|
||||||
temp_msg = "ERROR!<BR>Elevation is less than 1 or greater than 90."
|
|
||||||
return
|
|
||||||
if(z_co == 2 || z_co < 1 || z_co > 6)
|
|
||||||
telefail()
|
|
||||||
temp_msg = "ERROR! Sector is less than 1, <BR>greater than 6, or equal to 2."
|
|
||||||
return
|
|
||||||
if(teles_left > 0)
|
|
||||||
doteleport(user)
|
|
||||||
else
|
|
||||||
telefail()
|
|
||||||
temp_msg = "ERROR!<BR>Calibration required."
|
|
||||||
return
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/proc/eject()
|
|
||||||
for(var/obj/item/I in crystals)
|
|
||||||
I.loc = src.loc
|
|
||||||
crystals -= I
|
|
||||||
power = 0
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/Topic(href, href_list)
|
|
||||||
if(..())
|
|
||||||
return
|
|
||||||
if(href_list["setrotation"])
|
|
||||||
var/new_rot = input("Please input desired bearing in degrees.", name, rotation) as num
|
|
||||||
if(..()) // Check after we input a value, as they could've moved after they entered something
|
|
||||||
return
|
|
||||||
rotation = Clamp(new_rot, -900, 900)
|
|
||||||
rotation = round(rotation, 0.01)
|
|
||||||
|
|
||||||
if(href_list["setangle"])
|
|
||||||
var/new_angle = input("Please input desired elevation in degrees.", name, angle) as num
|
|
||||||
if(..())
|
|
||||||
return
|
|
||||||
angle = Clamp(round(new_angle, 0.1), 1, 9999)
|
|
||||||
|
|
||||||
if(href_list["setpower"])
|
|
||||||
var/index = href_list["setpower"]
|
|
||||||
index = text2num(index)
|
|
||||||
if(index != null && power_options[index])
|
|
||||||
if(crystals.len >= index)
|
|
||||||
power = power_options[index]
|
|
||||||
|
|
||||||
if(href_list["setz"])
|
|
||||||
var/new_z = input("Please input desired sector.", name, z_co) as num
|
|
||||||
if(..())
|
|
||||||
return
|
|
||||||
z_co = Clamp(round(new_z), 1, 10)
|
|
||||||
|
|
||||||
if(href_list["send"])
|
|
||||||
sending = 1
|
|
||||||
teleport(usr)
|
|
||||||
|
|
||||||
if(href_list["receive"])
|
|
||||||
sending = 0
|
|
||||||
teleport(usr)
|
|
||||||
|
|
||||||
if(href_list["recal"])
|
|
||||||
recalibrate()
|
|
||||||
sparks()
|
|
||||||
temp_msg = "NOTICE:<BR>Calibration successful."
|
|
||||||
|
|
||||||
if(href_list["eject"])
|
|
||||||
eject()
|
|
||||||
temp_msg = "NOTICE:<BR>Bluespace crystals ejected."
|
|
||||||
|
|
||||||
updateDialog()
|
|
||||||
return 1
|
|
||||||
|
|
||||||
/obj/machinery/computer/telescience/proc/recalibrate()
|
|
||||||
teles_left = rand(30, 40)
|
|
||||||
angle_off = rand(-25, 25)
|
|
||||||
power_off = rand(-4, 0)
|
|
||||||
rotation_off = rand(-10, 10)
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.1 KiB |
Reference in New Issue
Block a user