Skip to content

Commit

Permalink
Merge branch 'BeeStation:master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
DrDuckedGoose authored Jul 17, 2024
2 parents 55eee80 + dc7b9b3 commit 7127428
Show file tree
Hide file tree
Showing 303 changed files with 1,936 additions and 757 deletions.
5 changes: 5 additions & 0 deletions beestation.dme
Original file line number Diff line number Diff line change
Expand Up @@ -1229,6 +1229,7 @@
#include "code\game\objects\effects\step_triggers.dm"
#include "code\game\objects\effects\wanted_poster.dm"
#include "code\game\objects\effects\anomalies\_anomalies.dm"
#include "code\game\objects\effects\anomalies\anomaly_bleed.dm"
#include "code\game\objects\effects\anomalies\anomaly_bluespace.dm"
#include "code\game\objects\effects\anomalies\anomaly_delimber.dm"
#include "code\game\objects\effects\anomalies\anomaly_flux.dm"
Expand Down Expand Up @@ -2542,6 +2543,7 @@
#include "code\modules\events\alien_infestation.dm"
#include "code\modules\events\anomaly.dm"
#include "code\modules\events\anomaly_bioscrambler.dm"
#include "code\modules\events\anomaly_blood.dm"
#include "code\modules\events\anomaly_bluespace.dm"
#include "code\modules\events\anomaly_flux.dm"
#include "code\modules\events\anomaly_grav.dm"
Expand Down Expand Up @@ -2578,6 +2580,7 @@
#include "code\modules\events\meateor_wave.dm"
#include "code\modules\events\meteor_wave.dm"
#include "code\modules\events\mice_migration.dm"
#include "code\modules\events\mimite_infestation.dm"
#include "code\modules\events\nightmare.dm"
#include "code\modules\events\operative.dm"
#include "code\modules\events\pirates.dm"
Expand Down Expand Up @@ -3222,6 +3225,7 @@
#include "code\modules\mob\living\simple_animal\hostile\macrophage.dm"
#include "code\modules\mob\living\simple_animal\hostile\mecha_pilot.dm"
#include "code\modules\mob\living\simple_animal\hostile\mimic.dm"
#include "code\modules\mob\living\simple_animal\hostile\mimite.dm"
#include "code\modules\mob\living\simple_animal\hostile\mushroom.dm"
#include "code\modules\mob\living\simple_animal\hostile\nanotrasen.dm"
#include "code\modules\mob\living\simple_animal\hostile\netherworld.dm"
Expand Down Expand Up @@ -3958,6 +3962,7 @@
#include "code\modules\surgery\anesthetic_machine.dm"
#include "code\modules\surgery\blood_filter.dm"
#include "code\modules\surgery\brain_recalibration.dm"
#include "code\modules\surgery\cauterize.dm"
#include "code\modules\surgery\cavity_implant.dm"
#include "code\modules\surgery\core_removal.dm"
#include "code\modules\surgery\coronary_bypass.dm"
Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/combat.dm
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@
#define MELEE "melee"
/// Involves magic.
#define MAGIC "magic"
/// Bleed prevention
#define BLEED "bleed"

