mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-11 10:11:09 +00:00
[MIRROR] /mob/living/proc/Life(delta_time) (#3509)
* /mob/living/proc/Life(delta_time) * a Co-authored-by: TemporalOroboros <TemporalOroboros@gmail.com> Co-authored-by: Gandalf2k15 <jzo123@hotmail.com>
This commit is contained in:
@@ -162,9 +162,9 @@
|
|||||||
|
|
||||||
//organ defines
|
//organ defines
|
||||||
#define STANDARD_ORGAN_THRESHOLD 100
|
#define STANDARD_ORGAN_THRESHOLD 100
|
||||||
#define STANDARD_ORGAN_HEALING 0.001
|
#define STANDARD_ORGAN_HEALING 0.0005
|
||||||
/// designed to fail organs when left to decay for ~15 minutes
|
/// designed to fail organs when left to decay for ~15 minutes
|
||||||
#define STANDARD_ORGAN_DECAY 0.00222
|
#define STANDARD_ORGAN_DECAY 0.00111
|
||||||
|
|
||||||
//used for the can_chromosome var on mutations
|
//used for the can_chromosome var on mutations
|
||||||
#define CHROMOSOME_NEVER 0
|
#define CHROMOSOME_NEVER 0
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
#define META_GAS_OVERLAY 4
|
#define META_GAS_OVERLAY 4
|
||||||
#define META_GAS_DANGER 5
|
#define META_GAS_DANGER 5
|
||||||
#define META_GAS_ID 6
|
#define META_GAS_ID 6
|
||||||
#define META_GAS_FUSION_POWER 7
|
#define META_GAS_FUSION_POWER 7
|
||||||
//ATMOS
|
//ATMOS
|
||||||
//stuff you should probably leave well alone!
|
//stuff you should probably leave well alone!
|
||||||
/// kPa*L/(K*mol)
|
/// kPa*L/(K*mol)
|
||||||
@@ -149,9 +149,9 @@
|
|||||||
/// The natural temperature for a body
|
/// The natural temperature for a body
|
||||||
#define BODYTEMP_NORMAL 310.15
|
#define BODYTEMP_NORMAL 310.15
|
||||||
/// This is the divisor which handles how much of the temperature difference between the current body temperature and 310.15K (optimal temperature) humans auto-regenerate each tick. The higher the number, the slower the recovery. This is applied each tick, so long as the mob is alive.
|
/// This is the divisor which handles how much of the temperature difference between the current body temperature and 310.15K (optimal temperature) humans auto-regenerate each tick. The higher the number, the slower the recovery. This is applied each tick, so long as the mob is alive.
|
||||||
#define BODYTEMP_AUTORECOVERY_DIVISOR 14
|
#define BODYTEMP_AUTORECOVERY_DIVISOR 28
|
||||||
/// Minimum amount of kelvin moved toward 310K per tick. So long as abs(310.15 - bodytemp) is more than 50.
|
/// Minimum amount of kelvin moved toward 310K per tick. So long as abs(310.15 - bodytemp) is more than 50.
|
||||||
#define BODYTEMP_AUTORECOVERY_MINIMUM 6
|
#define BODYTEMP_AUTORECOVERY_MINIMUM 3
|
||||||
///Similar to the BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is lower than their body temperature. Make it lower to lose bodytemp faster.
|
///Similar to the BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is lower than their body temperature. Make it lower to lose bodytemp faster.
|
||||||
#define BODYTEMP_COLD_DIVISOR 15
|
#define BODYTEMP_COLD_DIVISOR 15
|
||||||
/// Similar to the BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is higher than their body temperature. Make it lower to gain bodytemp faster.
|
/// Similar to the BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is higher than their body temperature. Make it lower to gain bodytemp faster.
|
||||||
@@ -216,10 +216,10 @@
|
|||||||
#define SHOES_MAX_TEMP_PROTECT 1500
|
#define SHOES_MAX_TEMP_PROTECT 1500
|
||||||
|
|
||||||
/// The amount of pressure damage someone takes is equal to (pressure / HAZARD_HIGH_PRESSURE)*PRESSURE_DAMAGE_COEFFICIENT, with the maximum of MAX_PRESSURE_DAMAGE
|
/// The amount of pressure damage someone takes is equal to (pressure / HAZARD_HIGH_PRESSURE)*PRESSURE_DAMAGE_COEFFICIENT, with the maximum of MAX_PRESSURE_DAMAGE
|
||||||
#define PRESSURE_DAMAGE_COEFFICIENT 4
|
#define PRESSURE_DAMAGE_COEFFICIENT 2
|
||||||
#define MAX_HIGH_PRESSURE_DAMAGE 4
|
#define MAX_HIGH_PRESSURE_DAMAGE 2
|
||||||
/// The amount of damage someone takes when in a low pressure area (The pressure threshold is so low that it doesn't make sense to do any calculations, so it just applies this flat value).
|
/// The amount of damage someone takes when in a low pressure area (The pressure threshold is so low that it doesn't make sense to do any calculations, so it just applies this flat value).
|
||||||
#define LOW_PRESSURE_DAMAGE 4
|
#define LOW_PRESSURE_DAMAGE 2
|
||||||
|
|
||||||
/// Humans are slowed by the difference between bodytemp and BODYTEMP_COLD_DAMAGE_LIMIT divided by this
|
/// Humans are slowed by the difference between bodytemp and BODYTEMP_COLD_DAMAGE_LIMIT divided by this
|
||||||
#define COLD_SLOWDOWN_FACTOR 20
|
#define COLD_SLOWDOWN_FACTOR 20
|
||||||
@@ -539,6 +539,6 @@ GLOBAL_LIST_INIT(pipe_paint_colors, sortList(list(
|
|||||||
#define MIASMA_GIBS_MOLES 0.005
|
#define MIASMA_GIBS_MOLES 0.005
|
||||||
|
|
||||||
//Defines for N2O and Healium euphoria moodlets
|
//Defines for N2O and Healium euphoria moodlets
|
||||||
#define EUPHORIA_INACTIVE 0
|
#define EUPHORIA_INACTIVE 0
|
||||||
#define EUPHORIA_ACTIVE 1
|
#define EUPHORIA_ACTIVE 1
|
||||||
#define EUPHORIA_LAST_FLAG 2
|
#define EUPHORIA_LAST_FLAG 2
|
||||||
|
|||||||
@@ -43,7 +43,7 @@
|
|||||||
#define BLOB_NODE_PULSE_RANGE 3 // The radius up to which the core activates structures, and up to which structures can be built
|
#define BLOB_NODE_PULSE_RANGE 3 // The radius up to which the core activates structures, and up to which structures can be built
|
||||||
#define BLOB_NODE_EXPAND_RANGE 2 // Radius of automatic expansion
|
#define BLOB_NODE_EXPAND_RANGE 2 // Radius of automatic expansion
|
||||||
#define BLOB_NODE_STRONG_REINFORCE_RANGE 0 // The radius of tiles surrounding the node that get upgraded
|
#define BLOB_NODE_STRONG_REINFORCE_RANGE 0 // The radius of tiles surrounding the node that get upgraded
|
||||||
#define BLOB_NODE_REFLECTOR_REINFORCE_RANGE 0
|
#define BLOB_NODE_REFLECTOR_REINFORCE_RANGE 0
|
||||||
#define BLOB_NODE_MAX_SPORES 1 // Spores that nodes can maintain
|
#define BLOB_NODE_MAX_SPORES 1 // Spores that nodes can maintain
|
||||||
|
|
||||||
#define BLOB_FACTORY_MAX_HP 200
|
#define BLOB_FACTORY_MAX_HP 200
|
||||||
@@ -65,7 +65,7 @@
|
|||||||
#define BLOB_STRONG_HP_REGEN 2
|
#define BLOB_STRONG_HP_REGEN 2
|
||||||
|
|
||||||
#define BLOB_REFLECTOR_MAX_HP 150
|
#define BLOB_REFLECTOR_MAX_HP 150
|
||||||
#define BLOB_REFLECTOR_HP_REGEN 2
|
#define BLOB_REFLECTOR_HP_REGEN 2
|
||||||
|
|
||||||
|
|
||||||
// Structure purchasing
|
// Structure purchasing
|
||||||
@@ -93,7 +93,7 @@
|
|||||||
|
|
||||||
#define BLOBMOB_HEALING_MULTIPLIER 0.0125 // Multiplies by -maxHealth and heals the blob by this amount every blob_act
|
#define BLOBMOB_HEALING_MULTIPLIER 0.0125 // Multiplies by -maxHealth and heals the blob by this amount every blob_act
|
||||||
#define BLOBMOB_SPORE_HEALTH 30 // Base spore health
|
#define BLOBMOB_SPORE_HEALTH 30 // Base spore health
|
||||||
#define BLOBMOB_SPORE_SPAWN_COOLDOWN 8 SECONDS
|
#define BLOBMOB_SPORE_SPAWN_COOLDOWN 8 SECONDS
|
||||||
#define BLOBMOB_SPORE_DMG_LOWER 8
|
#define BLOBMOB_SPORE_DMG_LOWER 8
|
||||||
#define BLOBMOB_SPORE_DMG_UPPER 16
|
#define BLOBMOB_SPORE_DMG_UPPER 16
|
||||||
#define BLOBMOB_BLOBBERNAUT_RESOURCE_COST 40 // Purchase price for making a blobbernaut
|
#define BLOBMOB_BLOBBERNAUT_RESOURCE_COST 40 // Purchase price for making a blobbernaut
|
||||||
@@ -104,6 +104,6 @@
|
|||||||
#define BLOBMOB_BLOBBERNAUT_DMG_UPPER 4
|
#define BLOBMOB_BLOBBERNAUT_DMG_UPPER 4
|
||||||
#define BLOBMOB_BLOBBERNAUT_REAGENTATK_VOL 20 // Amounts of strain reagents applied on attack -- basically the main damage stat
|
#define BLOBMOB_BLOBBERNAUT_REAGENTATK_VOL 20 // Amounts of strain reagents applied on attack -- basically the main damage stat
|
||||||
#define BLOBMOB_BLOBBERNAUT_DMG_OBJ 60 // Damage dealth to objects/machines
|
#define BLOBMOB_BLOBBERNAUT_DMG_OBJ 60 // Damage dealth to objects/machines
|
||||||
#define BLOBMOB_BLOBBERNAUT_HEALING_CORE 0.1 // Percentage multiplier HP restored on Life() when within 2 tiles of the blob core
|
#define BLOBMOB_BLOBBERNAUT_HEALING_CORE 0.05 // Percentage multiplier HP restored on Life() when within 2 tiles of the blob core
|
||||||
#define BLOBMOB_BLOBBERNAUT_HEALING_NODE 0.05 // Same, but for a nearby node
|
#define BLOBMOB_BLOBBERNAUT_HEALING_NODE 0.025 // Same, but for a nearby node
|
||||||
#define BLOBMOB_BLOBBERNAUT_HEALTH_DECAY 0.025 // Percentage multiplier HP lost when not near blob tiles or without factory
|
#define BLOBMOB_BLOBBERNAUT_HEALTH_DECAY 0.0125 // Percentage multiplier HP lost when not near blob tiles or without factory
|
||||||
|
|||||||
@@ -474,7 +474,12 @@ GLOBAL_LIST_INIT(pda_styles, sortList(list(MONO, VT, ORBITRON, SHARE)))
|
|||||||
#define GAUSSIAN_BLUR(filter_size) filter(type="blur", size=filter_size)
|
#define GAUSSIAN_BLUR(filter_size) filter(type="blur", size=filter_size)
|
||||||
|
|
||||||
#define STANDARD_GRAVITY 1 //Anything above this is high gravity, anything below no grav
|
#define STANDARD_GRAVITY 1 //Anything above this is high gravity, anything below no grav
|
||||||
#define GRAVITY_DAMAGE_TRESHOLD 3 //Starting with this value gravity will start to damage mobs
|
/// The gravity strength threshold for high gravity damage.
|
||||||
|
#define GRAVITY_DAMAGE_THRESHOLD 3
|
||||||
|
/// The scaling factor for high gravity damage.
|
||||||
|
#define GRAVITY_DAMAGE_SCALING 0.5
|
||||||
|
/// The maximum [BRUTE] damage a mob can take from high gravity per second.
|
||||||
|
#define GRAVITY_DAMAGE_MAXIMUM 1.5
|
||||||
|
|
||||||
#define CAMERA_NO_GHOSTS 0
|
#define CAMERA_NO_GHOSTS 0
|
||||||
#define CAMERA_SEE_GHOSTS_BASIC 1
|
#define CAMERA_SEE_GHOSTS_BASIC 1
|
||||||
|
|||||||
@@ -28,6 +28,9 @@
|
|||||||
#define BLOOD_VOLUME_BAD 224
|
#define BLOOD_VOLUME_BAD 224
|
||||||
#define BLOOD_VOLUME_SURVIVE 122
|
#define BLOOD_VOLUME_SURVIVE 122
|
||||||
|
|
||||||
|
/// How efficiently humans regenerate blood.
|
||||||
|
#define BLOOD_REGEN_FACTOR 0.25
|
||||||
|
|
||||||
//Sizes of mobs, used by mob/living/var/mob_size
|
//Sizes of mobs, used by mob/living/var/mob_size
|
||||||
#define MOB_SIZE_TINY 0
|
#define MOB_SIZE_TINY 0
|
||||||
#define MOB_SIZE_SMALL 1
|
#define MOB_SIZE_SMALL 1
|
||||||
@@ -71,17 +74,17 @@
|
|||||||
#define MAX_LIVING_HEALTH 100
|
#define MAX_LIVING_HEALTH 100
|
||||||
|
|
||||||
#define HUMAN_MAX_OXYLOSS 3
|
#define HUMAN_MAX_OXYLOSS 3
|
||||||
#define HUMAN_CRIT_MAX_OXYLOSS (SSmobs.wait/30)
|
#define HUMAN_CRIT_MAX_OXYLOSS (SSMOBS_DT/3)
|
||||||
|
|
||||||
#define STAMINA_REGEN_BLOCK_TIME (10 SECONDS)
|
#define STAMINA_REGEN_BLOCK_TIME (10 SECONDS)
|
||||||
|
|
||||||
#define HEAT_DAMAGE_LEVEL_1 2 //Amount of damage applied when your body temperature just passes the 360.15k safety point
|
#define HEAT_DAMAGE_LEVEL_1 1 //Amount of damage applied when your body temperature just passes the 360.15k safety point
|
||||||
#define HEAT_DAMAGE_LEVEL_2 3 //Amount of damage applied when your body temperature passes the 400K point
|
#define HEAT_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when your body temperature passes the 400K point
|
||||||
#define HEAT_DAMAGE_LEVEL_3 8 //Amount of damage applied when your body temperature passes the 460K point and you are on fire
|
#define HEAT_DAMAGE_LEVEL_3 4 //Amount of damage applied when your body temperature passes the 460K point and you are on fire
|
||||||
|
|
||||||
#define COLD_DAMAGE_LEVEL_1 0.5 //Amount of damage applied when your body temperature just passes the 260.15k safety point
|
#define COLD_DAMAGE_LEVEL_1 0.25 //Amount of damage applied when your body temperature just passes the 260.15k safety point
|
||||||
#define COLD_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when your body temperature passes the 200K point
|
#define COLD_DAMAGE_LEVEL_2 0.75 //Amount of damage applied when your body temperature passes the 200K point
|
||||||
#define COLD_DAMAGE_LEVEL_3 3 //Amount of damage applied when your body temperature passes the 120K point
|
#define COLD_DAMAGE_LEVEL_3 1.5 //Amount of damage applied when your body temperature passes the 120K point
|
||||||
|
|
||||||
//Note that gas heat damage is only applied once every FOUR ticks.
|
//Note that gas heat damage is only applied once every FOUR ticks.
|
||||||
#define HEAT_GAS_DAMAGE_LEVEL_1 2 //Amount of damage applied when the current breath's temperature just passes the 360.15k safety point
|
#define HEAT_GAS_DAMAGE_LEVEL_1 2 //Amount of damage applied when the current breath's temperature just passes the 360.15k safety point
|
||||||
@@ -297,9 +300,9 @@
|
|||||||
#define POCKET_STRIP_DELAY 40 //time taken (in deciseconds) to search somebody's pockets
|
#define POCKET_STRIP_DELAY 40 //time taken (in deciseconds) to search somebody's pockets
|
||||||
#define DOOR_CRUSH_DAMAGE 15 //the amount of damage that airlocks deal when they crush you
|
#define DOOR_CRUSH_DAMAGE 15 //the amount of damage that airlocks deal when they crush you
|
||||||
|
|
||||||
#define HUNGER_FACTOR 0.1 //factor at which mob nutrition decreases
|
#define HUNGER_FACTOR 0.05 //factor at which mob nutrition decreases
|
||||||
#define ETHEREAL_CHARGE_FACTOR 1.6 //factor at which ethereal's charge decreases
|
#define ETHEREAL_CHARGE_FACTOR 0.8 //factor at which ethereal's charge decreases per second
|
||||||
#define REAGENTS_METABOLISM 0.4 //How many units of reagent are consumed per tick, by default.
|
#define REAGENTS_METABOLISM 0.2 //How many units of reagent are consumed per second, by default.
|
||||||
#define REAGENTS_EFFECT_MULTIPLIER (REAGENTS_METABOLISM / 0.4) // By defining the effect multiplier this way, it'll exactly adjust all effects according to how they originally were with the 0.4 metabolism
|
#define REAGENTS_EFFECT_MULTIPLIER (REAGENTS_METABOLISM / 0.4) // By defining the effect multiplier this way, it'll exactly adjust all effects according to how they originally were with the 0.4 metabolism
|
||||||
|
|
||||||
// Eye protection
|
// Eye protection
|
||||||
|
|||||||
@@ -11,10 +11,11 @@ Ask ninjanomnom if they're around
|
|||||||
#define RAD_MOB_COEFFICIENT 0.20 // Radiation applied is multiplied by this
|
#define RAD_MOB_COEFFICIENT 0.20 // Radiation applied is multiplied by this
|
||||||
#define RAD_MOB_SKIN_PROTECTION ((1/RAD_MOB_COEFFICIENT)+RAD_BACKGROUND_RADIATION)
|
#define RAD_MOB_SKIN_PROTECTION ((1/RAD_MOB_COEFFICIENT)+RAD_BACKGROUND_RADIATION)
|
||||||
|
|
||||||
#define RAD_LOSS_PER_TICK 0.5
|
#define RAD_LOSS_PER_SECOND 0.25
|
||||||
#define RAD_TOX_COEFFICIENT 0.08 // Toxin damage per tick coefficient
|
/// Toxin damage per second coefficient
|
||||||
|
#define RAD_TOX_COEFFICIENT 0.04
|
||||||
#define RAD_OVERDOSE_REDUCTION 0.000001 // Coefficient to the reduction in applied rads once the thing, usualy mob, has too much radiation
|
#define RAD_OVERDOSE_REDUCTION 0.000001 // Coefficient to the reduction in applied rads once the thing, usualy mob, has too much radiation
|
||||||
// WARNING: This number is highly sensitive to change, graph is first for best results
|
// WARNING: This number is highly sensitive to change, graph is first for best results
|
||||||
#define RAD_BURN_THRESHOLD 1000 // Applied radiation must be over this to burn
|
#define RAD_BURN_THRESHOLD 1000 // Applied radiation must be over this to burn
|
||||||
//Holy shit test after you tweak anything it's said like 6 times in here
|
//Holy shit test after you tweak anything it's said like 6 times in here
|
||||||
//You probably want to plot any tweaks you make so you can see the curves visually
|
//You probably want to plot any tweaks you make so you can see the curves visually
|
||||||
@@ -22,18 +23,30 @@ Ask ninjanomnom if they're around
|
|||||||
#define RAD_BURN_LOG_GRADIENT 10000
|
#define RAD_BURN_LOG_GRADIENT 10000
|
||||||
#define RAD_BURN_CURVE(X) log(1+((X-RAD_BURN_THRESHOLD)/RAD_BURN_LOG_GRADIENT))/log(RAD_BURN_LOG_BASE)
|
#define RAD_BURN_CURVE(X) log(1+((X-RAD_BURN_THRESHOLD)/RAD_BURN_LOG_GRADIENT))/log(RAD_BURN_LOG_BASE)
|
||||||
|
|
||||||
#define RAD_MOB_SAFE 500 // How much stored radiation in a mob with no ill effects
|
/// How much stored radiation in a mob with no ill effects
|
||||||
|
#define RAD_MOB_SAFE 500
|
||||||
|
|
||||||
#define RAD_MOB_HAIRLOSS 800 // How much stored radiation to check for hair loss
|
/// How much stored radiation to check for hair loss
|
||||||
|
#define RAD_MOB_HAIRLOSS 800
|
||||||
|
/// Chance of you hair starting to fall out every second when over threshold
|
||||||
|
#define RAD_MOB_HAIRLOSS_PROB 7.5
|
||||||
|
|
||||||
#define RAD_MOB_MUTATE 1250 // How much stored radiation to check for mutation
|
/// How much stored radiation to check for mutation
|
||||||
|
#define RAD_MOB_MUTATE 1250
|
||||||
|
/// Chance of randomly mutating every second when over threshold
|
||||||
|
#define RAD_MOB_MUTATE_PROB 0.5
|
||||||
|
|
||||||
#define RAD_MOB_VOMIT 2000 // The amount of radiation to check for vomitting
|
/// The amount of radiation to check for vomitting
|
||||||
#define RAD_MOB_VOMIT_PROB 1 // Chance per tick of vomitting
|
#define RAD_MOB_VOMIT 2000
|
||||||
|
/// Chance per second of vomitting
|
||||||
|
#define RAD_MOB_VOMIT_PROB 0.5
|
||||||
|
|
||||||
#define RAD_MOB_KNOCKDOWN 2000 // How much stored radiation to check for stunning
|
/// How much stored radiation to check for stunning
|
||||||
#define RAD_MOB_KNOCKDOWN_PROB 1 // Chance of knockdown per tick when over threshold
|
#define RAD_MOB_KNOCKDOWN 2000
|
||||||
#define RAD_MOB_KNOCKDOWN_AMOUNT 3 // Amount of knockdown when it occurs
|
/// Chance of knockdown per second when over threshold
|
||||||
|
#define RAD_MOB_KNOCKDOWN_PROB 0.5
|
||||||
|
/// Amount of knockdown when it occurs
|
||||||
|
#define RAD_MOB_KNOCKDOWN_AMOUNT 3
|
||||||
|
|
||||||
#define RAD_NO_INSULATION 1.0 // For things that shouldn't become irradiated for whatever reason
|
#define RAD_NO_INSULATION 1.0 // For things that shouldn't become irradiated for whatever reason
|
||||||
#define RAD_VERY_LIGHT_INSULATION 0.9 // What girders have
|
#define RAD_VERY_LIGHT_INSULATION 0.9 // What girders have
|
||||||
|
|||||||
@@ -80,12 +80,12 @@ GLOBAL_LIST_INIT(global_all_wound_types, list(/datum/wound/blunt/critical, /datu
|
|||||||
|
|
||||||
|
|
||||||
// ~random wound balance defines
|
// ~random wound balance defines
|
||||||
/// how quickly sanitization removes infestation and decays per tick
|
/// how quickly sanitization removes infestation and decays per second
|
||||||
#define WOUND_BURN_SANITIZATION_RATE 0.15
|
#define WOUND_BURN_SANITIZATION_RATE 0.075
|
||||||
/// how much blood you can lose per tick per slash max. 8 is a LOT of blood for one cut so don't worry about hitting it easily
|
/// how much blood you can lose per second per slash max. 4 is a LOT of blood for one cut so don't worry about hitting it easily
|
||||||
#define WOUND_SLASH_MAX_BLOODFLOW 8
|
#define WOUND_SLASH_MAX_BLOODFLOW 4
|
||||||
/// dead people don't bleed, but they can clot! this is the minimum amount of clotting per tick on dead people, so even critical cuts will slowly clot in dead people
|
/// dead people don't bleed, but they can clot! this is the minimum amount of clotting per tick on dead people, so even critical cuts will slowly clot in dead people
|
||||||
#define WOUND_SLASH_DEAD_CLOT_MIN 0.05
|
#define WOUND_SLASH_DEAD_CLOT_MIN 0.025
|
||||||
/// if we suffer a bone wound to the head that creates brain traumas, the timer for the trauma cycle is +/- by this percent (0-100)
|
/// if we suffer a bone wound to the head that creates brain traumas, the timer for the trauma cycle is +/- by this percent (0-100)
|
||||||
#define WOUND_BONE_HEAD_TIME_VARIANCE 20
|
#define WOUND_BONE_HEAD_TIME_VARIANCE 20
|
||||||
|
|
||||||
|
|||||||
@@ -642,8 +642,8 @@ GLOBAL_LIST_EMPTY(species_list)
|
|||||||
*/
|
*/
|
||||||
/proc/get_temp_change_amount(temp_diff, change_rate = 0.06)
|
/proc/get_temp_change_amount(temp_diff, change_rate = 0.06)
|
||||||
if(temp_diff < 0)
|
if(temp_diff < 0)
|
||||||
return (log((temp_diff * -1) * change_rate + 1) * BODYTEMP_AUTORECOVERY_DIVISOR) * -1
|
return -(BODYTEMP_AUTORECOVERY_DIVISOR / 2) * log(1 - (temp_diff * change_rate))
|
||||||
return log(temp_diff * change_rate + 1) * BODYTEMP_AUTORECOVERY_DIVISOR
|
return (BODYTEMP_AUTORECOVERY_DIVISOR / 2) * log(1 + (temp_diff * change_rate))
|
||||||
|
|
||||||
#define ISADVANCEDTOOLUSER(mob) (HAS_TRAIT(mob, TRAIT_ADVANCEDTOOLUSER) && !HAS_TRAIT(mob, TRAIT_MONKEYLIKE))
|
#define ISADVANCEDTOOLUSER(mob) (HAS_TRAIT(mob, TRAIT_ADVANCEDTOOLUSER) && !HAS_TRAIT(mob, TRAIT_MONKEYLIKE))
|
||||||
|
|
||||||
|
|||||||
@@ -32,11 +32,12 @@ SUBSYSTEM_DEF(mobs)
|
|||||||
//cache for sanic speed (lists are references anyways)
|
//cache for sanic speed (lists are references anyways)
|
||||||
var/list/currentrun = src.currentrun
|
var/list/currentrun = src.currentrun
|
||||||
var/times_fired = src.times_fired
|
var/times_fired = src.times_fired
|
||||||
|
var/delta_time = wait / (1 SECONDS) // TODO: Make this actually responsive to stuff like pausing and resuming
|
||||||
while(currentrun.len)
|
while(currentrun.len)
|
||||||
var/mob/living/L = currentrun[currentrun.len]
|
var/mob/living/L = currentrun[currentrun.len]
|
||||||
currentrun.len--
|
currentrun.len--
|
||||||
if(L)
|
if(L)
|
||||||
L.Life(times_fired)
|
L.Life(delta_time, times_fired)
|
||||||
else
|
else
|
||||||
GLOB.mob_living_list.Remove(L)
|
GLOB.mob_living_list.Remove(L)
|
||||||
if (MC_TICK_CHECK)
|
if (MC_TICK_CHECK)
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
//Called on life ticks
|
//Called on life ticks
|
||||||
/datum/brain_trauma/proc/on_life()
|
/datum/brain_trauma/proc/on_life(delta_time, times_fired)
|
||||||
return
|
return
|
||||||
|
|
||||||
//Called on death
|
//Called on death
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
antagonist.greet()
|
antagonist.greet()
|
||||||
RegisterSignal(owner, COMSIG_CARBON_HUG, .proc/on_hug)
|
RegisterSignal(owner, COMSIG_CARBON_HUG, .proc/on_hug)
|
||||||
|
|
||||||
/datum/brain_trauma/special/obsessed/on_life()
|
/datum/brain_trauma/special/obsessed/on_life(delta_time, times_fired)
|
||||||
if(!obsession || obsession.stat == DEAD)
|
if(!obsession || obsession.stat == DEAD)
|
||||||
viewing = FALSE//important, makes sure you no longer stutter when happy if you murdered them while viewing
|
viewing = FALSE//important, makes sure you no longer stutter when happy if you murdered them while viewing
|
||||||
return
|
return
|
||||||
@@ -50,10 +50,10 @@
|
|||||||
viewing = FALSE
|
viewing = FALSE
|
||||||
if(viewing)
|
if(viewing)
|
||||||
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "creeping", /datum/mood_event/creeping, obsession.name)
|
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "creeping", /datum/mood_event/creeping, obsession.name)
|
||||||
total_time_creeping += 20
|
total_time_creeping += delta_time SECONDS
|
||||||
time_spent_away = 0
|
time_spent_away = 0
|
||||||
if(attachedobsessedobj)//if an objective needs to tick down, we can do that since traumas coexist with the antagonist datum
|
if(attachedobsessedobj)//if an objective needs to tick down, we can do that since traumas coexist with the antagonist datum
|
||||||
attachedobsessedobj.timer -= 20 //mob subsystem ticks every 2 seconds(?), remove 20 deciseconds from the timer. sure, that makes sense.
|
attachedobsessedobj.timer -= delta_time SECONDS //mob subsystem ticks every 2 seconds(?), remove 20 deciseconds from the timer. sure, that makes sense.
|
||||||
else
|
else
|
||||||
out_of_view()
|
out_of_view()
|
||||||
|
|
||||||
|
|||||||
@@ -43,9 +43,9 @@
|
|||||||
owner.clear_alert("hypnosis")
|
owner.clear_alert("hypnosis")
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/datum/brain_trauma/hypnosis/on_life()
|
/datum/brain_trauma/hypnosis/on_life(delta_time, times_fired)
|
||||||
..()
|
..()
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
switch(rand(1,2))
|
switch(rand(1,2))
|
||||||
if(1)
|
if(1)
|
||||||
to_chat(owner, "<span class='hypnophrase'><i>...[lowertext(hypnotic_phrase)]...</i></span>")
|
to_chat(owner, "<span class='hypnophrase'><i>...[lowertext(hypnotic_phrase)]...</i></span>")
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
make_friend()
|
make_friend()
|
||||||
get_ghost()
|
get_ghost()
|
||||||
|
|
||||||
/datum/brain_trauma/special/imaginary_friend/on_life()
|
/datum/brain_trauma/special/imaginary_friend/on_life(delta_time, times_fired)
|
||||||
if(get_dist(owner, friend) > 9)
|
if(get_dist(owner, friend) > 9)
|
||||||
friend.recall()
|
friend.recall()
|
||||||
if(!friend)
|
if(!friend)
|
||||||
|
|||||||
@@ -11,18 +11,23 @@
|
|||||||
scan_desc = "light hypersensitivity"
|
scan_desc = "light hypersensitivity"
|
||||||
gain_text = "<span class='warning'>You feel a craving for darkness.</span>"
|
gain_text = "<span class='warning'>You feel a craving for darkness.</span>"
|
||||||
lose_text = "<span class='notice'>Light no longer bothers you.</span>"
|
lose_text = "<span class='notice'>Light no longer bothers you.</span>"
|
||||||
|
/// Cooldown to prevent warning spam
|
||||||
|
COOLDOWN_DECLARE(damage_warning_cooldown)
|
||||||
var/next_damage_warning = 0
|
var/next_damage_warning = 0
|
||||||
|
|
||||||
/datum/brain_trauma/magic/lumiphobia/on_life()
|
/datum/brain_trauma/magic/lumiphobia/on_life(delta_time, times_fired)
|
||||||
..()
|
..()
|
||||||
var/turf/T = owner.loc
|
var/turf/T = owner.loc
|
||||||
if(istype(T))
|
if(!istype(T))
|
||||||
var/light_amount = T.get_lumcount()
|
return
|
||||||
if(light_amount > SHADOW_SPECIES_LIGHT_THRESHOLD) //if there's enough light, start dying
|
|
||||||
if(world.time > next_damage_warning)
|
if(T.get_lumcount() <= SHADOW_SPECIES_LIGHT_THRESHOLD) //if there's enough light, start dying
|
||||||
to_chat(owner, "<span class='warning'><b>The light burns you!</b></span>")
|
return
|
||||||
next_damage_warning = world.time + 100 //Avoid spamming
|
|
||||||
owner.take_overall_damage(0,3)
|
if(COOLDOWN_FINISHED(src, damage_warning_cooldown))
|
||||||
|
to_chat(owner, "<span class='warning'><b>The light burns you!</b></span>")
|
||||||
|
COOLDOWN_START(src, damage_warning_cooldown, 10 SECONDS)
|
||||||
|
owner.take_overall_damage(0, 1.5 * delta_time)
|
||||||
|
|
||||||
/datum/brain_trauma/magic/poltergeist
|
/datum/brain_trauma/magic/poltergeist
|
||||||
name = "Poltergeist"
|
name = "Poltergeist"
|
||||||
@@ -31,19 +36,21 @@
|
|||||||
gain_text = "<span class='warning'>You feel a hateful presence close to you.</span>"
|
gain_text = "<span class='warning'>You feel a hateful presence close to you.</span>"
|
||||||
lose_text = "<span class='notice'>You feel the hateful presence fade away.</span>"
|
lose_text = "<span class='notice'>You feel the hateful presence fade away.</span>"
|
||||||
|
|
||||||
/datum/brain_trauma/magic/poltergeist/on_life()
|
/datum/brain_trauma/magic/poltergeist/on_life(delta_time, times_fired)
|
||||||
..()
|
..()
|
||||||
if(prob(4))
|
if(!DT_PROB(2, delta_time))
|
||||||
var/most_violent = -1 //So it can pick up items with 0 throwforce if there's nothing else
|
return
|
||||||
var/obj/item/throwing
|
|
||||||
for(var/obj/item/I in view(5, get_turf(owner)))
|
var/most_violent = -1 //So it can pick up items with 0 throwforce if there's nothing else
|
||||||
if(I.anchored)
|
var/obj/item/throwing
|
||||||
continue
|
for(var/obj/item/I in view(5, get_turf(owner)))
|
||||||
if(I.throwforce > most_violent)
|
if(I.anchored)
|
||||||
most_violent = I.throwforce
|
continue
|
||||||
throwing = I
|
if(I.throwforce > most_violent)
|
||||||
if(throwing)
|
most_violent = I.throwforce
|
||||||
throwing.throw_at(owner, 8, 2)
|
throwing = I
|
||||||
|
if(throwing)
|
||||||
|
throwing.throw_at(owner, 8, 2)
|
||||||
|
|
||||||
/datum/brain_trauma/magic/antimagic
|
/datum/brain_trauma/magic/antimagic
|
||||||
name = "Athaumasia"
|
name = "Athaumasia"
|
||||||
@@ -81,7 +88,7 @@
|
|||||||
QDEL_NULL(stalker)
|
QDEL_NULL(stalker)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/datum/brain_trauma/magic/stalker/on_life()
|
/datum/brain_trauma/magic/stalker/on_life(delta_time, times_fired)
|
||||||
// Dead and unconscious people are not interesting to the psychic stalker.
|
// Dead and unconscious people are not interesting to the psychic stalker.
|
||||||
if(owner.stat != CONSCIOUS)
|
if(owner.stat != CONSCIOUS)
|
||||||
return
|
return
|
||||||
@@ -95,7 +102,7 @@
|
|||||||
playsound(owner, 'sound/magic/demon_attack1.ogg', 50)
|
playsound(owner, 'sound/magic/demon_attack1.ogg', 50)
|
||||||
owner.visible_message("<span class='warning'>[owner] is torn apart by invisible claws!</span>", "<span class='userdanger'>Ghostly claws tear your body apart!</span>")
|
owner.visible_message("<span class='warning'>[owner] is torn apart by invisible claws!</span>", "<span class='userdanger'>Ghostly claws tear your body apart!</span>")
|
||||||
owner.take_bodypart_damage(rand(20, 45), wound_bonus=CANT_WOUND)
|
owner.take_bodypart_damage(rand(20, 45), wound_bonus=CANT_WOUND)
|
||||||
else if(prob(50))
|
else if(DT_PROB(30, delta_time))
|
||||||
stalker.forceMove(get_step_towards(stalker, owner))
|
stalker.forceMove(get_step_towards(stalker, owner))
|
||||||
if(get_dist(owner, stalker) <= 8)
|
if(get_dist(owner, stalker) <= 8)
|
||||||
if(!close_stalker)
|
if(!close_stalker)
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
gain_text = "<span class='warning'>You feel your grip on reality slipping...</span>"
|
gain_text = "<span class='warning'>You feel your grip on reality slipping...</span>"
|
||||||
lose_text = "<span class='notice'>You feel more grounded.</span>"
|
lose_text = "<span class='notice'>You feel more grounded.</span>"
|
||||||
|
|
||||||
/datum/brain_trauma/mild/hallucinations/on_life()
|
/datum/brain_trauma/mild/hallucinations/on_life(delta_time, times_fired)
|
||||||
owner.hallucination = min(owner.hallucination + 10, 50)
|
owner.hallucination = min(owner.hallucination + 10, 50)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
gain_text = "<span class='warning'>Speaking clearly is getting harder.</span>"
|
gain_text = "<span class='warning'>Speaking clearly is getting harder.</span>"
|
||||||
lose_text = "<span class='notice'>You feel in control of your speech.</span>"
|
lose_text = "<span class='notice'>You feel in control of your speech.</span>"
|
||||||
|
|
||||||
/datum/brain_trauma/mild/stuttering/on_life()
|
/datum/brain_trauma/mild/stuttering/on_life(delta_time, times_fired)
|
||||||
owner.stuttering = min(owner.stuttering + 5, 25)
|
owner.stuttering = min(owner.stuttering + 5, 25)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
@@ -46,16 +46,12 @@
|
|||||||
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "dumb", /datum/mood_event/oblivious)
|
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "dumb", /datum/mood_event/oblivious)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/datum/brain_trauma/mild/dumbness/on_life()
|
/datum/brain_trauma/mild/dumbness/on_life(delta_time, times_fired)
|
||||||
owner.derpspeech = min(owner.derpspeech + 5, 25)
|
owner.derpspeech = min(owner.derpspeech + 5, 25)
|
||||||
if(prob(3))
|
if(DT_PROB(1.5, delta_time))
|
||||||
owner.emote("drool")
|
owner.emote("drool")
|
||||||
//SKYRAT EDIT REMOVAL BEGIN - LRP
|
else if(owner.stat == CONSCIOUS && DT_PROB(1.5, delta_time))
|
||||||
/*
|
|
||||||
else if(owner.stat == CONSCIOUS && prob(3))
|
|
||||||
owner.say(pick_list_replacements(BRAIN_DAMAGE_FILE, "brain_damage"), forced = "brain damage")
|
owner.say(pick_list_replacements(BRAIN_DAMAGE_FILE, "brain_damage"), forced = "brain damage")
|
||||||
*/
|
|
||||||
//SKYRAT EDIT END
|
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/datum/brain_trauma/mild/dumbness/on_lose()
|
/datum/brain_trauma/mild/dumbness/on_lose()
|
||||||
@@ -86,8 +82,8 @@
|
|||||||
gain_text = "<span class='warning'>Your head hurts!</span>"
|
gain_text = "<span class='warning'>Your head hurts!</span>"
|
||||||
lose_text = "<span class='notice'>The pressure inside your head starts fading.</span>"
|
lose_text = "<span class='notice'>The pressure inside your head starts fading.</span>"
|
||||||
|
|
||||||
/datum/brain_trauma/mild/concussion/on_life()
|
/datum/brain_trauma/mild/concussion/on_life(delta_time, times_fired)
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
switch(rand(1,11))
|
switch(rand(1,11))
|
||||||
if(1)
|
if(1)
|
||||||
owner.vomit()
|
owner.vomit()
|
||||||
@@ -118,9 +114,9 @@
|
|||||||
owner.set_screwyhud(SCREWYHUD_HEALTHY)
|
owner.set_screwyhud(SCREWYHUD_HEALTHY)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/datum/brain_trauma/mild/healthy/on_life()
|
/datum/brain_trauma/mild/healthy/on_life(delta_time, times_fired)
|
||||||
owner.set_screwyhud(SCREWYHUD_HEALTHY) //just in case of hallucinations
|
owner.set_screwyhud(SCREWYHUD_HEALTHY) //just in case of hallucinations
|
||||||
owner.adjustStaminaLoss(-5) //no pain, no fatigue
|
owner.adjustStaminaLoss(-2.5 * delta_time) //no pain, no fatigue
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/datum/brain_trauma/mild/healthy/on_lose()
|
/datum/brain_trauma/mild/healthy/on_lose()
|
||||||
@@ -134,11 +130,11 @@
|
|||||||
gain_text = "<span class='warning'>Your muscles feel oddly faint.</span>"
|
gain_text = "<span class='warning'>Your muscles feel oddly faint.</span>"
|
||||||
lose_text = "<span class='notice'>You feel in control of your muscles again.</span>"
|
lose_text = "<span class='notice'>You feel in control of your muscles again.</span>"
|
||||||
|
|
||||||
/datum/brain_trauma/mild/muscle_weakness/on_life()
|
/datum/brain_trauma/mild/muscle_weakness/on_life(delta_time, times_fired)
|
||||||
var/fall_chance = 1
|
var/fall_chance = 1
|
||||||
if(owner.m_intent == MOVE_INTENT_RUN)
|
if(owner.m_intent == MOVE_INTENT_RUN)
|
||||||
fall_chance += 2
|
fall_chance += 2
|
||||||
if(prob(fall_chance) && owner.body_position == STANDING_UP)
|
if(DT_PROB(0.5 * fall_chance, delta_time) && owner.body_position == STANDING_UP)
|
||||||
to_chat(owner, "<span class='warning'>Your leg gives out!</span>")
|
to_chat(owner, "<span class='warning'>Your leg gives out!</span>")
|
||||||
owner.Paralyze(35)
|
owner.Paralyze(35)
|
||||||
|
|
||||||
@@ -146,10 +142,10 @@
|
|||||||
var/drop_chance = 1
|
var/drop_chance = 1
|
||||||
var/obj/item/I = owner.get_active_held_item()
|
var/obj/item/I = owner.get_active_held_item()
|
||||||
drop_chance += I.w_class
|
drop_chance += I.w_class
|
||||||
if(prob(drop_chance) && owner.dropItemToGround(I))
|
if(DT_PROB(0.5 * drop_chance, delta_time) && owner.dropItemToGround(I))
|
||||||
to_chat(owner, "<span class='warning'>You drop [I]!</span>")
|
to_chat(owner, "<span class='warning'>You drop [I]!</span>")
|
||||||
|
|
||||||
else if(prob(3))
|
else if(DT_PROB(1.5, delta_time))
|
||||||
to_chat(owner, "<span class='warning'>You feel a sudden weakness in your muscles!</span>")
|
to_chat(owner, "<span class='warning'>You feel a sudden weakness in your muscles!</span>")
|
||||||
owner.adjustStaminaLoss(50)
|
owner.adjustStaminaLoss(50)
|
||||||
..()
|
..()
|
||||||
@@ -176,8 +172,8 @@
|
|||||||
gain_text = "<span class='warning'>Your throat itches incessantly...</span>"
|
gain_text = "<span class='warning'>Your throat itches incessantly...</span>"
|
||||||
lose_text = "<span class='notice'>Your throat stops itching.</span>"
|
lose_text = "<span class='notice'>Your throat stops itching.</span>"
|
||||||
|
|
||||||
/datum/brain_trauma/mild/nervous_cough/on_life()
|
/datum/brain_trauma/mild/nervous_cough/on_life(delta_time, times_fired)
|
||||||
if(prob(12) && !HAS_TRAIT(owner, TRAIT_SOOTHED_THROAT))
|
if(DT_PROB(6, delta_time) && !HAS_TRAIT(owner, TRAIT_SOOTHED_THROAT))
|
||||||
if(prob(5))
|
if(prob(5))
|
||||||
to_chat(owner, "<span notice='warning'>[pick("You have a coughing fit!", "You can't stop coughing!")]</span>")
|
to_chat(owner, "<span notice='warning'>[pick("You have a coughing fit!", "You can't stop coughing!")]</span>")
|
||||||
owner.Immobilize(20)
|
owner.Immobilize(20)
|
||||||
|
|||||||
@@ -5,8 +5,11 @@
|
|||||||
gain_text = "<span class='warning'>You start finding default values very unnerving...</span>"
|
gain_text = "<span class='warning'>You start finding default values very unnerving...</span>"
|
||||||
lose_text = "<span class='notice'>You no longer feel afraid of default values.</span>"
|
lose_text = "<span class='notice'>You no longer feel afraid of default values.</span>"
|
||||||
var/phobia_type
|
var/phobia_type
|
||||||
var/next_check = 0
|
/// Cooldown for proximity checks so we don't spam a range 7 view every two seconds.
|
||||||
var/next_scare = 0
|
COOLDOWN_DECLARE(check_cooldown)
|
||||||
|
/// Cooldown for freakouts to prevent permastunning.
|
||||||
|
COOLDOWN_DECLARE(scare_cooldown)
|
||||||
|
|
||||||
var/regex/trigger_regex
|
var/regex/trigger_regex
|
||||||
//instead of cycling every atom, only cycle the relevant types
|
//instead of cycling every atom, only cycle the relevant types
|
||||||
var/list/trigger_mobs
|
var/list/trigger_mobs
|
||||||
@@ -31,50 +34,51 @@
|
|||||||
trigger_species = SStraumas.phobia_species[phobia_type]
|
trigger_species = SStraumas.phobia_species[phobia_type]
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/datum/brain_trauma/mild/phobia/on_life()
|
/datum/brain_trauma/mild/phobia/on_life(delta_time, times_fired)
|
||||||
..()
|
..()
|
||||||
if(HAS_TRAIT(owner, TRAIT_FEARLESS))
|
if(HAS_TRAIT(owner, TRAIT_FEARLESS))
|
||||||
return
|
return
|
||||||
if(owner.is_blind())
|
if(owner.is_blind())
|
||||||
return
|
return
|
||||||
if(world.time > next_check && world.time > next_scare)
|
|
||||||
next_check = world.time + 50
|
|
||||||
var/list/seen_atoms = view(7, owner)
|
|
||||||
|
|
||||||
if(LAZYLEN(trigger_objs))
|
if(!COOLDOWN_FINISHED(src, check_cooldown) || !COOLDOWN_FINISHED(src, scare_cooldown))
|
||||||
for(var/obj/O in seen_atoms)
|
return
|
||||||
if(is_type_in_typecache(O, trigger_objs))
|
|
||||||
freak_out(O)
|
|
||||||
return
|
|
||||||
for(var/mob/living/carbon/human/HU in seen_atoms) //check equipment for trigger items
|
|
||||||
for(var/X in HU.get_all_slots() | HU.held_items)
|
|
||||||
var/obj/I = X
|
|
||||||
if(!QDELETED(I) && is_type_in_typecache(I, trigger_objs))
|
|
||||||
freak_out(I)
|
|
||||||
return
|
|
||||||
|
|
||||||
if(LAZYLEN(trigger_turfs))
|
COOLDOWN_START(src, check_cooldown, 5 SECONDS)
|
||||||
for(var/turf/T in seen_atoms)
|
var/list/seen_atoms = view(7, owner)
|
||||||
if(is_type_in_typecache(T, trigger_turfs))
|
if(LAZYLEN(trigger_objs))
|
||||||
freak_out(T)
|
for(var/obj/O in seen_atoms)
|
||||||
|
if(is_type_in_typecache(O, trigger_objs))
|
||||||
|
freak_out(O)
|
||||||
|
return
|
||||||
|
for(var/mob/living/carbon/human/HU in seen_atoms) //check equipment for trigger items
|
||||||
|
for(var/X in HU.get_all_slots() | HU.held_items)
|
||||||
|
var/obj/I = X
|
||||||
|
if(!QDELETED(I) && is_type_in_typecache(I, trigger_objs))
|
||||||
|
freak_out(I)
|
||||||
return
|
return
|
||||||
|
|
||||||
seen_atoms -= owner //make sure they aren't afraid of themselves.
|
if(LAZYLEN(trigger_turfs))
|
||||||
if(LAZYLEN(trigger_mobs) || LAZYLEN(trigger_species))
|
for(var/turf/T in seen_atoms)
|
||||||
for(var/mob/M in seen_atoms)
|
if(is_type_in_typecache(T, trigger_turfs))
|
||||||
if(is_type_in_typecache(M, trigger_mobs))
|
freak_out(T)
|
||||||
freak_out(M)
|
return
|
||||||
|
|
||||||
|
seen_atoms -= owner //make sure they aren't afraid of themselves.
|
||||||
|
if(LAZYLEN(trigger_mobs) || LAZYLEN(trigger_species))
|
||||||
|
for(var/mob/M in seen_atoms)
|
||||||
|
if(is_type_in_typecache(M, trigger_mobs))
|
||||||
|
freak_out(M)
|
||||||
|
return
|
||||||
|
|
||||||
|
else if(ishuman(M)) //check their species
|
||||||
|
var/mob/living/carbon/human/H = M
|
||||||
|
if(LAZYLEN(trigger_species) && H.dna && H.dna.species && is_type_in_typecache(H.dna.species, trigger_species))
|
||||||
|
freak_out(H)
|
||||||
return
|
return
|
||||||
|
|
||||||
else if(ishuman(M)) //check their species
|
|
||||||
var/mob/living/carbon/human/H = M
|
|
||||||
|
|
||||||
if(LAZYLEN(trigger_species) && H.dna && H.dna.species && is_type_in_typecache(H.dna.species, trigger_species))
|
|
||||||
freak_out(H)
|
|
||||||
return
|
|
||||||
|
|
||||||
/datum/brain_trauma/mild/phobia/handle_hearing(datum/source, list/hearing_args)
|
/datum/brain_trauma/mild/phobia/handle_hearing(datum/source, list/hearing_args)
|
||||||
if(!owner.can_hear() || world.time < next_scare) //words can't trigger you if you can't hear them *taps head*
|
if(!owner.can_hear() || !COOLDOWN_FINISHED(src, scare_cooldown)) //words can't trigger you if you can't hear them *taps head*
|
||||||
return
|
return
|
||||||
if(HAS_TRAIT(owner, TRAIT_FEARLESS))
|
if(HAS_TRAIT(owner, TRAIT_FEARLESS))
|
||||||
return
|
return
|
||||||
@@ -92,7 +96,7 @@
|
|||||||
speech_args[SPEECH_MESSAGE] = ""
|
speech_args[SPEECH_MESSAGE] = ""
|
||||||
|
|
||||||
/datum/brain_trauma/mild/phobia/proc/freak_out(atom/reason, trigger_word)
|
/datum/brain_trauma/mild/phobia/proc/freak_out(atom/reason, trigger_word)
|
||||||
next_scare = world.time + 120
|
COOLDOWN_START(src, scare_cooldown, 12 SECONDS)
|
||||||
if(owner.stat == DEAD)
|
if(owner.stat == DEAD)
|
||||||
return
|
return
|
||||||
var/message = pick("spooks you to the bone", "shakes you up", "terrifies you", "sends you into a panic", "sends chills down your spine")
|
var/message = pick("spooks you to the bone", "shakes you up", "terrifies you", "sends you into a panic", "sends chills down your spine")
|
||||||
|
|||||||
@@ -124,7 +124,7 @@
|
|||||||
gain_text = "<span class='warning'>You have a constant feeling of drowsiness...</span>"
|
gain_text = "<span class='warning'>You have a constant feeling of drowsiness...</span>"
|
||||||
lose_text = "<span class='notice'>You feel awake and aware again.</span>"
|
lose_text = "<span class='notice'>You feel awake and aware again.</span>"
|
||||||
|
|
||||||
/datum/brain_trauma/severe/narcolepsy/on_life()
|
/datum/brain_trauma/severe/narcolepsy/on_life(delta_time, times_fired)
|
||||||
..()
|
..()
|
||||||
if(owner.IsSleeping())
|
if(owner.IsSleeping())
|
||||||
return
|
return
|
||||||
@@ -133,10 +133,10 @@
|
|||||||
sleep_chance += 2
|
sleep_chance += 2
|
||||||
if(owner.drowsyness)
|
if(owner.drowsyness)
|
||||||
sleep_chance += 3
|
sleep_chance += 3
|
||||||
if(prob(sleep_chance))
|
if(DT_PROB(0.5 * sleep_chance, delta_time))
|
||||||
to_chat(owner, "<span class='warning'>You fall asleep.</span>")
|
to_chat(owner, "<span class='warning'>You fall asleep.</span>")
|
||||||
owner.Sleeping(60)
|
owner.Sleeping(60)
|
||||||
else if(!owner.drowsyness && prob(sleep_chance * 2))
|
else if(!owner.drowsyness && DT_PROB(sleep_chance, delta_time))
|
||||||
to_chat(owner, "<span class='warning'>You feel tired...</span>")
|
to_chat(owner, "<span class='warning'>You feel tired...</span>")
|
||||||
owner.drowsyness += 10
|
owner.drowsyness += 10
|
||||||
|
|
||||||
@@ -155,14 +155,14 @@
|
|||||||
else
|
else
|
||||||
to_chat(owner, "<span class='notice'>You feel safe, as long as you have people around you.</span>")
|
to_chat(owner, "<span class='notice'>You feel safe, as long as you have people around you.</span>")
|
||||||
|
|
||||||
/datum/brain_trauma/severe/monophobia/on_life()
|
/datum/brain_trauma/severe/monophobia/on_life(delta_time, times_fired)
|
||||||
..()
|
..()
|
||||||
if(check_alone())
|
if(check_alone())
|
||||||
stress = min(stress + 0.5, 100)
|
stress = min(stress + 0.5, 100)
|
||||||
if(stress > 10 && (prob(5)))
|
if(stress > 10 && DT_PROB(2.5, delta_time))
|
||||||
stress_reaction()
|
stress_reaction()
|
||||||
else
|
else
|
||||||
stress = max(stress - 4, 0)
|
stress = max(stress - (2 * delta_time), 0)
|
||||||
|
|
||||||
/datum/brain_trauma/severe/monophobia/proc/check_alone()
|
/datum/brain_trauma/severe/monophobia/proc/check_alone()
|
||||||
if(owner.is_blind())
|
if(owner.is_blind())
|
||||||
@@ -260,9 +260,9 @@
|
|||||||
..()
|
..()
|
||||||
owner.remove_status_effect(/datum/status_effect/trance)
|
owner.remove_status_effect(/datum/status_effect/trance)
|
||||||
|
|
||||||
/datum/brain_trauma/severe/hypnotic_stupor/on_life()
|
/datum/brain_trauma/severe/hypnotic_stupor/on_life(delta_time, times_fired)
|
||||||
..()
|
..()
|
||||||
if(prob(1) && !owner.has_status_effect(/datum/status_effect/trance))
|
if(DT_PROB(0.5, delta_time) && !owner.has_status_effect(/datum/status_effect/trance))
|
||||||
owner.apply_status_effect(/datum/status_effect/trance, rand(100,300), FALSE)
|
owner.apply_status_effect(/datum/status_effect/trance, rand(100,300), FALSE)
|
||||||
|
|
||||||
/datum/brain_trauma/severe/hypnotic_trigger
|
/datum/brain_trauma/severe/hypnotic_trigger
|
||||||
|
|||||||
@@ -10,9 +10,9 @@
|
|||||||
gain_text = "<span class='notice'>You feel a higher power inside your mind...</span>"
|
gain_text = "<span class='notice'>You feel a higher power inside your mind...</span>"
|
||||||
lose_text = "<span class='warning'>The divine presence leaves your head, no longer interested.</span>"
|
lose_text = "<span class='warning'>The divine presence leaves your head, no longer interested.</span>"
|
||||||
|
|
||||||
/datum/brain_trauma/special/godwoken/on_life()
|
/datum/brain_trauma/special/godwoken/on_life(delta_time, times_fired)
|
||||||
..()
|
..()
|
||||||
if(prob(4))
|
if(DT_PROB(2, delta_time))
|
||||||
if(prob(33) && (owner.IsStun() || owner.IsParalyzed() || owner.IsUnconscious()))
|
if(prob(33) && (owner.IsStun() || owner.IsParalyzed() || owner.IsUnconscious()))
|
||||||
speak("unstun", TRUE)
|
speak("unstun", TRUE)
|
||||||
else if(prob(60) && owner.health <= owner.crit_threshold)
|
else if(prob(60) && owner.health <= owner.crit_threshold)
|
||||||
@@ -53,42 +53,47 @@
|
|||||||
scan_desc = "bluespace attunement"
|
scan_desc = "bluespace attunement"
|
||||||
gain_text = "<span class='notice'>You feel the bluespace pulsing around you...</span>"
|
gain_text = "<span class='notice'>You feel the bluespace pulsing around you...</span>"
|
||||||
lose_text = "<span class='warning'>The faint pulsing of bluespace fades into silence.</span>"
|
lose_text = "<span class='warning'>The faint pulsing of bluespace fades into silence.</span>"
|
||||||
var/next_portal = 0
|
/// Cooldown so we can't teleport literally everywhere on a whim
|
||||||
|
COOLDOWN_DECLARE(portal_cooldown)
|
||||||
|
|
||||||
/datum/brain_trauma/special/bluespace_prophet/on_life()
|
/datum/brain_trauma/special/bluespace_prophet/on_life(delta_time, times_fired)
|
||||||
if(world.time > next_portal)
|
if(!COOLDOWN_FINISHED(src, portal_cooldown))
|
||||||
next_portal = world.time + 100
|
return
|
||||||
var/list/turf/possible_turfs = list()
|
|
||||||
for(var/turf/T in range(owner, 8))
|
|
||||||
if(!T.density)
|
|
||||||
var/clear = TRUE
|
|
||||||
for(var/obj/O in T)
|
|
||||||
if(O.density)
|
|
||||||
clear = FALSE
|
|
||||||
break
|
|
||||||
if(clear)
|
|
||||||
possible_turfs += T
|
|
||||||
|
|
||||||
if(!LAZYLEN(possible_turfs))
|
COOLDOWN_START(src, portal_cooldown, 10 SECONDS)
|
||||||
return
|
var/list/turf/possible_turfs = list()
|
||||||
|
for(var/turf/T in range(owner, 8))
|
||||||
|
if(T.density)
|
||||||
|
continue
|
||||||
|
|
||||||
var/turf/first_turf = pick(possible_turfs)
|
var/clear = TRUE
|
||||||
if(!first_turf)
|
for(var/obj/O in T)
|
||||||
return
|
if(O.density)
|
||||||
|
clear = FALSE
|
||||||
|
break
|
||||||
|
if(clear)
|
||||||
|
possible_turfs += T
|
||||||
|
|
||||||
possible_turfs -= (possible_turfs & range(first_turf, 3))
|
if(!LAZYLEN(possible_turfs))
|
||||||
|
return
|
||||||
|
|
||||||
var/turf/second_turf = pick(possible_turfs)
|
var/turf/first_turf = pick(possible_turfs)
|
||||||
if(!second_turf)
|
if(!first_turf)
|
||||||
return
|
return
|
||||||
|
|
||||||
var/obj/effect/hallucination/simple/bluespace_stream/first = new(first_turf, owner)
|
possible_turfs -= (possible_turfs & range(first_turf, 3))
|
||||||
var/obj/effect/hallucination/simple/bluespace_stream/second = new(second_turf, owner)
|
|
||||||
|
|
||||||
first.linked_to = second
|
var/turf/second_turf = pick(possible_turfs)
|
||||||
second.linked_to = first
|
if(!second_turf)
|
||||||
first.seer = owner
|
return
|
||||||
second.seer = owner
|
|
||||||
|
var/obj/effect/hallucination/simple/bluespace_stream/first = new(first_turf, owner)
|
||||||
|
var/obj/effect/hallucination/simple/bluespace_stream/second = new(second_turf, owner)
|
||||||
|
|
||||||
|
first.linked_to = second
|
||||||
|
second.linked_to = first
|
||||||
|
first.seer = owner
|
||||||
|
second.seer = owner
|
||||||
|
|
||||||
/obj/effect/hallucination/simple/bluespace_stream
|
/obj/effect/hallucination/simple/bluespace_stream
|
||||||
name = "bluespace stream"
|
name = "bluespace stream"
|
||||||
@@ -129,17 +134,19 @@
|
|||||||
var/atom/linked_target = null
|
var/atom/linked_target = null
|
||||||
var/linked = FALSE
|
var/linked = FALSE
|
||||||
var/returning = FALSE
|
var/returning = FALSE
|
||||||
var/snapback_time = 0
|
/// Cooldown for snapbacks
|
||||||
|
COOLDOWN_DECLARE(snapback_cooldown)
|
||||||
|
|
||||||
/datum/brain_trauma/special/quantum_alignment/on_life()
|
/datum/brain_trauma/special/quantum_alignment/on_life(delta_time, times_fired)
|
||||||
if(linked)
|
if(linked)
|
||||||
if(QDELETED(linked_target))
|
if(QDELETED(linked_target))
|
||||||
linked_target = null
|
linked_target = null
|
||||||
linked = FALSE
|
linked = FALSE
|
||||||
else if(!returning && world.time > snapback_time)
|
return
|
||||||
|
if(!returning && COOLDOWN_FINISHED(src, snapback_cooldown))
|
||||||
start_snapback()
|
start_snapback()
|
||||||
return
|
return
|
||||||
if(prob(4))
|
if(DT_PROB(2, delta_time))
|
||||||
try_entangle()
|
try_entangle()
|
||||||
|
|
||||||
/datum/brain_trauma/special/quantum_alignment/proc/try_entangle()
|
/datum/brain_trauma/special/quantum_alignment/proc/try_entangle()
|
||||||
@@ -176,7 +183,7 @@
|
|||||||
to_chat(owner, "<span class='notice'>You start feeling a strong sense of connection to [target].</span>")
|
to_chat(owner, "<span class='notice'>You start feeling a strong sense of connection to [target].</span>")
|
||||||
linked_target = target
|
linked_target = target
|
||||||
linked = TRUE
|
linked = TRUE
|
||||||
snapback_time = world.time + rand(450, 6000)
|
COOLDOWN_START(src, snapback_cooldown, rand(45 SECONDS, 10 MINUTES))
|
||||||
|
|
||||||
/datum/brain_trauma/special/quantum_alignment/proc/start_snapback()
|
/datum/brain_trauma/special/quantum_alignment/proc/start_snapback()
|
||||||
if(QDELETED(linked_target))
|
if(QDELETED(linked_target))
|
||||||
@@ -275,11 +282,12 @@
|
|||||||
gain_text = "<span class='notice'>You feel less real.</span>"
|
gain_text = "<span class='notice'>You feel less real.</span>"
|
||||||
lose_text = "<span class='warning'>You feel more substantial again.</span>"
|
lose_text = "<span class='warning'>You feel more substantial again.</span>"
|
||||||
var/obj/effect/abstract/sync_holder/veil/veil
|
var/obj/effect/abstract/sync_holder/veil/veil
|
||||||
var/next_crisis = 0
|
/// A cooldown to prevent constantly erratic dolphining through the fabric of reality
|
||||||
|
COOLDOWN_DECLARE(crisis_cooldown)
|
||||||
|
|
||||||
/datum/brain_trauma/special/existential_crisis/on_life()
|
/datum/brain_trauma/special/existential_crisis/on_life(delta_time, times_fired)
|
||||||
..()
|
..()
|
||||||
if(!veil && world.time > next_crisis && prob(3))
|
if(!veil && COOLDOWN_FINISHED(src, crisis_cooldown) && DT_PROB(1.5, delta_time))
|
||||||
if(isturf(owner.loc))
|
if(isturf(owner.loc))
|
||||||
fade_out()
|
fade_out()
|
||||||
|
|
||||||
@@ -291,7 +299,7 @@
|
|||||||
/datum/brain_trauma/special/existential_crisis/proc/fade_out()
|
/datum/brain_trauma/special/existential_crisis/proc/fade_out()
|
||||||
if(veil)
|
if(veil)
|
||||||
return
|
return
|
||||||
var/duration = rand(50, 450)
|
var/duration = rand(5 SECONDS, 45 SECONDS)
|
||||||
veil = new(owner.drop_location())
|
veil = new(owner.drop_location())
|
||||||
to_chat(owner, "<span class='warning'>[pick("You stop thinking for a moment. Therefore you are not.",\
|
to_chat(owner, "<span class='warning'>[pick("You stop thinking for a moment. Therefore you are not.",\
|
||||||
"To be or not to be...",\
|
"To be or not to be...",\
|
||||||
@@ -305,13 +313,13 @@
|
|||||||
for(var/thing in owner)
|
for(var/thing in owner)
|
||||||
var/atom/movable/AM = thing
|
var/atom/movable/AM = thing
|
||||||
SEND_SIGNAL(AM, COMSIG_MOVABLE_SECLUDED_LOCATION)
|
SEND_SIGNAL(AM, COMSIG_MOVABLE_SECLUDED_LOCATION)
|
||||||
next_crisis = world.time + 600
|
COOLDOWN_START(src, crisis_cooldown, 1 MINUTES)
|
||||||
addtimer(CALLBACK(src, .proc/fade_in), duration)
|
addtimer(CALLBACK(src, .proc/fade_in), duration)
|
||||||
|
|
||||||
/datum/brain_trauma/special/existential_crisis/proc/fade_in()
|
/datum/brain_trauma/special/existential_crisis/proc/fade_in()
|
||||||
QDEL_NULL(veil)
|
QDEL_NULL(veil)
|
||||||
to_chat(owner, "<span class='notice'>You fade back into reality.</span>")
|
to_chat(owner, "<span class='notice'>You fade back into reality.</span>")
|
||||||
next_crisis = world.time + 600
|
COOLDOWN_START(src, crisis_cooldown, 1 MINUTES)
|
||||||
|
|
||||||
//base sync holder is in desynchronizer.dm
|
//base sync holder is in desynchronizer.dm
|
||||||
/obj/effect/abstract/sync_holder/veil
|
/obj/effect/abstract/sync_holder/veil
|
||||||
|
|||||||
@@ -42,12 +42,12 @@
|
|||||||
else
|
else
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
/datum/brain_trauma/severe/split_personality/on_life()
|
/datum/brain_trauma/severe/split_personality/on_life(delta_time, times_fired)
|
||||||
if(owner.stat == DEAD)
|
if(owner.stat == DEAD)
|
||||||
if(current_controller != OWNER)
|
if(current_controller != OWNER)
|
||||||
switch_personalities()
|
switch_personalities()
|
||||||
qdel(src)
|
qdel(src)
|
||||||
else if(prob(3))
|
else if(DT_PROB(1.5, delta_time))
|
||||||
switch_personalities()
|
switch_personalities()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
@@ -131,7 +131,7 @@
|
|||||||
trauma = _trauma
|
trauma = _trauma
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/mob/living/split_personality/Life()
|
/mob/living/split_personality/Life(delta_time = SSMOBS_DT, times_fired)
|
||||||
if(QDELETED(body))
|
if(QDELETED(body))
|
||||||
qdel(src) //in case trauma deletion doesn't already do it
|
qdel(src) //in case trauma deletion doesn't already do it
|
||||||
|
|
||||||
@@ -203,7 +203,7 @@
|
|||||||
else
|
else
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
/datum/brain_trauma/severe/split_personality/brainwashing/on_life()
|
/datum/brain_trauma/severe/split_personality/brainwashing/on_life(delta_time, times_fired)
|
||||||
return //no random switching
|
return //no random switching
|
||||||
|
|
||||||
/datum/brain_trauma/severe/split_personality/brainwashing/handle_hearing(datum/source, list/hearing_args)
|
/datum/brain_trauma/severe/split_personality/brainwashing/handle_hearing(datum/source, list/hearing_args)
|
||||||
|
|||||||
@@ -286,14 +286,14 @@ Behavior that's still missing from this component that original food items had t
|
|||||||
eater.visible_message("<span class='notice'>[eater] [eatverb]s \the [parent].</span>", "<span class='notice'>You [eatverb] \the [parent].</span>")
|
eater.visible_message("<span class='notice'>[eater] [eatverb]s \the [parent].</span>", "<span class='notice'>You [eatverb] \the [parent].</span>")
|
||||||
else if(fullness > 500 && fullness < 600)
|
else if(fullness > 500 && fullness < 600)
|
||||||
eater.visible_message("<span class='notice'>[eater] unwillingly [eatverb]s a bit of \the [parent].</span>", "<span class='notice'>You unwillingly [eatverb] a bit of \the [parent].</span>")
|
eater.visible_message("<span class='notice'>[eater] unwillingly [eatverb]s a bit of \the [parent].</span>", "<span class='notice'>You unwillingly [eatverb] a bit of \the [parent].</span>")
|
||||||
else if(fullness > (600 * (1 + eater.overeatduration / 2000))) // The more you eat - the more you can eat
|
else if(fullness > (600 * (1 + eater.overeatduration / (4000 SECONDS)))) // The more you eat - the more you can eat
|
||||||
eater.visible_message("<span class='warning'>[eater] cannot force any more of \the [parent] to go down [eater.p_their()] throat!</span>", "<span class='warning'>You cannot force any more of \the [parent] to go down your throat!</span>")
|
eater.visible_message("<span class='warning'>[eater] cannot force any more of \the [parent] to go down [eater.p_their()] throat!</span>", "<span class='warning'>You cannot force any more of \the [parent] to go down your throat!</span>")
|
||||||
return
|
return
|
||||||
else //If you're feeding it to someone else.
|
else //If you're feeding it to someone else.
|
||||||
if(isbrain(eater))
|
if(isbrain(eater))
|
||||||
to_chat(feeder, "<span class='warning'>[eater] doesn't seem to have a mouth!</span>")
|
to_chat(feeder, "<span class='warning'>[eater] doesn't seem to have a mouth!</span>")
|
||||||
return
|
return
|
||||||
if(fullness <= (600 * (1 + eater.overeatduration / 1000)))
|
if(fullness <= (600 * (1 + eater.overeatduration / (2000 SECONDS))))
|
||||||
eater.visible_message("<span class='danger'>[feeder] attempts to feed [eater] [parent].</span>", \
|
eater.visible_message("<span class='danger'>[feeder] attempts to feed [eater] [parent].</span>", \
|
||||||
"<span class='userdanger'>[feeder] attempts to feed you [parent].</span>")
|
"<span class='userdanger'>[feeder] attempts to feed you [parent].</span>")
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -15,14 +15,17 @@
|
|||||||
//Stages
|
//Stages
|
||||||
var/stage = 1
|
var/stage = 1
|
||||||
var/max_stages = 0
|
var/max_stages = 0
|
||||||
var/stage_prob = 4
|
/// The probability of this infection advancing a stage every second the cure is not present.
|
||||||
|
var/stage_prob = 2
|
||||||
|
|
||||||
//Other
|
//Other
|
||||||
var/list/viable_mobtypes = list() //typepaths of viable mobs
|
var/list/viable_mobtypes = list() //typepaths of viable mobs
|
||||||
var/mob/living/carbon/affected_mob = null
|
var/mob/living/carbon/affected_mob = null
|
||||||
var/list/cures = list() //list of cures if the disease has the CURABLE flag, these are reagent ids
|
var/list/cures = list() //list of cures if the disease has the CURABLE flag, these are reagent ids
|
||||||
var/infectivity = 65
|
/// The probability of spreading through the air every second
|
||||||
var/cure_chance = 8
|
var/infectivity = 41
|
||||||
|
/// The probability of this infection being cured every second the cure is present
|
||||||
|
var/cure_chance = 4
|
||||||
var/carrier = FALSE //If our host is only a carrier
|
var/carrier = FALSE //If our host is only a carrier
|
||||||
var/bypasses_immunity = FALSE //Does it skip species virus immunity check? Some things may diseases and not viruses
|
var/bypasses_immunity = FALSE //Does it skip species virus immunity check? Some things may diseases and not viruses
|
||||||
var/permeability_mod = 1
|
var/permeability_mod = 1
|
||||||
@@ -64,16 +67,16 @@
|
|||||||
|
|
||||||
|
|
||||||
///Proc to process the disease and decide on whether to advance, cure or make the sympthoms appear. Returns a boolean on whether to continue acting on the symptoms or not.
|
///Proc to process the disease and decide on whether to advance, cure or make the sympthoms appear. Returns a boolean on whether to continue acting on the symptoms or not.
|
||||||
/datum/disease/proc/stage_act()
|
/datum/disease/proc/stage_act(delta_time, times_fired)
|
||||||
if(has_cure())
|
if(has_cure())
|
||||||
if(prob(cure_chance))
|
if(DT_PROB(cure_chance, delta_time))
|
||||||
update_stage(max(stage - 1, 1))
|
update_stage(max(stage - 1, 1))
|
||||||
|
|
||||||
if(disease_flags & CURABLE && prob(cure_chance))
|
if(disease_flags & CURABLE && DT_PROB(cure_chance, delta_time))
|
||||||
cure()
|
cure()
|
||||||
return FALSE
|
return FALSE
|
||||||
|
|
||||||
else if(prob(stage_prob))
|
else if(DT_PROB(stage_prob, delta_time))
|
||||||
update_stage(min(stage + 1, max_stages))
|
update_stage(min(stage + 1, max_stages))
|
||||||
|
|
||||||
return !carrier
|
return !carrier
|
||||||
|
|||||||
@@ -105,7 +105,7 @@
|
|||||||
|
|
||||||
|
|
||||||
// Randomly pick a symptom to activate.
|
// Randomly pick a symptom to activate.
|
||||||
/datum/disease/advance/stage_act()
|
/datum/disease/advance/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
@@ -254,8 +254,8 @@
|
|||||||
SetSpread(DISEASE_SPREAD_BLOOD)
|
SetSpread(DISEASE_SPREAD_BLOOD)
|
||||||
|
|
||||||
permeability_mod = max(CEILING(0.4 * properties["transmittable"], 1), 1)
|
permeability_mod = max(CEILING(0.4 * properties["transmittable"], 1), 1)
|
||||||
cure_chance = 15 - clamp(properties["resistance"], -5, 5) // can be between 10 and 20
|
cure_chance = clamp(7.5 - (0.5 * properties["resistance"]), 5, 10) // can be between 5 and 10
|
||||||
stage_prob = max(properties["stage_rate"], 2)
|
stage_prob = max(0.5 * properties["stage_rate"], 1)
|
||||||
SetSeverity(properties["severity"])
|
SetSeverity(properties["severity"])
|
||||||
GenerateCure(properties)
|
GenerateCure(properties)
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -160,10 +160,9 @@
|
|||||||
/datum/symptom/heal/metabolism/Heal(mob/living/carbon/C, datum/disease/advance/A, actual_power)
|
/datum/symptom/heal/metabolism/Heal(mob/living/carbon/C, datum/disease/advance/A, actual_power)
|
||||||
if(!istype(C))
|
if(!istype(C))
|
||||||
return
|
return
|
||||||
C.reagents.metabolize(C, can_overdose=TRUE) //this works even without a liver; it's intentional since the virus is metabolizing by itself
|
var/metabolic_boost = triple_metabolism ? 2 : 1
|
||||||
if(triple_metabolism)
|
C.reagents.metabolize(C, metabolic_boost * SSMOBS_DT, 0, can_overdose=TRUE) //this works even without a liver; it's intentional since the virus is metabolizing by itself
|
||||||
C.reagents.metabolize(C, can_overdose=TRUE)
|
C.overeatduration = max(C.overeatduration - 4 SECONDS, 0)
|
||||||
C.overeatduration = max(C.overeatduration - 2, 0)
|
|
||||||
var/lost_nutrition = 9 - (reduced_hunger * 5)
|
var/lost_nutrition = 9 - (reduced_hunger * 5)
|
||||||
C.adjust_nutrition(-lost_nutrition * HUNGER_FACTOR) //Hunger depletes at 10x the normal speed
|
C.adjust_nutrition(-lost_nutrition * HUNGER_FACTOR) //Hunger depletes at 10x the normal speed
|
||||||
if(prob(2))
|
if(prob(2))
|
||||||
@@ -417,12 +416,13 @@
|
|||||||
if(prob(5))
|
if(prob(5))
|
||||||
to_chat(M, "<span class='notice'>You feel yourself absorbing plasma inside and around you...</span>")
|
to_chat(M, "<span class='notice'>You feel yourself absorbing plasma inside and around you...</span>")
|
||||||
|
|
||||||
if(M.bodytemperature > M.get_body_temp_normal())
|
var/target_temp = M.get_body_temp_normal()
|
||||||
M.adjust_bodytemperature(-20 * temp_rate * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal())
|
if(M.bodytemperature > target_temp)
|
||||||
|
M.adjust_bodytemperature(-20 * temp_rate * TEMPERATURE_DAMAGE_COEFFICIENT, target_temp)
|
||||||
if(prob(5))
|
if(prob(5))
|
||||||
to_chat(M, "<span class='notice'>You feel less hot.</span>")
|
to_chat(M, "<span class='notice'>You feel less hot.</span>")
|
||||||
else if(M.bodytemperature < (M.get_body_temp_normal() + 1))
|
else if(M.bodytemperature < (M.get_body_temp_normal() + 1))
|
||||||
M.adjust_bodytemperature(20 * temp_rate * TEMPERATURE_DAMAGE_COEFFICIENT,0, M.get_body_temp_normal())
|
M.adjust_bodytemperature(20 * temp_rate * TEMPERATURE_DAMAGE_COEFFICIENT, 0, target_temp)
|
||||||
if(prob(5))
|
if(prob(5))
|
||||||
to_chat(M, "<span class='notice'>You feel warmer.</span>")
|
to_chat(M, "<span class='notice'>You feel warmer.</span>")
|
||||||
|
|
||||||
|
|||||||
@@ -49,5 +49,5 @@ Bonus
|
|||||||
to_chat(M, "<span class='warning'>[pick("You feel hungry.", "You crave for food.")]</span>")
|
to_chat(M, "<span class='warning'>[pick("You feel hungry.", "You crave for food.")]</span>")
|
||||||
else
|
else
|
||||||
to_chat(M, "<span class='warning'><i>[pick("So hungry...", "You'd kill someone for a bite of food...", "Hunger cramps seize you...")]</i></span>")
|
to_chat(M, "<span class='warning'><i>[pick("So hungry...", "You'd kill someone for a bite of food...", "Hunger cramps seize you...")]</i></span>")
|
||||||
M.overeatduration = max(M.overeatduration - 100, 0)
|
M.overeatduration = max(M.overeatduration - 200 SECONDS, 0)
|
||||||
M.adjust_nutrition(-100)
|
M.adjust_nutrition(-100)
|
||||||
|
|||||||
@@ -12,32 +12,32 @@
|
|||||||
severity = DISEASE_SEVERITY_MINOR
|
severity = DISEASE_SEVERITY_MINOR
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/anxiety/stage_act()
|
/datum/disease/anxiety/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(2) //also changes say, see say.dm
|
if(2) //also changes say, see say.dm
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='notice'>You feel anxious.</span>")
|
to_chat(affected_mob, "<span class='notice'>You feel anxious.</span>")
|
||||||
if(3)
|
if(3)
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='notice'>Your stomach flutters.</span>")
|
to_chat(affected_mob, "<span class='notice'>Your stomach flutters.</span>")
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='notice'>You feel panicky.</span>")
|
to_chat(affected_mob, "<span class='notice'>You feel panicky.</span>")
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You're overtaken with panic!</span>")
|
to_chat(affected_mob, "<span class='danger'>You're overtaken with panic!</span>")
|
||||||
affected_mob.add_confusion(rand(2,3))
|
affected_mob.add_confusion(rand(2,3))
|
||||||
if(4)
|
if(4)
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel butterflies in your stomach.</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel butterflies in your stomach.</span>")
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
affected_mob.visible_message("<span class='danger'>[affected_mob] stumbles around in a panic.</span>", \
|
affected_mob.visible_message("<span class='danger'>[affected_mob] stumbles around in a panic.</span>", \
|
||||||
"<span class='userdanger'>You have a panic attack!</span>")
|
"<span class='userdanger'>You have a panic attack!</span>")
|
||||||
affected_mob.add_confusion(rand(6,8))
|
affected_mob.add_confusion(rand(6,8))
|
||||||
affected_mob.jitteriness += (rand(6,8))
|
affected_mob.jitteriness += (rand(6,8))
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
affected_mob.visible_message("<span class='danger'>[affected_mob] coughs up butterflies!</span>", \
|
affected_mob.visible_message("<span class='danger'>[affected_mob] coughs up butterflies!</span>", \
|
||||||
"<span class='userdanger'>You cough up butterflies!</span>")
|
"<span class='userdanger'>You cough up butterflies!</span>")
|
||||||
new /mob/living/simple_animal/butterfly(affected_mob.loc)
|
new /mob/living/simple_animal/butterfly(affected_mob.loc)
|
||||||
|
|||||||
@@ -15,26 +15,26 @@
|
|||||||
bypasses_immunity = TRUE // Immunity is based on not having an appendix; this isn't a virus
|
bypasses_immunity = TRUE // Immunity is based on not having an appendix; this isn't a virus
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/appendicitis/stage_act()
|
/datum/disease/appendicitis/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(1)
|
if(1)
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
affected_mob.emote("cough")
|
affected_mob.emote("cough")
|
||||||
if(2)
|
if(2)
|
||||||
var/obj/item/organ/appendix/A = affected_mob.getorgan(/obj/item/organ/appendix)
|
var/obj/item/organ/appendix/A = affected_mob.getorgan(/obj/item/organ/appendix)
|
||||||
if(A)
|
if(A)
|
||||||
A.inflamed = 1
|
A.inflamed = 1
|
||||||
A.update_appearance()
|
A.update_appearance()
|
||||||
if(prob(3))
|
if(DT_PROB(1.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='warning'>You feel a stabbing pain in your abdomen!</span>")
|
to_chat(affected_mob, "<span class='warning'>You feel a stabbing pain in your abdomen!</span>")
|
||||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_APPENDIX, 5)
|
affected_mob.adjustOrganLoss(ORGAN_SLOT_APPENDIX, 5)
|
||||||
affected_mob.Stun(rand(40,60))
|
affected_mob.Stun(rand(40, 60))
|
||||||
affected_mob.adjustToxLoss(1, FALSE)
|
affected_mob.adjustToxLoss(1, FALSE)
|
||||||
if(3)
|
if(3)
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
affected_mob.vomit(95)
|
affected_mob.vomit(95)
|
||||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_APPENDIX, 15)
|
affected_mob.adjustOrganLoss(ORGAN_SLOT_APPENDIX, 15)
|
||||||
|
|||||||
@@ -13,29 +13,29 @@
|
|||||||
infectable_biotypes = MOB_ORGANIC|MOB_UNDEAD //bees nesting in corpses
|
infectable_biotypes = MOB_ORGANIC|MOB_UNDEAD //bees nesting in corpses
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/beesease/stage_act()
|
/datum/disease/beesease/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(2) //also changes say, see say.dm
|
if(2) //also changes say, see say.dm
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
to_chat(affected_mob, "<span class='notice'>You taste honey in your mouth.</span>")
|
to_chat(affected_mob, "<span class='notice'>You taste honey in your mouth.</span>")
|
||||||
if(3)
|
if(3)
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='notice'>Your stomach rumbles.</span>")
|
to_chat(affected_mob, "<span class='notice'>Your stomach rumbles.</span>")
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>Your stomach stings painfully.</span>")
|
to_chat(affected_mob, "<span class='danger'>Your stomach stings painfully.</span>")
|
||||||
if(prob(20))
|
if(prob(20))
|
||||||
affected_mob.adjustToxLoss(2)
|
affected_mob.adjustToxLoss(2)
|
||||||
if(4)
|
if(4)
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
affected_mob.visible_message("<span class='danger'>[affected_mob] buzzes.</span>", \
|
affected_mob.visible_message("<span class='danger'>[affected_mob] buzzes.</span>", \
|
||||||
"<span class='userdanger'>Your stomach buzzes violently!</span>")
|
"<span class='userdanger'>Your stomach buzzes violently!</span>")
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel something moving in your throat.</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel something moving in your throat.</span>")
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
affected_mob.visible_message("<span class='danger'>[affected_mob] coughs up a swarm of bees!</span>", \
|
affected_mob.visible_message("<span class='danger'>[affected_mob] coughs up a swarm of bees!</span>", \
|
||||||
"<span class='userdanger'>You cough up a swarm of bees!</span>")
|
"<span class='userdanger'>You cough up a swarm of bees!</span>")
|
||||||
new /mob/living/simple_animal/hostile/poison/bees(affected_mob.loc)
|
new /mob/living/simple_animal/hostile/poison/bees(affected_mob.loc)
|
||||||
|
|||||||
@@ -7,52 +7,52 @@
|
|||||||
cures = list(/datum/reagent/medicine/mannitol)
|
cures = list(/datum/reagent/medicine/mannitol)
|
||||||
agent = "Cryptococcus Cosmosis"
|
agent = "Cryptococcus Cosmosis"
|
||||||
viable_mobtypes = list(/mob/living/carbon/human)
|
viable_mobtypes = list(/mob/living/carbon/human)
|
||||||
cure_chance = 15//higher chance to cure, since two reagents are required
|
cure_chance = 7.5 //higher chance to cure, since two reagents are required
|
||||||
desc = "This disease destroys the braincells, causing brain fever, brain necrosis and general intoxication."
|
desc = "This disease destroys the braincells, causing brain fever, brain necrosis and general intoxication."
|
||||||
required_organs = list(/obj/item/organ/brain)
|
required_organs = list(/obj/item/organ/brain)
|
||||||
severity = DISEASE_SEVERITY_HARMFUL
|
severity = DISEASE_SEVERITY_HARMFUL
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/brainrot/stage_act() //Removed toxloss because damaging diseases are pretty horrible. Last round it killed the entire station because the cure didn't work -- Urist -ACTUALLY Removed rather than commented out, I don't see it returning - RR
|
/datum/disease/brainrot/stage_act(delta_time, times_fired) //Removed toxloss because damaging diseases are pretty horrible. Last round it killed the entire station because the cure didn't work -- Urist -ACTUALLY Removed rather than commented out, I don't see it returning - RR
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(2)
|
if(2)
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
affected_mob.emote("blink")
|
affected_mob.emote("blink")
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
affected_mob.emote("yawn")
|
affected_mob.emote("yawn")
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You don't feel like yourself.</span>")
|
to_chat(affected_mob, "<span class='danger'>You don't feel like yourself.</span>")
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1, 170)
|
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1, 170)
|
||||||
if(3)
|
if(3)
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
affected_mob.emote("stare")
|
affected_mob.emote("stare")
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
affected_mob.emote("drool")
|
affected_mob.emote("drool")
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2, 170)
|
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2, 170)
|
||||||
if(prob(2))
|
if(prob(2))
|
||||||
to_chat(affected_mob, "<span class='danger'>Your try to remember something important...but can't.</span>")
|
to_chat(affected_mob, "<span class='danger'>Your try to remember something important...but can't.</span>")
|
||||||
|
|
||||||
if(4)
|
if(4)
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
affected_mob.emote("stare")
|
affected_mob.emote("stare")
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
affected_mob.emote("drool")
|
affected_mob.emote("drool")
|
||||||
if(prob(15))
|
if(DT_PROB(7.5, delta_time))
|
||||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 170)
|
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 170)
|
||||||
if(prob(2))
|
if(prob(2))
|
||||||
to_chat(affected_mob, "<span class='danger'>Strange buzzing fills your head, removing all thoughts.</span>")
|
to_chat(affected_mob, "<span class='danger'>Strange buzzing fills your head, removing all thoughts.</span>")
|
||||||
if(prob(3))
|
if(DT_PROB(1.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You lose consciousness...</span>")
|
to_chat(affected_mob, "<span class='danger'>You lose consciousness...</span>")
|
||||||
affected_mob.visible_message("<span class='warning'>[affected_mob] suddenly collapses!</span>", \
|
affected_mob.visible_message("<span class='warning'>[affected_mob] suddenly collapses!</span>", \
|
||||||
"<span class='userdanger'>You suddenly collapse!</span>")
|
"<span class='userdanger'>You suddenly collapse!</span>")
|
||||||
affected_mob.Unconscious(rand(100,200))
|
affected_mob.Unconscious(rand(100, 200))
|
||||||
if(prob(1))
|
if(prob(1))
|
||||||
affected_mob.emote("snore")
|
affected_mob.emote("snore")
|
||||||
if(prob(15))
|
if(DT_PROB(7.5, delta_time))
|
||||||
affected_mob.stuttering += 3
|
affected_mob.stuttering += 3
|
||||||
|
|||||||
@@ -10,48 +10,40 @@
|
|||||||
severity = DISEASE_SEVERITY_NONTHREAT
|
severity = DISEASE_SEVERITY_NONTHREAT
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/cold/stage_act()
|
/datum/disease/cold/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(2)
|
if(2)
|
||||||
if(affected_mob.body_position == LYING_DOWN && prob(40)) //changed FROM prob(10) until sleeping is fixed
|
if(DT_PROB(0.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
|
||||||
cure()
|
|
||||||
return FALSE
|
|
||||||
if(prob(0.05))
|
|
||||||
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
|
||||||
cure()
|
|
||||||
return FALSE
|
|
||||||
if(prob(1))
|
|
||||||
affected_mob.emote("sneeze")
|
affected_mob.emote("sneeze")
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
affected_mob.emote("cough")
|
affected_mob.emote("cough")
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>Your throat feels sore.</span>")
|
to_chat(affected_mob, "<span class='danger'>Your throat feels sore.</span>")
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>Mucous runs down the back of your throat.</span>")
|
to_chat(affected_mob, "<span class='danger'>Mucous runs down the back of your throat.</span>")
|
||||||
|
if((affected_mob.body_position == LYING_DOWN && DT_PROB(23, delta_time)) || DT_PROB(0.025, delta_time)) //changed FROM prob(10) until sleeping is fixed // Has sleeping been fixed yet?
|
||||||
|
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
||||||
|
cure()
|
||||||
|
return FALSE
|
||||||
if(3)
|
if(3)
|
||||||
if(affected_mob.body_position == LYING_DOWN && prob(25)) //changed FROM prob(5) until sleeping is fixed
|
if(DT_PROB(0.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
|
||||||
cure()
|
|
||||||
return FALSE
|
|
||||||
if(prob(0.01))
|
|
||||||
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
|
||||||
cure()
|
|
||||||
return FALSE
|
|
||||||
if(prob(1))
|
|
||||||
affected_mob.emote("sneeze")
|
affected_mob.emote("sneeze")
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
affected_mob.emote("cough")
|
affected_mob.emote("cough")
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>Your throat feels sore.</span>")
|
to_chat(affected_mob, "<span class='danger'>Your throat feels sore.</span>")
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>Mucous runs down the back of your throat.</span>")
|
to_chat(affected_mob, "<span class='danger'>Mucous runs down the back of your throat.</span>")
|
||||||
if(prob(0.5) && !LAZYFIND(affected_mob.disease_resistances, /datum/disease/flu))
|
if(DT_PROB(0.25, delta_time) && !LAZYFIND(affected_mob.disease_resistances, /datum/disease/flu))
|
||||||
var/datum/disease/Flu = new /datum/disease/flu()
|
var/datum/disease/Flu = new /datum/disease/flu()
|
||||||
affected_mob.ForceContractDisease(Flu, FALSE, TRUE)
|
affected_mob.ForceContractDisease(Flu, FALSE, TRUE)
|
||||||
cure()
|
cure()
|
||||||
return FALSE
|
return FALSE
|
||||||
|
if((affected_mob.body_position == LYING_DOWN && DT_PROB(12.5, delta_time)) || DT_PROB(0.005, delta_time)) //changed FROM prob(5) until sleeping is fixed
|
||||||
|
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
||||||
|
cure()
|
||||||
|
return FALSE
|
||||||
|
|||||||
@@ -11,33 +11,33 @@
|
|||||||
severity = DISEASE_SEVERITY_HARMFUL
|
severity = DISEASE_SEVERITY_HARMFUL
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/cold9/stage_act()
|
/datum/disease/cold9/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(2)
|
if(2)
|
||||||
affected_mob.adjust_bodytemperature(-10)
|
affected_mob.adjust_bodytemperature(-5 * delta_time)
|
||||||
if(prob(0.1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
|
affected_mob.emote("sneeze")
|
||||||
|
if(DT_PROB(0.5, delta_time))
|
||||||
|
affected_mob.emote("cough")
|
||||||
|
if(DT_PROB(0.5, delta_time))
|
||||||
|
to_chat(affected_mob, "<span class='danger'>Your throat feels sore.</span>")
|
||||||
|
if(DT_PROB(2.5, delta_time))
|
||||||
|
to_chat(affected_mob, "<span class='danger'>You feel stiff.</span>")
|
||||||
|
if(DT_PROB(0.05, delta_time))
|
||||||
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
||||||
cure()
|
cure()
|
||||||
return FALSE
|
return FALSE
|
||||||
if(prob(1))
|
|
||||||
affected_mob.emote("sneeze")
|
|
||||||
if(prob(1))
|
|
||||||
affected_mob.emote("cough")
|
|
||||||
if(prob(1))
|
|
||||||
to_chat(affected_mob, "<span class='danger'>Your throat feels sore.</span>")
|
|
||||||
if(prob(5))
|
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel stiff.</span>")
|
|
||||||
if(3)
|
if(3)
|
||||||
affected_mob.adjust_bodytemperature(-20)
|
affected_mob.adjust_bodytemperature(-10 * delta_time)
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
affected_mob.emote("sneeze")
|
affected_mob.emote("sneeze")
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
affected_mob.emote("cough")
|
affected_mob.emote("cough")
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>Your throat feels sore.</span>")
|
to_chat(affected_mob, "<span class='danger'>Your throat feels sore.</span>")
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel stiff.</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel stiff.</span>")
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
form = "Virus"
|
form = "Virus"
|
||||||
name = "Cellular Degeneration"
|
name = "Cellular Degeneration"
|
||||||
max_stages = 5
|
max_stages = 5
|
||||||
stage_prob = 1
|
stage_prob = 0.5
|
||||||
cure_text = "Rezadone or death."
|
cure_text = "Rezadone or death."
|
||||||
agent = "Severe Genetic Damage"
|
agent = "Severe Genetic Damage"
|
||||||
viable_mobtypes = list(/mob/living/carbon/human)
|
viable_mobtypes = list(/mob/living/carbon/human)
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS
|
spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS
|
||||||
process_dead = TRUE
|
process_dead = TRUE
|
||||||
|
|
||||||
/datum/disease/decloning/stage_act()
|
/datum/disease/decloning/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
@@ -24,38 +24,38 @@
|
|||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(2)
|
if(2)
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
affected_mob.emote("itch")
|
affected_mob.emote("itch")
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
affected_mob.emote("yawn")
|
affected_mob.emote("yawn")
|
||||||
if(3)
|
if(3)
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
affected_mob.emote("itch")
|
affected_mob.emote("itch")
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
affected_mob.emote("drool")
|
affected_mob.emote("drool")
|
||||||
if(prob(3))
|
if(DT_PROB(1.5, delta_time))
|
||||||
affected_mob.adjustCloneLoss(1, FALSE)
|
affected_mob.adjustCloneLoss(1, FALSE)
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>Your skin feels strange.</span>")
|
to_chat(affected_mob, "<span class='danger'>Your skin feels strange.</span>")
|
||||||
|
|
||||||
if(4)
|
if(4)
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
affected_mob.emote("itch")
|
affected_mob.emote("itch")
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
affected_mob.emote("drool")
|
affected_mob.emote("drool")
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1, 170)
|
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1, 170)
|
||||||
affected_mob.adjustCloneLoss(2, FALSE)
|
affected_mob.adjustCloneLoss(2, FALSE)
|
||||||
if(prob(15))
|
if(DT_PROB(7.5, delta_time))
|
||||||
affected_mob.stuttering += 3
|
affected_mob.stuttering += 3
|
||||||
if(5)
|
if(5)
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
affected_mob.emote("itch")
|
affected_mob.emote("itch")
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
affected_mob.emote("drool")
|
affected_mob.emote("drool")
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>Your skin starts degrading!</span>")
|
to_chat(affected_mob, "<span class='danger'>Your skin starts degrading!</span>")
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
affected_mob.adjustCloneLoss(5, FALSE)
|
affected_mob.adjustCloneLoss(5, FALSE)
|
||||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2, 170)
|
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2, 170)
|
||||||
if(affected_mob.cloneloss >= 100)
|
if(affected_mob.cloneloss >= 100)
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
severity = DISEASE_SEVERITY_MEDIUM
|
severity = DISEASE_SEVERITY_MEDIUM
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/dnaspread/stage_act()
|
/datum/disease/dnaspread/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
@@ -36,16 +36,16 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(2 || 3) //Pretend to be a cold and give time to spread.
|
if(2, 3) //Pretend to be a cold and give time to spread.
|
||||||
if(prob(8))
|
if(DT_PROB(4, delta_time))
|
||||||
affected_mob.emote("sneeze")
|
affected_mob.emote("sneeze")
|
||||||
if(prob(8))
|
if(DT_PROB(4, delta_time))
|
||||||
affected_mob.emote("cough")
|
affected_mob.emote("cough")
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>Your muscles ache.</span>")
|
to_chat(affected_mob, "<span class='danger'>Your muscles ache.</span>")
|
||||||
if(prob(20))
|
if(prob(20))
|
||||||
affected_mob.take_bodypart_damage(1, updating_health = FALSE)
|
affected_mob.take_bodypart_damage(1, updating_health = FALSE)
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>Your stomach hurts.</span>")
|
to_chat(affected_mob, "<span class='danger'>Your stomach hurts.</span>")
|
||||||
if(prob(20))
|
if(prob(20))
|
||||||
affected_mob.adjustToxLoss(2, FALSE)
|
affected_mob.adjustToxLoss(2, FALSE)
|
||||||
|
|||||||
@@ -11,26 +11,26 @@
|
|||||||
severity = DISEASE_SEVERITY_BIOHAZARD
|
severity = DISEASE_SEVERITY_BIOHAZARD
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/fake_gbs/stage_act()
|
/datum/disease/fake_gbs/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(2)
|
if(2)
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
affected_mob.emote("sneeze")
|
affected_mob.emote("sneeze")
|
||||||
if(3)
|
if(3)
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
affected_mob.emote("cough")
|
affected_mob.emote("cough")
|
||||||
else if(prob(5))
|
else if(DT_PROB(2.5, delta_time))
|
||||||
affected_mob.emote("gasp")
|
affected_mob.emote("gasp")
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You're starting to feel very weak...</span>")
|
to_chat(affected_mob, "<span class='danger'>You're starting to feel very weak...</span>")
|
||||||
if(4)
|
if(4)
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
affected_mob.emote("cough")
|
affected_mob.emote("cough")
|
||||||
|
|
||||||
if(5)
|
if(5)
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
affected_mob.emote("cough")
|
affected_mob.emote("cough")
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
spread_text = "Airborne"
|
spread_text = "Airborne"
|
||||||
cure_text = "Spaceacillin"
|
cure_text = "Spaceacillin"
|
||||||
cures = list(/datum/reagent/medicine/spaceacillin)
|
cures = list(/datum/reagent/medicine/spaceacillin)
|
||||||
cure_chance = 10
|
cure_chance = 5
|
||||||
agent = "H13N1 flu virion"
|
agent = "H13N1 flu virion"
|
||||||
viable_mobtypes = list(/mob/living/carbon/human)
|
viable_mobtypes = list(/mob/living/carbon/human)
|
||||||
permeability_mod = 0.75
|
permeability_mod = 0.75
|
||||||
@@ -12,44 +12,44 @@
|
|||||||
severity = DISEASE_SEVERITY_MINOR
|
severity = DISEASE_SEVERITY_MINOR
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/flu/stage_act()
|
/datum/disease/flu/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(2)
|
if(2)
|
||||||
if(affected_mob.body_position == LYING_DOWN && prob(20))
|
if(DT_PROB(0.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
|
||||||
stage--
|
|
||||||
return
|
|
||||||
if(prob(1))
|
|
||||||
affected_mob.emote("sneeze")
|
affected_mob.emote("sneeze")
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
affected_mob.emote("cough")
|
affected_mob.emote("cough")
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>Your muscles ache.</span>")
|
to_chat(affected_mob, "<span class='danger'>Your muscles ache.</span>")
|
||||||
if(prob(20))
|
if(prob(20))
|
||||||
affected_mob.take_bodypart_damage(1, updating_health = FALSE)
|
affected_mob.take_bodypart_damage(1, updating_health = FALSE)
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>Your stomach hurts.</span>")
|
to_chat(affected_mob, "<span class='danger'>Your stomach hurts.</span>")
|
||||||
if(prob(20))
|
if(prob(20))
|
||||||
affected_mob.adjustToxLoss(1, FALSE)
|
affected_mob.adjustToxLoss(1, FALSE)
|
||||||
|
if(affected_mob.body_position == LYING_DOWN && DT_PROB(10, delta_time))
|
||||||
|
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
||||||
|
stage--
|
||||||
|
return
|
||||||
|
|
||||||
if(3)
|
if(3)
|
||||||
if(affected_mob.body_position == LYING_DOWN && prob(15))
|
if(DT_PROB(0.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
|
||||||
stage--
|
|
||||||
return
|
|
||||||
if(prob(1))
|
|
||||||
affected_mob.emote("sneeze")
|
affected_mob.emote("sneeze")
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
affected_mob.emote("cough")
|
affected_mob.emote("cough")
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>Your muscles ache.</span>")
|
to_chat(affected_mob, "<span class='danger'>Your muscles ache.</span>")
|
||||||
if(prob(20))
|
if(prob(20))
|
||||||
affected_mob.take_bodypart_damage(1, updating_health = FALSE)
|
affected_mob.take_bodypart_damage(1, updating_health = FALSE)
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>Your stomach hurts.</span>")
|
to_chat(affected_mob, "<span class='danger'>Your stomach hurts.</span>")
|
||||||
if(prob(20))
|
if(prob(20))
|
||||||
affected_mob.adjustToxLoss(1, FALSE)
|
affected_mob.adjustToxLoss(1, FALSE)
|
||||||
|
if(affected_mob.body_position == LYING_DOWN && DT_PROB(7.5, delta_time))
|
||||||
|
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
||||||
|
stage--
|
||||||
|
return
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
spread_text = "Airborne"
|
spread_text = "Airborne"
|
||||||
cure_text = "Spaceacillin & Anti-bodies to the common flu"
|
cure_text = "Spaceacillin & Anti-bodies to the common flu"
|
||||||
cures = list(/datum/reagent/medicine/spaceacillin)
|
cures = list(/datum/reagent/medicine/spaceacillin)
|
||||||
cure_chance = 10
|
cure_chance = 5
|
||||||
agent = "1nqu1s1t10n flu virion"
|
agent = "1nqu1s1t10n flu virion"
|
||||||
viable_mobtypes = list(/mob/living/carbon/human)
|
viable_mobtypes = list(/mob/living/carbon/human)
|
||||||
permeability_mod = 0.75
|
permeability_mod = 0.75
|
||||||
@@ -12,28 +12,28 @@
|
|||||||
severity = DISEASE_SEVERITY_DANGEROUS
|
severity = DISEASE_SEVERITY_DANGEROUS
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/fluspanish/stage_act()
|
/datum/disease/fluspanish/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(2)
|
if(2)
|
||||||
affected_mob.adjust_bodytemperature(10)
|
affected_mob.adjust_bodytemperature(5 * delta_time)
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
affected_mob.emote("sneeze")
|
affected_mob.emote("sneeze")
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
affected_mob.emote("cough")
|
affected_mob.emote("cough")
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You're burning in your own skin!</span>")
|
to_chat(affected_mob, "<span class='danger'>You're burning in your own skin!</span>")
|
||||||
affected_mob.take_bodypart_damage(0, 5, updating_health = FALSE)
|
affected_mob.take_bodypart_damage(0, 5, updating_health = FALSE)
|
||||||
|
|
||||||
if(3)
|
if(3)
|
||||||
affected_mob.adjust_bodytemperature(20)
|
affected_mob.adjust_bodytemperature(10 * delta_time)
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
affected_mob.emote("sneeze")
|
affected_mob.emote("sneeze")
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
affected_mob.emote("cough")
|
affected_mob.emote("cough")
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You're burning in your own skin!</span>")
|
to_chat(affected_mob, "<span class='danger'>You're burning in your own skin!</span>")
|
||||||
affected_mob.take_bodypart_damage(0, 5, updating_health = FALSE)
|
affected_mob.take_bodypart_damage(0, 5, updating_health = FALSE)
|
||||||
|
|||||||
@@ -6,12 +6,12 @@
|
|||||||
cure_text = "Salt and mutadone"
|
cure_text = "Salt and mutadone"
|
||||||
agent = "Agent S and DNA restructuring"
|
agent = "Agent S and DNA restructuring"
|
||||||
viable_mobtypes = list(/mob/living/carbon/human)
|
viable_mobtypes = list(/mob/living/carbon/human)
|
||||||
stage_prob = 1
|
stage_prob = 0.5
|
||||||
disease_flags = CURABLE
|
disease_flags = CURABLE
|
||||||
cures = list(/datum/reagent/consumable/salt, /datum/reagent/medicine/mutadone)
|
cures = list(/datum/reagent/consumable/salt, /datum/reagent/medicine/mutadone)
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/gastrolosis/stage_act()
|
/datum/disease/gastrolosis/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
@@ -22,54 +22,58 @@
|
|||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(2)
|
if(2)
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
affected_mob.emote("gag")
|
affected_mob.emote("gag")
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
var/turf/open/OT = get_turf(affected_mob)
|
var/turf/open/OT = get_turf(affected_mob)
|
||||||
if(isopenturf(OT))
|
if(isopenturf(OT))
|
||||||
OT.MakeSlippery(TURF_WET_LUBE, 40)
|
OT.MakeSlippery(TURF_WET_LUBE, 40)
|
||||||
if(3)
|
if(3)
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
affected_mob.emote("gag")
|
affected_mob.emote("gag")
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
var/turf/open/OT = get_turf(affected_mob)
|
var/turf/open/OT = get_turf(affected_mob)
|
||||||
if(isopenturf(OT))
|
if(isopenturf(OT))
|
||||||
OT.MakeSlippery(TURF_WET_LUBE, 100)
|
OT.MakeSlippery(TURF_WET_LUBE, 100)
|
||||||
if(4)
|
if(4)
|
||||||
var/obj/item/organ/eyes/eyes = locate(/obj/item/organ/eyes/snail) in affected_mob.internal_organs
|
var/obj/item/organ/eyes/eyes = locate(/obj/item/organ/eyes/snail) in affected_mob.internal_organs
|
||||||
if(!eyes && prob(5))
|
if(!eyes && DT_PROB(2.5, delta_time))
|
||||||
var/obj/item/organ/eyes/snail/new_eyes = new()
|
var/obj/item/organ/eyes/snail/new_eyes = new()
|
||||||
new_eyes.Insert(affected_mob, drop_if_replaced = TRUE)
|
new_eyes.Insert(affected_mob, drop_if_replaced = TRUE)
|
||||||
affected_mob.visible_message("<span class='warning'>[affected_mob]'s eyes fall out, with snail eyes taking its place!</span>", \
|
affected_mob.visible_message("<span class='warning'>[affected_mob]'s eyes fall out, with snail eyes taking its place!</span>", \
|
||||||
"<span class='userdanger'>You scream in pain as your eyes are pushed out by your new snail eyes!</span>")
|
"<span class='userdanger'>You scream in pain as your eyes are pushed out by your new snail eyes!</span>")
|
||||||
affected_mob.emote("scream")
|
affected_mob.emote("scream")
|
||||||
return
|
return
|
||||||
|
|
||||||
var/obj/item/shell = affected_mob.get_item_by_slot(ITEM_SLOT_BACK)
|
var/obj/item/shell = affected_mob.get_item_by_slot(ITEM_SLOT_BACK)
|
||||||
if(!istype(shell, /obj/item/storage/backpack/snail))
|
if(!istype(shell, /obj/item/storage/backpack/snail))
|
||||||
shell = null
|
shell = null
|
||||||
if(!shell && prob(5))
|
if(!shell && DT_PROB(2.5, delta_time))
|
||||||
if(affected_mob.dropItemToGround(affected_mob.get_item_by_slot(ITEM_SLOT_BACK)))
|
if(affected_mob.dropItemToGround(affected_mob.get_item_by_slot(ITEM_SLOT_BACK)))
|
||||||
affected_mob.equip_to_slot_or_del(new /obj/item/storage/backpack/snail(affected_mob), ITEM_SLOT_BACK)
|
affected_mob.equip_to_slot_or_del(new /obj/item/storage/backpack/snail(affected_mob), ITEM_SLOT_BACK)
|
||||||
affected_mob.visible_message("<span class='warning'>[affected_mob] grows a grotesque shell on their back!</span>", \
|
affected_mob.visible_message("<span class='warning'>[affected_mob] grows a grotesque shell on their back!</span>", \
|
||||||
"<span class='userdanger'>You scream in pain as a shell pushes itself out from under your skin!</span>")
|
"<span class='userdanger'>You scream in pain as a shell pushes itself out from under your skin!</span>")
|
||||||
affected_mob.emote("scream")
|
affected_mob.emote("scream")
|
||||||
return
|
return
|
||||||
|
|
||||||
var/obj/item/organ/tongue/tongue = locate(/obj/item/organ/tongue/snail) in affected_mob.internal_organs
|
var/obj/item/organ/tongue/tongue = locate(/obj/item/organ/tongue/snail) in affected_mob.internal_organs
|
||||||
if(!tongue && prob(5))
|
if(!tongue && DT_PROB(2.5, delta_time))
|
||||||
var/obj/item/organ/tongue/snail/new_tongue = new()
|
var/obj/item/organ/tongue/snail/new_tongue = new()
|
||||||
new_tongue.Insert(affected_mob)
|
new_tongue.Insert(affected_mob)
|
||||||
to_chat(affected_mob, "<span class='userdanger'>You feel your speech slow down...</span>")
|
to_chat(affected_mob, "<span class='userdanger'>You feel your speech slow down...</span>")
|
||||||
return
|
return
|
||||||
if(shell && eyes && tongue && prob(5))
|
|
||||||
|
if(shell && eyes && tongue && DT_PROB(2.5, delta_time))
|
||||||
affected_mob.set_species(/datum/species/snail)
|
affected_mob.set_species(/datum/species/snail)
|
||||||
affected_mob.client?.give_award(/datum/award/achievement/misc/snail, affected_mob)
|
affected_mob.client?.give_award(/datum/award/achievement/misc/snail, affected_mob)
|
||||||
affected_mob.visible_message("<span class='warning'>[affected_mob] turns into a snail!</span>", \
|
affected_mob.visible_message("<span class='warning'>[affected_mob] turns into a snail!</span>", \
|
||||||
"<span class='boldnotice'>You turned into a snail person! You feel an urge to cccrrraaawwwlll...</span>")
|
"<span class='boldnotice'>You turned into a snail person! You feel an urge to cccrrraaawwwlll...</span>")
|
||||||
cure()
|
cure()
|
||||||
return FALSE
|
return FALSE
|
||||||
if(prob(10))
|
|
||||||
|
if(DT_PROB(5, delta_time))
|
||||||
affected_mob.emote("gag")
|
affected_mob.emote("gag")
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
var/turf/open/OT = get_turf(affected_mob)
|
var/turf/open/OT = get_turf(affected_mob)
|
||||||
if(isopenturf(OT))
|
if(isopenturf(OT))
|
||||||
OT.MakeSlippery(TURF_WET_LUBE, 100)
|
OT.MakeSlippery(TURF_WET_LUBE, 100)
|
||||||
|
|||||||
@@ -5,29 +5,29 @@
|
|||||||
spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_SKIN | DISEASE_SPREAD_CONTACT_FLUIDS
|
spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_SKIN | DISEASE_SPREAD_CONTACT_FLUIDS
|
||||||
cure_text = "Synaptizine & Sulfur"
|
cure_text = "Synaptizine & Sulfur"
|
||||||
cures = list(/datum/reagent/medicine/synaptizine,/datum/reagent/sulfur)
|
cures = list(/datum/reagent/medicine/synaptizine,/datum/reagent/sulfur)
|
||||||
cure_chance = 15//higher chance to cure, since two reagents are required
|
cure_chance = 7.5 //higher chance to cure, since two reagents are required
|
||||||
agent = "Gravitokinetic Bipotential SADS+"
|
agent = "Gravitokinetic Bipotential SADS+"
|
||||||
viable_mobtypes = list(/mob/living/carbon/human)
|
viable_mobtypes = list(/mob/living/carbon/human)
|
||||||
disease_flags = CAN_CARRY|CAN_RESIST|CURABLE
|
disease_flags = CAN_CARRY|CAN_RESIST|CURABLE
|
||||||
permeability_mod = 1
|
permeability_mod = 1
|
||||||
severity = DISEASE_SEVERITY_BIOHAZARD
|
severity = DISEASE_SEVERITY_BIOHAZARD
|
||||||
|
|
||||||
/datum/disease/gbs/stage_act()
|
/datum/disease/gbs/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(2)
|
if(2)
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
affected_mob.emote("cough")
|
affected_mob.emote("cough")
|
||||||
if(3)
|
if(3)
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
affected_mob.emote("gasp")
|
affected_mob.emote("gasp")
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>Your body hurts all over!</span>")
|
to_chat(affected_mob, "<span class='danger'>Your body hurts all over!</span>")
|
||||||
if(4)
|
if(4)
|
||||||
to_chat(affected_mob, "<span class='userdanger'>Your body feels as if it's trying to rip itself apart!</span>")
|
to_chat(affected_mob, "<span class='userdanger'>Your body feels as if it's trying to rip itself apart!</span>")
|
||||||
if(prob(50))
|
if(DT_PROB(30, delta_time))
|
||||||
affected_mob.gib()
|
affected_mob.gib()
|
||||||
return FALSE
|
return FALSE
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
form = "Condition"
|
form = "Condition"
|
||||||
name = "Myocardial Infarction"
|
name = "Myocardial Infarction"
|
||||||
max_stages = 5
|
max_stages = 5
|
||||||
stage_prob = 2
|
stage_prob = 1
|
||||||
cure_text = "Heart replacement surgery to cure. Defibrillation (or as a last resort, uncontrolled electric shocking) may also be effective after the onset of cardiac arrest. Penthrite can also mitigate cardiac arrest."
|
cure_text = "Heart replacement surgery to cure. Defibrillation (or as a last resort, uncontrolled electric shocking) may also be effective after the onset of cardiac arrest. Penthrite can also mitigate cardiac arrest."
|
||||||
agent = "Shitty Heart"
|
agent = "Shitty Heart"
|
||||||
viable_mobtypes = list(/mob/living/carbon/human)
|
viable_mobtypes = list(/mob/living/carbon/human)
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
return D
|
return D
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/heart_failure/stage_act()
|
/datum/disease/heart_failure/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
@@ -33,25 +33,25 @@
|
|||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(1 to 2)
|
if(1 to 2)
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
to_chat(affected_mob, "<span class='warning'>You feel [pick("discomfort", "pressure", "a burning sensation", "pain")] in your chest.</span>")
|
to_chat(affected_mob, "<span class='warning'>You feel [pick("discomfort", "pressure", "a burning sensation", "pain")] in your chest.</span>")
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
to_chat(affected_mob, "<span class='warning'>You feel dizzy.</span>")
|
to_chat(affected_mob, "<span class='warning'>You feel dizzy.</span>")
|
||||||
affected_mob.add_confusion(6)
|
affected_mob.add_confusion(6)
|
||||||
if(prob(3))
|
if(DT_PROB(1.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='warning'>You feel [pick("full", "nauseated", "sweaty", "weak", "tired", "short on breath", "uneasy")].</span>")
|
to_chat(affected_mob, "<span class='warning'>You feel [pick("full", "nauseated", "sweaty", "weak", "tired", "short on breath", "uneasy")].</span>")
|
||||||
if(3 to 4)
|
if(3 to 4)
|
||||||
if(!sound)
|
if(!sound)
|
||||||
affected_mob.playsound_local(affected_mob, 'sound/health/slowbeat.ogg', 40, FALSE, channel = CHANNEL_HEARTBEAT, use_reverb = FALSE)
|
affected_mob.playsound_local(affected_mob, 'sound/health/slowbeat.ogg', 40, FALSE, channel = CHANNEL_HEARTBEAT, use_reverb = FALSE)
|
||||||
sound = TRUE
|
sound = TRUE
|
||||||
if(prob(3))
|
if(DT_PROB(1.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel a sharp pain in your chest!</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel a sharp pain in your chest!</span>")
|
||||||
if(prob(25))
|
if(prob(25))
|
||||||
affected_mob.vomit(95)
|
affected_mob.vomit(95)
|
||||||
affected_mob.emote("cough")
|
affected_mob.emote("cough")
|
||||||
affected_mob.Paralyze(40)
|
affected_mob.Paralyze(40)
|
||||||
affected_mob.losebreath += 4
|
affected_mob.losebreath += 4
|
||||||
if(prob(3))
|
if(DT_PROB(1.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel very weak and dizzy...</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel very weak and dizzy...</span>")
|
||||||
affected_mob.add_confusion(8)
|
affected_mob.add_confusion(8)
|
||||||
affected_mob.adjustStaminaLoss(40, FALSE)
|
affected_mob.adjustStaminaLoss(40, FALSE)
|
||||||
|
|||||||
@@ -14,16 +14,16 @@
|
|||||||
process_dead = TRUE
|
process_dead = TRUE
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/magnitis/stage_act()
|
/datum/disease/magnitis/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(2)
|
if(2)
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel a slight shock course through your body.</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel a slight shock course through your body.</span>")
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
for(var/obj/nearby_object in orange(2, affected_mob))
|
for(var/obj/nearby_object in orange(2, affected_mob))
|
||||||
if(nearby_object.anchored || !(nearby_object.flags_1 & CONDUCT_1))
|
if(nearby_object.anchored || !(nearby_object.flags_1 & CONDUCT_1))
|
||||||
continue
|
continue
|
||||||
@@ -35,11 +35,11 @@
|
|||||||
var/move_dir = get_dir(nearby_silicon, affected_mob)
|
var/move_dir = get_dir(nearby_silicon, affected_mob)
|
||||||
nearby_silicon.Move(get_step(nearby_silicon, move_dir), move_dir)
|
nearby_silicon.Move(get_step(nearby_silicon, move_dir), move_dir)
|
||||||
if(3)
|
if(3)
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel a strong shock course through your body.</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel a strong shock course through your body.</span>")
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel like clowning around.</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel like clowning around.</span>")
|
||||||
if(prob(4))
|
if(DT_PROB(2, delta_time))
|
||||||
for(var/obj/nearby_object in orange(4, affected_mob))
|
for(var/obj/nearby_object in orange(4, affected_mob))
|
||||||
if(nearby_object.anchored || !(nearby_object.flags_1 & CONDUCT_1))
|
if(nearby_object.anchored || !(nearby_object.flags_1 & CONDUCT_1))
|
||||||
continue
|
continue
|
||||||
@@ -55,11 +55,11 @@
|
|||||||
if(!nearby_silicon.Move(get_step(nearby_silicon, move_dir), move_dir))
|
if(!nearby_silicon.Move(get_step(nearby_silicon, move_dir), move_dir))
|
||||||
break
|
break
|
||||||
if(4)
|
if(4)
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel a powerful shock course through your body.</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel a powerful shock course through your body.</span>")
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You query upon the nature of miracles.</span>")
|
to_chat(affected_mob, "<span class='danger'>You query upon the nature of miracles.</span>")
|
||||||
if(prob(8))
|
if(DT_PROB(4, delta_time))
|
||||||
for(var/obj/nearby_object in orange(6, affected_mob))
|
for(var/obj/nearby_object in orange(6, affected_mob))
|
||||||
if(nearby_object.anchored || !(nearby_object.flags_1 & CONDUCT_1))
|
if(nearby_object.anchored || !(nearby_object.flags_1 & CONDUCT_1))
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
bypasses_immunity = TRUE
|
bypasses_immunity = TRUE
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/parasite/stage_act()
|
/datum/disease/parasite/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
@@ -28,20 +28,20 @@
|
|||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(1)
|
if(1)
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
affected_mob.emote("cough")
|
affected_mob.emote("cough")
|
||||||
if(2)
|
if(2)
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
if(prob(50))
|
if(prob(50))
|
||||||
to_chat(affected_mob, "<span class='notice'>You feel the weight loss already!</span>")
|
to_chat(affected_mob, "<span class='notice'>You feel the weight loss already!</span>")
|
||||||
affected_mob.adjust_nutrition(-3)
|
affected_mob.adjust_nutrition(-3)
|
||||||
if(3)
|
if(3)
|
||||||
if(prob(20))
|
if(DT_PROB(10, delta_time))
|
||||||
if(prob(20))
|
if(prob(20))
|
||||||
to_chat(affected_mob, "<span class='notice'>You're... REALLY starting to feel the weight loss.</span>")
|
to_chat(affected_mob, "<span class='notice'>You're... REALLY starting to feel the weight loss.</span>")
|
||||||
affected_mob.adjust_nutrition(-6)
|
affected_mob.adjust_nutrition(-6)
|
||||||
if(4)
|
if(4)
|
||||||
if(prob(30))
|
if(DT_PROB(16, delta_time))
|
||||||
if(affected_mob.nutrition >= 100)
|
if(affected_mob.nutrition >= 100)
|
||||||
if(prob(10))
|
if(prob(10))
|
||||||
to_chat(affected_mob, "<span class='warning'>You feel like your body's shedding weight rapidly!</span>")
|
to_chat(affected_mob, "<span class='warning'>You feel like your body's shedding weight rapidly!</span>")
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
disease_flags = CURABLE
|
disease_flags = CURABLE
|
||||||
cure_text = "Holy Water."
|
cure_text = "Holy Water."
|
||||||
cures = list(/datum/reagent/water/holywater)
|
cures = list(/datum/reagent/water/holywater)
|
||||||
cure_chance = 20
|
cure_chance = 10
|
||||||
agent = "Avian Vengence"
|
agent = "Avian Vengence"
|
||||||
viable_mobtypes = list(/mob/living/carbon/human)
|
viable_mobtypes = list(/mob/living/carbon/human)
|
||||||
desc = "Subject is possessed by the vengeful spirit of a parrot. Call the priest."
|
desc = "Subject is possessed by the vengeful spirit of a parrot. Call the priest."
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
var/mob/living/simple_animal/parrot/poly/ghost/parrot
|
var/mob/living/simple_animal/parrot/poly/ghost/parrot
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/parrot_possession/stage_act()
|
/datum/disease/parrot_possession/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
cure()
|
cure()
|
||||||
return FALSE
|
return FALSE
|
||||||
|
|
||||||
if(length(parrot.speech_buffer) && prob(parrot.speak_chance))
|
if(length(parrot.speech_buffer) && DT_PROB(parrot.speak_chance, delta_time)) // I'm not going to dive into polycode trying to adjust that probability. Enjoy doubled ghost parrot speach
|
||||||
affected_mob.say(pick(parrot.speech_buffer), forced = "parrot possession")
|
affected_mob.say(pick(parrot.speech_buffer), forced = "parrot possession")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
spread_text = "Airborne"
|
spread_text = "Airborne"
|
||||||
cure_text = "Banana products, especially banana bread."
|
cure_text = "Banana products, especially banana bread."
|
||||||
cures = list(/datum/reagent/consumable/banana)
|
cures = list(/datum/reagent/consumable/banana)
|
||||||
cure_chance = 75
|
cure_chance = 50
|
||||||
agent = "H0NI<42 Virus"
|
agent = "H0NI<42 Virus"
|
||||||
viable_mobtypes = list(/mob/living/carbon/human)
|
viable_mobtypes = list(/mob/living/carbon/human)
|
||||||
permeability_mod = 0.75
|
permeability_mod = 0.75
|
||||||
@@ -12,23 +12,23 @@
|
|||||||
severity = DISEASE_SEVERITY_MEDIUM
|
severity = DISEASE_SEVERITY_MEDIUM
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/pierrot_throat/stage_act()
|
/datum/disease/pierrot_throat/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(1)
|
if(1)
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel a little silly.</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel a little silly.</span>")
|
||||||
if(2)
|
if(2)
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You start seeing rainbows.</span>")
|
to_chat(affected_mob, "<span class='danger'>You start seeing rainbows.</span>")
|
||||||
if(3)
|
if(3)
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>Your thoughts are interrupted by a loud <b>HONK!</b></span>")
|
to_chat(affected_mob, "<span class='danger'>Your thoughts are interrupted by a loud <b>HONK!</b></span>")
|
||||||
if(4)
|
if(4)
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
affected_mob.say( pick( list("HONK!", "Honk!", "Honk.", "Honk?", "Honk!!", "Honk?!", "Honk...") ) , forced = "pierrot's throat")
|
affected_mob.say( pick( list("HONK!", "Honk!", "Honk.", "Honk?", "Honk!!", "Honk?!", "Honk...") ) , forced = "pierrot's throat")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,13 +4,13 @@
|
|||||||
spread_text = "Contact"
|
spread_text = "Contact"
|
||||||
spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_SKIN | DISEASE_SPREAD_CONTACT_FLUIDS
|
spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_SKIN | DISEASE_SPREAD_CONTACT_FLUIDS
|
||||||
cure_text = "Rest or an injection of mutadone"
|
cure_text = "Rest or an injection of mutadone"
|
||||||
cure_chance = 6
|
cure_chance = 3
|
||||||
agent = ""
|
agent = ""
|
||||||
viable_mobtypes = list(/mob/living/carbon/human)
|
viable_mobtypes = list(/mob/living/carbon/human)
|
||||||
desc = "A DNA-altering retrovirus that scrambles the structural and unique enzymes of a host constantly."
|
desc = "A DNA-altering retrovirus that scrambles the structural and unique enzymes of a host constantly."
|
||||||
severity = DISEASE_SEVERITY_HARMFUL
|
severity = DISEASE_SEVERITY_HARMFUL
|
||||||
permeability_mod = 0.4
|
permeability_mod = 0.4
|
||||||
stage_prob = 2
|
stage_prob = 1
|
||||||
var/restcure = 0
|
var/restcure = 0
|
||||||
|
|
||||||
/datum/disease/dna_retrovirus/New()
|
/datum/disease/dna_retrovirus/New()
|
||||||
@@ -26,62 +26,56 @@
|
|||||||
D.restcure = restcure
|
D.restcure = restcure
|
||||||
return D
|
return D
|
||||||
|
|
||||||
/datum/disease/dna_retrovirus/stage_act()
|
/datum/disease/dna_retrovirus/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(1)
|
if(1)
|
||||||
if(restcure)
|
if(DT_PROB(4, delta_time))
|
||||||
if(affected_mob.body_position == LYING_DOWN && prob(30))
|
|
||||||
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
|
||||||
cure()
|
|
||||||
return FALSE
|
|
||||||
if (prob(8))
|
|
||||||
to_chat(affected_mob, "<span class='danger'>Your head hurts.</span>")
|
to_chat(affected_mob, "<span class='danger'>Your head hurts.</span>")
|
||||||
if (prob(9))
|
if(DT_PROB(4.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel a tingling sensation in your chest.</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel a tingling sensation in your chest.</span>")
|
||||||
if (prob(9))
|
if(DT_PROB(4.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel angry.</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel angry.</span>")
|
||||||
|
if(restcure && affected_mob.body_position == LYING_DOWN && DT_PROB(16, delta_time))
|
||||||
|
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
||||||
|
cure()
|
||||||
|
return FALSE
|
||||||
if(2)
|
if(2)
|
||||||
if(restcure)
|
if(DT_PROB(4, delta_time))
|
||||||
if(affected_mob.body_position == LYING_DOWN && prob(20))
|
|
||||||
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
|
||||||
cure()
|
|
||||||
return FALSE
|
|
||||||
if (prob(8))
|
|
||||||
to_chat(affected_mob, "<span class='danger'>Your skin feels loose.</span>")
|
to_chat(affected_mob, "<span class='danger'>Your skin feels loose.</span>")
|
||||||
if (prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel very strange.</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel very strange.</span>")
|
||||||
if (prob(4))
|
if(DT_PROB(2, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel a stabbing pain in your head!</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel a stabbing pain in your head!</span>")
|
||||||
affected_mob.Unconscious(40)
|
affected_mob.Unconscious(40)
|
||||||
if (prob(4))
|
if(DT_PROB(2, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>Your stomach churns.</span>")
|
to_chat(affected_mob, "<span class='danger'>Your stomach churns.</span>")
|
||||||
|
if(restcure && affected_mob.body_position == LYING_DOWN && DT_PROB(10, delta_time))
|
||||||
|
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
||||||
|
cure()
|
||||||
|
return FALSE
|
||||||
if(3)
|
if(3)
|
||||||
if(restcure)
|
if(DT_PROB(5, delta_time))
|
||||||
if(affected_mob.body_position == LYING_DOWN && prob(20))
|
|
||||||
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
|
||||||
cure()
|
|
||||||
return FALSE
|
|
||||||
if (prob(10))
|
|
||||||
to_chat(affected_mob, "<span class='danger'>Your entire body vibrates.</span>")
|
to_chat(affected_mob, "<span class='danger'>Your entire body vibrates.</span>")
|
||||||
|
if(DT_PROB(19, delta_time))
|
||||||
if (prob(35))
|
|
||||||
if(prob(50))
|
if(prob(50))
|
||||||
scramble_dna(affected_mob, 1, 0, rand(15,45))
|
scramble_dna(affected_mob, 1, 0, rand(15,45))
|
||||||
else
|
else
|
||||||
scramble_dna(affected_mob, 0, 1, rand(15,45))
|
scramble_dna(affected_mob, 0, 1, rand(15,45))
|
||||||
|
if(restcure && affected_mob.body_position == LYING_DOWN && DT_PROB(10, delta_time))
|
||||||
|
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
||||||
|
cure()
|
||||||
|
return FALSE
|
||||||
if(4)
|
if(4)
|
||||||
if(restcure)
|
if(DT_PROB(37, delta_time))
|
||||||
if(affected_mob.body_position == LYING_DOWN && prob(5))
|
|
||||||
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
|
||||||
cure()
|
|
||||||
return FALSE
|
|
||||||
if (prob(60))
|
|
||||||
if(prob(50))
|
if(prob(50))
|
||||||
scramble_dna(affected_mob, 1, 0, rand(50,75))
|
scramble_dna(affected_mob, 1, 0, rand(50,75))
|
||||||
else
|
else
|
||||||
scramble_dna(affected_mob, 0, 1, rand(50,75))
|
scramble_dna(affected_mob, 0, 1, rand(50,75))
|
||||||
|
if(restcure && affected_mob.body_position == LYING_DOWN && DT_PROB(2.5, delta_time))
|
||||||
|
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
|
||||||
|
cure()
|
||||||
|
return FALSE
|
||||||
|
|||||||
@@ -10,27 +10,27 @@
|
|||||||
permeability_mod = 1
|
permeability_mod = 1
|
||||||
severity = DISEASE_SEVERITY_BIOHAZARD
|
severity = DISEASE_SEVERITY_BIOHAZARD
|
||||||
|
|
||||||
/datum/disease/rhumba_beat/stage_act()
|
/datum/disease/rhumba_beat/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(2)
|
if(2)
|
||||||
if(prob(45))
|
if(DT_PROB(26, delta_time))
|
||||||
affected_mob.adjustFireLoss(5, FALSE)
|
affected_mob.adjustFireLoss(5, FALSE)
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel strange...</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel strange...</span>")
|
||||||
if(3)
|
if(3)
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel the urge to dance...</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel the urge to dance...</span>")
|
||||||
else if(prob(5))
|
else if(DT_PROB(2.5, delta_time))
|
||||||
affected_mob.emote("gasp")
|
affected_mob.emote("gasp")
|
||||||
else if(prob(10))
|
else if(DT_PROB(5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel the need to chick chicky boom...</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel the need to chick chicky boom...</span>")
|
||||||
if(4)
|
if(4)
|
||||||
if(prob(20))
|
if(DT_PROB(10, delta_time))
|
||||||
if (prob(50))
|
if(prob(50))
|
||||||
affected_mob.adjust_fire_stacks(2)
|
affected_mob.adjust_fire_stacks(2)
|
||||||
affected_mob.IgniteMob()
|
affected_mob.IgniteMob()
|
||||||
else
|
else
|
||||||
@@ -38,5 +38,5 @@
|
|||||||
to_chat(affected_mob, "<span class='danger'>You feel a burning beat inside...</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel a burning beat inside...</span>")
|
||||||
if(5)
|
if(5)
|
||||||
to_chat(affected_mob, "<span class='danger'>Your body is unable to contain the Rhumba Beat...</span>")
|
to_chat(affected_mob, "<span class='danger'>Your body is unable to contain the Rhumba Beat...</span>")
|
||||||
if(prob(50))
|
if(DT_PROB(29, delta_time))
|
||||||
explosion(get_turf(affected_mob), -1, 0, 2, 3, 0, 2) // This is equivalent to a lvl 1 fireball
|
explosion(get_turf(affected_mob), -1, 0, 2, 3, 0, 2) // This is equivalent to a lvl 1 fireball
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
agent = "Shenanigans"
|
agent = "Shenanigans"
|
||||||
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/alien)
|
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/alien)
|
||||||
severity = DISEASE_SEVERITY_BIOHAZARD
|
severity = DISEASE_SEVERITY_BIOHAZARD
|
||||||
stage_prob = 10
|
stage_prob = 5
|
||||||
visibility_flags = HIDDEN_SCANNER|HIDDEN_PANDEMIC
|
visibility_flags = HIDDEN_SCANNER|HIDDEN_PANDEMIC
|
||||||
disease_flags = CURABLE
|
disease_flags = CURABLE
|
||||||
var/list/stage1 = list("You feel unremarkable.")
|
var/list/stage1 = list("You feel unremarkable.")
|
||||||
@@ -30,23 +30,23 @@
|
|||||||
return D
|
return D
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/transformation/stage_act()
|
/datum/disease/transformation/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(1)
|
if(1)
|
||||||
if (stage1 && prob(stage_prob))
|
if (stage1 && DT_PROB(stage_prob, delta_time))
|
||||||
to_chat(affected_mob, pick(stage1))
|
to_chat(affected_mob, pick(stage1))
|
||||||
if(2)
|
if(2)
|
||||||
if (stage2 && prob(stage_prob))
|
if (stage2 && DT_PROB(stage_prob, delta_time))
|
||||||
to_chat(affected_mob, pick(stage2))
|
to_chat(affected_mob, pick(stage2))
|
||||||
if(3)
|
if(3)
|
||||||
if (stage3 && prob(stage_prob * 2))
|
if (stage3 && DT_PROB(stage_prob * 2, delta_time))
|
||||||
to_chat(affected_mob, pick(stage3))
|
to_chat(affected_mob, pick(stage3))
|
||||||
if(4)
|
if(4)
|
||||||
if (stage4 && prob(stage_prob * 2))
|
if (stage4 && DT_PROB(stage_prob * 2, delta_time))
|
||||||
to_chat(affected_mob, pick(stage4))
|
to_chat(affected_mob, pick(stage4))
|
||||||
if(5)
|
if(5)
|
||||||
do_disease_transformation(affected_mob)
|
do_disease_transformation(affected_mob)
|
||||||
@@ -105,11 +105,11 @@
|
|||||||
spread_flags = DISEASE_SPREAD_SPECIAL
|
spread_flags = DISEASE_SPREAD_SPECIAL
|
||||||
viable_mobtypes = list(/mob/living/carbon/human)
|
viable_mobtypes = list(/mob/living/carbon/human)
|
||||||
permeability_mod = 1
|
permeability_mod = 1
|
||||||
cure_chance = 1
|
cure_chance = 0.5
|
||||||
disease_flags = CAN_CARRY|CAN_RESIST
|
disease_flags = CAN_CARRY|CAN_RESIST
|
||||||
desc = "Monkeys with this disease will bite humans, causing humans to mutate into a monkey."
|
desc = "Monkeys with this disease will bite humans, causing humans to mutate into a monkey."
|
||||||
severity = DISEASE_SEVERITY_BIOHAZARD
|
severity = DISEASE_SEVERITY_BIOHAZARD
|
||||||
stage_prob = 4
|
stage_prob = 2
|
||||||
visibility_flags = NONE
|
visibility_flags = NONE
|
||||||
agent = "Kongey Vibrion M-909"
|
agent = "Kongey Vibrion M-909"
|
||||||
new_form = /mob/living/carbon/human/species/monkey
|
new_form = /mob/living/carbon/human/species/monkey
|
||||||
@@ -130,21 +130,21 @@
|
|||||||
ADD_TRAIT(affected_mob, TRAIT_VENTCRAWLER_ALWAYS, type)
|
ADD_TRAIT(affected_mob, TRAIT_VENTCRAWLER_ALWAYS, type)
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/transformation/jungle_fever/stage_act()
|
/datum/disease/transformation/jungle_fever/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(2)
|
if(2)
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
to_chat(affected_mob, "<span class='notice'>Your [pick("back", "arm", "leg", "elbow", "head")] itches.</span>")
|
to_chat(affected_mob, "<span class='notice'>Your [pick("back", "arm", "leg", "elbow", "head")] itches.</span>")
|
||||||
if(3)
|
if(3)
|
||||||
if(prob(4))
|
if(DT_PROB(2, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel a stabbing pain in your head.</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel a stabbing pain in your head.</span>")
|
||||||
affected_mob.add_confusion(10)
|
affected_mob.add_confusion(10)
|
||||||
if(4)
|
if(4)
|
||||||
if(prob(3))
|
if(DT_PROB(1.5, delta_time))
|
||||||
affected_mob.say(pick("Eeek, ook ook!", "Eee-eeek!", "Eeee!", "Ungh, ungh."), forced = "jungle fever")
|
affected_mob.say(pick("Eeek, ook ook!", "Eee-eeek!", "Eeee!", "Ungh, ungh."), forced = "jungle fever")
|
||||||
|
|
||||||
|
|
||||||
@@ -167,7 +167,7 @@
|
|||||||
name = "Robotic Transformation"
|
name = "Robotic Transformation"
|
||||||
cure_text = "An injection of copper."
|
cure_text = "An injection of copper."
|
||||||
cures = list(/datum/reagent/copper)
|
cures = list(/datum/reagent/copper)
|
||||||
cure_chance = 5
|
cure_chance = 2.5
|
||||||
agent = "R2D2 Nanomachines"
|
agent = "R2D2 Nanomachines"
|
||||||
desc = "This disease, actually acute nanomachine infection, converts the victim into a cyborg."
|
desc = "This disease, actually acute nanomachine infection, converts the victim into a cyborg."
|
||||||
severity = DISEASE_SEVERITY_BIOHAZARD
|
severity = DISEASE_SEVERITY_BIOHAZARD
|
||||||
@@ -182,20 +182,20 @@
|
|||||||
bantype = "Cyborg"
|
bantype = "Cyborg"
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/transformation/robot/stage_act()
|
/datum/disease/transformation/robot/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(3)
|
if(3)
|
||||||
if (prob(8))
|
if (DT_PROB(4, delta_time))
|
||||||
affected_mob.say(pick("Beep, boop", "beep, beep!", "Boop...bop"), forced = "robotic transformation")
|
affected_mob.say(pick("Beep, boop", "beep, beep!", "Boop...bop"), forced = "robotic transformation")
|
||||||
if (prob(4))
|
if (DT_PROB(2, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel a stabbing pain in your head.</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel a stabbing pain in your head.</span>")
|
||||||
affected_mob.Unconscious(40)
|
affected_mob.Unconscious(40)
|
||||||
if(4)
|
if(4)
|
||||||
if (prob(20))
|
if (DT_PROB(10, delta_time))
|
||||||
affected_mob.say(pick("beep, beep!", "Boop bop boop beep.", "kkkiiiill mmme", "I wwwaaannntt tttoo dddiiieeee..."), forced = "robotic transformation")
|
affected_mob.say(pick("beep, beep!", "Boop bop boop beep.", "kkkiiiill mmme", "I wwwaaannntt tttoo dddiiieeee..."), forced = "robotic transformation")
|
||||||
|
|
||||||
|
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
name = "Xenomorph Transformation"
|
name = "Xenomorph Transformation"
|
||||||
cure_text = "Spaceacillin & Glycerol"
|
cure_text = "Spaceacillin & Glycerol"
|
||||||
cures = list(/datum/reagent/medicine/spaceacillin, /datum/reagent/glycerol)
|
cures = list(/datum/reagent/medicine/spaceacillin, /datum/reagent/glycerol)
|
||||||
cure_chance = 5
|
cure_chance = 2.5
|
||||||
agent = "Rip-LEY Alien Microbes"
|
agent = "Rip-LEY Alien Microbes"
|
||||||
desc = "This disease changes the victim into a xenomorph."
|
desc = "This disease changes the victim into a xenomorph."
|
||||||
severity = DISEASE_SEVERITY_BIOHAZARD
|
severity = DISEASE_SEVERITY_BIOHAZARD
|
||||||
@@ -218,18 +218,18 @@
|
|||||||
bantype = ROLE_ALIEN
|
bantype = ROLE_ALIEN
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/transformation/xeno/stage_act()
|
/datum/disease/transformation/xeno/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(3)
|
if(3)
|
||||||
if (prob(4))
|
if(DT_PROB(2, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel a stabbing pain in your head.</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel a stabbing pain in your head.</span>")
|
||||||
affected_mob.Unconscious(40)
|
affected_mob.Unconscious(40)
|
||||||
if(4)
|
if(4)
|
||||||
if (prob(20))
|
if(DT_PROB(10, delta_time))
|
||||||
affected_mob.say(pick("You look delicious.", "Going to... devour you...", "Hsssshhhhh!"), forced = "xenomorph transformation")
|
affected_mob.say(pick("You look delicious.", "Going to... devour you...", "Hsssshhhhh!"), forced = "xenomorph transformation")
|
||||||
|
|
||||||
|
|
||||||
@@ -237,7 +237,7 @@
|
|||||||
name = "Advanced Mutation Transformation"
|
name = "Advanced Mutation Transformation"
|
||||||
cure_text = "frost oil"
|
cure_text = "frost oil"
|
||||||
cures = list(/datum/reagent/consumable/frostoil)
|
cures = list(/datum/reagent/consumable/frostoil)
|
||||||
cure_chance = 80
|
cure_chance = 55
|
||||||
agent = "Advanced Mutation Toxin"
|
agent = "Advanced Mutation Toxin"
|
||||||
desc = "This highly concentrated extract converts anything into more of itself."
|
desc = "This highly concentrated extract converts anything into more of itself."
|
||||||
severity = DISEASE_SEVERITY_BIOHAZARD
|
severity = DISEASE_SEVERITY_BIOHAZARD
|
||||||
@@ -250,7 +250,7 @@
|
|||||||
new_form = /mob/living/simple_animal/slime/random
|
new_form = /mob/living/simple_animal/slime/random
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/transformation/slime/stage_act()
|
/datum/disease/transformation/slime/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
@@ -283,16 +283,16 @@
|
|||||||
new_form = /mob/living/simple_animal/pet/dog/corgi
|
new_form = /mob/living/simple_animal/pet/dog/corgi
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/transformation/corgi/stage_act()
|
/datum/disease/transformation/corgi/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(3)
|
if(3)
|
||||||
if (prob(8))
|
if (DT_PROB(4, delta_time))
|
||||||
affected_mob.say(pick("YAP", "Woof!"), forced = "corgi transformation")
|
affected_mob.say(pick("YAP", "Woof!"), forced = "corgi transformation")
|
||||||
if(4)
|
if(4)
|
||||||
if (prob(20))
|
if (DT_PROB(10, delta_time))
|
||||||
affected_mob.say(pick("Bark!", "AUUUUUU"), forced = "corgi transformation")
|
affected_mob.say(pick("Bark!", "AUUUUUU"), forced = "corgi transformation")
|
||||||
|
|
||||||
|
|
||||||
@@ -302,7 +302,7 @@
|
|||||||
cures = list(/datum/reagent/consumable/nothing)
|
cures = list(/datum/reagent/consumable/nothing)
|
||||||
agent = "Gluttony's Blessing"
|
agent = "Gluttony's Blessing"
|
||||||
desc = "A 'gift' from somewhere terrible."
|
desc = "A 'gift' from somewhere terrible."
|
||||||
stage_prob = 20
|
stage_prob = 10
|
||||||
severity = DISEASE_SEVERITY_BIOHAZARD
|
severity = DISEASE_SEVERITY_BIOHAZARD
|
||||||
visibility_flags = NONE
|
visibility_flags = NONE
|
||||||
stage1 = list("Your stomach rumbles.")
|
stage1 = list("Your stomach rumbles.")
|
||||||
@@ -318,8 +318,8 @@
|
|||||||
name = "Gondola Transformation"
|
name = "Gondola Transformation"
|
||||||
cure_text = "Condensed Capsaicin, ingested or injected." //getting pepper sprayed doesn't help
|
cure_text = "Condensed Capsaicin, ingested or injected." //getting pepper sprayed doesn't help
|
||||||
cures = list(/datum/reagent/consumable/condensedcapsaicin) //beats the hippie crap right out of your system
|
cures = list(/datum/reagent/consumable/condensedcapsaicin) //beats the hippie crap right out of your system
|
||||||
cure_chance = 80
|
cure_chance = 55
|
||||||
stage_prob = 5
|
stage_prob = 2.5
|
||||||
agent = "Tranquility"
|
agent = "Tranquility"
|
||||||
desc = "Consuming the flesh of a Gondola comes at a terrible price."
|
desc = "Consuming the flesh of a Gondola comes at a terrible price."
|
||||||
severity = DISEASE_SEVERITY_BIOHAZARD
|
severity = DISEASE_SEVERITY_BIOHAZARD
|
||||||
@@ -332,28 +332,28 @@
|
|||||||
new_form = /mob/living/simple_animal/pet/gondola
|
new_form = /mob/living/simple_animal/pet/gondola
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/transformation/gondola/stage_act()
|
/datum/disease/transformation/gondola/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(2)
|
if(2)
|
||||||
if (prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
affected_mob.emote("smile")
|
affected_mob.emote("smile")
|
||||||
if (prob(20))
|
if(DT_PROB(10, delta_time))
|
||||||
affected_mob.reagents.add_reagent_list(list(/datum/reagent/pax = 5))
|
affected_mob.reagents.add_reagent_list(list(/datum/reagent/pax = 5))
|
||||||
if(3)
|
if(3)
|
||||||
if (prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
affected_mob.emote("smile")
|
affected_mob.emote("smile")
|
||||||
if (prob(20))
|
if(DT_PROB(10, delta_time))
|
||||||
affected_mob.reagents.add_reagent_list(list(/datum/reagent/pax = 5))
|
affected_mob.reagents.add_reagent_list(list(/datum/reagent/pax = 5))
|
||||||
if(4)
|
if(4)
|
||||||
if (prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
affected_mob.emote("smile")
|
affected_mob.emote("smile")
|
||||||
if (prob(20))
|
if(DT_PROB(10, delta_time))
|
||||||
affected_mob.reagents.add_reagent_list(list(/datum/reagent/pax = 5))
|
affected_mob.reagents.add_reagent_list(list(/datum/reagent/pax = 5))
|
||||||
if (prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
var/obj/item/held_item = affected_mob.get_active_held_item()
|
var/obj/item/held_item = affected_mob.get_active_held_item()
|
||||||
if(held_item)
|
if(held_item)
|
||||||
to_chat(affected_mob, "<span class='danger'>You let go of what you were holding.</span>")
|
to_chat(affected_mob, "<span class='danger'>You let go of what you were holding.</span>")
|
||||||
|
|||||||
@@ -7,55 +7,55 @@
|
|||||||
cures = list(/datum/reagent/medicine/spaceacillin, /datum/reagent/medicine/c2/convermol)
|
cures = list(/datum/reagent/medicine/spaceacillin, /datum/reagent/medicine/c2/convermol)
|
||||||
agent = "Fungal Tubercle bacillus Cosmosis"
|
agent = "Fungal Tubercle bacillus Cosmosis"
|
||||||
viable_mobtypes = list(/mob/living/carbon/human)
|
viable_mobtypes = list(/mob/living/carbon/human)
|
||||||
cure_chance = 5//like hell are you getting out of hell
|
cure_chance = 2.5 //like hell are you getting out of hell
|
||||||
desc = "A rare highly transmissible virulent virus. Few samples exist, rumoured to be carefully grown and cultured by clandestine bio-weapon specialists. Causes fever, blood vomiting, lung damage, weight loss, and fatigue."
|
desc = "A rare highly transmissible virulent virus. Few samples exist, rumoured to be carefully grown and cultured by clandestine bio-weapon specialists. Causes fever, blood vomiting, lung damage, weight loss, and fatigue."
|
||||||
required_organs = list(/obj/item/organ/lungs)
|
required_organs = list(/obj/item/organ/lungs)
|
||||||
severity = DISEASE_SEVERITY_BIOHAZARD
|
severity = DISEASE_SEVERITY_BIOHAZARD
|
||||||
bypasses_immunity = TRUE // TB primarily impacts the lungs; it's also bacterial or fungal in nature; viral immunity should do nothing.
|
bypasses_immunity = TRUE // TB primarily impacts the lungs; it's also bacterial or fungal in nature; viral immunity should do nothing.
|
||||||
|
|
||||||
/datum/disease/tuberculosis/stage_act() //it begins
|
/datum/disease/tuberculosis/stage_act(delta_time, times_fired) //it begins
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(2)
|
if(2)
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
affected_mob.emote("cough")
|
affected_mob.emote("cough")
|
||||||
to_chat(affected_mob, "<span class='danger'>Your chest hurts.</span>")
|
to_chat(affected_mob, "<span class='danger'>Your chest hurts.</span>")
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>Your stomach violently rumbles!</span>")
|
to_chat(affected_mob, "<span class='danger'>Your stomach violently rumbles!</span>")
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel a cold sweat form.</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel a cold sweat form.</span>")
|
||||||
if(4)
|
if(4)
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
to_chat(affected_mob, "<span class='userdanger'>You see four of everything!</span>")
|
to_chat(affected_mob, "<span class='userdanger'>You see four of everything!</span>")
|
||||||
affected_mob.Dizzy(5)
|
affected_mob.Dizzy(5)
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel a sharp pain from your lower chest!</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel a sharp pain from your lower chest!</span>")
|
||||||
affected_mob.adjustOxyLoss(5, FALSE)
|
affected_mob.adjustOxyLoss(5, FALSE)
|
||||||
affected_mob.emote("gasp")
|
affected_mob.emote("gasp")
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel air escape from your lungs painfully.</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel air escape from your lungs painfully.</span>")
|
||||||
affected_mob.adjustOxyLoss(25, FALSE)
|
affected_mob.adjustOxyLoss(25, FALSE)
|
||||||
affected_mob.emote("gasp")
|
affected_mob.emote("gasp")
|
||||||
if(5)
|
if(5)
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
to_chat(affected_mob, "<span class='userdanger'>[pick("You feel your heart slowing...", "You relax and slow your heartbeat.")]</span>")
|
to_chat(affected_mob, "<span class='userdanger'>[pick("You feel your heart slowing...", "You relax and slow your heartbeat.")]</span>")
|
||||||
affected_mob.adjustStaminaLoss(70, FALSE)
|
affected_mob.adjustStaminaLoss(70, FALSE)
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
affected_mob.adjustStaminaLoss(100, FALSE)
|
affected_mob.adjustStaminaLoss(100, FALSE)
|
||||||
affected_mob.visible_message("<span class='warning'>[affected_mob] faints!</span>", "<span class='userdanger'>You surrender yourself and feel at peace...</span>")
|
affected_mob.visible_message("<span class='warning'>[affected_mob] faints!</span>", "<span class='userdanger'>You surrender yourself and feel at peace...</span>")
|
||||||
affected_mob.AdjustSleeping(100)
|
affected_mob.AdjustSleeping(100)
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
to_chat(affected_mob, "<span class='userdanger'>You feel your mind relax and your thoughts drift!</span>")
|
to_chat(affected_mob, "<span class='userdanger'>You feel your mind relax and your thoughts drift!</span>")
|
||||||
affected_mob.set_confusion(min(100, affected_mob.get_confusion() + 8))
|
affected_mob.set_confusion(min(100, affected_mob.get_confusion() + 8))
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
affected_mob.vomit(20)
|
affected_mob.vomit(20)
|
||||||
if(prob(3))
|
if(DT_PROB(1.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='warning'><i>[pick("Your stomach silently rumbles...", "Your stomach seizes up and falls limp, muscles dead and lifeless.", "You could eat a crayon")]</i></span>")
|
to_chat(affected_mob, "<span class='warning'><i>[pick("Your stomach silently rumbles...", "Your stomach seizes up and falls limp, muscles dead and lifeless.", "You could eat a crayon")]</i></span>")
|
||||||
affected_mob.overeatduration = max(affected_mob.overeatduration - 100, 0)
|
affected_mob.overeatduration = max(affected_mob.overeatduration - (200 SECONDS), 0)
|
||||||
affected_mob.adjust_nutrition(-100)
|
affected_mob.adjust_nutrition(-100)
|
||||||
if(prob(15))
|
if(DT_PROB(7.5, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>[pick("You feel uncomfortably hot...", "You feel like unzipping your jumpsuit...", "You feel like taking off some clothes...")]</span>")
|
to_chat(affected_mob, "<span class='danger'>[pick("You feel uncomfortably hot...", "You feel like unzipping your jumpsuit...", "You feel like taking off some clothes...")]</span>")
|
||||||
affected_mob.adjust_bodytemperature(40)
|
affected_mob.adjust_bodytemperature(40)
|
||||||
|
|||||||
@@ -23,30 +23,30 @@ TARCOL MINTI ZHERI - forcewall
|
|||||||
STI KALY - blind
|
STI KALY - blind
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/datum/disease/wizarditis/stage_act()
|
/datum/disease/wizarditis/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(2)
|
if(2)
|
||||||
if(prob(0.5))
|
if(DT_PROB(0.25, delta_time))
|
||||||
affected_mob.say(pick("You shall not pass!", "Expeliarmus!", "By Merlins beard!", "Feel the power of the Dark Side!"), forced = "wizarditis")
|
affected_mob.say(pick("You shall not pass!", "Expeliarmus!", "By Merlins beard!", "Feel the power of the Dark Side!"), forced = "wizarditis")
|
||||||
if(prob(0.5))
|
if(DT_PROB(0.25, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel [pick("that you don't have enough mana", "that the winds of magic are gone", "an urge to summon familiar")].</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel [pick("that you don't have enough mana", "that the winds of magic are gone", "an urge to summon familiar")].</span>")
|
||||||
if(3)
|
if(3)
|
||||||
if(prob(0.5))
|
if(DT_PROB(0.25, delta_time))
|
||||||
affected_mob.say(pick("NEC CANTIO!","AULIE OXIN FIERA!", "STI KALY!", "TARCOL MINTI ZHERI!"), forced = "wizarditis")
|
affected_mob.say(pick("NEC CANTIO!","AULIE OXIN FIERA!", "STI KALY!", "TARCOL MINTI ZHERI!"), forced = "wizarditis")
|
||||||
if(prob(0.5))
|
if(DT_PROB(0.25, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel [pick("the magic bubbling in your veins","that this location gives you a +1 to INT","an urge to summon familiar")].</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel [pick("the magic bubbling in your veins","that this location gives you a +1 to INT","an urge to summon familiar")].</span>")
|
||||||
if(4)
|
if(4)
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
affected_mob.say(pick("NEC CANTIO!","AULIE OXIN FIERA!","STI KALY!","EI NATH!"), forced = "wizarditis")
|
affected_mob.say(pick("NEC CANTIO!","AULIE OXIN FIERA!","STI KALY!","EI NATH!"), forced = "wizarditis")
|
||||||
return
|
return
|
||||||
if(prob(0.5))
|
if(DT_PROB(0.25, delta_time))
|
||||||
to_chat(affected_mob, "<span class='danger'>You feel [pick("the tidal wave of raw power building inside","that this location gives you a +2 to INT and +1 to WIS","an urge to teleport")].</span>")
|
to_chat(affected_mob, "<span class='danger'>You feel [pick("the tidal wave of raw power building inside","that this location gives you a +2 to INT and +1 to WIS","an urge to teleport")].</span>")
|
||||||
spawn_wizard_clothes(50)
|
spawn_wizard_clothes(50)
|
||||||
if(prob(0.01))
|
if(DT_PROB(0.005, delta_time))
|
||||||
teleport()
|
teleport()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -91,7 +91,7 @@
|
|||||||
/datum/mutation/human/proc/get_visual_indicator()
|
/datum/mutation/human/proc/get_visual_indicator()
|
||||||
return
|
return
|
||||||
|
|
||||||
/datum/mutation/human/proc/on_life()
|
/datum/mutation/human/proc/on_life(delta_time, times_fired)
|
||||||
return
|
return
|
||||||
|
|
||||||
/datum/mutation/human/proc/on_losing(mob/living/carbon/human/owner)
|
/datum/mutation/human/proc/on_losing(mob/living/carbon/human/owner)
|
||||||
|
|||||||
@@ -167,10 +167,10 @@
|
|||||||
energy_coeff = 1
|
energy_coeff = 1
|
||||||
synchronizer_coeff = 1
|
synchronizer_coeff = 1
|
||||||
|
|
||||||
/datum/mutation/human/void/on_life()
|
/datum/mutation/human/void/on_life(delta_time, times_fired)
|
||||||
if(!isturf(owner.loc))
|
if(!isturf(owner.loc))
|
||||||
return
|
return
|
||||||
if(prob((0.5+((100-dna.stability)/20))) * GET_MUTATION_SYNCHRONIZER(src)) //very rare, but enough to annoy you hopefully. +0.5 probability for every 10 points lost in stability
|
if(DT_PROB((0.25+((100-dna.stability)/40)) * GET_MUTATION_SYNCHRONIZER(src), delta_time)) //very rare, but enough to annoy you hopefully. +0.5 probability for every 10 points lost in stability
|
||||||
new /obj/effect/immortality_talisman/void(get_turf(owner), owner)
|
new /obj/effect/immortality_talisman/void(get_turf(owner), owner)
|
||||||
|
|
||||||
/obj/effect/proc_holder/spell/self/void
|
/obj/effect/proc_holder/spell/self/void
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
synchronizer_coeff = 1
|
synchronizer_coeff = 1
|
||||||
power_coeff = 1
|
power_coeff = 1
|
||||||
|
|
||||||
/datum/mutation/human/epilepsy/on_life()
|
/datum/mutation/human/epilepsy/on_life(delta_time, times_fired)
|
||||||
if(prob(1 * GET_MUTATION_SYNCHRONIZER(src)) && owner.stat == CONSCIOUS)
|
if(DT_PROB(0.5 * GET_MUTATION_SYNCHRONIZER(src), delta_time) && owner.stat == CONSCIOUS)
|
||||||
owner.visible_message("<span class='danger'>[owner] starts having a seizure!</span>", "<span class='userdanger'>You have a seizure!</span>")
|
owner.visible_message("<span class='danger'>[owner] starts having a seizure!</span>", "<span class='userdanger'>You have a seizure!</span>")
|
||||||
owner.Unconscious(200 * GET_MUTATION_POWER(src))
|
owner.Unconscious(200 * GET_MUTATION_POWER(src))
|
||||||
owner.Jitter(1000 * GET_MUTATION_POWER(src))
|
owner.Jitter(1000 * GET_MUTATION_POWER(src))
|
||||||
@@ -57,8 +57,8 @@
|
|||||||
synchronizer_coeff = 1
|
synchronizer_coeff = 1
|
||||||
power_coeff = 1
|
power_coeff = 1
|
||||||
|
|
||||||
/datum/mutation/human/cough/on_life()
|
/datum/mutation/human/cough/on_life(delta_time, times_fired)
|
||||||
if(prob(5 * GET_MUTATION_SYNCHRONIZER(src)) && owner.stat == CONSCIOUS)
|
if(DT_PROB(2.5 * GET_MUTATION_SYNCHRONIZER(src), delta_time) && owner.stat == CONSCIOUS)
|
||||||
owner.drop_all_held_items()
|
owner.drop_all_held_items()
|
||||||
owner.emote("cough")
|
owner.emote("cough")
|
||||||
if(GET_MUTATION_POWER(src) > 1)
|
if(GET_MUTATION_POWER(src) > 1)
|
||||||
@@ -73,8 +73,8 @@
|
|||||||
text_gain_indication = "<span class='danger'>You feel screams echo through your mind...</span>"
|
text_gain_indication = "<span class='danger'>You feel screams echo through your mind...</span>"
|
||||||
text_lose_indication = "<span class='notice'>The screaming in your mind fades.</span>"
|
text_lose_indication = "<span class='notice'>The screaming in your mind fades.</span>"
|
||||||
|
|
||||||
/datum/mutation/human/paranoia/on_life()
|
/datum/mutation/human/paranoia/on_life(delta_time, times_fired)
|
||||||
if(prob(5) && owner.stat == CONSCIOUS)
|
if(DT_PROB(2.5, delta_time) && owner.stat == CONSCIOUS)
|
||||||
owner.emote("scream")
|
owner.emote("scream")
|
||||||
if(prob(25))
|
if(prob(25))
|
||||||
owner.hallucination += 20
|
owner.hallucination += 20
|
||||||
@@ -135,8 +135,8 @@
|
|||||||
text_gain_indication = "<span class='danger'>You twitch.</span>"
|
text_gain_indication = "<span class='danger'>You twitch.</span>"
|
||||||
synchronizer_coeff = 1
|
synchronizer_coeff = 1
|
||||||
|
|
||||||
/datum/mutation/human/tourettes/on_life()
|
/datum/mutation/human/tourettes/on_life(delta_time, times_fired)
|
||||||
if(prob(10 * GET_MUTATION_SYNCHRONIZER(src)) && owner.stat == CONSCIOUS && !owner.IsStun())
|
if(DT_PROB(5 * GET_MUTATION_SYNCHRONIZER(src), delta_time) && owner.stat == CONSCIOUS && !owner.IsStun())
|
||||||
owner.Stun(200)
|
owner.Stun(200)
|
||||||
switch(rand(1, 3))
|
switch(rand(1, 3))
|
||||||
if(1)
|
if(1)
|
||||||
@@ -284,8 +284,8 @@
|
|||||||
synchronizer_coeff = 1
|
synchronizer_coeff = 1
|
||||||
power_coeff = 1
|
power_coeff = 1
|
||||||
|
|
||||||
/datum/mutation/human/fire/on_life()
|
/datum/mutation/human/fire/on_life(delta_time, times_fired)
|
||||||
if(prob((1+(100-dna.stability)/10)) * GET_MUTATION_SYNCHRONIZER(src))
|
if(DT_PROB((0.05+(100-dna.stability)/19.5) * GET_MUTATION_SYNCHRONIZER(src), delta_time))
|
||||||
owner.adjust_fire_stacks(2 * GET_MUTATION_POWER(src))
|
owner.adjust_fire_stacks(2 * GET_MUTATION_POWER(src))
|
||||||
owner.IgniteMob()
|
owner.IgniteMob()
|
||||||
|
|
||||||
@@ -312,8 +312,8 @@
|
|||||||
power_coeff = 1
|
power_coeff = 1
|
||||||
var/warpchance = 0
|
var/warpchance = 0
|
||||||
|
|
||||||
/datum/mutation/human/badblink/on_life()
|
/datum/mutation/human/badblink/on_life(delta_time, times_fired)
|
||||||
if(prob(warpchance))
|
if(DT_PROB(warpchance, delta_time))
|
||||||
var/warpmessage = pick(
|
var/warpmessage = pick(
|
||||||
"<span class='warning'>With a sickening 720-degree twist of [owner.p_their()] back, [owner] vanishes into thin air.</span>",
|
"<span class='warning'>With a sickening 720-degree twist of [owner.p_their()] back, [owner] vanishes into thin air.</span>",
|
||||||
"<span class='warning'>[owner] does some sort of strange backflip into another dimension. It looks pretty painful.</span>",
|
"<span class='warning'>[owner] does some sort of strange backflip into another dimension. It looks pretty painful.</span>",
|
||||||
@@ -321,13 +321,13 @@
|
|||||||
"<span class='warning'>[owner]'s torso starts folding inside out until it vanishes from reality, taking [owner] with it.</span>",
|
"<span class='warning'>[owner]'s torso starts folding inside out until it vanishes from reality, taking [owner] with it.</span>",
|
||||||
"<span class='warning'>One moment, you see [owner]. The next, [owner] is gone.</span>")
|
"<span class='warning'>One moment, you see [owner]. The next, [owner] is gone.</span>")
|
||||||
owner.visible_message(warpmessage, "<span class='userdanger'>You feel a wave of nausea as you fall through reality!</span>")
|
owner.visible_message(warpmessage, "<span class='userdanger'>You feel a wave of nausea as you fall through reality!</span>")
|
||||||
var/warpdistance = rand(10,15) * GET_MUTATION_POWER(src)
|
var/warpdistance = rand(10, 15) * GET_MUTATION_POWER(src)
|
||||||
do_teleport(owner, get_turf(owner), warpdistance, channel = TELEPORT_CHANNEL_FREE)
|
do_teleport(owner, get_turf(owner), warpdistance, channel = TELEPORT_CHANNEL_FREE)
|
||||||
owner.adjust_disgust(GET_MUTATION_SYNCHRONIZER(src) * (warpchance * warpdistance))
|
owner.adjust_disgust(GET_MUTATION_SYNCHRONIZER(src) * (warpchance * warpdistance))
|
||||||
warpchance = 0
|
warpchance = 0
|
||||||
owner.visible_message("<span class='danger'>[owner] appears out of nowhere!</span>")
|
owner.visible_message("<span class='danger'>[owner] appears out of nowhere!</span>")
|
||||||
else
|
else
|
||||||
warpchance += 0.25 * GET_MUTATION_ENERGY(src)
|
warpchance += 0.0625 * GET_MUTATION_ENERGY(src) * delta_time
|
||||||
|
|
||||||
/datum/mutation/human/acidflesh
|
/datum/mutation/human/acidflesh
|
||||||
name = "Acidic Flesh"
|
name = "Acidic Flesh"
|
||||||
@@ -336,15 +336,16 @@
|
|||||||
text_gain_indication = "<span class='userdanger'>A horrible burning sensation envelops you as your flesh turns to acid!</span>"
|
text_gain_indication = "<span class='userdanger'>A horrible burning sensation envelops you as your flesh turns to acid!</span>"
|
||||||
text_lose_indication = "<span class='notice'>A feeling of relief fills you as your flesh goes back to normal.</span>"
|
text_lose_indication = "<span class='notice'>A feeling of relief fills you as your flesh goes back to normal.</span>"
|
||||||
difficulty = 18//high so it's hard to unlock and use on others
|
difficulty = 18//high so it's hard to unlock and use on others
|
||||||
var/msgcooldown = 0
|
/// The cooldown for the warning message
|
||||||
|
COOLDOWN_DECLARE(msgcooldown)
|
||||||
|
|
||||||
/datum/mutation/human/acidflesh/on_life()
|
/datum/mutation/human/acidflesh/on_life(delta_time, times_fired)
|
||||||
if(prob(25))
|
if(DT_PROB(13, delta_time))
|
||||||
if(world.time > msgcooldown)
|
if(COOLDOWN_FINISHED(src, msgcooldown))
|
||||||
to_chat(owner, "<span class='danger'>Your acid flesh bubbles...</span>")
|
to_chat(owner, "<span class='danger'>Your acid flesh bubbles...</span>")
|
||||||
msgcooldown = world.time + 200
|
COOLDOWN_START(src, msgcooldown, 20 SECONDS)
|
||||||
if(prob(15))
|
if(prob(15))
|
||||||
owner.acid_act(rand(30,50), 10)
|
owner.acid_act(rand(30, 50), 10)
|
||||||
owner.visible_message("<span class='warning'>[owner]'s skin bubbles and pops.</span>", "<span class='userdanger'>Your bubbling flesh pops! It burns!</span>")
|
owner.visible_message("<span class='warning'>[owner]'s skin bubbles and pops.</span>", "<span class='userdanger'>Your bubbling flesh pops! It burns!</span>")
|
||||||
playsound(owner,'sound/weapons/sear.ogg', 50, TRUE)
|
playsound(owner,'sound/weapons/sear.ogg', 50, TRUE)
|
||||||
|
|
||||||
|
|||||||
@@ -16,8 +16,8 @@
|
|||||||
RegisterSignal(owner, COMSIG_MOVABLE_MOVED, .proc/on_move)
|
RegisterSignal(owner, COMSIG_MOVABLE_MOVED, .proc/on_move)
|
||||||
RegisterSignal(owner, COMSIG_HUMAN_EARLY_UNARMED_ATTACK, .proc/on_attack_hand)
|
RegisterSignal(owner, COMSIG_HUMAN_EARLY_UNARMED_ATTACK, .proc/on_attack_hand)
|
||||||
|
|
||||||
/datum/mutation/human/chameleon/on_life()
|
/datum/mutation/human/chameleon/on_life(delta_time, times_fired)
|
||||||
owner.alpha = max(0, owner.alpha - 25)
|
owner.alpha = max(owner.alpha - (12.5 * delta_time), 0)
|
||||||
|
|
||||||
/datum/mutation/human/chameleon/proc/on_move()
|
/datum/mutation/human/chameleon/proc/on_move()
|
||||||
SIGNAL_HANDLER
|
SIGNAL_HANDLER
|
||||||
|
|||||||
@@ -65,7 +65,7 @@
|
|||||||
if(35 to 41)
|
if(35 to 41)
|
||||||
arm.force_wound_upwards(/datum/wound/blunt/moderate)
|
arm.force_wound_upwards(/datum/wound/blunt/moderate)
|
||||||
|
|
||||||
/datum/mutation/human/hulk/on_life()
|
/datum/mutation/human/hulk/on_life(delta_time, times_fired)
|
||||||
if(owner.health < 0)
|
if(owner.health < 0)
|
||||||
on_losing(owner)
|
on_losing(owner)
|
||||||
to_chat(owner, "<span class='danger'>You suddenly feel very weak.</span>")
|
to_chat(owner, "<span class='danger'>You suddenly feel very weak.</span>")
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
power_coeff = 1
|
power_coeff = 1
|
||||||
|
|
||||||
|
|
||||||
/datum/mutation/human/radioactive/on_life()
|
/datum/mutation/human/radioactive/on_life(delta_time, times_fired)
|
||||||
radiation_pulse(owner, 20 * GET_MUTATION_POWER(src))
|
radiation_pulse(owner, 10 * GET_MUTATION_POWER(src) * delta_time)
|
||||||
|
|
||||||
/datum/mutation/human/radioactive/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut)
|
/datum/mutation/human/radioactive/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut)
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -7,8 +7,8 @@
|
|||||||
quality = MINOR_NEGATIVE
|
quality = MINOR_NEGATIVE
|
||||||
text_gain_indication = "<span class='danger'>You feel nervous.</span>"
|
text_gain_indication = "<span class='danger'>You feel nervous.</span>"
|
||||||
|
|
||||||
/datum/mutation/human/nervousness/on_life()
|
/datum/mutation/human/nervousness/on_life(delta_time, times_fired)
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
owner.stuttering = max(10, owner.stuttering)
|
owner.stuttering = max(10, owner.stuttering)
|
||||||
|
|
||||||
|
|
||||||
@@ -152,15 +152,15 @@
|
|||||||
text_gain_indication = "<span class='notice'>You feel pretty good, honeydoll.</span>"
|
text_gain_indication = "<span class='notice'>You feel pretty good, honeydoll.</span>"
|
||||||
text_lose_indication = "<span class='notice'>You feel a little less conversation would be great.</span>"
|
text_lose_indication = "<span class='notice'>You feel a little less conversation would be great.</span>"
|
||||||
|
|
||||||
/datum/mutation/human/elvis/on_life()
|
/datum/mutation/human/elvis/on_life(delta_time, times_fired)
|
||||||
switch(pick(1,2))
|
switch(pick(1,2))
|
||||||
if(1)
|
if(1)
|
||||||
if(prob(15))
|
if(DT_PROB(7.5, delta_time))
|
||||||
var/list/dancetypes = list("swinging", "fancy", "stylish", "20'th century", "jivin'", "rock and roller", "cool", "salacious", "bashing", "smashing")
|
var/list/dancetypes = list("swinging", "fancy", "stylish", "20'th century", "jivin'", "rock and roller", "cool", "salacious", "bashing", "smashing")
|
||||||
var/dancemoves = pick(dancetypes)
|
var/dancemoves = pick(dancetypes)
|
||||||
owner.visible_message("<b>[owner]</b> busts out some [dancemoves] moves!")
|
owner.visible_message("<b>[owner]</b> busts out some [dancemoves] moves!")
|
||||||
if(2)
|
if(2)
|
||||||
if(prob(15))
|
if(DT_PROB(7.5, delta_time))
|
||||||
owner.visible_message("<b>[owner]</b> [pick("jiggles their hips", "rotates their hips", "gyrates their hips", "taps their foot", "dances to an imaginary song", "jiggles their legs", "snaps their fingers")]!")
|
owner.visible_message("<b>[owner]</b> [pick("jiggles their hips", "rotates their hips", "gyrates their hips", "taps their foot", "dances to an imaginary song", "jiggles their legs", "snaps their fingers")]!")
|
||||||
|
|
||||||
/datum/mutation/human/elvis/on_acquiring(mob/living/carbon/human/owner)
|
/datum/mutation/human/elvis/on_acquiring(mob/living/carbon/human/owner)
|
||||||
|
|||||||
@@ -36,9 +36,9 @@
|
|||||||
var/mob/living/carbon/human/H = quirk_holder
|
var/mob/living/carbon/human/H = quirk_holder
|
||||||
if(NOBLOOD in H.dna.species.species_traits) //can't lose blood if your species doesn't have any
|
if(NOBLOOD in H.dna.species.species_traits) //can't lose blood if your species doesn't have any
|
||||||
return
|
return
|
||||||
else
|
|
||||||
if (H.blood_volume > (BLOOD_VOLUME_SAFE - 25)) // just barely survivable without treatment
|
if (H.blood_volume > (BLOOD_VOLUME_SAFE - 25)) // just barely survivable without treatment
|
||||||
H.blood_volume -= 0.275 * delta_time
|
H.blood_volume -= 0.275 * delta_time
|
||||||
|
|
||||||
/datum/quirk/blindness
|
/datum/quirk/blindness
|
||||||
name = "Blind"
|
name = "Blind"
|
||||||
|
|||||||
@@ -316,7 +316,7 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
/// If var/processing is TRUE, this is run on each life tick
|
/// If var/processing is TRUE, this is run on each life tick
|
||||||
/datum/wound/proc/handle_process()
|
/datum/wound/proc/handle_process(delta_time, times_fired)
|
||||||
return
|
return
|
||||||
|
|
||||||
/// For use in do_after callback checks
|
/// For use in do_after callback checks
|
||||||
@@ -338,7 +338,7 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
/// Called when the patient is undergoing stasis, so that having fully treated a wound doesn't make you sit there helplessly until you think to unbuckle them
|
/// Called when the patient is undergoing stasis, so that having fully treated a wound doesn't make you sit there helplessly until you think to unbuckle them
|
||||||
/datum/wound/proc/on_stasis()
|
/datum/wound/proc/on_stasis(delta_time, times_fired)
|
||||||
return
|
return
|
||||||
|
|
||||||
/// Used when we're being dragged while bleeding, the value we return is how much bloodloss this wound causes from being dragged. Since it's a proc, you can let bandages soak some of the blood
|
/// Used when we're being dragged while bleeding, the value we return is how much bloodloss this wound causes from being dragged. Since it's a proc, you can let bandages soak some of the blood
|
||||||
|
|||||||
@@ -63,7 +63,7 @@
|
|||||||
UnregisterSignal(victim, COMSIG_HUMAN_EARLY_UNARMED_ATTACK)
|
UnregisterSignal(victim, COMSIG_HUMAN_EARLY_UNARMED_ATTACK)
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/datum/wound/blunt/handle_process()
|
/datum/wound/blunt/handle_process(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(limb.body_zone == BODY_ZONE_HEAD && brain_trauma_group && world.time > next_trauma_cycle)
|
if(limb.body_zone == BODY_ZONE_HEAD && brain_trauma_group && world.time > next_trauma_cycle)
|
||||||
if(active_trauma)
|
if(active_trauma)
|
||||||
@@ -77,12 +77,12 @@
|
|||||||
|
|
||||||
regen_ticks_current++
|
regen_ticks_current++
|
||||||
if(victim.body_position == LYING_DOWN)
|
if(victim.body_position == LYING_DOWN)
|
||||||
if(prob(50))
|
if(DT_PROB(30, delta_time))
|
||||||
regen_ticks_current += 0.5
|
regen_ticks_current += 0.5
|
||||||
if(victim.IsSleeping() && prob(50))
|
if(victim.IsSleeping() && DT_PROB(30, delta_time))
|
||||||
regen_ticks_current += 0.5
|
regen_ticks_current += 0.5
|
||||||
|
|
||||||
if(prob(severity * 3))
|
if(DT_PROB(severity * 1.5, delta_time))
|
||||||
victim.take_bodypart_damage(rand(1, severity * 2), stamina=rand(2, severity * 2.5), wound_bonus=CANT_WOUND)
|
victim.take_bodypart_damage(rand(1, severity * 2), stamina=rand(2, severity * 2.5), wound_bonus=CANT_WOUND)
|
||||||
if(prob(33))
|
if(prob(33))
|
||||||
to_chat(victim, "<span class='danger'>You feel a sharp pain in your body as your bones are reforming!</span>")
|
to_chat(victim, "<span class='danger'>You feel a sharp pain in your body as your bones are reforming!</span>")
|
||||||
|
|||||||
@@ -34,11 +34,11 @@
|
|||||||
var/strikes_to_lose_limb = 3
|
var/strikes_to_lose_limb = 3
|
||||||
|
|
||||||
|
|
||||||
/datum/wound/burn/handle_process()
|
/datum/wound/burn/handle_process(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(strikes_to_lose_limb == 0) // we've already hit sepsis, nothing more to do
|
if(strikes_to_lose_limb == 0) // we've already hit sepsis, nothing more to do
|
||||||
victim.adjustToxLoss(0.5)
|
victim.adjustToxLoss(0.25 * delta_time)
|
||||||
if(prob(1))
|
if(DT_PROB(0.5, delta_time))
|
||||||
victim.visible_message("<span class='danger'>The infection on the remnants of [victim]'s [limb.name] shift and bubble nauseatingly!</span>", "<span class='warning'>You can feel the infection on the remnants of your [limb.name] coursing through your veins!</span>", vision_distance = COMBAT_MESSAGE_RANGE)
|
victim.visible_message("<span class='danger'>The infection on the remnants of [victim]'s [limb.name] shift and bubble nauseatingly!</span>", "<span class='warning'>You can feel the infection on the remnants of your [limb.name] coursing through your veins!</span>", vision_distance = COMBAT_MESSAGE_RANGE)
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -52,12 +52,12 @@
|
|||||||
flesh_healing += 0.5
|
flesh_healing += 0.5
|
||||||
|
|
||||||
if(limb.current_gauze)
|
if(limb.current_gauze)
|
||||||
limb.seep_gauze(WOUND_BURN_SANITIZATION_RATE)
|
limb.seep_gauze(WOUND_BURN_SANITIZATION_RATE * delta_time)
|
||||||
|
|
||||||
if(flesh_healing > 0) // good bandages multiply the length of flesh healing
|
if(flesh_healing > 0) // good bandages multiply the length of flesh healing
|
||||||
var/bandage_factor = (limb.current_gauze ? limb.current_gauze.splint_factor : 1)
|
var/bandage_factor = (limb.current_gauze ? limb.current_gauze.splint_factor : 1)
|
||||||
flesh_damage = max(0, flesh_damage - 1)
|
flesh_damage = max(flesh_damage - (0.5 * delta_time), 0)
|
||||||
flesh_healing = max(0, flesh_healing - bandage_factor)
|
flesh_healing = max(flesh_healing - (0.5 * bandage_factor * delta_time), 0) // good bandages multiply the length of flesh healing
|
||||||
|
|
||||||
// if we have little/no infection, the limb doesn't have much burn damage, and our nutrition is good, heal some flesh
|
// if we have little/no infection, the limb doesn't have much burn damage, and our nutrition is good, heal some flesh
|
||||||
if(infestation <= WOUND_INFECTION_MODERATE && (limb.burn_dam < 5) && (victim.nutrition >= NUTRITION_LEVEL_FED))
|
if(infestation <= WOUND_INFECTION_MODERATE && (limb.burn_dam < 5) && (victim.nutrition >= NUTRITION_LEVEL_FED))
|
||||||
@@ -72,42 +72,52 @@
|
|||||||
// sanitization is checked after the clearing check but before the actual ill-effects, because we freeze the effects of infection while we have sanitization
|
// sanitization is checked after the clearing check but before the actual ill-effects, because we freeze the effects of infection while we have sanitization
|
||||||
if(sanitization > 0)
|
if(sanitization > 0)
|
||||||
var/bandage_factor = (limb.current_gauze ? limb.current_gauze.splint_factor : 1)
|
var/bandage_factor = (limb.current_gauze ? limb.current_gauze.splint_factor : 1)
|
||||||
infestation = max(0, infestation - WOUND_BURN_SANITIZATION_RATE)
|
infestation = max(infestation - (WOUND_BURN_SANITIZATION_RATE * delta_time), 0)
|
||||||
sanitization = max(0, sanitization - (WOUND_BURN_SANITIZATION_RATE * bandage_factor))
|
sanitization = max(sanitization - (WOUND_BURN_SANITIZATION_RATE * bandage_factor * delta_time), 0)
|
||||||
return
|
return
|
||||||
|
|
||||||
infestation += infestation_rate
|
infestation += infestation_rate * delta_time
|
||||||
|
|
||||||
switch(infestation)
|
switch(infestation)
|
||||||
if(0 to WOUND_INFECTION_MODERATE)
|
if(0 to WOUND_INFECTION_MODERATE)
|
||||||
if(WOUND_INFECTION_MODERATE to WOUND_INFECTION_SEVERE)
|
if(WOUND_INFECTION_MODERATE to WOUND_INFECTION_SEVERE)
|
||||||
if(prob(30))
|
if(DT_PROB(15, delta_time))
|
||||||
victim.adjustToxLoss(0.2)
|
victim.adjustToxLoss(0.2)
|
||||||
if(prob(6))
|
if(prob(6))
|
||||||
to_chat(victim, "<span class='warning'>The blisters on your [limb.name] ooze a strange pus...</span>")
|
to_chat(victim, "<span class='warning'>The blisters on your [limb.name] ooze a strange pus...</span>")
|
||||||
if(WOUND_INFECTION_SEVERE to WOUND_INFECTION_CRITICAL)
|
if(WOUND_INFECTION_SEVERE to WOUND_INFECTION_CRITICAL)
|
||||||
if(!disabling && prob(2))
|
if(!disabling)
|
||||||
to_chat(victim, "<span class='warning'><b>Your [limb.name] completely locks up, as you struggle for control against the infection!</b></span>")
|
if(DT_PROB(1, delta_time))
|
||||||
set_disabling(TRUE)
|
to_chat(victim, "<span class='warning'><b>Your [limb.name] completely locks up, as you struggle for control against the infection!</b></span>")
|
||||||
else if(disabling && prob(8))
|
set_disabling(TRUE)
|
||||||
|
return
|
||||||
|
else if(DT_PROB(4, delta_time))
|
||||||
to_chat(victim, "<span class='notice'>You regain sensation in your [limb.name], but it's still in terrible shape!</span>")
|
to_chat(victim, "<span class='notice'>You regain sensation in your [limb.name], but it's still in terrible shape!</span>")
|
||||||
set_disabling(FALSE)
|
set_disabling(FALSE)
|
||||||
else if(prob(20))
|
return
|
||||||
|
|
||||||
|
if(DT_PROB(10, delta_time))
|
||||||
victim.adjustToxLoss(0.5)
|
victim.adjustToxLoss(0.5)
|
||||||
|
|
||||||
if(WOUND_INFECTION_CRITICAL to WOUND_INFECTION_SEPTIC)
|
if(WOUND_INFECTION_CRITICAL to WOUND_INFECTION_SEPTIC)
|
||||||
if(!disabling && prob(3))
|
if(!disabling)
|
||||||
to_chat(victim, "<span class='warning'><b>You suddenly lose all sensation of the festering infection in your [limb.name]!</b></span>")
|
if(DT_PROB(1.5, delta_time))
|
||||||
set_disabling(TRUE)
|
to_chat(victim, "<span class='warning'><b>You suddenly lose all sensation of the festering infection in your [limb.name]!</b></span>")
|
||||||
else if(disabling && prob(3))
|
set_disabling(TRUE)
|
||||||
|
return
|
||||||
|
else if(DT_PROB(1.5, delta_time))
|
||||||
to_chat(victim, "<span class='notice'>You can barely feel your [limb.name] again, and you have to strain to retain motor control!</span>")
|
to_chat(victim, "<span class='notice'>You can barely feel your [limb.name] again, and you have to strain to retain motor control!</span>")
|
||||||
set_disabling(FALSE)
|
set_disabling(FALSE)
|
||||||
else if(prob(1))
|
return
|
||||||
to_chat(victim, "<span class='warning'>You contemplate life without your [limb.name]...</span>")
|
|
||||||
victim.adjustToxLoss(0.75)
|
if(DT_PROB(2.48, delta_time))
|
||||||
else if(prob(4))
|
if(prob(20))
|
||||||
victim.adjustToxLoss(1)
|
to_chat(victim, "<span class='warning'>You contemplate life without your [limb.name]...</span>")
|
||||||
|
victim.adjustToxLoss(0.75)
|
||||||
|
else
|
||||||
|
victim.adjustToxLoss(1)
|
||||||
|
|
||||||
if(WOUND_INFECTION_SEPTIC to INFINITY)
|
if(WOUND_INFECTION_SEPTIC to INFINITY)
|
||||||
if(prob(infestation))
|
if(DT_PROB(0.5 * infestation, delta_time))
|
||||||
switch(strikes_to_lose_limb)
|
switch(strikes_to_lose_limb)
|
||||||
if(3 to INFINITY)
|
if(3 to INFINITY)
|
||||||
to_chat(victim, "<span class='deadsay'>The skin on your [limb.name] is literally dripping off, you feel awful!</span>")
|
to_chat(victim, "<span class='deadsay'>The skin on your [limb.name] is literally dripping off, you feel awful!</span>")
|
||||||
@@ -230,16 +240,16 @@
|
|||||||
uv(I, user)
|
uv(I, user)
|
||||||
|
|
||||||
// people complained about burns not healing on stasis beds, so in addition to checking if it's cured, they also get the special ability to very slowly heal on stasis beds if they have the healing effects stored
|
// people complained about burns not healing on stasis beds, so in addition to checking if it's cured, they also get the special ability to very slowly heal on stasis beds if they have the healing effects stored
|
||||||
/datum/wound/burn/on_stasis()
|
/datum/wound/burn/on_stasis(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(flesh_healing > 0)
|
if(flesh_healing > 0)
|
||||||
flesh_damage = max(0, flesh_damage - 0.2)
|
flesh_damage = max(flesh_damage - (0.1 * delta_time), 0)
|
||||||
if((flesh_damage <= 0) && (infestation <= 1))
|
if((flesh_damage <= 0) && (infestation <= 1))
|
||||||
to_chat(victim, "<span class='green'>The burns on your [limb.name] have cleared up!</span>")
|
to_chat(victim, "<span class='green'>The burns on your [limb.name] have cleared up!</span>")
|
||||||
qdel(src)
|
qdel(src)
|
||||||
return
|
return
|
||||||
if(sanitization > 0)
|
if(sanitization > 0)
|
||||||
infestation = max(0, infestation - WOUND_BURN_SANITIZATION_RATE * 0.2)
|
infestation = max(infestation - (0.1 * WOUND_BURN_SANITIZATION_RATE * delta_time), 0)
|
||||||
|
|
||||||
/datum/wound/burn/on_synthflesh(amount)
|
/datum/wound/burn/on_synthflesh(amount)
|
||||||
flesh_healing += amount * 0.5 // 20u patch will heal 10 flesh standard
|
flesh_healing += amount * 0.5 // 20u patch will heal 10 flesh standard
|
||||||
@@ -288,7 +298,7 @@
|
|||||||
threshold_penalty = 80
|
threshold_penalty = 80
|
||||||
status_effect_type = /datum/status_effect/wound/burn/critical
|
status_effect_type = /datum/status_effect/wound/burn/critical
|
||||||
treatable_by = list(/obj/item/flashlight/pen/paramedic, /obj/item/stack/medical/ointment, /obj/item/stack/medical/mesh)
|
treatable_by = list(/obj/item/flashlight/pen/paramedic, /obj/item/stack/medical/ointment, /obj/item/stack/medical/mesh)
|
||||||
infestation_rate = 0.15 // appx 4.33 minutes to reach sepsis without any treatment
|
infestation_rate = 0.075 // appx 4.33 minutes to reach sepsis without any treatment
|
||||||
flesh_damage = 20
|
flesh_damage = 20
|
||||||
scar_keyword = "burncritical"
|
scar_keyword = "burncritical"
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -58,25 +58,25 @@
|
|||||||
return BLOOD_FLOW_DECREASING
|
return BLOOD_FLOW_DECREASING
|
||||||
return BLOOD_FLOW_STEADY
|
return BLOOD_FLOW_STEADY
|
||||||
|
|
||||||
/datum/wound/pierce/handle_process()
|
/datum/wound/pierce/handle_process(delta_time, times_fired)
|
||||||
blood_flow = min(blood_flow, WOUND_SLASH_MAX_BLOODFLOW)
|
blood_flow = min(blood_flow, WOUND_SLASH_MAX_BLOODFLOW)
|
||||||
|
|
||||||
if(victim.bodytemperature < (BODYTEMP_NORMAL - 10))
|
if(victim.bodytemperature < (BODYTEMP_NORMAL - 10))
|
||||||
blood_flow -= 0.2
|
blood_flow -= 0.1 * delta_time
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
to_chat(victim, "<span class='notice'>You feel the [lowertext(name)] in your [limb.name] firming up from the cold!</span>")
|
to_chat(victim, "<span class='notice'>You feel the [lowertext(name)] in your [limb.name] firming up from the cold!</span>")
|
||||||
|
|
||||||
if(HAS_TRAIT(victim, TRAIT_BLOODY_MESS))
|
if(HAS_TRAIT(victim, TRAIT_BLOODY_MESS))
|
||||||
blood_flow += 0.5 // old heparin used to just add +2 bleed stacks per tick, this adds 0.5 bleed flow to all open cuts which is probably even stronger as long as you can cut them first
|
blood_flow += 0.25 * delta_time // old heparin used to just add +2 bleed stacks per tick, this adds 0.5 bleed flow to all open cuts which is probably even stronger as long as you can cut them first
|
||||||
|
|
||||||
if(limb.current_gauze)
|
if(limb.current_gauze)
|
||||||
blood_flow -= limb.current_gauze.absorption_rate * gauzed_clot_rate
|
blood_flow -= limb.current_gauze.absorption_rate * gauzed_clot_rate * delta_time
|
||||||
limb.current_gauze.absorption_capacity -= limb.current_gauze.absorption_rate
|
limb.current_gauze.absorption_capacity -= limb.current_gauze.absorption_rate * delta_time
|
||||||
|
|
||||||
if(blood_flow <= 0)
|
if(blood_flow <= 0)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
/datum/wound/pierce/on_stasis()
|
/datum/wound/pierce/on_stasis(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(blood_flow <= 0)
|
if(blood_flow <= 0)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
@@ -97,7 +97,7 @@
|
|||||||
|
|
||||||
/datum/wound/pierce/on_synthflesh(power)
|
/datum/wound/pierce/on_synthflesh(power)
|
||||||
. = ..()
|
. = ..()
|
||||||
blood_flow -= 0.05 * power // 20u * 0.05 = -1 blood flow, less than with slashes but still good considering smaller bleed rates
|
blood_flow -= 0.025 * power // 20u * 0.05 = -1 blood flow, less than with slashes but still good considering smaller bleed rates
|
||||||
|
|
||||||
/// If someone is using a suture to close this puncture
|
/// If someone is using a suture to close this puncture
|
||||||
/datum/wound/pierce/proc/suture(obj/item/stack/medical/suture/I, mob/user)
|
/datum/wound/pierce/proc/suture(obj/item/stack/medical/suture/I, mob/user)
|
||||||
|
|||||||
@@ -92,9 +92,9 @@
|
|||||||
if(clot_rate < 0)
|
if(clot_rate < 0)
|
||||||
return BLOOD_FLOW_INCREASING
|
return BLOOD_FLOW_INCREASING
|
||||||
|
|
||||||
/datum/wound/slash/handle_process()
|
/datum/wound/slash/handle_process(delta_time, times_fired)
|
||||||
if(victim.stat == DEAD)
|
if(victim.stat == DEAD)
|
||||||
blood_flow -= max(clot_rate, WOUND_SLASH_DEAD_CLOT_MIN)
|
blood_flow -= max(clot_rate, WOUND_SLASH_DEAD_CLOT_MIN) * delta_time
|
||||||
if(blood_flow < minimum_flow)
|
if(blood_flow < minimum_flow)
|
||||||
if(demotes_to)
|
if(demotes_to)
|
||||||
replace_wound(demotes_to)
|
replace_wound(demotes_to)
|
||||||
@@ -105,15 +105,15 @@
|
|||||||
blood_flow = min(blood_flow, WOUND_SLASH_MAX_BLOODFLOW)
|
blood_flow = min(blood_flow, WOUND_SLASH_MAX_BLOODFLOW)
|
||||||
|
|
||||||
if(HAS_TRAIT(victim, TRAIT_BLOODY_MESS))
|
if(HAS_TRAIT(victim, TRAIT_BLOODY_MESS))
|
||||||
blood_flow += 0.5 // old heparin used to just add +2 bleed stacks per tick, this adds 0.5 bleed flow to all open cuts which is probably even stronger as long as you can cut them first
|
blood_flow += 0.25 // old heparin used to just add +2 bleed stacks per tick, this adds 0.5 bleed flow to all open cuts which is probably even stronger as long as you can cut them first
|
||||||
|
|
||||||
if(limb.current_gauze)
|
if(limb.current_gauze)
|
||||||
if(clot_rate > 0)
|
if(clot_rate > 0)
|
||||||
blood_flow -= clot_rate
|
blood_flow -= clot_rate * delta_time
|
||||||
blood_flow -= limb.current_gauze.absorption_rate
|
blood_flow -= limb.current_gauze.absorption_rate * delta_time
|
||||||
limb.seep_gauze(limb.current_gauze.absorption_rate)
|
limb.seep_gauze(limb.current_gauze.absorption_rate * delta_time)
|
||||||
else
|
else
|
||||||
blood_flow -= clot_rate
|
blood_flow -= clot_rate * delta_time
|
||||||
|
|
||||||
if(blood_flow > highest_flow)
|
if(blood_flow > highest_flow)
|
||||||
highest_flow = blood_flow
|
highest_flow = blood_flow
|
||||||
@@ -126,7 +126,7 @@
|
|||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
|
|
||||||
/datum/wound/slash/on_stasis()
|
/datum/wound/slash/on_stasis(delta_time, times_fired)
|
||||||
if(blood_flow >= minimum_flow)
|
if(blood_flow >= minimum_flow)
|
||||||
return
|
return
|
||||||
if(demotes_to)
|
if(demotes_to)
|
||||||
@@ -262,7 +262,7 @@
|
|||||||
severity = WOUND_SEVERITY_MODERATE
|
severity = WOUND_SEVERITY_MODERATE
|
||||||
initial_flow = 2
|
initial_flow = 2
|
||||||
minimum_flow = 0.5
|
minimum_flow = 0.5
|
||||||
clot_rate = 0.12
|
clot_rate = 0.06
|
||||||
threshold_minimum = 20
|
threshold_minimum = 20
|
||||||
threshold_penalty = 10
|
threshold_penalty = 10
|
||||||
status_effect_type = /datum/status_effect/wound/slash/moderate
|
status_effect_type = /datum/status_effect/wound/slash/moderate
|
||||||
@@ -278,7 +278,7 @@
|
|||||||
severity = WOUND_SEVERITY_SEVERE
|
severity = WOUND_SEVERITY_SEVERE
|
||||||
initial_flow = 3.25
|
initial_flow = 3.25
|
||||||
minimum_flow = 2.75
|
minimum_flow = 2.75
|
||||||
clot_rate = 0.06
|
clot_rate = 0.03
|
||||||
threshold_minimum = 50
|
threshold_minimum = 50
|
||||||
threshold_penalty = 25
|
threshold_penalty = 25
|
||||||
demotes_to = /datum/wound/slash/moderate
|
demotes_to = /datum/wound/slash/moderate
|
||||||
@@ -295,7 +295,7 @@
|
|||||||
severity = WOUND_SEVERITY_CRITICAL
|
severity = WOUND_SEVERITY_CRITICAL
|
||||||
initial_flow = 4.25
|
initial_flow = 4.25
|
||||||
minimum_flow = 4
|
minimum_flow = 4
|
||||||
clot_rate = -0.05 // critical cuts actively get worse instead of better
|
clot_rate = -0.025 // critical cuts actively get worse instead of better
|
||||||
threshold_minimum = 80
|
threshold_minimum = 80
|
||||||
threshold_penalty = 40
|
threshold_penalty = 40
|
||||||
demotes_to = /datum/wound/slash/severe
|
demotes_to = /datum/wound/slash/severe
|
||||||
|
|||||||
@@ -29,17 +29,17 @@
|
|||||||
INVOKE_ASYNC(src, .proc/RemoveInfectionImages, owner)
|
INVOKE_ASYNC(src, .proc/RemoveInfectionImages, owner)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/item/organ/body_egg/on_death()
|
/obj/item/organ/body_egg/on_death(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!owner)
|
if(!owner)
|
||||||
return
|
return
|
||||||
egg_process()
|
egg_process(delta_time, times_fired)
|
||||||
|
|
||||||
/obj/item/organ/body_egg/on_life()
|
/obj/item/organ/body_egg/on_life(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
egg_process()
|
egg_process(delta_time, times_fired)
|
||||||
|
|
||||||
/obj/item/organ/body_egg/proc/egg_process()
|
/obj/item/organ/body_egg/proc/egg_process(delta_time, times_fired)
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/item/organ/body_egg/proc/RefreshInfectionImage()
|
/obj/item/organ/body_egg/proc/RefreshInfectionImage()
|
||||||
|
|||||||
@@ -130,7 +130,7 @@
|
|||||||
amount = 6
|
amount = 6
|
||||||
grind_results = list(/datum/reagent/cellulose = 2)
|
grind_results = list(/datum/reagent/cellulose = 2)
|
||||||
custom_price = PAYCHECK_ASSISTANT * 2
|
custom_price = PAYCHECK_ASSISTANT * 2
|
||||||
absorption_rate = 0.25
|
absorption_rate = 0.125
|
||||||
absorption_capacity = 5
|
absorption_capacity = 5
|
||||||
splint_factor = 0.35
|
splint_factor = 0.35
|
||||||
merge_type = /obj/item/stack/medical/gauze
|
merge_type = /obj/item/stack/medical/gauze
|
||||||
@@ -200,7 +200,7 @@
|
|||||||
desc = "A roll of cloth roughly cut from something that does a decent job of stabilizing wounds, but less efficiently so than real medical gauze."
|
desc = "A roll of cloth roughly cut from something that does a decent job of stabilizing wounds, but less efficiently so than real medical gauze."
|
||||||
self_delay = 6 SECONDS
|
self_delay = 6 SECONDS
|
||||||
other_delay = 3 SECONDS
|
other_delay = 3 SECONDS
|
||||||
absorption_rate = 0.15
|
absorption_rate = 0.075
|
||||||
absorption_capacity = 4
|
absorption_capacity = 4
|
||||||
merge_type = /obj/item/stack/medical/gauze/improvised
|
merge_type = /obj/item/stack/medical/gauze/improvised
|
||||||
gauze_type = /datum/bodypart_aid/gauze/improvised //SKYRAT EDIT ADDITION - MEDICAL
|
gauze_type = /datum/bodypart_aid/gauze/improvised //SKYRAT EDIT ADDITION - MEDICAL
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
var/splint_factor
|
var/splint_factor
|
||||||
/// How much blood flow this stack can absorb if used as a bandage on a cut wound, note that absorption is how much we lower the flow rate, not the raw amount of blood we suck up
|
/// How much blood flow this stack can absorb if used as a bandage on a cut wound, note that absorption is how much we lower the flow rate, not the raw amount of blood we suck up
|
||||||
var/absorption_capacity
|
var/absorption_capacity
|
||||||
/// How quickly we lower the blood flow on a cut wound we're bandaging. Expected lifetime of this bandage in ticks is thus absorption_capacity/absorption_rate, or until the cut heals, whichever comes first
|
/// How quickly we lower the blood flow on a cut wound we're bandaging. Expected lifetime of this bandage in seconds is thus absorption_capacity/absorption_rate, or until the cut heals, whichever comes first
|
||||||
var/absorption_rate
|
var/absorption_rate
|
||||||
/// Amount of matter for RCD
|
/// Amount of matter for RCD
|
||||||
var/matter_amount = 0
|
var/matter_amount = 0
|
||||||
|
|||||||
@@ -7,10 +7,15 @@
|
|||||||
organ_flags = NONE
|
organ_flags = NONE
|
||||||
beating = TRUE
|
beating = TRUE
|
||||||
var/true_name = "baseline placebo referencer"
|
var/true_name = "baseline placebo referencer"
|
||||||
var/cooldown_low = 300
|
|
||||||
var/cooldown_high = 300
|
/// The minimum time between activations
|
||||||
var/next_activation = 0
|
var/cooldown_low = 30 SECONDS
|
||||||
var/uses // -1 For infinite
|
/// The maximum time between activations
|
||||||
|
var/cooldown_high = 30 SECONDS
|
||||||
|
/// The cooldown for activations
|
||||||
|
COOLDOWN_DECLARE(activation_cooldown)
|
||||||
|
/// The number of remaining uses this gland has.
|
||||||
|
var/uses = 0 // -1 For infinite
|
||||||
var/human_only = FALSE
|
var/human_only = FALSE
|
||||||
var/active = FALSE
|
var/active = FALSE
|
||||||
|
|
||||||
@@ -36,7 +41,7 @@
|
|||||||
|
|
||||||
/obj/item/organ/heart/gland/proc/Start()
|
/obj/item/organ/heart/gland/proc/Start()
|
||||||
active = 1
|
active = 1
|
||||||
next_activation = world.time + rand(cooldown_low,cooldown_high)
|
COOLDOWN_START(src, activation_cooldown, rand(cooldown_low, cooldown_high))
|
||||||
|
|
||||||
/obj/item/organ/heart/gland/proc/update_gland_hud()
|
/obj/item/organ/heart/gland/proc/update_gland_hud()
|
||||||
if(!owner)
|
if(!owner)
|
||||||
@@ -91,7 +96,7 @@
|
|||||||
hud.add_to_hud(owner)
|
hud.add_to_hud(owner)
|
||||||
update_gland_hud()
|
update_gland_hud()
|
||||||
|
|
||||||
/obj/item/organ/heart/gland/on_life()
|
/obj/item/organ/heart/gland/on_life(delta_time, times_fired)
|
||||||
if(!beating)
|
if(!beating)
|
||||||
// alien glands are immune to stopping.
|
// alien glands are immune to stopping.
|
||||||
beating = TRUE
|
beating = TRUE
|
||||||
@@ -100,10 +105,10 @@
|
|||||||
if(!ownerCheck())
|
if(!ownerCheck())
|
||||||
active = FALSE
|
active = FALSE
|
||||||
return
|
return
|
||||||
if(next_activation <= world.time)
|
if(COOLDOWN_FINISHED(src, activation_cooldown))
|
||||||
activate()
|
activate()
|
||||||
uses--
|
uses--
|
||||||
next_activation = world.time + rand(cooldown_low,cooldown_high)
|
COOLDOWN_START(src, activation_cooldown, rand(cooldown_low, cooldown_high))
|
||||||
if(!uses)
|
if(!uses)
|
||||||
active = FALSE
|
active = FALSE
|
||||||
|
|
||||||
|
|||||||
@@ -124,7 +124,7 @@
|
|||||||
notify_ghosts("A controllable spore has been created in \the [get_area(src)].", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Sentient Spore Created")
|
notify_ghosts("A controllable spore has been created in \the [get_area(src)].", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Sentient Spore Created")
|
||||||
add_cell_sample()
|
add_cell_sample()
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/blob/blobspore/Life()
|
/mob/living/simple_animal/hostile/blob/blobspore/Life(delta_time = SSMOBS_DT, times_fired)
|
||||||
if(!is_zombie && isturf(src.loc))
|
if(!is_zombie && isturf(src.loc))
|
||||||
for(var/mob/living/carbon/human/H in view(src,1)) //Only for corpse right next to/on same tile
|
for(var/mob/living/carbon/human/H in view(src,1)) //Only for corpse right next to/on same tile
|
||||||
if(!is_weak && H.stat == DEAD)
|
if(!is_weak && H.stat == DEAD)
|
||||||
@@ -278,39 +278,41 @@
|
|||||||
/mob/living/simple_animal/hostile/blob/blobbernaut/add_cell_sample()
|
/mob/living/simple_animal/hostile/blob/blobbernaut/add_cell_sample()
|
||||||
AddElement(/datum/element/swabable, CELL_LINE_TABLE_BLOBBERNAUT, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5)
|
AddElement(/datum/element/swabable, CELL_LINE_TABLE_BLOBBERNAUT, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5)
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/blob/blobbernaut/Life()
|
/mob/living/simple_animal/hostile/blob/blobbernaut/Life(delta_time = SSMOBS_DT, times_fired)
|
||||||
if(..())
|
if(!..())
|
||||||
var/list/blobs_in_area = range(2, src)
|
return
|
||||||
if(independent)
|
var/list/blobs_in_area = range(2, src)
|
||||||
return // strong independent blobbernaut that don't need no blob
|
if(independent)
|
||||||
var/damagesources = 0
|
return // strong independent blobbernaut that don't need no blob
|
||||||
if(!(locate(/obj/structure/blob) in blobs_in_area))
|
var/damagesources = 0
|
||||||
damagesources++
|
if(!(locate(/obj/structure/blob) in blobs_in_area))
|
||||||
if(!factory)
|
damagesources++
|
||||||
damagesources++
|
|
||||||
else
|
if(!factory)
|
||||||
if(locate(/obj/structure/blob/special/core) in blobs_in_area)
|
damagesources++
|
||||||
adjustHealth(-maxHealth*BLOBMOB_BLOBBERNAUT_HEALING_CORE)
|
else
|
||||||
var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(src)) //hello yes you are being healed
|
if(locate(/obj/structure/blob/special/core) in blobs_in_area)
|
||||||
if(overmind)
|
adjustHealth(-maxHealth*BLOBMOB_BLOBBERNAUT_HEALING_CORE * delta_time)
|
||||||
H.color = overmind.blobstrain.complementary_color
|
var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(src)) //hello yes you are being healed
|
||||||
else
|
|
||||||
H.color = "#000000"
|
|
||||||
if(locate(/obj/structure/blob/special/node) in blobs_in_area)
|
|
||||||
adjustHealth(-maxHealth*BLOBMOB_BLOBBERNAUT_HEALING_NODE)
|
|
||||||
var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(src))
|
|
||||||
if(overmind)
|
|
||||||
H.color = overmind.blobstrain.complementary_color
|
|
||||||
else
|
|
||||||
H.color = "#000000"
|
|
||||||
if(damagesources)
|
|
||||||
for(var/i in 1 to damagesources)
|
|
||||||
adjustHealth(maxHealth*BLOBMOB_BLOBBERNAUT_HEALTH_DECAY) //take 2.5% of max health as damage when not near the blob or if the naut has no factory, 5% if both
|
|
||||||
var/image/I = new('icons/mob/blob.dmi', src, "nautdamage", MOB_LAYER+0.01)
|
|
||||||
I.appearance_flags = RESET_COLOR
|
|
||||||
if(overmind)
|
if(overmind)
|
||||||
I.color = overmind.blobstrain.complementary_color
|
H.color = overmind.blobstrain.complementary_color
|
||||||
flick_overlay_view(I, src, 8)
|
else
|
||||||
|
H.color = "#000000"
|
||||||
|
if(locate(/obj/structure/blob/special/node) in blobs_in_area)
|
||||||
|
adjustHealth(-maxHealth*BLOBMOB_BLOBBERNAUT_HEALING_NODE * delta_time)
|
||||||
|
var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(src))
|
||||||
|
if(overmind)
|
||||||
|
H.color = overmind.blobstrain.complementary_color
|
||||||
|
else
|
||||||
|
H.color = "#000000"
|
||||||
|
|
||||||
|
if(damagesources)
|
||||||
|
adjustHealth(maxHealth * BLOBMOB_BLOBBERNAUT_HEALTH_DECAY * damagesources * delta_time) //take 2.5% of max health as damage when not near the blob or if the naut has no factory, 5% if both
|
||||||
|
var/image/I = new('icons/mob/blob.dmi', src, "nautdamage", MOB_LAYER+0.01)
|
||||||
|
I.appearance_flags = RESET_COLOR
|
||||||
|
if(overmind)
|
||||||
|
I.color = overmind.blobstrain.complementary_color
|
||||||
|
flick_overlay_view(I, src, 8)
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/blob/blobbernaut/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
|
/mob/living/simple_animal/hostile/blob/blobbernaut/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|||||||
@@ -25,9 +25,9 @@
|
|||||||
exposed_mob.reagents.add_reagent(/datum/reagent/blob/cryogenic_poison, 0.3*reac_volume)
|
exposed_mob.reagents.add_reagent(/datum/reagent/blob/cryogenic_poison, 0.3*reac_volume)
|
||||||
exposed_mob.apply_damage(0.2*reac_volume, BRUTE, wound_bonus=CANT_WOUND)
|
exposed_mob.apply_damage(0.2*reac_volume, BRUTE, wound_bonus=CANT_WOUND)
|
||||||
|
|
||||||
/datum/reagent/blob/cryogenic_poison/on_mob_life(mob/living/carbon/exposed_mob)
|
/datum/reagent/blob/cryogenic_poison/on_mob_life(mob/living/carbon/exposed_mob, delta_time, times_fired)
|
||||||
exposed_mob.adjustBruteLoss(0.5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
|
exposed_mob.adjustBruteLoss(0.5 * REAGENTS_EFFECT_MULTIPLIER * delta_time, FALSE)
|
||||||
exposed_mob.adjustFireLoss(0.5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
|
exposed_mob.adjustFireLoss(0.5 * REAGENTS_EFFECT_MULTIPLIER * delta_time, FALSE)
|
||||||
exposed_mob.adjustToxLoss(0.5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
|
exposed_mob.adjustToxLoss(0.5 * REAGENTS_EFFECT_MULTIPLIER * delta_time, FALSE)
|
||||||
. = 1
|
. = 1
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -24,8 +24,8 @@
|
|||||||
exposed_mob.reagents.add_reagent(/datum/reagent/toxin/spore, 0.2*reac_volume)
|
exposed_mob.reagents.add_reagent(/datum/reagent/toxin/spore, 0.2*reac_volume)
|
||||||
exposed_mob.apply_damage(0.7*reac_volume, TOX)
|
exposed_mob.apply_damage(0.7*reac_volume, TOX)
|
||||||
|
|
||||||
/datum/reagent/blob/regenerative_materia/on_mob_life(mob/living/carbon/C)
|
/datum/reagent/blob/regenerative_materia/on_mob_life(mob/living/carbon/C, delta_time, times_fired)
|
||||||
C.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER)
|
C.adjustToxLoss(1 * REAGENTS_EFFECT_MULTIPLIER * delta_time)
|
||||||
C.hal_screwyhud = SCREWYHUD_HEALTHY //fully healed, honest
|
C.hal_screwyhud = SCREWYHUD_HEALTHY //fully healed, honest
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
var/trueabsorbs = 0//dna gained using absorb, not dna sting
|
var/trueabsorbs = 0//dna gained using absorb, not dna sting
|
||||||
var/chem_charges = 20
|
var/chem_charges = 20
|
||||||
var/chem_storage = 75
|
var/chem_storage = 75
|
||||||
var/chem_recharge_rate = 1
|
var/chem_recharge_rate = 0.5
|
||||||
var/chem_recharge_slowdown = 0
|
var/chem_recharge_slowdown = 0
|
||||||
var/sting_range = 2
|
var/sting_range = 2
|
||||||
var/geneticdamage = 0
|
var/geneticdamage = 0
|
||||||
@@ -209,15 +209,15 @@
|
|||||||
return FALSE
|
return FALSE
|
||||||
|
|
||||||
//Called in life()
|
//Called in life()
|
||||||
/datum/antagonist/changeling/proc/regenerate()//grants the HuD in life.dm
|
/datum/antagonist/changeling/proc/regenerate(delta_time, times_fired)//grants the HuD in life.dm
|
||||||
var/mob/living/carbon/the_ling = owner.current
|
var/mob/living/carbon/the_ling = owner.current
|
||||||
if(istype(the_ling))
|
if(istype(the_ling))
|
||||||
if(the_ling.stat == DEAD)
|
if(the_ling.stat == DEAD)
|
||||||
chem_charges = min(max(0, chem_charges + chem_recharge_rate - chem_recharge_slowdown), (chem_storage*0.5))
|
chem_charges = min(max(0, chem_charges + ((chem_recharge_rate - chem_recharge_slowdown) * delta_time)), (chem_storage * 0.5))
|
||||||
geneticdamage = max(LING_DEAD_GENETICDAMAGE_HEAL_CAP,geneticdamage-1)
|
geneticdamage = max(geneticdamage - (0.5 * delta_time), LING_DEAD_GENETICDAMAGE_HEAL_CAP)
|
||||||
else //not dead? no chem/geneticdamage caps.
|
else //not dead? no chem/geneticdamage caps.
|
||||||
chem_charges = min(max(0, chem_charges + chem_recharge_rate - chem_recharge_slowdown), chem_storage)
|
chem_charges = min(max(0, chem_charges + ((chem_recharge_rate - chem_recharge_slowdown) * delta_time)), chem_storage)
|
||||||
geneticdamage = max(0, geneticdamage-1)
|
geneticdamage = max(geneticdamage - (0.5 * delta_time), 0)
|
||||||
|
|
||||||
|
|
||||||
/datum/antagonist/changeling/proc/get_dna(dna_owner)
|
/datum/antagonist/changeling/proc/get_dna(dna_owner)
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
|
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
|
||||||
if(changeling.mimicing)
|
if(changeling.mimicing)
|
||||||
changeling.mimicing = ""
|
changeling.mimicing = ""
|
||||||
changeling.chem_recharge_slowdown -= 0.5
|
changeling.chem_recharge_slowdown -= 0.25
|
||||||
to_chat(user, "<span class='notice'>We return our vocal glands to their original position.</span>")
|
to_chat(user, "<span class='notice'>We return our vocal glands to their original position.</span>")
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
return
|
return
|
||||||
..()
|
..()
|
||||||
changeling.mimicing = mimic_voice
|
changeling.mimicing = mimic_voice
|
||||||
changeling.chem_recharge_slowdown += 0.5
|
changeling.chem_recharge_slowdown += 0.25
|
||||||
to_chat(user, "<span class='notice'>We shape our glands to take the voice of <b>[mimic_voice]</b>, this will slow down regenerating chemicals while active.</span>")
|
to_chat(user, "<span class='notice'>We shape our glands to take the voice of <b>[mimic_voice]</b>, this will slow down regenerating chemicals while active.</span>")
|
||||||
to_chat(user, "<span class='notice'>Use this power again to return to our original voice and return chemical production to normal levels.</span>")
|
to_chat(user, "<span class='notice'>Use this power again to return to our original voice and return chemical production to normal levels.</span>")
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|||||||
@@ -465,7 +465,7 @@
|
|||||||
helmet_type = /obj/item/clothing/head/helmet/space/changeling
|
helmet_type = /obj/item/clothing/head/helmet/space/changeling
|
||||||
suit_name_simple = "flesh shell"
|
suit_name_simple = "flesh shell"
|
||||||
helmet_name_simple = "space helmet"
|
helmet_name_simple = "space helmet"
|
||||||
recharge_slowdown = 0.5
|
recharge_slowdown = 0.25
|
||||||
blood_on_castoff = 1
|
blood_on_castoff = 1
|
||||||
|
|
||||||
/obj/item/clothing/suit/space/changeling
|
/obj/item/clothing/suit/space/changeling
|
||||||
@@ -520,7 +520,7 @@
|
|||||||
chemical_cost = 20
|
chemical_cost = 20
|
||||||
dna_cost = 1
|
dna_cost = 1
|
||||||
req_human = 1
|
req_human = 1
|
||||||
recharge_slowdown = 0.25
|
recharge_slowdown = 0.125
|
||||||
|
|
||||||
suit_type = /obj/item/clothing/suit/armor/changeling
|
suit_type = /obj/item/clothing/suit/armor/changeling
|
||||||
helmet_type = /obj/item/clothing/head/helmet/changeling
|
helmet_type = /obj/item/clothing/head/helmet/changeling
|
||||||
|
|||||||
@@ -16,11 +16,11 @@
|
|||||||
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
|
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
|
||||||
if(!receptors_active)
|
if(!receptors_active)
|
||||||
to_chat(user, "<span class='warning'>We search for the scent of any nearby changelings.</span>")
|
to_chat(user, "<span class='warning'>We search for the scent of any nearby changelings.</span>")
|
||||||
changeling.chem_recharge_slowdown += 0.5
|
changeling.chem_recharge_slowdown += 0.25
|
||||||
user.apply_status_effect(/datum/status_effect/agent_pinpointer/changeling)
|
user.apply_status_effect(/datum/status_effect/agent_pinpointer/changeling)
|
||||||
else
|
else
|
||||||
to_chat(user, "<span class='notice'>We stop searching for now.</span>")
|
to_chat(user, "<span class='notice'>We stop searching for now.</span>")
|
||||||
changeling.chem_recharge_slowdown -= 0.5
|
changeling.chem_recharge_slowdown -= 0.25
|
||||||
user.remove_status_effect(/datum/status_effect/agent_pinpointer/changeling)
|
user.remove_status_effect(/datum/status_effect/agent_pinpointer/changeling)
|
||||||
|
|
||||||
receptors_active = !receptors_active
|
receptors_active = !receptors_active
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/// How many life ticks are required for the nightmare's heart to revive the nightmare.
|
/// How many life ticks are required for the nightmare's heart to revive the nightmare.
|
||||||
#define HEART_RESPAWN_THRESHHOLD 40
|
#define HEART_RESPAWN_THRESHHOLD (80 SECONDS)
|
||||||
/// A special flag value used to make a nightmare heart not grant a light eater. Appears to be unused.
|
/// A special flag value used to make a nightmare heart not grant a light eater. Appears to be unused.
|
||||||
#define HEART_SPECIAL_SHADOWIFY 2
|
#define HEART_SPECIAL_SHADOWIFY 2
|
||||||
|
|
||||||
@@ -73,14 +73,14 @@
|
|||||||
/obj/item/organ/heart/nightmare/Stop()
|
/obj/item/organ/heart/nightmare/Stop()
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
/obj/item/organ/heart/nightmare/on_death()
|
/obj/item/organ/heart/nightmare/on_death(delta_time, times_fired)
|
||||||
if(!owner)
|
if(!owner)
|
||||||
return
|
return
|
||||||
var/turf/T = get_turf(owner)
|
var/turf/T = get_turf(owner)
|
||||||
if(istype(T))
|
if(istype(T))
|
||||||
var/light_amount = T.get_lumcount()
|
var/light_amount = T.get_lumcount()
|
||||||
if(light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD)
|
if(light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD)
|
||||||
respawn_progress++
|
respawn_progress += delta_time SECONDS
|
||||||
playsound(owner, 'sound/effects/singlebeat.ogg', 40, TRUE)
|
playsound(owner, 'sound/effects/singlebeat.ogg', 40, TRUE)
|
||||||
if(respawn_progress < HEART_RESPAWN_THRESHHOLD)
|
if(respawn_progress < HEART_RESPAWN_THRESHHOLD)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -57,7 +57,7 @@
|
|||||||
var/essence = 75 //The resource, and health, of revenants.
|
var/essence = 75 //The resource, and health, of revenants.
|
||||||
var/essence_regen_cap = 75 //The regeneration cap of essence (go figure); regenerates every Life() tick up to this amount.
|
var/essence_regen_cap = 75 //The regeneration cap of essence (go figure); regenerates every Life() tick up to this amount.
|
||||||
var/essence_regenerating = TRUE //If the revenant regenerates essence or not
|
var/essence_regenerating = TRUE //If the revenant regenerates essence or not
|
||||||
var/essence_regen_amount = 5 //How much essence regenerates
|
var/essence_regen_amount = 2.5 //How much essence regenerates per second
|
||||||
var/essence_accumulated = 0 //How much essence the revenant has stolen
|
var/essence_accumulated = 0 //How much essence the revenant has stolen
|
||||||
var/essence_excess = 0 //How much stolen essence avilable for unlocks
|
var/essence_excess = 0 //How much stolen essence avilable for unlocks
|
||||||
var/revealed = FALSE //If the revenant can take damage from normal sources.
|
var/revealed = FALSE //If the revenant can take damage from normal sources.
|
||||||
@@ -113,7 +113,7 @@
|
|||||||
mind.add_antag_datum(/datum/antagonist/revenant)
|
mind.add_antag_datum(/datum/antagonist/revenant)
|
||||||
|
|
||||||
//Life, Stat, Hud Updates, and Say
|
//Life, Stat, Hud Updates, and Say
|
||||||
/mob/living/simple_animal/revenant/Life()
|
/mob/living/simple_animal/revenant/Life(delta_time = SSMOBS_DT, times_fired)
|
||||||
if(stasis)
|
if(stasis)
|
||||||
return
|
return
|
||||||
if(revealed && essence <= 0)
|
if(revealed && essence <= 0)
|
||||||
@@ -129,7 +129,7 @@
|
|||||||
notransform = FALSE
|
notransform = FALSE
|
||||||
to_chat(src, "<span class='revenboldnotice'>You can move again!</span>")
|
to_chat(src, "<span class='revenboldnotice'>You can move again!</span>")
|
||||||
if(essence_regenerating && !inhibited && essence < essence_regen_cap) //While inhibited, essence will not regenerate
|
if(essence_regenerating && !inhibited && essence < essence_regen_cap) //While inhibited, essence will not regenerate
|
||||||
essence = min(essence_regen_cap, essence+essence_regen_amount)
|
essence = min(essence + (essence_regen_amount * delta_time), essence_regen_cap)
|
||||||
update_action_buttons_icon() //because we update something required by our spells in life, we need to update our buttons
|
update_action_buttons_icon() //because we update something required by our spells in life, we need to update our buttons
|
||||||
update_spooky_icon()
|
update_spooky_icon()
|
||||||
update_health_hud()
|
update_health_hud()
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
/datum/disease/revblight
|
/datum/disease/revblight
|
||||||
name = "Unnatural Wasting"
|
name = "Unnatural Wasting"
|
||||||
max_stages = 5
|
max_stages = 5
|
||||||
stage_prob = 10
|
stage_prob = 5
|
||||||
spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS
|
spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS
|
||||||
cure_text = "Holy water or extensive rest."
|
cure_text = "Holy water or extensive rest."
|
||||||
spread_text = "A burst of unholy energy"
|
spread_text = "A burst of unholy energy"
|
||||||
cures = list(/datum/reagent/water/holywater)
|
cures = list(/datum/reagent/water/holywater)
|
||||||
cure_chance = 50 //higher chance to cure, because revenants are assholes
|
cure_chance = 30 //higher chance to cure, because revenants are assholes
|
||||||
agent = "Unholy Forces"
|
agent = "Unholy Forces"
|
||||||
viable_mobtypes = list(/mob/living/carbon/human)
|
viable_mobtypes = list(/mob/living/carbon/human)
|
||||||
disease_flags = CURABLE
|
disease_flags = CURABLE
|
||||||
@@ -25,42 +25,42 @@
|
|||||||
..()
|
..()
|
||||||
|
|
||||||
|
|
||||||
/datum/disease/revblight/stage_act()
|
/datum/disease/revblight/stage_act(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
if(!finalstage)
|
if(!finalstage)
|
||||||
if(affected_mob.body_position == LYING_DOWN && prob(stage * 6))
|
if(affected_mob.body_position == LYING_DOWN && DT_PROB(3 * stage, delta_time))
|
||||||
cure()
|
cure()
|
||||||
return FALSE
|
return FALSE
|
||||||
if(prob(stage * 3))
|
if(DT_PROB(1.5 * stage, delta_time))
|
||||||
to_chat(affected_mob, "<span class='revennotice'>You suddenly feel [pick("sick and tired", "disoriented", "tired and confused", "nauseated", "faint", "dizzy")]...</span>")
|
to_chat(affected_mob, "<span class='revennotice'>You suddenly feel [pick("sick and tired", "disoriented", "tired and confused", "nauseated", "faint", "dizzy")]...</span>")
|
||||||
affected_mob.add_confusion(8)
|
affected_mob.add_confusion(8)
|
||||||
affected_mob.adjustStaminaLoss(20, FALSE)
|
affected_mob.adjustStaminaLoss(20, FALSE)
|
||||||
new /obj/effect/temp_visual/revenant(affected_mob.loc)
|
new /obj/effect/temp_visual/revenant(affected_mob.loc)
|
||||||
if(stagedamage < stage)
|
if(stagedamage < stage)
|
||||||
stagedamage++
|
stagedamage++
|
||||||
affected_mob.adjustToxLoss(stage * 2, FALSE) //should, normally, do about 30 toxin damage.
|
affected_mob.adjustToxLoss(1 * stage * delta_time, FALSE) //should, normally, do about 30 toxin damage.
|
||||||
new /obj/effect/temp_visual/revenant(affected_mob.loc)
|
new /obj/effect/temp_visual/revenant(affected_mob.loc)
|
||||||
if(prob(45))
|
if(DT_PROB(25, delta_time))
|
||||||
affected_mob.adjustStaminaLoss(stage, FALSE)
|
affected_mob.adjustStaminaLoss(stage, FALSE)
|
||||||
|
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(2)
|
if(2)
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
affected_mob.emote("pale")
|
affected_mob.emote("pale")
|
||||||
if(3)
|
if(3)
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
affected_mob.emote(pick("pale","shiver"))
|
affected_mob.emote(pick("pale","shiver"))
|
||||||
if(4)
|
if(4)
|
||||||
if(prob(15))
|
if(DT_PROB(7.5, delta_time))
|
||||||
affected_mob.emote(pick("pale","shiver","cries"))
|
affected_mob.emote(pick("pale","shiver","cries"))
|
||||||
if(5)
|
if(5)
|
||||||
if(!finalstage)
|
if(!finalstage)
|
||||||
finalstage = TRUE
|
finalstage = TRUE
|
||||||
to_chat(affected_mob, "<span class='revenbignotice'>You feel like [pick("nothing's worth it anymore", "nobody ever needed your help", "nothing you did mattered", "everything you tried to do was worthless")].</span>")
|
to_chat(affected_mob, "<span class='revenbignotice'>You feel like [pick("nothing's worth it anymore", "nobody ever needed your help", "nothing you did mattered", "everything you tried to do was worthless")].</span>")
|
||||||
affected_mob.adjustStaminaLoss(45, FALSE)
|
affected_mob.adjustStaminaLoss(22.5 * delta_time, FALSE)
|
||||||
new /obj/effect/temp_visual/revenant(affected_mob.loc)
|
new /obj/effect/temp_visual/revenant(affected_mob.loc)
|
||||||
if(affected_mob.dna && affected_mob.dna.species)
|
if(affected_mob.dna && affected_mob.dna.species)
|
||||||
affected_mob.dna.species.handle_mutant_bodyparts(affected_mob,"#1d2953")
|
affected_mob.dna.species.handle_mutant_bodyparts(affected_mob,"#1d2953")
|
||||||
|
|||||||
@@ -72,7 +72,7 @@
|
|||||||
human.update_spacesuit_hud_icon("0")
|
human.update_spacesuit_hud_icon("0")
|
||||||
|
|
||||||
// Space Suit temperature regulation and power usage
|
// Space Suit temperature regulation and power usage
|
||||||
/obj/item/clothing/suit/space/process()
|
/obj/item/clothing/suit/space/process(delta_time)
|
||||||
var/mob/living/carbon/human/user = src.loc
|
var/mob/living/carbon/human/user = src.loc
|
||||||
if(!user || !ishuman(user) || !(user.wear_suit == src))
|
if(!user || !ishuman(user) || !(user.wear_suit == src))
|
||||||
return
|
return
|
||||||
@@ -97,7 +97,7 @@
|
|||||||
|
|
||||||
// If we got here, it means thermals are on, the cell is in and the cell has
|
// If we got here, it means thermals are on, the cell is in and the cell has
|
||||||
// just had enough charge subtracted from it to power the thermal regulator
|
// just had enough charge subtracted from it to power the thermal regulator
|
||||||
user.adjust_bodytemperature(get_temp_change_amount((temperature_setting - user.bodytemperature), 0.16))
|
user.adjust_bodytemperature(get_temp_change_amount((temperature_setting - user.bodytemperature), 0.08 * delta_time))
|
||||||
update_hud_icon(user)
|
update_hud_icon(user)
|
||||||
|
|
||||||
// Clean up the cell on destroy
|
// Clean up the cell on destroy
|
||||||
|
|||||||
@@ -661,7 +661,7 @@ This section is for the crystal monsters variations
|
|||||||
attack_verb_simple = "smash"
|
attack_verb_simple = "smash"
|
||||||
attack_sound = 'sound/effects/supermatter.ogg'
|
attack_sound = 'sound/effects/supermatter.ogg'
|
||||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||||
unsuitable_atmos_damage = 10
|
unsuitable_atmos_damage = 5
|
||||||
robust_searching = 1
|
robust_searching = 1
|
||||||
stat_attack = HARD_CRIT
|
stat_attack = HARD_CRIT
|
||||||
faction = list("crystal")
|
faction = list("crystal")
|
||||||
|
|||||||
@@ -25,12 +25,11 @@ GLOBAL_LIST_INIT(hallucination_list, list(
|
|||||||
))
|
))
|
||||||
|
|
||||||
|
|
||||||
/mob/living/carbon/proc/handle_hallucinations()
|
/mob/living/carbon/proc/handle_hallucinations(delta_time, times_fired)
|
||||||
if(!hallucination)
|
if(!hallucination)
|
||||||
return
|
return
|
||||||
|
|
||||||
hallucination = max(hallucination - 1, 0)
|
hallucination = max(hallucination - (0.5 * delta_time), 0)
|
||||||
|
|
||||||
if(world.time < next_hallucination)
|
if(world.time < next_hallucination)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -64,7 +64,7 @@
|
|||||||
owner.revive(full_heal = TRUE, admin_revive = FALSE)
|
owner.revive(full_heal = TRUE, admin_revive = FALSE)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
/obj/item/organ/regenerative_core/on_life()
|
/obj/item/organ/regenerative_core/on_life(delta_time, times_fired)
|
||||||
..()
|
..()
|
||||||
if(owner.health <= owner.crit_threshold)
|
if(owner.health <= owner.crit_threshold)
|
||||||
ui_action_click()
|
ui_action_click()
|
||||||
|
|||||||
@@ -966,7 +966,7 @@
|
|||||||
cures = list(/datum/reagent/medicine/adminordrazine)
|
cures = list(/datum/reagent/medicine/adminordrazine)
|
||||||
agent = "dragon's blood"
|
agent = "dragon's blood"
|
||||||
desc = "What do dragons have to do with Space Station 13?"
|
desc = "What do dragons have to do with Space Station 13?"
|
||||||
stage_prob = 20
|
stage_prob = 10
|
||||||
severity = DISEASE_SEVERITY_BIOHAZARD
|
severity = DISEASE_SEVERITY_BIOHAZARD
|
||||||
visibility_flags = 0
|
visibility_flags = 0
|
||||||
stage1 = list("Your bones ache.")
|
stage1 = list("Your bones ache.")
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
****************************************************/
|
****************************************************/
|
||||||
|
|
||||||
// Takes care blood loss and regeneration
|
// Takes care blood loss and regeneration
|
||||||
/mob/living/carbon/human/handle_blood()
|
/mob/living/carbon/human/handle_blood(delta_time, times_fired)
|
||||||
|
|
||||||
if(NOBLOOD in dna.species.species_traits || HAS_TRAIT(src, TRAIT_NOBLEED) || (HAS_TRAIT(src, TRAIT_FAKEDEATH)))
|
if(NOBLOOD in dna.species.species_traits || HAS_TRAIT(src, TRAIT_NOBLEED) || (HAS_TRAIT(src, TRAIT_FAKEDEATH)))
|
||||||
return
|
return
|
||||||
@@ -28,31 +28,31 @@
|
|||||||
nutrition_ratio = 1
|
nutrition_ratio = 1
|
||||||
if(satiety > 80)
|
if(satiety > 80)
|
||||||
nutrition_ratio *= 1.25
|
nutrition_ratio *= 1.25
|
||||||
adjust_nutrition(-nutrition_ratio * HUNGER_FACTOR)
|
adjust_nutrition(-nutrition_ratio * HUNGER_FACTOR * delta_time)
|
||||||
blood_volume = min(BLOOD_VOLUME_NORMAL, blood_volume + 0.5 * nutrition_ratio)
|
blood_volume = min(blood_volume + (BLOOD_REGEN_FACTOR * nutrition_ratio * delta_time), BLOOD_VOLUME_NORMAL)
|
||||||
|
|
||||||
//Effects of bloodloss
|
//Effects of bloodloss
|
||||||
var/word = pick("dizzy","woozy","faint")
|
var/word = pick("dizzy","woozy","faint")
|
||||||
switch(blood_volume)
|
switch(blood_volume)
|
||||||
if(BLOOD_VOLUME_EXCESS to BLOOD_VOLUME_MAX_LETHAL)
|
if(BLOOD_VOLUME_EXCESS to BLOOD_VOLUME_MAX_LETHAL)
|
||||||
if(prob(15))
|
if(DT_PROB(7.5, delta_time))
|
||||||
to_chat(src, "<span class='userdanger'>Blood starts to tear your skin apart. You're going to burst!</span>")
|
to_chat(src, "<span class='userdanger'>Blood starts to tear your skin apart. You're going to burst!</span>")
|
||||||
inflate_gib()
|
inflate_gib()
|
||||||
if(BLOOD_VOLUME_MAXIMUM to BLOOD_VOLUME_EXCESS)
|
if(BLOOD_VOLUME_MAXIMUM to BLOOD_VOLUME_EXCESS)
|
||||||
if(prob(10))
|
if(DT_PROB(5, delta_time))
|
||||||
to_chat(src, "<span class='warning'>You feel terribly bloated.</span>")
|
to_chat(src, "<span class='warning'>You feel terribly bloated.</span>")
|
||||||
if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE)
|
if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE)
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
to_chat(src, "<span class='warning'>You feel [word].</span>")
|
to_chat(src, "<span class='warning'>You feel [word].</span>")
|
||||||
adjustOxyLoss(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.01, 1))
|
adjustOxyLoss(round(0.005 * (BLOOD_VOLUME_NORMAL - blood_volume) * delta_time, 1))
|
||||||
if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY)
|
if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY)
|
||||||
adjustOxyLoss(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.02, 1))
|
adjustOxyLoss(round(0.01 * (BLOOD_VOLUME_NORMAL - blood_volume) * delta_time, 1))
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
blur_eyes(6)
|
blur_eyes(6)
|
||||||
to_chat(src, "<span class='warning'>You feel very [word].</span>")
|
to_chat(src, "<span class='warning'>You feel very [word].</span>")
|
||||||
if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD)
|
if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD)
|
||||||
adjustOxyLoss(5)
|
adjustOxyLoss(2.5 * delta_time)
|
||||||
if(prob(15))
|
if(DT_PROB(7.5, delta_time))
|
||||||
Unconscious(rand(20,60))
|
Unconscious(rand(20,60))
|
||||||
to_chat(src, "<span class='warning'>You feel extremely [word].</span>")
|
to_chat(src, "<span class='warning'>You feel extremely [word].</span>")
|
||||||
if(-INFINITY to BLOOD_VOLUME_SURVIVE)
|
if(-INFINITY to BLOOD_VOLUME_SURVIVE)
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
//Bleeding out
|
//Bleeding out
|
||||||
for(var/X in bodyparts)
|
for(var/X in bodyparts)
|
||||||
var/obj/item/bodypart/BP = X
|
var/obj/item/bodypart/BP = X
|
||||||
temp_bleed += BP.get_bleed_rate()
|
temp_bleed += BP.get_bleed_rate() * delta_time
|
||||||
BP.generic_bleedstacks = max(0, BP.generic_bleedstacks - 1)
|
BP.generic_bleedstacks = max(0, BP.generic_bleedstacks - 1)
|
||||||
|
|
||||||
if(temp_bleed)
|
if(temp_bleed)
|
||||||
|
|||||||
@@ -229,7 +229,7 @@
|
|||||||
owner.mind.current = null
|
owner.mind.current = null
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/item/organ/brain/on_life()
|
/obj/item/organ/brain/on_life(delta_time, times_fired)
|
||||||
if(damage >= BRAIN_DAMAGE_DEATH) //rip
|
if(damage >= BRAIN_DAMAGE_DEATH) //rip
|
||||||
to_chat(owner, "<span class='userdanger'>The last spark of life in your brain fizzles out...</span>")
|
to_chat(owner, "<span class='userdanger'>The last spark of life in your brain fizzles out...</span>")
|
||||||
owner.death()
|
owner.death()
|
||||||
|
|||||||
@@ -1,37 +1,40 @@
|
|||||||
|
|
||||||
/mob/living/brain/Life()
|
/mob/living/brain/Life(delta_time = SSMOBS_DT, times_fired)
|
||||||
if (notransform)
|
if (notransform)
|
||||||
return
|
return
|
||||||
if(!loc)
|
if(!loc)
|
||||||
return
|
return
|
||||||
. = ..()
|
. = ..()
|
||||||
handle_emp_damage()
|
handle_emp_damage(delta_time, times_fired)
|
||||||
|
|
||||||
/mob/living/brain/update_stat()
|
/mob/living/brain/update_stat()
|
||||||
if(status_flags & GODMODE)
|
if(status_flags & GODMODE)
|
||||||
return
|
return
|
||||||
if(health <= HEALTH_THRESHOLD_DEAD)
|
if(health > HEALTH_THRESHOLD_DEAD)
|
||||||
if(stat != DEAD)
|
return
|
||||||
death()
|
if(stat != DEAD)
|
||||||
var/obj/item/organ/brain/BR
|
death()
|
||||||
if(container?.brain)
|
var/obj/item/organ/brain/BR
|
||||||
BR = container.brain
|
if(container?.brain)
|
||||||
else if(istype(loc, /obj/item/organ/brain))
|
BR = container.brain
|
||||||
BR = loc
|
else if(istype(loc, /obj/item/organ/brain))
|
||||||
if(BR)
|
BR = loc
|
||||||
BR.damage = BRAIN_DAMAGE_DEATH //beaten to a pulp
|
if(BR)
|
||||||
|
BR.damage = BRAIN_DAMAGE_DEATH //beaten to a pulp
|
||||||
|
|
||||||
/mob/living/brain/proc/handle_emp_damage()
|
/mob/living/brain/proc/handle_emp_damage(delta_time, times_fired)
|
||||||
if(emp_damage)
|
if(!emp_damage)
|
||||||
if(stat == DEAD)
|
return
|
||||||
emp_damage = 0
|
|
||||||
else
|
|
||||||
emp_damage = max(emp_damage-1, 0)
|
|
||||||
|
|
||||||
/mob/living/brain/handle_status_effects()
|
if(stat == DEAD)
|
||||||
|
emp_damage = 0
|
||||||
|
else
|
||||||
|
emp_damage = max(emp_damage - (0.5 * delta_time), 0)
|
||||||
|
|
||||||
|
/mob/living/brain/handle_status_effects(delta_time, times_fired)
|
||||||
return
|
return
|
||||||
|
|
||||||
/mob/living/brain/handle_traits()
|
/mob/living/brain/handle_traits(delta_time, times_fired)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
/mob/living/carbon/alien/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) // beepsky won't hunt aliums
|
/mob/living/carbon/alien/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) // beepsky won't hunt aliums
|
||||||
return -10
|
return -10
|
||||||
|
|
||||||
/mob/living/carbon/alien/handle_environment(datum/gas_mixture/environment)
|
/mob/living/carbon/alien/handle_environment(datum/gas_mixture/environment, delta_time, times_fired)
|
||||||
// Run base mob body temperature proc before taking damage
|
// Run base mob body temperature proc before taking damage
|
||||||
// this balances body temp to the environment and natural stabilization
|
// this balances body temp to the environment and natural stabilization
|
||||||
. = ..()
|
. = ..()
|
||||||
@@ -58,19 +58,19 @@
|
|||||||
throw_alert("alien_fire", /atom/movable/screen/alert/alien_fire)
|
throw_alert("alien_fire", /atom/movable/screen/alert/alien_fire)
|
||||||
switch(bodytemperature)
|
switch(bodytemperature)
|
||||||
if(360 to 400)
|
if(360 to 400)
|
||||||
apply_damage(HEAT_DAMAGE_LEVEL_1, BURN)
|
apply_damage(HEAT_DAMAGE_LEVEL_1 * delta_time, BURN)
|
||||||
if(400 to 460)
|
if(400 to 460)
|
||||||
apply_damage(HEAT_DAMAGE_LEVEL_2, BURN)
|
apply_damage(HEAT_DAMAGE_LEVEL_2 * delta_time, BURN)
|
||||||
if(460 to INFINITY)
|
if(460 to INFINITY)
|
||||||
if(on_fire)
|
if(on_fire)
|
||||||
apply_damage(HEAT_DAMAGE_LEVEL_3, BURN)
|
apply_damage(HEAT_DAMAGE_LEVEL_3 * delta_time, BURN)
|
||||||
else
|
else
|
||||||
apply_damage(HEAT_DAMAGE_LEVEL_2, BURN)
|
apply_damage(HEAT_DAMAGE_LEVEL_2 * delta_time, BURN)
|
||||||
else
|
else
|
||||||
clear_alert("alien_fire")
|
clear_alert("alien_fire")
|
||||||
|
|
||||||
/mob/living/carbon/alien/reagent_check(datum/reagent/R) //can metabolize all reagents
|
/mob/living/carbon/alien/reagent_check(datum/reagent/R, delta_time, times_fired) //can metabolize all reagents
|
||||||
return 0
|
return FALSE
|
||||||
|
|
||||||
/mob/living/carbon/alien/get_status_tab_items()
|
/mob/living/carbon/alien/get_status_tab_items()
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
|
|
||||||
|
|
||||||
/mob/living/carbon/alien/larva/Life()
|
/mob/living/carbon/alien/larva/Life(delta_time = SSMOBS_DT, times_fired)
|
||||||
if (notransform)
|
if (notransform)
|
||||||
return
|
return
|
||||||
if(..() && !IS_IN_STASIS(src)) //not dead and not in stasis
|
if(!..() || IS_IN_STASIS(src) || (amount_grown >= max_grown))
|
||||||
// GROW!
|
return // We're dead, in stasis, or already grown.
|
||||||
if(amount_grown < max_grown)
|
// GROW!
|
||||||
amount_grown++
|
amount_grown = min(amount_grown + (0.5 * delta_time), max_grown)
|
||||||
update_icons()
|
update_icons()
|
||||||
|
|
||||||
|
|
||||||
/mob/living/carbon/alien/larva/update_stat()
|
/mob/living/carbon/alien/larva/update_stat()
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/mob/living/carbon/alien/Life()
|
/mob/living/carbon/alien/Life(delta_time = SSMOBS_DT, times_fired)
|
||||||
findQueen()
|
findQueen()
|
||||||
return..()
|
return..()
|
||||||
|
|
||||||
@@ -38,17 +38,17 @@
|
|||||||
//BREATH TEMPERATURE
|
//BREATH TEMPERATURE
|
||||||
handle_breath_temperature(breath)
|
handle_breath_temperature(breath)
|
||||||
|
|
||||||
/mob/living/carbon/alien/handle_status_effects()
|
/mob/living/carbon/alien/handle_status_effects(delta_time, times_fired)
|
||||||
..()
|
..()
|
||||||
//natural reduction of movement delay due to stun.
|
//natural reduction of movement delay due to stun.
|
||||||
if(move_delay_add > 0)
|
if(move_delay_add > 0)
|
||||||
move_delay_add = max(0, move_delay_add - rand(1, 2))
|
move_delay_add = max(0, move_delay_add - (0.5 * rand(1, 2) * delta_time))
|
||||||
|
|
||||||
/mob/living/carbon/alien/handle_changeling()
|
/mob/living/carbon/alien/handle_changeling()
|
||||||
return
|
return
|
||||||
|
|
||||||
/mob/living/carbon/alien/handle_fire()//Aliens on fire code
|
/mob/living/carbon/alien/handle_fire(delta_time, times_fired)//Aliens on fire code
|
||||||
. = ..()
|
. = ..()
|
||||||
if(.) //if the mob isn't on fire anymore
|
if(.) //if the mob isn't on fire anymore
|
||||||
return
|
return
|
||||||
adjust_bodytemperature(BODYTEMP_HEATING_MAX) //If you're on fire, you heat up!
|
adjust_bodytemperature(BODYTEMP_HEATING_MAX * 0.5 * delta_time) //If you're on fire, you heat up!
|
||||||
|
|||||||
@@ -35,10 +35,14 @@
|
|||||||
alien_powers = list(/obj/effect/proc_holder/alien/plant, /obj/effect/proc_holder/alien/transfer)
|
alien_powers = list(/obj/effect/proc_holder/alien/plant, /obj/effect/proc_holder/alien/transfer)
|
||||||
food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/toxin/plasma = 10)
|
food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/toxin/plasma = 10)
|
||||||
|
|
||||||
|
/// The current amount of stored plasma.
|
||||||
var/storedPlasma = 100
|
var/storedPlasma = 100
|
||||||
|
/// The maximum plasma this organ can store.
|
||||||
var/max_plasma = 250
|
var/max_plasma = 250
|
||||||
var/heal_rate = 5
|
/// The rate this organ regenerates its owners health at per damage type per second.
|
||||||
var/plasma_rate = 10
|
var/heal_rate = 2.5
|
||||||
|
/// The rate this organ regenerates plasma at per second.
|
||||||
|
var/plasma_rate = 5
|
||||||
|
|
||||||
/obj/item/organ/alien/plasmavessel/large
|
/obj/item/organ/alien/plasmavessel/large
|
||||||
name = "large plasma vessel"
|
name = "large plasma vessel"
|
||||||
@@ -46,10 +50,10 @@
|
|||||||
w_class = WEIGHT_CLASS_BULKY
|
w_class = WEIGHT_CLASS_BULKY
|
||||||
storedPlasma = 200
|
storedPlasma = 200
|
||||||
max_plasma = 500
|
max_plasma = 500
|
||||||
plasma_rate = 15
|
plasma_rate = 7.5
|
||||||
|
|
||||||
/obj/item/organ/alien/plasmavessel/large/queen
|
/obj/item/organ/alien/plasmavessel/large/queen
|
||||||
plasma_rate = 20
|
plasma_rate = 10
|
||||||
|
|
||||||
/obj/item/organ/alien/plasmavessel/small
|
/obj/item/organ/alien/plasmavessel/small
|
||||||
name = "small plasma vessel"
|
name = "small plasma vessel"
|
||||||
@@ -57,7 +61,7 @@
|
|||||||
w_class = WEIGHT_CLASS_SMALL
|
w_class = WEIGHT_CLASS_SMALL
|
||||||
storedPlasma = 100
|
storedPlasma = 100
|
||||||
max_plasma = 150
|
max_plasma = 150
|
||||||
plasma_rate = 5
|
plasma_rate = 2.5
|
||||||
|
|
||||||
/obj/item/organ/alien/plasmavessel/small/tiny
|
/obj/item/organ/alien/plasmavessel/small/tiny
|
||||||
name = "tiny plasma vessel"
|
name = "tiny plasma vessel"
|
||||||
@@ -66,22 +70,22 @@
|
|||||||
max_plasma = 100
|
max_plasma = 100
|
||||||
alien_powers = list(/obj/effect/proc_holder/alien/transfer)
|
alien_powers = list(/obj/effect/proc_holder/alien/transfer)
|
||||||
|
|
||||||
/obj/item/organ/alien/plasmavessel/on_life()
|
/obj/item/organ/alien/plasmavessel/on_life(delta_time, times_fired)
|
||||||
//If there are alien weeds on the ground then heal if needed or give some plasma
|
//If there are alien weeds on the ground then heal if needed or give some plasma
|
||||||
if(locate(/obj/structure/alien/weeds) in owner.loc)
|
if(locate(/obj/structure/alien/weeds) in owner.loc)
|
||||||
if(owner.health >= owner.maxHealth)
|
if(owner.health >= owner.maxHealth)
|
||||||
owner.adjustPlasma(plasma_rate)
|
owner.adjustPlasma(plasma_rate * delta_time)
|
||||||
else
|
else
|
||||||
var/heal_amt = heal_rate
|
var/heal_amt = heal_rate
|
||||||
if(!isalien(owner))
|
if(!isalien(owner))
|
||||||
heal_amt *= 0.2
|
heal_amt *= 0.2
|
||||||
owner.adjustPlasma(plasma_rate*0.5)
|
owner.adjustPlasma(0.5 * plasma_rate * delta_time)
|
||||||
owner.adjustBruteLoss(-heal_amt)
|
owner.adjustBruteLoss(-heal_amt * delta_time)
|
||||||
owner.adjustFireLoss(-heal_amt)
|
owner.adjustFireLoss(-heal_amt * delta_time)
|
||||||
owner.adjustOxyLoss(-heal_amt)
|
owner.adjustOxyLoss(-heal_amt * delta_time)
|
||||||
owner.adjustCloneLoss(-heal_amt)
|
owner.adjustCloneLoss(-heal_amt * delta_time)
|
||||||
else
|
else
|
||||||
owner.adjustPlasma(plasma_rate * 0.1)
|
owner.adjustPlasma(0.1 * plasma_rate * delta_time)
|
||||||
|
|
||||||
/obj/item/organ/alien/plasmavessel/Insert(mob/living/carbon/M, special = 0)
|
/obj/item/organ/alien/plasmavessel/Insert(mob/living/carbon/M, special = 0)
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -25,34 +25,34 @@
|
|||||||
if(prob(10))
|
if(prob(10))
|
||||||
AttemptGrow(0)
|
AttemptGrow(0)
|
||||||
|
|
||||||
/obj/item/organ/body_egg/alien_embryo/on_life()
|
/obj/item/organ/body_egg/alien_embryo/on_life(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
switch(stage)
|
switch(stage)
|
||||||
if(3, 4)
|
if(3, 4)
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
owner.emote("sneeze")
|
owner.emote("sneeze")
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
owner.emote("cough")
|
owner.emote("cough")
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
to_chat(owner, "<span class='danger'>Your throat feels sore.</span>")
|
to_chat(owner, "<span class='danger'>Your throat feels sore.</span>")
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
to_chat(owner, "<span class='danger'>Mucous runs down the back of your throat.</span>")
|
to_chat(owner, "<span class='danger'>Mucous runs down the back of your throat.</span>")
|
||||||
if(5)
|
if(5)
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
owner.emote("sneeze")
|
owner.emote("sneeze")
|
||||||
if(prob(2))
|
if(DT_PROB(1, delta_time))
|
||||||
owner.emote("cough")
|
owner.emote("cough")
|
||||||
if(prob(4))
|
if(DT_PROB(2, delta_time))
|
||||||
to_chat(owner, "<span class='danger'>Your muscles ache.</span>")
|
to_chat(owner, "<span class='danger'>Your muscles ache.</span>")
|
||||||
if(prob(20))
|
if(prob(20))
|
||||||
owner.take_bodypart_damage(1)
|
owner.take_bodypart_damage(1)
|
||||||
if(prob(4))
|
if(DT_PROB(2, delta_time))
|
||||||
to_chat(owner, "<span class='danger'>Your stomach hurts.</span>")
|
to_chat(owner, "<span class='danger'>Your stomach hurts.</span>")
|
||||||
if(prob(20))
|
if(prob(20))
|
||||||
owner.adjustToxLoss(1)
|
owner.adjustToxLoss(1)
|
||||||
if(6)
|
if(6)
|
||||||
to_chat(owner, "<span class='danger'>You feel something tearing its way out of your chest...</span>")
|
to_chat(owner, "<span class='danger'>You feel something tearing its way out of your chest...</span>")
|
||||||
owner.adjustToxLoss(10)
|
owner.adjustToxLoss(5 * delta_time) // Why is this [TOX]?
|
||||||
|
|
||||||
/// Controls Xenomorph Embryo growth. If embryo is fully grown (or overgrown), stop the proc. If not, increase the stage by one and if it's not fully grown (stage 6), add a timer to do this proc again after however long the growth time variable is.
|
/// Controls Xenomorph Embryo growth. If embryo is fully grown (or overgrown), stop the proc. If not, increase the stage by one and if it's not fully grown (stage 6), add a timer to do this proc again after however long the growth time variable is.
|
||||||
/obj/item/organ/body_egg/alien_embryo/proc/advance_embryo_stage()
|
/obj/item/organ/body_egg/alien_embryo/proc/advance_embryo_stage()
|
||||||
@@ -62,7 +62,6 @@
|
|||||||
INVOKE_ASYNC(src, .proc/RefreshInfectionImage)
|
INVOKE_ASYNC(src, .proc/RefreshInfectionImage)
|
||||||
addtimer(CALLBACK(src, .proc/advance_embryo_stage), growth_time)
|
addtimer(CALLBACK(src, .proc/advance_embryo_stage), growth_time)
|
||||||
|
|
||||||
|
|
||||||
/obj/item/organ/body_egg/alien_embryo/egg_process()
|
/obj/item/organ/body_egg/alien_embryo/egg_process()
|
||||||
if(stage == 6 && prob(50))
|
if(stage == 6 && prob(50))
|
||||||
for(var/datum/surgery/S in owner.surgeries)
|
for(var/datum/surgery/S in owner.surgeries)
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
|
|||||||
in_use = FALSE
|
in_use = FALSE
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/mob/living/carbon/human/dummy/Life()
|
/mob/living/carbon/human/dummy/Life(delta_time = SSMOBS_DT, times_fired)
|
||||||
return
|
return
|
||||||
|
|
||||||
/mob/living/carbon/human/dummy/attach_rot(mapload)
|
/mob/living/carbon/human/dummy/attach_rot(mapload)
|
||||||
|
|||||||
@@ -84,8 +84,8 @@
|
|||||||
//Check inventory slots
|
//Check inventory slots
|
||||||
return (wear_id?.GetID() || belt?.GetID())
|
return (wear_id?.GetID() || belt?.GetID())
|
||||||
|
|
||||||
/mob/living/carbon/human/reagent_check(datum/reagent/R)
|
/mob/living/carbon/human/reagent_check(datum/reagent/R, delta_time, times_fired)
|
||||||
return dna.species.handle_chemicals(R,src)
|
return dna.species.handle_chemicals(R, src, delta_time, times_fired)
|
||||||
// if it returns 0, it will run the usual on_mob_life for that reagent. otherwise, it will stop after running handle_chemicals for the species.
|
// if it returns 0, it will run the usual on_mob_life for that reagent. otherwise, it will stop after running handle_chemicals for the species.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -18,34 +18,33 @@
|
|||||||
#define THERMAL_PROTECTION_HAND_LEFT 0.025
|
#define THERMAL_PROTECTION_HAND_LEFT 0.025
|
||||||
#define THERMAL_PROTECTION_HAND_RIGHT 0.025
|
#define THERMAL_PROTECTION_HAND_RIGHT 0.025
|
||||||
|
|
||||||
/mob/living/carbon/human/Life()
|
/mob/living/carbon/human/Life(delta_time = SSMOBS_DT, times_fired)
|
||||||
if (notransform)
|
if(notransform)
|
||||||
return
|
return
|
||||||
|
|
||||||
. = ..()
|
. = ..()
|
||||||
|
if(QDELETED(src))
|
||||||
if (QDELETED(src))
|
|
||||||
return FALSE
|
return FALSE
|
||||||
|
|
||||||
//Body temperature stability and damage
|
//Body temperature stability and damage
|
||||||
dna.species.handle_body_temperature(src)
|
dna.species.handle_body_temperature(src, delta_time, times_fired)
|
||||||
|
|
||||||
if(!IS_IN_STASIS(src))
|
if(!IS_IN_STASIS(src))
|
||||||
if(.) //not dead
|
if(.) //not dead
|
||||||
|
|
||||||
for(var/datum/mutation/human/HM in dna.mutations) // Handle active genes
|
for(var/datum/mutation/human/HM in dna.mutations) // Handle active genes
|
||||||
HM.on_life()
|
HM.on_life(delta_time, times_fired)
|
||||||
|
|
||||||
if(stat != DEAD)
|
if(stat != DEAD)
|
||||||
//heart attack stuff
|
//heart attack stuff
|
||||||
handle_heart()
|
handle_heart(delta_time, times_fired)
|
||||||
handle_liver()
|
handle_liver(delta_time, times_fired)
|
||||||
|
|
||||||
dna.species.spec_life(src) // for mutantraces
|
dna.species.spec_life(src, delta_time, times_fired) // for mutantraces
|
||||||
else
|
else
|
||||||
for(var/i in all_wounds)
|
for(var/i in all_wounds)
|
||||||
var/datum/wound/iter_wound = i
|
var/datum/wound/iter_wound = i
|
||||||
iter_wound.on_stasis()
|
iter_wound.on_stasis(delta_time, times_fired)
|
||||||
|
|
||||||
//Update our name based on whether our face is obscured/disfigured
|
//Update our name based on whether our face is obscured/disfigured
|
||||||
name = get_visible_name()
|
name = get_visible_name()
|
||||||
@@ -68,15 +67,15 @@
|
|||||||
return pressure
|
return pressure
|
||||||
|
|
||||||
|
|
||||||
/mob/living/carbon/human/handle_traits()
|
/mob/living/carbon/human/handle_traits(delta_time, times_fired)
|
||||||
if (getOrganLoss(ORGAN_SLOT_BRAIN) >= 60)
|
if (getOrganLoss(ORGAN_SLOT_BRAIN) >= 60)
|
||||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "brain_damage", /datum/mood_event/brain_damage)
|
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "brain_damage", /datum/mood_event/brain_damage)
|
||||||
else
|
else
|
||||||
SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "brain_damage")
|
SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "brain_damage")
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/mob/living/carbon/human/handle_mutations_and_radiation()
|
/mob/living/carbon/human/handle_mutations_and_radiation(delta_time, times_fired)
|
||||||
if(!dna || !dna.species.handle_mutations_and_radiation(src))
|
if(!dna || !dna.species.handle_mutations_and_radiation(src, delta_time, times_fired))
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/mob/living/carbon/human/breathe()
|
/mob/living/carbon/human/breathe()
|
||||||
@@ -113,12 +112,12 @@
|
|||||||
lun.check_breath(breath,src)
|
lun.check_breath(breath,src)
|
||||||
|
|
||||||
/// Environment handlers for species
|
/// Environment handlers for species
|
||||||
/mob/living/carbon/human/handle_environment(datum/gas_mixture/environment)
|
/mob/living/carbon/human/handle_environment(datum/gas_mixture/environment, delta_time, times_fired)
|
||||||
// If we are in a cryo bed do not process life functions
|
// If we are in a cryo bed do not process life functions
|
||||||
if(istype(loc, /obj/machinery/atmospherics/components/unary/cryo_cell))
|
if(istype(loc, /obj/machinery/atmospherics/components/unary/cryo_cell))
|
||||||
return
|
return
|
||||||
|
|
||||||
dna.species.handle_environment(environment, src)
|
dna.species.handle_environment(src, environment, delta_time, times_fired)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adjust the core temperature of a mob
|
* Adjust the core temperature of a mob
|
||||||
@@ -146,13 +145,13 @@
|
|||||||
return dna.species.bodytemp_normal + get_body_temp_normal_change()
|
return dna.species.bodytemp_normal + get_body_temp_normal_change()
|
||||||
|
|
||||||
///FIRE CODE
|
///FIRE CODE
|
||||||
/mob/living/carbon/human/handle_fire()
|
/mob/living/carbon/human/handle_fire(delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(.) //if the mob isn't on fire anymore
|
if(.) //if the mob isn't on fire anymore
|
||||||
return
|
return
|
||||||
|
|
||||||
if(dna)
|
if(dna)
|
||||||
. = dna.species.handle_fire(src) //do special handling based on the mob's species. TRUE = they are immune to the effects of the fire.
|
. = dna.species.handle_fire(src, delta_time, times_fired) //do special handling based on the mob's species. TRUE = they are immune to the effects of the fire.
|
||||||
|
|
||||||
if(!last_fire_update)
|
if(!last_fire_update)
|
||||||
last_fire_update = fire_stacks
|
last_fire_update = fire_stacks
|
||||||
@@ -303,14 +302,17 @@
|
|||||||
|
|
||||||
return min(1, thermal_protection)
|
return min(1, thermal_protection)
|
||||||
|
|
||||||
/mob/living/carbon/human/handle_random_events()
|
/mob/living/carbon/human/handle_random_events(delta_time, times_fired)
|
||||||
//Puke if toxloss is too high
|
//Puke if toxloss is too high
|
||||||
if(!stat)
|
if(stat)
|
||||||
if(getToxLoss() >= 45 && nutrition > 20)
|
return
|
||||||
lastpuke += prob(50)
|
if(getToxLoss() < 45 || nutrition <= 20)
|
||||||
if(lastpuke >= 50) // about 25 second delay I guess
|
return
|
||||||
vomit(20)
|
|
||||||
lastpuke = 0
|
lastpuke += DT_PROB(30, delta_time)
|
||||||
|
if(lastpuke >= 50) // about 25 second delay I guess // This is actually closer to 150 seconds
|
||||||
|
vomit(20)
|
||||||
|
lastpuke = 0
|
||||||
|
|
||||||
|
|
||||||
/mob/living/carbon/human/has_smoke_protection()
|
/mob/living/carbon/human/has_smoke_protection()
|
||||||
@@ -326,17 +328,17 @@
|
|||||||
return TRUE
|
return TRUE
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/mob/living/carbon/human/proc/handle_heart()
|
/mob/living/carbon/human/proc/handle_heart(delta_time, times_fired)
|
||||||
var/we_breath = !HAS_TRAIT_FROM(src, TRAIT_NOBREATH, SPECIES_TRAIT)
|
var/we_breath = !HAS_TRAIT_FROM(src, TRAIT_NOBREATH, SPECIES_TRAIT)
|
||||||
|
|
||||||
if(!undergoing_cardiac_arrest())
|
if(!undergoing_cardiac_arrest())
|
||||||
return
|
return
|
||||||
|
|
||||||
if(we_breath)
|
if(we_breath)
|
||||||
adjustOxyLoss(8)
|
adjustOxyLoss(4 * delta_time)
|
||||||
Unconscious(80)
|
Unconscious(80)
|
||||||
// Tissues die without blood circulation
|
// Tissues die without blood circulation
|
||||||
adjustBruteLoss(2)
|
adjustBruteLoss(1 * delta_time)
|
||||||
|
|
||||||
#undef THERMAL_PROTECTION_HEAD
|
#undef THERMAL_PROTECTION_HEAD
|
||||||
#undef THERMAL_PROTECTION_CHEST
|
#undef THERMAL_PROTECTION_CHEST
|
||||||
|
|||||||
@@ -67,7 +67,7 @@
|
|||||||
if(relic_mask)
|
if(relic_mask)
|
||||||
equip_to_slot_or_del(new relic_mask, ITEM_SLOT_MASK)
|
equip_to_slot_or_del(new relic_mask, ITEM_SLOT_MASK)
|
||||||
|
|
||||||
/mob/living/carbon/human/species/monkey/punpun/Life()
|
/mob/living/carbon/human/species/monkey/punpun/Life(delta_time = SSMOBS_DT, times_fired)
|
||||||
if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved)
|
if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved)
|
||||||
Write_Memory(FALSE, FALSE)
|
Write_Memory(FALSE, FALSE)
|
||||||
memory_saved = TRUE
|
memory_saved = TRUE
|
||||||
|
|||||||
@@ -973,14 +973,14 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
|||||||
return "FRONT"
|
return "FRONT"
|
||||||
|
|
||||||
|
|
||||||
/datum/species/proc/spec_life(mob/living/carbon/human/H)
|
/datum/species/proc/spec_life(mob/living/carbon/human/H, delta_time, times_fired)
|
||||||
if(HAS_TRAIT(H, TRAIT_NOBREATH))
|
if(HAS_TRAIT(H, TRAIT_NOBREATH))
|
||||||
H.setOxyLoss(0)
|
H.setOxyLoss(0)
|
||||||
H.losebreath = 0
|
H.losebreath = 0
|
||||||
|
|
||||||
var/takes_crit_damage = (!HAS_TRAIT(H, TRAIT_NOCRITDAMAGE))
|
var/takes_crit_damage = (!HAS_TRAIT(H, TRAIT_NOCRITDAMAGE))
|
||||||
if((H.health < H.crit_threshold) && takes_crit_damage)
|
if((H.health < H.crit_threshold) && takes_crit_damage)
|
||||||
H.adjustBruteLoss(1)
|
H.adjustBruteLoss(0.5 * delta_time)
|
||||||
if(flying_species)
|
if(flying_species)
|
||||||
HandleFlight(H)
|
HandleFlight(H)
|
||||||
|
|
||||||
@@ -1149,7 +1149,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
|||||||
/datum/species/proc/after_equip_job(datum/job/J, mob/living/carbon/human/H)
|
/datum/species/proc/after_equip_job(datum/job/J, mob/living/carbon/human/H)
|
||||||
H.update_mutant_bodyparts()
|
H.update_mutant_bodyparts()
|
||||||
|
|
||||||
/datum/species/proc/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
|
/datum/species/proc/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H, delta_time, times_fired)
|
||||||
if(chem.type == exotic_blood)
|
if(chem.type == exotic_blood)
|
||||||
H.blood_volume = min(H.blood_volume + round(chem.volume, 0.1), BLOOD_VOLUME_MAXIMUM)
|
H.blood_volume = min(H.blood_volume + round(chem.volume, 0.1), BLOOD_VOLUME_MAXIMUM)
|
||||||
H.reagents.del_reagent(chem.type)
|
H.reagents.del_reagent(chem.type)
|
||||||
@@ -1173,20 +1173,20 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
|||||||
////////
|
////////
|
||||||
//LIFE//
|
//LIFE//
|
||||||
////////
|
////////
|
||||||
/datum/species/proc/handle_digestion(mob/living/carbon/human/H)
|
/datum/species/proc/handle_digestion(mob/living/carbon/human/H, delta_time, times_fired)
|
||||||
if(HAS_TRAIT(H, TRAIT_NOHUNGER))
|
if(HAS_TRAIT(H, TRAIT_NOHUNGER))
|
||||||
return //hunger is for BABIES
|
return //hunger is for BABIES
|
||||||
|
|
||||||
//The fucking TRAIT_FAT mutation is the dumbest shit ever. It makes the code so difficult to work with
|
//The fucking TRAIT_FAT mutation is the dumbest shit ever. It makes the code so difficult to work with
|
||||||
if(HAS_TRAIT_FROM(H, TRAIT_FAT, OBESITY))//I share your pain, past coder.
|
if(HAS_TRAIT_FROM(H, TRAIT_FAT, OBESITY))//I share your pain, past coder.
|
||||||
if(H.overeatduration < 100)
|
if(H.overeatduration < (200 SECONDS))
|
||||||
to_chat(H, "<span class='notice'>You feel fit again!</span>")
|
to_chat(H, "<span class='notice'>You feel fit again!</span>")
|
||||||
REMOVE_TRAIT(H, TRAIT_FAT, OBESITY)
|
REMOVE_TRAIT(H, TRAIT_FAT, OBESITY)
|
||||||
H.remove_movespeed_modifier(/datum/movespeed_modifier/obesity)
|
H.remove_movespeed_modifier(/datum/movespeed_modifier/obesity)
|
||||||
H.update_inv_w_uniform()
|
H.update_inv_w_uniform()
|
||||||
H.update_inv_wear_suit()
|
H.update_inv_wear_suit()
|
||||||
else
|
else
|
||||||
if(H.overeatduration >= 100)
|
if(H.overeatduration >= (200 SECONDS))
|
||||||
to_chat(H, "<span class='danger'>You suddenly feel blubbery!</span>")
|
to_chat(H, "<span class='danger'>You suddenly feel blubbery!</span>")
|
||||||
ADD_TRAIT(H, TRAIT_FAT, OBESITY)
|
ADD_TRAIT(H, TRAIT_FAT, OBESITY)
|
||||||
H.add_movespeed_modifier(/datum/movespeed_modifier/obesity)
|
H.add_movespeed_modifier(/datum/movespeed_modifier/obesity)
|
||||||
@@ -1199,7 +1199,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
|||||||
var/hunger_rate = HUNGER_FACTOR
|
var/hunger_rate = HUNGER_FACTOR
|
||||||
var/datum/component/mood/mood = H.GetComponent(/datum/component/mood)
|
var/datum/component/mood/mood = H.GetComponent(/datum/component/mood)
|
||||||
if(mood && mood.sanity > SANITY_DISTURBED)
|
if(mood && mood.sanity > SANITY_DISTURBED)
|
||||||
hunger_rate *= max(0.5, 1 - 0.002 * mood.sanity) //0.85 to 0.75
|
hunger_rate *= max(1 - 0.002 * mood.sanity, 0.5) //0.85 to 0.75
|
||||||
// Whether we cap off our satiety or move it towards 0
|
// Whether we cap off our satiety or move it towards 0
|
||||||
if(H.satiety > MAX_SATIETY)
|
if(H.satiety > MAX_SATIETY)
|
||||||
H.satiety = MAX_SATIETY
|
H.satiety = MAX_SATIETY
|
||||||
@@ -1209,19 +1209,18 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
|||||||
H.satiety = -MAX_SATIETY
|
H.satiety = -MAX_SATIETY
|
||||||
else if(H.satiety < 0)
|
else if(H.satiety < 0)
|
||||||
H.satiety++
|
H.satiety++
|
||||||
if(prob(round(-H.satiety/40)))
|
if(DT_PROB(round(-H.satiety/77), delta_time))
|
||||||
H.Jitter(5)
|
H.Jitter(5)
|
||||||
hunger_rate = 3 * HUNGER_FACTOR
|
hunger_rate = 3 * HUNGER_FACTOR
|
||||||
hunger_rate *= H.physiology.hunger_mod
|
hunger_rate *= H.physiology.hunger_mod
|
||||||
H.adjust_nutrition(-hunger_rate)
|
H.adjust_nutrition(-hunger_rate * delta_time)
|
||||||
|
|
||||||
|
if(H.nutrition > NUTRITION_LEVEL_FULL)
|
||||||
if (H.nutrition > NUTRITION_LEVEL_FULL)
|
if(H.overeatduration < 20 MINUTES) //capped so people don't take forever to unfat
|
||||||
if(H.overeatduration < 600) //capped so people don't take forever to unfat
|
H.overeatduration = min(H.overeatduration + (1 SECONDS * delta_time), 20 MINUTES)
|
||||||
H.overeatduration++
|
|
||||||
else
|
else
|
||||||
if(H.overeatduration > 1)
|
if(H.overeatduration > 0)
|
||||||
H.overeatduration -= 2 //doubled the unfat rate
|
H.overeatduration = max(H.overeatduration - (2 SECONDS * delta_time), 0) //doubled the unfat rate
|
||||||
|
|
||||||
//metabolism change
|
//metabolism change
|
||||||
if(H.nutrition > NUTRITION_LEVEL_FAT)
|
if(H.nutrition > NUTRITION_LEVEL_FAT)
|
||||||
@@ -1265,41 +1264,53 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
|||||||
/datum/species/proc/update_health_hud(mob/living/carbon/human/H)
|
/datum/species/proc/update_health_hud(mob/living/carbon/human/H)
|
||||||
return FALSE
|
return FALSE
|
||||||
|
|
||||||
/datum/species/proc/handle_mutations_and_radiation(mob/living/carbon/human/H)
|
/**
|
||||||
if(HAS_TRAIT(H, TRAIT_RADIMMUNE))
|
* Species based handling for irradiation
|
||||||
H.radiation = 0
|
*
|
||||||
|
* Arguments:
|
||||||
|
* - [source][/mob/living/carbon/human]: The mob requesting handling
|
||||||
|
* - delta_time: The amount of time that has passed since the last tick
|
||||||
|
* - times_fired: The number of times SSmobs has fired
|
||||||
|
*/
|
||||||
|
/datum/species/proc/handle_mutations_and_radiation(mob/living/carbon/human/source, delta_time, times_fired)
|
||||||
|
if(HAS_TRAIT(source, TRAIT_RADIMMUNE))
|
||||||
|
source.radiation = 0
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
. = FALSE
|
. = FALSE
|
||||||
var/radiation = H.radiation
|
var/radiation = source.radiation
|
||||||
|
if(radiation > RAD_MOB_KNOCKDOWN && DT_PROB(RAD_MOB_KNOCKDOWN_PROB, delta_time))
|
||||||
|
if(!source.IsParalyzed())
|
||||||
|
source.emote("collapse")
|
||||||
|
source.Paralyze(RAD_MOB_KNOCKDOWN_AMOUNT)
|
||||||
|
to_chat(source, "<span class='danger'>You feel weak.</span>")
|
||||||
|
|
||||||
if(radiation > RAD_MOB_KNOCKDOWN && prob(RAD_MOB_KNOCKDOWN_PROB))
|
if(radiation > RAD_MOB_VOMIT && DT_PROB(RAD_MOB_VOMIT_PROB, delta_time))
|
||||||
if(!H.IsParalyzed())
|
source.vomit(10, TRUE)
|
||||||
H.emote("collapse")
|
|
||||||
H.Paralyze(RAD_MOB_KNOCKDOWN_AMOUNT)
|
|
||||||
to_chat(H, "<span class='danger'>You feel weak.</span>")
|
|
||||||
|
|
||||||
if(radiation > RAD_MOB_VOMIT && prob(RAD_MOB_VOMIT_PROB))
|
if(radiation > RAD_MOB_MUTATE && DT_PROB(RAD_MOB_MUTATE_PROB, delta_time))
|
||||||
H.vomit(10, TRUE)
|
to_chat(source, "<span class='danger'>You mutate!</span>")
|
||||||
|
source.easy_randmut(NEGATIVE + MINOR_NEGATIVE)
|
||||||
|
source.emote("gasp")
|
||||||
|
source.domutcheck()
|
||||||
|
|
||||||
if(radiation > RAD_MOB_MUTATE)
|
if(radiation > RAD_MOB_HAIRLOSS && DT_PROB(RAD_MOB_HAIRLOSS_PROB, delta_time))
|
||||||
if(prob(1))
|
if(!(source.hairstyle == "Bald") && (HAIR in species_traits))
|
||||||
to_chat(H, "<span class='danger'>You mutate!</span>")
|
to_chat(source, "<span class='danger'>Your hair starts to fall out in clumps...</span>")
|
||||||
H.easy_randmut(NEGATIVE+MINOR_NEGATIVE)
|
addtimer(CALLBACK(src, .proc/go_bald, source), 5 SECONDS)
|
||||||
H.emote("gasp")
|
|
||||||
H.domutcheck()
|
|
||||||
|
|
||||||
if(radiation > RAD_MOB_HAIRLOSS)
|
/**
|
||||||
if(prob(15) && !(H.hairstyle == "Bald") && (HAIR in species_traits))
|
* Makes the target human bald.
|
||||||
to_chat(H, "<span class='danger'>Your hair starts to fall out in clumps...</span>")
|
*
|
||||||
addtimer(CALLBACK(src, .proc/go_bald, H), 50)
|
* Arguments:
|
||||||
|
* - [target][/mob/living/carbon/human]: The mob to make go bald.
|
||||||
/datum/species/proc/go_bald(mob/living/carbon/human/H)
|
*/
|
||||||
if(QDELETED(H)) //may be called from a timer
|
/datum/species/proc/go_bald(mob/living/carbon/human/target)
|
||||||
|
if(QDELETED(target)) //may be called from a timer
|
||||||
return
|
return
|
||||||
H.facial_hairstyle = "Shaved"
|
target.facial_hairstyle = "Shaved"
|
||||||
H.hairstyle = "Bald"
|
target.hairstyle = "Bald"
|
||||||
H.update_hair()
|
target.update_hair()
|
||||||
|
|
||||||
//////////////////
|
//////////////////
|
||||||
// ATTACK PROCS //
|
// ATTACK PROCS //
|
||||||
@@ -1677,8 +1688,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
|||||||
* * environment (required) The environment gas mix
|
* * environment (required) The environment gas mix
|
||||||
* * humi (required)(type: /mob/living/carbon/human) The mob we will target
|
* * humi (required)(type: /mob/living/carbon/human) The mob we will target
|
||||||
*/
|
*/
|
||||||
/datum/species/proc/handle_environment(datum/gas_mixture/environment, mob/living/carbon/human/humi)
|
/datum/species/proc/handle_environment(mob/living/carbon/human/humi, datum/gas_mixture/environment, delta_time, times_fired)
|
||||||
handle_environment_pressure(environment, humi)
|
handle_environment_pressure(humi, environment, delta_time, times_fired)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Body temperature handler for species
|
* Body temperature handler for species
|
||||||
@@ -1688,18 +1699,22 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
|||||||
* vars:
|
* vars:
|
||||||
* * humi (required)(type: /mob/living/carbon/human) The mob we will target
|
* * humi (required)(type: /mob/living/carbon/human) The mob we will target
|
||||||
*/
|
*/
|
||||||
/datum/species/proc/handle_body_temperature(mob/living/carbon/human/humi)
|
/datum/species/proc/handle_body_temperature(mob/living/carbon/human/humi, delta_time, times_fired)
|
||||||
//when in a cryo unit we suspend all natural body regulation
|
//when in a cryo unit we suspend all natural body regulation
|
||||||
if(istype(humi.loc, /obj/machinery/atmospherics/components/unary/cryo_cell))
|
if(istype(humi.loc, /obj/machinery/atmospherics/components/unary/cryo_cell))
|
||||||
return
|
return
|
||||||
//when dead the air still effects your skin temp
|
|
||||||
if(humi.stat == DEAD || IS_IN_STASIS(humi))
|
//Only stabilise core temp when alive and not in statis
|
||||||
body_temperature_skin(humi)
|
if(humi.stat < DEAD && !IS_IN_STASIS(humi))
|
||||||
else //when alive do all the things
|
body_temperature_core(humi, delta_time, times_fired)
|
||||||
body_temperature_core(humi)
|
|
||||||
body_temperature_skin(humi)
|
//These do run in statis
|
||||||
body_temperature_alerts(humi)
|
body_temperature_skin(humi, delta_time, times_fired)
|
||||||
body_temperature_damage(humi)
|
body_temperature_alerts(humi, delta_time, times_fired)
|
||||||
|
|
||||||
|
//Do not cause more damage in statis
|
||||||
|
if(!IS_IN_STASIS(humi))
|
||||||
|
body_temperature_damage(humi, delta_time, times_fired)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to stabilize the core temperature back to normal on living mobs
|
* Used to stabilize the core temperature back to normal on living mobs
|
||||||
@@ -1708,8 +1723,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
|||||||
* vars:
|
* vars:
|
||||||
* * humi (required) The mob we will stabilize
|
* * humi (required) The mob we will stabilize
|
||||||
*/
|
*/
|
||||||
/datum/species/proc/body_temperature_core(mob/living/carbon/human/humi)
|
/datum/species/proc/body_temperature_core(mob/living/carbon/human/humi, delta_time, times_fired)
|
||||||
var/natural_change = get_temp_change_amount(humi.get_body_temp_normal() - humi.coretemperature, 0.12)
|
var/natural_change = get_temp_change_amount(humi.get_body_temp_normal() - humi.coretemperature, 0.06 * delta_time)
|
||||||
humi.adjust_coretemperature(humi.metabolism_efficiency * natural_change)
|
humi.adjust_coretemperature(humi.metabolism_efficiency * natural_change)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1719,13 +1734,15 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
|||||||
* This happens even when dead so bodies revert to room temp over time.
|
* This happens even when dead so bodies revert to room temp over time.
|
||||||
* vars:
|
* vars:
|
||||||
* * humi (required) The mob we will targeting
|
* * humi (required) The mob we will targeting
|
||||||
|
* - delta_time: The amount of time that is considered as elapsing
|
||||||
|
* - times_fired: The number of times SSmobs has fired
|
||||||
*/
|
*/
|
||||||
/datum/species/proc/body_temperature_skin(mob/living/carbon/human/humi)
|
/datum/species/proc/body_temperature_skin(mob/living/carbon/human/humi, delta_time, times_fired)
|
||||||
|
|
||||||
// change the core based on the skin temp
|
// change the core based on the skin temp
|
||||||
var/skin_core_diff = humi.bodytemperature - humi.coretemperature
|
var/skin_core_diff = humi.bodytemperature - humi.coretemperature
|
||||||
// change rate of 0.08 to be slightly below area to skin change rate and still have a solid curve
|
// change rate of 0.04 per second to be slightly below area to skin change rate and still have a solid curve
|
||||||
var/skin_core_change = get_temp_change_amount(skin_core_diff, 0.08)
|
var/skin_core_change = get_temp_change_amount(skin_core_diff, 0.04 * delta_time)
|
||||||
|
|
||||||
humi.adjust_coretemperature(skin_core_change)
|
humi.adjust_coretemperature(skin_core_change)
|
||||||
|
|
||||||
@@ -1743,8 +1760,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
|||||||
// Changes to the skin temperature based on the area
|
// Changes to the skin temperature based on the area
|
||||||
var/area_skin_diff = area_temp - humi.bodytemperature
|
var/area_skin_diff = area_temp - humi.bodytemperature
|
||||||
if(!humi.on_fire || area_skin_diff > 0)
|
if(!humi.on_fire || area_skin_diff > 0)
|
||||||
// change rate of 0.1 as area temp has large impact on the surface
|
// change rate of 0.05 as area temp has large impact on the surface
|
||||||
var/area_skin_change = get_temp_change_amount(area_skin_diff, 0.1)
|
var/area_skin_change = get_temp_change_amount(area_skin_diff, 0.05 * delta_time)
|
||||||
|
|
||||||
// We need to apply the thermal protection of the clothing when applying area to surface change
|
// We need to apply the thermal protection of the clothing when applying area to surface change
|
||||||
// If the core bodytemp goes over the normal body temp you are overheating and becom sweaty
|
// If the core bodytemp goes over the normal body temp you are overheating and becom sweaty
|
||||||
@@ -1762,8 +1779,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
|||||||
if(!humi.on_fire)
|
if(!humi.on_fire)
|
||||||
// Get the changes to the skin from the core temp
|
// Get the changes to the skin from the core temp
|
||||||
var/core_skin_diff = humi.coretemperature - humi.bodytemperature
|
var/core_skin_diff = humi.coretemperature - humi.bodytemperature
|
||||||
// change rate of 0.09 to reflect temp back to the skin at the slight higher rate then core to skin
|
// change rate of 0.045 to reflect temp back to the skin at the slight higher rate then core to skin
|
||||||
var/core_skin_change = (1 + thermal_protection) * get_temp_change_amount(core_skin_diff, 0.09)
|
var/core_skin_change = (1 + thermal_protection) * get_temp_change_amount(core_skin_diff, 0.045 * delta_time)
|
||||||
|
|
||||||
// We do not want to over shoot after using protection
|
// We do not want to over shoot after using protection
|
||||||
if(core_skin_diff > 0)
|
if(core_skin_diff > 0)
|
||||||
@@ -1825,17 +1842,17 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
|||||||
* vars:
|
* vars:
|
||||||
* * humi (required) The mob we will targeting
|
* * humi (required) The mob we will targeting
|
||||||
*/
|
*/
|
||||||
/datum/species/proc/body_temperature_damage(mob/living/carbon/human/humi)
|
/datum/species/proc/body_temperature_damage(mob/living/carbon/human/humi, delta_time, times_fired)
|
||||||
|
|
||||||
//If the body temp is above the wound limit start adding exposure stacks
|
//If the body temp is above the wound limit start adding exposure stacks
|
||||||
if(humi.bodytemperature > BODYTEMP_HEAT_WOUND_LIMIT)
|
if(humi.bodytemperature > BODYTEMP_HEAT_WOUND_LIMIT)
|
||||||
humi.heat_exposure_stacks = min(humi.heat_exposure_stacks + 1, 40)
|
humi.heat_exposure_stacks = min(humi.heat_exposure_stacks + (0.5 * delta_time), 40)
|
||||||
else //When below the wound limit, reduce the exposure stacks fast.
|
else //When below the wound limit, reduce the exposure stacks fast.
|
||||||
humi.heat_exposure_stacks = max(humi.heat_exposure_stacks - 4, 0)
|
humi.heat_exposure_stacks = max(humi.heat_exposure_stacks - (2 * delta_time), 0)
|
||||||
|
|
||||||
//when exposure stacks are greater then 10 + rand20 try to apply wounds and reset stacks
|
//when exposure stacks are greater then 10 + rand20 try to apply wounds and reset stacks
|
||||||
if(humi.heat_exposure_stacks > (10 + rand(0, 20)))
|
if(humi.heat_exposure_stacks > (10 + rand(0, 20)))
|
||||||
apply_burn_wounds(humi)
|
apply_burn_wounds(humi, delta_time, times_fired)
|
||||||
humi.heat_exposure_stacks = 0
|
humi.heat_exposure_stacks = 0
|
||||||
|
|
||||||
// Body temperature is too hot, and we do not have resist traits
|
// Body temperature is too hot, and we do not have resist traits
|
||||||
@@ -1846,10 +1863,10 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
|||||||
firemodifier = min(firemodifier, 0)
|
firemodifier = min(firemodifier, 0)
|
||||||
|
|
||||||
// this can go below 5 at log 2.5
|
// this can go below 5 at log 2.5
|
||||||
var/burn_damage = max(log(2 - firemodifier, (humi.coretemperature - humi.get_body_temp_normal(apply_change=FALSE))) - 5,0)
|
var/burn_damage = max(log(2 - firemodifier, (humi.coretemperature - humi.get_body_temp_normal(apply_change=FALSE))) - 5, 0)
|
||||||
|
|
||||||
// Apply species and physiology modifiers to heat damage
|
// Apply species and physiology modifiers to heat damage
|
||||||
burn_damage = burn_damage * heatmod * humi.physiology.heat_mod
|
burn_damage = burn_damage * heatmod * humi.physiology.heat_mod * 0.5 * delta_time
|
||||||
|
|
||||||
// 40% for level 3 damage on humans to scream in pain
|
// 40% for level 3 damage on humans to scream in pain
|
||||||
if (humi.stat < UNCONSCIOUS && (prob(burn_damage) * 10) / 4)
|
if (humi.stat < UNCONSCIOUS && (prob(burn_damage) * 10) / 4)
|
||||||
@@ -1864,15 +1881,15 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
|||||||
var/cold_damage_limit = bodytemp_cold_damage_limit + (is_hulk ? BODYTEMP_HULK_COLD_DAMAGE_LIMIT_MODIFIER : 0)
|
var/cold_damage_limit = bodytemp_cold_damage_limit + (is_hulk ? BODYTEMP_HULK_COLD_DAMAGE_LIMIT_MODIFIER : 0)
|
||||||
|
|
||||||
if(humi.coretemperature < cold_damage_limit && !HAS_TRAIT(humi, TRAIT_RESISTCOLD))
|
if(humi.coretemperature < cold_damage_limit && !HAS_TRAIT(humi, TRAIT_RESISTCOLD))
|
||||||
var/damage_type = is_hulk ? BRUTE : BURN
|
var/damage_type = is_hulk ? BRUTE : BURN // Why?
|
||||||
var/damage_mod = coldmod * humi.physiology.cold_mod * (is_hulk ? HULK_COLD_DAMAGE_MOD : 1)
|
var/damage_mod = coldmod * humi.physiology.cold_mod * (is_hulk ? HULK_COLD_DAMAGE_MOD : 1)
|
||||||
switch(humi.coretemperature)
|
switch(humi.coretemperature)
|
||||||
if(201 to cold_damage_limit)
|
if(201 to cold_damage_limit)
|
||||||
humi.apply_damage(COLD_DAMAGE_LEVEL_1 * damage_mod, damage_type)
|
humi.apply_damage(COLD_DAMAGE_LEVEL_1 * damage_mod * delta_time, damage_type)
|
||||||
if(120 to 200)
|
if(120 to 200)
|
||||||
humi.apply_damage(COLD_DAMAGE_LEVEL_2 * damage_mod, damage_type)
|
humi.apply_damage(COLD_DAMAGE_LEVEL_2 * damage_mod * delta_time, damage_type)
|
||||||
else
|
else
|
||||||
humi.apply_damage(COLD_DAMAGE_LEVEL_3 * damage_mod, damage_type)
|
humi.apply_damage(COLD_DAMAGE_LEVEL_3 * damage_mod * delta_time, damage_type)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to apply burn wounds on random limbs
|
* Used to apply burn wounds on random limbs
|
||||||
@@ -1882,7 +1899,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
|||||||
* vars:
|
* vars:
|
||||||
* * humi (required) The mob we will targeting
|
* * humi (required) The mob we will targeting
|
||||||
*/
|
*/
|
||||||
/datum/species/proc/apply_burn_wounds(mob/living/carbon/human/humi)
|
/datum/species/proc/apply_burn_wounds(mob/living/carbon/human/humi, delta_time, times_fired)
|
||||||
// If we are resistant to heat exit
|
// If we are resistant to heat exit
|
||||||
if(HAS_TRAIT(humi, TRAIT_RESISTHEAT))
|
if(HAS_TRAIT(humi, TRAIT_RESISTHEAT))
|
||||||
return
|
return
|
||||||
@@ -1914,21 +1931,19 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
|||||||
if(humi.bodytemperature > BODYTEMP_HEAT_WOUND_LIMIT + 2800)
|
if(humi.bodytemperature > BODYTEMP_HEAT_WOUND_LIMIT + 2800)
|
||||||
burn_damage = HEAT_DAMAGE_LEVEL_3
|
burn_damage = HEAT_DAMAGE_LEVEL_3
|
||||||
|
|
||||||
humi.apply_damage(burn_damage, BURN, bodypart)
|
humi.apply_damage(burn_damage * delta_time, BURN, bodypart)
|
||||||
|
|
||||||
/// Handle the air pressure of the environment
|
/// Handle the air pressure of the environment
|
||||||
/datum/species/proc/handle_environment_pressure(datum/gas_mixture/environment, mob/living/carbon/human/H)
|
/datum/species/proc/handle_environment_pressure(mob/living/carbon/human/H, datum/gas_mixture/environment, delta_time, times_fired)
|
||||||
var/pressure = environment.return_pressure()
|
var/pressure = environment.return_pressure()
|
||||||
var/adjusted_pressure = H.calculate_affecting_pressure(pressure)
|
var/adjusted_pressure = H.calculate_affecting_pressure(pressure)
|
||||||
|
|
||||||
// Set alerts and apply damage based on the amount of pressure
|
// Set alerts and apply damage based on the amount of pressure
|
||||||
switch(adjusted_pressure)
|
switch(adjusted_pressure)
|
||||||
|
|
||||||
// Very high pressure, show an alert and take damage
|
// Very high pressure, show an alert and take damage
|
||||||
if(HAZARD_HIGH_PRESSURE to INFINITY)
|
if(HAZARD_HIGH_PRESSURE to INFINITY)
|
||||||
if(!HAS_TRAIT(H, TRAIT_RESISTHIGHPRESSURE))
|
if(!HAS_TRAIT(H, TRAIT_RESISTHIGHPRESSURE))
|
||||||
H.adjustBruteLoss(min(((adjusted_pressure / HAZARD_HIGH_PRESSURE) -1 ) * \
|
H.adjustBruteLoss(min(((adjusted_pressure / HAZARD_HIGH_PRESSURE) - 1) * PRESSURE_DAMAGE_COEFFICIENT, MAX_HIGH_PRESSURE_DAMAGE) * H.physiology.pressure_mod * delta_time)
|
||||||
PRESSURE_DAMAGE_COEFFICIENT, MAX_HIGH_PRESSURE_DAMAGE) * H.physiology.pressure_mod)
|
|
||||||
H.throw_alert("pressure", /atom/movable/screen/alert/highpressure, 2)
|
H.throw_alert("pressure", /atom/movable/screen/alert/highpressure, 2)
|
||||||
else
|
else
|
||||||
H.clear_alert("pressure")
|
H.clear_alert("pressure")
|
||||||
@@ -1955,7 +1970,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
|||||||
if(HAS_TRAIT(H, TRAIT_RESISTLOWPRESSURE))
|
if(HAS_TRAIT(H, TRAIT_RESISTLOWPRESSURE))
|
||||||
H.clear_alert("pressure")
|
H.clear_alert("pressure")
|
||||||
else
|
else
|
||||||
H.adjustBruteLoss(LOW_PRESSURE_DAMAGE * H.physiology.pressure_mod)
|
H.adjustBruteLoss(LOW_PRESSURE_DAMAGE * H.physiology.pressure_mod * delta_time)
|
||||||
H.throw_alert("pressure", /atom/movable/screen/alert/lowpressure, 2)
|
H.throw_alert("pressure", /atom/movable/screen/alert/lowpressure, 2)
|
||||||
|
|
||||||
|
|
||||||
@@ -1963,7 +1978,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
|||||||
// FIRE //
|
// FIRE //
|
||||||
//////////
|
//////////
|
||||||
|
|
||||||
/datum/species/proc/handle_fire(mob/living/carbon/human/H, no_protection = FALSE)
|
/datum/species/proc/handle_fire(mob/living/carbon/human/H, delta_time, times_fired, no_protection = FALSE)
|
||||||
if(!CanIgniteMob(H))
|
if(!CanIgniteMob(H))
|
||||||
return TRUE
|
return TRUE
|
||||||
if(H.on_fire)
|
if(H.on_fire)
|
||||||
@@ -2020,9 +2035,9 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
|||||||
if(thermal_protection >= FIRE_IMMUNITY_MAX_TEMP_PROTECT && !no_protection)
|
if(thermal_protection >= FIRE_IMMUNITY_MAX_TEMP_PROTECT && !no_protection)
|
||||||
return
|
return
|
||||||
if(thermal_protection >= FIRE_SUIT_MAX_TEMP_PROTECT && !no_protection)
|
if(thermal_protection >= FIRE_SUIT_MAX_TEMP_PROTECT && !no_protection)
|
||||||
H.adjust_bodytemperature(11)
|
H.adjust_bodytemperature(5.5 * delta_time)
|
||||||
else
|
else
|
||||||
H.adjust_bodytemperature(BODYTEMP_HEATING_MAX + (H.fire_stacks * 12))
|
H.adjust_bodytemperature((BODYTEMP_HEATING_MAX + (H.fire_stacks * 12)) * 0.5 * delta_time)
|
||||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire)
|
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire)
|
||||||
|
|
||||||
/datum/species/proc/CanIgniteMob(mob/living/carbon/human/H)
|
/datum/species/proc/CanIgniteMob(mob/living/carbon/human/H)
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
H.regenerate_limb(BODY_ZONE_HEAD,FALSE)
|
H.regenerate_limb(BODY_ZONE_HEAD,FALSE)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/datum/species/dullahan/spec_life(mob/living/carbon/human/H)
|
/datum/species/dullahan/spec_life(mob/living/carbon/human/H, delta_time, times_fired)
|
||||||
if(QDELETED(myhead))
|
if(QDELETED(myhead))
|
||||||
myhead = null
|
myhead = null
|
||||||
H.gib()
|
H.gib()
|
||||||
|
|||||||
@@ -121,9 +121,9 @@
|
|||||||
source.emp_act(EMP_LIGHT)
|
source.emp_act(EMP_LIGHT)
|
||||||
return COMPONENT_BLOCK_LIGHT_EATER
|
return COMPONENT_BLOCK_LIGHT_EATER
|
||||||
|
|
||||||
/datum/species/ethereal/spec_life(mob/living/carbon/human/H)
|
/datum/species/ethereal/spec_life(mob/living/carbon/human/H, delta_time, times_fired)
|
||||||
.=..()
|
.=..()
|
||||||
handle_charge(H)
|
handle_charge(H, delta_time, times_fired)
|
||||||
|
|
||||||
|
|
||||||
/datum/species/ethereal/proc/stop_emp(mob/living/carbon/human/H)
|
/datum/species/ethereal/proc/stop_emp(mob/living/carbon/human/H)
|
||||||
@@ -144,7 +144,7 @@
|
|||||||
spec_updatehealth(H)
|
spec_updatehealth(H)
|
||||||
H.visible_message("<span class='danger'>[H] stops flickering and goes back to their normal state!</span>")
|
H.visible_message("<span class='danger'>[H] stops flickering and goes back to their normal state!</span>")
|
||||||
|
|
||||||
/datum/species/ethereal/proc/handle_charge(mob/living/carbon/human/H)
|
/datum/species/ethereal/proc/handle_charge(mob/living/carbon/human/H, delta_time, times_fired)
|
||||||
switch(get_charge(H))
|
switch(get_charge(H))
|
||||||
if(-INFINITY to ETHEREAL_CHARGE_NONE)
|
if(-INFINITY to ETHEREAL_CHARGE_NONE)
|
||||||
H.throw_alert("ethereal_charge", /atom/movable/screen/alert/etherealcharge, 3)
|
H.throw_alert("ethereal_charge", /atom/movable/screen/alert/etherealcharge, 3)
|
||||||
@@ -153,7 +153,7 @@
|
|||||||
if(ETHEREAL_CHARGE_NONE to ETHEREAL_CHARGE_LOWPOWER)
|
if(ETHEREAL_CHARGE_NONE to ETHEREAL_CHARGE_LOWPOWER)
|
||||||
H.throw_alert("ethereal_charge", /atom/movable/screen/alert/etherealcharge, 2)
|
H.throw_alert("ethereal_charge", /atom/movable/screen/alert/etherealcharge, 2)
|
||||||
if(H.health > 10.5)
|
if(H.health > 10.5)
|
||||||
apply_damage(0.65, TOX, null, null, H)
|
apply_damage(0.325 * delta_time, TOX, null, null, H)
|
||||||
if(ETHEREAL_CHARGE_LOWPOWER to ETHEREAL_CHARGE_NORMAL)
|
if(ETHEREAL_CHARGE_LOWPOWER to ETHEREAL_CHARGE_NORMAL)
|
||||||
H.throw_alert("ethereal_charge", /atom/movable/screen/alert/etherealcharge, 1)
|
H.throw_alert("ethereal_charge", /atom/movable/screen/alert/etherealcharge, 1)
|
||||||
if(ETHEREAL_CHARGE_FULL to ETHEREAL_CHARGE_OVERLOAD)
|
if(ETHEREAL_CHARGE_FULL to ETHEREAL_CHARGE_OVERLOAD)
|
||||||
@@ -161,8 +161,8 @@
|
|||||||
apply_damage(0.2, TOX, null, null, H)
|
apply_damage(0.2, TOX, null, null, H)
|
||||||
if(ETHEREAL_CHARGE_OVERLOAD to ETHEREAL_CHARGE_DANGEROUS)
|
if(ETHEREAL_CHARGE_OVERLOAD to ETHEREAL_CHARGE_DANGEROUS)
|
||||||
H.throw_alert("ethereal_overcharge", /atom/movable/screen/alert/ethereal_overcharge, 2)
|
H.throw_alert("ethereal_overcharge", /atom/movable/screen/alert/ethereal_overcharge, 2)
|
||||||
apply_damage(0.65, TOX, null, null, H)
|
apply_damage(0.325 * delta_time, TOX, null, null, H)
|
||||||
if(prob(10)) //10% each tick for ethereals to explosively release excess energy if it reaches dangerous levels
|
if(DT_PROB(5, delta_time)) // 5% each seacond for ethereals to explosively release excess energy if it reaches dangerous levels
|
||||||
discharge_process(H)
|
discharge_process(H)
|
||||||
else
|
else
|
||||||
H.clear_alert("ethereal_charge")
|
H.clear_alert("ethereal_charge")
|
||||||
|
|||||||
@@ -21,10 +21,10 @@
|
|||||||
mutantappendix = /obj/item/organ/appendix/fly
|
mutantappendix = /obj/item/organ/appendix/fly
|
||||||
mutant_organs = list(/obj/item/organ/fly, /obj/item/organ/fly/groin)
|
mutant_organs = list(/obj/item/organ/fly, /obj/item/organ/fly/groin)
|
||||||
|
|
||||||
/datum/species/fly/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
|
/datum/species/fly/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H, delta_time, times_fired)
|
||||||
if(chem.type == /datum/reagent/toxin/pestkiller)
|
if(chem.type == /datum/reagent/toxin/pestkiller)
|
||||||
H.adjustToxLoss(3)
|
H.adjustToxLoss(3 * REAGENTS_EFFECT_MULTIPLIER * delta_time)
|
||||||
H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM)
|
H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM * delta_time)
|
||||||
return TRUE
|
return TRUE
|
||||||
..()
|
..()
|
||||||
|
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
name = odd_organ_name()
|
name = odd_organ_name()
|
||||||
icon_state = pick("brain-x-d", "liver-x", "kidneys-x", "stomach-x", "lungs-x", "random_fly_1", "random_fly_2", "random_fly_3", "random_fly_4", "random_fly_5")
|
icon_state = pick("brain-x-d", "liver-x", "kidneys-x", "stomach-x", "lungs-x", "random_fly_1", "random_fly_2", "random_fly_3", "random_fly_4", "random_fly_5")
|
||||||
|
|
||||||
/obj/item/organ/stomach/fly/on_life()
|
/obj/item/organ/stomach/fly/on_life(delta_time, times_fired)
|
||||||
if(locate(/datum/reagent/consumable) in reagents.reagent_list)
|
if(locate(/datum/reagent/consumable) in reagents.reagent_list)
|
||||||
var/mob/living/carbon/body = owner
|
var/mob/living/carbon/body = owner
|
||||||
// we do not loss any nutrition as a fly when vomiting out food
|
// we do not loss any nutrition as a fly when vomiting out food
|
||||||
|
|||||||
@@ -96,7 +96,7 @@
|
|||||||
var/boom_warning = FALSE
|
var/boom_warning = FALSE
|
||||||
var/datum/action/innate/ignite/ignite
|
var/datum/action/innate/ignite/ignite
|
||||||
|
|
||||||
/datum/species/golem/plasma/spec_life(mob/living/carbon/human/H)
|
/datum/species/golem/plasma/spec_life(mob/living/carbon/human/H, delta_time, times_fired)
|
||||||
if(H.bodytemperature > 750)
|
if(H.bodytemperature > 750)
|
||||||
if(!boom_warning && H.on_fire)
|
if(!boom_warning && H.on_fire)
|
||||||
to_chat(H, "<span class='userdanger'>You feel like you could blow up at any moment!</span>")
|
to_chat(H, "<span class='userdanger'>You feel like you could blow up at any moment!</span>")
|
||||||
@@ -107,11 +107,11 @@
|
|||||||
boom_warning = FALSE
|
boom_warning = FALSE
|
||||||
|
|
||||||
if(H.bodytemperature > 850 && H.on_fire && prob(25))
|
if(H.bodytemperature > 850 && H.on_fire && prob(25))
|
||||||
explosion(get_turf(H),1,2,4,flame_range = 5)
|
explosion(get_turf(H), 1, 2, 4, flame_range = 5)
|
||||||
if(H)
|
if(H)
|
||||||
H.gib()
|
H.gib()
|
||||||
if(H.fire_stacks < 2) //flammable
|
if(H.fire_stacks < 2) //flammable
|
||||||
H.adjust_fire_stacks(1)
|
H.adjust_fire_stacks(0.5 * delta_time)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/datum/species/golem/plasma/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
/datum/species/golem/plasma/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||||
@@ -263,12 +263,12 @@
|
|||||||
special_names = list("Outsider", "Technology", "Watcher", "Stranger") //ominous and unknown
|
special_names = list("Outsider", "Technology", "Watcher", "Stranger") //ominous and unknown
|
||||||
|
|
||||||
//Regenerates because self-repairing super-advanced alien tech
|
//Regenerates because self-repairing super-advanced alien tech
|
||||||
/datum/species/golem/alloy/spec_life(mob/living/carbon/human/H)
|
/datum/species/golem/alloy/spec_life(mob/living/carbon/human/H, delta_time, times_fired)
|
||||||
if(H.stat == DEAD)
|
if(H.stat == DEAD)
|
||||||
return
|
return
|
||||||
H.heal_overall_damage(2,2, 0, BODYPART_ORGANIC)
|
H.heal_overall_damage(1 * delta_time, 1 * delta_time, 0, BODYPART_ORGANIC)
|
||||||
H.adjustToxLoss(-2)
|
H.adjustToxLoss(-1 * delta_time)
|
||||||
H.adjustOxyLoss(-2)
|
H.adjustOxyLoss(-1 * delta_time)
|
||||||
|
|
||||||
//Since this will usually be created from a collaboration between podpeople and free golems, wood golems are a mix between the two races
|
//Since this will usually be created from a collaboration between podpeople and free golems, wood golems are a mix between the two races
|
||||||
/datum/species/golem/wood
|
/datum/species/golem/wood
|
||||||
@@ -288,29 +288,29 @@
|
|||||||
special_name_chance = 100
|
special_name_chance = 100
|
||||||
inherent_factions = list("plants", "vines")
|
inherent_factions = list("plants", "vines")
|
||||||
|
|
||||||
/datum/species/golem/wood/spec_life(mob/living/carbon/human/H)
|
/datum/species/golem/wood/spec_life(mob/living/carbon/human/H, delta_time, times_fired)
|
||||||
if(H.stat == DEAD)
|
if(H.stat == DEAD)
|
||||||
return
|
return
|
||||||
var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
|
var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
|
||||||
if(isturf(H.loc)) //else, there's considered to be no light
|
if(isturf(H.loc)) //else, there's considered to be no light
|
||||||
var/turf/T = H.loc
|
var/turf/T = H.loc
|
||||||
light_amount = min(1,T.get_lumcount()) - 0.5
|
light_amount = min(1, T.get_lumcount()) - 0.5
|
||||||
H.adjust_nutrition(light_amount * 10)
|
H.adjust_nutrition(5 * light_amount * delta_time)
|
||||||
if(H.nutrition > NUTRITION_LEVEL_ALMOST_FULL)
|
if(H.nutrition > NUTRITION_LEVEL_ALMOST_FULL)
|
||||||
H.set_nutrition(NUTRITION_LEVEL_ALMOST_FULL)
|
H.set_nutrition(NUTRITION_LEVEL_ALMOST_FULL)
|
||||||
if(light_amount > 0.2) //if there's enough light, heal
|
if(light_amount > 0.2) //if there's enough light, heal
|
||||||
H.heal_overall_damage(1,1,0, BODYPART_ORGANIC)
|
H.heal_overall_damage(0.5 * delta_time, 0.5 * delta_time, 0, BODYPART_ORGANIC)
|
||||||
H.adjustToxLoss(-1)
|
H.adjustToxLoss(-0.5 * delta_time)
|
||||||
H.adjustOxyLoss(-1)
|
H.adjustOxyLoss(-0.5 * delta_time)
|
||||||
|
|
||||||
if(H.nutrition < NUTRITION_LEVEL_STARVING + 50)
|
if(H.nutrition < NUTRITION_LEVEL_STARVING + 50)
|
||||||
H.take_overall_damage(2,0)
|
H.take_overall_damage(2,0)
|
||||||
|
|
||||||
/datum/species/golem/wood/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
|
/datum/species/golem/wood/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H, delta_time, times_fired)
|
||||||
if(chem.type == /datum/reagent/toxin/plantbgone)
|
if(chem.type == /datum/reagent/toxin/plantbgone)
|
||||||
H.adjustToxLoss(3)
|
H.adjustToxLoss(3 * REAGENTS_EFFECT_MULTIPLIER * delta_time)
|
||||||
H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM)
|
H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM * delta_time)
|
||||||
return 1
|
return TRUE
|
||||||
|
|
||||||
//Radioactive puncher, hits for burn but only as hard as human, slightly more durable against brute but less against everything else
|
//Radioactive puncher, hits for burn but only as hard as human, slightly more durable against brute but less against everything else
|
||||||
/datum/species/golem/uranium
|
/datum/species/golem/uranium
|
||||||
@@ -556,16 +556,19 @@
|
|||||||
prefix = "Bananium"
|
prefix = "Bananium"
|
||||||
special_names = null
|
special_names = null
|
||||||
|
|
||||||
var/last_honk = 0
|
/// Cooldown for producing honks
|
||||||
var/honkooldown = 0
|
COOLDOWN_DECLARE(honkooldown)
|
||||||
var/last_banana = 0
|
/// Cooldown for producing bananas
|
||||||
var/banana_cooldown = 100
|
COOLDOWN_DECLARE(banana_cooldown)
|
||||||
var/active = null
|
/// Time between possible banana productions
|
||||||
|
var/banana_delay = 10 SECONDS
|
||||||
|
/// Same as the uranium golem. I'm pretty sure this is vestigial.
|
||||||
|
var/active = FALSE
|
||||||
|
|
||||||
/datum/species/golem/bananium/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
/datum/species/golem/bananium/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||||
..()
|
..()
|
||||||
last_banana = world.time
|
COOLDOWN_START(src, honkooldown, 0)
|
||||||
last_honk = world.time
|
COOLDOWN_START(src, banana_cooldown, banana_delay)
|
||||||
RegisterSignal(C, COMSIG_MOB_SAY, .proc/handle_speech)
|
RegisterSignal(C, COMSIG_MOB_SAY, .proc/handle_speech)
|
||||||
var/obj/item/organ/liver/liver = C.getorganslot(ORGAN_SLOT_LIVER)
|
var/obj/item/organ/liver/liver = C.getorganslot(ORGAN_SLOT_LIVER)
|
||||||
if(liver)
|
if(liver)
|
||||||
@@ -586,21 +589,21 @@
|
|||||||
|
|
||||||
/datum/species/golem/bananium/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style)
|
/datum/species/golem/bananium/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style)
|
||||||
..()
|
..()
|
||||||
if(world.time > last_banana + banana_cooldown && M != H && M.combat_mode)
|
if(COOLDOWN_FINISHED(src, banana_cooldown) && M != H && M.combat_mode)
|
||||||
new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
|
new /obj/item/grown/bananapeel/specialpeel(get_turf(H))
|
||||||
last_banana = world.time
|
COOLDOWN_START(src, banana_cooldown, banana_delay)
|
||||||
|
|
||||||
/datum/species/golem/bananium/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, mob/living/carbon/human/H)
|
/datum/species/golem/bananium/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, mob/living/carbon/human/H)
|
||||||
..()
|
..()
|
||||||
if(world.time > last_banana + banana_cooldown && user != H)
|
if((user != H) && COOLDOWN_FINISHED(src, banana_cooldown))
|
||||||
new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
|
new /obj/item/grown/bananapeel/specialpeel(get_turf(H))
|
||||||
last_banana = world.time
|
COOLDOWN_START(src, banana_cooldown, banana_delay)
|
||||||
|
|
||||||
/datum/species/golem/bananium/on_hit(obj/projectile/P, mob/living/carbon/human/H)
|
/datum/species/golem/bananium/on_hit(obj/projectile/P, mob/living/carbon/human/H)
|
||||||
..()
|
..()
|
||||||
if(world.time > last_banana + banana_cooldown)
|
if(COOLDOWN_FINISHED(src, banana_cooldown))
|
||||||
new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
|
new /obj/item/grown/bananapeel/specialpeel(get_turf(H))
|
||||||
last_banana = world.time
|
COOLDOWN_START(src, banana_cooldown, banana_delay)
|
||||||
|
|
||||||
/datum/species/golem/bananium/spec_hitby(atom/movable/AM, mob/living/carbon/human/H)
|
/datum/species/golem/bananium/spec_hitby(atom/movable/AM, mob/living/carbon/human/H)
|
||||||
..()
|
..()
|
||||||
@@ -611,16 +614,14 @@
|
|||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
|
new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
|
||||||
last_banana = world.time
|
COOLDOWN_START(src, banana_cooldown, banana_delay)
|
||||||
|
|
||||||
/datum/species/golem/bananium/spec_life(mob/living/carbon/human/H)
|
/datum/species/golem/bananium/spec_life(mob/living/carbon/human/H, delta_time, times_fired)
|
||||||
if(!active)
|
if(!active && COOLDOWN_FINISHED(src, honkooldown))
|
||||||
if(world.time > last_honk + honkooldown)
|
active = TRUE
|
||||||
active = 1
|
playsound(get_turf(H), 'sound/items/bikehorn.ogg', 50, TRUE)
|
||||||
playsound(get_turf(H), 'sound/items/bikehorn.ogg', 50, TRUE)
|
COOLDOWN_START(src, honkooldown, rand(2 SECONDS, 8 SECONDS))
|
||||||
last_honk = world.time
|
active = FALSE
|
||||||
honkooldown = rand(20, 80)
|
|
||||||
active = null
|
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/datum/species/golem/bananium/spec_death(gibbed, mob/living/carbon/human/H)
|
/datum/species/golem/bananium/spec_death(gibbed, mob/living/carbon/human/H)
|
||||||
@@ -673,15 +674,15 @@
|
|||||||
if(dominate)
|
if(dominate)
|
||||||
C.RemoveSpell(dominate)
|
C.RemoveSpell(dominate)
|
||||||
|
|
||||||
/datum/species/golem/runic/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
|
/datum/species/golem/runic/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H, delta_time, times_fired)
|
||||||
if(istype(chem, /datum/reagent/water/holywater))
|
if(istype(chem, /datum/reagent/water/holywater))
|
||||||
H.adjustFireLoss(4)
|
H.adjustFireLoss(4 * REAGENTS_EFFECT_MULTIPLIER * delta_time)
|
||||||
H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM)
|
H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM * delta_time)
|
||||||
|
|
||||||
if(chem.type == /datum/reagent/fuel/unholywater)
|
if(chem.type == /datum/reagent/fuel/unholywater)
|
||||||
H.adjustBruteLoss(-4)
|
H.adjustBruteLoss(-4 * REAGENTS_EFFECT_MULTIPLIER * delta_time)
|
||||||
H.adjustFireLoss(-4)
|
H.adjustFireLoss(-4 * REAGENTS_EFFECT_MULTIPLIER * delta_time)
|
||||||
H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM)
|
H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM * delta_time)
|
||||||
|
|
||||||
/datum/species/golem/cloth
|
/datum/species/golem/cloth
|
||||||
name = "Cloth Golem"
|
name = "Cloth Golem"
|
||||||
@@ -995,12 +996,12 @@
|
|||||||
bonechill.Remove(C)
|
bonechill.Remove(C)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/datum/species/golem/bone/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
|
/datum/species/golem/bone/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H, delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(chem.type == /datum/reagent/toxin/bonehurtingjuice)
|
if(chem.type == /datum/reagent/toxin/bonehurtingjuice)
|
||||||
H.adjustStaminaLoss(7.5, 0)
|
H.adjustStaminaLoss(7.5 * REAGENTS_EFFECT_MULTIPLIER * delta_time, 0)
|
||||||
H.adjustBruteLoss(0.5, 0)
|
H.adjustBruteLoss(0.5 * REAGENTS_EFFECT_MULTIPLIER * delta_time, 0)
|
||||||
if(prob(20))
|
if(DT_PROB(10, delta_time))
|
||||||
switch(rand(1, 3))
|
switch(rand(1, 3))
|
||||||
if(1)
|
if(1)
|
||||||
H.say(pick("oof.", "ouch.", "my bones.", "oof ouch.", "oof ouch my bones."), forced = /datum/reagent/toxin/bonehurtingjuice)
|
H.say(pick("oof.", "ouch.", "my bones.", "oof ouch.", "oof ouch my bones."), forced = /datum/reagent/toxin/bonehurtingjuice)
|
||||||
@@ -1009,7 +1010,7 @@
|
|||||||
if(3)
|
if(3)
|
||||||
to_chat(H, "<span class='warning'>Your bones hurt!</span>")
|
to_chat(H, "<span class='warning'>Your bones hurt!</span>")
|
||||||
if(chem.overdosed)
|
if(chem.overdosed)
|
||||||
if(prob(4) && iscarbon(H)) //big oof
|
if(DT_PROB(2, delta_time) && iscarbon(H)) //big oof
|
||||||
var/selected_part = pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) //God help you if the same limb gets picked twice quickly.
|
var/selected_part = pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) //God help you if the same limb gets picked twice quickly.
|
||||||
var/obj/item/bodypart/bp = H.get_bodypart(selected_part) //We're so sorry skeletons, you're so misunderstood
|
var/obj/item/bodypart/bp = H.get_bodypart(selected_part) //We're so sorry skeletons, you're so misunderstood
|
||||||
if(bp)
|
if(bp)
|
||||||
@@ -1020,7 +1021,7 @@
|
|||||||
else
|
else
|
||||||
to_chat(H, "<span class='warning'>Your missing arm aches from wherever you left it.</span>")
|
to_chat(H, "<span class='warning'>Your missing arm aches from wherever you left it.</span>")
|
||||||
H.emote("sigh")
|
H.emote("sigh")
|
||||||
H.reagents.remove_reagent(chem.type, chem.metabolization_rate)
|
H.reagents.remove_reagent(chem.type, chem.metabolization_rate * delta_time)
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
/datum/action/innate/bonechill
|
/datum/action/innate/bonechill
|
||||||
|
|||||||
@@ -41,23 +41,27 @@
|
|||||||
slime_change.Grant(C)
|
slime_change.Grant(C)
|
||||||
//SKYRAT EDIT ADDITION END
|
//SKYRAT EDIT ADDITION END
|
||||||
|
|
||||||
/datum/species/jelly/spec_life(mob/living/carbon/human/H)
|
/datum/species/jelly/spec_life(mob/living/carbon/human/H, delta_time, times_fired)
|
||||||
if(H.stat == DEAD) //can't farm slime jelly from a dead slime/jelly person indefinitely
|
if(H.stat == DEAD) //can't farm slime jelly from a dead slime/jelly person indefinitely
|
||||||
return
|
return
|
||||||
|
|
||||||
if(!H.blood_volume)
|
if(!H.blood_volume)
|
||||||
H.blood_volume += 5
|
H.blood_volume += 2.5 * delta_time
|
||||||
H.adjustBruteLoss(5)
|
H.adjustBruteLoss(2.5 * delta_time)
|
||||||
to_chat(H, "<span class='danger'>You feel empty!</span>")
|
to_chat(H, "<span class='danger'>You feel empty!</span>")
|
||||||
|
|
||||||
if(H.blood_volume < BLOOD_VOLUME_NORMAL)
|
if(H.blood_volume < BLOOD_VOLUME_NORMAL)
|
||||||
if(H.nutrition >= NUTRITION_LEVEL_STARVING)
|
if(H.nutrition >= NUTRITION_LEVEL_STARVING)
|
||||||
H.blood_volume += 3
|
H.blood_volume += 1.5 * delta_time
|
||||||
H.adjust_nutrition(-2.5)
|
H.adjust_nutrition(-1.25 * delta_time)
|
||||||
|
|
||||||
if(H.blood_volume < BLOOD_VOLUME_OKAY)
|
if(H.blood_volume < BLOOD_VOLUME_OKAY)
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
to_chat(H, "<span class='danger'>You feel drained!</span>")
|
to_chat(H, "<span class='danger'>You feel drained!</span>")
|
||||||
|
|
||||||
if(H.blood_volume < BLOOD_VOLUME_BAD)
|
if(H.blood_volume < BLOOD_VOLUME_BAD)
|
||||||
Cannibalize_Body(H)
|
Cannibalize_Body(H)
|
||||||
|
|
||||||
if(regenerate_limbs)
|
if(regenerate_limbs)
|
||||||
regenerate_limbs.UpdateButtonIcon()
|
regenerate_limbs.UpdateButtonIcon()
|
||||||
|
|
||||||
@@ -175,13 +179,14 @@
|
|||||||
/datum/species/jelly/slime/copy_properties_from(datum/species/jelly/slime/old_species)
|
/datum/species/jelly/slime/copy_properties_from(datum/species/jelly/slime/old_species)
|
||||||
bodies = old_species.bodies
|
bodies = old_species.bodies
|
||||||
|
|
||||||
/datum/species/jelly/slime/spec_life(mob/living/carbon/human/H)
|
/datum/species/jelly/slime/spec_life(mob/living/carbon/human/H, delta_time, times_fired)
|
||||||
if(H.blood_volume >= BLOOD_VOLUME_SLIME_SPLIT)
|
if(H.blood_volume >= BLOOD_VOLUME_SLIME_SPLIT)
|
||||||
if(prob(5))
|
if(DT_PROB(2.5, delta_time))
|
||||||
to_chat(H, "<span class='notice'>You feel very bloated!</span>")
|
to_chat(H, "<span class='notice'>You feel very bloated!</span>")
|
||||||
|
|
||||||
else if(H.nutrition >= NUTRITION_LEVEL_WELL_FED)
|
else if(H.nutrition >= NUTRITION_LEVEL_WELL_FED)
|
||||||
H.blood_volume += 3
|
H.blood_volume += 1.5 * delta_time
|
||||||
H.adjust_nutrition(-2.5)
|
H.adjust_nutrition(-1.25 * delta_time)
|
||||||
|
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
ass_image = 'icons/ass/asslizard.png'
|
ass_image = 'icons/ass/asslizard.png'
|
||||||
|
|
||||||
/// Lizards are cold blooded and do not stabilize body temperature naturally
|
/// Lizards are cold blooded and do not stabilize body temperature naturally
|
||||||
/datum/species/lizard/body_temperature_core(mob/living/carbon/human/humi)
|
/datum/species/lizard/body_temperature_core(mob/living/carbon/human/humi, delta_time, times_fired)
|
||||||
return
|
return
|
||||||
|
|
||||||
/datum/species/lizard/random_name(gender,unique,lastname)
|
/datum/species/lizard/random_name(gender,unique,lastname)
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
return randname
|
return randname
|
||||||
|
|
||||||
/datum/species/moth/handle_fire(mob/living/carbon/human/H, no_protection = FALSE)
|
/datum/species/moth/handle_fire(mob/living/carbon/human/H, delta_time, times_fired, no_protection = FALSE)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(.) //if the mob is immune to fire, don't burn wings off.
|
if(.) //if the mob is immune to fire, don't burn wings off.
|
||||||
return
|
return
|
||||||
@@ -59,11 +59,11 @@
|
|||||||
H.dna.features["wings"] = "None"
|
H.dna.features["wings"] = "None"
|
||||||
handle_mutant_bodyparts(H)
|
handle_mutant_bodyparts(H)
|
||||||
|
|
||||||
/datum/species/moth/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
|
/datum/species/moth/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H, delta_time, times_fired)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(chem.type == /datum/reagent/toxin/pestkiller)
|
if(chem.type == /datum/reagent/toxin/pestkiller)
|
||||||
H.adjustToxLoss(3)
|
H.adjustToxLoss(3 * REAGENTS_EFFECT_MULTIPLIER * delta_time)
|
||||||
H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM)
|
H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM * delta_time)
|
||||||
|
|
||||||
/datum/species/moth/check_species_weakness(obj/item/weapon, mob/living/attacker)
|
/datum/species/moth/check_species_weakness(obj/item/weapon, mob/living/attacker)
|
||||||
if(istype(weapon, /obj/item/melee/flyswatter))
|
if(istype(weapon, /obj/item/melee/flyswatter))
|
||||||
|
|||||||
@@ -46,10 +46,10 @@
|
|||||||
mush.remove(C)
|
mush.remove(C)
|
||||||
QDEL_NULL(mush)
|
QDEL_NULL(mush)
|
||||||
|
|
||||||
/datum/species/mush/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
|
/datum/species/mush/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H, delta_time, times_fired)
|
||||||
if(chem.type == /datum/reagent/toxin/plantbgone/weedkiller)
|
if(chem.type == /datum/reagent/toxin/plantbgone/weedkiller)
|
||||||
H.adjustToxLoss(3)
|
H.adjustToxLoss(3 * REAGENTS_EFFECT_MULTIPLIER * delta_time)
|
||||||
H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM)
|
H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM * delta_time)
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
/datum/species/mush/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour)
|
/datum/species/mush/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour)
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user