From 937e2516832180c9dfbe9e33dd3f8f3b13fb04d2 Mon Sep 17 00:00:00 2001
From: Toastical <20125180+Toastical@users.noreply.github.com>
Date: Sun, 17 May 2026 13:37:33 +0300
Subject: [PATCH] migrate /mob/living/silicon to Initialize() (#31934)
* migrate /mob/living/silicon to Initialize()
* fix some arg calls for spawning borgs
* remove even more args from robot Initialize
---
.../items/devices/radio/radio_objects.dm | 2 --
code/game/objects/items/robot/robot_parts.dm | 2 +-
code/modules/mob/living/silicon/ai/ai_mob.dm | 13 ++++++-------
.../living/silicon/robot/drone/maint_drone.dm | 6 +++---
.../mob/living/silicon/robot/robot_mob.dm | 19 +++++++++----------
.../living/silicon/robot/syndicate_robot.dm | 10 +++++-----
.../modules/mob/living/silicon/silicon_mob.dm | 13 +++++--------
code/modules/mob/transform_procs.dm | 2 +-
8 files changed, 30 insertions(+), 37 deletions(-)
diff --git a/code/game/objects/items/devices/radio/radio_objects.dm b/code/game/objects/items/devices/radio/radio_objects.dm
index ba539dcd0e3..9a83baf284d 100644
--- a/code/game/objects/items/devices/radio/radio_objects.dm
+++ b/code/game/objects/items/devices/radio/radio_objects.dm
@@ -732,8 +732,6 @@ GLOBAL_LIST_EMPTY(deadsay_radio_systems)
for(var/ch_name in channels)
- if(!SSradio)
- sleep(30) // Waiting for SSradio to be created.
if(!SSradio)
name = "broken radio"
return
diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index 413554c23d0..469cd64c3ce 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -264,7 +264,7 @@
if(!aisync)
lawsync = FALSE
- var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(loc), unfinished = 1, connect_to_AI = aisync, ai_to_sync_to = forced_ai)
+ var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(loc), aisync, forced_ai)
if(!O)
return
diff --git a/code/modules/mob/living/silicon/ai/ai_mob.dm b/code/modules/mob/living/silicon/ai/ai_mob.dm
index a6d19861310..4ab7de2d271 100644
--- a/code/modules/mob/living/silicon/ai/ai_mob.dm
+++ b/code/modules/mob/living/silicon/ai/ai_mob.dm
@@ -184,7 +184,8 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
remove_verb(src, GLOB.ai_verbs_default)
remove_verb(src, silicon_subsystems)
-/mob/living/silicon/ai/New(loc, datum/ai_laws/L, obj/item/mmi/B, safety = 0)
+/mob/living/silicon/ai/Initialize(mapload, datum/ai_laws/L, obj/item/mmi/B, safety = 0)
+ . = ..()
announcer = new(config_type = /datum/announcement_configuration/ai)
announcer.author = name
@@ -266,8 +267,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
on_mob_init()
- spawn(5)
- new /obj/machinery/ai_powersupply(src)
+ addtimer(CALLBACK(src, PROC_REF(create_power_supply)), 5 DECISECONDS)
eyeobj = new /mob/camera/eye/ai(loc, name, src, src)
@@ -283,12 +283,11 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
for(var/I in 1 to 4)
stored_locations += "unset" //This is checked in ai_keybinds.dm.
- ..()
-
-/mob/living/silicon/ai/Initialize(mapload)
- . = ..()
REMOVE_TRAIT(src, TRAIT_CAN_STRIP, TRAIT_GENERIC)
+/mob/living/silicon/ai/proc/create_power_supply()
+ new /obj/machinery/ai_powersupply(src)
+
/mob/living/silicon/ai/Destroy()
GLOB.ai_list -= src
GLOB.shuttle_caller_list -= src
diff --git a/code/modules/mob/living/silicon/robot/drone/maint_drone.dm b/code/modules/mob/living/silicon/robot/drone/maint_drone.dm
index 3f370376e52..5c2a8939bb6 100644
--- a/code/modules/mob/living/silicon/robot/drone/maint_drone.dm
+++ b/code/modules/mob/living/silicon/robot/drone/maint_drone.dm
@@ -57,8 +57,8 @@
/mob/living/silicon/proc/subsystem_power_monitor)
-/mob/living/silicon/robot/drone/New()
- ..()
+/mob/living/silicon/robot/drone/Initialize(mapload, connect_to_AI, mob/living/silicon/ai/ai_to_sync_to)
+ . = ..()
remove_language("Robot Talk")
remove_language("Galactic Common")
@@ -112,7 +112,7 @@
// Drones have laws to not attack people
ADD_TRAIT(src, TRAIT_PACIFISM, INNATE_TRAIT)
-/mob/living/silicon/robot/drone/init(alien = FALSE, mob/living/silicon/ai/ai_to_sync_to = null)
+/mob/living/silicon/robot/drone/init(mob/living/silicon/ai/ai_to_sync_to = null)
laws = new /datum/ai_laws/drone()
set_connected_ai(null)
diff --git a/code/modules/mob/living/silicon/robot/robot_mob.dm b/code/modules/mob/living/silicon/robot/robot_mob.dm
index 2a4f8482fe2..4e1dbbd1700 100644
--- a/code/modules/mob/living/silicon/robot/robot_mob.dm
+++ b/code/modules/mob/living/silicon/robot/robot_mob.dm
@@ -169,7 +169,8 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
/mob/living/silicon/robot/get_cell()
return cell
-/mob/living/silicon/robot/New(loc, syndie = FALSE, unfinished = FALSE, alien = FALSE, connect_to_AI = TRUE, mob/living/silicon/ai/ai_to_sync_to = null)
+/mob/living/silicon/robot/Initialize(mapload, connect_to_AI = TRUE, mob/living/silicon/ai/ai_to_sync_to = null)
+ . = ..()
spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, src)
spark_system.attach(src)
@@ -203,8 +204,6 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
var/datum/robot_component/C = components[V]
C.install(new C.external_type, FALSE)
- ..()
-
add_robot_verbs()
// Remove inherited verbs that effectively do nothing for cyborgs, or lead to unintended behaviour.
@@ -216,7 +215,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
var/obj/item/stock_parts/cell/C = cell || new default_cell_type(src)
cell_component.install(C)
- init(alien, connect_to_AI, ai_to_sync_to)
+ init(connect_to_AI, ai_to_sync_to)
diag_hud_set_borgcell()
scanner = new(src)
@@ -234,7 +233,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
if(!has_gravity(T))
new /obj/effect/particle_effect/ion_trails(T, _dir)
-/mob/living/silicon/robot/proc/init(alien, connect_to_AI = TRUE, mob/living/silicon/ai/ai_to_sync_to = null)
+/mob/living/silicon/robot/proc/init(connect_to_AI = TRUE, mob/living/silicon/ai/ai_to_sync_to = null)
aiCamera = new/obj/item/camera/siliconcam/robot_camera(src)
make_laws()
additional_law_channels["Binary"] = ":b "
@@ -1738,7 +1737,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
default_cell_type = /obj/item/stock_parts/cell/bluespace
has_advanced_reagent_vision = TRUE
-/mob/living/silicon/robot/deathsquad/init(alien = FALSE, connect_to_AI = TRUE, mob/living/silicon/ai/ai_to_sync_to = null)
+/mob/living/silicon/robot/deathsquad/init(connect_to_AI = TRUE, mob/living/silicon/ai/ai_to_sync_to = null)
laws = new /datum/ai_laws/deathsquad
module = new /obj/item/robot_module/deathsquad(src)
module.add_languages(src)
@@ -1772,14 +1771,14 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
has_advanced_reagent_vision = TRUE
-/mob/living/silicon/robot/ert/init(alien = FALSE, connect_to_AI = TRUE, mob/living/silicon/ai/ai_to_sync_to = null)
+/mob/living/silicon/robot/ert/init(connect_to_AI = TRUE, mob/living/silicon/ai/ai_to_sync_to = null)
laws = new /datum/ai_laws/ert_override
radio = new /obj/item/radio/borg/ert(src)
radio.recalculateChannels()
aiCamera = new/obj/item/camera/siliconcam/robot_camera(src)
-/mob/living/silicon/robot/ert/New(loc)
- ..(loc)
+/mob/living/silicon/robot/ert/Initialize(mapload, connect_to_AI, mob/living/silicon/ai/ai_to_sync_to)
+ . = ..()
var/rnum = rand(1,1000)
var/borgname = "[eprefix] ERT [rnum]"
name = borgname
@@ -1826,7 +1825,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
default_cell_type = /obj/item/stock_parts/cell/bluespace
has_advanced_reagent_vision = TRUE
-/mob/living/silicon/robot/destroyer/init(alien = FALSE, connect_to_AI = TRUE, mob/living/silicon/ai/ai_to_sync_to = null)
+/mob/living/silicon/robot/destroyer/init(connect_to_AI = TRUE, mob/living/silicon/ai/ai_to_sync_to = null)
aiCamera = new/obj/item/camera/siliconcam/robot_camera(src)
additional_law_channels["Binary"] = ":b "
laws = new /datum/ai_laws/deathsquad
diff --git a/code/modules/mob/living/silicon/robot/syndicate_robot.dm b/code/modules/mob/living/silicon/robot/syndicate_robot.dm
index 745603e96c9..aed1fe2e395 100644
--- a/code/modules/mob/living/silicon/robot/syndicate_robot.dm
+++ b/code/modules/mob/living/silicon/robot/syndicate_robot.dm
@@ -22,11 +22,11 @@
Your cyborg LMG will slowly produce ammunition from your power supply, and your operative pinpointer will find and locate fellow nuclear operatives. \
Help the operatives secure the disk at all costs!"
-/mob/living/silicon/robot/syndicate/New(loc)
- ..()
+/mob/living/silicon/robot/syndicate/Initialize(mapload, connect_to_AI, mob/living/silicon/ai/ai_to_sync_to)
+ . = ..()
cell = new /obj/item/stock_parts/cell/bluespace(src)
-/mob/living/silicon/robot/syndicate/init(alien = FALSE, mob/living/silicon/ai/ai_to_sync_to = null)
+/mob/living/silicon/robot/syndicate/init(mob/living/silicon/ai/ai_to_sync_to = null)
laws = new /datum/ai_laws/syndicate_override
module = new /obj/item/robot_module/syndicate(src)
@@ -59,7 +59,7 @@
Your energy saw functions as a circular saw, but can be activated to deal more damage, and your operative pinpointer will find and locate fellow nuclear operatives. \
Help the operatives secure the disk at all costs!"
-/mob/living/silicon/robot/syndicate/medical/init(alien = FALSE, mob/living/silicon/ai/ai_to_sync_to = null)
+/mob/living/silicon/robot/syndicate/medical/init(mob/living/silicon/ai/ai_to_sync_to = null)
..()
module = new /obj/item/robot_module/syndicate_medical(src)
@@ -84,7 +84,7 @@
Be aware that physical contact or taking damage will break your disguise. \
Help the operatives secure the disk at all costs!"
-/mob/living/silicon/robot/syndicate/saboteur/init(alien = FALSE, mob/living/silicon/ai/ai_to_sync_to = null)
+/mob/living/silicon/robot/syndicate/saboteur/init(mob/living/silicon/ai/ai_to_sync_to = null)
..()
module = new /obj/item/robot_module/syndicate_saboteur(src)
diff --git a/code/modules/mob/living/silicon/silicon_mob.dm b/code/modules/mob/living/silicon/silicon_mob.dm
index 0b96104eabc..11c34b83a24 100644
--- a/code/modules/mob/living/silicon/silicon_mob.dm
+++ b/code/modules/mob/living/silicon/silicon_mob.dm
@@ -83,16 +83,9 @@
/// The delay used when toggling door bolts or electrification
var/door_bolt_delay = 3 SECONDS
-/mob/living/silicon/New()
- GLOB.silicon_mob_list |= src
- ..()
- add_language("Galactic Common")
- init_subsystems()
- RegisterSignal(GLOB.alarm_manager, COMSIG_TRIGGERED_ALARM, PROC_REF(alarm_triggered))
- RegisterSignal(GLOB.alarm_manager, COMSIG_CANCELLED_ALARM, PROC_REF(alarm_cancelled))
-
/mob/living/silicon/Initialize(mapload)
. = ..()
+ GLOB.silicon_mob_list |= src
for(var/hud_key, hud in GLOB.huds)
var/datum/atom_hud/data/diagnostic/diag_hud = hud
if(!istype(diag_hud))
@@ -108,6 +101,10 @@
stack_trace("Invalid type [armor.type] found in .armor during /obj Initialize()")
regenerate_icons()
+ add_language("Galactic Common")
+ init_subsystems()
+ RegisterSignal(GLOB.alarm_manager, COMSIG_TRIGGERED_ALARM, PROC_REF(alarm_triggered))
+ RegisterSignal(GLOB.alarm_manager, COMSIG_CANCELLED_ALARM, PROC_REF(alarm_cancelled))
/mob/living/silicon/med_hud_set_health()
return //we use a different hud
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index b1c40a85c18..468edd55895 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -63,7 +63,7 @@
invisibility = 101
// Creating a new borg here will connect them to a default AI and notify that AI, if `connect_to_default_AI` is TRUE.
- var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(loc, connect_to_AI = connect_to_default_AI)
+ var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(loc, connect_to_default_AI)
// If `AI` is passed in, we want to connect to that AI specifically.
if(AI)