diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index a2a395c51c..5bc0ed20b0 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -361,8 +361,12 @@ // them win or lose based on cryo is silly so we remove the objective. if(istype(O,/datum/objective/mutiny) && O.target == mob_occupant.mind) qdel(O) - else if(O.target && istype(O.target, /datum/mind) && !O.check_midround_completion()) - if(O.target == mob_occupant.mind && O.owner?.current) + else if(O.target && istype(O.target, /datum/mind)) + if(O.target != mob_occupant.mind) + continue + if(O.check_midround_completion()) + continue + if(O.owner && O.owner.current) to_chat(O.owner.current, "
You get the feeling your target is no longer within reach. Time for Plan [pick("A","B","C","D","X","Y","Z")]. Objectives updated!") O.target = null spawn(10) //This should ideally fire after the occupant is deleted. diff --git a/code/modules/antagonists/abductor/equipment/abduction_surgery.dm b/code/modules/antagonists/abductor/equipment/abduction_surgery.dm index a99e9eee67..9205198c4f 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_surgery.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_surgery.dm @@ -2,22 +2,27 @@ name = "experimental organ replacement" steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/incise, /datum/surgery_step/extract_organ, /datum/surgery_step/gland_insert) possible_locs = list(BODY_ZONE_CHEST) - ignore_clothes = 1 + ignore_clothes = TRUE /datum/surgery/organ_extraction/can_start(mob/user, mob/living/carbon/target) if(!ishuman(user)) - return 0 + return FALSE var/mob/living/carbon/human/H = user if(H.dna.species.id == "abductor") - return 1 + return TRUE for(var/obj/item/implant/abductor/A in H.implants) - return 1 - return 0 + return TRUE + return FALSE + +/datum/surgery/organ_extraction/mechanic + name = "Prosthesis experimental organ replacement" + requires_bodypart_type = BODYPART_ROBOTIC + steps = list(/datum/surgery_step/mechanic_open, /datum/surgery_step/open_hatch, /datum/surgery_step/mechanic_unwrench, /datum/surgery_step/prepare_electronics, /datum/surgery_step/extract_organ, /datum/surgery_step/gland_insert) /datum/surgery_step/extract_organ name = "remove heart" - accept_hand = 1 + accept_hand = TRUE time = 32 var/obj/item/organ/IC = null var/list/organ_types = list(/obj/item/organ/heart) @@ -34,10 +39,10 @@ user.visible_message("[user] pulls [IC] out of [target]'s [target_zone]!", "You pull [IC] out of [target]'s [target_zone].") user.put_in_hands(IC) IC.Remove() - return 1 + return TRUE else to_chat(user, "You don't find anything in [target]'s [target_zone]!") - return 1 + return TRUE /datum/surgery_step/gland_insert name = "insert gland" @@ -52,4 +57,4 @@ user.temporarilyRemoveItemFromInventory(tool, TRUE) var/obj/item/organ/heart/gland/gland = tool gland.Insert(target, 2) - return 1 + return TRUE diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 80f3a8365c..16d6ca351d 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -10,7 +10,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/path var/vr_path var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used - var/max_save_slots = 16 + var/max_save_slots = 24 //non-preference stuff var/muted = 0 @@ -210,7 +210,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) load_path(C.ckey) unlock_content = C.IsByondMember() if(unlock_content) - max_save_slots = 24 + max_save_slots = 32 var/loaded_preferences_successfully = load_preferences() if(loaded_preferences_successfully) if(load_character()) diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm index c0d7f89f59..a866049d65 100644 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ b/code/modules/mob/living/carbon/damage_procs.dm @@ -175,7 +175,7 @@ var/list/obj/item/bodypart/parts = list() for(var/X in bodyparts) var/obj/item/bodypart/BP = X - if(status && !status[BP.status]) + if(status && !status.Find(BP.status)) continue if((brute && BP.brute_dam) || (burn && BP.burn_dam) || (stamina && BP.stamina_dam)) parts += BP diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 2accfe7d0d..78de091923 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -307,7 +307,9 @@ log_combat(src, M, "grabbed", addition="passive grab") if(!supress_message && !(iscarbon(AM) && HAS_TRAIT(src, TRAIT_STRONG_GRABBER))) if((zone_selected == BODY_ZONE_PRECISE_GROIN) && has_tail() && M.has_tail()) - visible_message("[src] coils [p_their()] tail with [AM], pulling [M.p_them()] along!", "[src] has entwined [p_their()] tail with yours, pulling you along!") + visible_message("[src] coils [p_their()] tail with [M]'s, pulling [M.p_them()] along!", "You entwine tails with [M], pulling [M.p_them()] along!", ignored_mobs = M) + M.show_message("[src] has entwined [p_their()] tail with yours, pulling you along!", MSG_VISUAL, "You feel something coiling around your tail, pulling you along!") + else visible_message("[src] has grabbed [M][(zone_selected == "l_arm" || zone_selected == "r_arm")? " by [M.p_their()] hands":" passively"]!", "You have grabbed [M][(zone_selected == "l_arm" || zone_selected == "r_arm")? " by [M.p_their()] hands":" passively"]!", target = M, diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index fb5a889d89..25f6509ad0 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -574,17 +574,20 @@ if(!C.reagents.has_reagent(R.type)) return TRUE + var/list/brute_damaged_bodyparts = C.get_damaged_bodyparts(TRUE, FALSE, status = list(BODYPART_ORGANIC)) + var/list/burn_damaged_bodyparts = C.get_damaged_bodyparts(FALSE, TRUE, status = list(BODYPART_ORGANIC)) + //They're injured enough for it! - if((!C.reagents.has_reagent(treatment_brute_avoid)) && (C.getBruteLoss() >= heal_threshold) && (!C.reagents.has_reagent(treatment_brute))) + if(brute_damaged_bodyparts.len && (!C.reagents.has_reagent(treatment_brute_avoid)) && (C.getBruteLoss() >= heal_threshold) && (!C.reagents.has_reagent(treatment_brute))) return TRUE //If they're already medicated don't bother! if((!C.reagents.has_reagent(treatment_oxy_avoid)) && (C.getOxyLoss() >= (15 + heal_threshold)) && (!C.reagents.has_reagent(treatment_oxy))) return TRUE - if((!C.reagents.has_reagent(treatment_fire_avoid)) && (C.getFireLoss() >= heal_threshold) && (!C.reagents.has_reagent(treatment_fire))) + if(burn_damaged_bodyparts.len && (!C.reagents.has_reagent(treatment_fire_avoid)) && (C.getFireLoss() >= heal_threshold) && (!C.reagents.has_reagent(treatment_fire))) return TRUE var/treatment_toxavoid = get_avoidchem_toxin(C) - if(((isnull(treatment_toxavoid) || !C.reagents.has_reagent(treatment_toxavoid))) && (C.getToxLoss() >= heal_threshold) && (!C.reagents.has_reagent(get_healchem_toxin(C)))) + if(!HAS_TRAIT(C, TRAIT_ROBOTIC_ORGANISM) && ((isnull(treatment_toxavoid) || !C.reagents.has_reagent(treatment_toxavoid))) && (C.getToxLoss() >= heal_threshold) && (!C.reagents.has_reagent(get_healchem_toxin(C)))) return TRUE if(treat_virus && !C.reagents.has_reagent(treatment_virus_avoid) && !C.reagents.has_reagent(treatment_virus)) diff --git a/html/changelogs/AutoChangeLog-pr-13711.yml b/html/changelogs/AutoChangeLog-pr-13711.yml new file mode 100644 index 0000000000..e6fde23e8c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13711.yml @@ -0,0 +1,5 @@ +author: "DeltaFire15" +delete-after: True +changes: + - tweak: "Medibots now ignore people they cannot help due to their biology." + - bugfix: "get_damaged_bodyparts() is no longer broken." diff --git a/html/changelogs/AutoChangeLog-pr-13733.yml b/html/changelogs/AutoChangeLog-pr-13733.yml new file mode 100644 index 0000000000..a10719fdc6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13733.yml @@ -0,0 +1,4 @@ +author: "DeltaFire15" +delete-after: True +changes: + - bugfix: "Fixes the tail entwine messages displaying incorrectly." diff --git a/html/changelogs/AutoChangeLog-pr-13736.yml b/html/changelogs/AutoChangeLog-pr-13736.yml new file mode 100644 index 0000000000..dfa5e7cb66 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13736.yml @@ -0,0 +1,4 @@ +author: "DeltaFire15" +delete-after: True +changes: + - tweak: "Abductors now can use experimental organ replacement surgery on robots / synthetics." diff --git a/html/changelogs/AutoChangeLog-pr-13741.yml b/html/changelogs/AutoChangeLog-pr-13741.yml new file mode 100644 index 0000000000..c49015ab28 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13741.yml @@ -0,0 +1,4 @@ +author: "DeltaFire15" +delete-after: True +changes: + - bugfix: "Objectives are no longer very broken."