diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index 7dc2f1d60b..62422bcf62 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -8,7 +8,8 @@
w_class = WEIGHT_CLASS_SMALL
slot_flags = ITEM_SLOT_BELT
var/mob/living/silicon/pai/pai
- resistance_flags = FIRE_PROOF | ACID_PROOF | INDESTRUCTIBLE
+ resistance_flags = FIRE_PROOF | ACID_PROOF
+ max_integrity = 200
/obj/item/paicard/suicide_act(mob/living/user)
user.visible_message("[user] is staring sadly at [src]! [user.p_they()] can't keep living without real human intimacy!")
@@ -45,6 +46,8 @@
dat += "Radio Uplink
"
dat += "Transmit: [(pai.radio.wires.is_cut(WIRE_TX)) ? "Disabled" : "Enabled"]
"
dat += "Receive: [(pai.radio.wires.is_cut(WIRE_RX)) ? "Disabled" : "Enabled"]
"
+ if(pai.radio_short)
+ dat += "Reset radio short: \[RESET\]
"
else
dat += "Radio Uplink
"
dat += "Radio firmware not loaded. Please install a pAI personality to load firmware.
"
@@ -96,6 +99,8 @@
var/wire = text2num(href_list["wires"])
if(pai.radio)
pai.radio.wires.cut(wire)
+ if(href_list["reset_radio_short"])
+ pai.unshort_radio()
if(href_list["setlaws"])
var/newlaws = copytext(sanitize(input("Enter any additional directives you would like your pAI personality to follow. Note that these directives will not override the personality's allegiance to its imprinted master. Conflicting directives will be ignored.", "pAI Directive Configuration", pai.laws.supplied[1]) as message),1,MAX_MESSAGE_LEN)
if(newlaws && pai)
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index a2fcc8e97e..2f10877f11 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -71,13 +71,14 @@
var/emitterhealth = 20
var/emittermaxhealth = 20
var/emitterregen = 0.25
+ var/emitter_next_use = 0
var/emittercd = 50
var/emitteroverloadcd = 100
- var/emittersemicd = FALSE
- var/overload_ventcrawl = 0
- var/overload_bulletblock = 0 //Why is this a good idea?
- var/overload_maxhealth = 0
+ var/radio_short = FALSE
+ var/radio_short_cooldown = 5 MINUTES
+ var/radio_short_timerid
+
canmove = FALSE
var/silent = FALSE
var/brightness_power = 5
@@ -239,7 +240,7 @@
/datum/action/innate/pai/shell/Trigger()
..()
if(P.holoform)
- P.fold_in(0)
+ P.fold_in(FALSE)
else
P.fold_out()
@@ -304,6 +305,19 @@
/mob/living/silicon/pai/process()
emitterhealth = CLAMP((emitterhealth + emitterregen), -50, emittermaxhealth)
+/mob/living/silicon/pai/proc/short_radio()
+ if(radio_short_timerid)
+ deltimer(radio_short_timerid)
+ radio_short = TRUE
+ to_chat(src, "Your radio shorts out!")
+ radio_short_timerid = addtimer(CALLBACK(src, .proc/unshort_radio), radio_short_cooldown, flags = TIMER_STOPPABLE)
+
+/mob/living/silicon/pai/proc/unshort_radio()
+ radio_short = FALSE
+ to_chat(src, "You feel your radio is operational once more.")
+ if(radio_short_timerid)
+ deltimer(radio_short_timerid)
+
/mob/living/silicon/pai/proc/initialize_dynamic_chassis_icons()
. = list()
var/icon/curr //for inserts
diff --git a/code/modules/mob/living/silicon/pai/pai_shell.dm b/code/modules/mob/living/silicon/pai/pai_shell.dm
index e79295fca4..6e8c3911fc 100644
--- a/code/modules/mob/living/silicon/pai/pai_shell.dm
+++ b/code/modules/mob/living/silicon/pai/pai_shell.dm
@@ -12,12 +12,11 @@
. = fold_in(force)
return
- if(emittersemicd)
+ if(world_time < emitter_next_use)
to_chat(src, "Error: Holochassis emitters recycling. Please try again later.")
return FALSE
- emittersemicd = TRUE
- addtimer(CALLBACK(src, .proc/emittercool), emittercd)
+ emitter_next_use = world_time + emittercd
canmove = TRUE
density = TRUE
if(istype(card.loc, /obj/item/pda))
@@ -46,20 +45,17 @@
visible_message("[src] folds out its holochassis emitter and forms a holoshell around itself!")
holoform = TRUE
-/mob/living/silicon/pai/proc/emittercool()
- emittersemicd = FALSE
-
/mob/living/silicon/pai/proc/fold_in(force = FALSE)
- emittersemicd = TRUE
- if(!force)
- addtimer(CALLBACK(src, .proc/emittercool), emittercd)
- else
- addtimer(CALLBACK(src, .proc/emittercool), emitteroverloadcd)
+ emitter_next_use = world_time + (force? emitteroverloadcd : emittercd)
icon_state = "[chassis]"
if(!holoform)
. = fold_out(force)
return
- visible_message("[src] deactivates its holochassis emitter and folds back into a compact card!")
+ if(force)
+ short_radio()
+ visible_message("[src] shorts out, collapsing back into their storage card, sparks emitted from their radio antenna!")
+ else
+ visible_message("[src] deactivates its holochassis emitter and folds back into a compact card!")
stop_pulling()
if(client)
client.perspective = EYE_PERSPECTIVE
diff --git a/code/modules/mob/living/silicon/pai/say.dm b/code/modules/mob/living/silicon/pai/say.dm
index 9f07900a25..31440f5473 100644
--- a/code/modules/mob/living/silicon/pai/say.dm
+++ b/code/modules/mob/living/silicon/pai/say.dm
@@ -5,4 +5,10 @@
..(message)
/mob/living/silicon/pai/binarycheck()
- return 0
+ return FALSE
+
+/mob/living/silicon/pai/radio()
+ if(radio_short)
+ to_chat(src, "Your radio is shorted out!")
+ return ITALICS | REDUCE_RANGE
+ return ..()
diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm
index 9882d028d1..b0555ec6de 100644
--- a/code/modules/mob/living/silicon/pai/software.dm
+++ b/code/modules/mob/living/silicon/pai/software.dm
@@ -283,7 +283,10 @@
dat += "Refresh
"
// Built-in
dat += "Directives
"
- dat += "Radio Configuration
"
+ if(radio_shorted)
+ dat += "\[RADIO SHORTED - Recalibrating!\]"
+ else
+ dat += "Radio Configuration
"
dat += "Screen Display
"
//dat += "Text Messaging
"
dat += "
"