From 364eaa318cc17a17c1afbb96aa0a799f66fc75d4 Mon Sep 17 00:00:00 2001 From: Giacomand Date: Mon, 11 Nov 2013 00:21:59 +0000 Subject: [PATCH 01/10] * Small bug fixes. * Added some code for offsetting the bearing, not used yet. * Runtime fixes. * Fixed teleporter teleporting AI eyes. --- code/modules/telesci/telesci_computer.dm | 33 +++++++++++++++--------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index 3dbd24ad0d8..82ad8c57bb6 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -11,6 +11,7 @@ var/datum/projectile_data/last_tele_data = null var/z_co = 1 var/power_off + var/rotation_off var/rotation = 0 var/angle = 45 @@ -120,7 +121,7 @@ if(telepad) var/truePower = Clamp(power + power_off, 1, 1000) - var/trueRotation = rotation + var/trueRotation = rotation// + rotation_off var/datum/projectile_data/proj_data = projectile_trajectory(telepad.x, telepad.y, trueRotation, angle, truePower) last_tele_data = proj_data @@ -141,6 +142,10 @@ 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 @@ -170,7 +175,14 @@ flick("pad-beam", telepad) playsound(telepad.loc, 'sound/weapons/emitter2.ogg', 25, 1) for(var/atom/movable/ROI in source) - if(!ismob(ROI) && ROI.anchored) continue + // if not a mob and is anchored, don't let through + if(!ismob(ROI)) + if(ROI.anchored) + continue + else + // If a mob, only let observers or living mobs to pass through + if(!isliving(ROI) && !isobserver(ROI)) + continue do_teleport(ROI, dest, 0) updateDialog() @@ -180,10 +192,6 @@ if(rotation == null || angle == null || z_co == null) temp_msg = "ERROR!
Set a angle, rotation and sector." return - if(rotation < 0 || rotation > 360) - telefail() - temp_msg = "ERROR!
Bearing is less than 0 or greater than 360." - return if(angle < 1 || angle > 90) telefail() temp_msg = "ERROR!
Elevation is less than 1 or greater than 90." @@ -207,14 +215,14 @@ 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(round(new_rot, 0.1), -9999, 9999) - rotation = SimplifyDegrees(rotation) + 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) + angle = Clamp(round(new_angle, 0.01), 1, 9999) if(href_list["setpower"]) var/pwr = href_list["setpower"] @@ -226,7 +234,7 @@ var/new_z = input("Please input desired sector.", name, z_co) as num if(..()) return - z_co = Clamp(new_z, 1, 10) + z_co = Clamp(round(new_z), 1, 10) if(href_list["send"]) sending = 1 @@ -244,5 +252,6 @@ updateDialog() /obj/machinery/computer/telescience/proc/recalibrate() - teles_left = rand(40, 50) - power_off = rand(-10, 10) \ No newline at end of file + teles_left = rand(30, 40) + power_off = rand(-10, 10) + rotation_off = rand(-10, 10) \ No newline at end of file From 799f39c7fd15d4f9a5a3b19624ed3dbd2e32abcb Mon Sep 17 00:00:00 2001 From: Giacomand Date: Mon, 11 Nov 2013 18:53:45 +0000 Subject: [PATCH 02/10] Fixes some bugs. Rotation offset is enabled. Angles use only one decimal place now. --- code/modules/telesci/telesci_computer.dm | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index 82ad8c57bb6..7a61bafd9da 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -96,9 +96,8 @@ /obj/machinery/computer/telescience/proc/sparks() 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.set_up(5, 1, get_turf(telepad)) s.start() else return @@ -121,7 +120,7 @@ if(telepad) var/truePower = Clamp(power + power_off, 1, 1000) - var/trueRotation = rotation// + rotation_off + var/trueRotation = rotation + rotation_off var/datum/projectile_data/proj_data = projectile_trajectory(telepad.x, telepad.y, trueRotation, angle, truePower) last_tele_data = proj_data @@ -154,24 +153,27 @@ use_power(power * 10) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - - s.set_up(5, 1, telepad) + s.set_up(5, 1, get_turf(telepad)) s.start() + temp_msg = "Teleport successful.
" if(teles_left < 10) temp_msg += "
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) @@ -222,7 +224,7 @@ var/new_angle = input("Please input desired elevation in degrees.", name, angle) as num if(..()) return - angle = Clamp(round(new_angle, 0.01), 1, 9999) + angle = Clamp(round(new_angle, 0.1), 1, 9999) if(href_list["setpower"]) var/pwr = href_list["setpower"] From d67c3704a5c430bfec370e8b31f0dab925e1cd55 Mon Sep 17 00:00:00 2001 From: Giacomand Date: Mon, 11 Nov 2013 21:18:35 +0000 Subject: [PATCH 03/10] * Added an angle offset, to make it even harder to use telescience. * Obfuscated the distance a bit. --- code/modules/telesci/telesci_computer.dm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index 7a61bafd9da..d9ea1afd957 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -12,6 +12,7 @@ var/z_co = 1 var/power_off var/rotation_off + var/angle_off var/rotation = 0 var/angle = 45 @@ -85,7 +86,7 @@ t += "No teleport data found." else t += "Source Location: ([last_tele_data.src_x], [last_tele_data.src_y])
" - t += "Distance: [last_tele_data.distance]m
" + t += "Distance: [last_tele_data.distance * 0.5]m
" t += "Time: [last_tele_data.time] secs
" t += "" @@ -121,8 +122,9 @@ 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, angle, truePower) + 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) @@ -255,5 +257,6 @@ /obj/machinery/computer/telescience/proc/recalibrate() teles_left = rand(30, 40) + angle_off = rand(-25, 25) power_off = rand(-10, 10) rotation_off = rand(-10, 10) \ No newline at end of file From 72b695e7c251f45b7e3c3ee115e5de5ab89831f7 Mon Sep 17 00:00:00 2001 From: Giacomand Date: Mon, 11 Nov 2013 21:21:29 +0000 Subject: [PATCH 04/10] * Rounded the distance and seconds. * Removed obfuscation. --- 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 d9ea1afd957..7c181c19b5b 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -86,7 +86,7 @@ t += "No teleport data found." else t += "Source Location: ([last_tele_data.src_x], [last_tele_data.src_y])
" - t += "Distance: [last_tele_data.distance * 0.5]m
" + t += "Distance: [round(last_tele_data.distance, 0.1)]m
" t += "Time: [last_tele_data.time] secs
" t += "" From 6aba9a096dcd21d1ce42c7d13d3ad6bd6a867d63 Mon Sep 17 00:00:00 2001 From: Giacomand Date: Mon, 11 Nov 2013 22:13:39 +0000 Subject: [PATCH 05/10] * Rounds the time. --- 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 7c181c19b5b..85c74b6120a 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -87,7 +87,7 @@ else t += "Source Location: ([last_tele_data.src_x], [last_tele_data.src_y])
" t += "Distance: [round(last_tele_data.distance, 0.1)]m
" - t += "Time: [last_tele_data.time] secs
" + t += "Time: [round(last_tele_data.time, 0.1)] secs
" t += "" var/datum/browser/popup = new(user, "telesci", name, 300, 500) From b8c031026cde825d1ff381e54f43f320233443f6 Mon Sep 17 00:00:00 2001 From: Giacomand Date: Tue, 12 Nov 2013 14:24:56 +0000 Subject: [PATCH 06/10] * Telescience now works on bluespace crystals, which are special crystals which unlock power settings from the telescience computer. * The telescience computer starts with 3 artificial crystals. * The crystals can be crushed to blink or you can throw it at someone to make them blink a short distance. * You cannot teleport the AI or any anchored mob (unless they are buckled to an office chair). * You can make the bluespace crystals from slimes or from research. --- code/game/gamemodes/blob/theblob.dm | 4 + code/modules/mob/camera/camera.dm | 1 + code/modules/reagents/Chemistry-Recipes.dm | 13 +++ code/modules/research/designs.dm | 10 +++ code/modules/telesci/bscrystal.dm | 39 +++++++++ code/modules/telesci/telesci_computer.dm | 91 ++++++++++++++++----- icons/obj/telescience.dmi | Bin 2080 -> 2171 bytes tgstation.dme | 1 + 8 files changed, 137 insertions(+), 22 deletions(-) create mode 100644 code/modules/telesci/bscrystal.dm diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index 0d1d50c8d56..cbc7cce5e78 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -142,6 +142,10 @@ update_icon() return 0 +/obj/effect/blob/Crossed(var/mob/living/L) + ..() + L.blob_act() + /obj/effect/blob/attackby(var/obj/item/weapon/W, var/mob/user) playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1) diff --git a/code/modules/mob/camera/camera.dm b/code/modules/mob/camera/camera.dm index 054fb163a4f..528e9222117 100644 --- a/code/modules/mob/camera/camera.dm +++ b/code/modules/mob/camera/camera.dm @@ -3,6 +3,7 @@ /mob/camera name = "camera mob" density = 0 + anchored = 1 status_flags = GODMODE // You can't damage it. mouse_opacity = 0 see_in_dark = 7 diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 50e14ee6d37..49038693074 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -1468,6 +1468,19 @@ datum sleep(20) M.client.screen -= blueeffect del(blueeffect) + slimecrystal + name = "Slime Crystal" + id = "m_crystal" + result = null + required_reagents = list("blood" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/bluespace + required_other = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + if(holder.my_atom) + var/obj/item/bluespace_crystal/BC = new(get_turf(holder.my_atom)) + BC.visible_message("The [BC] appears out of thin air!") //Cerulean diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index c6a2060150a..435480710dc 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1574,6 +1574,16 @@ datum/design/bag_holding reliability_base = 80 build_path = "/obj/item/weapon/storage/backpack/holding" +datum/design/bluespace_crystal + name = "Artificial Bluespace Crystal" + desc = "A small blue crystal with mystical properties." + id = "bluespace_crystal" + req_tech = list("bluespace" = 8, "materials" = 5) + build_type = PROTOLATHE + materials = list("$gold" = 1500, "$diamond" = 3000, "$plasma" = 1500) + reliability_base = 100 + build_path = "/obj/item/bluespace_crystal/artificial" + ///////////////////////////////////////// /////////////////HUDs//////////////////// ///////////////////////////////////////// diff --git a/code/modules/telesci/bscrystal.dm b/code/modules/telesci/bscrystal.dm new file mode 100644 index 00000000000..9a5183239c8 --- /dev/null +++ b/code/modules/telesci/bscrystal.dm @@ -0,0 +1,39 @@ +// 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=6" + +/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("[user] crushes the [src]!") + del(src) + +/obj/item/bluespace_crystal/proc/blink_mob(var/mob/living/L, var/brange = 7) + var/turf/T = get_turf(L) + var/turf/rand_turf = pick(range(L, brange) - T) + playsound(T, 'sound/effects/phasein.ogg', 100, 1) + do_teleport(L, rand_turf, 0) + +/obj/item/bluespace_crystal/throw_impact(atom/hit_atom) + ..() + if(isliving(hit_atom)) + blink_mob(hit_atom, 2) + 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" \ No newline at end of file diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index 85c74b6120a..58c6e698fd0 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -20,17 +20,32 @@ // Based on the power used var/teleport_cooldown = 0 - var/list/power_options = list(5, 10, 25, 50, 100) // + 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() - power = power_options[1] - initialize() + +/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() @@ -48,6 +63,18 @@ 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 << "There are not enough crystal ports." + return + user.drop_item() + crystals += W + W.loc = null + user.visible_message("[user] inserts a [W] into the [src]'s crystal port.") + else + ..() + /obj/machinery/computer/telescience/attack_ai(mob/user) src.attack_hand(user) @@ -66,11 +93,14 @@ t += "Set Power" t += "
" - for(var/pwr in power_options) - if(power == pwr) - t += "[pwr]" + for(var/i = 1; i <= power_options.len; i++) + if(crystals.len < i) + t += "[power_options[i]]" continue - t += "[pwr]" + if(power == power_options[i]) + t += "[power_options[i]]" + continue + t += "[power_options[i]]" t += "
" t += "Set Sector" @@ -78,7 +108,7 @@ t += "
Send" t += " Receive" - t += "
Recalibrate" + t += "
Recalibrate Crystals Eject Crystals" // Information about the last teleport t += "
" @@ -179,23 +209,29 @@ flick("pad-beam", telepad) playsound(telepad.loc, 'sound/weapons/emitter2.ogg', 25, 1) for(var/atom/movable/ROI in source) - // if not a mob and is anchored, don't let through - if(!ismob(ROI)) - if(ROI.anchored) - continue - else - // If a mob, only let observers or living mobs to pass through - if(!isliving(ROI) && !isobserver(ROI)) + // 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 continue do_teleport(ROI, dest, 0) updateDialog() -// TO DO: add projectile_trajectory to telesci - /obj/machinery/computer/telescience/proc/teleport(mob/user) if(rotation == null || angle == null || z_co == null) temp_msg = "ERROR!
Set a angle, rotation and sector." return + if(power <= 0) + telefail() + temp_msg = "ERROR!
No power selected!" + return if(angle < 1 || angle > 90) telefail() temp_msg = "ERROR!
Elevation is less than 1 or greater than 90." @@ -212,6 +248,12 @@ 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 @@ -229,10 +271,11 @@ angle = Clamp(round(new_angle, 0.1), 1, 9999) if(href_list["setpower"]) - var/pwr = href_list["setpower"] - pwr = text2num(pwr) - if(pwr != null && pwr in power_options) - power = pwr + 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 @@ -253,10 +296,14 @@ sparks() temp_msg = "NOTICE:
Calibration successful." + if(href_list["eject"]) + eject() + temp_msg = "NOTICE:
Bluespace crystals ejected." + updateDialog() /obj/machinery/computer/telescience/proc/recalibrate() teles_left = rand(30, 40) angle_off = rand(-25, 25) - power_off = rand(-10, 10) + power_off = rand(-4, 0) rotation_off = rand(-10, 10) \ No newline at end of file diff --git a/icons/obj/telescience.dmi b/icons/obj/telescience.dmi index 1f3344f2e489b37a9af7af606c3fbc67b99937b7..4e8251beac3fdf48bf7e083c7ec4e82cea642f1c 100644 GIT binary patch delta 1817 zcmV+!2j=*o5c?327Y@J(0{{R3WdfWv0003su_Y$~C&0kKK5zeKng5y0|5K^|0A~M~ zp4vhH0004WQchCn$AirQryFx>G zq(upTZ;K{Cgpj%HPG%-MO{1a-{&dCjbBj8A(JzRCt{2nu%81Mihp%v~^ok#A1oiCatoOvV-d-A*oYp z473dtT3R<72xu2w5lhvm_(^v)o@ZqXSnM#`R)eb9*<9X(A3x z{wWYkFCzvD4j!;9tpn4<9AG09l)6$(S0a-E6EScDqhs-pIs%h#ngWVRbYl~16a)Hu zjIIJR@pa8uhG}WmF%M5S1g4lqxdb-?R{Ad{Y?ok0Q%Dh^e;M25W%9Mg z}kw*J*fW&)KOfqxC{=~h&KE|LTq6RAj_O6s>=?+)k|sCPW~wyOR#lPv@te|}e` z-*cS%pgn;7z5{29`VW!zvHoQ`6mZ$*EqP0ie0KE26^VWq(I4pa@0T7uMCxPx%XC%( zPI(Df<$(@Yr1}h^&m#I9qGSC_bzXvBgxThZpA`BuqTfSw3(>Lu<+>4EV>rQ=>!uo* zY~5hjJa2iKi_6QN$G%IYi$co`e<8+7Ou8O-vMjw`7MS4;XfzoOwE?cH#I1UZ>#gDpG~0}((m=EQnCS|2t1jy6e+=kzs}`1@ z*XpAfXg_H`&R}5V{QU3>4*vR5Uw^a_c#>%Zg8aMUJ?aSg`HG{_!9al8KvTB}z(9c9 z0FT=Ck^DU9>i2v|eOSZ|cnUQ%i&zUR;ubuGTEmNYkbn29z9v7vgXmD-Vfs!=9~i)% zLYM*RQz*>8KlPq@3;qHef88Bre%_bn?;VNm4D$Dpf##1L_^784WGGPN@Inc(vzT-*No(AK+ks_20>0AgDiNK;+;3h;)7)W=_?Q z!_MP+kh+gG03UbQfS5v!j8mvJWFT999?#zk0}Zi=$2HIri#Tl{f1ZE$k^KBvdgLJE zFQZ!_LrRo?hnb$v=OeH~Hu9^QQFa z@6sC}2!bHW49lr#l8cki?$5h?FDtttMF%n_yWMW5)9H4*B{cx?XEvbC&*!c0cK5ix zr#67L-|n<~%Iq-ce?5>p8odJzAbL-!?{-D@S!qD%%J%U9S^qkNnBHS#GSJf-X!r0D zPzJ#6a1R-QUgi-{-v9&4&*!a!fdI7ur2T?{MZ5=3p*_tao@_>V3QaaJg@XKli46q# z|MD6r`xM#}i+Hc321@_SC_xYeK@bE%5ClOKNTKfsu0u!ifA59sy&m#@0Lj1SuJ?MG z>IeDvOabce5OxQ%j!?nx2eRt~K@bE%5ClOG1VIo4K@chS_xBGD4i1r0h3EH``r$9X zG7b)ZJLH?9K9*g^)8|-rTl?SVn(Xt7qvPLCPX9PQKK}FU_^-2Lxr4&r4={gngD;N$ z7Mz{2?MT(Yf26*l>G%IhpfE7O`TwJrj90Jv{nxMi{l2n|$>#9o8{_Ty`P-u77@wmz z#>KmL7e$9LJ}?3o=jSCh0F-+KfD54L7zlzO2!bF8f*=TjAkw^lUvvc7IQ{T%sU4ht zIJqpfgVU3f%S$p)Af=x|#(yPW#NeRh@e>3=5ClPd7gYQYcJIJT;N>|200000NkvXX Hu0mjfa`k|> delta 1762 zcmV<81|9kP5TFo{7Y?8Z0{{R3ZT6FI0003au_Y$~f4$V|2mk;80d!JMQvg8b*k%9# z0Ks}xSad{Xb7OL8aCB*JZU6vyoP|-#3WG2ZJSSff^s1$`_Sj2Niii3S(QGyNNJv7Z zf8WFwRI12ac88f^C-KQGy=OT|9vOat(p>c9O5(#2qk%J1+vOZ#R0FSS^If!|2JGlb z%EAI@f9GMuxYCw7Vf0kA12b%!5uc=aGJf#~jDv%}*g?&T000Hv zNklB)YYUHH!iLJw{i7nfO{TmSI|&baZEJYK{SkOUFT{>X+*UIeyE5HWv}I7fAR%J_tAS8RC^e@p0}3q9?C-*wZrzp!oT5SXI=m!iHrK6U@I z>4s6MR^);RxUy17oW}!Xfq!LH44HxOxl>uKMCEVPzvxq|Gi*mU0HCkgsVh-De6!bW z={gP1>zVtW&GYn^?u)3hGcW?v2K zCv~iUt!~%cDwAEW=50A!aCBLbs#~)|eKpe8B7G&M-+|+%dl&TeukY6Gx|^WfiRo5U zei1mlKIj&x_dWNXs{SgIPXrx* z{y?Qabeu<^J%;^}180i*PmuPp{$)B8aM|WSO)O zbXEdRc?nqMfeu%s`Wm9IBl-rSWBp5YUV>kQ+2)9!6#6QnKSXp3(XsyJx)EGsIKh|e zrW#mo-C)-|uU_Y3z3zGJyHvU;RA&f(F;-&P^|+I|^mZeB_%)h^k z<=;=@`FWq~uO|8V7c4*TPjn~Le{#IqE3Th7e)c?T{aXm=g#~Of-J8eKrp;pEzbUbAsTYetT-wOjRv54n2a4Z&a+CV&i|L!CC`MLDS zLB?N3k3y!DDE|&KLz|yRbw{e_&LsctBl-FH^!yFvoWIXMe&d$%_j!|l{yuN=&)?@w z>C@k(H$V^sL6jMmQ_&TWe!rv!ApXn-wE6kG^jKBpuPbHmY>gC2Ll0W14#P?1B-Y7PoaTk5id70JcX7Um_kARzr+TD z{C{~3lzj>f#3CM))IjNf86^mUAP9mW2!bGp0x9(Uz#?=c|6aI%J{%(N2ax=G?)q?; zseX`u&lI5k4qj)M6ejvL}5ClOG1VIo4K@bE%5CoCp^z`)X?CcyVRd{}1sh|Jy zE930^w{yNJ>SNhuJbjL3x3&L$uE{>Xz8L-f$De-oFy6i$kKer;kH^Y3mYef8?~M;vS09RwV}35) z8`mE{UKbt4{J;oYUtN{h08s7`0Iq?eV;~5EAP6Ghe`3$G9$@}B!2kdN07*qoM6N<$ Ef*1y3Gynhq diff --git a/tgstation.dme b/tgstation.dme index 9a976aadcd9..ff67b6447b3 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1176,6 +1176,7 @@ #include "code\modules\surgery\xenomorph_removal.dm" #include "code\modules\surgery\organs\helpers.dm" #include "code\modules\surgery\organs\organ.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" From 5043091b7202ca2a6e976357c53f9eb897119c0c Mon Sep 17 00:00:00 2001 From: Giacomand Date: Tue, 12 Nov 2013 18:36:30 +0000 Subject: [PATCH 07/10] * Lowered the origin and required tech for the bluespace crystals. * Commented out the distance value that you receive, making it harder when calculating. * Added materials to the origin tech (organic crystal only) and raised material required to make new bluespace crystals. --- code/modules/research/designs.dm | 2 +- code/modules/telesci/bscrystal.dm | 2 +- code/modules/telesci/telesci_computer.dm | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 435480710dc..6177fbde9f9 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1578,7 +1578,7 @@ datum/design/bluespace_crystal name = "Artificial Bluespace Crystal" desc = "A small blue crystal with mystical properties." id = "bluespace_crystal" - req_tech = list("bluespace" = 8, "materials" = 5) + req_tech = list("bluespace" = 5, "materials" = 7) build_type = PROTOLATHE materials = list("$gold" = 1500, "$diamond" = 3000, "$plasma" = 1500) reliability_base = 100 diff --git a/code/modules/telesci/bscrystal.dm b/code/modules/telesci/bscrystal.dm index 9a5183239c8..f8f4d4e3752 100644 --- a/code/modules/telesci/bscrystal.dm +++ b/code/modules/telesci/bscrystal.dm @@ -6,7 +6,7 @@ icon = 'icons/obj/telescience.dmi' icon_state = "bluespace_crystal" w_class = 1 - origin_tech = "bluespace=6" + origin_tech = "bluespace=4;materials=3" /obj/item/bluespace_crystal/New() ..() diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index 58c6e698fd0..4b5ca5587d7 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -116,7 +116,7 @@ t += "No teleport data found." else t += "Source Location: ([last_tele_data.src_x], [last_tele_data.src_y])
" - t += "Distance: [round(last_tele_data.distance, 0.1)]m
" + //t += "Distance: [round(last_tele_data.distance, 0.1)]m
" t += "Time: [round(last_tele_data.time, 0.1)] secs
" t += "
" From 05f211f0c398e2bd1955dd704d80a2f145b63da8 Mon Sep 17 00:00:00 2001 From: Giacomand Date: Tue, 12 Nov 2013 19:09:56 +0000 Subject: [PATCH 08/10] * It is now impossible to teleport to the away missions, through telescience. --- code/modules/telesci/telesci_computer.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index 4b5ca5587d7..d699977da45 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -236,9 +236,9 @@ telefail() temp_msg = "ERROR!
Elevation is less than 1 or greater than 90." return - if(z_co == 2 || z_co < 1 || z_co > 7) + if(z_co == 2 || z_co < 1 || z_co > 6) telefail() - temp_msg = "ERROR! Sector is less than 1,
greater than 7, or equal to 2." + temp_msg = "ERROR! Sector is less than 1,
greater than 6, or equal to 2." return if(teles_left > 0) doteleport(user) From 0824bbd5990ff2024679340166e2140c32cc4de4 Mon Sep 17 00:00:00 2001 From: Giacomand Date: Tue, 12 Nov 2013 19:49:36 +0000 Subject: [PATCH 09/10] * Tidied up the code. * Changed some code to use the teleport datum features. * Fixed a broken check in the teleport datum. --- code/datums/helper_datums/teleport.dm | 2 +- code/modules/telesci/bscrystal.dm | 13 ++++++------- code/modules/telesci/telesci_computer.dm | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 229acc1683e..f68de313496 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -180,6 +180,6 @@ return 0 - if(destination.z > 7) //Away mission z-levels + if(destination.z == 7) //Away mission z-levels return 0 return 1 diff --git a/code/modules/telesci/bscrystal.dm b/code/modules/telesci/bscrystal.dm index f8f4d4e3752..d9e968f4daf 100644 --- a/code/modules/telesci/bscrystal.dm +++ b/code/modules/telesci/bscrystal.dm @@ -7,6 +7,7 @@ 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() ..() @@ -19,16 +20,13 @@ user.visible_message("[user] crushes the [src]!") del(src) -/obj/item/bluespace_crystal/proc/blink_mob(var/mob/living/L, var/brange = 7) - var/turf/T = get_turf(L) - var/turf/rand_turf = pick(range(L, brange) - T) - playsound(T, 'sound/effects/phasein.ogg', 100, 1) - do_teleport(L, rand_turf, 0) +/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, 2) + blink_mob(hit_atom) del(src) // Artifical bluespace crystal, doesn't give you much research. @@ -36,4 +34,5 @@ /obj/item/bluespace_crystal/artificial name = "artificial bluespace crystal" desc = "An artificially made bluespace crystal, it looks delicate." - origin_tech = "bluespace=2" \ No newline at end of file + origin_tech = "bluespace=2" + blink_range = 4 // Not as good as the organic stuff! \ No newline at end of file diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index d699977da45..215b3d1a822 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -221,7 +221,7 @@ continue else continue - do_teleport(ROI, dest, 0) + do_teleport(ROI, dest) updateDialog() /obj/machinery/computer/telescience/proc/teleport(mob/user) From 79cc8eeca323ee4ddd436512e28841f066dcef35 Mon Sep 17 00:00:00 2001 From: Giacomand Date: Wed, 13 Nov 2013 20:06:31 +0000 Subject: [PATCH 10/10] * Ghosts can now be teleported again! --- 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 215b3d1a822..85232a41068 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -219,7 +219,7 @@ continue else continue - else + else if(!isobserver(ROI)) continue do_teleport(ROI, dest) updateDialog()