Files
Aurora.3/code/datums/wires/robot.dm
BatrachophrenoandGitHub c92d909534 Wires Panel and Signaler Expansion (#22846)
Fleshes out wire panel skill behavior and signaler management.

Electrical Engineering 4 was very OP for revealing all wire labels of
all machines, and it was super fun while it lasted.

Wire panels now have associated skills with their use, and increased
skill ranks will increase the proportion of wires (chosen at random)
that are easily recognizable on sight for certain types of wiring
panels.
**Professional:** 75% revealed
**Trained:** 50% revealed
**Familiar:** 30% revealed
_(note: having both Electrical and Mechanical engineering at least
Trained gives you that baseline 30%, reflecting how your knowledge can
probably translate to decent guesswork.)_

The following wire panels are affected:
**Electrical Engineering:**
- APCs
- Cameras
- IFF Beacons
- Radios
- Smartfridges
- SMES Units

**Mechanical Engineering**
- Airlocks
- Disposal Units
- Fabricators
- Vending Machines

**Atmospherics Systems**
- Air Alarms

**Reactor Systems**
- Particle Accelerator Control Boxes (lol)

**Robotics**
- Hardsuits
- Suit Storage Units (sharing the love is all)
- Robots
- Tag Scanners

**Xenobiology**
- Stasis Cages

Also, I made it possible to blow out all the lights in an APC's area by
snipping the power regulator cable and then pulsing the lights wire.
Great for signalers.

Speaking of signalers, new app deployed to all Engineering, Research,
and Robotics personal modular computers:
<img width="816" height="722" alt="Screenshot 2026-07-14 144049"
src="https://github.com/user-attachments/assets/3d588712-ebfd-47ac-b699-7cdac2c04907"
/>

Self-explanatory. Please only use corporate-provided software for
behavior within your contract regulations.
2026-07-26 18:05:15 +00:00

80 lines
2.4 KiB
Plaintext

/datum/wires/robot
proper_name = "Synthetic"
holder_type = /mob/living/silicon/robot
associated_skill = ROBOTICS_SKILL_COMPONENT
/datum/wires/robot/New()
wires = list(
WIRE_LAWSYNC,
WIRE_AI,
WIRE_CAMERA,
WIRE_LOCKDOWN
)
add_duds(2)
..()
/datum/wires/robot/get_status()
var/mob/living/silicon/robot/R = holder
. = ..()
. += "[(R.law_update ? "The LawSync light is on." : "The LawSync light is off.")]"
. += "[(R.connected_ai ? "The AI link light is on." : "The AI link light is off.")]"
. += "[((!isnull(R.camera) && R.camera.status == 1) ? "The Camera light is on." : "The Camera light is off.")]"
. += "[(R.lock_charge ? "The lockdown light is on." : "The lockdown light is off.")]"
/datum/wires/robot/on_cut(wire, mend, source)
var/mob/living/silicon/robot/R = holder
switch(wire)
if(WIRE_LAWSYNC) //Cut the law wire, and the borg will no longer receive law updates from its AI
if(!mend)
if (R.law_update == 1)
to_chat(R, "LawSync protocol engaged.")
R.show_laws()
else
if (R.law_update == 0 && !R.emagged)
R.law_update = 1
if (WIRE_AI) //Cut the AI wire to reset AI control
if(!mend)
R.disconnect_from_ai()
if (WIRE_CAMERA)
if(!isnull(R.camera) && !R.scrambled_codes)
R.camera.status = mend
R.camera.kick_viewers() // Will kick anyone who is watching the Cyborg's camera.
if(WIRE_LAWSYNC) //Forces a law update if the borg is set to receive them. Since an update would happen when the borg checks its laws anyway, not much use, but eh
if (R.law_update)
R.lawsync()
if(WIRE_LOCKDOWN)
R.SetLockdown(!mend)
/datum/wires/robot/on_pulse(wire)
var/mob/living/silicon/robot/R = holder
switch(wire)
if (WIRE_AI) //pulse the AI wire to make the borg reselect an AI
if(!R.emagged)
var/mob/living/silicon/ai/new_ai = select_active_ai(R)
R.connect_to_ai(new_ai)
if (WIRE_CAMERA)
if(!isnull(R.camera) && R.camera.can_use() && !R.scrambled_codes)
R.camera.kick_viewers() // Kick anyone watching the Cyborg's camera
R.visible_message("[R]'s camera lense focuses loudly.")
to_chat(R, "Your camera lense focuses loudly.")
if(WIRE_LOCKDOWN)
R.SetLockdown(!R.lock_charge) // Toggle
/datum/wires/robot/interactable(mob/user)
if(!..())
return FALSE
var/mob/living/silicon/robot/R = holder
if(R.wires_exposed)
return TRUE
return FALSE
/datum/wires/robot/proc/LockedCut()
return is_cut(WIRE_LOCKDOWN)