makes salglu not deadly

This commit is contained in:
Artur
2021-08-02 21:54:47 +03:00
parent 6b5bdae184
commit 5acd7fef2d
21 changed files with 64 additions and 53 deletions

View File

@@ -47,7 +47,7 @@ Bonus
M.adjustOxyLoss(-7, 0)
M.losebreath = max(0, M.losebreath - 4)
if(regenerate_blood && M.blood_volume < (BLOOD_VOLUME_NORMAL * M.blood_ratio))
M.AddIntegrationBlood(1)
M.adjust_integration_blood(1)
else
if(prob(base_message_chance))
to_chat(M, "<span class='notice'>[pick("Your lungs feel great.", "You realize you haven't been breathing.", "You don't feel the need to breathe.")]</span>")

View File

@@ -426,20 +426,21 @@ GENETICS SCANNER
if(ishuman(C))
if(H.is_bleeding())
msg += "<span class='danger'>Subject is bleeding!</span>\n"
var/blood_percent = round((C.scan_blood_volume() / (BLOOD_VOLUME_NORMAL * C.blood_ratio))*100)
var/blood_percent = round((C.scan_blood_volume() / (BLOOD_VOLUME_NORMAL * C.blood_ratio))*100)
var/integrated_blood_percent = round((C.integrating_blood / (BLOOD_VOLUME_NORMAL * C.blood_ratio))*100)
var/blood_type = C.dna.blood_type
if(!(blood_typepath in GLOB.blood_reagent_types))
var/datum/reagent/R = GLOB.chemical_reagents_list[blood_typepath]
if(R)
blood_type = R.name
if(C.integrating_blood)
msg += "<span class='info'>[C.integrating_blood] cl of blood is being integrated into their bloodstream</span>\n"
if(C.scan_blood_volume() <= (BLOOD_VOLUME_SAFE*C.blood_ratio) && C.scan_blood_volume() > (BLOOD_VOLUME_OKAY*C.blood_ratio))
msg += "<span class='danger'>LOW blood level [blood_percent] %, [C.scan_blood_volume()] cl,</span> <span class='info'>type: [blood_type]</span>\n"
else if(C.scan_blood_volume() <= (BLOOD_VOLUME_OKAY*C.blood_ratio))
msg += "<span class='danger'>CRITICAL blood level [blood_percent] %, [C.scan_blood_volume()] cl,</span> <span class='info'>type: [blood_type]</span>\n"
if((C.scan_blood_volume() + C.integrating_blood) <= (BLOOD_VOLUME_SAFE * C.blood_ratio) && (C.scan_blood_volume() + C.integrating_blood) > (BLOOD_VOLUME_OKAY*C.blood_ratio))
msg += "<span class='danger'>LOW blood level [blood_percent] %, [C.scan_blood_volume()] cl[C.integrating_blood? ", with [integrated_blood_percent] % of it integrating, [C.integrating_blood] cl " : ""].</span> <span class='info'>type: [blood_type]</span>\n"
else if((C.scan_blood_volume() + C.integrating_blood) <= (BLOOD_VOLUME_OKAY * C.blood_ratio))
msg += "<span class='danger'>CRITICAL blood level [blood_percent] %, [C.scan_blood_volume()] cl[C.integrating_blood? ", with [integrated_blood_percent] % of it integrating, [C.integrating_blood] cl " : ""].</span> <span class='info'>type: [blood_type]</span>\n"
else
msg += "<span class='info'>Blood level [blood_percent] %, [C.scan_blood_volume()] cl, type: [blood_type]</span>\n"
msg += "<span class='info'>Blood level [blood_percent] %, [C.scan_blood_volume()] cl[C.integrating_blood? ", with [integrated_blood_percent] % of it integrating, [C.integrating_blood] cl " : ""]. type: [blood_type]</span>\n"
var/cyberimp_detect
for(var/obj/item/organ/cyberimp/CI in C.internal_organs)

View File

@@ -144,7 +144,7 @@
owner.Stun(15)
owner.adjustToxLoss(-15, TRUE, TRUE)
owner.AddIntegrationBlood(20)
owner.adjust_integration_blood(20)
if(owner.blood_volume < BLOOD_VOLUME_NORMAL)
keep_going = TRUE

View File

