diff --git a/code/modules/explorer_drone/control_console.dm b/code/modules/explorer_drone/control_console.dm
index 78451dd71a1..21c64757bc1 100644
--- a/code/modules/explorer_drone/control_console.dm
+++ b/code/modules/explorer_drone/control_console.dm
@@ -23,16 +23,18 @@
RegisterSignal(controlled_drone,COMSIG_QDELETING, PROC_REF(drone_destroyed))
RegisterSignal(controlled_drone,COMSIG_EXODRONE_STATUS_CHANGED, PROC_REF(on_exodrone_status_changed))
update_icon()
+ playsound(src, 'sound/machines/terminal/terminal_on.ogg', 20, vary = TRUE)
/obj/machinery/computer/exodrone_control_console/proc/on_exodrone_status_changed()
SIGNAL_HANDLER
//Notify we need human action and switch screeb icon to alert.
- playsound(src,'sound/machines/ping.ogg',30,FALSE)
+ playsound(src, 'sound/machines/terminal/terminal_processing.ogg', 20, vary = TRUE)
update_icon()
/obj/machinery/computer/exodrone_control_console/proc/drone_destroyed()
SIGNAL_HANDLER
signal_lost = TRUE
+ playsound(src, 'sound/machines/terminal/terminal_alert.ogg', 20, vary = TRUE)
end_drone_control()
/obj/machinery/computer/exodrone_control_console/proc/end_drone_control()
@@ -41,6 +43,7 @@
UnregisterSignal(controlled_drone,list(COMSIG_QDELETING,COMSIG_EXODRONE_STATUS_CHANGED))
controlled_drone = null
update_icon()
+ playsound(src, 'sound/machines/terminal/terminal_off.ogg', 20, vary = TRUE)
/obj/machinery/computer/exodrone_control_console/Destroy()
. = ..()
@@ -114,7 +117,7 @@
signal_lost = FALSE
return TRUE
if("self_destruct")
- qdel(controlled_drone) //var will be nulled in signal response
+ controlled_drone.handle_deconstruct()
return TRUE
if("add_tool")
if(controlled_drone && controlled_drone.drone_status == EXODRONE_IDLE)
diff --git a/code/modules/explorer_drone/exodrone.dm b/code/modules/explorer_drone/exodrone.dm
index e0b1aec07b2..08fc0ae9142 100644
--- a/code/modules/explorer_drone/exodrone.dm
+++ b/code/modules/explorer_drone/exodrone.dm
@@ -76,9 +76,14 @@ GLOBAL_LIST_EMPTY(exodrone_launchers)
// Cargo storage
create_storage(max_slots = EXODRONE_CARGO_SLOTS, canthold = GLOB.blacklisted_cargo_types)
-/obj/item/exodrone/Destroy()
+/obj/item/exodrone/handle_deconstruct(disassembled)
. = ..()
+ explosion(src, 0, 0, 1, 1)
+ do_sparks(5, FALSE, src)
+
+/obj/item/exodrone/Destroy()
GLOB.exodrones -= src
+ . = ..()
/// Description for drone listing, describes location and current status
/obj/item/exodrone/proc/ui_description()
@@ -337,7 +342,7 @@ GLOBAL_LIST_EMPTY(exodrone_launchers)
/obj/item/exodrone/proc/drone_log(message)
if(length(drone_log) > EXODRONE_LOG_SIZE)
- drone_log = list()
+ drone_log.Remove()
drone_log.Insert(1,message)
/obj/item/exodrone/proc/has_tool(tool_type)
diff --git a/code/modules/explorer_drone/scanner_array.dm b/code/modules/explorer_drone/scanner_array.dm
index 7588eae233a..237c3aee606 100644
--- a/code/modules/explorer_drone/scanner_array.dm
+++ b/code/modules/explorer_drone/scanner_array.dm
@@ -175,6 +175,7 @@ GLOBAL_LIST_INIT(scan_conditions,init_scan_conditions())
var/datum/exoscan/scan = GLOB.exoscanner_controller.create_scan(scan_type,target)
if(scan)
RegisterSignal(scan, COMSIG_EXOSCAN_INTERRUPTED, PROC_REF(scan_failed))
+ playsound(src, 'sound/machines/terminal/terminal_processing.ogg', 20, vary = TRUE)
/obj/machinery/computer/exoscanner_control/proc/scan_failed()
SIGNAL_HANDLER
diff --git a/tgui/packages/tgui/interfaces/ExodroneConsole.tsx b/tgui/packages/tgui/interfaces/ExodroneConsole.tsx
index b7caeeb4773..8b819187d1d 100644
--- a/tgui/packages/tgui/interfaces/ExodroneConsole.tsx
+++ b/tgui/packages/tgui/interfaces/ExodroneConsole.tsx
@@ -18,6 +18,7 @@ import {
ProgressBar,
Section,
Stack,
+ Tooltip,
} from 'tgui-core/components';
import { formatTime } from 'tgui-core/format';
import { capitalize } from 'tgui-core/string';
@@ -215,11 +216,7 @@ const SignalLostModal = (props) => {
-
@@ -279,39 +276,52 @@ const ToolSelectionModal = (props) => {
const toolData = Object.keys(all_tools);
return (
-
-
- Select Tool:
-
-
- {(!!toolData &&
- toolData.map((tool_name) => (
-
- {
- setChoosingTools(false);
- act('add_tool', { tool_type: tool_name });
- }}
- width={6}
- height={6}
- tooltip={all_tools[tool_name].description}
- >
-
- {capitalize(tool_name)}
-
-
-
-
-
-
- ))) || (
-
- setChoosingTools(false)}>Back
+
+ {
+ setChoosingTools(false);
+ }}
+ />
+ }
+ >
+
+ {(!!toolData &&
+ toolData.map((tool_name) => (
+
+
+
+ {' '}
+ {
+ setChoosingTools(false);
+ act('add_tool', { tool_type: tool_name });
+ }}
+ height={6}
+ tooltip={all_tools[tool_name].description}
+ icon={all_tools[tool_name].icon}
+ iconSize={3}
+ style={{ paddingTop: '15px' }}
+ />
+
+
+
+ {capitalize(tool_name)}
+
+
+
- )}
-
-
-
+ ))) || (
+
+ setChoosingTools(false)}>Back
+
+ )}
+
+
);
};
@@ -325,32 +335,33 @@ const EquipmentBox = (props: { cargo: CargoData; drone: DroneData }) => {
switch (cargo.type) {
case 'tool': // Tool icon+Remove button if configurable
return (
-
+
+
+
+
-
-
-
+ {capitalize(cargo.name)}
+
{!!configurable && (
-
+
act('remove_tool', { tool_type: cargo.name })}
- color="danger"
- icon="minus"
- tooltipPosition="right"
- tooltip="Remove Tool"
+ color="transparent"
+ icon="eject"
+ height={2.3}
+ tooltip="Eject"
+ style={{ paddingTop: '4px' }}
/>
)}
@@ -358,26 +369,32 @@ const EquipmentBox = (props: { cargo: CargoData; drone: DroneData }) => {
);
case 'cargo': // Jettison button.
return (
-
+
+
+
+
+
+
+ {capitalize(cargo.name)}
+
+
-
-
-
-
-
act('jettison', { target_ref: cargo.ref })}
- color="danger"
- icon="minus"
- tooltipPosition="right"
+ color="transparent"
+ icon="eject"
+ height={2.3}
tooltip={`Jettison ${cargo.name}`}
+ style={{ paddingTop: '4px' }}
/>
@@ -386,15 +403,49 @@ const EquipmentBox = (props: { cargo: CargoData; drone: DroneData }) => {
return '';
}
};
- return (
+ return boxContents(cargo) ? (
{boxContents(cargo)}
+ ) : (
+
+
+
+ Empty slot
+
+
+
);
};
@@ -406,15 +457,49 @@ const EquipmentGrid = (props: { drone: ActiveDrone & DroneData }) => {
return (
-
-
+
+
+
+
+
+ {props.drone.drone_name}
+
+
+ {capitalize(props.drone.drone_status)}
+
+
+
+
+
+
+
+
act('end_control')}>
Disconnect
-
{
-
+ setChoosingTools(true)}
+ />
+ )
+ }
+ >
- {!!configurable && (
- setChoosingTools(true)}
- >
- Install Tool
-
- )}
-
-
-
+
{cargo.map((cargo_element, index) => (
{
);
};
-const DroneStatus = (props: {
- drone_integrity: number;
- drone_max_integrity: number;
-}) => {
- const { drone_integrity, drone_max_integrity } = props;
-
- return (
-
-
- Integrity:
-
-
-
-
-
- );
-};
-
const NoSiteDimmer = () => {
return (
@@ -560,12 +618,7 @@ const TravelTargetSelectionScreen = (props: {
Cancel
)}
-
-
-
+
>
}
>
@@ -582,8 +635,9 @@ const TravelTargetSelectionScreen = (props: {
ml={1}
onClick={() => travel_to(null)}
disabled={!can_travel}
+ icon={can_travel ? 'rocket' : 'triangle-exclamation'}
>
- {can_travel ? 'Launch!' : travel_error}
+ {can_travel ? 'Launch' : travel_error}
}
@@ -600,8 +654,9 @@ const TravelTargetSelectionScreen = (props: {
ml={1}
onClick={() => travel_to(destination.ref)}
disabled={!can_travel}
+ icon={can_travel ? 'rocket' : 'triangle-exclamation'}
>
- {can_travel ? 'Launch!' : travel_error}
+ {can_travel ? 'Launch' : travel_error}
>
}
@@ -681,16 +736,7 @@ const ExplorationScreen = (props: { drone: DroneExploration & DroneData }) => {
);
}
return (
-
- }
- >
+
@@ -704,11 +750,21 @@ const ExplorationScreen = (props: { drone: DroneExploration & DroneData }) => {
- act('explore')}>Explore!
+ act('explore')}
+ >
+ Explore
+
{site.events.map((e) => (
act('explore_event', { target_event: e.ref })}
>
{capitalize(e.name)}
@@ -716,7 +772,14 @@ const ExplorationScreen = (props: { drone: DroneExploration & DroneData }) => {
))}
- setTravelDimmerShown(true)}>Travel
+ setTravelDimmerShown(true)}
+ >
+ Travel
+
@@ -728,16 +791,7 @@ const EventScreen = (props: { drone: DroneData; event: FullEventData }) => {
const { drone, event } = props;
return (
-
- }
- >
+
@@ -749,7 +803,9 @@ const EventScreen = (props: { drone: DroneData; event: FullEventData }) => {
/>
- {event.description}
+
+ {event.description}
+
@@ -791,18 +847,7 @@ export const AdventureScreen = (props: {
const rawData = adventure_data.raw_image;
const imgSource = rawData ? rawData : resolveAsset(adventure_data.image);
return (
-
- )
- }
- >
+
@@ -882,21 +927,25 @@ const ExodroneConsoleContent = (props) => {
-
+
+
+
+
+
+
+
+ {drone_log.map((log_line, ix) => (
+
+ {log_line}
+
+ ))}
+
+
+
+
-
-
-
- {drone_log.map((log_line, ix) => (
-
- {log_line}
-
- ))}
-
-
-
);
};