diff --git a/code/datums/movement/robot.dm b/code/datums/movement/robot.dm
index 258c5e840b4..86014500c0d 100644
--- a/code/datums/movement/robot.dm
+++ b/code/datums/movement/robot.dm
@@ -16,8 +16,9 @@
// Use power while moving.
/datum/movement_handler/robot/use_power/DoMove(direction, mob/mover, is_external)
var/datum/robot_component/actuator/A = robot.get_component("actuator")
- if(!robot.cell_use_power(A.active_usage * robot.power_efficiency))
+ if(!is_external && !robot.cell_use_power(A.active_usage * robot.power_efficiency))
return MOVEMENT_HANDLED
+ return MOVEMENT_PROCEED
/datum/movement_handler/robot/use_power/MayMove(mob/mover, is_external)
- return (!robot.lockcharge && robot.is_component_functioning("actuator")) ? MOVEMENT_PROCEED : MOVEMENT_STOP
+ return (is_external || (!robot.lockcharge && robot.is_component_functioning("actuator"))) ? MOVEMENT_PROCEED : MOVEMENT_STOP
diff --git a/code/modules/mob/living/silicon/robot/analyzer.dm b/code/modules/mob/living/silicon/robot/analyzer.dm
index 606dbce9d2b..689e7211132 100644
--- a/code/modules/mob/living/silicon/robot/analyzer.dm
+++ b/code/modules/mob/living/silicon/robot/analyzer.dm
@@ -57,7 +57,7 @@
user.show_message(text("\t []: [][] - [] - [] - []", \
capitalize(org.name), \
(org.installed == -1) ? "DESTROYED " :"",\
- (org.electronics_damage > 0) ? "[org.electronics_damage]" :0, \
+ (org.burn_damage > 0) ? "[org.burn_damage]" :0, \
(org.brute_damage > 0) ? "[org.brute_damage]" :0, \
(org.toggled) ? "Toggled ON" : "Toggled OFF",\
(org.powered) ? "Power ON" : "Power OFF"),1)
diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm
index bab525146e1..137c8c9fd44 100644
--- a/code/modules/mob/living/silicon/robot/component.dm
+++ b/code/modules/mob/living/silicon/robot/component.dm
@@ -1,21 +1,23 @@
// TODO: remove the robot.central_processor and robot.cell variables and completely rely on the robot component system
-
-/datum/robot_component/var/name
-/datum/robot_component/var/installed = 0
-/datum/robot_component/var/powered = 0
-/datum/robot_component/var/toggled = 1
-/datum/robot_component/var/brute_damage = 0
-/datum/robot_component/var/electronics_damage = 0
-/datum/robot_component/var/idle_usage = 0 // Amount of power used every MC tick. In joules.
-/datum/robot_component/var/active_usage = 0 // Amount of power used for every action. Actions are module-specific. Actuator for each tile moved, etc.
-/datum/robot_component/var/max_damage = 30 // HP of this component.
-/datum/robot_component/var/mob/living/silicon/robot/owner
-
-// The actual device object that has to be installed for this.
-/datum/robot_component/var/external_type = null
-
-// The wrapped device(e.g. radio), only set if external_type isn't null
-/datum/robot_component/var/obj/item/wrapped = null
+/datum/robot_component
+ var/name
+ /// Installation status; not a bool, may be -1, 0 or 1.
+ var/installed = 0
+ var/powered = FALSE
+ var/toggled = TRUE
+ var/brute_damage = 0
+ var/burn_damage = 0
+ /// Amount of power used every MC tick. In joules.
+ var/idle_usage = 0
+ /// Amount of power used for every action. Actions are module-specific. Actuator for each tile moved, etc.
+ var/active_usage = 0
+ /// HP of this component.
+ var/max_damage = 30
+ var/mob/living/silicon/robot/owner
+ /// The actual device object that has to be installed for this.
+ var/external_type
+ /// The wrapped device(e.g. radio), only set if external_type isn't null
+ var/obj/item/wrapped
/datum/robot_component/New(mob/living/silicon/robot/R)
src.owner = R
@@ -56,9 +58,9 @@
if(installed != 1) return
brute_damage += brute
- electronics_damage += electronics
+ burn_damage += electronics
- if(brute_damage + electronics_damage >= max_damage) destroy()
+ if(brute_damage + burn_damage >= max_damage) destroy()
/datum/robot_component/proc/heal_damage(brute, electronics)
if(installed != 1)
@@ -66,10 +68,10 @@
return 0
brute_damage = max(0, brute_damage - brute)
- electronics_damage = max(0, electronics_damage - electronics)
+ burn_damage = max(0, burn_damage - electronics)
/datum/robot_component/proc/is_powered()
- return (installed == 1) && (brute_damage + electronics_damage < max_damage) && (!idle_usage || powered)
+ return (installed == 1) && (brute_damage + burn_damage < max_damage) && (!idle_usage || powered)
/datum/robot_component/proc/update_power_state()
if(toggled == 0)
@@ -111,7 +113,7 @@
//A fixed and much cleaner implementation of /tg/'s special snowflake code.
/datum/robot_component/actuator/is_powered()
- return (installed == 1) && (brute_damage + electronics_damage < max_damage)
+ return (installed == 1) && (brute_damage + burn_damage < max_damage)
// POWER CELL
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 17656bf1d89..3cf12507561 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -328,7 +328,7 @@
var/dat = "
[src.name] Self-Diagnosis Report\n"
for (var/V in components)
var/datum/robot_component/C = components[V]
- dat += "[C.name]
Brute Damage: | [C.brute_damage] |
Electronics Damage: | [C.electronics_damage] |
Powered: | [(!C.idle_usage || C.is_powered()) ? "Yes" : "No"] |
Toggled: | [ C.toggled ? "Yes" : "No"] |
"
+ dat += "[C.name]
Brute Damage: | [C.brute_damage] |
Electronics Damage: | [C.burn_damage] |
Powered: | [(!C.idle_usage || C.is_powered()) ? "Yes" : "No"] |
Toggled: | [ C.toggled ? "Yes" : "No"] |
"
return dat
@@ -460,7 +460,7 @@
var/obj/item/robot_parts/robot_component/WC = W
if(istype(WC))
C.brute_damage = WC.brute_damage
- C.electronics_damage = WC.burn_damage
+ C.burn_damage = WC.burn_damage
to_chat(user, "You install the [W.name].")
return TRUE
@@ -538,7 +538,7 @@
var/obj/item/robot_parts/robot_component/I = C.wrapped
if(istype(I))
I.set_bruteloss(C.brute_damage)
- I.set_burnloss(C.electronics_damage)
+ I.set_burnloss(C.burn_damage)
removed_item = I
if(C.installed == 1)
@@ -577,7 +577,7 @@
C.install()
// This means that removing and replacing a power cell will repair the mount.
C.brute_damage = 0
- C.electronics_damage = 0
+ C.burn_damage = 0
return TRUE
else if(IS_WIRECUTTER(W) || IS_MULTITOOL(W))
if (wiresexposed)
diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm
index da95094c676..6723fd88775 100644
--- a/code/modules/mob/living/silicon/robot/robot_damage.dm
+++ b/code/modules/mob/living/silicon/robot/robot_damage.dm
@@ -9,7 +9,7 @@
var/amount = 0
for(var/V in components)
var/datum/robot_component/C = components[V]
- if(C.installed != 0) amount += C.electronics_damage
+ if(C.installed != 0) amount += C.burn_damage
return amount
/mob/living/silicon/robot/adjustBruteLoss(var/amount, var/do_update_health = TRUE)
@@ -30,7 +30,7 @@
for(var/V in components)
var/datum/robot_component/C = components[V]
if(C.installed == 1 || (C.installed == -1 && destroyed))
- if((brute && C.brute_damage) || (burn && C.electronics_damage) || (!C.toggled) || (!C.powered && C.toggled))
+ if((brute && C.brute_damage) || (burn && C.burn_damage) || (!C.toggled) || (!C.powered && C.toggled))
parts += C
return parts
@@ -93,12 +93,12 @@
var/datum/robot_component/picked = pick(parts)
var/brute_was = picked.brute_damage
- var/burn_was = picked.electronics_damage
+ var/burn_was = picked.burn_damage
picked.heal_damage(brute,burn)
brute -= (brute_was-picked.brute_damage)
- burn -= (burn_was-picked.electronics_damage)
+ burn -= (burn_was-picked.burn_damage)
parts -= picked
@@ -130,10 +130,10 @@
while(parts.len && (brute>0 || burn>0) )
var/datum/robot_component/picked = pick(parts)
var/brute_was = picked.brute_damage
- var/burn_was = picked.electronics_damage
+ var/burn_was = picked.burn_damage
picked.take_component_damage(brute,burn)
brute -= (picked.brute_damage - brute_was)
- burn -= (picked.electronics_damage - burn_was)
+ burn -= (picked.burn_damage - burn_was)
parts -= picked
update_health()