@@ -690,7 +690,7 @@
if(H.functional_blood() < (BLOOD_VOLUME_SAFE*H.blood_ratio))
var/restore_blood = (BLOOD_VOLUME_SAFE*H.blood_ratio) - H.blood_volume
if(uses * 2 < restore_blood)
H.AddIntegrationBlood(uses * 2)
H.adjust_integration_blood(uses * 2)
to_chat(user,"<span class='danger'>You use the last of your blood rites to restore what blood you could!</span>")
uses = 0
return ..()

View File

@@ -219,7 +219,7 @@
if(M.health < M.maxHealth)
M.adjustHealth(-3)
if(ishuman(L) && L.blood_volume < (BLOOD_VOLUME_NORMAL * L.blood_ratio))
L.AddIntegrationBlood(1.0)
L.adjust_integration_blood(1.0)
CHECK_TICK

View File

@@ -147,7 +147,7 @@
carbon_target.blood_volume -= 20
if(carbon_user.blood_volume < BLOOD_VOLUME_MAXIMUM) //we dont want to explode after all
carbon_user.AddIntegrationBlood(20)
carbon_user.adjust_integration_blood(20)
return
/obj/effect/proc_holder/spell/pointed/blood_siphon/can_target(atom/target, mob/user, silent)

View File

@@ -390,8 +390,9 @@
var/mob/living/carbon/human/H = src
H.handle_blood()
/mob/living/proc/AddIntegrationBlood(value, force)
if(value < 0 && integrating_blood < value) //Remove the normal blood of the carbon if we can't afford it with integrating_blood
blood_volume = min(blood_volume, value)
if(integrating_blood < blood_volume + BLOOD_VOLUME_NORMAL || force)
integrating_blood += value
/mob/living/proc/adjust_integration_blood(value, remove_actual_blood, force)
if(integrating_blood + value < 0 && remove_actual_blood)
blood_volume += value + integrating_blood
blood_volume = max(blood_volume, 0)
integrating_blood += value
integrating_blood = clamp(integrating_blood, 0, force ? INFINITY : (BLOOD_VOLUME_MAXIMUM - (integrating_blood + blood_volume)))

View File

@@ -85,7 +85,7 @@
owner.adjustOxyLoss(-heal_amt)
owner.adjustCloneLoss(-heal_amt)
if(owner.blood_volume && (owner.blood_volume < BLOOD_VOLUME_NORMAL))
owner.AddIntegrationBlood(5)
owner.adjust_integration_blood(5)
else
owner.adjustPlasma(plasma_rate * 0.1)

View File

@@ -183,7 +183,7 @@
destination.undershirt = undershirt
destination.socks = socks
/mob/living/carbon/human/AddIntegrationBlood(value, force)
/mob/living/carbon/human/adjust_integration_blood(value, force)
if(NOBLOOD in dna.species.species_traits) //Can't lose blood if your species doesn't have any
return
. = ..()

View File

@@ -1364,7 +1364,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
/datum/species/proc/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
if(chem.type == exotic_blood && !istype(exotic_blood, /datum/reagent/blood))
H.AddIntegrationBlood(round(chem.volume, 0.1))
H.adjust_integration_blood(round(chem.volume, 0.1))
H.reagents.del_reagent(chem.type)
return TRUE
return FALSE

View File

@@ -56,13 +56,13 @@
if(H.stat == DEAD || HAS_TRAIT(H, TRAIT_NOMARROW)) //can't farm slime jelly from a dead slime/jelly person indefinitely, and no regeneration for bloodsuckers
return
if(!H.blood_volume)
H.AddIntegrationBlood(5)
H.adjust_integration_blood(5)
H.adjustBruteLoss(5)
to_chat(H, "<span class='danger'>You feel empty!</span>")
if(H.blood_volume < (BLOOD_VOLUME_NORMAL * H.blood_ratio))
if(H.nutrition >= NUTRITION_LEVEL_STARVING)
H.AddIntegrationBlood(3)
H.adjust_integration_blood(3)
H.nutrition -= 2.5
if(H.blood_volume < (BLOOD_VOLUME_OKAY*H.blood_ratio))
if(prob(5))
@@ -82,7 +82,7 @@
consumed_limb.drop_limb()
to_chat(H, "<span class='userdanger'>Your [consumed_limb] is drawn back into your body, unable to maintain its shape!</span>")
qdel(consumed_limb)
H.AddIntegrationBlood(20)
H.adjust_integration_blood(20)
////////////////////////////////////////////////////////SLIMEPEOPLE///////////////////////////////////////////////////////////////////
@@ -151,7 +151,7 @@
if(prob(5))
to_chat(H, "<span class='notice'>You feel very bloated!</span>")
else if(H.nutrition >= NUTRITION_LEVEL_WELL_FED)
H.AddIntegrationBlood(3)
H.adjust_integration_blood(3)
H.nutrition -= 2.5
..()

