diff --git a/1Item_list.dmm b/1Item_list.dmm
index 5f16926b14..478e57ac4d 100644
--- a/1Item_list.dmm
+++ b/1Item_list.dmm
@@ -79445,12 +79445,6 @@
icon_state = "vault"
},
/area/survivalpod)
-"xqI" = (
-/obj/item/gps/advanced,
-/turf/simulated/fitness{
- icon_state = "vault"
- },
-/area/survivalpod)
"xqJ" = (
/obj/item/clothing/under/suit_jacket/female/fluff/asuna,
/turf/simulated/fitness{
@@ -112128,7 +112122,7 @@ rKJ
xKG
pGN
gpu
-xqI
+tHP
cKf
mnp
uJi
diff --git a/1mapping_palette.dmm b/1mapping_palette.dmm
index 708de292cf..caae043071 100644
--- a/1mapping_palette.dmm
+++ b/1mapping_palette.dmm
@@ -9406,7 +9406,7 @@
/obj/item/paper_bin,
/obj/item/pen/fountain,
/obj/item/pen/chameleon,
-/obj/item/gps/advanced/science,
+/obj/item/gps/science,
/obj/machinery/button/remote/blast_door{
id = "estrella_blast";
name = "remote blast shielding control";
@@ -10920,7 +10920,7 @@
/area/space)
"hAE" = (
/obj/structure/table/reinforced,
-/obj/item/gps/advanced/science,
+/obj/item/gps/science,
/obj/item/reagent_containers/spray/cleaner{
desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'";
name = "Chemistry Cleaner"
diff --git a/code/game/objects/items/devices/communicator/helper.dm b/code/game/objects/items/devices/communicator/helper.dm
index e73075932c..bc27b7acb2 100644
--- a/code/game/objects/items/devices/communicator/helper.dm
+++ b/code/game/objects/items/devices/communicator/helper.dm
@@ -301,9 +301,9 @@
// The contents of the three lists are inherently related, so separating them into different procs would be largely redundant
/obj/item/commcard/proc/get_GPS_lists()
// GPS Access
- var/intgps[0] // Gps devices within the commcard -- Allow tag edits, turning on/off, etc
- var/extgps[0] // Gps devices not inside the commcard -- Print locations if a gps is on
- var/stagps[0] // Gps net status, location, whether it's on, if it's got long range
+ var/list/intgps = list() // Gps devices within the commcard -- Allow tag edits, turning on/off, etc
+ var/list/extgps = list() // Gps devices not inside the commcard -- Print locations if a gps is on
+ var/list/stagps = list() // Gps net status, location, whether it's on, if it's got long range
var/obj/item/gps/cumulative = new(src)
cumulative.tracking = FALSE
cumulative.local_mode = TRUE // Won't detect long-range signals automatically
@@ -333,21 +333,48 @@
G.tracking = FALSE // Disable the internal gps units so they don't show up in the report
toggled_gps += G
- var/list/remote_gps = cumulative.display_list() // Fetch information for all units except the ones inside of this device
-
for(var/obj/item/gps/G in toggled_gps) // Reenable any internal GPS units
G.tracking = TRUE
stagps["enabled"] = cumulative.tracking
stagps["long_range_en"] = (cumulative.long_range && !cumulative.local_mode)
- stagps["my_area_name"] = remote_gps["my_area_name"]
- stagps["curr_x"] = remote_gps["curr_x"]
- stagps["curr_y"] = remote_gps["curr_y"]
- stagps["curr_z"] = remote_gps["curr_z"]
- stagps["curr_z_name"] = remote_gps["curr_z_name"]
+ var/turf/curr = get_turf(cumulative)
+ var/area/my_area = get_area(cumulative)
+ stagps["my_area_name"] = strip_improper(my_area.name)
+ stagps["curr_x"] = curr.x
+ stagps["curr_y"] = curr.y
+ stagps["curr_z"] = curr.z
+ stagps["curr_z_name"] = strip_improper(using_map.get_zlevel_name(curr.z))
- extgps = remote_gps["gps_list"] // Compiled by the GPS
+ var/list/gps_list = list()
+ var/z_level_det = using_map.get_map_levels(curr.z, cumulative.long_range)
+ for(var/obj/item/gps/G in GLOB.GPS_list - cumulative)
+
+ if(!cumulative.can_track(G, z_level_det))
+ continue
+
+ var/list/gps_data = list()
+ gps_data["ref"] = G
+ gps_data["gps_tag"] = G.gps_tag
+
+ var/area/A = get_area(G)
+ gps_data["area_name"] = strip_improper(A.get_name())
+
+ var/turf/T = get_turf(G)
+ gps_data["z_name"] = strip_improper(using_map.get_zlevel_name(T.z))
+ gps_data["direction"] = get_adir(curr, T)
+ gps_data["degrees"] = round(Get_Angle(curr,T))
+ gps_data["distX"] = T.x - curr.x
+ gps_data["distY"] = T.y - curr.y
+ gps_data["distance"] = get_dist(curr, T)
+ gps_data["local"] = (curr.z == T.z)
+ gps_data["x"] = T.x
+ gps_data["y"] = T.y
+
+ UNTYPED_LIST_ADD(gps_list, gps_data)
+
+ extgps = gps_list // Compiled by the GPS
qdel(cumulative) // Don't want spare GPS units building up in the contents
diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm
index 7d32631492..a2c9e9ccc2 100644
--- a/code/game/objects/items/devices/gps.dm
+++ b/code/game/objects/items/devices/gps.dm
@@ -23,6 +23,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
var/list/tracking_devices
var/list/showing_tracked_names
var/obj/compass_holder/compass
+ var/theme
pickup_sound = 'sound/items/pickup/device.ogg'
drop_sound = 'sound/items/drop/device.ogg'
@@ -91,7 +92,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
return PROCESS_KILL
update_holder()
if(holder)
- update_compass(TRUE)
+ update_compass(src, TRUE)
/obj/item/gps/Destroy()
STOP_PROCESSING(SSobj, src)
@@ -115,7 +116,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
reachable_z_levels = reachable_z_levels || using_map.get_map_levels(origin.z, long_range)
return (target.z in reachable_z_levels)
-/obj/item/gps/proc/update_compass(var/update_compass_icon)
+/obj/item/gps/proc/update_compass(atom/movable/source, var/update_compass_icon)
SIGNAL_HANDLER
compass.hide_waypoints(FALSE)
var/turf/my_turf = get_turf(src)
@@ -157,10 +158,11 @@ GLOBAL_LIST_EMPTY(GPS_list)
if(!is_in_processing_list)
is_in_processing_list = TRUE
START_PROCESSING(SSobj, src)
+ update_compass(src, TRUE)
else
is_in_processing_list = FALSE
STOP_PROCESSING(SSobj, src)
- update_compass()
+ update_compass(src)
update_holder()
update_icon()
@@ -190,173 +192,149 @@ GLOBAL_LIST_EMPTY(GPS_list)
return TRUE
if(special_handling)
return FALSE
- display(user)
+
+ tgui_interact(user)
+
+/obj/item/gps/tgui_state(mob/user)
+ return GLOB.tgui_inventory_state
+
+/obj/item/gps/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui, custom_state)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "Gps", name)
+ ui.open()
+
+/obj/item/gps/tgui_static_data(mob/user)
+ . = ..()
+ var/robot_theme
+ if(isrobot(loc))
+ var/mob/living/silicon/robot/robot_owner = loc
+ robot_theme = robot_owner.get_ui_theme()
+ .["theme"] = theme || robot_theme
// Compiles all the data not available directly from the GPS
// Like the positions and directions to all other GPS units
-/obj/item/gps/proc/display_list()
- var/list/dat = list()
+/obj/item/gps/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
var/turf/curr = get_turf(src)
var/area/my_area = get_area(src)
- dat["my_area_name"] = strip_improper(my_area.name)
- dat["curr_x"] = curr.x
- dat["curr_y"] = curr.y
- dat["curr_z"] = curr.z
- dat["curr_z_name"] = strip_improper(using_map.get_zlevel_name(curr.z))
- dat["z_level_detection"] = using_map.get_map_levels(curr.z, long_range)
+ var/list/data = list(
+ "currentArea" = strip_improper(my_area.name),
+ "power" = tracking,
+ "tag" = gps_tag,
+ "localMode" = local_mode,
+ "currentCoords" = "[curr.x], [curr.y], [curr.z]",
+ "currentZName" = strip_improper(using_map.get_zlevel_name(curr.z)),
+ "canHide" = can_hide_signal,
+ "isHidden" = hide_signal
+ )
+ var/z_level_det = using_map.get_map_levels(curr.z, long_range)
var/list/gps_list = list()
- for(var/obj/item/gps/G in GLOB.GPS_list - src)
+ for(var/obj/item/gps/current_gps in GLOB.GPS_list - src)
- if(!can_track(G, dat["z_level_detection"]))
+ if(!can_track(current_gps, z_level_det))
continue
- var/gps_data[0]
- gps_data["ref"] = G
- gps_data["gps_tag"] = G.gps_tag
+ var/area/gps_area = get_area(current_gps)
+ var/turf/gps_turf = get_turf(current_gps)
- var/area/A = get_area(G)
- gps_data["area_name"] = strip_improper(A.get_name())
+ var/is_local = (curr.z == gps_turf.z)
+ var/dist = get_dist(curr, gps_turf)
+ var/is_poi = istype(current_gps, /obj/item/gps/internal/poi)
- var/turf/T = get_turf(G)
- gps_data["z_name"] = strip_improper(using_map.get_zlevel_name(T.z))
- gps_data["direction"] = get_adir(curr, T)
- gps_data["degrees"] = round(Get_Angle(curr,T))
- gps_data["distX"] = T.x - curr.x
- gps_data["distY"] = T.y - curr.y
- gps_data["distance"] = get_dist(curr, T)
- gps_data["local"] = (curr.z == T.z)
- gps_data["x"] = T.x
- gps_data["y"] = T.y
+ if(is_poi && is_local)
+ dist = round(dist, 10)
- gps_list[++gps_list.len] = gps_data
+ var/list/gps_data = list(
+ "ref" = "\ref[current_gps]",
+ "gpsTag" = current_gps.gps_tag,
+ "areaName" = strip_improper(gps_area.get_name()),
+ "zName" = strip_improper(using_map.get_zlevel_name(gps_turf.z)),
+ "local" = is_local,
+ "trackingColor" = LAZYACCESS(tracking_devices, "\ref[current_gps]"),
+ "trackingName" = LAZYACCESS(showing_tracked_names, "\ref[current_gps]"),
+ )
- dat["gps_list"] = gps_list
+ if(!is_poi || is_local)
+ gps_data["degrees"] = round(Get_Angle(curr, gps_turf))
+ gps_data["coords"] = "[gps_turf.x], [gps_turf.y], [gps_turf.z]"
+ gps_data["dist"] = dist
- return dat
+ UNTYPED_LIST_ADD(gps_list, gps_data)
-/obj/item/gps/proc/display(mob/user)
+ data["signals"] = gps_list
- if(emped)
- to_chat(user, span_warning("It's busted!"))
+ return data
+
+/obj/item/gps/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
+ . = ..()
+ if(.)
return
- var/list/dat = list()
- var/list/gps_data = display_list()
-
- dat += "
"
- if(!tracking)
- dat += " | \[Switch On\]
"
- else
- dat += " | \[Switch Off\]
"
- dat += "| Current location | [gps_data["my_area_name"]] | ([gps_data["curr_x"]], [gps_data["curr_y"]], [gps_data["curr_z_name"]]) |
"
- dat += "| [hide_signal ? "Tagged" : "Broadcasting"] as '[gps_tag]'. | "
- dat += "\[Change Tag\]\[Toggle Scan Range\][can_hide_signal ? "\[Toggle Signal Visibility\]":""] |
"
-
- var/list/gps_list = gps_data["gps_list"]
- if(gps_list.len)
- dat += "| Detected signals |
"
- for(var/gps in gps_data["gps_list"])
- dat += ""
- var/gps_ref = "\ref[gps["ref"]]"
- dat += "| [gps["gps_tag"]] | [gps["area_name"]] | "
-
- if(istype(gps_data["ref"], /obj/item/gps/internal/poi))
- dat += "[gps["local"] ? "[gps["direction"]] Dist: [round(gps["distance"], 10)]m" : "[gps["z_name"]]"] | "
- else
- dat += "([gps["x"]], [gps["y"]], [gps["z_name"]]) | "
-
- if(gps["local"])
- dat += "[gps["distance"]]m | [gps["direction"]] | "
- else
- dat += "Non-local signal. | "
-
- if(LAZYACCESS(tracking_devices, gps_ref))
- dat += "\[Stop Tracking\] \[Colour [color_square(hex = LAZYACCESS(tracking_devices, gps_ref))]\] Show/Hide Label | "
- else
- dat += "\[Start Tracking\] | "
- dat += "
"
- else
- dat += "| No other signals detected. |
"
- dat += "
"
-
- var/datum/browser/popup = new(user, "gps_\ref[src]", "Global Positioning System", 700, 1000)
- popup.set_content(dat.Join(null))
- popup.open()
-
-/obj/item/gps/Topic(var/href, var/list/href_list)
- if(..())
- return TRUE
-
- if(href_list["toggle_power"])
- toggle_tracking()
- . = TRUE
-
- if(href_list["track_label"])
- var/gps_ref = href_list["track_label"]
- var/obj/item/gps/gps = locate(gps_ref)
- if(istype(gps) && !QDELETED(gps) && !LAZYACCESS(showing_tracked_names, gps_ref))
- LAZYSET(showing_tracked_names, gps_ref, TRUE)
- else
+ switch(action)
+ if("power")
+ toggle_tracking()
+ return TRUE
+ if("rename")
+ var/new_name = sanitize(params["value"], 11)
+ if(!new_name)
+ return FALSE
+ gps_tag = uppertext(new_name)
+ name = "global positioning system ([gps_tag])"
+ return TRUE
+ if("localMode")
+ local_mode = !local_mode
+ return TRUE
+ if("hideSignal")
+ if(!can_hide_signal)
+ return FALSE
+ hide_signal = !hide_signal
+ return TRUE
+ if("trackLabel")
+ var/gps_ref = params["ref"]
+ if(!gps_ref)
+ return FALSE
+ var/obj/item/gps/gps = locate(gps_ref)
+ if(istype(gps) && !QDELETED(gps) && !LAZYACCESS(showing_tracked_names, gps_ref))
+ LAZYSET(showing_tracked_names, gps_ref, TRUE)
+ else
+ LAZYREMOVE(showing_tracked_names, gps_ref)
+ return TRUE
+ if("stopTrack")
+ var/gps_ref = params["ref"]
+ if(!gps_ref)
+ return FALSE
+ compass.clear_waypoint(gps_ref)
+ LAZYREMOVE(tracking_devices, gps_ref)
LAZYREMOVE(showing_tracked_names, gps_ref)
- to_chat(usr, span_notice("\The [src] is [LAZYACCESS(showing_tracked_names, gps_ref) ? "now showing" : "no longer showing"] labels for [gps.gps_tag]."))
-
- if(href_list["stop_track"])
- var/gps_ref = href_list["stop_track"]
- var/obj/item/gps/gps = locate(gps_ref)
- compass.clear_waypoint(gps_ref)
- LAZYREMOVE(tracking_devices, gps_ref)
- LAZYREMOVE(showing_tracked_names, gps_ref)
- if(istype(gps) && !QDELETED(gps))
- to_chat(usr, span_notice("\The [src] is no longer tracking [gps.gps_tag]."))
- update_compass()
- . = TRUE
-
- if(href_list["start_track"])
- var/gps_ref = href_list["start_track"]
- var/obj/item/gps/gps = locate(gps_ref)
- if(istype(gps) && !QDELETED(gps))
+ update_compass(src, TRUE)
+ return TRUE
+ if("startTrack")
+ var/gps_ref = params["ref"]
+ if(!gps_ref)
+ return FALSE
+ var/obj/item/gps/gps = locate(gps_ref)
+ if(!istype(gps) || QDELETED(gps))
+ return FALSE
LAZYSET(tracking_devices, gps_ref, "#00ffff")
LAZYSET(showing_tracked_names, gps_ref, TRUE)
- to_chat(usr, span_notice("\The [src] is now tracking [gps.gps_tag]."))
- update_compass()
- . = TRUE
-
- if(href_list["track_color"])
- var/obj/item/gps/gps = locate(href_list["track_color"])
- if(istype(gps) && !QDELETED(gps))
- var/new_colour = tgui_color_picker(usr, "Enter a new tracking color.", "GPS Waypoint Color")
- if(new_colour && istype(gps) && !QDELETED(gps) && holder == usr && !usr.incapacitated())
- to_chat(usr, span_notice("You adjust the colour \the [src] is using to highlight [gps.gps_tag]."))
- LAZYSET(tracking_devices, href_list["track_color"], new_colour)
- update_compass()
- . = TRUE
-
- if(href_list["tag"])
- var/a = tgui_input_text(usr, "Please enter desired tag.", name, gps_tag, 10)
- a = uppertext(copytext(a, 1, 11))
- if(in_range(src, usr))
- gps_tag = a
- name = "global positioning system ([gps_tag])"
- to_chat(usr, "You set your GPS's tag to '[gps_tag]'.")
- . = TRUE
-
- if(href_list["range"])
- local_mode = !local_mode
- to_chat(usr, "You set the signal receiver to [local_mode ? "'NARROW'" : "'BROAD'"].")
- . = TRUE
-
- if(href_list["hide"])
- if(!can_hide_signal)
- return
- hide_signal = !hide_signal
- to_chat(usr, "You set the device to [hide_signal ? "not " : ""]broadcast a signal while scanning for other signals.")
- . = TRUE
-
- if(. && loc == usr)
- display(usr)
+ update_compass(src, TRUE)
+ return TRUE
+ if("trackColor")
+ var/gps_ref = params["ref"]
+ if(!gps_ref)
+ return FALSE
+ var/obj/item/gps/gps = locate(gps_ref)
+ if(!istype(gps) || QDELETED(gps))
+ return FALSE
+ var/new_colour = sanitize_hexcolor(params["color"])
+ if(!new_colour)
+ return FALSE
+ LAZYSET(tracking_devices, gps_ref, new_colour)
+ update_compass(src, TRUE)
+ return TRUE
/obj/item/gps/on // Defaults to off to avoid polluting the signal list with a bunch of GPSes without owners. If you need to spawn active ones, use these.
tracking = TRUE
@@ -478,45 +456,4 @@ GLOBAL_LIST_EMPTY(GPS_list)
long_range = TRUE
hide_signal = TRUE
can_hide_signal = TRUE
-
-/obj/item/gps/syndie/display(mob/user)
-
- if(emped)
- to_chat(user, "It's busted!")
- return
-
- var/list/dat = list()
- var/list/gps_data = display_list()
-
- dat += ""
-
- var/datum/browser/popup = new(user, "gps_\ref[src]", "Global Positioning System", 700, 1000)
- popup.set_content(dat.Join(null))
- popup.open()
+ theme = "syndicate"
diff --git a/code/game/objects/items/stacks/nanopaste.dm b/code/game/objects/items/stacks/nanopaste.dm
index 81542d566b..b5254e4f6e 100644
--- a/code/game/objects/items/stacks/nanopaste.dm
+++ b/code/game/objects/items/stacks/nanopaste.dm
@@ -14,7 +14,7 @@
/obj/item/stack/nanopaste/attack(mob/living/M as mob, mob/user as mob)
if (!istype(M) || !istype(user))
return 0
- if (istype(M,/mob/living/silicon/robot)) //Repairing cyborgs
+ if (istype(M,/mob/living/silicon/robot) && can_use(1)) //Repairing cyborgs
var/mob/living/silicon/robot/R = M
if (R.getBruteLoss() || R.getFireLoss())
if(do_after(user, 7 * toolspeed, target = R))
diff --git a/code/modules/client/preferences/types/character/pai/01_basic.dm b/code/modules/client/preferences/types/character/pai/01_basic.dm
index b5df4c5c04..e73672fbe6 100644
--- a/code/modules/client/preferences/types/character/pai/01_basic.dm
+++ b/code/modules/client/preferences/types/character/pai/01_basic.dm
@@ -89,7 +89,7 @@
return PAI_DEFAULT_CHASSIS
/datum/preference/text/pai_chassis/is_valid(value)
- if(!(value in SSpai.get_chassis_list()))
+ if(!(value in SSpai.get_chassis_list()) && value != PAI_DEFAULT_CHASSIS)
return FALSE
. = ..()
diff --git a/code/modules/compass/compass_holder.dm b/code/modules/compass/compass_holder.dm
index d11ceb9e5f..fa8e9c3e80 100644
--- a/code/modules/compass/compass_holder.dm
+++ b/code/modules/compass/compass_holder.dm
@@ -61,7 +61,7 @@
rebuild_overlay_lists(TRUE)
/obj/compass_holder/Destroy()
- QDEL_NULL_LIST(compass_waypoints)
+ QDEL_LIST_ASSOC_VAL(compass_waypoints)
. = ..()
/obj/compass_holder/proc/get_heading()
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/event.dm b/code/modules/mob/living/silicon/robot/robot_modules/event.dm
index d53ac8ff7f..625b8d7b9c 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/event.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/event.dm
@@ -37,6 +37,11 @@
src.modules += new /obj/item/dogborg/sleeper/lost(src)
src.modules += new /obj/item/dogborg/pounce(src)
+/obj/item/robot_module/robot/lost/adjust_gps(obj/item/gps/robot/robot_gps)
+ robot_gps.long_range = TRUE
+ robot_gps.hide_signal = TRUE
+ robot_gps.can_hide_signal = TRUE
+
/obj/item/robot_module/robot/gravekeeper
name = "gravekeeper robot module"
hide_on_manifest = TRUE
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm
index 53b37e757a..0732c86558 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm
@@ -186,7 +186,9 @@
T.water = water
src.modules += T
//CHOMPEdit End
- src.modules += new /obj/item/gps/robot(src)
+ var/obj/item/gps/robot/robot_gps = new /obj/item/gps/robot(src)
+ adjust_gps(robot_gps)
+ src.modules += robot_gps
src.modules += new /obj/item/boop_module(src)
src.modules += new /obj/item/flash/robot(src)
src.modules += new /obj/item/extinguisher(src)
@@ -195,6 +197,9 @@
src.modules += new /obj/item/gripper/scene(src)
src.modules += new /obj/item/robo_dice(src)
+/obj/item/robot_module/robot/proc/adjust_gps(obj/item/gps/robot/robot_gps)
+ return
+
/obj/item/robot_module/robot/standard
name = "standard robot module"
pto_type = PTO_CIVILIAN
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm
index 0329c48e8a..bccf32c0db 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm
@@ -38,6 +38,11 @@
id.forceMove(src)
src.modules += id
+/obj/item/robot_module/robot/syndicate/adjust_gps(obj/item/gps/robot/robot_gps)
+ robot_gps.long_range = TRUE
+ robot_gps.hide_signal = TRUE
+ robot_gps.can_hide_signal = TRUE
+
/obj/item/robot_module/robot/syndicate/Destroy()
src.modules -= id
id = null
diff --git a/code/modules/mob/living/silicon/robot/sprites/command.dm b/code/modules/mob/living/silicon/robot/sprites/command.dm
index 191988fd35..c655517b47 100644
--- a/code/modules/mob/living/silicon/robot/sprites/command.dm
+++ b/code/modules/mob/living/silicon/robot/sprites/command.dm
@@ -65,11 +65,13 @@
has_eye_light_sprites = TRUE
/datum/robot_sprite/dogborg/tall/command
+ sprite_hud_icon_state = "clerical"
module_type = "Command"
sprite_icon = 'icons/mob/robot/tallrobot/tallrobots.dmi'
pixel_x = 0
/datum/robot_sprite/dogborg/raptor/command
+ sprite_hud_icon_state = "clerical"
module_type = "Command"
sprite_icon = 'icons/mob/robot/raptor.dmi'
diff --git a/code/modules/telesci/gps_advanced.dm b/code/modules/telesci/gps_advanced.dm
deleted file mode 100644
index 4375102d5d..0000000000
--- a/code/modules/telesci/gps_advanced.dm
+++ /dev/null
@@ -1,77 +0,0 @@
-
-// DEPRECATED - The normal GPS has the advanced features, now. This is obsolete.
-
-// These are distinguished from the ordinary "Relay Position Devices" that just print your location
-// In that they are also all networked with each other to show each other's locations.
-/obj/item/gps/advanced
- name = "global positioning system"
- desc = "Helping lost spacemen find their way through the planets since 1995."
- icon = 'icons/obj/telescience.dmi'
- icon_state = "gps-c"
- w_class = ITEMSIZE_SMALL
- slot_flags = SLOT_BELT
- origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2)
- gps_tag = "COM0"
- emped = 0
-
- special_handling = TRUE
-
-/obj/item/gps/advanced/Initialize(mapload)
- . = ..()
- add_overlay("working")
-
-/obj/item/gps/advanced/emp_act(severity, recursive)
- emped = TRUE
- cut_overlay("working")
- add_overlay("emp")
- spawn(300)
- emped = FALSE
- cut_overlay("emp")
- add_overlay("working")
-
-/obj/item/gps/advanced/attack_self(mob/user)
- . = ..(user)
- if(.)
- return TRUE
-
- var/obj/item/gps/advanced/t = ""
- if(emped)
- t += "ERROR"
- else
- t += "
Set Tag "
- t += "
Tag: [gps_tag]"
-
- for(var/obj/item/gps/advanced/G in GLOB.GPS_list)
- var/turf/pos = get_turf(G)
- var/area/gps_area = get_area(G)
- var/tracked_gpstag = G.gps_tag
- if(G.emped == 1)
- t += "
[tracked_gpstag]: ERROR"
- else
- t += "
[tracked_gpstag]: [strip_improper(gps_area.name)] ([pos.x], [pos.y], [pos.z])"
-
- var/datum/browser/popup = new(user, "GPS", name, 600, 450)
- popup.set_content(t)
- popup.open()
-
-/obj/item/gps/advanced/Topic(href, href_list)
- ..()
- if(href_list["advtag"] )
- var/a = tgui_input_text(usr, "Please enter desired tag.", name, gps_tag, 4)
- a = uppertext(copytext(a, 1, 5))
- if(src.loc == usr)
- gps_tag = a
- name = "global positioning system ([gps_tag])"
- attack_self(usr)
-
-/obj/item/gps/advanced/science
- icon_state = "gps-s"
- gps_tag = "SCI0"
-
-/obj/item/gps/advanced/engineering
- icon_state = "gps-e"
- gps_tag = "ENG0"
-
-/obj/item/gps/advanced/security
- icon_state = "gps-sec"
- gps_tag = "SEC0"
diff --git a/modular_chomp/maps/common_submaps/virtual_reality/constructVR.dmm b/modular_chomp/maps/common_submaps/virtual_reality/constructVR.dmm
index 7ef2eaa258..47bfc5500c 100644
--- a/modular_chomp/maps/common_submaps/virtual_reality/constructVR.dmm
+++ b/modular_chomp/maps/common_submaps/virtual_reality/constructVR.dmm
@@ -710,7 +710,7 @@
/area/vr/powered/armory)
"aFR" = (
/obj/structure/table/reinforced,
-/obj/item/gps/advanced/science,
+/obj/item/gps/science,
/obj/item/reagent_containers/spray/cleaner{
desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'";
name = "Chemistry Cleaner"
@@ -18061,7 +18061,7 @@
/obj/item/paper_bin,
/obj/item/pen/fountain,
/obj/item/pen/chameleon,
-/obj/item/gps/advanced/science,
+/obj/item/gps/science,
/obj/machinery/button/remote/blast_door{
id = "estrella_blast";
name = "remote blast shielding control";
diff --git a/modular_chomp/maps/overmap/om_ships/whiteship-26x33.dmm b/modular_chomp/maps/overmap/om_ships/whiteship-26x33.dmm
index 24f9023f4b..becc1963f4 100644
--- a/modular_chomp/maps/overmap/om_ships/whiteship-26x33.dmm
+++ b/modular_chomp/maps/overmap/om_ships/whiteship-26x33.dmm
@@ -1687,7 +1687,7 @@
/obj/item/paper_bin,
/obj/item/pen/fountain,
/obj/item/pen/chameleon,
-/obj/item/gps/advanced/science,
+/obj/item/gps/science,
/obj/machinery/button/remote/blast_door{
id = "estrella_blast";
name = "remote blast shielding control";
@@ -1857,7 +1857,7 @@
desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'";
name = "Chemistry Cleaner"
},
-/obj/item/gps/advanced/science,
+/obj/item/gps/science,
/turf/simulated/shuttle/floor/purple,
/area/shuttle/whiteshipOM2)
"Ug" = (
diff --git a/modular_chomp/maps/overmap/om_ships/whiteship.dmm b/modular_chomp/maps/overmap/om_ships/whiteship.dmm
index 2a84e348fc..d85a0f3494 100644
--- a/modular_chomp/maps/overmap/om_ships/whiteship.dmm
+++ b/modular_chomp/maps/overmap/om_ships/whiteship.dmm
@@ -1648,7 +1648,7 @@
/obj/item/paper_bin,
/obj/item/pen/fountain,
/obj/item/pen/chameleon,
-/obj/item/gps/advanced/science,
+/obj/item/gps/science,
/obj/machinery/button/remote/blast_door{
id = "estrella_blast";
name = "remote blast shielding control";
@@ -1825,7 +1825,7 @@
/area/shuttle/whiteshipOM)
"UG" = (
/obj/structure/table/reinforced,
-/obj/item/gps/advanced/science,
+/obj/item/gps/science,
/obj/item/reagent_containers/spray/cleaner{
desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'";
name = "Chemistry Cleaner"
diff --git a/modular_chomp/maps/palettes/1SP_pods.dmm b/modular_chomp/maps/palettes/1SP_pods.dmm
index 604342cc87..365b78f5f8 100644
--- a/modular_chomp/maps/palettes/1SP_pods.dmm
+++ b/modular_chomp/maps/palettes/1SP_pods.dmm
@@ -28879,7 +28879,7 @@
/area/survivalpod/superpose/DragonCave)
"rSA" = (
/obj/structure/table/reinforced,
-/obj/item/gps/advanced/science,
+/obj/item/gps/science,
/obj/item/reagent_containers/spray/cleaner{
desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'";
name = "Chemistry Cleaner"
@@ -33728,7 +33728,7 @@
/obj/item/paper_bin,
/obj/item/pen/fountain,
/obj/item/pen/chameleon,
-/obj/item/gps/advanced/science,
+/obj/item/gps/science,
/obj/machinery/button/remote/blast_door{
id = "estrella_blast";
name = "remote blast shielding control";
diff --git a/modular_chomp/maps/submaps/shelters/ScienceShip-25x33.dmm b/modular_chomp/maps/submaps/shelters/ScienceShip-25x33.dmm
index 370b22d8d1..d18e93c6c5 100644
--- a/modular_chomp/maps/submaps/shelters/ScienceShip-25x33.dmm
+++ b/modular_chomp/maps/submaps/shelters/ScienceShip-25x33.dmm
@@ -1673,7 +1673,7 @@
/obj/item/paper_bin,
/obj/item/pen/fountain,
/obj/item/pen/chameleon,
-/obj/item/gps/advanced/science,
+/obj/item/gps/science,
/obj/machinery/button/remote/blast_door{
id = "estrella_blast";
name = "remote blast shielding control";
@@ -1842,7 +1842,7 @@
/area/survivalpod/superpose/ScienceShip)
"UG" = (
/obj/structure/table/reinforced,
-/obj/item/gps/advanced/science,
+/obj/item/gps/science,
/obj/item/reagent_containers/spray/cleaner{
desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'";
name = "Chemistry Cleaner"
diff --git a/tgui/packages/tgui/interfaces/ColorPickerModal.tsx b/tgui/packages/tgui/interfaces/ColorPickerModal.tsx
index 0b9dbf0ab0..b6097f3cb9 100644
--- a/tgui/packages/tgui/interfaces/ColorPickerModal.tsx
+++ b/tgui/packages/tgui/interfaces/ColorPickerModal.tsx
@@ -260,7 +260,7 @@ const ColorPresets: React.FC = React.memo(
))}
- {!!onAllowEditing && (
+ {!!onAllowEditing && presetList?.length && (
+ }
>
- {power ? 'On' : 'Off'}
-
- }
- >
-
-
-
-
-
-
-
-
-
-
-
-
- {!!power && (
- <>
-
-
- {currentArea} ({currentCoords})
-
-
-
-
-
- Name
- Direction
- Coordinates
-
- {signals.map((signal, index) => (
-
+
+ act('rename', { value })}
+ value={tag}
+ />
+
+
+
+ {!!canHide && (
+
+
- ))}
-
+ {isHidden ? 'HIDDEN' : 'VISIBLE'}
+
+
+ )}
+
- >
- )}
+
+ {!!power && (
+ <>
+
+
+
+ {currentArea} ({currentCoords} | {currentZName})
+
+
+
+
+
+
+
+ Name
+ Options
+ Direction
+ Coordinates
+
+ {signals.length ? (
+ signals.map((signal, index) => (
+
+
+ {signal.gpsTag}
+
+
+ {signal.trackingColor ? (
+
+
+
+
+
+ act('trackColor', {
+ ref: signal.ref,
+ color: value,
+ })
+ }
+ />
+
+
+
+
+ ) : (
+
+ )}
+
+ {signal.local ? (
+
+ {signal.degrees !== undefined && (
+
+ )}
+ {signal.dist !== undefined && `${signal.dist}m`}
+
+ ) : (
+ Non-local
+ )}
+
+ {signal.coords} | {signal.zName}
+
+
+ ))
+ ) : (
+ <>
+
+
+
+ No signals detetcted.
+
+
+ >
+ )}
+
+
+
+ >
+ )}
+
);
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/elements/ColorInput.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/elements/ColorInput.tsx
index eaf5d15285..5a9c8a0a72 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/elements/ColorInput.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/elements/ColorInput.tsx
@@ -145,7 +145,7 @@ export const PreferenceEditColor = (
-
-
-
+ {!!tooltip && (
+
+
+
+ )}
);
};
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditColor.tsx b/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditColor.tsx
index 575ede5207..54c8112fe0 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditColor.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditColor.tsx
@@ -168,7 +168,7 @@ export const VorePanelEditColor = (