From fae9c63ccf12654201247a09e472468f7ab9d82c Mon Sep 17 00:00:00 2001 From: atermonera Date: Fri, 9 Feb 2018 16:58:27 -0800 Subject: [PATCH] GPS coordinates and POI names are obfuscated --- code/game/objects/items/devices/gps.dm | 90 +++++++++++++++---- html/changelogs/Atermonera - gps_tweaks.yml | 6 ++ maps/southern_cross/southern_cross_defines.dm | 6 +- .../surface_submaps/mountains/crashed_ufo.dmm | 2 +- .../surface_submaps/wilderness/DJOutpost1.dmm | 43 ++++----- maps/~map_system/maps.dm | 4 + 6 files changed, 110 insertions(+), 41 deletions(-) create mode 100644 html/changelogs/Atermonera - gps_tweaks.yml diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm index e4932ff0d2..9cfb46a2e0 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -80,7 +80,7 @@ var/list/GPS_list = list() var/turf/curr = get_turf(src) var/area/my_area = get_area(src) - dat += "Current location: [my_area.name] ([curr.x], [curr.y], [curr.z])" + dat += "Current location: [my_area.name] ([curr.x], [curr.y], [using_map.get_zlevel_name(curr.z)])" dat += "[hide_signal ? "Tagged" : "Broadcasting"] as '[gps_tag]'. \[Change Tag\] \ \[Toggle Scan Range\] \ [can_hide_signal ? "\[Toggle Signal Visibility\]":""]" @@ -103,16 +103,17 @@ var/list/GPS_list = list() var/area_name = their_area.name if(istype(their_area, /area/submap)) area_name = "Unknown Area" // Avoid spoilers. - var/coord = "[T.x], [T.y], [T.z]" - var/degrees = round(Get_Angle(curr, T)) + var/Z_name = using_map.get_zlevel_name(T.z) var/direction = uppertext(dir2text(get_dir(curr, T))) var/distance = get_dist(curr, T) var/local = curr.z == T.z ? TRUE : FALSE if(!direction) direction = "CENTER" - degrees = "N/A" - signals += " [G.gps_tag]: [area_name] ([coord]) [local ? "Dist: [distance]m Dir: [degrees]° ([direction])":""]" + if(istype(T, /obj/item/device/gps/internal/poi)) + signals += " Unidentified Signal: [area_name] [local ? "Dist: [round(distance, 10)]m [direction])" : "in \the [Z_name]"]" + else + signals += " [G.gps_tag]: [area_name] [local ? "Dist: [round(distance, 10)]m [direction])" : "in \the [Z_name]"]" if(signals.len) dat += "Detected signals;" @@ -179,15 +180,6 @@ var/list/GPS_list = list() /obj/item/device/gps/explorer/on tracking = TRUE -/obj/item/device/gps/syndie - icon_state = "gps-syndie" - gps_tag = "NULL" - desc = "A positioning system that has extended range and can detect other GPS device signals without revealing its own. How that works is best left a mystery. Alt+click to toggle power." - origin_tech = list(TECH_MATERIAL = 2, TECH_BLUESPACE = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2) - long_range = TRUE - hide_signal = TRUE - can_hide_signal = TRUE - /obj/item/device/gps/robot icon_state = "gps-b" gps_tag = "SYNTH0" @@ -207,6 +199,72 @@ var/list/GPS_list = list() gps_tag = "NT_BASE" desc = "A homing signal from NanoTrasen's outpost." -/obj/item/device/gps/internal/alien_vessel +/obj/item/device/gps/internal/poi gps_tag = "Mysterious Signal" - desc = "A signal that seems forboding." \ No newline at end of file + desc = "A signal that seems forboding." + +/obj/item/device/gps/syndie + icon_state = "gps-syndie" + gps_tag = "NULL" + desc = "A positioning system that has extended range and can detect other GPS device signals without revealing its own. How that works is best left a mystery. Alt+click to toggle power." + origin_tech = list(TECH_MATERIAL = 2, TECH_BLUESPACE = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2) + long_range = TRUE + hide_signal = TRUE + can_hide_signal = TRUE + +/obj/item/device/gps/syndie/display(mob/user) + if(!tracking) + to_chat(user, "The device is off. Alt-click it to turn it on.") + return + if(emped) + to_chat(user, "It's busted!") + return + + var/list/dat = list() + + var/turf/curr = get_turf(src) + var/area/my_area = get_area(src) + dat += "Current location: [my_area.name] ([curr.x], [curr.y], [using_map.get_zlevel_name(curr.z)])" + dat += "[hide_signal ? "Tagged" : "Broadcasting"] as '[gps_tag]'. \[Change Tag\] \ + \[Toggle Scan Range\] \ + [can_hide_signal ? "\[Toggle Signal Visibility\]":""]" + + var/list/signals = list() + + for(var/gps in GPS_list) + var/obj/item/device/gps/G = gps + if(G.emped || !G.tracking || G.hide_signal || G == src) // Their GPS isn't on or functional. + continue + var/turf/T = get_turf(G) + var/z_level_detection = using_map.get_map_levels(curr.z, long_range) + + if(local_mode && T.z != curr.z) // Only care about the current z-level. + continue + else if(!(T.z in z_level_detection)) // Too far away. + continue + + var/area/their_area = get_area(G) + var/area_name = their_area.name + if(istype(their_area, /area/submap)) + area_name = "Unknown Area" // Avoid spoilers. + var/Z_name = using_map.get_zlevel_name(T.z) + var/coord = "[T.x], [T.y], [Z_name]" + var/degrees = round(Get_Angle(curr, T)) + var/direction = uppertext(dir2text(get_dir(curr, T))) + var/distance = get_dist(curr, T) + var/local = curr.z == T.z ? TRUE : FALSE + if(!direction) + direction = "CENTER" + degrees = "N/A" + + signals += " [G.gps_tag]: [area_name] ([coord]) [local ? "Dist: [distance]m Dir: [degrees]° ([direction])":""]" + + if(signals.len) + dat += "Detected signals;" + for(var/line in signals) + dat += line + else + dat += "No other signals detected." + + var/result = dat.Join("
") + to_chat(user, result) \ No newline at end of file diff --git a/html/changelogs/Atermonera - gps_tweaks.yml b/html/changelogs/Atermonera - gps_tweaks.yml new file mode 100644 index 0000000000..1c57e76d90 --- /dev/null +++ b/html/changelogs/Atermonera - gps_tweaks.yml @@ -0,0 +1,6 @@ +author: Atermonera + +delete-after: True +changes: + - tweak: "GPS units won't report the exact location of other GPS units, just range and approximate direction" + - tweak: "POI gps units won't give any information about the POI, merely its location" diff --git a/maps/southern_cross/southern_cross_defines.dm b/maps/southern_cross/southern_cross_defines.dm index a53dd09ef2..8a6655ff54 100644 --- a/maps/southern_cross/southern_cross_defines.dm +++ b/maps/southern_cross/southern_cross_defines.dm @@ -134,19 +134,19 @@ /datum/map_z_level/southern_cross/surface z = Z_LEVEL_SURFACE - name = "Planet" + name = "Plains" flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_SEALED base_turf = /turf/simulated/floor/outdoors/rocks /datum/map_z_level/southern_cross/surface_mine z = Z_LEVEL_SURFACE_MINE - name = "Planet" + name = "Mountains" flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_SEALED base_turf = /turf/simulated/floor/outdoors/rocks /datum/map_z_level/southern_cross/surface_wild z = Z_LEVEL_SURFACE_WILD - name = "Wild" + name = "Wilderness" flags = MAP_LEVEL_PLAYER|MAP_LEVEL_SEALED base_turf = /turf/simulated/floor/outdoors/rocks diff --git a/maps/submaps/surface_submaps/mountains/crashed_ufo.dmm b/maps/submaps/surface_submaps/mountains/crashed_ufo.dmm index e977d9ba4d..46ea1b90b9 100644 --- a/maps/submaps/surface_submaps/mountains/crashed_ufo.dmm +++ b/maps/submaps/surface_submaps/mountains/crashed_ufo.dmm @@ -37,7 +37,7 @@ "aK" = (/obj/item/weapon/crowbar/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) "aL" = (/obj/item/stack/cable_coil/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) "aM" = (/obj/structure/table/alien,/obj/item/prop/alien/junk,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) -"aN" = (/obj/structure/table/alien,/obj/item/weapon/paper/alien{icon_state = "alienpaper_words"; info = "\[i]This tablet has a large collection of symbols that you've never seen before outside this ship. You have no hope of figuring out what any of the mean...\[/i]"},/obj/item/device/gps/internal/alien_vessel,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) +"aN" = (/obj/structure/table/alien,/obj/item/weapon/paper/alien{icon_state = "alienpaper_words"; info = "\[i]This tablet has a large collection of symbols that you've never seen before outside this ship. You have no hope of figuring out what any of the mean...\[/i]"},/obj/item/device/gps/internal/poi,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) "aO" = (/obj/structure/prop/alien/computer{tag = "icon-console-c (EAST)"; icon_state = "console-c"; dir = 4},/turf/simulated/shuttle/floor/alien,/area/submap/cave/crashed_ufo) "aP" = (/obj/structure/table/alien,/obj/item/clothing/accessory/medal/dungeon/alien_ufo,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) "aQ" = (/obj/structure/table/alien,/obj/item/weapon/weldingtool/alien,/turf/simulated/shuttle/floor/alienplating,/area/submap/cave/crashed_ufo) diff --git a/maps/submaps/surface_submaps/wilderness/DJOutpost1.dmm b/maps/submaps/surface_submaps/wilderness/DJOutpost1.dmm index 51d75e5596..134247d299 100644 --- a/maps/submaps/surface_submaps/wilderness/DJOutpost1.dmm +++ b/maps/submaps/surface_submaps/wilderness/DJOutpost1.dmm @@ -26,20 +26,21 @@ "z" = (/obj/structure/table/steel_reinforced,/obj/item/device/radio/intercom/syndicate{desc = "Talk through this."; name = "station intercom (General)"},/obj/item/device/multitool,/turf/simulated/floor/wood,/area/submap/DJOutpost1) "A" = (/obj/structure/table/steel_reinforced,/obj/item/device/radio,/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/hyper; dir = 4; environ = 1; equipment = 1; lighting = 1; locked = 0; name = "Sif Free Radio APC"; operating = 0; pixel_x = 24},/obj/structure/cable/yellow,/turf/simulated/floor/wood,/area/submap/DJOutpost1) "B" = (/obj/effect/overlay/snow/floor,/obj/machinery/power/port_gen/pacman,/obj/structure/cable/yellow,/turf/simulated/floor{outdoors = 1},/area/submap/DJOutpost1) -"C" = (/obj/machinery/biogenerator,/turf/simulated/floor/wood,/area/submap/DJOutpost1) -"D" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/unajerky,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/random_multi/single_item/sfr_headset,/turf/simulated/floor/wood,/area/submap/DJOutpost1) -"E" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/machinery/seed_extractor,/turf/simulated/floor/wood,/area/submap/DJOutpost1) -"F" = (/obj/structure/bed/chair/wood{tag = "icon-wooden_chair (NORTH)"; icon_state = "wooden_chair"; dir = 1},/turf/simulated/floor/wood,/area/submap/DJOutpost1) -"G" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/wood,/area/submap/DJOutpost1) -"H" = (/obj/structure/table/woodentable,/obj/item/weapon/material/knife/machete/hatchet,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/material/minihoe,/obj/item/device/analyzer/plant_analyzer,/obj/random_multi/single_item/sfr_headset,/turf/simulated/floor/wood,/area/submap/DJOutpost1) -"I" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/wood,/area/submap/DJOutpost1) -"J" = (/obj/structure/table/rack,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/random_multi/single_item/sfr_headset,/turf/simulated/floor/wood,/area/submap/DJOutpost1) -"K" = (/obj/machinery/light/flamp,/turf/simulated/floor/wood,/area/submap/DJOutpost1) -"L" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 15; tag = "icon-sink (EAST)"},/turf/simulated/floor/wood,/area/submap/DJOutpost1) -"M" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/clown,/turf/simulated/floor/wood,/area/submap/DJOutpost1) -"N" = (/obj/structure/table/rack,/obj/item/ammo_magazine/clip/c545/hunter,/obj/item/weapon/gun/projectile/shotgun/pump/rifle,/turf/simulated/floor/wood,/area/submap/DJOutpost1) -"O" = (/obj/structure/table/rack,/obj/item/device/gps/on{gps_tag = "Sif Free Radio"},/obj/item/device/flashlight/lantern,/turf/simulated/floor/wood,/area/submap/DJOutpost1) -"P" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/wood,/area/submap/DJOutpost1) +"C" = (/obj/machinery/door/airlock/glass,/obj/item/device/gps/internal/poi,/turf/simulated/floor/wood,/area/submap/DJOutpost1) +"D" = (/obj/machinery/biogenerator,/turf/simulated/floor/wood,/area/submap/DJOutpost1) +"E" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/unajerky,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/random_multi/single_item/sfr_headset,/turf/simulated/floor/wood,/area/submap/DJOutpost1) +"F" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/machinery/seed_extractor,/turf/simulated/floor/wood,/area/submap/DJOutpost1) +"G" = (/obj/structure/bed/chair/wood{tag = "icon-wooden_chair (NORTH)"; icon_state = "wooden_chair"; dir = 1},/turf/simulated/floor/wood,/area/submap/DJOutpost1) +"H" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/wood,/area/submap/DJOutpost1) +"I" = (/obj/structure/table/woodentable,/obj/item/weapon/material/knife/machete/hatchet,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/material/minihoe,/obj/item/device/analyzer/plant_analyzer,/obj/random_multi/single_item/sfr_headset,/turf/simulated/floor/wood,/area/submap/DJOutpost1) +"J" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/wood,/area/submap/DJOutpost1) +"K" = (/obj/structure/table/rack,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/random_multi/single_item/sfr_headset,/turf/simulated/floor/wood,/area/submap/DJOutpost1) +"L" = (/obj/machinery/light/flamp,/turf/simulated/floor/wood,/area/submap/DJOutpost1) +"M" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 15; tag = "icon-sink (EAST)"},/turf/simulated/floor/wood,/area/submap/DJOutpost1) +"N" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/clown,/turf/simulated/floor/wood,/area/submap/DJOutpost1) +"O" = (/obj/structure/table/rack,/obj/item/ammo_magazine/clip/c545/hunter,/obj/item/weapon/gun/projectile/shotgun/pump/rifle,/turf/simulated/floor/wood,/area/submap/DJOutpost1) +"P" = (/obj/structure/table/rack,/obj/item/device/flashlight/lantern,/obj/item/device/gps{gps_tag = "Sif Free Radio"},/turf/simulated/floor/wood,/area/submap/DJOutpost1) +"Q" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/wood,/area/submap/DJOutpost1) (1,1,1) = {" aaaaaaaaaaaaaaaa @@ -49,12 +50,12 @@ abbehebeeeeibbaa adehjekeeelemnoa abpeeqbeeelrsbta abuvewbeexyzAbBa -abbbbbbkbbbbbbaa -abpeeeeeeeeeCbaa -abDeeeeeeeeeEbaa -adFeebbGbbeeHdaa -abbIebJeKbeLbbaa -aabbMbNeObPbbaaa -aaabdbbGbbdbaaaa +abbbbbbCbbbbbbaa +abpeeeeeeeeeDbaa +abEeeeeeeeeeFbaa +adGeebbHbbeeIdaa +abbJebKeLbeMbbaa +aabbNbOePbQbbaaa +aaabdbbHbbdbaaaa aaaaaaaaaaaaaaaa "} diff --git a/maps/~map_system/maps.dm b/maps/~map_system/maps.dm index 986ade2162..8b4a4ab8ab 100644 --- a/maps/~map_system/maps.dm +++ b/maps/~map_system/maps.dm @@ -142,6 +142,10 @@ var/list/all_maps = list() else return list() +/datum/map/proc/get_zlevel_name(var/index) + var/datum/map_z_level/Z = zlevels["[index]"] + return Z.name + // Another way to setup the map datum that can be convenient. Just declare all your zlevels as subtypes of a common // subtype of /datum/map_z_level and set zlevel_datum_type on /datum/map to have the lists auto-initialized.