View File

@@ -112,7 +112,7 @@
var/stun_absorption = null //converted to a list of stun absorption sources this mob has when one is added
var/blood_volume = 0 //how much blood the mob has
var/integrating_blood = 0 //this is the variable you want to affect if you want to give the mob blood, this will slowly turn into normal blood, preventing some cheesyness, use AddIntegrationBlood() instead of modifying directly
var/integrating_blood = 0 //this is the variable you want to affect if you want to give the mob blood, this will slowly turn into normal blood, preventing some cheesyness, use adjust_integration_blood() instead of modifying directly
var/blood_ratio = 1 //How much blood the mob needs, in terms of ratio (i.e 1.2 will require BLOOD_VOLUME_NORMAL of 672) DO NOT GO ABOVE 3.55 Well, actually you can but, then they can't get enough blood.
var/obj/effect/proc_holder/ranged_ability //Any ranged ability the mob has, as a click override

View File

@@ -94,7 +94,7 @@
L.SetUnconscious(0, FALSE)
L.adjustOxyLoss(-50)// do CPR first
if(L.blood_volume <= 500) //bandage them up and give em some blood if they're bleeding
L.AddIntegrationBlood(30)
L.adjust_integration_blood(30)
L.bleedsuppress = 0
if(L.getBruteLoss() >= 50)// first, did we beat them into crit? if so, heal that
var/healing = min(L.getBruteLoss(), 120)

View File

@@ -586,7 +586,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
if(AmBloodsucker(C))
disgust_bloodsucker(FALSE, 1) //Bloodsuckers get SOME blood from it, for style reasons.
if(C.blood_volume < (BLOOD_VOLUME_NORMAL*C.blood_ratio))
C.AddIntegrationBlood(3) //Bloody Mary quickly restores blood loss.
C.adjust_integration_blood(3) //Bloody Mary quickly restores blood loss.
..()
/datum/reagent/consumable/ethanol/brave_bull
@@ -2593,7 +2593,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
alcohol_description = "sweet"
else
alcohol_description = "watery" //How the hell did you get negative boozepwr?
var/list/fruits = list()
if(names_in_order.len <= 3)
fruits = names_in_order

View File

@@ -402,19 +402,28 @@
pH = 5.5
/datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/carbon/human/M)
if((HAS_TRAIT(M, TRAIT_NOMARROW)))
return
if(last_added)
M.AddIntegrationBlood(-last_added)
last_added = 0
if(M.functional_blood() < maximum_reachable) //Can only up to double your effective blood level.
var/new_blood_level = min(volume * 5, maximum_reachable)
last_added = new_blood_level
M.AddIntegrationBlood(new_blood_level + (extra_regen * REM))
if(prob(33))
M.adjustBruteLoss(-0.5*REM, 0)
M.adjustFireLoss(-0.5*REM, 0)
. = TRUE
if((HAS_TRAIT(M, TRAIT_NOMARROW)))
return ..()
if(last_added)
M.adjust_integration_blood(-last_added, TRUE)
last_added = 0
if(M.functional_blood() < maximum_reachable) //Can only up to double your effective blood level.
var/new_blood_level = min(volume * 5, maximum_reachable)
last_added = new_blood_level
M.adjust_integration_blood(new_blood_level + (extra_regen * REM))
if(prob(33))
M.adjustBruteLoss(-0.5*REM, 0)
M.adjustFireLoss(-0.5*REM, 0)
. = TRUE
..()
/datum/reagent/medicine/salglu_solution/on_mob_delete(mob/living/carbon/human/M)
if(last_added)
M.adjust_integration_blood(-last_added, TRUE)
..()
/datum/reagent/medicine/salglu_solution/overdose_process(mob/living/M)
@@ -1294,7 +1303,7 @@
M.adjustCloneLoss(-3*REM, FALSE)
M.adjustStaminaLoss(-25*REM,FALSE)
if(M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio))
M.AddIntegrationBlood(40) // blood fall out man bad
M.adjust_integration_blood(40) // blood fall out man bad
..()
. = 1
@@ -1315,7 +1324,7 @@
M.adjustCloneLoss(-1.25*REM, FALSE)
M.adjustStaminaLoss(-4*REM,FALSE)
if(M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio))
M.AddIntegrationBlood(3)
M.adjust_integration_blood(3)
..()
. = 1