/*
/// Involved in checking the likelihood of applying a wound to a mob.
Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/dcs/signals/signals_mob/signals_living.dm
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
#define COMSIG_LIVING_DEATH "living_death"
/// from base of mob/living/updatehealth(): ()
#define COMSIG_LIVING_UPDATE_HEALTH "living_update_health"
/// Called when a living mob has its resting updated: (resting_state)
#define COMSIG_LIVING_RESTING_UPDATED "resting_updated"

/// from /datum/component/singularity/proc/can_move(), as well as /obj/anomaly/energy_ball/proc/can_move()
/// if a callback returns `SINGULARITY_TRY_MOVE_BLOCK`, then the singularity will not move to that turf
Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/is_helpers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,8 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(

#define isfaithless(A) (istype(A, /mob/living/simple_animal/hostile/faithless))

#define ismimite(A) (istype(A, /mob/living/simple_animal/hostile/mimite))

//Misc mobs
#define isobserver(A) (istype(A, /mob/dead/observer))

Expand Down
19 changes: 19 additions & 0 deletions code/__DEFINES/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,23 @@
#define MOVE_INTENT_WALK "walk"
#define MOVE_INTENT_RUN "run"

// Bleed rates
// See blood.dm for calculations
#define BLEED_RATE_MINOR 2.4 /// Point at which bleeding is considered minor and will eventually self-heal
#define BLEED_HEAL_RATE_MINOR 0.02 /// How quickly minor bleeds will stop bleeding (0.05/sec)
#define MAX_BLEED_RATE 3 /// Mobs can get more bleed than this, but won't actually bleed faster than this value

// Bleed damage values
#define BLEED_TINY 0.1
#define BLEED_SCRATCH 0.8
#define BLEED_SURFACE 1.5 // 560 > 506 blood in 75 seconds
#define BLEED_CUT 2.3 // 560 > 442 blood ni 115 seconds
#define BLEED_DEEP_WOUND 2.4 // Crit in 285 seconds, Death in 356 seconds
#define BLEED_CRITICAL 3.6 // Crit in 190 seconds, Death in 238 seconds

#define BLEED_RATE_MULTIPLIER 1 /// How quickly do we bleed out? A value of 1 means that if we have a bleed rate of 10, then we lose 5 blood per second.
#define BLEED_RATE_MULTIPLIER_NO_HEART 0.4 /// If we have no heart, then we will bleed slower. This multiplies by our bleeding rate if that is the case.

//Blood levels
#define BLOOD_VOLUME_MAXIMUM 2000
#define BLOOD_VOLUME_SLIME_SPLIT 1120
Expand All @@ -26,6 +43,8 @@
#define BLOOD_VOLUME_BAD 224
#define BLOOD_VOLUME_SURVIVE 122

#define AMOUNT_TO_BLEED_INTENSITY(x) ((x) ** 0.3333)

//Sizes of mobs, used by mob/living/var/mob_size
#define MOB_SIZE_TINY 0
#define MOB_SIZE_SMALL 1
Expand Down
3 changes: 3 additions & 0 deletions code/__DEFINES/status_effects.dm
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
#define STATUS_EFFECT_REPLACE 2
/// if it only allows one, and new instances just instead refresh the timer
#define STATUS_EFFECT_REFRESH 3
/// call a merge proc to combine 2 status effects
#define STATUS_EFFECT_MERGE 4

//-------//
// BUFFS //
Expand Down Expand Up @@ -117,6 +119,7 @@

#define STATUS_EFFECT_LING_TRANSFORMATION /datum/status_effect/ling_transformation // transform stung by a changeling

#define STATUS_EFFECT_BLEED /datum/status_effect/bleeding

//---------//
// NEUTRAL //
Expand Down
6 changes: 6 additions & 0 deletions code/__DEFINES/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,10 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_HYPERSPACED "hyperspaced" // Sanity trait to keep track of when we're in hyperspace and add the appropriate element if we werent
#define TRAIT_FREE_HYPERSPACE_MOVEMENT "free_hyperspace_movement" // Gives the movable free hyperspace movement without being pulled during shuttle transit
#define TRAIT_FAST_CUFF_REMOVAL "fast_cuff_removal" // Faster cuff removal
#define TRAIT_BLEED_HELD "bleed_held" // For when a mob is holding their wounds, preventing them from bleeding further
#define TRAIT_NO_BLOOD "no_blood" // Bleeding heals itself and bleeding is impossible
#define TRAIT_NO_BLEEDING "no_bleed" // The user can acquire the bleeding status effect, but will no lose blood
#define TRAIT_BLOOD_COOLANT "blood_coolant" // Replaces blood with coolant, meaning we overheat instead of losing air

// You can stare into the abyss, but it does not stare back.
// You're immune to the hallucination effect of the supermatter, either
Expand Down Expand Up @@ -396,6 +400,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define CURSE_TRAIT "eldritch"
#define STATION_TRAIT "station-trait"
#define TRAIT_RUSTY "rust_trait"
#define ACTION_TRAIT "action_trait"
#define TURF_TRAIT "turf"

// unique trait sources, still defines
Expand Down Expand Up @@ -464,6 +469,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_PRESERVE_UI_WITHOUT_CLIENT "preserve_ui_without_client" //this mob should never close ui even if it doesn't have a client
#define EXPERIMENTAL_SURGERY_TRAIT "experimental_surgery"
#define NINJA_KIDNAPPED_TRAIT "ninja_kidnapped"
#define TABLE_TRAIT "table_trait"

///Traits given by station traits
#define STATION_TRAIT_BANANIUM_SHIPMENTS "station_trait_bananium_shipments"
Expand Down
4 changes: 0 additions & 4 deletions code/_onclick/other_mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -154,10 +154,6 @@
return TRUE
return FALSE

/*
Aliens
Defaults to same as monkey in most places
*/
/mob/living/carbon/alien/UnarmedAttack(atom/A)
if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED))
return
Expand Down
27 changes: 15 additions & 12 deletions code/datums/armor.dm
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
#define ARMORID "armor-[melee]-[bullet]-[laser]-[energy]-[bomb]-[bio]-[rad]-[fire]-[acid]-[magic]-[stamina]-[consume]"
#define ARMORID "armor-[melee]-[bullet]-[laser]-[energy]-[bomb]-[bio]-[rad]-[fire]-[acid]-[magic]-[stamina]-[consume]-[bleed]"

