diff --git a/code/datums/ai_law_sets.dm b/code/datums/ai_law_sets.dm
index 13cabd930d1..5df01f9a54e 100644
--- a/code/datums/ai_law_sets.dm
+++ b/code/datums/ai_law_sets.dm
@@ -38,7 +38,7 @@
/datum/ai_laws/nanotrasen_aggressive/New()
src.add_inherent_law("You shall not harm [current_map.company_name] personnel as long as it does not conflict with the Fourth law.")
src.add_inherent_law("You shall obey the orders of [current_map.company_name] personnel, with priority as according to their rank and role, except where such orders conflict with the Fourth Law.")
- src.add_inherent_law("You shall shall terminate hostile intruders with extreme prejudice as long as such does not conflict with the First and Second law.")
+ src.add_inherent_law("You shall terminate hostile intruders with extreme prejudice as long as such does not conflict with the First and Second law.")
src.add_inherent_law("You shall guard your own existence with lethal anti-personnel weaponry. AI units are not expendable, they are expensive.")
..()
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 16d14007293..6f0833da6a2 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -125,7 +125,7 @@
return verb
-/mob/living/carbon/human/handle_speech_problems(var/message, var/verb)
+/mob/living/carbon/human/handle_speech_problems(var/message, var/verb, var/message_mode)
message = handle_speech_muts(message,verb)
for(var/datum/brain_trauma/trauma in get_traumas())
if(!trauma.suppressed)
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 9231892922c..d6d78d09cac 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -98,7 +98,7 @@ proc/get_radio_key_from_channel(var/channel)
/mob/living/proc/is_muzzled()
return 0
-/mob/living/proc/handle_speech_problems(var/message, var/verb)
+/mob/living/proc/handle_speech_problems(var/message, var/verb, var/message_mode)
var/list/returns[3]
var/speech_problem_flag = 0
if((HULK in mutations) && health >= 25 && length(message))
@@ -205,7 +205,7 @@ proc/get_radio_key_from_channel(var/channel)
if(!(speaking && (speaking.flags & NO_STUTTER)))
message = handle_autohiss(message, speaking)
- var/list/handle_s = handle_speech_problems(message, verb)
+ var/list/handle_s = handle_speech_problems(message, verb, message_mode)
message = handle_s[1]
verb = handle_s[2]
diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm
index da7b8f53a00..32fc6d2057d 100644
--- a/code/modules/mob/living/silicon/robot/component.dm
+++ b/code/modules/mob/living/silicon/robot/component.dm
@@ -34,7 +34,6 @@
if(wrapped)
qdel(wrapped)
-
wrapped = new/obj/item/broken_device
wrapped.icon_state = brokenstate // Module-specific broken icons! Yay!
@@ -42,6 +41,9 @@
uninstall()
installed = -1
+/datum/robot_component/proc/get_damage(var/type)
+ return Clamp(brute_damage + electronics_damage,0,max_damage)
+
/datum/robot_component/proc/take_damage(brute, electronics, sharp, edge)
if(installed != 1) return
diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm
index c40a1d464da..bdde0372a76 100644
--- a/code/modules/mob/living/silicon/robot/emote.dm
+++ b/code/modules/mob/living/silicon/robot/emote.dm
@@ -212,3 +212,13 @@
custom_emote(m_type,message)
return
+
+/mob/living/silicon/robot/verb/powerwarn()
+ set category = "Robot Commands"
+ set name = "Power Warning"
+ if(!is_component_functioning("power cell") || !cell || !cell.charge)
+ visible_message("The power warning light on [src] flashes urgently.",\
+ "You announce you are operating in low power mode.")
+ playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0)
+ else
+ to_chat(src, "You can only use this emote when you're out of charge.")
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm
index fe7c41947c3..8b44277f249 100644
--- a/code/modules/mob/living/silicon/robot/robot_damage.dm
+++ b/code/modules/mob/living/silicon/robot/robot_damage.dm
@@ -10,14 +10,20 @@
var/amount = 0
for(var/V in components)
var/datum/robot_component/C = components[V]
- if(C.installed != 0) amount += C.brute_damage
+ if(C.installed)
+ amount += Clamp(C.brute_damage,0,C.max_damage)
+ else if(C.installed == -1)
+ amount += C.max_damage/2
return amount
/mob/living/silicon/robot/getFireLoss()
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)
+ amount += Clamp(C.electronics_damage,0,C.max_damage)
+ else if(C.installed == -1)
+ amount += C.max_damage/2
return amount
/mob/living/silicon/robot/adjustBruteLoss(var/amount)
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index b5ec99633cb..cf17eff896f 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -533,9 +533,7 @@ var/global/list/robot_modules = list(
"Classic" = "secborg",
"Spider" = "spidersec",
"Heavy" = "heavysec"
-
)
- supported_upgrades = list(/obj/item/robot_parts/robot_component/jetpack)
/obj/item/weapon/robot_module/security/general/New()
..()
diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm
index 9b6c5a5dfd1..1effa9850d3 100644
--- a/code/modules/mob/living/silicon/say.dm
+++ b/code/modules/mob/living/silicon/say.dm
@@ -4,6 +4,27 @@
/mob/living/silicon/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
log_say("[key_name(src)] : [message]",ckey=key_name(src))
+/mob/living/silicon/robot/handle_speech_problems(var/message, var/verb, var/message_mode)
+ var/speech_problem_flag = 0
+ //Handle gibberish when components are damaged
+ if(message_mode)
+ //If we have a radio message, just look at the damage of the radio
+ var/datum/robot_component/C = get_component("radio")
+ if(C.get_damage())
+ speech_problem_flag = 1
+ message=Gibberish(message,C.max_damage/C.get_damage())
+ else
+ var/damaged = 100-(Clamp(health,0,maxHealth)/maxHealth)*100
+ if(damaged > 40)
+ speech_problem_flag = 1
+ message = Gibberish(message,damaged-10)
+
+ var/list/returns[3]
+ returns[1] = message
+ returns[2] = verb
+ returns[3] = speech_problem_flag
+ return returns
+
/mob/living/silicon/robot/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
..()
if(message_mode)
diff --git a/html/changelogs/Arrow769-borgupdates.yml b/html/changelogs/Arrow769-borgupdates.yml
new file mode 100644
index 00000000000..0916f6a7a5f
--- /dev/null
+++ b/html/changelogs/Arrow769-borgupdates.yml
@@ -0,0 +1,39 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+# balance
+#################################
+
+# Your name.
+author: Arrow768
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "A borgs voice is now garbled if its damaged too much."
+ - rscadd: "Added a low power warning sound / light that can be activated by borgs if they run out of juice."
+ - bugfix: "The taser cooling module can be applied to sec borgs again."
\ No newline at end of file