Telescience!

This commit is contained in:
ZomgPonies
2013-11-04 07:48:43 -05:00
parent bd24ed42d8
commit 8bf368f547
17 changed files with 8562 additions and 7963 deletions
+66
View File
@@ -0,0 +1,66 @@
/obj/item/device/gps
name = "Space Positioning System"
desc = "Helping lost spacemen find their way through the galaxy since 3016."
icon = 'icons/obj/telescience.dmi'
icon_state = "gps-c"
w_class = 2.0
flags = FPRINT
slot_flags = SLOT_BELT
origin_tech = "programming=2;engineering=2"
var/gpstag = "COM0"
var/emped = 0
/obj/item/device/gps/New()
name = "Space Positioning System ([gpstag])"
overlays += "working"
/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 world)
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, "SPS", 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 = copytext(sanitize(a), 1, 20)
if(length(a) != 4)
usr << "\blue The tag must be four letters long!"
return
else
gpstag = a
name = "Space Positioning System ([gpstag])"
return
/obj/item/device/gps/science
icon_state = "gps-s"
gpstag = "SCI0"
/obj/item/device/gps/engineering
icon_state = "gps-e"
gpstag = "ENG0"
@@ -46,4 +46,22 @@
new /obj/machinery/singularity_beacon/syndicate( user.loc )
playsound(src, 'sound/effects/pop.ogg', 100, 1, 1)
del(src)
return
/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 << "\blue Locked In"
new /obj/machinery/telepad_cargo(user.loc)
playsound(src, 'sound/effects/pop.ogg', 100, 1, 1)
del(src)
return
+59
View File
@@ -0,0 +1,59 @@
/obj/item/weapon/rcs
name = "rapid-crate-sender (RCS)"
desc = "Use this to send crates and closets to cargo telepads."
icon = 'icons/obj/items.dmi'
icon_state = "rcs"
opacity = 0
density = 0
anchored = 0.0
flags = FPRINT | 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)
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--
/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 << "\red 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."
/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 << "\red You emag the RCS. Click on it to toggle between modes."
return
@@ -178,6 +178,68 @@
del(src)
/obj/structure/closet/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/rcs) && !src.opened)
var/obj/item/weapon/rcs/E = W
if(E.rcharges != 0)
if(E.mode == 0)
if(!E.teleporting)
var/list/L = list()
var/list/areaindex = list()
for(var/obj/machinery/telepad_cargo/R in world)
if(R.stage == 0)
var/turf/T = get_turf(R)
var/tmpname = T.loc.name
if(areaindex[tmpname])
tmpname = "[tmpname] ([++areaindex[tmpname]])"
else
areaindex[tmpname] = 1
L[tmpname] = R
var/desc = input("Please select a telepad.", "RCS") in L
E.pad = L[desc]
playsound(E.loc, 'sound/machines/click.ogg', 50, 1)
user << "\blue Teleporting [src.name]..."
E.teleporting = 1
sleep(50)
E.teleporting = 0
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
do_teleport(src, E.pad, 0)
E.rcharges--
if(E.rcharges != 1)
user << "\blue Teleport successful. [E.rcharges] charges left."
E.desc = "Use this to send crates and closets to cargo telepads. There are [E.rcharges] charges left."
return
else
user << "\blue Teleport successful. [E.rcharges] charge left."
E.desc = "Use this to send crates and closets to cargo telepads. There is [E.rcharges] charge left."
return
else
E.rand_x = rand(50,200)
E.rand_y = rand(50,200)
var/L = locate(E.rand_x, E.rand_y, 6)
playsound(E.loc, 'sound/machines/click.ogg', 50, 1)
user << "\blue Teleporting [src.name]..."
E.teleporting = 1
sleep(50)
E.teleporting = 0
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
do_teleport(src, L)
E.rcharges--
if(E.rcharges != 1)
user << "\blue Teleport successful. [E.rcharges] charges left."
E.desc = "Use this to send crates and closets to cargo telepads. There are [E.rcharges] charges left."
return
else
user << "\blue Teleport successful. [E.rcharges] charge left."
E.desc = "Use this to send crates and closets to cargo telepads. There is [E.rcharges] charge left."
return
else
user << "\red Out of charges."
return
if(src.opened)
if(istype(W, /obj/item/weapon/grab))
src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
@@ -393,6 +393,9 @@
return attack_hand(user)
/obj/structure/closet/crate/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/rcs) && !src.opened)
..()
return
if(opened)
if(isrobot(user))
return