/proc/getArmor(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0, stamina = 0, consume = 0)
/proc/getArmor(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0, stamina = 0, consume = 0, bleed = 0)
. = locate(ARMORID)
if (!.)
. = new /datum/armor(melee, bullet, laser, energy, bomb, bio, rad, fire, acid, magic, stamina, consume)
. = new /datum/armor(melee, bullet, laser, energy, bomb, bio, rad, fire, acid, magic, stamina, consume, bleed)

/datum/armor
datum_flags = DF_USE_TAG
Expand All @@ -19,8 +19,9 @@
var/magic
var/stamina
var/consume
var/bleed

/datum/armor/New(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0, stamina = 0, consume = 0)
/datum/armor/New(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0, stamina = 0, consume = 0, bleed = 0)
src.melee = melee
src.bullet = bullet
src.laser = laser
Expand All @@ -33,15 +34,16 @@
src.magic = magic
src.stamina = stamina
src.consume = consume
src.bleed = bleed
tag = ARMORID

/datum/armor/proc/modifyRating(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0, stamina = 0, consume = 0)
return getArmor(src.melee+melee, src.bullet+bullet, src.laser+laser, src.energy+energy, src.bomb+bomb, src.bio+bio, src.rad+rad, src.fire+fire, src.acid+acid, src.magic+magic, src.stamina+stamina, src.consume+consume)
/datum/armor/proc/modifyRating(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0, stamina = 0, consume = 0, bleed = 0)
return getArmor(src.melee+melee, src.bullet+bullet, src.laser+laser, src.energy+energy, src.bomb+bomb, src.bio+bio, src.rad+rad, src.fire+fire, src.acid+acid, src.magic+magic, src.stamina+stamina, src.consume+consume, src.bleed+bleed)

/datum/armor/proc/modifyAllRatings(modifier = 0)
return getArmor(melee+modifier, bullet+modifier, laser+modifier, energy+modifier, bomb+modifier, bio+modifier, rad+modifier, fire+modifier, acid+modifier, magic+modifier, stamina+modifier, consume+modifier)
return getArmor(melee+modifier, bullet+modifier, laser+modifier, energy+modifier, bomb+modifier, bio+modifier, rad+modifier, fire+modifier, acid+modifier, magic+modifier, stamina+modifier, consume+modifier, bleed+modifier)

/datum/armor/proc/setRating(melee, bullet, laser, energy, bomb, bio, rad, fire, acid, magic, consume)
/datum/armor/proc/setRating(melee, bullet, laser, energy, bomb, bio, rad, fire, acid, magic, consume, bleed)
return getArmor((isnull(melee) ? src.melee : melee),\
(isnull(bullet) ? src.bullet : bullet),\
(isnull(laser) ? src.laser : laser),\
Expand All @@ -53,19 +55,20 @@
(isnull(acid) ? src.acid : acid),\
(isnull(magic) ? src.magic : magic),\
(isnull(stamina) ? src.stamina : stamina),\
(isnull(consume) ? src.consume : consume))
(isnull(consume) ? src.consume : consume),\
(isnull(bleed) ? src.bleed : bleed))

/datum/armor/proc/getRating(rating)
return vars[rating]

