From bb6a263e2ff047dd111b93bba46257adca47429f Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Fri, 7 Feb 2025 18:30:20 +0100 Subject: [PATCH] organs NEW to INIT (#17050) Co-authored-by: Cameron Lennox --- code/modules/identification/item_procs.dm | 2 +- .../carbon/human/species/station/alraune.dm | 4 +- code/modules/organs/internal/brain.dm | 43 ++++++------ code/modules/organs/internal/eyes.dm | 18 ++--- code/modules/organs/internal/heart.dm | 14 ++-- code/modules/organs/internal/kidneys.dm | 14 ++-- code/modules/organs/internal/liver.dm | 14 ++-- code/modules/organs/internal/lungs.dm | 14 ++-- code/modules/organs/internal/voicebox.dm | 12 ++-- code/modules/organs/organ.dm | 40 +++++------ code/modules/organs/subtypes/machine.dm | 15 ++-- code/modules/organs/subtypes/xenos.dm | 70 +++++++++++-------- 12 files changed, 143 insertions(+), 117 deletions(-) diff --git a/code/modules/identification/item_procs.dm b/code/modules/identification/item_procs.dm index b21716bf47..16ac7fd4b0 100644 --- a/code/modules/identification/item_procs.dm +++ b/code/modules/identification/item_procs.dm @@ -4,7 +4,7 @@ var/identity_type = /datum/identification var/init_hide_identity = FALSE // Set to true to automatically obscure the object on initialization. -/obj/item/Initialize() +/obj/item/Initialize(mapload) if(init_hide_identity) identity = new identity_type(src) return ..() diff --git a/code/modules/mob/living/carbon/human/species/station/alraune.dm b/code/modules/mob/living/carbon/human/species/station/alraune.dm index 65673e19b6..251d10d1f1 100644 --- a/code/modules/mob/living/carbon/human/species/station/alraune.dm +++ b/code/modules/mob/living/carbon/human/species/station/alraune.dm @@ -352,8 +352,8 @@ var/mob/living/organ_owner = null var/gen_cost = 0.5 -/obj/item/organ/internal/fruitgland/New() - ..() +/obj/item/organ/internal/fruitgland/Initialize(mapload, internal) + . = ..() create_reagents(usable_volume) diff --git a/code/modules/organs/internal/brain.dm b/code/modules/organs/internal/brain.dm index 9ec9aae74c..ddc0bec59e 100644 --- a/code/modules/organs/internal/brain.dm +++ b/code/modules/organs/internal/brain.dm @@ -78,16 +78,19 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain) tmp_owner.internal_organs_by_name[organ_tag] = new replace_path(tmp_owner, 1) tmp_owner = null -/obj/item/organ/internal/brain/New() +/obj/item/organ/internal/brain/Initialize(mapload) ..() health = CONFIG_GET(number/default_brain_health) defib_timer = (CONFIG_GET(number/defib_timer) MINUTES) / 20 // Time vars measure things in ticks. Life tick happens every ~2 seconds, therefore dividing by 20 - spawn(5) - if(brainmob) - butcherable = FALSE + return INITIALIZE_HINT_LATELOAD - if(brainmob.client) - brainmob.client.screen.len = null //clear the hud +/obj/item/organ/internal/brain/LateInitialize() + . = ..() + if(brainmob) + butcherable = FALSE + + if(brainmob.client) + brainmob.client.screen.len = null //clear the hud /obj/item/organ/internal/brain/Destroy() if(brainmob && brainmob.dna) @@ -194,14 +197,16 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain) /obj/item/organ/internal/brain/slime/is_open_container() return 1 -/obj/item/organ/internal/brain/slime/New() - ..() +/obj/item/organ/internal/brain/slime/Initialize(mapload) + . = ..() create_reagents(50) - var/mob/living/carbon/human/H = null - spawn(15) //Match the core to the Promethean's starting color. - if(ishuman(owner)) - H = owner - color = rgb(min(H.r_skin + 40, 255), min(H.g_skin + 40, 255), min(H.b_skin + 40, 255)) + +/obj/item/organ/internal/brain/slime/LateInitialize() + . = ..() + //Match the core to the Promethean's starting color. + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + color = rgb(min(H.r_skin + 40, 255), min(H.g_skin + 40, 255), min(H.b_skin + 40, 255)) /obj/item/organ/internal/brain/slime/removed(var/mob/living/user) if(istype(owner)) @@ -314,10 +319,8 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain) desc = "A piece of juicy meat found in a person's head. This one is strange." icon_state = "brain_grey" -/obj/item/organ/internal/brain/grey/colormatch/New() - ..() - var/mob/living/carbon/human/H = null - spawn(15) - if(ishuman(owner)) - H = owner - color = H.species.blood_color +/obj/item/organ/internal/brain/grey/colormatch/LateInitialize() + . = ..() + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + color = H.species.blood_color diff --git a/code/modules/organs/internal/eyes.dm b/code/modules/organs/internal/eyes.dm index 47441d3d89..89b2c0fb5b 100644 --- a/code/modules/organs/internal/eyes.dm +++ b/code/modules/organs/internal/eyes.dm @@ -15,20 +15,22 @@ /obj/item/organ/internal/eyes/robot name = "optical sensor" -/obj/item/organ/internal/eyes/robot/New() - ..() +/obj/item/organ/internal/eyes/robot/Initialize(mapload, internal) + . = ..() robotize() /obj/item/organ/internal/eyes/grey icon_state = "eyes_grey" -/obj/item/organ/internal/eyes/grey/colormatch/New() +/obj/item/organ/internal/eyes/grey/colormatch/Initialize(mapload, internal) ..() - var/mob/living/carbon/human/H = null - spawn(15) - if(ishuman(owner)) - H = owner - color = H.species.blood_color + return INITIALIZE_HINT_LATELOAD + +/obj/item/organ/internal/eyes/grey/colormatch/LateInitialize() + . = ..() + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + color = H.species.blood_color /obj/item/organ/internal/eyes/proc/change_eye_color() set name = "Change Eye Color" diff --git a/code/modules/organs/internal/heart.dm b/code/modules/organs/internal/heart.dm index 02ff5f21d2..6a661f23e3 100644 --- a/code/modules/organs/internal/heart.dm +++ b/code/modules/organs/internal/heart.dm @@ -28,13 +28,15 @@ icon_state = "heart_grey-on" dead_icon = "heart_grey-off" -/obj/item/organ/internal/heart/grey/colormatch/New() +/obj/item/organ/internal/heart/grey/colormatch/Initialize(mapload, internal) ..() - var/mob/living/carbon/human/H = null - spawn(15) - if(ishuman(owner)) - H = owner - color = H.species.blood_color + return INITIALIZE_HINT_LATELOAD + +/obj/item/organ/internal/heart/grey/colormatch/LateInitialize() + . = ..() + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + color = H.species.blood_color /obj/item/organ/internal/heart/machine name = "hydraulic hub" diff --git a/code/modules/organs/internal/kidneys.dm b/code/modules/organs/internal/kidneys.dm index 141d249d57..b53f7be09f 100644 --- a/code/modules/organs/internal/kidneys.dm +++ b/code/modules/organs/internal/kidneys.dm @@ -44,10 +44,12 @@ /obj/item/organ/internal/kidneys/grey icon_state = "kidneys_grey" -/obj/item/organ/internal/kidneys/grey/colormatch/New() +/obj/item/organ/internal/kidneys/grey/colormatch/Initialize(mapload, internal) ..() - var/mob/living/carbon/human/H = null - spawn(15) - if(ishuman(owner)) - H = owner - color = H.species.blood_color + return INITIALIZE_HINT_LATELOAD + +/obj/item/organ/internal/kidneys/grey/colormatch/LateInitialize() + . = ..() + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + color = H.species.blood_color diff --git a/code/modules/organs/internal/liver.dm b/code/modules/organs/internal/liver.dm index 75e3f8dec6..51fd647c80 100644 --- a/code/modules/organs/internal/liver.dm +++ b/code/modules/organs/internal/liver.dm @@ -59,10 +59,12 @@ /obj/item/organ/internal/liver/grey icon_state = "liver_grey" -/obj/item/organ/internal/liver/grey/colormatch/New() +/obj/item/organ/internal/liver/grey/colormatch/Initialize(mapload, internal) ..() - var/mob/living/carbon/human/H = null - spawn(15) - if(ishuman(owner)) - H = owner - color = H.species.blood_color + return INITIALIZE_HINT_LATELOAD + +/obj/item/organ/internal/liver/grey/colormatch/LateInitialize() + . = ..() + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + color = H.species.blood_color diff --git a/code/modules/organs/internal/lungs.dm b/code/modules/organs/internal/lungs.dm index 6e93222b2d..06c1e2c0aa 100644 --- a/code/modules/organs/internal/lungs.dm +++ b/code/modules/organs/internal/lungs.dm @@ -61,10 +61,12 @@ /obj/item/organ/internal/lungs/grey icon_state = "lungs_grey" -/obj/item/organ/internal/lungs/grey/colormatch/New() +/obj/item/organ/internal/lungs/grey/colormatch/Initialize(mapload, internal) ..() - var/mob/living/carbon/human/H = null - spawn(15) - if(owner && ishuman(owner)) - H = owner - color = H.species.blood_color + return INITIALIZE_HINT_LATELOAD + +/obj/item/organ/internal/lungs/grey/colormatch/LateInitialize() + . = ..() + if(owner && ishuman(loc)) + var/mob/living/carbon/human/H = loc + color = H.species.blood_color diff --git a/code/modules/organs/internal/voicebox.dm b/code/modules/organs/internal/voicebox.dm index a9bad7dcd8..70cd8227fa 100644 --- a/code/modules/organs/internal/voicebox.dm +++ b/code/modules/organs/internal/voicebox.dm @@ -12,8 +12,8 @@ will_assist_languages = list(LANGUAGE_GALCOM) var/mute = FALSE -/obj/item/organ/internal/voicebox/New() - ..() +/obj/item/organ/internal/voicebox/Initialize(mapload, internal) + . = ..() amend_assist_langs() /obj/item/organ/internal/voicebox/proc/amend_assist_langs() // Adds the list of language datums assisted by the voicebox to the list used in speaking @@ -30,14 +30,14 @@ /obj/item/organ/internal/voicebox/assist // In the off chance we get a species that doesn't speak GalCom by default -/obj/item/organ/internal/voicebox/assist/New() - ..() +/obj/item/organ/internal/voicebox/assist/Initialize(mapload, internal) + . = ..() mechassist() /obj/item/organ/internal/voicebox/robot name = "vocal synthesizer" will_assist_languages = list(LANGUAGE_GALCOM, LANGUAGE_EAL) // Synthetics spawn with this by default -/obj/item/organ/internal/voicebox/robot/New() - ..() +/obj/item/organ/internal/voicebox/robot/Initialize(mapload, internal) + . = ..() robotize() diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index 04dcf8e3a3..4a2f81436a 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -62,37 +62,37 @@ var/list/organ_cache = list() /obj/item/organ/proc/update_health() return -/obj/item/organ/New(var/mob/living/holder, var/internal) - ..(holder) +/obj/item/organ/Initialize(mapload, var/internal) + . = ..() create_reagents(5) - if(isliving(holder)) - src.owner = holder - src.w_class = max(src.w_class + mob_size_difference(holder.mob_size, MOB_MEDIUM), 1) //smaller mobs have smaller organs. + if(isliving(loc)) + src.owner = loc + src.w_class = max(src.w_class + mob_size_difference(owner.mob_size, MOB_MEDIUM), 1) //smaller mobs have smaller organs. if(internal) - if(!LAZYLEN(holder.internal_organs)) - holder.internal_organs = list() - if(!LAZYLEN(holder.internal_organs_by_name)) - holder.internal_organs_by_name = list() + if(!LAZYLEN(owner.internal_organs)) + owner.internal_organs = list() + if(!LAZYLEN(owner.internal_organs_by_name)) + owner.internal_organs_by_name = list() - holder.internal_organs |= src - holder.internal_organs_by_name[organ_tag] = src + owner.internal_organs |= src + owner.internal_organs_by_name[organ_tag] = src else - if(!LAZYLEN(holder.organs)) - holder.organs = list() - if(!LAZYLEN(holder.organs_by_name)) - holder.organs_by_name = list() + if(!LAZYLEN(owner.organs)) + owner.organs = list() + if(!LAZYLEN(owner.organs_by_name)) + owner.organs_by_name = list() - holder.organs |= src - holder.organs_by_name[organ_tag] = src + owner.organs |= src + owner.organs_by_name[organ_tag] = src if(!max_damage) max_damage = min_broken_damage * 2 - if(iscarbon(holder)) - var/mob/living/carbon/C = holder + if(iscarbon(owner)) + var/mob/living/carbon/C = owner species = GLOB.all_species[SPECIES_HUMAN] - if(holder.dna) + if(owner.dna) qdel_swap(dna, C.dna.Clone()) species = C.species else diff --git a/code/modules/organs/subtypes/machine.dm b/code/modules/organs/subtypes/machine.dm index 7cdff12d42..2f133ff9a6 100644 --- a/code/modules/organs/subtypes/machine.dm +++ b/code/modules/organs/subtypes/machine.dm @@ -7,9 +7,9 @@ vital = 1 var/defib_timer = 1 // This sits in the brain organ slot, but is not a brain. -/obj/item/organ/internal/cell/New() +/obj/item/organ/internal/cell/Initialize(mapload, internal) robotize() - ..() + . = ..() /obj/item/organ/internal/cell/replaced() ..() @@ -46,16 +46,19 @@ stored_mmi = null return ..() -/obj/item/organ/internal/mmi_holder/New(var/mob/living/carbon/human/new_owner, var/internal, var/obj/item/mmi/installed) - ..(new_owner, internal) - var/mob/living/carbon/human/dummy/mannequin/M = new_owner +/obj/item/organ/internal/mmi_holder/Initialize(mapload, var/internal, var/obj/item/mmi/installed) + ..(mapload, internal) + var/mob/living/carbon/human/dummy/mannequin/M = loc if(istype(M)) return if(installed) stored_mmi = installed else stored_mmi = new brain_type(src) - sleep(-1) + return INITIALIZE_HINT_LATELOAD + +/obj/item/organ/internal/mmi_holder/LateInitialize() + . = ..() update_from_mmi() // This sits in the brain organ slot, but is not a brain. Posibrains and dronecores aren't brains either. diff --git a/code/modules/organs/subtypes/xenos.dm b/code/modules/organs/subtypes/xenos.dm index 632dedc83f..5a394773ed 100644 --- a/code/modules/organs/subtypes/xenos.dm +++ b/code/modules/organs/subtypes/xenos.dm @@ -13,13 +13,15 @@ /obj/item/organ/internal/xenos/eggsac/grey icon_state = "sac_grey" -/obj/item/organ/internal/xenos/eggsac/grey/colormatch/New() +/obj/item/organ/internal/xenos/eggsac/grey/colormatch/Initialize(mapload, internal) ..() - var/mob/living/carbon/human/H = null - spawn(15) - if(ishuman(owner)) - H = owner - color = H.species.blood_color + return INITIALIZE_HINT_LATELOAD + +/obj/item/organ/internal/xenos/eggsac/grey/colormatch/LateInitialize() + . = ..() + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + color = H.species.blood_color /obj/item/organ/internal/xenos/plasmavessel name = "plasma vessel" @@ -54,13 +56,15 @@ icon_state = "plasma_grey" stored_plasma = 200 -/obj/item/organ/internal/xenos/plasmavessel/grey/colormatch/New() +/obj/item/organ/internal/xenos/plasmavessel/grey/colormatch/Initialize(mapload, internal) ..() - var/mob/living/carbon/human/H = null - spawn(15) - if(ishuman(owner)) - H = owner - color = H.species.blood_color + return INITIALIZE_HINT_LATELOAD + +/obj/item/organ/internal/xenos/plasmavessel/grey/colormatch/LateInitialize() + . = ..() + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + color = H.species.blood_color /obj/item/organ/internal/xenos/plasmavessel/queen name = "bloated plasma vessel" @@ -91,13 +95,15 @@ /obj/item/organ/internal/xenos/acidgland/grey icon_state = "acidgland_grey" -/obj/item/organ/internal/xenos/acidgland/grey/colormatch/New() +/obj/item/organ/internal/xenos/acidgland/grey/colormatch/Initialize(mapload, internal) ..() - var/mob/living/carbon/human/H = null - spawn(15) - if(ishuman(owner)) - H = owner - color = H.species.blood_color + return INITIALIZE_HINT_LATELOAD + +/obj/item/organ/internal/xenos/acidgland/grey/colormatch/LateInitialize() + . = ..() + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + color = H.species.blood_color /obj/item/organ/internal/xenos/hivenode name = "hive node" @@ -108,13 +114,15 @@ /obj/item/organ/internal/xenos/hivenode/grey icon_state = "xenode_grey" -/obj/item/organ/internal/xenos/hivenode/grey/colormatch/New() +/obj/item/organ/internal/xenos/hivenode/grey/colormatch/Initialize(mapload, internal) ..() - var/mob/living/carbon/human/H = null - spawn(15) - if(ishuman(owner)) - H = owner - color = H.species.blood_color + return INITIALIZE_HINT_LATELOAD + +/obj/item/organ/internal/xenos/hivenode/grey/colormatch/LateInitialize() + . = ..() + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + color = H.species.blood_color /obj/item/organ/internal/xenos/resinspinner name = "resin spinner" @@ -130,13 +138,15 @@ /obj/item/organ/internal/xenos/resinspinner/grey icon_state = "xenode_grey" -/obj/item/organ/internal/xenos/resinspinner/grey/colormatch/New() +/obj/item/organ/internal/xenos/resinspinner/grey/colormatch/Initialize(mapload, internal) ..() - var/mob/living/carbon/human/H = null - spawn(15) - if(ishuman(owner)) - H = owner - color = H.species.blood_color + return INITIALIZE_HINT_LATELOAD + +/obj/item/organ/internal/xenos/resinspinner/grey/colormatch/LateInitialize() + . = ..() + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + color = H.species.blood_color // XENOMORPH EXTERNAL ORGANS