Merge pull request #7516 from VOREStation/upstream-merge-7045

[MIRROR] Removes limits on eating, centralizes nutrition changing.
This commit is contained in:
Aronai Sieyes
2020-04-29 19:23:55 -04:00
committed by GitHub
62 changed files with 200 additions and 218 deletions
@@ -83,7 +83,7 @@ the artifact triggers the rage.
/datum/modifier/berserk/on_applied()
if(ishuman(holder)) // Most other mobs don't really use nutrition and can't get it back.
holder.nutrition = max(0, holder.nutrition - nutrition_cost)
holder.adjust_nutrition(-nutrition_cost)
holder.visible_message("<span class='critical'>\The [holder] descends into an all consuming rage!</span>")
// End all stuns.
+1 -1
View File
@@ -184,7 +184,7 @@
if(ishuman(holder))
var/mob/living/carbon/human/H = holder
var/starting_nutrition = H.nutrition
H.nutrition = max(0, H.nutrition - 10)
H.adjust_nutrition(-10)
var/healing_amount = starting_nutrition - H.nutrition
if(healing_amount < 0) // If you are eating enough to somehow outpace this, congratulations, you are gluttonous enough to gain a boon.
healing_amount *= -2
@@ -6,16 +6,14 @@
var/turf/T = loc
light_amount = T.get_lumcount() * 5
nutrition += light_amount
adjust_nutrition(light_amount)
if(nutrition > 500)
nutrition = 500
if(light_amount > 2) //if there's enough light, heal
adjustBruteLoss(-1)
adjustFireLoss(-1)
adjustToxLoss(-1)
adjustOxyLoss(-1)
if(!client)
handle_npc(src)
handle_npc(src)
+1 -1
View File
@@ -28,7 +28,7 @@
var/rads = radiation/25
radiation -= rads
nutrition += rads
adjust_nutrition(rads)
heal_overall_damage(rads,rads)
adjustOxyLoss(-(rads))
adjustToxLoss(-(rads))
+9 -7
View File
@@ -36,12 +36,14 @@
/* VOREStation Edit - Duplicated in our code
/mob/living/carbon/Moved(atom/old_loc, direction, forced = FALSE)
. = ..()
if(src.nutrition && src.stat != 2)
src.nutrition -= DEFAULT_HUNGER_FACTOR/10
if(src.m_intent == "run")
src.nutrition -= DEFAULT_HUNGER_FACTOR/10
if((FAT in src.mutations) && src.m_intent == "run" && src.bodytemperature <= 360)
src.bodytemperature += 2
if(.)
if(src.nutrition && src.stat != 2)
adjust_nutrition(-DEFAULT_HUNGER_FACTOR / 10)
if(src.m_intent == "run")
adjust_nutrition(-DEFAULT_HUNGER_FACTOR / 10)
if((FAT in src.mutations) && src.m_intent == "run" && src.bodytemperature <= 360)
src.bodytemperature += 2
// Moving around increases germ_level faster
if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8))
@@ -109,7 +111,7 @@
src.apply_damage(0.4 * shock_damage, BURN, BP_TORSO, used_weapon="Electrocution") //shock the torso more
src.apply_damage(0.2 * shock_damage, BURN, null, used_weapon="Electrocution") //shock a random part!
src.apply_damage(0.2 * shock_damage, BURN, null, used_weapon="Electrocution") //shock a random part!
playsound(loc, "sparks", 50, 1, -1)
if (shock_damage > 15)
src.visible_message(
@@ -1141,6 +1141,7 @@
// Clear out their species abilities.
species.remove_inherent_verbs(src)
holder_type = null
hunger_rate = initial(hunger_rate) //VOREStation Add
species = GLOB.all_species[new_species]
@@ -1184,6 +1185,7 @@
maxHealth = species.total_health
hunger_rate = species.hunger_factor //VOREStation Add
if(LAZYLEN(descriptors))
descriptors = null
@@ -27,7 +27,7 @@
if(can_feel_pain())
if(halloss >= 10) tally += (halloss / 10) //halloss shouldn't slow you down if you can't even feel it
var/hungry = (500 - nutrition)/5 // So overeat would be 100 and default level would be 80
var/hungry = (MAX_NUTRITION - nutrition) / 5
if (hungry >= 70) tally += hungry/50
//VOREstation start
@@ -302,7 +302,7 @@
var/delay_length = round(active_regen_delay * species.active_regen_mult)
if(do_after(src,delay_length))
nutrition -= 200
adjust_nutrition(-200)
for(var/obj/item/organ/I in internal_organs)
if(I.robotic >= ORGAN_ROBOT) // No free robofix.
@@ -345,5 +345,5 @@
active_regen = FALSE
else
to_chat(src, "<span class='critical'>Your regeneration is interrupted!</span>")
nutrition -= 75
adjust_nutrition(-75)
active_regen = FALSE
+4 -12
View File
@@ -275,7 +275,7 @@
if(rad_organ && !rad_organ.is_broken())
var/rads = radiation/25
radiation -= rads
nutrition += rads
adjust_nutrition(rads)
adjustBruteLoss(-(rads))
adjustFireLoss(-(rads))
adjustOxyLoss(-(rads))
@@ -794,7 +794,7 @@
if(bodytemperature < species.cold_level_1) //260.15 is 310.15 - 50, the temperature where you start to feel effects.
if(nutrition >= 2) //If we are very, very cold we'll use up quite a bit of nutriment to heat us up.
nutrition -= 2
adjust_nutrition(-2)
var/recovery_amt = max((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), BODYTEMP_AUTORECOVERY_MINIMUM)
//to_world("Cold. Difference = [body_temperature_difference]. Recovering [recovery_amt]")
// log_debug("Cold. Difference = [body_temperature_difference]. Recovering [recovery_amt]")
@@ -925,15 +925,7 @@
for(var/datum/modifier/mod in modifiers)
if(!isnull(mod.metabolism_percent))
nutrition_reduction *= mod.metabolism_percent
nutrition = max (0, nutrition - nutrition_reduction)
if (nutrition > 450)
if(overeatduration < 600) //capped so people don't take forever to unfat
overeatduration++
else
if(overeatduration > 1)
overeatduration -= 2 //doubled the unfat rate
adjust_nutrition(-nutrition_reduction)
if(noisy == TRUE && nutrition < 250 && prob(10)) //VOREStation edit for hunger noises.
var/sound/growlsound = sound(get_sfx("hunger_sounds"))
@@ -1469,7 +1461,7 @@
if(air_master.current_cycle%3==1)
if(!(M.status_flags & GODMODE))
M.adjustBruteLoss(5)
nutrition += 10
adjust_nutrition(10)
/mob/living/carbon/human/proc/handle_changeling()
if(mind && mind.changeling)
@@ -60,19 +60,13 @@
//Overriding carbon move proc that forces default hunger factor
/mob/living/carbon/Moved(atom/old_loc, direction, forced = FALSE)
. = ..()
if(src.nutrition && src.stat != 2)
if(ishuman(src))
var/mob/living/carbon/human/M = src
if(M.stat != 2 && M.nutrition > 0)
M.nutrition -= M.species.hunger_factor/10
if(M.m_intent == "run")
M.nutrition -= M.species.hunger_factor/10
if(M.nutrition < 0)
M.nutrition = 0
else
src.nutrition -= DEFAULT_HUNGER_FACTOR/10
if(src.m_intent == "run")
src.nutrition -= DEFAULT_HUNGER_FACTOR/10
// Technically this does mean being dragged takes nutrition
if(stat != DEAD)
adjust_nutrition(hunger_rate/-10)
if(m_intent == "run")
adjust_nutrition(hunger_rate/-10)
// Moving around increases germ_level faster
if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8))
germ_level++
@@ -217,7 +217,7 @@
H.adjustFireLoss(-(light_amount * co2buff)) //this won't let you tank environmental damage from fire. MAYBE cold until your body temp drops.
if(H.nutrition < (200 + 400*co2buff)) //if no CO2, a fully lit tile gives them 1/tick up to 200. With CO2, potentially up to 600.
H.nutrition += (light_amount*(1+co2buff*5))
H.adjust_nutrition(light_amount*(1+co2buff*5))
// Too much poison in the air.
if(toxins_pp > safe_toxins_max)
@@ -357,7 +357,7 @@
var/short_emote_descriptor = list("picks", "grabs")
var/self_emote_descriptor = list("grab", "pick", "snatch")
var/fruit_type = "apple"
var/mob/organ_owner = null
var/mob/living/organ_owner = null
var/gen_cost = 0.5
/obj/item/organ/internal/fruitgland/New()
@@ -382,7 +382,7 @@
to_chat(organ_owner, "<span class='warning'>[pick(full_message)]</span>")
/obj/item/organ/internal/fruitgland/proc/do_generation()
organ_owner.nutrition -= gen_cost
organ_owner.adjust_nutrition(-gen_cost)
for(var/reagent in generated_reagents)
reagents.add_reagent(reagent, generated_reagents[reagent])
@@ -189,32 +189,34 @@ var/datum/species/shapeshifter/promethean/prometheans
if(!(H.shoes || (H.wear_suit && (H.wear_suit.body_parts_covered & FEET))))
for(var/obj/O in T)
O.clean_blood()
H.nutrition = min(500, max(0, H.nutrition + rand(5, 15)))
H.adjust_nutrition(rand(5, 15))
if (istype(T, /turf/simulated))
var/turf/simulated/S = T
T.clean_blood()
S.dirt = 0
H.nutrition = max(H.nutrition, min(500, H.nutrition + rand(15, 30))) //VOREStation Edit: Gives nutrition up to a point instead of being capped
//VOREStation Edit Start
H.adjust_nutrition(H.nutrition < 500 ? rand(15, 30) : 0)
if(H.clean_blood(1))
H.nutrition = max(H.nutrition, min(500, H.nutrition + rand(15, 30))) //VOREStation Edit: Gives nutrition up to a point instead of being capped
H.adjust_nutrition(H.nutrition < 500 ? rand(15, 30) : 0)
if(H.r_hand)
if(H.r_hand.clean_blood())
H.nutrition = max(H.nutrition, min(500, H.nutrition + rand(15, 30))) //VOREStation Edit: Gives nutrition up to a point instead of being capped
H.adjust_nutrition(H.nutrition < 500 ? rand(15, 30) : 0)
if(H.l_hand)
if(H.l_hand.clean_blood())
H.nutrition = max(H.nutrition, min(500, H.nutrition + rand(15, 30))) //VOREStation Edit: Gives nutrition up to a point instead of being capped
H.adjust_nutrition(H.nutrition < 500 ? rand(15, 30) : 0)
if(H.head)
if(H.head.clean_blood())
H.update_inv_head(0)
H.nutrition = max(H.nutrition, min(500, H.nutrition + rand(15, 30))) //VOREStation Edit: Gives nutrition up to a point instead of being capped
H.adjust_nutrition(H.nutrition < 500 ? rand(15, 30) : 0)
if(H.wear_suit)
if(H.wear_suit.clean_blood())
H.update_inv_wear_suit(0)
H.nutrition = max(H.nutrition, min(500, H.nutrition + rand(15, 30))) //VOREStation Edit: Gives nutrition up to a point instead of being capped
H.adjust_nutrition(H.nutrition < 500 ? rand(15, 30) : 0)
if(H.w_uniform)
if(H.w_uniform.clean_blood())
H.update_inv_w_uniform(0)
H.nutrition = max(H.nutrition, min(500, H.nutrition + rand(15, 30))) //VOREStation Edit: Gives nutrition up to a point instead of being capped
H.adjust_nutrition(H.nutrition < 500 ? rand(15, 30) : 0)
//VOREStation Edit End
//End cleaning code.
var/datum/gas_mixture/environment = T.return_air()
@@ -297,8 +299,7 @@ var/datum/species/shapeshifter/promethean/prometheans
if(ToxReg)
strain_negation += to_pay * max(0, (1 - ToxReg.get_strain_percent()))
H.nutrition -= (3 * nutrition_cost) //Costs Nutrition when damage is being repaired, corresponding to the amount of damage being repaired.
H.nutrition = max(0, H.nutrition) //Ensure it's not below 0.
H.adjust_nutrition(-(3 * nutrition_cost)) // Costs Nutrition when damage is being repaired, corresponding to the amount of damage being repaired.
var/agony_to_apply = ((1 / starve_mod) * (nutrition_cost - strain_negation)) //Regenerating damage causes minor pain over time, if the organs responsible are nonexistant or too high on strain. Small injures will be no issue, large ones will cause problems.
@@ -586,11 +586,9 @@
if(isturf(H.loc)) //else, there's considered to be no light
var/turf/T = H.loc
light_amount = T.get_lumcount() * 10
H.nutrition += light_amount
H.adjust_nutrition(light_amount)
H.shock_stage -= light_amount
if(H.nutrition > 450)
H.nutrition = 450
if(light_amount >= 3) //if there's enough light, heal
H.adjustBruteLoss(-(round(light_amount/2)))
H.adjustFireLoss(-(round(light_amount/2)))
@@ -390,7 +390,7 @@
src.visible_message("<font color='red'><b>[src] suddenly extends their fangs and plunges them down into [B]'s neck!</b></font>")
B.apply_damage(5, BRUTE, BP_HEAD) //You're getting fangs pushed into your neck. What do you expect????
B.drip(80) //Remove enough blood to make them a bit woozy, but not take oxyloss.
src.nutrition += 400
adjust_nutrition(400)
sleep(50)
B.drip(1)
sleep(50)
@@ -836,7 +836,7 @@
if(!C.anchored && !C.pulledby) //Not currently anchored, and not pulled by anyone.
C.anchored = 1 //This is the only way to stop the inertial_drift.
C.nutrition -= 25
C.adjust_nutrition(-25)
update_floating()
to_chat(C, "<span class='notice'>You hover in place.</span>")
spawn(6) //.6 seconds.
@@ -376,7 +376,7 @@
icobase_tail = 1
inherent_verbs = list(
/mob/proc/weaveWebBindings)
/mob/living/proc/weaveWebBindings)
min_age = 18
max_age = 80
@@ -74,7 +74,7 @@
"uses their tongue to disinfect \a [W.desc] on [M]'s [affecting.name].",
"licks \a [W.desc] on [M]'s [affecting.name], cleaning it.")]</span>", \
"<span class='notice'>You treat \a [W.desc] on [M]'s [affecting.name] with your antiseptic saliva.</span>" )
nutrition -= 20
adjust_nutrition(-20)
W.salve()
W.bandage()
W.disinfect()
+4 -1
View File
@@ -1086,7 +1086,7 @@ default behaviour is:
if(getBruteLoss() < 50)
adjustBruteLoss(3)
else
nutrition -= 40
adjust_nutrition(-40)
adjustToxLoss(-3)
spawn(350)
@@ -1362,6 +1362,9 @@ default behaviour is:
/mob/living/proc/needs_to_breathe()
return !isSynthetic()
/mob/living/proc/adjust_nutrition(amount)
nutrition = between(0, nutrition + amount, max_nutrition)
/mob/living/vv_get_header()
. = ..()
. += {"
@@ -18,6 +18,9 @@
var/brainloss = 0 //'Retardation' damage caused by someone hitting you in the head with a bible or being infected with brainrot.
var/halloss = 0 //Hallucination damage. 'Fake' damage obtained through hallucinating or the holodeck. Sleeping should cause it to wear off.
var/nutrition = 400
var/max_nutrition = MAX_NUTRITION
var/hallucination = 0 //Directly affects how long a mob will hallucinate for
var/list/atom/hallucinations = list() //A list of hallucinated people that try to attack the mob. See /obj/effect/fake_attacker in hallucinations.dm
@@ -5,6 +5,7 @@
var/ooc_notes = null
var/obj/structure/mob_spawner/source_spawner = null
appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER
var/hunger_rate = DEFAULT_HUNGER_FACTOR
//custom say verbs
var/custom_say = null
@@ -1,8 +1,7 @@
// Handles hunger, starvation, growth, and eatting humans.
// Might be best to make this a /mob/living proc and override.
/mob/living/simple_mob/slime/xenobio/proc/adjust_nutrition(input, var/heal = 1)
nutrition = between(0, nutrition + input, get_max_nutrition())
/mob/living/simple_mob/slime/xenobio/adjust_nutrition(input, var/heal = 1)
..(input)
if(input > 0)
// Gain around one level per 50 nutrition.
@@ -19,10 +18,6 @@
adjustOxyLoss(-input * 0.2)
adjustCloneLoss(-input * 0.2)
/mob/living/simple_mob/slime/xenobio/proc/get_max_nutrition() // Can't go above it
return is_adult ? 1200 : 1000
/mob/living/simple_mob/slime/xenobio/proc/get_grow_nutrition() // Above it we grow, below it we can eat
return is_adult ? 1000 : 800
@@ -4,6 +4,7 @@
desc = "The most basic of slimes. The grey slime has no remarkable qualities, however it remains one of the most useful colors for scientists."
layer = MOB_LAYER + 1 // Need them on top of other mobs or it looks weird when consuming something.
ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime // This should never be changed for xenobio slimes.
max_nutrition = 1000
var/is_adult = FALSE // Slimes turn into adults when fed enough. Adult slimes are somewhat stronger, and can reproduce if fed enough.
var/maxHealth_adult = 200
var/power_charge = 0 // Disarm attacks can shock someone if high/lucky enough.
@@ -101,6 +102,7 @@
melee_damage_lower = round(melee_damage_lower * 2) // 20
melee_damage_upper = round(melee_damage_upper * 2) // 30
maxHealth = maxHealth_adult
max_nutrition = 1200
amount_grown = 0
update_icon()
update_name()
-2
View File
@@ -112,9 +112,7 @@
var/bodytemperature = 310.055 //98.7 F
var/drowsyness = 0.0//Carbon
var/charges = 0.0
var/nutrition = 400.0//Carbon
var/overeatduration = 0 // How long this guy is overeating //Carbon
var/paralysis = 0.0
var/stunned = 0.0
var/weakened = 0.0