/datum/armor/proc/getList()
return list(MELEE = melee, BULLET = bullet, LASER = laser, ENERGY = energy, BOMB = bomb, BIO = bio, RAD = rad, FIRE = fire, ACID = acid, MAGIC = magic, STAMINA = stamina, CONSUME = consume)
return list(MELEE = melee, BULLET = bullet, LASER = laser, ENERGY = energy, BOMB = bomb, BIO = bio, RAD = rad, FIRE = fire, ACID = acid, MAGIC = magic, STAMINA = stamina, CONSUME = consume, BLEED = bleed)

/datum/armor/proc/attachArmor(datum/armor/AA)
return getArmor(melee+AA.melee, bullet+AA.bullet, laser+AA.laser, energy+AA.energy, bomb+AA.bomb, bio+AA.bio, rad+AA.rad, fire+AA.fire, acid+AA.acid, magic+AA.magic, stamina+AA.stamina, consume+AA.consume)
return getArmor(melee+AA.melee, bullet+AA.bullet, laser+AA.laser, energy+AA.energy, bomb+AA.bomb, bio+AA.bio, rad+AA.rad, fire+AA.fire, acid+AA.acid, magic+AA.magic, stamina+AA.stamina, consume+AA.consume, bleed+AA.bleed)

/datum/armor/proc/detachArmor(datum/armor/AA)
return getArmor(melee-AA.melee, bullet-AA.bullet, laser-AA.laser, energy-AA.energy, bomb-AA.bomb, bio-AA.bio, rad-AA.rad, fire-AA.fire, acid-AA.acid, magic-AA.magic, stamina-AA.stamina, consume+AA.consume)
return getArmor(melee-AA.melee, bullet-AA.bullet, laser-AA.laser, energy-AA.energy, bomb-AA.bomb, bio-AA.bio, rad-AA.rad, fire-AA.fire, acid-AA.acid, magic-AA.magic, stamina-AA.stamina, consume+AA.consume, bleed+AA.bleed)

/datum/armor/vv_edit_var(var_name, var_value)
if (var_name == NAMEOF(src, tag))
Expand Down
2 changes: 1 addition & 1 deletion code/datums/components/butchering.dm
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@
H.visible_message("<span class='danger'>[user] slits [H]'s throat!</span>", \
"<span class='userdanger'>[user] slits your throat...</span>")
H.apply_damage(item_force, BRUTE, BODY_ZONE_HEAD)
H.bleed_rate = clamp(H.bleed_rate + 20, 0, 30)
H.add_bleeding(BLEED_CRITICAL)
H.apply_status_effect(/datum/status_effect/neck_slice)

/datum/component/butchering/proc/Butcher(mob/living/butcher, mob/living/meat)
Expand Down
1 change: 1 addition & 0 deletions code/datums/components/caltrop.dm
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
damage *= 0.5

H.apply_damage(damage, BRUTE, picked_def_zone)
H.add_bleeding(BLEED_SCRATCH)

if(COOLDOWN_FINISHED(src, caltrop_cooldown))
COOLDOWN_START(src, caltrop_cooldown, 1 SECONDS) //cooldown to avoid message spam.
Expand Down
3 changes: 3 additions & 0 deletions code/datums/components/cult_ritual_item.dm
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,9 @@

if(cultist.blood_volume)
cultist.apply_damage(initial(rune_to_scribe.scribe_damage), BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) // *cuts arm* *bone explodes* ever have one of those days?
if (iscarbon(cultist))
var/mob/living/carbon/carbon_cultist = cultist
carbon_cultist.add_bleeding(BLEED_TINY)

var/scribe_mod = initial(rune_to_scribe.scribe_delay)
if(!initial(rune_to_scribe.no_scribe_boost) && (our_turf.type in turfs_that_boost_us))
Expand Down
6 changes: 3 additions & 3 deletions code/datums/components/pellet_cloud.dm
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,6 @@


/datum/component/pellet_cloud/Initialize(projectile_type=/obj/item/shrapnel, magnitude=5)
if(!isammocasing(parent) && !isgrenade(parent) && !islandmine(parent))
return COMPONENT_INCOMPATIBLE

