[READY FOR REVIEW] ports AI shells from Hispania and /tg/ (#32072)

* initial commit

* dme include

* add shell actions

* debug round 1

* debug round 2

* cleanup

* better comment

* cleanup?

* fixes

* fixes 2

* cleanup 2

* cleanup 3

* adds comments from wich repo they were ported

* updatehealth change

* notify to define

* tguification

* spannening

* BORIS fixes

* BORIS fix final

* better comments

* icons

* radio fix, tg lable, status order

* PDA, syndie key fix

* soullink port completion

* possiblle uid fix

* channel redundancy removed

* upadtehealth fix

* notification de-duplication

* cleanup

* null checks

* more null checks, updatehealth fix, better destroy()

* more spanenming

* cell fix

* null checks, better updatehealth, radio fix?

* mech fixes

* removed redundancy, fix else if chain

* Apply suggestions from code review part 1

Co-authored-by: CRUNCH <143041327+CRUNCH-Borg@users.noreply.github.com>
Signed-off-by: Kameň <167246105+StoneyFox29@users.noreply.github.com>

* Code Review part 2

Co-authored-by: CRUNCH <143041327+CRUNCH-Borg@users.noreply.github.com>

* I forgor

Co-authored-by: CRUNCH <143041327+CRUNCH-Borg@users.noreply.github.com>

* Post review runtime fixes, removed more annotations, bettered some comments

* verb un-funkening, possible CI fix

* null check order, comment

* SPAN, minor fix

* CI part 2

* CI part 3

* CI part 4, made on iphone

* Apply suggestions from myself

Co-authored-by: Kameň <167246105+StoneyFox29@users.noreply.github.com>
Signed-off-by: Kameň <167246105+StoneyFox29@users.noreply.github.com>

* soulinks, removing a verb, module reset changes,

* better documentation, name changes

* updatehealth improvement

* spawn_shell fix

* fixes shell_spawn fix

* attack chain something, merge conflict

* grammar, BORIS module improvement

* shttle fix, early return

* formatting

* BORIS comment

* Apply suggestions from code review

Co-authored-by: CRUNCH <143041327+CRUNCH-Borg@users.noreply.github.com>
Signed-off-by: Kameň <167246105+StoneyFox29@users.noreply.github.com>

* name change

* bug report fix

* slightly better bug fix

* prevent the dropping of the BORIS module on reset upgrade

* typo fix

* wire order fix

* makes emagging a shell drop the BORIS again

* moving boris to misc category

* makes the BORIS show up on mechfab

---------

Signed-off-by: Kameň <167246105+StoneyFox29@users.noreply.github.com>
Co-authored-by: TobiasHC2009 <167246105+TobiasHC2009@users.noreply.github.com>
Co-authored-by: CRUNCH <143041327+CRUNCH-Borg@users.noreply.github.com>
This commit is contained in:
Kameň
2026-08-29 00:26:53 +00:00
committed by GitHub
co-authored by CRUNCH TobiasHC2009
parent 83ada1355f
commit edee60476d
34 changed files with 588 additions and 54 deletions
@@ -515,4 +515,12 @@
qdel(keyslot1)
keyslot1 = new /obj/item/encryptionkey/syndicate
syndiekey = keyslot1
syndie = TRUE
recalculateChannels()
/obj/item/radio/borg/proc/make_syndie()
qdel(keyslot)
keyslot = new /obj/item/encryptionkey/syndicate
syndiekey = keyslot
syndie = TRUE
recalculateChannels()
@@ -61,6 +61,8 @@ GLOBAL_LIST_EMPTY(deadsay_radio_systems)
var/obj/item/encryptionkey/syndicate/syndiekey = null
/// How many times this is disabled by EMPs
var/disable_timer = 0
/// Is the radio a syndie one?
var/syndie = FALSE
/// Areas in which this radio cannot send messages
var/static/list/blacklisted_areas = list(/area/adminconstruction, /area/tdome, /area/ruin/space/bubblegum_arena)
@@ -343,6 +343,40 @@
to_chat(user, SPAN_WARNING("The MMI must go in after everything else!"))
return ITEM_INTERACT_COMPLETE
if(istype(used, /obj/item/borg/upgrade/ai))
var/obj/item/borg/upgrade/ai/M = used
if(check_completion())
if(!isturf(loc))
to_chat(user, SPAN_WARNING("You cannot install [M], the frame has to be standing on the ground to be perfectly precise!"))
return ITEM_INTERACT_COMPLETE
if(!user.drop_item())
to_chat(user, SPAN_WARNING("[M] is stuck to your hand!"))
return ITEM_INTERACT_COMPLETE
qdel(M)
var/mob/living/silicon/robot/O = new /mob/living/silicon/robot/shell(get_turf(src))
if(!aisync)
lawsync = FALSE
O.connected_ai = null
else
if(forced_ai)
O.connected_ai = forced_ai
O.notify_ai(AI_SHELL)
if(!lawsync)
O.lawupdate = FALSE
O.make_laws()
var/datum/robot_component/cell_component = O.components["power cell"]
cell_component.install(chest.cell)
chest.cell = null
O.locked = panel_locked
O.job = "Cyborg"
forceMove(O)
O.robot_suit = src
if(!locomotion)
O.lockcharge = TRUE
O.update_stamina_hud()
return ITEM_INTERACT_COMPLETE
if(is_pen(used))
to_chat(user, SPAN_WARNING("You need to use a multitool to name [src]!"))
return ITEM_INTERACT_COMPLETE
@@ -132,7 +132,7 @@
if(!R.allow_rename)
to_chat(R, SPAN_WARNING("Internal diagnostic error: incompatible upgrade module detected."))
return
R.notify_ai(3, R.name, heldname)
R.notify_ai(RENAME, R.name, heldname)
R.name = heldname
R.custom_name = heldname
R.real_name = heldname
@@ -160,7 +160,7 @@
R.set_stat(CONSCIOUS)
GLOB.dead_mob_list -= R //please never forget this ever kthx
GLOB.alive_mob_list += R
R.notify_ai(1)
R.notify_ai(NEW_BORG)
return TRUE
@@ -552,3 +552,17 @@
/obj/item/reagent_containers/spray/cleaner/safety/abductor,
/obj/item/lightreplacer/bluespace/abductor
)
// MARK: B.O.R.I.S.
/obj/item/borg/upgrade/ai
name = "B.O.R.I.S. module"
desc = "Bluespace Optimized Remote Intelligence Synchronization. An uplink device which takes the place of an MMI in cyborg endoskeletons, creating a robotic shell controlled by an AI."
icon_state = "bluespacearray"
origin_tech = "engineering=3;magnets=4;programming=5"
var/alien = FALSE // This is an incredibely scuffed way to do this, but it works.
var/syndiemmi = FALSE
var/brainmob = null
/obj/item/borg/upgrade/ai/action(mob/living/silicon/robot/R)
to_chat(usr, SPAN_NOTICE("The B.O.R.I.S. module can only be installed into an endoskeleton.")) // Since the BORIS module is an upgrade that acts as an MMI.
return