From 93b13deed1f4e72c6131eb8fe2e44a66ffb51228 Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Sat, 21 Jun 2025 01:12:07 +0000 Subject: [PATCH] Fixing more dna console / mutation issues [NO GBP] (#91717) --- code/datums/dna.dm | 4 +++- code/datums/mutations/_mutations.dm | 2 +- code/game/machinery/computer/dna_console.dm | 13 +++++++++---- code/game/objects/items/chromosome.dm | 8 ++++---- 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/code/datums/dna.dm b/code/datums/dna.dm index d609ac377ad..0568d7e1b28 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -887,11 +887,13 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) if((!sequence || dna.mutation_in_sequence(mutation.type)) && !dna.get_mutation(mutation.type)) possible += mutation.type possible -= excluded_mutations - return pick(possible) + return length(possible) ? pick(possible) : null //prevent runtimes from picking null ///Gives the mob a random mutation based on the given arguments. /mob/living/carbon/proc/easy_random_mutate(quality = POSITIVE|NEGATIVE|MINOR_NEGATIVE, scrambled = TRUE, sequence = TRUE, list/excluded_mutations = list(/datum/mutation/race)) var/mutation_path = get_random_mutation_path(quality, scrambled, sequence, excluded_mutations) + if(!mutation_path) + return dna.add_mutation(mutation_path, MUTATION_SOURCE_ACTIVATED) if(!scrambled) return diff --git a/code/datums/mutations/_mutations.dm b/code/datums/mutations/_mutations.dm index 4fb170fadab..1773cfd2d92 100644 --- a/code/datums/mutations/_mutations.dm +++ b/code/datums/mutations/_mutations.dm @@ -110,7 +110,7 @@ copy.synchronizer_coeff = synchronizer_coeff copy.power_coeff = power_coeff copy.energy_coeff = energy_coeff - can_chromosome = can_chromosome + copy.can_chromosome = can_chromosome copy.valid_chrom_list = valid_chrom_list update_valid_chromosome_list() diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index f9c2acb9c1d..3c5a30b40c4 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -984,7 +984,12 @@ if(!mutation.scrambled && !(MUTATION_SOURCE_MUTATOR in mutation.sources)) return - scanner_occupant.dna.remove_mutation(mutation.type, MUTATION_SOURCE_MUTATOR) + var/list/types_to_remove = list(MUTATION_SOURCE_MUTATOR) + if(mutation.scrambled) + types_to_remove += MUTATION_SOURCE_ACTIVATED + scanner_occupant.dna.remove_mutation(mutation.type, types_to_remove) + if(!QDELETED(mutation)) + mutation.scrambled = FALSE return // Deletes saved mutation from console buffer. @@ -1993,10 +1998,10 @@ // These will all be active mutations. They're added by injector and their // sequencing code can't be changed. They can only be nullified, which // completely removes them. - var/datum/mutation/active = GET_INITIALIZED_MUTATION(mutation.type) - var/mut_class = get_mutation_class(active) + var/datum/mutation/initialized = GET_INITIALIZED_MUTATION(mutation.type) + var/mut_class = get_mutation_class(mutation) - mutation_data["Alias"] = active.alias + mutation_data["Alias"] = initialized.alias mutation_data["Sequence"] = text_sequence mutation_data["Discovered"] = TRUE mutation_data["Quality"] = mutation.quality diff --git a/code/game/objects/items/chromosome.dm b/code/game/objects/items/chromosome.dm index b0cc9786f5d..a16eea4aaaa 100644 --- a/code/game/objects/items/chromosome.dm +++ b/code/game/objects/items/chromosome.dm @@ -31,13 +31,13 @@ return TRUE /obj/item/chromosome/proc/apply(datum/mutation/mutation) - if(mutation.stabilizer_coeff != MUTATION_COEFFICIENT_UNMODIFIABLE) + if(mutation.stabilizer_coeff != MUTATION_COEFFICIENT_UNMODIFIABLE && stabilizer_coeff) mutation.stabilizer_coeff = stabilizer_coeff - if(mutation.synchronizer_coeff != MUTATION_COEFFICIENT_UNMODIFIABLE) + if(mutation.synchronizer_coeff != MUTATION_COEFFICIENT_UNMODIFIABLE && synchronizer_coeff) mutation.synchronizer_coeff = synchronizer_coeff - if(mutation.power_coeff != MUTATION_COEFFICIENT_UNMODIFIABLE) + if(mutation.power_coeff != MUTATION_COEFFICIENT_UNMODIFIABLE && power_coeff) mutation.power_coeff = power_coeff - if(mutation.energy_coeff != MUTATION_COEFFICIENT_UNMODIFIABLE) + if(mutation.energy_coeff != MUTATION_COEFFICIENT_UNMODIFIABLE && energy_coeff) mutation.energy_coeff = energy_coeff mutation.can_chromosome = CHROMOSOME_USED mutation.chromosome_name = name