[MIRROR] Cutting the Burdened Cheese Part 1: Removes free burden points from removing unnecessary or cosmetic organs. [MDB IGNORE] (#18493)

* Cutting the Burdened Cheese Part 1: Removes free burden points from removing unnecessary or cosmetic organs. (#71938)

Burdened organs now only count for the main organs only. Cyberimplants
don't count, alien organs don't count, etc. This is because someone
could get a bunch of extra organs, and then take the burdened sect and
remove them for free burden points.

Useless organs for species also do not count (stomachs given to species
that do not hunger, for instance)

Removes the error on burden points clamping on negative values. This can
happen when someone previously disabled takes burden sect.

Cheese is being used to bypass the unique gameplay goals burdened sect
provides. Will throw another pr when fikou finishes bat mutants ;)

🆑
fix: Removed some cheese strategies from burdened sect.
/🆑

Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>

* Modular!

* Aaaaaa

Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
Co-authored-by: Funce <funce.973@gmail.com>
This commit is contained in:
SkyratBot
2023-01-17 14:06:18 +13:00
committed by GitHub
co-authored by Fikou tralezab Funce
parent 94be12f27d
commit 2785d37cf0
49 changed files with 183 additions and 118 deletions
+6 -6
View File
@@ -671,8 +671,8 @@
UnregisterSignal(old_owner, list(
SIGNAL_REMOVETRAIT(TRAIT_NOLIMBDISABLE),
SIGNAL_ADDTRAIT(TRAIT_NOLIMBDISABLE),
SIGNAL_REMOVETRAIT(TRAIT_NOBLEED),
SIGNAL_ADDTRAIT(TRAIT_NOBLEED),
SIGNAL_REMOVETRAIT(TRAIT_NOBLOOD),
SIGNAL_ADDTRAIT(TRAIT_NOBLOOD),
))
if(owner)
if(initial(can_be_disabled))
@@ -682,8 +682,8 @@
RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_NOLIMBDISABLE), PROC_REF(on_owner_nolimbdisable_trait_loss))
RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_NOLIMBDISABLE), PROC_REF(on_owner_nolimbdisable_trait_gain))
// Bleeding stuff
RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_NOBLEED), PROC_REF(on_owner_nobleed_loss))
RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_NOBLEED), PROC_REF(on_owner_nobleed_gain))
RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_NOBLOOD), PROC_REF(on_owner_nobleed_loss))
RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_NOBLOOD), PROC_REF(on_owner_nobleed_gain))
if(needs_update_disabled)
update_disabled()
@@ -1087,7 +1087,7 @@
if(!owner)
return
if(HAS_TRAIT(owner, TRAIT_NOBLEED) || !IS_ORGANIC_LIMB(src))
if(HAS_TRAIT(owner, TRAIT_NOBLOOD) || !IS_ORGANIC_LIMB(src))
if(cached_bleed_rate != old_bleed_rate)
update_part_wound_overlay()
return
@@ -1128,7 +1128,7 @@
/obj/item/bodypart/proc/update_part_wound_overlay()
if(!owner)
return FALSE
if(HAS_TRAIT(owner, TRAIT_NOBLEED) || !IS_ORGANIC_LIMB(src) || (NOBLOOD in species_flags_list))
if(HAS_TRAIT(owner, TRAIT_NOBLOOD) || !IS_ORGANIC_LIMB(src))
if(bleed_overlay_icon)
bleed_overlay_icon = null
owner.update_wound_overlays()
+1 -1
View File
@@ -48,7 +48,7 @@
hair_hidden = TRUE
facial_hair_hidden = TRUE
if(!hair_hidden && !owner.getorganslot(ORGAN_SLOT_BRAIN) && !(NOBLOOD in species_flags_list))
if(!hair_hidden && !owner.getorganslot(ORGAN_SLOT_BRAIN) && !HAS_TRAIT(owner, TRAIT_NOBLOOD))
show_debrained = TRUE
else
show_debrained = FALSE
+1 -1
View File
@@ -235,7 +235,7 @@
else if(bodytype & BODYTYPE_LARVA_PLACEHOLDER)
debrain_overlay.icon = 'icons/mob/species/alien/bodyparts.dmi'
debrain_overlay.icon_state = "debrained_larva"
else if(!(NOBLOOD in species_flags_list))
else if(!(TRAIT_NOBLOOD in species_flags_list))
debrain_overlay.icon = 'icons/mob/species/human/human_face.dmi'
debrain_overlay.icon_state = "debrained"
. += debrain_overlay
+1 -1
View File
@@ -46,7 +46,7 @@
/datum/surgery_step/incise_heart/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
if(ishuman(target))
var/mob/living/carbon/human/target_human = target
if (!(NOBLOOD in target_human.dna.species.species_traits))
if (!HAS_TRAIT(target_human, TRAIT_NOBLOOD))
display_results(
user,
target,
+1 -1
View File
@@ -31,7 +31,7 @@
/datum/surgery_step/incise/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
if ishuman(target)
var/mob/living/carbon/human/human_target = target
if (!(NOBLOOD in human_target.dna.species.species_traits))
if (!HAS_TRAIT(human_target, TRAIT_NOBLOOD))
display_results(
user,
target,
+3 -2
View File
@@ -291,9 +291,10 @@ INITIALIZE_IMMEDIATE(/obj/item/organ)
* For example, lungs won't be given if you have NO_BREATH, stomachs check for NO_HUNGER, and livers check for NO_METABOLISM.
* If you want a carbon to have a trait that normally blocks an organ but still want the organ. Attach the trait to the organ using the organ_traits var
* Arguments:
* owner_species - species, needed to return whether the species has an organ specific trait
* owner_species - species, needed to return the mutant slot as true or false. stomach set to null means it shouldn't have one.
* owner_mob - for more specific checks, like nightmares.
*/
/obj/item/organ/proc/get_availability(datum/species/owner_species)
/obj/item/organ/proc/get_availability(datum/species/owner_species, mob/living/owner_mob)
return TRUE
/// Called before organs are replaced in regenerate_organs with new ones
+2 -2
View File
@@ -69,8 +69,8 @@
organ_owner.adjustOrganLoss(ORGAN_SLOT_APPENDIX, 15)
/obj/item/organ/internal/appendix/get_availability(datum/species/owner_species)
return !((TRAIT_NOHUNGER in owner_species.inherent_traits) || (NOAPPENDIX in owner_species.species_traits))
/obj/item/organ/internal/appendix/get_availability(datum/species/owner_species, mob/living/owner_mob)
return owner_species.mutantappendix
/obj/item/organ/internal/appendix/Remove(mob/living/carbon/organ_owner, special = FALSE)
REMOVE_TRAIT(organ_owner, TRAIT_DISEASELIKE_SEVERITY_MEDIUM, type)
+4 -4
View File
@@ -95,8 +95,8 @@
owner.set_heartattack(TRUE)
failed = TRUE
/obj/item/organ/internal/heart/get_availability(datum/species/owner_species)
return !(NOBLOOD in owner_species.species_traits)
/obj/item/organ/internal/heart/get_availability(datum/species/owner_species, mob/living/owner_mob)
return owner_species.mutantheart
/obj/item/organ/internal/heart/cursed
name = "cursed heart"
@@ -128,7 +128,7 @@
if(world.time > (last_pump + pump_delay))
if(ishuman(owner) && owner.client) //While this entire item exists to make people suffer, they can't control disconnects.
var/mob/living/carbon/human/accursed_human = owner
if(accursed_human.dna && !(NOBLOOD in accursed_human.dna.species.species_traits))
if(accursed_human.dna && !HAS_TRAIT(accursed_human, TRAIT_NOBLOOD))
accursed_human.blood_volume = max(accursed_human.blood_volume - blood_loss, 0)
to_chat(accursed_human, span_userdanger("You have to keep pumping your blood!"))
if(add_colour)
@@ -166,7 +166,7 @@
var/mob/living/carbon/human/accursed = owner
if(istype(accursed))
if(accursed.dna && !(NOBLOOD in accursed.dna.species.species_traits))
if(accursed.dna && !HAS_TRAIT(accursed, TRAIT_NOBLOOD))
accursed.blood_volume = min(accursed.blood_volume + cursed_heart.blood_loss*0.5, BLOOD_VOLUME_MAXIMUM)
accursed.remove_client_colour(/datum/client_colour/cursed_heart_blood)
cursed_heart.add_colour = TRUE
+2 -2
View File
@@ -210,8 +210,8 @@
for(var/datum/reagent/chem as anything in carbon_owner.reagents.reagent_list)
chem.on_mob_dead(carbon_owner, delta_time)
/obj/item/organ/internal/liver/get_availability(datum/species/species)
return !(TRAIT_NOMETABOLISM in species.inherent_traits)
/obj/item/organ/internal/liver/get_availability(datum/species/owner_species, mob/living/owner_mob)
return owner_species.mutantliver
/obj/item/organ/internal/liver/plasmaman
name = "reagent processing crystal"
+2 -2
View File
@@ -543,8 +543,8 @@
owner.visible_message(span_danger("[owner] grabs [owner.p_their()] throat, struggling for breath!"), span_userdanger("You suddenly feel like you can't breathe!"))
failed = TRUE
/obj/item/organ/internal/lungs/get_availability(datum/species/owner_species)
return !(TRAIT_NOBREATH in owner_species.inherent_traits)
/obj/item/organ/internal/lungs/get_availability(datum/species/owner_species, mob/living/owner_mob)
return owner_species.mutantlungs
/obj/item/organ/internal/lungs/plasmaman
name = "plasma filter"
@@ -205,8 +205,8 @@
else
human.remove_movespeed_modifier(/datum/movespeed_modifier/hunger)
/obj/item/organ/internal/stomach/get_availability(datum/species/owner_species)
return !(NOSTOMACH in owner_species.species_traits)
/obj/item/organ/internal/stomach/get_availability(datum/species/owner_species, mob/living/owner_mob)
return owner_species.mutantstomach
///This gets called after the owner takes a bite of food
/obj/item/organ/internal/stomach/proc/after_eat(atom/edible)
+2 -2
View File
@@ -110,8 +110,8 @@
/obj/item/organ/internal/tongue/could_speak_language(datum/language/language_path)
return (language_path in languages_possible)
/obj/item/organ/internal/tongue/get_availability(datum/species/owner_species)
return !(NO_TONGUE in owner_species.species_traits)
/obj/item/organ/internal/tongue/get_availability(datum/species/owner_species, mob/living/owner_mob)
return owner_species.mutanttongue
/obj/item/organ/internal/tongue/lizard
name = "forked tongue"