diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index f1b60da557b..1af7df3b47b 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -270,11 +270,14 @@ GLOBAL_LIST_EMPTY(bad_blocks) /////////////////////////////////////// // "Zeroes out" all of the blocks. -/datum/dna/proc/ResetSE() +/datum/dna/proc/ResetSE(monkeybasic = FALSE) for(var/i = 1, i <= DNA_SE_LENGTH, i++) + if(i == DNA_SE_LENGTH && monkeybasic) + continue SetSEValue(i, rand(1, 1024), 1) UpdateSE() + // Set a DNA SE block's raw value. /datum/dna/proc/SetSEValue(block, value, defer = FALSE) @@ -406,12 +409,12 @@ GLOBAL_LIST_EMPTY(bad_blocks) // Initial DNA setup. I'm kind of wondering why the hell this doesn't just call the above. // ready_dna is (hopefully) only used on mob creation, and sets the struc_enzymes_original and SE_original only once - Bone White -/datum/dna/proc/ready_dna(mob/living/carbon/human/character, flatten_SE = TRUE) +/datum/dna/proc/ready_dna(mob/living/carbon/human/character, flatten_SE = TRUE, monkeybasic = FALSE) ResetUIFrom(character) if(flatten_SE) - ResetSE() + ResetSE(monkeybasic) struc_enzymes_original = struc_enzymes // sets the original struc_enzymes when ready_dna is called SE_original = SE.Copy() diff --git a/code/game/dna/genes/gene.dm b/code/game/dna/genes/gene.dm index 80ec3b4b136..13df0002527 100644 --- a/code/game/dna/genes/gene.dm +++ b/code/game/dna/genes/gene.dm @@ -27,6 +27,13 @@ var/instability = 0 +/datum/dna/gene/Destroy(force) + if(force) + return ..() + // put your hands off the gene GC! + return QDEL_HINT_LETMELIVE + + /* * Is the gene active in this mob's DNA? */ diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm index c794702b323..4aebe25872f 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm @@ -178,25 +178,27 @@ return default_deconstruction_crowbar(user, O) - var/obj/item/what = O - + var/obj/item/grab/grab if(istype(O, /obj/item/grab)) - var/obj/item/grab/G = O - what = G.affecting + grab = O + what = grab.affecting var/datum/food_processor_process/P = select_recipe(what) if(!P) to_chat(user, "That probably won't blend.") - return 1 + return TRUE + + if(grab) + qdel(grab) + what.forceMove(src) + else if(!user.drop_transfer_item_to_loc(what, src)) + return user.visible_message("\the [user] puts \the [what] into \the [src].", \ "You put \the [what] into \the [src].") - user.drop_transfer_item_to_loc(what, src) - - return /obj/machinery/processor/attack_hand(mob/user) if(stat & (NOPOWER|BROKEN)) //no power or broken diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 750c6ae8417..0350f111859 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -305,7 +305,7 @@ if(QDELING(I)) return FALSE - if(!force && !put_in_hand_check(I, hand_id)) + if(!put_in_hand_check(I, hand_id) && !force) return FALSE if(!ignore_anim) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 214f9b78d48..dc023531352 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1198,8 +1198,9 @@ * * Arguments: * * new_species - The new species to assign. + * * monkeybasic - If `TRUE` will skip randomization of the last SE block */ -/mob/living/carbon/human/proc/setup_dna(datum/species/new_species, flatten_SE = TRUE) +/mob/living/carbon/human/proc/setup_dna(datum/species/new_species, monkeybasic = FALSE) set_species(new_species, use_default_color = TRUE, delay_icon_update = TRUE, skip_same_check = TRUE) // Name real_name = dna.species.get_random_name(gender) @@ -1207,7 +1208,7 @@ mind?.name = real_name // DNA ready - dna.ready_dna(src, flatten_SE) + dna.ready_dna(src, TRUE, monkeybasic) dna.real_name = real_name dna.tts_seed_dna = tts_seed sync_organ_dna() diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 1efe4b7c2d7..6445e109b15 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -148,8 +148,6 @@ if(usable_legs < default_num_legs) limbless_slowdown += (default_num_legs - usable_legs) * 4 - get_crutches() if(!usable_legs) - if(has_pain()) - INVOKE_ASYNC(src, PROC_REF(emote), "scream") ADD_TRAIT(src, TRAIT_FLOORED, LACKING_LOCOMOTION_APPENDAGES_TRAIT) if(usable_hands < default_num_hands) limbless_slowdown += (default_num_hands - usable_hands) * 4 diff --git a/code/modules/mob/living/carbon/human/monkey.dm b/code/modules/mob/living/carbon/human/monkey.dm index 28ab7ed33d6..af944459eb9 100644 --- a/code/modules/mob/living/carbon/human/monkey.dm +++ b/code/modules/mob/living/carbon/human/monkey.dm @@ -3,10 +3,9 @@ var/master_commander = null var/sentience_type = SENTIENCE_ORGANIC -/mob/living/carbon/human/lesser/setup_dna(datum/species/new_species, flatten_SE = FALSE) +/mob/living/carbon/human/lesser/setup_dna(datum/species/new_species, monkeybasic = TRUE) . = ..() // since we are created as monkas we need to manually set our GLOB.monkeyblock as activated - // and also we are skipping SE flattening for the same reasons LAZYOR(active_genes, /datum/dna/gene/monkey) /mob/living/carbon/human/lesser/monkey diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 87152440c0d..ffc34e79246 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -860,7 +860,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) inv?.update_icon() if(belt) - if(hud_used?.hud_shown && belt) + if(client && hud_used?.hud_shown) client.screen += belt belt.screen_loc = ui_belt diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index b10e67aaf5e..387b102de35 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -27,6 +27,8 @@ if(mobility_flags & MOBILITY_REST) verbs += /mob/living/proc/toggle_resting + if(!density) // we want undense mobs to stay undense when they stop resting + ADD_TRAIT(src, TRAIT_UNDENSE, INNATE_TRAIT) GLOB.mob_living_list += src