View File

@@ -48,7 +48,7 @@
var/mob/living/carbon/C = L
var/blood_id = C.get_blood_id()
if((HAS_TRAIT(C, TRAIT_NOMARROW) || blood_id == /datum/reagent/blood || blood_id == /datum/reagent/blood/jellyblood) && (method == INJECT || (method == INGEST && C.dna && C.dna.species && (DRINKSBLOOD in C.dna.species.species_traits))))
C.AddIntegrationBlood(round(reac_volume, 0.1))
C.adjust_integration_blood(round(reac_volume, 0.1))
// we don't care about bloodtype here, we're just refilling the mob
if(reac_volume >= 10 && istype(L) && method != INJECT)
@@ -253,7 +253,7 @@
/datum/reagent/water/on_mob_life(mob/living/carbon/M)
. = ..()
if(M.blood_volume)
M.AddIntegrationBlood(0.1) // water is good for you!
M.adjust_integration_blood(0.1) // water is good for you!
/*
* Water reaction to turf
@@ -370,7 +370,7 @@
/datum/reagent/water/holywater/on_mob_life(mob/living/carbon/M)
if(M.blood_volume)
M.AddIntegrationBlood(0.1) // water is good for you!
M.adjust_integration_blood(0.1) // water is good for you!
if(!data)
data = list("misc" = 1)
data["misc"]++
@@ -456,7 +456,7 @@
M.adjustBruteLoss(-2, FALSE)
M.adjustFireLoss(-2, FALSE)
if(ishuman(M) && M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio))
M.AddIntegrationBlood(3)
M.adjust_integration_blood(3)
else // Will deal about 90 damage when 50 units are thrown
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150)
M.adjustToxLoss(2, FALSE)
@@ -1146,7 +1146,7 @@
if((HAS_TRAIT(C, TRAIT_NOMARROW)))
return
if(C.blood_volume < (BLOOD_VOLUME_NORMAL*C.blood_ratio))
C.AddIntegrationBlood(0.25)
C.adjust_integration_blood(0.25)
..()
/datum/reagent/iron/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
@@ -2552,7 +2552,7 @@
M.adjustBruteLoss(-3, FALSE)
M.adjustFireLoss(-3, FALSE)
if(ishuman(M) && M.blood_volume < BLOOD_VOLUME_NORMAL)
M.AddIntegrationBlood(3)
M.adjust_integration_blood(3)
else
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150)
M.adjustToxLoss(2, FALSE)

View File

@@ -109,7 +109,7 @@
/datum/nanite_program/blood_restoring/active_effect()
if(iscarbon(host_mob))
var/mob/living/carbon/C = host_mob
C.AddIntegrationBlood(2)
C.adjust_integration_blood(2)
/datum/nanite_program/repairing
name = "Mechanical Repair"

View File

@@ -322,7 +322,7 @@ Consuming extracts:
playsound(get_turf(M), 'sound/effects/splat.ogg', 10, 1)
if(iscarbon(M))
var/mob/living/carbon/C = M
C.AddIntegrationBlood(25) //Half a vampire drain.
C.adjust_integration_blood(25) //Half a vampire drain.
/obj/item/slimecross/consuming/green
colour = "green"

View File

@@ -187,7 +187,7 @@
switch(activation_type)
if(SLIME_ACTIVATE_MINOR)
user.adjust_nutrition(50)
user.AddIntegrationBlood(50)
user.adjust_integration_blood(50)
to_chat(user, "<span class='notice'>You activate [src], and your body is refilled with fresh slime jelly!</span>")
return 150

View File

@@ -533,7 +533,7 @@
var/total_moles = breath.total_moles()
var/pressure = breath.return_pressure()
var/plasma_pp = PP(breath, GAS_PLASMA)
owner.AddIntegrationBlood(0.2 * plasma_pp) // 10/s when breathing literally nothing but plasma, which will suffocate you.
owner.adjust_integration_blood(0.2 * plasma_pp) // 10/s when breathing literally nothing but plasma, which will suffocate you.
/obj/item/organ/lungs/yamerol
name = "Yamerol lungs"