diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 04030093..fb44aa02 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -38,6 +38,8 @@ var/list/unattached_flesh var/flesh_number = 0 + var/size = 1 + /obj/machinery/clonepod/Initialize() . = ..() @@ -61,7 +63,7 @@ QDEL_LIST(unattached_flesh) . = ..() -/obj/machinery/clonepod/RefreshParts() +/obj/machinery/clonepod/RefreshParts() speed_coeff = 0 efficiency = 0 for(var/obj/item/stock_parts/scanning_module/S in component_parts) @@ -126,34 +128,37 @@ return examine(user) //Start growing a human clone in the pod! -/obj/machinery/clonepod/proc/growclone(ckey, clonename, ui, mutation_index, mindref, datum/species/mrace, list/features, factions, list/quirks) +/obj/machinery/clonepod/proc/growclone(ckey, clonename, ui, mutation_index, mindref, datum/species/mrace, list/features, factions, list/quirks, experimental = FALSE) if(panel_open) return FALSE if(mess || attempting) return FALSE - clonemind = locate(mindref) in SSticker.minds - if(!istype(clonemind)) //not a mind - return FALSE - if(!QDELETED(clonemind.current)) - if(clonemind.current.stat != DEAD) //mind is associated with a non-dead body + + //only check for clone's mind if it's not experimental cloning + if(!experimental) + clonemind = locate(mindref) in SSticker.minds + if(!istype(clonemind)) //not a mind return FALSE - if(clonemind.current.suiciding) // Mind is associated with a body that is suiciding. + if(!QDELETED(clonemind.current)) + if(clonemind.current.stat != DEAD) //mind is associated with a non-dead body + return FALSE + if(clonemind.current.suiciding) // Mind is associated with a body that is suiciding. + return FALSE + if(clonemind.active) //somebody is using that mind + if( ckey(clonemind.key)!=ckey ) + return FALSE + else + // get_ghost() will fail if they're unable to reenter their body + var/mob/dead/observer/G = clonemind.get_ghost() + if(!G) + return FALSE + if(G.suiciding) // The ghost came from a body that is suiciding. + return FALSE + if(clonemind.damnation_type) //Can't clone the damned. + INVOKE_ASYNC(src, .proc/horrifyingsound) + mess = TRUE + update_icon() return FALSE - if(clonemind.active) //somebody is using that mind - if( ckey(clonemind.key)!=ckey ) - return FALSE - else - // get_ghost() will fail if they're unable to reenter their body - var/mob/dead/observer/G = clonemind.get_ghost() - if(!G) - return FALSE - if(G.suiciding) // The ghost came from a body that is suiciding. - return FALSE - if(clonemind.damnation_type) //Can't clone the damned. - INVOKE_ASYNC(src, .proc/horrifyingsound) - mess = TRUE - update_icon() - return FALSE attempting = TRUE //One at a time!! countdown.start() @@ -180,15 +185,17 @@ ADD_TRAIT(H, TRAIT_NOCRITDAMAGE, CLONING_POD_TRAIT) H.Unconscious(80) - clonemind.transfer_to(H) + //only transfer consciousness if the clone isn't experimental + if(!experimental) + clonemind.transfer_to(H) - if(grab_ghost_when == CLONER_FRESH_CLONE) - H.grab_ghost() - to_chat(H, "Consciousness slowly creeps over you as your body regenerates.
So this is what cloning feels like?
") + if(grab_ghost_when == CLONER_FRESH_CLONE) + H.grab_ghost() + to_chat(H, "Consciousness slowly creeps over you as your body regenerates.
So this is what cloning feels like?
") - if(grab_ghost_when == CLONER_MATURE_CLONE) - H.ghostize(TRUE) //Only does anything if they were still in their old body and not already a ghost - to_chat(H.get_ghost(TRUE), "Your body is beginning to regenerate in a cloning pod. You will become conscious when it is complete.") + if(grab_ghost_when == CLONER_MATURE_CLONE) + H.ghostize(TRUE) //Only does anything if they were still in their old body and not already a ghost + to_chat(H.get_ghost(TRUE), "Your body is beginning to regenerate in a cloning pod. You will become conscious when it is complete.") if(H) H.faction |= factions @@ -203,6 +210,14 @@ H.suiciding = FALSE attempting = FALSE + //sizecode stuff, check size of scanned individual to then pass in later. someone should turn size into a dna trait tbh + if(mindref) + clonemind = locate(mindref) in SSticker.minds + if(istype(clonemind)) + var/mob/living/current = clonemind.current //gets body of current mind + if(!isnull(current)) + size = current.size_multiplier * 100 + return TRUE //Grow clones to maturity then kick them out. FREELOADERS @@ -381,7 +396,7 @@ //Do the resize on ejection. The clone pod seems to do a lot of matrix transforms the way size code does, so we will handle our resize after. mob_occupant.previous_size = 1 //Set the previous size to default so the resize properly set health and speed. - mob_occupant.custom_body_size = mob_occupant.client.prefs.body_size + mob_occupant.custom_body_size = size //mob_occupant.client.prefs.body_size mob_occupant.resize(mob_occupant.custom_body_size * 0.01) occupant = null diff --git a/code/game/machinery/exp_cloner.dm b/code/game/machinery/exp_cloner.dm index db60a1a4..5343e922 100644 --- a/code/game/machinery/exp_cloner.dm +++ b/code/game/machinery/exp_cloner.dm @@ -9,6 +9,7 @@ internal_radio = FALSE //Start growing a human clone in the pod! +/* /obj/machinery/clonepod/experimental/growclone(ckey, clonename, ui, se, datum/species/mrace, list/features, factions) if(panel_open) return FALSE @@ -71,7 +72,7 @@ H.suiciding = FALSE attempting = FALSE return TRUE - +*/ //Prototype cloning console, much more rudimental and lacks modern functions such as saving records, autocloning, or safety checks. /obj/machinery/computer/prototype_cloning @@ -293,7 +294,29 @@ temp = "Cloning cycle already in progress." playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) else - pod.growclone(null, mob_occupant.real_name, dna.uni_identity, dna.mutation_index, clone_species, dna.features, mob_occupant.faction) + + //disabled vars from how cloning.dm does it + //var/ckey = mob_occupant.ckey + var/name = mob_occupant.real_name + //var/id = copytext_char(md5(mob_occupant.real_name), 2, 6) + //var/UE = dna.unique_enzymes + var/mind = null + var/UI = dna.uni_identity + var/SE = dna.mutation_index + var/features = dna.features + var/factions = mob_occupant.faction + var/list/quirks = list() + + if (!isnull(mob_occupant.mind)) //Save that mind so traitors can continue traitoring after cloning. + mind = "[REF(mob_occupant.mind)]" + + for(var/V in mob_occupant.roundstart_quirks) + var/datum/quirk/T = V + quirks[T.type] = T.clone_data() + + //grows the clone, format; + // ckey, clonename, ui, mutation_index, mindref, datum/species/mrace, list/features, factions, list/quirks, experimental = FALSE + pod.growclone(null, name, UI, SE, mind, clone_species, features, factions, quirks, TRUE) temp = "[mob_occupant.real_name] => Cloning data sent to pod." playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)