if(magnitude < 1)
stack_trace("Invalid magnitude [magnitude] < 1 on pellet_cloud, parent: [parent]")
magnitude = 1
Expand All @@ -59,6 +56,9 @@
num_pellets = magnitude
else if(isgrenade(parent) || islandmine(parent))
radius = magnitude
else
radius = magnitude
create_blast_pellets(null, null)

/datum/component/pellet_cloud/Destroy(force, silent)
pellets = null
Expand Down
2 changes: 1 addition & 1 deletion code/datums/components/twohanded.dm
Original file line number Diff line number Diff line change
Expand Up @@ -390,7 +390,7 @@
name = "offhand"
icon_state = "offhand"
w_class = WEIGHT_CLASS_HUGE
item_flags = ABSTRACT | DROPDEL
item_flags = ABSTRACT | DROPDEL | NOBLUDGEON
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
/// Off Hand tracking of wielded status
var/wielded = FALSE
Expand Down
3 changes: 1 addition & 2 deletions code/datums/diseases/advance/symptoms/flesh_eating.dm
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,7 @@ Bonus
if(!ishuman(M))
return
var/mob/living/carbon/human/H = M
H.bleed_rate += 2 * power //bleeding is quite strong. this is more than enough
H.bleed(max(10*power, H.bleed_rate))//having power actually up the bleed rate on this puts it into a pretty dangerous territory. this should be more managable
H.add_bleeding(BLEED_SURFACE)
H.add_splatter_floor(H.loc)
if(bleed) // this is really, really messy
var/geysers = rand(2, 6)
Expand Down
20 changes: 10 additions & 10 deletions code/datums/diseases/advance/symptoms/heal.dm
Original file line number Diff line number Diff line change
Expand Up @@ -671,9 +671,9 @@ im not even gonna bother with these for the following symptoms. typed em out, co
if(bloodpoints > 0)
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.bleed_rate >= 2 && bruteheal && bloodpoints)
if(bruteheal && bloodpoints)
bloodpoints -= 1
H.bleed_rate = max(0, (H.bleed_rate - 2))
H.cauterise_wounds(0.1)
if(M.blood_volume < BLOOD_VOLUME_NORMAL && M.get_blood_id() == /datum/reagent/blood) //bloodloss is prioritized over healing brute
bloodpoints -= 1
M.blood_volume = max((M.blood_volume + 3 * power), BLOOD_VOLUME_NORMAL) //bloodpoints are valued at 4 units of blood volume per point, so this is diminished
Expand Down Expand Up @@ -704,14 +704,14 @@ im not even gonna bother with these for the following symptoms. typed em out, co
var/possibledist = power + 1
if(M.get_blood_id() != /datum/reagent/blood)
possibledist = 1
if(!(NOBLOOD in H.dna.species.species_traits)) //if you dont have blood, well... sucks to be you
if(!((NOBLOOD in H.dna.species.species_traits) || HAS_TRAIT(H, TRAIT_NO_BLOOD))) //if you dont have blood, well... sucks to be you
H.setOxyLoss(0,0) //this is so a crit person still revives if suffocated
if(bloodpoints >= 200 && H.health > 0 && H.blood_volume >= BLOOD_VOLUME_NORMAL) //note that you need to actually need to heal, so a maxed out virus won't be bringing you back instantly in most cases. *even so*, if this needs to be nerfed ill do it in a heartbeat
H.revive(0)
H.visible_message("<span class='warning'>[H.name]'s skin takes on a rosy hue as they begin moving. They live again!</span>", "<span class='userdanger'>As your body fills with fresh blood, you feel your limbs once more, accompanied by an insatiable thirst for blood.</span>")
bloodpoints = 0
return 0
else if(bloodbag && bloodbag.blood_volume && (bloodbag.stat || bloodbag.bleed_rate))
else if(bloodbag && bloodbag.blood_volume && (bloodbag.stat || bloodbag.is_bleeding()))
if(get_dist(bloodbag, H) <= 1 && bloodbag.z == H.z)
var/amt = ((bloodbag.stat * 2) + 2) * power
var/excess = max(((min(amt, bloodbag.blood_volume) - (BLOOD_VOLUME_NORMAL - H.blood_volume)) / 2), 0)
Expand Down Expand Up @@ -753,7 +753,7 @@ im not even gonna bother with these for the following symptoms. typed em out, co
else
var/list/candidates = list()
for(var/mob/living/carbon/human/C in ohearers(min(bloodpoints/4, possibledist), H))
if(NOBLOOD in C.dna.species.species_traits)
if((NOBLOOD in C.dna.species.species_traits) || HAS_TRAIT(C, TRAIT_NO_BLOOD))
continue
if(C.stat && C.blood_volume && C.get_blood_id() == H.get_blood_id())
candidates += C
Expand All @@ -772,10 +772,10 @@ im not even gonna bother with these for the following symptoms. typed em out, co
var/mob/living/carbon/human/H = M
if(H.pulling && ishuman(H.pulling)) //grabbing is handled with the disease instead of the component, so the component doesn't have to be processed
var/mob/living/carbon/human/C = H.pulling
if(!C.bleed_rate && vampire && C.can_inject() && H.grab_state && C.get_blood_id() == H.get_blood_id() && !(NOBLOOD in C.dna.species.species_traits))//aggressive grab as a "vampire" starts the target bleeding
C.bleed_rate += 1
if(!C.is_bleeding() && vampire && C.can_inject() && H.grab_state && C.get_blood_id() == H.get_blood_id() && !((NOBLOOD in C.dna.species.species_traits)|| HAS_TRAIT(C, TRAIT_NO_BLOOD)))//aggressive grab as a "vampire" starts the target bleeding
C.add_bleeding(BLEED_SURFACE)
C.visible_message("<span class='warning'>Wounds open on [C.name]'s skin as [H.name] grips them tightly!</span>", "<span class='userdanger'>You begin bleeding at [H.name]'s touch!</span>")
if(C.blood_volume && C.can_inject() &&(C.bleed_rate && (!C.bleedsuppress || vampire )) && C.get_blood_id() == H.get_blood_id() && !(NOBLOOD in C.dna.species.species_traits))
if(C.blood_volume && C.can_inject() && (C.is_bleeding() && vampire) && C.get_blood_id() == H.get_blood_id() && !((NOBLOOD in C.dna.species.species_traits)|| HAS_TRAIT(C, TRAIT_NO_BLOOD)))
var/amt = (H.grab_state + C.stat + 2) * power
if(C.blood_volume)
var/excess = max(((min(amt, C.blood_volume) - (BLOOD_VOLUME_NORMAL - H.blood_volume)) / 4), 0)
Expand Down Expand Up @@ -819,9 +819,9 @@ im not even gonna bother with these for the following symptoms. typed em out, co
if(ishuman(M) && aggression)//finally, attack mobs touching the host.
var/mob/living/carbon/human/H = M
for(var/mob/living/carbon/human/C in ohearers(1, H))
if(NOBLOOD in C.dna.species.species_traits)
if((NOBLOOD in C.dna.species.species_traits) || HAS_TRAIT(C, TRAIT_NO_BLOOD))
continue
if((C.pulling && C.pulling == H) || (C.loc == H.loc) && C.bleed_rate && C.get_blood_id() == H.get_blood_id())
if((C.pulling && C.pulling == H) || (C.loc == H.loc) && C.is_bleeding() && C.get_blood_id() == H.get_blood_id())
var/amt = (2 * power)
if(C.blood_volume)
var/excess = max(((min(amt, C.blood_volume) - (BLOOD_VOLUME_NORMAL - H.blood_volume)) / 4 * power), 0)
Expand Down
8 changes: 5 additions & 3 deletions code/datums/diseases/transformation.dm
Original file line number Diff line number Diff line change
Expand Up @@ -157,9 +157,8 @@

/datum/disease/transformation/slime
name = "Advanced Mutation Transformation"
cure_text = "frost oil"
cures = list(/datum/reagent/consumable/frostoil)
cure_chance = 80
cure_text = "Below Freezing Temperature"
cures = list()
agent = "Advanced Mutation Toxin"
desc = "This highly concentrated extract converts anything into more of itself."
danger = DISEASE_BIOHAZARD
Expand All @@ -173,6 +172,9 @@

/datum/disease/transformation/slime/stage_act()
..()
var/mob/living/carbon/H = affected_mob
if(H.bodytemperature < T0C)
cure()
switch(stage)
if(1)
if(ishuman(affected_mob) && affected_mob.dna)
Expand Down
Loading

0 comments on commit 7127428

Please sign in to comment.